{"version":3,"sources":["@webhare/env/src/envbackend.ts","@webhare/env/src/navigation.ts","@webhare/std/src/quacks.ts","@webhare/std/src/datetime.ts","@webhare/std/src/promises.ts","@webhare/std/src/finmath.ts","@webhare/std/src/money.ts","@webhare/std/src/types.ts","@webhare/std/src/strings.ts","@webhare/std/src/platformbased.ts","@webhare/std/src/collections.ts","@webhare/std/src/utils.ts","@webhare/std/src/localmutex.ts","@webhare/std/src/std.ts","@webhare/env/src/fetchdebug.ts","@webhare/env/src/env.ts","@webhare/dompack/src/tree.ts","@webhare/gettid/src/hooks.ts","@webhare/gettid/src/internal.ts","@webhare/imgtransform/src/smartcrop.js","mod::ceremonymedia/node_modules/bowser/es5.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/extends.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/asyncToGenerator.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/typeof.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/regeneratorRuntime.js","mod::ceremonymedia/node_modules/@babel/runtime/regenerator/index.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/setPrototypeOf.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/inheritsLoose.js","mod::ceremonymedia/node_modules/promise-polyfill/lib/index.js","mod::ceremonymedia/node_modules/events/events.js","mod::ceremonymedia/node_modules/lodash/_listCacheClear.js","mod::ceremonymedia/node_modules/lodash/eq.js","mod::ceremonymedia/node_modules/lodash/_assocIndexOf.js","mod::ceremonymedia/node_modules/lodash/_listCacheDelete.js","mod::ceremonymedia/node_modules/lodash/_listCacheGet.js","mod::ceremonymedia/node_modules/lodash/_listCacheHas.js","mod::ceremonymedia/node_modules/lodash/_listCacheSet.js","mod::ceremonymedia/node_modules/lodash/_ListCache.js","mod::ceremonymedia/node_modules/lodash/_stackClear.js","mod::ceremonymedia/node_modules/lodash/_stackDelete.js","mod::ceremonymedia/node_modules/lodash/_stackGet.js","mod::ceremonymedia/node_modules/lodash/_stackHas.js","mod::ceremonymedia/node_modules/lodash/_freeGlobal.js","mod::ceremonymedia/node_modules/lodash/_root.js","mod::ceremonymedia/node_modules/lodash/_Symbol.js","mod::ceremonymedia/node_modules/lodash/_getRawTag.js","mod::ceremonymedia/node_modules/lodash/_objectToString.js","mod::ceremonymedia/node_modules/lodash/_baseGetTag.js","mod::ceremonymedia/node_modules/lodash/isObject.js","mod::ceremonymedia/node_modules/lodash/isFunction.js","mod::ceremonymedia/node_modules/lodash/_coreJsData.js","mod::ceremonymedia/node_modules/lodash/_isMasked.js","mod::ceremonymedia/node_modules/lodash/_toSource.js","mod::ceremonymedia/node_modules/lodash/_baseIsNative.js","mod::ceremonymedia/node_modules/lodash/_getValue.js","mod::ceremonymedia/node_modules/lodash/_getNative.js","mod::ceremonymedia/node_modules/lodash/_Map.js","mod::ceremonymedia/node_modules/lodash/_nativeCreate.js","mod::ceremonymedia/node_modules/lodash/_hashClear.js","mod::ceremonymedia/node_modules/lodash/_hashDelete.js","mod::ceremonymedia/node_modules/lodash/_hashGet.js","mod::ceremonymedia/node_modules/lodash/_hashHas.js","mod::ceremonymedia/node_modules/lodash/_hashSet.js","mod::ceremonymedia/node_modules/lodash/_Hash.js","mod::ceremonymedia/node_modules/lodash/_mapCacheClear.js","mod::ceremonymedia/node_modules/lodash/_isKeyable.js","mod::ceremonymedia/node_modules/lodash/_getMapData.js","mod::ceremonymedia/node_modules/lodash/_mapCacheDelete.js","mod::ceremonymedia/node_modules/lodash/_mapCacheGet.js","mod::ceremonymedia/node_modules/lodash/_mapCacheHas.js","mod::ceremonymedia/node_modules/lodash/_mapCacheSet.js","mod::ceremonymedia/node_modules/lodash/_MapCache.js","mod::ceremonymedia/node_modules/lodash/_stackSet.js","mod::ceremonymedia/node_modules/lodash/_Stack.js","mod::ceremonymedia/node_modules/lodash/_defineProperty.js","mod::ceremonymedia/node_modules/lodash/_baseAssignValue.js","mod::ceremonymedia/node_modules/lodash/_assignMergeValue.js","mod::ceremonymedia/node_modules/lodash/_createBaseFor.js","mod::ceremonymedia/node_modules/lodash/_baseFor.js","mod::ceremonymedia/node_modules/lodash/_cloneBuffer.js","mod::ceremonymedia/node_modules/lodash/_Uint8Array.js","mod::ceremonymedia/node_modules/lodash/_cloneArrayBuffer.js","mod::ceremonymedia/node_modules/lodash/_cloneTypedArray.js","mod::ceremonymedia/node_modules/lodash/_copyArray.js","mod::ceremonymedia/node_modules/lodash/_baseCreate.js","mod::ceremonymedia/node_modules/lodash/_overArg.js","mod::ceremonymedia/node_modules/lodash/_getPrototype.js","mod::ceremonymedia/node_modules/lodash/_isPrototype.js","mod::ceremonymedia/node_modules/lodash/_initCloneObject.js","mod::ceremonymedia/node_modules/lodash/isObjectLike.js","mod::ceremonymedia/node_modules/lodash/_baseIsArguments.js","mod::ceremonymedia/node_modules/lodash/isArguments.js","mod::ceremonymedia/node_modules/lodash/isArray.js","mod::ceremonymedia/node_modules/lodash/isLength.js","mod::ceremonymedia/node_modules/lodash/isArrayLike.js","mod::ceremonymedia/node_modules/lodash/isArrayLikeObject.js","mod::ceremonymedia/node_modules/lodash/stubFalse.js","mod::ceremonymedia/node_modules/lodash/isBuffer.js","mod::ceremonymedia/node_modules/lodash/isPlainObject.js","mod::ceremonymedia/node_modules/lodash/_baseIsTypedArray.js","mod::ceremonymedia/node_modules/lodash/_baseUnary.js","mod::ceremonymedia/node_modules/lodash/_nodeUtil.js","mod::ceremonymedia/node_modules/lodash/isTypedArray.js","mod::ceremonymedia/node_modules/lodash/_safeGet.js","mod::ceremonymedia/node_modules/lodash/_assignValue.js","mod::ceremonymedia/node_modules/lodash/_copyObject.js","mod::ceremonymedia/node_modules/lodash/_baseTimes.js","mod::ceremonymedia/node_modules/lodash/_isIndex.js","mod::ceremonymedia/node_modules/lodash/_arrayLikeKeys.js","mod::ceremonymedia/node_modules/lodash/_nativeKeysIn.js","mod::ceremonymedia/node_modules/lodash/_baseKeysIn.js","mod::ceremonymedia/node_modules/lodash/keysIn.js","mod::ceremonymedia/node_modules/lodash/toPlainObject.js","mod::ceremonymedia/node_modules/lodash/_baseMergeDeep.js","mod::ceremonymedia/node_modules/lodash/_baseMerge.js","mod::ceremonymedia/node_modules/lodash/identity.js","mod::ceremonymedia/node_modules/lodash/_apply.js","mod::ceremonymedia/node_modules/lodash/_overRest.js","mod::ceremonymedia/node_modules/lodash/constant.js","mod::ceremonymedia/node_modules/lodash/_baseSetToString.js","mod::ceremonymedia/node_modules/lodash/_shortOut.js","mod::ceremonymedia/node_modules/lodash/_setToString.js","mod::ceremonymedia/node_modules/lodash/_baseRest.js","mod::ceremonymedia/node_modules/lodash/_isIterateeCall.js","mod::ceremonymedia/node_modules/lodash/_createAssigner.js","mod::ceremonymedia/node_modules/lodash/mergeWith.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/getPrototypeOf.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/isNativeFunction.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/construct.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/wrapNativeSuper.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/toPrimitive.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/toPropertyKey.js","mod::ceremonymedia/node_modules/@babel/runtime/helpers/createClass.js","mod::ceremonymedia/node_modules/amazon-ivs-player/dist/index.js","@webhare/frontend/src/init.ts","@webhare/env/src/init-browser.ts","@webhare/tsrun/src/polyfills.ts","mod::publisher/js/internal/polyfills/iterator-helpers.ts","@webhare/dompack/src/busy.ts","mod::system/js/dompack/src/events.ts","@webhare/dompack/src/dompack.ts","mod::system/js/dompack/src/tree.ts","mod::system/js/dompack/src/create.ts","mod::system/js/dompack/src/components.ts","@webhare/dompack/src/cookiebuilder.ts","@webhare/dompack/src/storage.ts","@webhare/dompack/src/browser.ts","mod::publisher/js/internal/polyfills/publisher-integration.ts","mod::ceremonymedia/node_modules/preact/src/constants.js","mod::ceremonymedia/node_modules/preact/src/util.js","mod::ceremonymedia/node_modules/preact/src/options.js","mod::ceremonymedia/node_modules/preact/src/create-element.js","mod::ceremonymedia/node_modules/preact/src/component.js","mod::ceremonymedia/node_modules/preact/src/diff/props.js","mod::ceremonymedia/node_modules/preact/src/create-context.js","mod::ceremonymedia/node_modules/preact/src/diff/children.js","mod::ceremonymedia/node_modules/preact/src/diff/index.js","mod::ceremonymedia/node_modules/preact/src/render.js","mod::ceremonymedia/node_modules/preact/src/clone-element.js","mod::ceremonymedia/node_modules/preact/src/diff/catch-error.js","mod::ceremonymedia/node_modules/preact/devtools/src/index.js","mod::ceremonymedia/node_modules/preact/devtools/src/devtools.js","mod::ceremonymedia/node_modules/preact/debug/src/check-props.js","mod::ceremonymedia/node_modules/preact/debug/src/component-stack.js","mod::ceremonymedia/node_modules/preact/debug/src/debug.js","mod::ceremonymedia/node_modules/preact/debug/src/constants.js","mod::ceremonymedia/node_modules/preact/debug/src/util.js","mod::ceremonymedia/node_modules/preact/debug/src/index.js","mod::system/js/dompack/extra/merge.ts","mod::publisher/js/forms/internal/customvalidation.ts","mod::system/js/dompack/index.ts","mod::system/js/dompack/types/datetime.ts","mod::system/js/dompack/browserfix/focus.ts","mod::publisher/js/forms/formbase.ts","@webhare/forms/src/registeredfield.ts","@webhare/gettid/src/gettid.ts","mod::publisher/js/forms/fields/arrayfield.ts","@webhare/forms/src/fieldmap.ts","mod::publisher/js/forms/fields/addressfield.ts","@webhare/forms/src/address.ts","@webhare/jsonrpc-client/src/jsonrpc-client.ts","node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js","@webhare/js-api-tools/src/stacktracing.ts","@webhare/js-api-tools/src/levenshtein.ts","@webhare/forms/src/formservice.ts","mod::publisher/js/forms/internal/datehelpers.ts","mod::publisher/js/forms/internal/webharefields.tsx","@webhare/forms/src/jsformelement.ts","@webhare/forms/src/domsupport.ts","mod::publisher/js/forms/internal/emailvalidation.tsx","mod::system/js/dompack/src/debug.ts","mod::system/js/dompack/extra/browser.ts","mod::system/js/dompack/extra/keyboard.ts","mod::system/js/dompack/api/dialog.ts","mod::publisher/js/forms/rpc.ts","@webhare/upload/src/upload.ts","mod::publisher/js/captcha/__captcha.lang.json","mod::publisher/js/captcha/api.ts","mod::publisher/js/forms/internal/form.lang.json","mod::publisher/js/forms/fields/fileeditbase.ts","mod::publisher/js/forms/fields/upload.tsx","mod::publisher/js/forms/fields/imgedit.ts","@webhare/forms/src/registration.ts","@webhare/forms/src/forms.ts","mod::publisher/js/forms/internal/datepicker.tsx","mod::publisher/js/forms/internal/datetime-valueprops.ts","mod::publisher/js/forms/fields/datetime.tsx","mod::publisher/js/captcha/google-recaptcha.tsx","mod::publisher/js/forms/fields/captchafield.ts","mod::publisher/js/forms/index.ts","mod::consilio/js/pxl.ts","@webhare/frontend/src/pxl.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/forms/forms.ts","mod::publisher/js/internal/rtd.lang.json","mod::publisher/js/analytics/consenthandler.ts","mod::publisher/js/richcontent/video.ts","mod::ceremonymedia/node_modules/preact/hooks/src/index.js","mod::ceremonymedia/js/util.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/spinner.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/dialogs.tsx","@webhare/frontend/src/auth.ts","@webhare/rpc/src/rpc.ts","@webhare/auth/src/shared.ts","@webhare/frontend/src/gtm.ts","@webhare/frontend/src/frontend.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/model.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/settings/ceremony-location.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/shared-client.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/shared-upload.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/support.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/simplescreen.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/medialisteditor.tsx","mod::tollium/js/icons.ts","mod::tollium/web/ui/components/toolbar/toolbars.tsx","mod::system/js/dompack/browserfix/movable.ts","@webhare/imgtransform/src/crop.tsx","@webhare/imgtransform/src/surfacetool.ts","@webhare/imgtransform/src/toolbarpanel.ts","@webhare/imgtransform/src/refpoint.tsx","@webhare/imgtransform/src/scaling.ts","@webhare/imgtransform/src/surface.tsx","mod::tollium/web/ui/components/imageeditor/imageeditor.lang.json","mod::tollium/web/ui/common.lang.json","@webhare/imgtransform/src/imageeditor.tsx","@webhare/imgtransform/src/imgtransform.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/components.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/imagecropper.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/frontend.lang.json","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/timeindicator.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/form.tsx","mod::tollium/js/gettid.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/selectimagefromlibrary.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/audiopreviewbutton.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/selectmediafromlibrary.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/audioplayer.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/moment-tile.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/addmoment.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/pagination/index.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/drag-drop-touch.js","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/moments.tsx","mod::ceremonymedia/webdesigns/documentation/sidebar/sidebar.ts","mod::ceremonymedia/webdesigns/ceremonysite/frontend/components/documentation/index.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/editor-header.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/language.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/editor-login.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/account.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/access.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/account-dialog.tsx","mod::ceremonymedia/node_modules/@preact/signals-core/src/index.ts","mod::ceremonymedia/node_modules/@preact/signals/src/index.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/stream.tsx","node_modules/temporal-polyfill/chunks/internal.js","node_modules/temporal-polyfill/chunks/classApi.js","node_modules/temporal-polyfill/global.esm.js","mod::ceremonymedia/webdesigns/ceremonysite/pages/editor/editor.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/condolence-backend.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/condolence.lang.json","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/dialog-postmessage.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/dialog-viewimage.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/forms.tsx","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/dompack-masonry.ts","mod::ceremonymedia/webdesigns/ceremonysite/pages/condolence/condolence.tsx","mod::ceremonymedia/webdesigns/ceremonysite/frontend/frontend.tsx","/entrypoint.js"],"sourcesContent":["//We implement the backend version of getWHDebugFlags so bridge can access us without going through a recursive dep\n\nimport type { DTAPStage } from \"./concepts\";\n\n/// List global polyfills currently active. This may be needed to align TypeScript hosts configuration\nexport const globalPolyfills: string[] = [];\n\n/// An object with string keys and typed values\nexport interface WellKnownFlags {\n  /** Log RPcs */\n  rpc?: boolean;\n  /** Log web traffic */\n  wrq?: boolean;\n  /** Autoprofile */\n  apr?: boolean;\n  /** IPC */\n  ipc?: boolean;\n  /** async */\n  async?: boolean;\n}\nexport type DebugFlags = WellKnownFlags & { [key: string]: boolean | undefined };\n\nexport type DebugConfig = {\n  tags: readonly string[];\n  outputsession: string;\n  context: string;\n};\n\nconst settingschangedcallbacks = new Array<() => void>;\n\n/* Global debug flags are set by `wh debug`, local flags are prefilled by environment variables.\n   Edits to the debug flags will be applied to the local flags (unless setDebugFlagsOverrideCB returns\n   override records).\n*/\nconst globalDebugFlags: DebugFlags = {}, localDebugFlags: DebugFlags = {};\n\n/** Returns the flag override records. The first record is examined first, then the second, etc. */\nlet debugFlagsOverridesCB: undefined | (() => DebugFlags[]);\n\n/** Override the debug flag override getter. */\nexport function setDebugFlagsOverrideCB(cb: undefined | (() => DebugFlags[])) {\n  debugFlagsOverridesCB = cb;\n}\n\n/* Proxy handler for the published debug flags. Uses the override records (with the first record\n   examined first, then the second, etc.) to override the flags from baseDebugFlags. Setting to `true` sets\n   the flag, `false` disables it and setting to `undefined` has the same effect as deleting the property in the\n   current top record (exposing any value from a lower record, like the debug settings from `wh debug`).\n*/\nclass DebugFlagsProxyHandler implements ProxyHandler<DebugFlags> {\n  private getRecordList(): DebugFlags[] {\n    return [...debugFlagsOverridesCB?.() ?? [], localDebugFlags, globalDebugFlags];\n  }\n\n  get(target: DebugFlags, p: string) {\n    for (const record of this.getRecordList())\n      if (p in record && typeof record[p] !== \"undefined\")\n        return record[p];\n    return undefined;\n  }\n  has(target: DebugFlags, p: string): boolean {\n    return this.get(target, p) !== undefined;\n  }\n  ownKeys(target: DebugFlags): Array<string | symbol> {\n    const keys = new Array<string | symbol>;\n    for (const record of this.getRecordList())\n      for (const key of Reflect.ownKeys(record))\n        if (typeof key === \"string\" && record[key] !== undefined && !keys.includes(key))\n          keys.push(key);\n    return keys;\n  }\n  set(target: DebugFlags, p: string, newValue: boolean | undefined): boolean {\n    const toModify = this.getRecordList()[0];\n    if (typeof newValue === \"boolean\")\n      toModify[p] = newValue;\n    else\n      delete toModify[p];\n\n    runSettingsCallbacks();\n    return true;\n  }\n  deleteProperty(target: DebugFlags, p: string): boolean {\n    const toModify = this.getRecordList()[0];\n    delete toModify[p];\n\n    runSettingsCallbacks();\n    return true;\n  }\n  getOwnPropertyDescriptor(target: DebugFlags, p: string): PropertyDescriptor | undefined {\n    const value = this.get(target, p);\n    return value !== undefined ? { enumerable: true, value, configurable: true } : undefined;\n  }\n}\n\nexport const debugFlags = new Proxy<DebugFlags>({\n  [Symbol.for('nodejs.util.inspect.custom')]: formatForConsoleLogs\n}, new DebugFlagsProxyHandler());\n\nfunction formatForConsoleLogs() {\n  return `DebugFlags [${[...Object.keys(debugFlags)].filter(key => debugFlags[key]).join(\", \")}]`;\n}\n\nfunction runSettingsCallbacks() {\n  for (const cb of [...settingschangedcallbacks]) {\n    try {\n      cb();\n    } catch (e) {\n      console.error(\"Error invoking settings change callback\", cb?.name, e);\n      //ignore, debugFlags can change due to external updates so they're basically signal handlers and there's no real point in crashing whatever was really running\n    }\n  }\n}\n\n/** Update the debugconfig as present in the system configuration record\n    @param settings - debugconfig cell of the system configuration record\n*/\nexport function updateDebugConfig(settings: DebugConfig | null) {\n  const oldenabledflags = Object.keys(globalDebugFlags).sort();\n  const newenabledflags = settings?.tags ? [...settings.tags].sort() : [];\n\n  if (oldenabledflags.join(\",\") !== newenabledflags.join(\",\")) {\n    for (const flag of newenabledflags)\n      globalDebugFlags[flag] = true;\n    for (const flag of oldenabledflags)\n      if (!newenabledflags.includes(flag))\n        delete globalDebugFlags[flag];\n\n    runSettingsCallbacks();\n  }\n  if (debugFlags.async && Error.stackTraceLimit < 100)\n    Error.stackTraceLimit = 100;\n}\n\nexport function registerDebugConfigChangedCallback(cb: () => void) {\n  settingschangedcallbacks.push(cb);\n}\n\n/** DTAP stage set for this WebHare */\nlet dtapStage: DTAPStage = \"production\";\n\n/** @deprecated We now recommend checking dtapStage against production/acceptance Explicitly */\nlet isLive: boolean = dtapStage === \"production\" || dtapStage === \"acceptance\";\n\n/** The backend base URL. Used for eg. autoconfiguring JSON/RPC */\nlet backendBase = \"\";\n\n//deprecated variants\n/** @deprecated For WH5.4 and up use 'dtapStage' */\nlet dtapstage: DTAPStage = dtapStage;\n/** @deprecated For WH5.4 and up compare 'dtapStage' for production or acceptance */\nlet islive: boolean = isLive;\n\nexport function initEnv(setDtapStage: DTAPStage, setBackendBase: string) {\n  dtapStage = setDtapStage;\n  isLive = dtapStage === \"production\" || dtapStage === \"acceptance\";\n  backendBase = setBackendBase;\n\n  dtapstage = dtapStage;\n  islive = isLive;\n}\n\nexport { dtapStage, isLive, backendBase };\nexport { dtapstage, islive }; //deprecated variants\n","type FormValueList = Array<{ name: string; value: string }>;\n\n/** A navigation instruction encapsulates the next step that a client has to take in eg. a login, payment or wizard flow.\n * Use navigateTo to execute a navigation in a browser\n*/\n\nexport type NavigateInstruction =\n  {\n    type: \"redirect\";\n    url: string;\n  } | {\n    type: \"form\";\n    form: {\n      action: string;\n      vars: FormValueList;\n      method?: \"POST\";\n    };\n  } | {\n    type: \"reload\";\n  } | {\n    type: \"postmessage\";\n    message: unknown;\n    target?: \"parent\" | \"opener\";\n  } | {\n    type: \"close\";\n  };\n\nfunction submitForm(action: string, values: FormValueList, method = \"POST\") {\n  const form = document.createElement(\"form\");\n  form.method = method;\n  form.action = action;\n  form.append(...values.map(item => {\n    const input = document.createElement(\"input\");\n    input.type = \"hidden\";\n    input.name = item.name;\n    input.value = item.value;\n    return input;\n  }));\n  document.body.appendChild(form);\n  form.submit();\n}\n\n/** Navigate to a specific URL (may be hookable by other scripts)\n* @param navigation - Target URL or NavigateInstruction\n*/\nexport function navigateTo(navigation: string | NavigateInstruction) {\n  if (typeof window === \"undefined\")\n    throw new Error(`navigateTo() is not available in this environment`);\n\n  if (typeof navigation === \"string\")\n    navigation = { type: \"redirect\", url: navigation };\n\n  switch (navigation.type) {\n    case \"redirect\":\n      {\n        location.href = navigation.url;\n      } break;\n\n    case \"form\":\n      {\n        submitForm(navigation.form.action, navigation.form.vars, navigation.form.method);\n      } break;\n\n    case \"reload\":\n      {\n        window.location.reload();\n      } break;\n\n    case \"postmessage\":\n      {\n        if (!navigation.target || navigation.target === \"parent\")\n          window.parent.postMessage(navigation.message, \"*\");\n        else if (navigation.target === \"opener\") {\n          window.opener.postMessage(navigation.message, \"*\");\n          window.close();\n        } else\n          throw Error(\"Unknown postmessage target '\" + navigation.target + \"' received\");\n      } break;\n\n    case \"close\":\n      {\n        window.close();\n      } break;\n\n    default:\n      throw new Error(`Unknown navigation type '${(navigation as { type: string }).type}'`);\n  }\n}\n","//TODO can we replace ourselves with nodejs util.types in a pure NodeJS environment?\n\nimport type { Temporal } from \"temporal-polyfill\";\nimport type { Money } from \"./money\";\n\nexport function getWHType(obj: unknown): string | null { //not exporting this directly as we hope JS comes up with better solutions for instanceOf not being compatible with realms/reloading\n  // Ideally we'd use symbol but it breaks tree shaking in esbuild, so this is our workaround. Reported as https://github.com/evanw/esbuild/issues/3940\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Can't cleanly type this it seems and it's low level anyway\n  return (obj as any)?.constructor?.[\"__ $whTypeSymbol\"] ?? null;\n}\n\nfunction isCrossRealm(value: unknown): value is object {\n  return Boolean(value // it's not null\n    && typeof value === \"object\" //and it's an object\n    && !(value instanceof Object)); //and it's not an instance of our Object\n}\n\n/** Test whether a value looks like an instance of Money */\nexport function isMoney(value: unknown): value is Money {\n  return getWHType(value) === \"Money\";\n}\n\n/** Test whether a value looks like an instance of Temporal.Instant */\nexport function isTemporalInstant(value: unknown): value is Temporal.Instant {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.Instant');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainDateTime */\nexport function isTemporalPlainDateTime(value: unknown): value is Temporal.PlainDateTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainDateTime');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainDate */\nexport function isTemporalPlainDate(value: unknown): value is Temporal.PlainDate {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainDate');\n}\n\n/** Test whether a value looks like an instance of Temporal.ZonedDateTime */\nexport function isTemporalZonedDateTime(value: unknown): value is Temporal.ZonedDateTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.ZonedDateTime');\n}\n\n/** Test whether a value looks like an instance of Date (assumes no subclasses) */\nexport function isDate(value: unknown): value is Date {\n  return value instanceof Date || (isCrossRealm(value) && value.constructor.name === \"Date\");\n}\n\n/** Test whether a value appears to implement the Blob interface */\nexport function isBlob(value: unknown): value is Blob {\n  return value instanceof Blob || Boolean(value && typeof value === \"object\" && \"size\" in value && \"type\" in value && \"slice\" in value && typeof value.slice === \"function\" && \"stream\" in value && typeof value.stream === \"function\");\n}\n\n/** Test whether a value appears to implement the File interface */\nexport function isFile(value: unknown): value is File {\n  return isBlob(value) && \"name\" in value;\n}\n\n/** Check if the object is probably an Error object. Can't use 'instanceof Error' as an Error might come from a different frame */\nexport function isError(e: unknown): e is Error {\n  return e instanceof Error || (isCrossRealm(e) && \"name\" in e && \"stack\" in e && \"message\" in e);\n}\n\n/** Check if the object looks like a promise */\nexport function isPromise<T>(e: unknown): e is Promise<T> {\n  return Boolean(e && typeof (e as Promise<unknown>).then === \"function\" && typeof (e as Promise<unknown>).catch === \"function\");\n}\n\n/** Check the type of a value, return its JS or STD type\n * @param value - The value to check\n * @returns The type of the value. If the value is an object but recognized as any of Money, Date, Blob, Temporal.Instant/PlainDate/PlainDateTime, that type is returned.\n */\nexport function stdTypeOf(value: unknown): \"string\" | \"number\" | \"boolean\" | \"null\" | \"symbol\" | \"bigint\" | \"function\" | \"object\" | \"undefined\" | \"Date\" | \"Money\" | \"Array\" | \"Instant\" | \"PlainDate\" | \"PlainDateTime\" | \"ZonedDateTime\" | \"File\" | \"Blob\" {\n  const t = typeof value;\n  if (t === \"object\") {\n    if (!value)\n      return \"null\";\n    if (Array.isArray(value))\n      return \"Array\";\n    if (isMoney(value))\n      return \"Money\";\n    if (isBlob(value))\n      return isFile(value) ? \"File\" : \"Blob\";\n    if (isDate(value))\n      return \"Date\";\n    if (isTemporalInstant(value))\n      return \"Instant\";\n    if (isTemporalPlainDate(value))\n      return \"PlainDate\";\n    if (isTemporalPlainDateTime(value))\n      return \"PlainDateTime\";\n    if (isTemporalZonedDateTime(value))\n      return \"ZonedDateTime\";\n  }\n  return t;\n}\n","import { isDate, isTemporalInstant } from \"./quacks\";\nimport type { Temporal } from \"temporal-polyfill\"; //we need an explicit include for separate @webhare/std publication\n\n/** A tolerant JS date parameter */\nexport type FlexibleInstant = Date | Temporal.Instant | Temporal.ZonedDateTime;\n\n/** A relative (up to a week) or absolute wait period. Use 0 for 'polling' and Infinity to indicate an endless waits. Numbers are interpreted to be in milliseconds, a string is interpreted as a ISO8601 duration */\nexport type WaitPeriod = 0 | number | string | FlexibleInstant;\nexport interface Duration {\n  sign: \"+\" | \"-\";\n  years: number;\n  months: number;\n  weeks: number;\n  days: number;\n  hours: number;\n  minutes: number;\n  seconds: number;\n  milliseconds: number;\n}\n\nfunction parseMS(ms: string): number {\n  if (ms.length === 2) //.5\n    return parseInt(ms.substring(1)) * 100;\n  if (ms.length === 3) //.54\n    return parseInt(ms.substring(1)) * 10;\n  return parseInt(ms.substring(1, 4));\n}\n\n/** Parse an ISO8601 duration\n * @param duration - ISO8601 duration string (e.g. \"P1Y2M3DT4H5M6S\")\n */\nexport function parseDuration(duration: string): Duration {\n  // const matches = duration.match(/(-)?P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?T(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:([.,\\d]+)S)?/);\n  const matches = duration.match(/^(-)?P(?:(\\d+)Y)?(?:(\\d+)M)?(?:(\\d+)W)?(?:(\\d+)D)?(?:T(?:(\\d+)H)?(?:(\\d+)M)?(?:(\\d+)(\\.\\d+)?S)?)?$/);\n  if (!matches ||\n    (matches[4] && (matches[2] || matches[3] || matches[5])) || //can't have weeks and years/months/days\n    !(matches[2] || matches[3] || matches[4] || matches[5] || matches[6] || matches[7] || matches[8])) //one component must be present\n    throw new Error(`Invalid ISO8601 duration '${duration}'`);\n\n  return {\n    sign: matches[1] ? '-' : '+',\n    years: parseInt(matches[2]) || 0,\n    months: parseInt(matches[3]) || 0,\n    weeks: parseInt(matches[4]) || 0,\n    days: parseInt(matches[5]) || 0,\n    hours: parseInt(matches[6]) || 0,\n    minutes: parseInt(matches[7]) || 0,\n    seconds: parseInt(matches[8]) || 0,\n    milliseconds: matches[9] ? parseMS(matches[9]) : 0\n  };\n}\n\n/** Add a duration (time) to a date\n * @param startingdate - Date to start from\n * @param duration - Duration to add (as object or as ISO8601 duration string, eg \"P1Y2M3DT4H5M6S\")\n */\nexport function addDuration(startingdate: Date, duration: Partial<Duration> | string): Date;\nexport function addDuration(startingdate: Temporal.Instant, duration: Partial<Duration> | string): Temporal.Instant;\n\nexport function addDuration(startingdate: Date | Temporal.Instant, duration: Partial<Duration> | string): Date | Temporal.Instant {\n  if (isTemporalInstant(startingdate))\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- if you pass a Temporal.Instant, we should be able to create new ones from Temporal.\n    return (globalThis as any).Temporal.Instant.fromEpochMilliseconds(addDuration(new Date(startingdate.epochMilliseconds), duration).getTime());\n\n  //we cannot take timezones (flexible instant) yet? as we do not timezone correct day/week/month calculations\n  if (typeof duration === \"string\")\n    duration = parseDuration(duration);\n\n  const direction = duration.sign === \"-\" ? -1 : 1;\n  const date = new Date(startingdate.getTime());\n  if (duration.years)\n    date.setUTCFullYear(date.getUTCFullYear() + direction * duration.years);\n  if (duration.months)\n    date.setUTCMonth(date.getUTCMonth() + direction * duration.months);\n\n  const modifydays = (duration.days ?? 0) + (duration.weeks ?? 0) * 7;\n  if (modifydays)\n    date.setUTCDate(date.getUTCDate() + direction * modifydays);\n\n  const timeoffset = (duration.hours ?? 0) * 60 * 60 * 1000 + (duration.minutes ?? 0) * 60 * 1000 + (duration.seconds ?? 0) * 1000 + (duration.milliseconds ?? 0);\n  date.setTime(date.getTime() + direction * timeoffset);\n\n  return date;\n}\n\n/** Subtract a duration (time) from a date\n * @param startingdate - Date to start from\n * @param duration - Duration to subtract (as object or as ISO8601 duration string, eg \"P1Y2M3DT4H5M6S\")\n */\nexport function subtractDuration(startingdate: Date, duration: Partial<Duration> | string): Date;\nexport function subtractDuration(startingdate: Temporal.Instant, duration: Partial<Duration> | string): Temporal.Instant;\n\nexport function subtractDuration(startingdate: Date | Temporal.Instant, duration: Partial<Duration> | string): Date | Temporal.Instant {\n  if (isTemporalInstant(startingdate))\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- if you pass a Temporal.Instant, we should be able to create new ones from Temporal.\n    return (globalThis as any).Temporal.Instant.fromEpochMilliseconds(subtractDuration(new Date(startingdate.epochMilliseconds), duration).getTime());\n\n  if (typeof duration === \"string\")\n    duration = parseDuration(duration);\n\n  return addDuration(startingdate, { ...duration, sign: duration?.sign === \"-\" ? \"+\" : \"-\" });\n}\n\n/** Convert a flexible instant to a date\n * @param input - Date, Temporal.Instant or Temporal.ZonedDateTime value to convert\n * @returns The converted date (or null if the input is null)\n */\nexport function convertFlexibleInstantToDate(input: FlexibleInstant): Date;\nexport function convertFlexibleInstantToDate(input: null | undefined): null;\nexport function convertFlexibleInstantToDate(input: FlexibleInstant | null | undefined): Date | null;\n\nexport function convertFlexibleInstantToDate(input: FlexibleInstant | null | undefined): Date | null {\n  return input ? \"epochMilliseconds\" in input ? new Date(input.epochMilliseconds) : input : null;\n}\n\nexport function convertWaitPeriodToDate(wait: WaitPeriod, options: { relativeTo: Temporal.Instant }): Temporal.Instant;\nexport function convertWaitPeriodToDate(wait: WaitPeriod, options?: { relativeTo?: Date }): Date;\n\n/** Convert a WaitPeriod parameter to a Date\n * @param wait - Wait time as milliseconds or a Date\n * @param options - Options for conversion\n * @param options.relativeTo - Date to use as a reference for relative waits\n*/\nexport function convertWaitPeriodToDate(wait: WaitPeriod, options?: { relativeTo?: Date | Temporal.Instant }): Date | Temporal.Instant {\n  if (options?.relativeTo && isTemporalInstant(options?.relativeTo)) { //then our caller expects a Temporal.Instant\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- if you pass a Temporal.Instant, we should be able to create new ones from Temporal.\n    return (globalThis as any).Temporal.Instant.fromEpochMilliseconds(\n      convertWaitPeriodToDate(wait, { relativeTo: new Date(options?.relativeTo.epochMilliseconds) }).getTime()\n    );\n  }\n\n  if (isDate(wait)) {\n    return wait;\n  } else if (typeof wait === \"string\") {\n    return addDuration(convertFlexibleInstantToDate(options?.relativeTo) ?? new Date(), wait); //NOTE that \"P1D\" here adds \"24 hours\" which is *not* correct for a TimeZonedDate - which is why convertWaitPeriodToDate cannot yet accept these\n  } else if (typeof wait === \"number\") {\n    if (wait === 0)\n      return new Date(-864000 * 1000 * 10000000);\n    if (wait === Infinity)\n      return new Date(864000 * 1000 * 10000000);\n    if (wait > 0) //note: options?.relativeTo can't be instant, we already eliminated that above\n      return new Date(((options?.relativeTo as Date | undefined)?.getTime() ?? Date.now()) + wait);\n  } else if (wait && \"epochMilliseconds\" in wait) { //Instant or ZonedDateTime\n    return new Date(wait.epochMilliseconds);\n  }\n\n  throw new Error(\"Invalid wait duration - it must either be an absolute date, 0, a number of milliseconds or Infinity\");\n}\n\n/** Check whether the specified parts make a valid and reasonable (usually 1600+) date */\nexport function isValidDate(year: number, month: number, day: number, { minYear = 1601 } = {}) {\n  if (!(year >= minYear && year <= 9999 && month >= 1 && month <= 12 && day >= 1 && day <= 31\n    && Number.isSafeInteger(year) && Number.isSafeInteger(month) && Number.isSafeInteger(day)))\n    return false;\n  if ([4, 6, 9, 11].includes(month) && day > 30) //handle april, june, sep, nov\n    return false;\n  const isleapyear = (year % 400) === 0 || ((year % 100) !== 0 && (year % 4) === 0);\n  if (month === 2 && day > (isleapyear ? 29 : 28))\n    return false;\n  return true;\n}\n\n/** Check whether the specified parts make a reasonable time (does not consider the leap second a valid time) */\nexport function isValidTime(hour: number, minute: number, second: number, msec: number) {\n  return hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59 && second >= 0 && second <= 59 && msec >= 0 && msec <= 999\n    && Number.isSafeInteger(hour) && Number.isSafeInteger(minute) && Number.isSafeInteger(second) && Number.isSafeInteger(msec);\n}\n\n/** Returns a string containing a formatted date and time.\n * @param format  A string that specifies the format of the output string. The string can contain the following:\n%%  Character %\n%a  Abbreviated weekday name\n%A  Full weekday name\n%b  Abbreviated month name\n%B  Full month name\n%d  Two-digit day of month (01 - 31)\n%#d Two-digit day of month, remove any leading zeros\n%H  Hour of the day, 24 hour day\n%#H Hour of the day, 24 hour day, remove any leading zeros\n%I  Two-digit hour, 12 hour day (01 - 12)\n%#I Two-digit hour, 12 hour day, remove any leading zeros\n%j  Three-digit day of year (001 - 366)\n%#j Three-digit day of year, remove any leading zeros\n%m  Two-digit month number (01 - 12)\n%#m Two-digit month number, remove any leading zeros\n%M  2-digit minute (00 - 59)\n%#M 2-digit minute, remove leading any zeros\n%Q  Three-digit millisecond (000-999)\n%#Q Three-digit millisecond, remove any leading zeros\n%p  AM or PM\n%S  Two-digit second (00 - 59)\n%#S Two-digit second, remove leading any zeros\n%V  Two-digot week number (00 - 52)\n%#V One-digit week number (0 - 52)\n%y  Two-digit year without century (00 to 99)\n%#y Two-digit year without century, remove any leading zeros\n%Y  Year with century\n%#Y Year with century, remove any leading zeros\n   @param zdt          The date/time value to format.\n   @example\n// The current date and time in German in the format: 01 Januar 2005\nconst example1 = formatDateTime(\"%d %B %Y\", Temporal.Instant.now(), { locale: \"de-DE\" });\n\n// The current day of the week in the Dutch language, using the\n// parameter datetexts as language switch.\n// The date format is <abbreviated> - <full>.\nconst example2 = formatDateTime(\"%a - %B \", new Date, { locale: \"nl-NL\" });\n*/\n\nexport function formatDateTime(format: string, zdt: Temporal.ZonedDateTime, options?: { locale: string }): string {\n  //TODO consider allowing Date & Instant too? might avoid users going for things like toString().replace(\"T\", \" \").replace(\"Z\", \"\")\n  //const zdt: Temporal.ZonedDateTime = date instanceof Date ? date.toTemporalInstant().toZonedDateTimeISO('UTC') : \"year\" in date ? date : date.toZonedDateTimeISO('UTC');\n  const locale = options?.locale || 'en-US';\n  let stripZeroes = false;\n\n  function formatNumber(num: number, length: number): string {\n    return stripZeroes ? num.toString() : num.toString().padStart(length, '0');\n  }\n\n  function formatPart(spec: string): string {\n    switch (spec) {\n      case 'a': //dayofweek name, abbreviated\n        return zdt.toLocaleString(locale, { weekday: 'short' });\n      case 'A': //dayofweek name, full\n        return zdt.toLocaleString(locale, { weekday: 'long' });\n      case 'b':  //month name, abbreviated\n        return zdt.toLocaleString(locale, { month: 'short' });\n      case 'B': //month name, abbreviated\n        return zdt.toLocaleString(locale, { month: 'long' });\n      case 'C': //century number\n        return formatNumber(Math.floor(zdt.year / 100), 2);\n      case 'd':  //day of month\n        return formatNumber(zdt.day, 2);\n      case 'H':  //hour of the day (24 hours format)\n        return formatNumber(zdt.hour, 2);\n      case 'I'://hour of the day (12 hours format)\n        return formatNumber((zdt.hour % 12) || 12, 2);\n      case 'j'://day of the year (three-digit)\n        return formatNumber(zdt.dayOfYear, 3);\n      case 'M'://two digit minute\n        return formatNumber(zdt.minute, 2);\n      case 'm'://two digit month\n        return formatNumber(zdt.month, 2);\n      case 'p'://am/pm\n        //Unfortunately this doesn't return am/pm: return zdt.toLocaleString(locale, { dayPeriod: 'narrow', hourCycle: \"h12\" });\n        return zdt.hour < 12 ? \"am\" : \"pm\";\n      case 'Q'://three digit millisecond\n        return formatNumber(Math.floor(zdt.millisecond), 3);\n      case 'S'://two digit second\n        return formatNumber(zdt.second, 2);\n      case 'V'://week number\n        if (zdt.weekOfYear === undefined)\n          throw new Error(\"Week of year is not defined for this calendar\");\n        return formatNumber(zdt.weekOfYear, 2);\n      case 'Y'://year, with century\n        return formatNumber(zdt.year, 4);\n      case 'y'://year, without century\n        return formatNumber(zdt.year % 100, 2);\n      default:\n        throw new Error(`Invalid date format specifier '%${spec}'`);\n    }\n  }\n\n  let out = '', inSpecifier = false;\n  for (const spec of [...format]) {\n    if (inSpecifier) {\n      if (spec === '#') {\n        stripZeroes = true;\n        continue; //get the next char\n      }\n\n      inSpecifier = false;\n      if (spec === '%') {\n        out += '%';\n        continue;\n      }\n      out += formatPart(spec);\n    } else {\n      if (spec === '%') {\n        inSpecifier = true;\n        stripZeroes = false; //reset it\n        continue;\n      }\n      out += spec;\n    }\n  }\n  if (inSpecifier)\n    throw new Error(\"Invalid date format string, ends with single %\");\n\n  return out;\n}\n","import { type WaitPeriod, convertWaitPeriodToDate } from \"./datetime\";\n\n//TODO Deprecate once everyone is WH5.5+\nexport type DeferredPromise<T> = PromiseWithResolvers<T>;\n\n/** A promise that sleeps for the specified number of milliseconds\n *  @param duration - Relative (milliseconds, but not Infinity) or absolute (Date) wait duration. May not be Infinity\n *  @param options - Options - `signal` to set an AbortSignal which will canel this sleep\n*/\nexport function sleep(duration: WaitPeriod, options?: { signal?: AbortSignal }): Promise<void> {\n  if (duration === Infinity)\n    throw new Error(`A sleep may not be infinite`);\n\n  const until = convertWaitPeriodToDate(duration);\n  return new Promise(resolve => {\n    const timeoutid = setTimeout(resolve, Math.max(0, until.getTime() - Date.now()));\n    if (options?.signal)\n      options.signal.addEventListener(\"abort\", () => clearTimeout(timeoutid));\n  });\n}\n\n/** @deprecated Use Promise.withResolvers instead */\nexport function createDeferred<T>(): PromiseWithResolvers<T> {\n  return Promise.withResolvers<T>();\n}\n\n/** Wrap a promise in a timeout\n * @param promise - Promise to wrap\n * @param timeout - Timeout in milliseconds or as a Date\n * @param rejectWith - Error to reject with if the timeout expires (string, Error, or a callback returning one)\n*/\nexport function wrapInTimeout<T>(promise: Promise<T>, timeout: WaitPeriod, rejectWith: string | Error | (() => string | Error)): Promise<T> {\n  if (timeout === Infinity)\n    return promise;\n\n  const until = convertWaitPeriodToDate(timeout);\n  const timeoutpromise = new Promise<T>((resolve, reject) => {\n    const timer = setTimeout(() => {\n      //this approach allows to delay actual Error object construction\n      const error: string | Error = typeof rejectWith === \"function\" ? rejectWith() : rejectWith;\n      reject(typeof error === \"object\" ? error : new Error(error));\n    }, until.getTime() - Date.now());\n\n    //ensure timer cancellation. No need to wait on this promise\n    promise = promise.finally(() => clearTimeout(timer));\n  });\n\n  return Promise.race([promise, timeoutpromise]);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we need to accept any callback.\ntype CallbackFunctionVariadic<RetType> = (...args: any[]) => Promise<RetType>;\n\nexport interface SerializeOptions {\n  ///Coalescing will ignore intermediate calls if the original call has not completed yet. Eg when invoking functions 1,2,3 in succession, only 3 will run, calls 1 and 2 will be merged into that call\n  coalesce?: boolean;\n}\n\nclass Coalescer<RetVal> {\n  private queue: Array<PromiseWithResolvers<RetVal>> = [];\n  private call: CallbackFunctionVariadic<RetVal> | null = null;\n  private readonly fn: CallbackFunctionVariadic<RetVal>;\n\n  //invoke is the actual entry point for incoming calls (ie C++'s operator() )\n  readonly invoke: CallbackFunctionVariadic<RetVal>;\n\n  constructor(fn: CallbackFunctionVariadic<RetVal>) {\n    this.invoke = this.onInvoke.bind(this);\n    this.fn = fn;\n  }\n  private onInvoke(...args: unknown[]): Promise<RetVal> {\n    //overwrite the call to execute\n    this.call = () => this.fn(...args); //TODO just queueing the parameters might do?\n\n    if (!this.queue.length) //schedule a flush of the queue\n      setTimeout(() => void this.flush(), 0);\n\n    this.queue.push(Promise.withResolvers<RetVal>());\n    return this.queue[this.queue.length - 1].promise;\n  }\n\n  private async flush() {\n    for (let startpos = 0; this.queue && startpos < this.queue?.length;) {\n      const currentpos = this.queue?.length;\n\n      try {\n        //invoke the last known call. *NOTE* new calls may be added to the queue now\n        const result = await this.call!();\n        for (let i = startpos; i < currentpos; i++)\n          this.queue[i].resolve(result);\n      } catch (e) {\n        for (let i = startpos; i < currentpos; i++)\n          this.queue[i].reject(e as Error);\n      }\n      startpos = currentpos;\n    }\n    //empty the queue\n    this.queue.splice(0, this.queue.length);\n  }\n}\n\n// export function<Fn extends (...args: any[]) => Promise<any>>(fn: Fn, options?: SerializeOptions): Fn {\n// type RetVal = ReturnType<Fn>;\n\n/** Wrap a function in a serializer */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we need to accept any callback.\nexport function wrapSerialized<Fn extends (...args: any[]) => Promise<any>>(fn: Fn, options?: SerializeOptions): Fn {\n  type RetVal = ReturnType<Fn>;\n  if (options?.coalesce)\n    return (new Coalescer<RetVal>(fn)).invoke as Fn;\n\n  let queue = Promise.resolve() as Promise<unknown>;\n  return ((...args: unknown[]): Promise<RetVal> => {\n    const res = queue.then(() => fn(...args));\n    queue = res.catch(() => { /* ignore errors */ });\n    return res;\n  }) as Fn;\n}\n\n//TODO abandon the name 'serialize' for now so it's free and safe to use once JS Decorators land (so we can use @serialize there)\n/** @deprecated Use wrapSerialized instead */\nexport function serialize<RetVal>(fn: (...args: unknown[]) => Promise<RetVal>, context: unknown) {\n  return wrapSerialized(fn, undefined);\n}\n","/* A math library for safe calculation with money amounts in JS. If you don't\n   know why we need this, try to predict what the following code would print:\n   var cents=0;for(var i=0;i<100;++i)cents+=0.01;cents-=1;console.log(cents);\n   and think twice about whether you want to code anything financial in JS.\n\n   Money values supplied from HareScript should be formatted using FormatJSFinmathMoney\n*/\n\nexport type FinmathInput = string | number;\n\nexport type RoundMode = \"none\" | \"toward-zero\" | \"down\" | \"up\" | \"half-toward-zero\" | \"half-down\" | \"half-up\" | \"toward-infinity\" | \"half-toward-infinity\";\n\nexport interface SplitNumber {\n  num: number;\n  decimals: number;\n}\n\n//a 'price' is a string of the form \"nnn[.NNNN]\"\n\nfunction stripUnneededDecimals(num: number, decimals: number) {\n  //we have a maximum of 5 digits of external precision\n  if (decimals > 5) {\n    // math.round rounds toward positive infinity\n    const isneg = num < 0;\n    if (isneg)\n      num = -num;\n\n    while (decimals > 6) { //truncate excess digits\n      num = Math.floor(num / 10);\n      --decimals;\n    }\n    //round up if 6th decimal >= 5\n    num = Math.round(num / 10);\n    decimals = 5;\n\n    if (isneg)\n      num = -num;\n  }\n\n  //strip unneeded decimals\n  while (decimals > 0 && !(num % 10)) {\n    num /= 10;\n    --decimals;\n  }\n\n  return { num, decimals };\n}\n\nfunction toText(amount: SplitNumber, decimalpoint: string, mindecimals: number) {\n  if (!Number.isSafeInteger(amount.num))\n    throw new Error(\"Result would overflow the safe value range\");\n\n  let num, decimals;\n  ({ num, decimals } = stripUnneededDecimals(amount.num, amount.decimals));\n\n  // Strip sign from number, may need to prefix it\n  const isnegative = num < 0;\n  if (isnegative)\n    num = -num;\n\n  let astext = String(num);\n\n  // Ensure we have enough leading 0's to render the first integer digit\n  if (astext.length <= decimals)\n    astext = '00000000000000000000'.substr(0, decimals + 1 - astext.length) + astext;\n  // make sure we have enough 0's to show mindecimals\n  if (decimals < mindecimals) {\n    astext += '00000000000000000000'.substr(0, mindecimals - decimals);\n    decimals = mindecimals;\n  }\n\n  // insert decimal point if needed\n  if (decimals)\n    astext = astext.substr(0, astext.length - decimals) + decimalpoint + astext.substr(-decimals);\n\n  // add sign if needed\n  astext = (isnegative ? \"-\" : \"\") + astext;\n  return astext;\n}\n\n/** Convert a money of any format to a split number object\n    @param money - Either an integer number or string with a number\n    @returns Split number object\n*/\nfunction splitValue(money: FinmathInput): SplitNumber {\n  if (typeof money === 'number') {\n    if (money !== Math.floor(money))\n      throw new Error(\"Non-integer number passed\");\n    if (!Number.isSafeInteger(money))\n      throw new Error(`The value ${money} is outside the safe value range`);\n    return { num: money, decimals: 0 };\n  }\n  if (typeof money !== 'string')\n    throw new Error(\"Number or string expected, got \" + money);\n\n  const split = money.match(/^(-)?([0-9]*)(\\.([0-9]{0,5})([0-9]*))?$/);\n  if (!split)\n    throw new Error(`Illegal money value received: '${money}'`);\n\n  const sign = split[1] === '-' ? -1 : 1;\n  const decimals = split[3] ? split[4].length : 0;\n  // If there are more than 5 decimals, round up (using halfExpand strategy)\n  const num = sign * (parseInt(split[2] || \"0\") * Math.pow(10, decimals) + (parseInt((split[4] || '')) || 0) + (split[5]?.[0] >= '5' ? 1 : 0));\n  if (!Number.isSafeInteger(num))\n    throw new Error(`The value '${money}' is outside the safe value range`);\n\n  return stripUnneededDecimals(num, decimals);\n}\n\n/** Convert split number into a string\n*/\nfunction joinPrice(parts: SplitNumber): string {\n  return toText(parts, '.', 0);\n}\n\nfunction adjustDecimals(amount: SplitNumber, requiredecimals: number) {\n  const toadd = requiredecimals - amount.decimals;\n  if (toadd <= 0)\n    return;\n\n  let multiplier = 1;\n  for (let idx = 0; idx < toadd; ++idx)\n    multiplier *= 10;\n\n  if (!Number.isSafeInteger(amount.num * multiplier))\n    throw new Error(\"adjustDecimals would overflow the safe value range\");\n\n  amount.num *= multiplier;\n  amount.decimals += toadd;\n}\n\n/** Returns if a price string is valid\n*/\nexport function isValidPrice(money: string) {\n  if (typeof money !== 'string' || !money.match(/[0-9]+(\\.[0-9]{0,5})?$/))\n    return false;\n  return true;\n}\n\nfunction __add(lhs: SplitNumber, rhs: SplitNumber) {\n  //equalize # of decimals, and then it's a simple addition\n  const requiredecimals = Math.max(lhs.decimals, rhs.decimals);\n  adjustDecimals(lhs, requiredecimals);\n  adjustDecimals(rhs, requiredecimals);\n  return { num: lhs.num + rhs.num, decimals: requiredecimals };\n}\n\n/** Adds two numbers together\n*/\nexport function add(amount1: FinmathInput, amount2: FinmathInput): string {\n  return joinPrice(__add(splitValue(amount1), splitValue(amount2)));\n}\n\n/** Subtracts a number from another number\n*/\nexport function subtract(amount: FinmathInput, tosubtract: FinmathInput) {\n  const lhs = splitValue(amount), rhs = splitValue(tosubtract);\n  rhs.num = -rhs.num;\n  return joinPrice(__add(lhs, rhs));\n}\n\nfunction __multiply(lhs: SplitNumber, rhs: SplitNumber) {\n  //ADDME the naive 'add decimals, multiple nums' approach gets you out of the safe range real fast. needs tests\n  return { num: lhs.num * rhs.num, decimals: lhs.decimals + rhs.decimals };\n}\n\n/** Multiplies two numbers together\n*/\nexport function multiply(amount1: FinmathInput, amount2: FinmathInput): string {\n  const lhs = splitValue(amount1), rhs = splitValue(amount2);\n  return joinPrice(__multiply(lhs, rhs));\n}\n\n/** Compares two numbers\n    @param amount1 - Left hand value\n    @param amount2 - Right hand value\n    @returns Returns 0 if amount1 === amount2, -1 if amount1 \\< amount2, 1 if amount1 \\> amount2\n*/\nexport function cmp(amount1: FinmathInput, amount2: FinmathInput) {\n  const diff = __add(splitValue(amount1), __multiply(splitValue(amount2), { num: -1, decimals: 0 }));\n  return diff.num < 0 ? -1 : diff.num === 0 ? 0 : 1;\n}\n\n/** Returns a percentage of an amount\n    @param amount - Original amount\n    @param perc - Percentage of the amount to return\n    @returns Percentage of the amount\n*/\nexport function getPercentageOfAmount(amount: FinmathInput, perc: FinmathInput) {\n  const lhs = splitValue(amount), rhs = splitValue(perc);\n  const result = __multiply(lhs, rhs);\n  result.decimals += 2;\n  return joinPrice(normalize(result));\n}\n\nfunction normalize(amount: SplitNumber) {\n  while (amount.decimals && (amount.num % 10) === 0) {\n    amount.num /= 10;\n    --amount.decimals;\n  }\n  return amount;\n}\n\n/// format a price amount. extend # of decimals to specified # if not enough\nexport function formatPrice(money: FinmathInput, decimalpoint: string, decimals: number) {\n  return toText(splitValue(money), decimalpoint, decimals);\n}\n\n/** Rounds integer to multiple, exposed for testing only\n*/\nexport function __roundIntegerToMultiple(value: number, roundunit: number, mode: RoundMode) {\n  switch (mode) {\n    case \"none\":\n      {\n        // no rounding\n      } break;\n    case \"toward-zero\":\n      {\n        value = Math.trunc(value / roundunit) * roundunit;\n      } break;\n    case \"toward-infinity\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit - 1) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit + 1) / roundunit) * roundunit;\n      } break;\n    case \"down\":\n      {\n        if (value > 0)\n          value = Math.trunc(value / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit + 1) / roundunit) * roundunit;\n      } break;\n    case \"up\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit - 1) / roundunit) * roundunit;\n        else\n          value = Math.trunc(value / roundunit) * roundunit;\n      } break;\n    case \"half-toward-zero\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + (roundunit - 1) / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - (roundunit - 1) / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-toward-infinity\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-down\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + (roundunit - 1) / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-up\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - (roundunit - 1) / 2) / roundunit) * roundunit;\n      } break;\n    default:\n      {\n        throw new Error(`Unknown rounding mode ${mode}`);\n      }\n  }\n  return value;\n}\n\n/** Rounds a value to a multiple of a unit, with a specific rounding mode\n    @param value - Value to round\n    @param unit - The value will be rounded to a mulitple of this unit (except when rounding mode is 'none')\n    @param mode - Rounding mode. Possible values:\n      <ul>\n        <li>none: No rounding</li>\n        <li>toward-zero: Round toward zero</li>\n        <li>down: Round toward negative infity</li>\n        <li>up: Round toward positive infity</li>\n        <li>half-toward-zero: Round nearest multiple, round half of a multiple toward zero</li>\n        <li>half-down: Round nearest multiple, round half of a multiple toward negative infinity</li>\n        <li>half-up: Round nearest multiple, round half of a multiple toward positive infity</li>\n      </ul>\n    @returns The rounded value\n*/\nexport function roundToMultiple(value: FinmathInput, unit: FinmathInput, mode: RoundMode) {\n  const split_value = splitValue(value);\n  const split_unit = splitValue(unit);\n\n  const requiredecimals = Math.max(split_value.decimals, split_unit.decimals);\n  adjustDecimals(split_value, requiredecimals);\n  adjustDecimals(split_unit, requiredecimals);\n\n  const result = { num: __roundIntegerToMultiple(split_value.num, split_unit.num, mode), decimals: split_value.decimals };\n  return joinPrice(result);\n}\n\n/** Returns the minimum of all the arguments\n    @param amount - First value\n    @param amounts - Rest of the values\n    @returns The lowest value among amount and amounts\n*/\nexport function min(amount: FinmathInput, ...amounts: FinmathInput[]) {\n  for (const val of amounts)\n    if (cmp(amount, val) > 0)\n      amount = val;\n  return joinPrice(splitValue(amount));\n}\n\n/** Returns the maximum of all the arguments\n    @param amount - First value\n    @param amounts - Rest of the values\n    @returns The highest value among amount and amounts\n*/\nexport function max(amount: FinmathInput, ...amounts: FinmathInput[]) {\n  for (const val of amounts)\n    if (cmp(amount, val) < 0)\n      amount = val;\n  return joinPrice(splitValue(amount));\n}\n\n/** Returns a power of 10\n    @param exp - Integer power, must be 0 or bigger\n    @returns Requested power of 10\n*/\nfunction getNonNegativePowerOf10(exp: number) {\n  let retval = 1, running_exp = 10;\n  while (exp) {\n    if (exp & 1)\n      retval *= running_exp;\n    running_exp *= running_exp;\n    exp = exp >> 1;\n  }\n  return retval;\n}\n\n/** Divides two values, with 5 decimals of precision\n    @param value - Value To divide\n    @param divisor - Divisor\n    @returns Divided value, with 5 decimals of precision\n*/\nexport function divide(value: FinmathInput, divisor: FinmathInput) {\n  const lhs = splitValue(value), rhs = splitValue(divisor);\n  const mul10exp = lhs.decimals - rhs.decimals - 5;\n  const mulfactor = mul10exp < 0 ? getNonNegativePowerOf10(-mul10exp) : 1;\n  const roundunit = mul10exp > 0 ? getNonNegativePowerOf10(mul10exp) : 1;\n  return joinPrice({ num: __roundIntegerToMultiple(mulfactor * lhs.num / rhs.num, roundunit, \"half-toward-infinity\"), decimals: 5 });\n}\n\nexport function moneyDivide(value: FinmathInput, divisor: FinmathInput) { //divide was added in 5.0. remove this old name eventually\n  return divide(value, divisor);\n}\n\n/** Test whether two values have a specific relation\n    @param lhs - Left hand value\n    @param relation - One of '\\<', '\\<=', '==', '!=', '\\>', '\\>=''\n    @param rhs - Right hand value\n    @returns TRUE if the relation holds\n    @example\n      console.log(finmath.test(1, '\\<', 2)); // prints 'true'\n*/\nexport function test(lhs: FinmathInput, relation: \"<\" | \"<=\" | \"==\" | \"!=\" | \">\" | \">=\", rhs: FinmathInput) {\n  const compareresult = cmp(lhs, rhs);\n  switch (relation) {\n    case '<': return compareresult < 0;\n    case '<=': return compareresult <= 0;\n    case '==': return compareresult === 0;\n    case '!=': return compareresult !== 0;\n    case '>': return compareresult > 0;\n    case '>=': return compareresult >= 0;\n  }\n  throw Error(`Cannot test for unknown relation '${relation}'`);\n}\n","/* A Money type library for safe calculation with money amounts in JS. If you don't\n   know why we need this, try to predict what the following code would print:\n   var cents=0;for(var i=0;i<100;++i)cents+=0.01;cents-=1;console.log(cents);\n   and think twice about whether you want to code anything financial in JS.\n\n   We haven't decideded yet what range Money should support. To keep our options open and keep HS compatbility for now\n   we will fix ourselves to 5 digits (HS compat) and not allow values bigger than 900_000_000 (2**53 / 100000 'number' compatbiility clamped to a more readable number)\n\n  Users should not rely on JS Money keeping this smaller range in the future. Money values supplied from HareScript should be formatted using FormatJSFinmathMoney\n*/\n\nimport * as finmath from \"./finmath\"; //TODO absorb into us as soon as noone externally depends on finmath anymore\nimport { isMoney } from \"./quacks\";\n\nexport type MoneyRoundingMode = \"none\" | \"toward-zero\" | \"down\" | \"up\" | \"half-toward-zero\" | \"half-down\" | \"half-up\" | \"toward-infinity\" | \"half-toward-infinity\";\nexport type MoneyTestTypes = \"<\" | \"<=\" | \"==\" | \"!=\" | \">\" | \">=\";\n\ntype MoneyParameter = Money | string;\n\ninterface SplitNumber {\n  num: number;\n  decimals: number;\n}\n\nexport interface MoneyFormatOptions {\n  //thousand separator. defaults to \"\"\n  thousandsSeparator?: string;\n  //decimal separator. defaults to \".\"\n  decimalSeparator?: string;\n  //minimum # of decimals. defaults to 2\n  minDecimals?: number;\n}\n\nfunction stripUnneededDecimals(num: number, decimals: number) {\n  //we have a maximum of 5 digits of external precision\n  if (decimals > 5) {\n    // math.round rounds toward positive infinity\n    const isneg = num < 0;\n    if (isneg)\n      num = -num;\n\n    while (decimals > 6) { //truncate excess digits\n      num = Math.floor(num / 10);\n      --decimals;\n    }\n    //round up if 6th decimal >= 5\n    num = Math.round(num / 10);\n    decimals = 5;\n\n    if (isneg)\n      num = -num;\n  }\n\n  //strip unneeded decimals\n  while (decimals > 0 && !(num % 10)) {\n    num /= 10;\n    --decimals;\n  }\n\n  return { num, decimals };\n}\n\n/** Convert a money of any format to a split number object\n    @param money - Either an integer number or string with a number\n    @returns Split number object\n*/\nfunction splitValue(money: MoneyParameter): SplitNumber {\n  if (typeof money === 'number') {\n    if (money !== Math.floor(money))\n      throw new Error(\"Non-integer number passed\");\n    if (!Number.isSafeInteger(money))\n      throw new Error(`The value ${money} is outside the safe value range`);\n    return { num: money, decimals: 0 };\n  }\n  if (typeof money !== 'string')\n    throw new Error(\"Number or string expected, got \" + money);\n\n  const split = money.match(/^(-)?([0-9]*)(\\.([0-9]{0,5})([0-9]*))?$/);\n  if (!split)\n    throw new Error(`Illegal money value received: '${money}'`);\n\n  const sign = split[1] === '-' ? -1 : 1;\n  const decimals = split[3] ? split[4].length : 0;\n  // If there are more than 5 decimals, round up (using halfExpand strategy)\n  const num = sign * (parseInt(split[2] || \"0\") * Math.pow(10, decimals) + (parseInt((split[4] || '')) || 0) + (split[5]?.[0] >= '5' ? 1 : 0));\n  if (!Number.isSafeInteger(num))\n    throw new Error(`The value '${money}' is outside the safe value range`);\n\n  return stripUnneededDecimals(num, decimals);\n}\n\nfunction toText(amount: SplitNumber, decimalpoint: string, mindecimals: number, thousandpoint: string) {\n  if (!Number.isSafeInteger(amount.num))\n    throw new Error(\"Result would overflow the safe value range\");\n\n  let { num, decimals } = stripUnneededDecimals(amount.num, amount.decimals);\n\n  // Strip sign from number, may need to prefix it\n  const isnegative = num < 0;\n  if (isnegative)\n    num = -num;\n\n  let astext = String(num);\n\n  // Ensure we have enough leading 0's to render the first integer digit\n  if (astext.length <= decimals)\n    astext = '00000000000000000000'.substring(0, decimals + 1 - astext.length) + astext;\n  // make sure we have enough 0's to show mindecimals\n  if (decimals < mindecimals) {\n    astext += '00000000000000000000'.substring(0, mindecimals - decimals);\n    decimals = mindecimals;\n  }\n\n  let beforepoint = astext.substring(0, astext.length - decimals);\n  const afterpoint = astext.substring(astext.length - decimals);\n\n  // Add thouands points if neeed\n  if (thousandpoint)\n    beforepoint = beforepoint.replaceAll(/\\B(?=(\\d{3})+(?!\\d))/g, thousandpoint);\n\n  return (isnegative ? \"-\" : \"\") + beforepoint + (afterpoint.length ? decimalpoint + afterpoint : \"\");\n}\n\n/** A decimal based JS money type*/\nexport class Money {\n  /** finmath-compatible value */\n  readonly value: string;\n  private static \"__ $whTypeSymbol\" = \"Money\";\n\n  constructor(value: MoneyParameter = \"0\") {\n    this.value = Money.parseParameter(value);\n\n    const intvalue = parseInt(this.value);\n    //We need the number to be in the safe range even after adding 5 decimals\n    if (intvalue <= (Number.MIN_SAFE_INTEGER / 100000) || intvalue >= (Number.MAX_SAFE_INTEGER / 100000))\n      throw new TypeError(`Money value '${value}' is out of range`);\n  }\n\n  private static parseParameter(param: MoneyParameter): string {\n    if (typeof param === \"string\")\n      return toText(splitValue(param), \".\", 0, \"\");\n    if (Money.isMoney(param))\n      return (param as unknown as { value: string }).value;\n\n    throw new TypeError(`Money cannot be constructed out of a value of type ${typeof param}`);\n  }\n\n  static isMoney(value: unknown): value is Money {\n    return isMoney(value);\n  }\n\n  static fromNumber(value: number): Money {\n    return new Money(String(value));\n  }\n\n  /** Adds numbers together\n  */\n  static add(left: MoneyParameter, ...right: MoneyParameter[]): Money {\n    let sum = Money.parseParameter(left);\n    for (const item of right)\n      sum = finmath.add(sum, Money.parseParameter(item));\n    return new Money(sum);\n  }\n\n  /** Subtracts a number from another number\n  */\n  static subtract(left: MoneyParameter, right: MoneyParameter): Money {\n    return new Money(finmath.subtract(Money.parseParameter(left), Money.parseParameter(right)));\n  }\n\n  /** Rounds a value to a multiple of a unit, with a specific rounding mode\n      @param amount - Value to round\n      @param roundto - The value will be rounded to a mulitple of this unit (except when rounding mode is 'none')\n      @param mode - Rounding mode. Possible values:<br>\n        <ul>\n          <li>none: No rounding</li>\n          <li>toward-zero: Round toward zero</li>\n          <li>down: Round toward negative infity</li>\n          <li>up: Round toward positive infity</li>\n          <li>half-toward-zero: Round nearest multiple, round half of a multiple toward zero</li>\n          <li>half-down: Round nearest multiple, round half of a multiple toward negative infinity</li>\n          <li>half-up: Round nearest multiple, round half of a multiple toward positive infity</li>\n        </ul>\n      @returns The rounded value\n  */\n  static roundToMultiple(amount: MoneyParameter, roundto: MoneyParameter, mode: MoneyRoundingMode): Money {\n    return new Money(finmath.roundToMultiple(Money.parseParameter(amount), Money.parseParameter(roundto), mode));\n  }\n\n  /** Compares two numbers\n      @param lhs - Left hand value\n      @param rhs - Right hand value\n      @returns Returns 0 if amount1 === amount2, -1 if amount1 \\< amount2, 1 if amount1 \\> amount2\n  */\n  static cmp(lhs: MoneyParameter, rhs: MoneyParameter): -1 | 0 | 1 {\n    return finmath.cmp(Money.parseParameter(lhs), Money.parseParameter(rhs));\n  }\n\n  /** Test whether two values have a specific relation\n      @param lhs - Left hand value\n      @param relation - One of '\\<', '\\<=', '==', '!=', '\\>', '\\>=''\n      @param rhs - Right hand value\n      @returns TRUE if the relation holds\n      @example\n        console.log(Money.check(1, '\\<', 2)); // prints 'true'\n  */\n  static check(lhs: MoneyParameter, relation: MoneyTestTypes, rhs: MoneyParameter): boolean {\n    return finmath.test(Money.parseParameter(lhs), relation, Money.parseParameter(rhs));\n  }\n\n  /** Multiplies two numbers together\n  */\n  static multiply(left: MoneyParameter, right: MoneyParameter): Money {\n    return new Money(finmath.multiply(Money.parseParameter(left), Money.parseParameter(right)));\n  }\n\n  /** Returns a percentage of an amount\n      @param amount - Original amount\n      @param percentage - Percentage of the amount to return\n      @returns Percentage of the amount\n  */\n  static getPercentage(amount: MoneyParameter, percentage: MoneyParameter): Money {\n    return new Money(finmath.getPercentageOfAmount(Money.parseParameter(amount), Money.parseParameter(percentage)));\n  }\n\n  /** Divides two values, (currently with up to 5 decimals of precision)\n      @param numerator - Value to divide\n      @param divisor - Divisor\n      @returns Divided value\n  */\n  static divide(numerator: MoneyParameter, divisor: MoneyParameter): Money {\n    return new Money(finmath.divide(Money.parseParameter(numerator), Money.parseParameter(divisor)));\n  }\n  /** Returns the minimum of all the arguments\n      @param amount - First value\n      @param amounts - Rest of the values\n      @returns The lowest value among amount and amounts\n  */\n  static min(amount: MoneyParameter, ...amounts: MoneyParameter[]): Money {\n    return new Money(finmath.min(Money.parseParameter(amount), ...(amounts.map(Money.parseParameter))));\n\n  }\n\n  /** Returns the maximum of all the arguments\n      @param amount - First value\n      @param amounts - Rest of the values\n      @returns The highest value among amount and amounts\n  */\n  static max(amount: MoneyParameter, ...amounts: MoneyParameter[]): Money {\n    return new Money(finmath.max(Money.parseParameter(amount), ...(amounts.map(Money.parseParameter))));\n  }\n\n  /** format a price amount. extend # of decimals to specified # if not enough */\n  format(format?: MoneyFormatOptions): string {\n    return toText(splitValue(this.value),\n      format?.decimalSeparator ?? \".\",\n      format?.minDecimals ?? 2,\n      format?.thousandsSeparator ?? \"\");\n  }\n\n  toJSON(): string {\n    return this.value;\n  }\n\n  toString(): string {\n    return this.value;\n  }\n\n  toNumber(): number {\n    return parseFloat(this.value);\n  }\n}\n","import { Money } from \"./money\";\nimport { isBlob, isDate, isMoney, isTemporalInstant, isTemporalPlainDate, isTemporalPlainDateTime, isTemporalZonedDateTime, stdTypeOf } from \"./quacks\";\nimport type { Temporal } from \"temporal-polyfill\";\n\n/// Returns T or a promise resolving to T\nexport type MaybePromise<T> = Promise<T> | T;\n\nexport type ComparableType = number | null | bigint | string | Date | Money | boolean | Uint8Array | Temporal.Instant | Temporal.PlainDate | Temporal.ZonedDateTime;\n\ntype CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}`\n  ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}`\n  : Lowercase<S>;\n\ntype KeysToCamelCase<T> = {\n  [K in keyof T as CamelCase<string & K>]: ToCamelCase<T[K]>;\n};\n\ntype CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}` ?\n  `${T extends Capitalize<T> ? \"_\" : \"\"}${Lowercase<T>}${CamelToSnakeCase<U>}` :\n  S;\n\ntype KeysToSnakeCase<T> = {\n  [K in keyof T as CamelToSnakeCase<string & K>]: ToSnakeCase<T[K]>\n};\n\ntype NonRecordTypes = Date | Money | Blob | Temporal.Instant | Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime;\n\nexport type ToSnakeCase<T> =\n  T extends unknown[] ? Array<ToSnakeCase<T[number]>> :\n  T extends NonRecordTypes ? T :\n  T extends object ? KeysToSnakeCase<T> :\n  T;\n\nexport type ToCamelCase<T> =\n  T extends unknown[] ? Array<ToCamelCase<T[number]>> :\n  T extends NonRecordTypes ? T :\n  T extends object ? KeysToCamelCase<T> :\n  T;\n\n/** Convert a snake_case_name to its corresponding camelCaseName\n * @param name - Name to convert\n * @returns Converted name\n*/\nexport function nameToCamelCase(name: string) {\n  return name.replaceAll(/_[a-z]/g, c => c[1].toUpperCase());\n}\n\n/** Convert a camelCaseName to corresponding snake_case_name\n * @param name - Name to convert\n * @returns Converted name\n*/\nexport function nameToSnakeCase(name: string) {\n  return name.replaceAll(/[A-Z]/g, c => '_' + c.toLowerCase());\n}\n\n/// Should we rewrite the key/values in this object?\nfunction recodeObject(inp: object) {\n  return !isDate(inp) && !isMoney(inp) && !isBlob(inp) && !isTemporalInstant(inp) && !isTemporalPlainDate(inp) && !isTemporalPlainDateTime(inp) && !isTemporalZonedDateTime(inp);\n}\n\nfunction recursiveToSnakeCase<T>(inp: T): ToSnakeCase<T> {\n  if (Array.isArray(inp))\n    return inp.map(toSnakeCase) as ToSnakeCase<T>;\n  if (inp && typeof inp === \"object\" && recodeObject(inp))\n    return Object.fromEntries(Object.entries(inp).map(([key, value]) => [nameToSnakeCase(key), recursiveToSnakeCase(value)])) as ToSnakeCase<T>;\n  return inp as ToSnakeCase<T>;\n}\n\nfunction recursiveToCamelCase<T>(inp: T): ToCamelCase<T> {\n  if (Array.isArray(inp))\n    return inp.map(toCamelCase) as ToCamelCase<T>;\n  if (inp && typeof inp === \"object\" && recodeObject(inp))\n    return Object.fromEntries(Object.entries(inp).map(([key, value]) => [nameToCamelCase(key), recursiveToCamelCase(value)])) as ToCamelCase<T>;\n  return inp as ToCamelCase<T>;\n}\n\n/** Convert all keys to camel case recursively\n * @param inp - Array or object to convert\n * @returns Converted object\n*/\nexport function toSnakeCase<T extends object | object[] | null | undefined>(inp: T): ToSnakeCase<T> {\n  return recursiveToSnakeCase(inp);\n}\n\n/** Convert all keys to snake case recursively\n * @param inp - Array or object to convert\n * @returns Converted object\n*/\nexport function toCamelCase<T extends object | object[] | null | undefined>(inp: T): ToCamelCase<T> {\n  return recursiveToCamelCase(inp);\n}\n\n// TODO make this a quack if we're sure Uint8array is what we want to support - this is here basically to give Buffer support to be compatible with hscompat' compare\nfunction isUInt8Array(value: unknown): value is Uint8Array {\n  return value !== null && typeof value === \"object\" && \"length\" in value && (value as Uint8Array).BYTES_PER_ELEMENT === 1;\n}\n\n/** Compare two values of std-supported types\n * @param left - First value\n * @param right - Second value\n * @returns -1 if left \\< right, 0 if equal, 1 if left \\> right\n */\nexport function compare(left: ComparableType, right: ComparableType): -1 | 0 | 1 {\n  if (left === null)\n    return right === null ? 0 : -1;\n  else if (right === null)\n    return 1;\n\n  switch (typeof left) {\n    case \"boolean\": {\n      if (typeof right === \"boolean\")\n        return left !== right ? left < right ? -1 : 1 : 0;\n    } break;\n    case \"number\": {\n      switch (typeof right) {\n        case \"bigint\": {\n          const right_number = Number(right);\n          return left !== right_number ? left < right_number ? -1 : 1 : 0;\n        }\n        case \"number\": {\n          return left !== right ? left < right ? -1 : 1 : 0;\n        }\n        case \"object\": {\n          if (Money.isMoney(right))\n            return Money.cmp(left.toString(), right);\n        }\n      }\n    } break;\n    case \"bigint\": {\n      switch (typeof right) {\n        case \"bigint\": {\n          return left !== right ? left < right ? -1 : 1 : 0;\n        }\n        case \"number\": {\n          const left_number = Number(left);\n          return left_number !== right ? left_number < right ? -1 : 1 : 0;\n        }\n        case \"object\": {\n          if (Money.isMoney(right)) {\n            return Money.cmp(left.toString(), right);\n          }\n        }\n      }\n    } break;\n    case \"string\": {\n      if (typeof right === \"string\")\n        return left === right ? 0 : left < right ? -1 : 1;\n    } break;\n    case \"object\": {\n      if (Money.isMoney(left)) {\n        switch (typeof right) {\n          case \"number\":\n          case \"bigint\":\n            return Money.cmp(left, right.toString());\n          case \"object\": {\n            if (right === null) {\n              return 1;\n            } else if (Money.isMoney(right))\n              return Money.cmp(left, right);\n          }\n        }\n      } else if (isDate(left) && isDate(right)) {\n        const left_value = Number(left);\n        const right_value = Number(right);\n        return left_value !== right_value ? left_value < right_value ? -1 : 1 : 0;\n      } else if (isUInt8Array(left) && isUInt8Array(right)) {\n        const compareLength = Math.min(left.length, right.length);\n        for (let i = 0; i < compareLength; i++) {\n          if (left[i] !== right[i])\n            return left[i] < right[i] ? -1 : 1;\n        }\n        return left.length !== right.length ? left.length < right.length ? -1 : 1 : 0;\n      } else if (isTemporalInstant(left) && isTemporalInstant(right)) {\n        const left_value = left.epochMilliseconds;\n        const right_value = right.epochMilliseconds;\n        return left_value !== right_value ? left_value < right_value ? -1 : 1 : 0;\n      } else if (isTemporalPlainDate(left) && isTemporalPlainDate(right)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we're not loading Temporal types when packaging @webhare/std separately\n        return (globalThis as any).Temporal.PlainDate.compare(left, right);\n      } else if (isTemporalZonedDateTime(left) && isTemporalZonedDateTime(right)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we're not loading Temporal types when packaging @webhare/std separately\n        return (globalThis as any).Temporal.ZonedDateTime.compare(left, right);\n      }\n    } break;\n  }\n  throw new Error(`Cannot compare a ${stdTypeOf(left)} with a ${stdTypeOf(right)}`);\n}\n\n/** Returns all property keys of an object type whose value is comparable */\ntype ComparableFields<E extends object, K extends keyof E = keyof E> = K extends keyof E ? E[K] extends ComparableType ? K : never : never;\n\n/** Type of array elements for keys in `compareProperties` */\ntype ComparePropertiesArrayElement<E extends object> = ComparableFields<E> | [ComparableFields<E>, \"asc\" | \"desc\"];\n\n/** All possible types of object keys */\ntype AnyKey = string | symbol | number;\n\n/** Extracts the property name from an array element of CompareProperties */\ntype GetPropertyFromComparePropertiesArrayElement<T> = T extends AnyKey ? T : T extends [infer A, \"asc\" | \"desc\"] ? A : never;\n\n/** Get the list of properties referenced in the `compareProperties` keys list */\ntype GetPropertiesFromComparePropertiesKeys<K extends AnyKey | Array<AnyKey | [AnyKey, \"asc\" | \"desc\"]>> = K extends AnyKey ? K : K extends Array<infer T> ? GetPropertyFromComparePropertiesArrayElement<T> : never;\n\n/** Get all proper prefixes of a tuple, excluding the empty tuple and the source tuple */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype TuplePrefixes<K extends AnyKey | [...any[]]> = K extends [any] ? never : K extends [infer A, ...infer B] ? [A] | [A, ...TuplePrefixes<B>] : never;\n\n/** Template for possible keys value (needed to make TS understand that a tuple prefix of the keys is also a valid keys list */\ntype PossibleFields<E extends object> = ComparableFields<E> | [ComparePropertiesArrayElement<E>, ...Array<ComparePropertiesArrayElement<E>>];\n\n\nexport function compareProperties<const K extends ComparableFields<E> | [...Array<ComparePropertiesArrayElement<E>>], E extends object = Record<GetPropertiesFromComparePropertiesKeys<K>, ComparableType>>(fields: K) {\n  const compareList = (Array.isArray(fields) ? fields : [fields]).map((field): [keyof E, 1 | -1] => Array.isArray(field) ? [field[0], field[1] === \"desc\" ? -1 : 1] : [field, 1]);\n  const retval: (lhs: E, rhs: E) => number = (a, b) => {\n    for (const [field, negate] of compareList) {\n      if (a[field] === undefined || b[field] === undefined)\n        throw new Error(`Property '${String(field)}' does not exist`);\n      const res = negate * compare(a[field] as ComparableType, b[field] as ComparableType);\n      if (res)\n        return res;\n    }\n    return 0;\n  };\n  return Object.assign(retval, {\n    partialCompare: <T extends TuplePrefixes<K> & PossibleFields<E>>(partialFields: T) => compareProperties<T, E>(partialFields)\n  });\n}\n","import { stdTypeOf } from \"./quacks\";\nimport { Money } from \"./money\";\n\nexport type WildcardTypes = \"?*\";\n\n/** Encode string for use in a regexp\n * @param text - Text to encode\n * @param options - Options for encoding\n * @param options.wildcards - Type of wildcards to encode (defaults to none)\n * @returns Encoded for safe use in a RegExp\n*/\nexport function escapeRegExp(text: string, options?: { wildcards?: WildcardTypes }): string {\n  let mask = text.replaceAll(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); // $& means the whole matched string\n  if (options?.wildcards === \"?*\") {\n    mask = mask.replaceAll(\"\\\\*\", \".*\");\n    mask = mask.replaceAll(\"\\\\?\", \".\");\n  }\n  return mask;\n}\n\n/** Create a regular expression from one or more wildcard masks\n * @param masks - One or more masks with '?' and/or '*' wildcards\n * @returns Regular expression string\n*/\nexport function regExpFromWildcards(masks: string | string[], options?: { wildcards?: WildcardTypes; caseInsensitive?: boolean }): RegExp {\n  if (Array.isArray(masks) && masks.length === 0)\n    throw new Error(\"Empty mask list\");\n\n  const code = Array.isArray(masks)\n    ? `^(${masks.map(mask => escapeRegExp(mask, { wildcards: options?.wildcards || \"?*\" })).join('|')})$`\n    : `^${escapeRegExp(masks, { wildcards: options?.wildcards || \"?*\" })}$`;\n  return new RegExp(code, options?.caseInsensitive ? \"i\" : undefined);\n}\n\nfunction isHTMLUnrepresentableChar(curch: number) {\n  return (curch < 32 && curch !== 9 && curch !== 10 && curch !== 13)\n    || (curch >= 128 && curch <= 159);\n}\n\nfunction encodeEntities(str: string, html: boolean) {\n  let s = \"\";\n  for (const char of str) {\n    const curch = char.codePointAt(0);\n    if (curch === undefined || isHTMLUnrepresentableChar(curch))\n      continue;\n    if (curch >= 32 && curch < 128 && curch !== 38 && curch !== 60 && curch !== 62 && (html || curch !== 34 && curch !== 39)) {\n      s += String.fromCodePoint(curch);\n      continue;\n    }\n\n    switch (curch) {\n      case 10:\n        {\n          if (html) {\n            s += \"<br>\";\n            continue;\n          }\n          break;\n        }\n      case 13:\n        {\n          if (html)\n            continue;\n          break;\n        }\n      case 34:\n        {\n          s += \"&quot;\";\n          continue;\n        }\n      case 38:\n        {\n          s += \"&amp;\";\n          continue;\n        }\n      case 39:\n        {\n          s += \"&apos;\";\n          continue;\n        }\n      case 60:\n        {\n          s += \"&lt;\";\n          continue;\n        }\n      case 62:\n        {\n          s += \"&gt;\";\n          continue;\n        }\n    }\n\n    s += \"&#\" + curch + \";\";\n  }\n  return s;\n}\n\nfunction decodeEntities(str: string, html: boolean) {\n  if (html)\n    str = str.replace(/<br *\\/?>/g, \"\\n\");\n\n  str = str.replace(/&#(\\d+);/g, (_, dec) => String.fromCharCode(dec))\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&apos;/g, \"'\")\n    .replace(/&amp;/g, \"&\");\n\n  return str;\n}\n\nexport type StringEncodings = \"base64url\" | \"attribute\" | \"html\";\n\nexport function encodeString(str: string, encoding: StringEncodings): string {\n  if (encoding === \"base64url\")\n    return btoa(str).replaceAll(\"=\", \"\").replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\");\n  if (encoding === \"attribute\")\n    return encodeEntities(str, false);\n  if (encoding === \"html\")\n    return encodeEntities(str, true);\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n\nexport function decodeString(str: string, encoding: StringEncodings): string {\n  if (encoding === \"base64url\")\n    return atob(str.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\"));\n  if (encoding === \"attribute\")\n    return decodeEntities(str, false);\n  if (encoding === \"html\")\n    return decodeEntities(str, true);\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n\ntype JSONReplacerArgument = ((this: unknown, key: string, value: unknown) => unknown) | undefined;\n\nexport interface StringifyOptions {\n  replacer?: JSONReplacerArgument;\n  space?: string | number;\n  stable?: boolean;\n  ///Encode with types (preserve Money, Date, BigInt). Needs std.parseTyped\n  typed?: boolean;\n  ///What to target: string (like JSON.stringify), script (escapes '/') or attribute (escapes '/' and applies attribute encoding)\n  target?: \"string\" | \"script\" | \"attribute\";\n}\n\n/** Improved JSON encoder\n * @param arg - Object to encode\n * @param options - Encoding options\n*/\nexport function stringify(arg: unknown, options?: StringifyOptions) {\n  const usereplacer: JSONReplacerArgument = options?.stable || options?.typed ? (function (this: unknown, key: string, value: unknown) {\n    if (options.typed) {\n      const origvalue = (this as Record<string, unknown>)[key]; //We can't use 'value' as .toJSON() will already have been invoked\n      const type = stdTypeOf(origvalue);\n      switch (type) {\n        case \"function\":\n          throw new Error(`Cannot stringify property '${key}' of type \"${type}'`);\n        case \"Date\":\n          value = { \"$stdType\": \"Date\", date: (origvalue as Date).toISOString() };\n          break;\n        case \"Money\":\n        case \"bigint\":\n        case \"Instant\":\n        case \"PlainDate\":\n        case \"PlainDateTime\":\n        case \"ZonedDateTime\":\n          value = { \"$stdType\": type, [type.toLowerCase()]: (origvalue as { toString: () => string }).toString() };\n          break;\n        case \"object\":\n          if (\"$stdType\" in (origvalue as { \"$stdType\": string }))\n            throw new Error(`Cannot encode objects with already embedded '$stdType's`);\n        //fallthrough\n      }\n    }\n    if (options.stable && value && typeof value === \"object\" && !Array.isArray(value))\n      value = Object.fromEntries(Object.entries(value).sort((lhs, rhs) => lhs < rhs ? -1 : lhs === rhs ? 0 : 1));\n    if (options.replacer)\n      value = options.replacer.call(this, key, value);\n    return value;\n  }) : options?.replacer ?? undefined;\n\n  let result = JSON.stringify(arg, usereplacer, options?.space);\n  if (options?.target && [\"script\", \"attribute\"].includes(options.target)) {\n    result = result.replaceAll(\"/\", \"\\\\/\");\n    if (options.target === \"attribute\")\n      result = encodeEntities(result, false);\n  }\n  return result;\n}\n\n/** Decode JSON with types (Generated using stringify with typed:true ) */\nexport function parseTyped(input: string) {\n  return JSON.parse(input, (key, value) => {\n    switch (value?.[\"$stdType\"]) {\n      case \"Money\":\n        return new Money(value.money);\n      case \"Date\":\n        return new Date(value.date);\n      case \"bigint\":\n      case \"BigInt\": //pre wh5.7 spelling\n        return BigInt(value.bigint as string);\n      case \"Instant\":\n      case \"PlainDate\":\n      case \"PlainDateTime\":\n      case \"ZonedDateTime\":\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we just assume/require you to have Temporal installed if you expect to receive/decode Temporal types. browsers should catch up eventually\n        if (!(globalThis as any).Temporal)\n          throw new Error(`Temporal is not available in this environment, cannot deserialize value of type Temporal.${value[\"$stdType\"]}. Load eg. @webhare/deps/temporal-polyfill to use Temporal types in browsers`);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we just assume/require you to have Temporal installed if you expect to receive/decode Temporal types. browsers should catch up eventually\n        return (globalThis as any).Temporal[value[\"$stdType\"]].from(value[value[\"$stdType\"].toLowerCase()]);\n      case undefined:\n        return value;\n      default:\n        throw new Error(`Unrecognized type '${value[\"$stdType\"]}'`);\n    }\n  });\n}\n\n/** Generate a slug from a (suggested) (file)name\n * @param text - Text to convert\n * @param options - Options for slugification\n * @param options.separator - Separator to use between words (defaults to '-')\n * @param options.keep - Set of characters to keep in addition to a-z0-9\n * @returns Slugified text or null if we couldn't generate anything reeadable\n */\nexport function slugify(text: string, { separator = \"-\", keep = \"\" }: {\n  separator?: string;\n  keep?: string;\n} = {}): string | null {\n  //This function mixes HS getSafeName with a few more modern approaches\n  const keepclass = `[^a-z0-9${escapeRegExp(keep)}]`;\n  text = text\n    .normalize('NFD')                   // split an accented letter in the base letter and the acent\n    // eslint-disable-next-line no-control-regex\n    .replaceAll(/[\\u0000-\\u001F]/g, '')\n    .replaceAll(/[\\u0300-\\u036f]/g, '')   // remove all previously split accents\n    .replaceAll(/ß/g, 'ss')               // german ss\n    .toLowerCase()\n    .replace(new RegExp(`^${keepclass}+`), \"\") //replace bad characters at the start\n    .replace(new RegExp(`${keepclass}+$`), \"\") //.. and end\n    .replaceAll(new RegExp(`${keepclass}+`, \"g\"), separator); // replace all non alphanumeric/space with a single dash\n\n  return text || null; //we return 'null' on purpose so callers realize we won't necessarily give them a string!\n}\n\n/** Check if an email address is valid in modern times (an emailcheck much closer to what a browser would do, with additional sanity checks. No attempt to allow all legacy styles supported by the RFCs but 99.9%+ sure to be an error if seen submitted in a form\n    @returns True if the email address appears to be a well-formed email address to a non-greybeard\n*/\nexport function isValidEmail(email: string): boolean {\n  if (email.length > 254) //TODO count bytes instead of characters\n    return false;\n\n  return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]{1,64}@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*(?:\\.[a-zA-Z0-9-]{2,})$/.test(email);\n}\n\n/** Joins a path to a URL, eliminating any double slash (similar to NodeJS path.join)\n * @param baseurl - URL to join to\n * @param path - Path to join. May not contain '.' or '..' segments in the path\n * @returns Joined URL, with a single slash between both parts\n*/\nexport function joinURL(baseurl: string, path: string) {\n  const pathtoks = path.match(/([^?#]*)(.*)/)!; //this will always return something\n  if (pathtoks[1].match(/(\\/\\/)|:/))\n    throw new Error(`Invalid path to merge with: ${path}`);\n  //look for any . or .. path segments\n  if ((\"/\" + path + \"/\").match(/\\/\\.\\.?\\//))\n    throw new Error(`Invalid path to merge with: ${path}`);\n\n  if (baseurl.endsWith(\"/\"))\n    baseurl = baseurl.substring(0, baseurl.length - 1);\n  return baseurl + (path.startsWith(\"/\") ? path : \"/\" + path);\n}\n\nfunction unpackUrl(inUrl: string) {\n  const retval = {\n    inUrl,\n    scheme: \"\",\n    schemeSpecificPart: \"\",\n    user: \"\",\n    password: \"\",\n    host: \"\",\n    port: 0,\n    urlPathSlash: false,\n    urlPath: \"\",\n    secure: false,\n    specifiedPort: false,\n    isDefaultPort: false,\n    origin: \"\",\n  };\n  let missingSlash = false;\n  const firstColon = inUrl.indexOf(\":\");\n  if (firstColon < 0) {\n    retval.scheme = inUrl;\n    return retval;\n  }\n\n  retval.scheme = decodeURIComponent(inUrl.substring(0, firstColon)).toLowerCase();\n  inUrl = inUrl.substring(firstColon + 1);\n  retval.schemeSpecificPart = inUrl;\n\n  if (!retval.schemeSpecificPart.startsWith(\"//\")) //not an internet host format\n    return retval;\n\n  inUrl = inUrl.substring(2);\n\n  //Find the first slash, it terminates the user..port part\n  let firstSlash = inUrl.indexOf(\"/\");\n  if (firstSlash < 0)\n    firstSlash = inUrl.length;\n\n  const firstAt = inUrl.indexOf(\"@\");\n  if (firstAt >= 0 && firstAt < firstSlash) {\n    //Username and possible password are present\n    const pwdColon = inUrl.indexOf(\":\");\n    if (pwdColon >= 0 && pwdColon < firstAt) {\n      retval.user = decodeURIComponent(inUrl.substring(0, pwdColon));\n      retval.password = decodeURIComponent(inUrl.substring(pwdColon + 1, firstAt));\n    } else {\n      retval.user = decodeURIComponent(inUrl.substring(0, firstAt));\n    }\n    inUrl = inUrl.substring(firstAt + 1);\n    firstSlash = inUrl.indexOf(\"/\");\n    if (firstSlash < 0)\n      firstSlash = inUrl.length;\n  }\n\n  //Common mistake, at least in http* urls, specifying a ? right after the URL (ADDME perhaps this shoud apply for all URLs? check rfc)\n  if (retval.scheme === \"http\" || retval.scheme === \"https\") {\n    const firstQuestionMark = inUrl.indexOf(\"?\");\n    if (firstQuestionMark >= 0 && firstQuestionMark < firstSlash) {\n      firstSlash = firstQuestionMark;\n      missingSlash = true;\n    }\n  }\n\n  let closingBracket = 0;\n  if (inUrl.startsWith(\"[\")) //RFC3986 IP-literal\n    closingBracket = inUrl.indexOf(\"]\");\n\n  if (closingBracket > 0) { //Indeed an IP-literal\n    retval.host = decodeURIComponent(inUrl.substring(1, closingBracket));\n    if (inUrl[closingBracket + 1] === ':') //port follows\n      retval.port = parseInt(decodeURIComponent(inUrl.substring(closingBracket + 2, firstSlash - 1)), 0) || 0;\n    else\n      retval.port = getSchemeDefaultPort(retval.scheme);\n  } else {\n    const portColon = inUrl.indexOf(\":\");\n    if (portColon >= 0 && portColon < firstSlash) {\n      retval.host = decodeURIComponent(inUrl.substring(0, portColon));\n      retval.port = parseInt(decodeURIComponent(inUrl.substring(portColon + 1, firstSlash)), 0) || 0;\n      retval.specifiedPort = true;\n      retval.isDefaultPort = retval.port === getSchemeDefaultPort(retval.scheme);\n    } else {\n      retval.host = decodeURIComponent(inUrl.substring(0, firstSlash));\n      retval.port = getSchemeDefaultPort(retval.scheme);\n      retval.isDefaultPort = true;\n    }\n  }\n\n  retval.urlPathSlash = !(missingSlash || firstSlash === inUrl.length);\n  retval.urlPath = inUrl.substring(firstSlash + (missingSlash ? 0 : 1));\n  retval.secure = [\"aas\", \"ftps\", \"https\", \"imaps\", \"ldaps\", \"shttp\", \"sips\", \"ssh\", \"sftp\"].includes(retval.scheme);\n  if (retval.host)\n    retval.origin = retval.scheme + \"://\" + retval.host + (retval.isDefaultPort ? \"\" : \":\" + retval.port);\n  return retval;\n}\n\nfunction getSchemeDefaultPort(scheme: string) {\n  switch (scheme) {//port numbers from RFC1738\n    case \"ftp\": return 21;\n    case \"http\": return 80;\n    case \"ws\": return 80;\n    case \"gopher\": return 70;\n    case \"nntp\": return 119;\n    case \"telnet\": return 23;\n    case \"wais\": return 210;\n    case \"prospero\": return 1525;\n    //well known protocols\n    case \"https\": return 443;\n    case \"wss\": return 443;\n    case \"ldap\": return 389;\n    case \"ldaps\": return 636;\n    case \"smtp\": return 25;\n    default: return 0;\n  }\n}\n\n\n/** Test whether an URL is a valid url. This function verifies that an URL looks\n * like an URL. If the scheme is recognized, more  stringent checks are performed\n * @returns True if the url appears to be a well-formed url\n */\nexport function isValidUrl(url: string): boolean {\n  // test: no control characters or spaces (0x00 - 0x20)\n  // test: starts with 'scheme' ':' anychar +\n  // test: scheme only has letters, numbers, '-', '.' or '+' (and is not empty)\n  // Unpack url\n  // test: for http/https schema, hostname is not empty and port is in range 1-65535\n\n  // eslint-disable-next-line no-control-regex\n  if (!url.match(/^[-.+a-zA-Z0-9]+:[^\\x00-\\x20]+$/))\n    return false;\n  const unpacked = unpackUrl(url);\n  if (unpacked.scheme !== \"http\" && unpacked.scheme !== \"https\")\n    return true;\n  if (unpacked.port < 1 || unpacked.port > 65535 || !unpacked.host)\n    return false;\n  return true;\n}\n\n/** Uppercases a string using the C-locale (so only the ASCII characters a-z are uppercased)\n * @param str - String to uppercase\n * @returns Uppercased string\n */\nexport function toCLocaleUppercase(str: string) {\n  return str.replaceAll(/[a-z]+/g, part => part.toUpperCase());\n}\n\n/** Lowercases a string using the C-locale (so only the ASCII characters A-Z are lowercased)\n * @param str - String to lowercase\n * @returns Lowercased string\n */\nexport function toCLocaleLowercase(str: string) {\n  return str.replaceAll(/[A-Z]+/g, part => part.toLowerCase());\n}\n\n/** Calculate the levenshtein distance between two strings */\nexport function levenshteinDistance(a: string, b: string): number {\n  /* calculateLevenshteinDistance is adopted from https://github.com/gustf/js-levenshtein/blob/master/index.js, licensed MIT © Gustaf Andersson\n    Picked over fastest-levenshtein because a permanent 256KB memory area for a bit more speed doesn't seem worth it\n  */\n  function _min(d0: number, d1: number, d2: number, bx: number, ay: number) {\n    return d0 < d1 || d2 < d1\n      ? d0 > d2\n        ? d2 + 1\n        : d0 + 1\n      : bx === ay\n        ? d1\n        : d1 + 1;\n  }\n\n  if (a === b) {\n    return 0;\n  }\n\n  if (a.length > b.length) {\n    const tmp = a;\n    a = b;\n    b = tmp;\n  }\n\n  let la = a.length;\n  let lb = b.length;\n\n  while (la > 0 && (a.charCodeAt(la - 1) === b.charCodeAt(lb - 1))) {\n    la--;\n    lb--;\n  }\n\n  let offset = 0;\n\n  while (offset < la && (a.charCodeAt(offset) === b.charCodeAt(offset))) {\n    offset++;\n  }\n\n  la -= offset;\n  lb -= offset;\n\n  if (la === 0 || lb < 3) {\n    return lb;\n  }\n\n  let x = 0;\n  let y, d0, d1, d2, d3, dd = 0, dy, ay, bx0, bx1, bx2, bx3;\n\n  const vector: number[] = [];\n\n  for (y = 0; y < la; y++) {\n    vector.push(y + 1);\n    vector.push(a.charCodeAt(offset + y));\n  }\n\n  const len = vector.length - 1;\n\n  for (; x < lb - 3;) {\n    bx0 = b.charCodeAt(offset + (d0 = x));\n    bx1 = b.charCodeAt(offset + (d1 = x + 1));\n    bx2 = b.charCodeAt(offset + (d2 = x + 2));\n    bx3 = b.charCodeAt(offset + (d3 = x + 3));\n    dd = (x += 4);\n    for (y = 0; y < len; y += 2) {\n      dy = vector[y];\n      ay = vector[y + 1];\n      d0 = _min(dy, d0, d1, bx0, ay);\n      d1 = _min(d0, d1, d2, bx1, ay);\n      d2 = _min(d1, d2, d3, bx2, ay);\n      dd = _min(d2, d3, dd, bx3, ay);\n      vector[y] = dd;\n      d3 = d2;\n      d2 = d1;\n      d1 = d0;\n      d0 = dy;\n    }\n  }\n\n  for (; x < lb;) {\n    bx0 = b.charCodeAt(offset + (d0 = x));\n    dd = ++x;\n    for (y = 0; y < len; y += 2) {\n      dy = vector[y];\n      vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n      d0 = dy;\n    }\n  }\n\n  return dd;\n}\n\n/** Return the length of the string in bytes when UTF-8 encoded */\nexport function getUTF8Length(str: string) {\n  return new TextEncoder().encode(str).length;\n}\n\n/** Truncate the string so it's at most len UTF-8 bytes long */\nexport function limitUTF8Length(str: string, len: number) {\n  // TextEncoder.encodeInto writes into the given array until there's no more room to add more valid UTF-8 sequences from the\n  // source. We can use this property to limit the number of bytes by creating an array that has room for at most the given\n  // number of bytes.\n  const utf8array = new Uint8Array(len);\n  // This function returns the actual number of bytes written to the array\n  const { written } = new TextEncoder().encodeInto(str, utf8array);\n  // Decode only the actually written bytes\n  return new TextDecoder().decode(utf8array.subarray(0, written));\n}\n","/** Test whether a string looks like a valid random id */\nexport function isLikeRandomId(input: string): boolean { //TODO add encoding parameter/bytes support ?\n  return Boolean(input.match(/^[A-Za-z0-9_-]{22}$/));\n}\n\n/** Test whether a string is a valid hex UUID\n * @param input - uuid in hex format to verify. you may need to lowercase the uuid first\n * @param format - optional, if set to \"v4\" it will only accept UUIDv4 format\n*/\nexport function isValidUUID(input: string, format?: \"v4\"): boolean {\n  //we'll require you to lowercase the uuid first to increase the chance that you'll actually be storing/matching it in lowercase too\n\n  if (format === \"v4\")\n    return Boolean(input.match(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/));\n  else if (format !== undefined)\n    throw new Error(`Unsupported format '${format}'`);\n  else\n    return Boolean(input.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/));\n}\n\n/** Generate a configurable random id (the default settings, base64url and 16 bytes, match HareScript's GenerateUFS128BitId)\n * @param encoding - Encoding to use, base64url, hex or uuidv4. Default is base64url\n * @param bytes - Number of bytes to generate. Default is 16\n * @returns An encoded ID. With the default settings it will be a url (and filename) safe string of 22 characters in length\n */\nexport function generateRandomId(encoding: \"base64url\" | \"hex\" | \"uuidv4\" = \"base64url\", bytes: number = 16): string {\n  if (encoding === \"uuidv4\") {\n    if (bytes !== 16)\n      throw new Error(\"UUIDv4 encoding only supports 16 bytes\");\n\n    if (crypto.randomUUID) //NOTE: not available in non-secure contexts so the fallback can never go away\n      return crypto.randomUUID();\n  }\n\n  const u8array = new Uint8Array(bytes);\n  crypto.getRandomValues(u8array);\n\n  if (encoding === \"uuidv4\") {\n    u8array[6] = (u8array[6] & 0x0f) | 0x40;\n    u8array[8] = (u8array[8] & 0x3f) | 0x80;\n    return [...u8array.values()].map(x => x.toString(16).padStart(2, \"0\")).join(\"\").replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, \"$1-$2-$3-$4-$5\");\n  }\n\n  if (encoding === \"base64url\")\n    return btoa(String.fromCharCode.apply(null, u8array as unknown as number[])).replaceAll(\"=\", \"\").replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\");\n\n  if (encoding === \"hex\")\n    return [...u8array.values()].map(x => x.toString(16).padStart(2, \"0\")).join(\"\");\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any -- Cannot specify this without using any */\n\nexport interface EmplaceHandler<ValueType> {\n  insert?: () => ValueType;\n  update?: (current: ValueType) => ValueType;\n}\n\nfunction binarySearchImpl<A, K>(compareFn: (element: A, key: K) => number, contents: A[], searchfor: K, upper_bound: boolean): { present: boolean; index: number } {\n  let first = 0;\n  let len = contents.length;\n  let present = false;\n\n  const cmpbound = upper_bound ? 1 : 0;\n  let unsorted_cmp = 0; // if this is non-0 and cmp is this value, we have an unsorted list\n  while (len > 0) {\n    const half = Math.floor(len / 2);\n    const middle = first + half;\n    const cmp = compareFn(contents[middle], searchfor);\n    if (cmp === 0) {\n      present = true;\n      unsorted_cmp = upper_bound ? -1 : 1;\n    } else if (cmp === unsorted_cmp)\n      throw new Error(`The provided array was not properly sorted!`);\n\n    if (cmp < cmpbound) {\n      first = middle + 1;\n      len -= half;\n      --len;\n    } else {\n      len = half;\n    }\n  }\n  return { present, index: first };\n}\n\n//emplace is based on https://github.com/tc39/proposal-upsert (a Map.prototype.emplace)\n/** Place a value into a Map\n * @param map - The map to place the value into\n * @param key - The key to add/replace\n * @param handler - Callbacks for inserting or updating the value\n * @returns The value that was placed into the map.\n * @throws If the key is not found and no insert handler is provided\n */\nexport function emplace<T extends Map<any, any> | WeakMap<any, any>>(\n  map: T,\n  key: T extends Map<infer K, any> ? K : T extends WeakMap<infer K, any> ? K : never,\n  handler?: T extends Map<any, infer V> ? EmplaceHandler<V> : T extends WeakMap<any, infer V> ? EmplaceHandler<V> : never):\n  T extends Map<any, infer V> ? V : T extends WeakMap<any, infer V> ? V : never {\n  let current = map.get(key);\n  if (current !== undefined) {\n    if (handler?.update) {\n      current = handler.update(current);\n      map.set(key, current);\n    }\n    return current;\n  }\n\n  if (!handler?.insert)\n    throw new Error(\"Key not found and no insert handler provided\");\n\n  const setvalue = handler.insert();\n  map.set(key, setvalue);\n  return setvalue;\n}\n\n// the `| keyof X` is needed to be able to use a `keyof X` type as key parameter in DistributedPick or DistributedOmit in generics\nexport type DistributedKeys<X extends object> = (X extends object ? keyof X : never) | keyof X;\n\n/** Applies Pick to all types in a union. Allows all keys that are present in any object in the union. Warning: You might not be\n    able to use all keys of the union if TypeScript has narrowed the union to a specific type. Eg:\n```typescript\ntype A = { x: number; t: \"a\"; a: number } | { x: number; t: \"b\"; b: number };\nconst a: A = { t: \"a\", a: 1 };\nconst b = pick(a, [\"t\", \"a\", \"b\"]); // No overload matches this call. <snip> Type '\"b\"' is not assignable to type '\"a\" | \"t\" | \"d\"'.\n```\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to return\n    @returns Type with only the specified keys (distributed over the union if present)\n*/\nexport type DistributedPick<X extends object, Y extends DistributedKeys<X>> = X extends object ? Pick<X, keyof X & Y> : never;\n\n/** Applies Omit to all types in a union. Allows all keys that are not present in any object in the union. Warning: You might not be\n    able to use all keys of the union if TypeScript has narrowed the union to a specific type. Eg:\n```typescript\ntype A = { x: number; t: \"a\"; a: number } | { x: number; t: \"b\"; b: number };\nconst a: A = { t: \"a\", a: 1 };\nconst b = omit(a, [\"b\"]); // No overload matches this call. <snip> Type '\"b\"' is not assignable to type '\"a\" | \"t\" | \"d\"'.\n```\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to leave out\n    @returns Type with only the specified keys left out (distributed over the union if present)\n*/\nexport type DistributedOmit<X extends object, Y extends DistributedKeys<X>> = X extends object ? Omit<X, keyof X & Y> : never;\n\n/** Returns an object with a selection of properties\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to return\n    @param obj - Object to pick properties out of\n    @param keys - Names of the properties to pick\n    @returns Resulting object\n*/\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(obj: T, keys: readonly K[]): DistributedPick<T, K>;\n\n/** Returns an array with a selection of properties\n    @typeParam T - Type of the supplied array\n    @typeParam K - Type of the property keys to return\n    @param arr - Array to pick properties out of\n    @param keys - Names of the properties to pick\n    @returns Resulting array\n*/\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(arr: T[], keys: readonly K[]): Array<DistributedPick<T, K>>;\n\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(value: T | T[], keys: readonly K[]): DistributedPick<T, K> | Array<DistributedPick<T, K>> {\n  if (Array.isArray(value))\n    return value.map((elt: T) => pick(elt, keys));\n  const ret = {} as T;\n  keys.forEach((key: K) => {\n    if (key in value)\n      ret[key] = value[key];\n  });\n  return ret as object as DistributedPick<T, K>;\n}\n\n/** Returns an object with a selection of properties left out\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to leave out\n    @param obj - Object to leave properties out of\n    @param keys - Names of the properties to remove\n    @returns Resulting object\n*/\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(obj: T, keys: readonly K[]): DistributedOmit<T, K>;\n\n/** Returns an array with a selection of properties left out\n    @typeParam T - Type of the supplied array\n    @typeParam K - Type of the property keys to leave out\n    @param arr - Array to leave properties out of\n    @param keys - Names of the properties to leave out\n    @returns Resulting array\n*/\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(arr: T[], keys: readonly K[]): Array<DistributedOmit<T, K>>;\n\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(value: T | T[], keys: readonly K[]): DistributedOmit<T, K> | Array<DistributedOmit<T, K>> {\n  if (Array.isArray(value))\n    return value.map((elt: T) => omit(elt, keys));\n  const ret = {} as T;\n  for (const [key, val] of Object.entries(value)) {\n    if (!keys.includes(key as K))\n      ret[key as K] = val;\n  }\n  return ret as object as DistributedOmit<T, K>;\n}\n\n/** Shuffle an array in-place\n * @param array - Array to shuffle\n * @returns The shuffled array\n*/\nexport function shuffle<T>(array: T[]): T[] {\n  for (let i = array.length - 1; i > 0; i--) {\n    const j = Math.floor(Math.random() * (i + 1));\n    [array[i], array[j]] = [array[j], array[i]];\n  }\n  return array;\n}\n\n/** Returns (and TypeScript-asserts) that the specified function is truthy. Handy for adjusting the type of an array when\n * filtering out falsy values\n * @example\n * const myarray: Array&lt;number | null&gt; = [0, null];\n * const filtered: number[] = myarray.filter(isTruthy);\n **/\nexport function isTruthy<T>(a: T): a is (T & {}) {\n  return Boolean(a);\n}\n\n/** Append to array, without overflowing the stack (eg V8 overflows at more than 32K entries)\n * @param array - Array to append to\n * @param values - Values to append\n*/\nexport function appendToArray<T>(array: T[], values: ReadonlyArray<NoInfer<T>>): void {\n  if (values.length < 1000)\n    array.push(...values); //push should be safe enough\n  else for (const value of values) //performance wise this appears just as fast as tricks with pushing blocks of slices\n    array.push(value);\n\n  //not returning the original array to make it clear we're not creating a new one\n}\n\ntype TypedEntriesInternal<T extends object, K extends keyof T> = K extends keyof T ? [K, T[K]] : never;\n\n/** Returns a union of [ key, value ] types for an object */\nexport type TypedEntries<T extends object> = T extends object ? TypedEntriesInternal<T, keyof T & string> : never;\n\n/** Returns an array of key/values of the enumerable own properties of an object, with exact types. Use when\n * no extra properties are expected on the object. Exists because Object.entries returns always string as key type.\n * @param obj - Object that contains the properties and methods\n */\nexport function typedEntries<T extends object>(obj: T): Array<TypedEntries<T>> {\n  return Object.entries(obj) as Array<TypedEntries<T>>;\n}\n\n/** Returns an array of keys of the enumerable own properties of an object, with exact types. Use when\n * no extra properties are expected on the object. Exists because Object.keys returns always string as key type.\n * @param obj - Object that contains the properties and methods\n */\nexport function typedKeys<T extends object>(obj: T): Array<keyof T & string> {\n  return Object.keys(obj) as Array<keyof T & string>;\n}\n\n/** Given a union of [key, value] types, returns the object constructed from those pairs. Exists because\n *  Object.fromEntries does not take the type of the keys and values into account.\n * @typeParam T - Union of [key, value] pairs\n */\nexport type TypedFromEntries<T extends [string, unknown]> = { [C in T as C[0]]: C[1] };\n\n/** Returns an object from an iterable of [key, value] pairs, with exact types. Exists because Object.fromEntries\n * doesn't take the type of the keys and values into account.\n * @param entries - Iterable of [key, value] pairs\n * @returns An object with the same keys and values as the input\n */\nexport function typedFromEntries<T extends [string, unknown]>(entries: Iterable<T>): TypedFromEntries<T> {\n  return Object.fromEntries(entries) as TypedFromEntries<T>;\n}\n\n\nexport class SortedMultiSet<V> {\n  private contents: V[] = [];\n\n  constructor(private compareFn: (lhs: V, rhs: V) => number, contents?: V[]) {\n    if (contents)\n      this.addMultiple(contents);\n  }\n\n  get size() {\n    return this.contents.length;\n  }\n\n  at(index: number): V | undefined {\n    return this.contents.at(index);\n  }\n\n  add(value: V): number {\n    const pos = this.upperBound(value);\n    this.contents.splice(pos, 0, value);\n    return pos;\n  }\n\n  addMultiple(values: V[]): void {\n    for (const value of values) {\n      this.add(value);\n    }\n  }\n\n  delete(key: V): void {\n    const [start, limit] = this.range(key);\n    this.contents.splice(start, limit - start);\n  }\n\n  clear() {\n    this.contents.splice(0, this.contents.length);\n  }\n\n  lowerBound(key: Readonly<V>): { present: boolean; index: number } {\n    return binarySearchImpl(this.compareFn, this.contents, key, false);\n  }\n\n  upperBound(key: Readonly<V>): number {\n    return binarySearchImpl(this.compareFn, this.contents, key, true).index;\n  }\n\n  range(key: Readonly<V>): [number, number] {\n    return [this.lowerBound(key).index, this.upperBound(key)];\n  }\n\n  slice(start: number, limit: number): V[] {\n    return this.contents.slice(start, limit);\n  }\n\n  *#sliceIterator(start: number, limit: number): Generator<V, void> {\n    for (let idx = start; idx < limit; ++idx)\n      yield this.contents[idx];\n  }\n\n  sliceRange(key: Readonly<V>): V[] {\n    const [start, limit] = this.range(key);\n    return this.slice(start, limit);\n  }\n\n  rangeIterator(key: Readonly<V>): Iterable<V> {\n    const [start, limit] = this.range(key);\n    return this.#sliceIterator(start, limit);\n  }\n}\n\nexport class SortedMultiMap<K, V> {\n  private compareFn;\n  private contents: Array<[K, V]> = [];\n\n  constructor(compareFn: (lhs: K, rhs: K) => number, contents?: Array<[K, V]>) {\n    this.compareFn = (element: [K, V], key: K) => compareFn(element[0], key);\n    if (contents)\n      this.addMultiple(contents);\n  }\n\n  get size() {\n    return this.contents.length;\n  }\n\n  at(index: number): [K, V] | undefined {\n    return this.contents.at(index);\n  }\n\n  add(key: K, value: V): number {\n    const pos = this.upperBound(key);\n    this.contents.splice(pos, 0, [key, value]);\n    return pos;\n  }\n\n  addMultiple(values: Array<[K, V]>) {\n    for (const [key, value] of values) {\n      this.add(key, value);\n    }\n  }\n\n  delete(key: K): void {\n    const [start, limit] = this.range(key);\n    this.contents.splice(start, limit - start);\n  }\n\n  clear() {\n    this.contents.splice(0, this.contents.length);\n  }\n\n  lowerBound(key: Readonly<K>): { present: boolean; index: number } {\n    return binarySearchImpl(this.compareFn, this.contents, key, false);\n  }\n\n  upperBound(key: Readonly<K>): number {\n    return binarySearchImpl(this.compareFn, this.contents, key, true).index;\n  }\n\n  range(key: Readonly<K>): [number, number] {\n    return [this.lowerBound(key).index, this.upperBound(key)];\n  }\n\n  slice(start: number, limit: number): Array<[K, V]> {\n    return this.contents.slice(start, limit);\n  }\n\n  *#sliceIterator(start: number, limit: number): Generator<[K, V], void> {\n    for (let idx = start; idx < limit; ++idx)\n      yield this.contents[idx];\n  }\n\n  sliceRange(key: Readonly<K>): Array<[K, V]> {\n    const [start, limit] = this.range(key);\n    return this.slice(start, limit);\n  }\n\n  rangeIterator(key: Readonly<K>): Iterable<[K, V]> {\n    const [start, limit] = this.range(key);\n    return this.#sliceIterator(start, limit);\n  }\n}\n","function propagateAbort(signal: AbortSignal, cb: ((reason: typeof signal[\"reason\"]) => void) | AbortController) {\n  if (signal.aborted) {\n    if (\"abort\" in cb)\n      cb.abort(signal.reason);\n    else\n      cb(signal.reason);\n  } else signal.addEventListener(\"abort\", () => {\n    if (\"abort\" in cb)\n      cb.abort(signal.reason);\n    else\n      cb(signal.reason);\n  });\n}\n\nexport type AbortSignals = Iterable<AbortSignal | Promise<AbortSignal> | undefined | null> | AbortSignal | Promise<AbortSignal> | null | undefined;\n\n/** Calls the callback when any of the passed abort signals is (or already was) aborted. Use\n * this instead of addEventListener when it is possible that any of the abortsignals was already aborted.\n*/\nexport function whenAborted(signals: AbortSignals, cb: ((reason: AbortSignal[\"reason\"]) => void) | AbortController): void {\n  propagateAbort(combineAbortSignals(signals), cb);\n}\n\n/** Combines abort signals (or promises for abort signals) into one abort signal. More generic version of AbortSignal.any() */\nexport function combineAbortSignals(signals: AbortSignals): AbortSignal {\n  if (!signals || !(Symbol.iterator in signals))\n    signals = [signals];\n  const abortController = new AbortController;\n  for (const signal of signals) {\n    if (signal) {\n      if (\"then\" in signal) {\n        // Convert promise errors to abort\n        void signal.then(s => propagateAbort(s, abortController), e => abortController.abort(e));\n      } else\n        propagateAbort(signal, abortController);\n    }\n  }\n  return abortController.signal;\n}\n","const unlock = Symbol(\"unlock\");\n\n/** A mutex which is only visible in the current JavaScript VM\n\n    @example\n```ts\nconst mutex = new LocalMutex;\n\nusing lock = await mutex.lock();\nlock.release();\n\n// If you'll be relying on automatic release\nusing lock = await mutex.lock();\nvoid(lock);\n```\n\n*/\nexport class LocalMutex {\n  private locked = false;\n  private unlockList = new Array<() => void>;\n\n  /** Lock this mutex\n   * @returns Lock object. Use with `using` to ensure automatic unlock\n   */\n  async lock() {\n    if (this.locked) {\n      const defer = Promise.withResolvers<void>();\n      this.unlockList.push(() => defer.resolve());\n      await defer.promise;\n    } else {\n      this.locked = true;\n    }\n    return new LocalLock(this);\n  }\n\n  [unlock](): void {\n    if (this.unlockList.length > 0)\n      (this.unlockList.shift()!)(); //we're fair... unlock longest waiter\n    else\n      this.locked = false;\n  }\n}\n\n/** Instance of a LocalMutex lock */\nclass LocalLock implements Disposable {\n  private mutex: LocalMutex | null;\n\n  constructor(mutex: LocalMutex) {\n    this.mutex = mutex;\n  }\n  /** Explicitly release the lock\n   * @throws Error if the lock is already released\n  */\n  release() {\n    if (!this.mutex)\n      throw new Error(\"Lock already released\");\n\n    this.mutex[unlock]();\n    this.mutex = null;\n  }\n  [Symbol.dispose]() {\n    this.mutex?.[unlock]();\n  }\n}\n\nexport type { LocalLock };\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/std\" {\n}\n\n// Adding APIs may also require an update to https://www.webhare.dev/manuals/typescript/harescript-conversion-guide/\nexport { sleep, createDeferred, wrapInTimeout, serialize, wrapSerialized, type DeferredPromise, type SerializeOptions } from \"./promises\";\n\nexport { compare, compareProperties, nameToCamelCase, nameToSnakeCase, toSnakeCase, toCamelCase } from \"./types\";\nexport type { ToSnakeCase, ToCamelCase, ComparableType, MaybePromise } from \"./types\";\n\nexport { encodeString, decodeString, escapeRegExp, regExpFromWildcards, stringify, parseTyped, slugify, isValidEmail, isValidUrl, joinURL, type StringEncodings, toCLocaleLowercase, toCLocaleUppercase, levenshteinDistance, getUTF8Length, limitUTF8Length } from \"./strings\";\nexport { generateRandomId, isLikeRandomId, isValidUUID } from \"./platformbased\";\n\nexport { shuffle, emplace, pick, omit, isTruthy, appendToArray, typedEntries, typedFromEntries, typedKeys, SortedMultiSet, SortedMultiMap, type TypedEntries, type TypedFromEntries } from \"./collections\";\nexport type { EmplaceHandler, DistributedKeys, DistributedOmit, DistributedPick } from \"./collections\";\n\nexport { Money, type MoneyRoundingMode, type MoneyFormatOptions } from \"./money\";\n\nexport { addDuration, parseDuration, subtractDuration, convertWaitPeriodToDate, isValidDate, isValidTime, convertFlexibleInstantToDate, formatDateTime } from \"./datetime\";\nexport type { Duration, WaitPeriod, FlexibleInstant } from \"./datetime\";\n\nexport { stdTypeOf, isDate, isBlob, isFile, isError, isPromise, isMoney, isTemporalInstant, isTemporalPlainDate, isTemporalPlainDateTime, isTemporalZonedDateTime } from \"./quacks\";\n\nexport { combineAbortSignals, whenAborted } from \"./utils\";\n\nexport { LocalMutex, type LocalLock } from \"./localmutex\";\n\n/** Throw an error with the specified message. This function allows you to throw inside expressions\n * @param err - The error message\n * @returns This function never returns\n * @throws An error with the specified message\n */\nexport function throwError(err: string): never {\n  //TODO remove ourselves from the stack ?\n  throw new Error(err);\n}\n","import { debugFlags, registerDebugConfigChangedCallback } from \"./envbackend\";\nimport { generateRandomId } from \"@webhare/std\";\n\nlet hookedfetch = false;\n\nfunction sanitizeBody(body: unknown) {\n  if (body instanceof ArrayBuffer) {\n    const view = new Uint8Array(body.slice(0, 5000)); //show the bytes but filter unprintable as '.'\n    return Array.from(view).map(v => v >= 32 && v < 127 ? String.fromCharCode(v) : \".\").join(\"\");\n  }\n  if (body instanceof URLSearchParams)\n    return body.toString();\n  if (typeof body !== 'string') {\n    return `[${typeof body}]`;\n  }\n  body = body.substring(0, 5000).replaceAll(\"\\r\", \" \").replaceAll(\"\\n\", \" \");\n  return body;\n}\n\nfunction getResponseSummary(response: Pick<Response, \"headers\">) {\n  const toks = [];\n  if (response.headers.get(\"Content-Type\"))\n    toks.push(response.headers.get(\"Content-Type\"));\n  if (response.headers.get(\"Content-Length\"))\n    toks.push(response.headers.get(\"Content-Length\") + \" bytes\");\n  if (response.headers.get(\"Transfer-Encoding\"))\n    toks.push(response.headers.get(\"Transfer-Encoding\"));\n  if (response.headers.get(\"Content-Encoding\"))\n    toks.push(response.headers.get(\"Content-Encoding\"));\n\n  return toks.length ? `(${toks.join(\", \")})` : \"\";\n}\n\nfunction headersToString(headers: Headers) {\n  return JSON.stringify(Object.fromEntries(headers.entries()));\n}\n\nexport function extractRequestInfo(input: RequestInfo | URL, init?: RequestInit) {\n  const method = (init?.method || (input as Request)?.method || \"GET\");\n  const url = input instanceof URL ? input.toString() : typeof input === \"string\" ? input : input.url;\n  const headers = new Headers(typeof input === \"object\" && !(input instanceof URL) ? input.headers : init?.headers);\n  const body = typeof input === \"object\" && !(input instanceof URL) ? input.body : init?.body;\n  return { method, url, headers, body };\n}\n\nexport async function extractRequestBody(body: BodyInit): Promise<XMLHttpRequestBodyInit> {\n  if (!(body instanceof ReadableStream))\n    return body;\n\n  //convert the ReadableStream to ArrayBuffer so we can print AND send it (TODO ideally 'tee' the stream and just grab the first 5K bytes)\n  const reader = body.getReader();\n  const chunks = [];\n  for (; ;) {\n    const { done, value } = await reader.read();\n    if (done)\n      break;\n    chunks.push(value);\n  }\n  return await new Blob(chunks).arrayBuffer();\n}\n\nexport function logWrqRequest(method: string, url: string, headers: Headers, body: XMLHttpRequestBodyInit | undefined | null) {\n  const debugrequestid = generateRandomId();\n\n  console.log(`[wrq] ${debugrequestid} ${method.padEnd(7)} ${url}`);\n  console.log(`[wrq] ${debugrequestid} headers ${headersToString(headers)}`);\n  if (body) {\n    console.log(`[wrq] ${debugrequestid} body    ${sanitizeBody(body)}`);\n  }\n\n  return debugrequestid;\n}\n\nexport async function logWrqResponse(debugrequestid: string, fetchresult: Pick<Response, \"ok\" | \"status\" | \"statusText\" | \"headers\" | \"json\" | \"text\" | \"arrayBuffer\" | \"clone\">) {\n  console.log(`[wrq] ${debugrequestid} result  ${fetchresult.status} ${fetchresult.statusText} ${getResponseSummary(fetchresult)}`);\n  console.log(`[wrq] ${debugrequestid} headers ${headersToString(fetchresult.headers)}`);\n\n  const ct = fetchresult.headers.get(\"Content-Type\");\n  if (ct && [\"text/html\", \"text/plain\", \"application/json\"].includes(ct?.split(';')[0])) {\n    const responsebody = await fetchresult.clone().text();\n    console.log(`[wrq] ${debugrequestid} body    ${sanitizeBody(responsebody)}`);\n  }\n}\n\nasync function debuggableFetch(originalfetch: typeof fetch, input: RequestInfo | URL, init?: RequestInit) {\n  if (!debugFlags.wrq)\n    return originalfetch(input, init);\n\n  let { method, url, headers, body } = extractRequestInfo(input, init);\n  if (body) {\n    body = await extractRequestBody(body);\n    init = { ...init, body };\n  }\n\n  const debugrequestid = logWrqRequest(method, url, headers, body);\n\n  const fetchresult = await originalfetch(input, init); //TODO log responses as well (if safe/applicable, eg not binary or Very Long... and we probably should wait for the first json()/text()/body() call? but at least log the status and time!)\n  await logWrqResponse(debugrequestid, fetchresult);\n\n  return fetchresult;\n}\n\nexport function hookFetch() {\n  if (hookedfetch)\n    return;\n\n  globalThis.fetch = debuggableFetch.bind(null, globalThis.fetch);\n  hookedfetch = true;\n}\n\nexport function enableFetchDebugging() {\n  // Hook global fetch if requested\n  if (globalThis[\"fetch\"]) {\n    if (debugFlags.wrq)\n      hookFetch();\n\n    registerDebugConfigChangedCallback(() => {\n      if (debugFlags.wrq)\n        hookFetch();\n    });\n  }\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/env\" {\n}\n\nimport { debugFlags, dtapStage, isLive, backendBase } from \"./envbackend\";\nimport type { DTAPStage } from \"./concepts\";\n\nexport { type NavigateInstruction, navigateTo } from \"./navigation\";\nexport { enableFetchDebugging } from \"./fetchdebug\";\nexport { type DTAPStage, dtapStage, debugFlags, isLive, backendBase };\n\n//user locale *which Tollium and sites should start to use to define localization, and perhaps gettid too?)\nexport type UserLocale = {\n  /** The language code, eg 'en' including optional country, eg en-US */\n  lang: string;\n  //TODO regional settings\n};\n\n//export deprecated variants\nexport { dtapstage, islive } from \"./envbackend\";\n\n/** @deprecated For WH5.4 and up use 'debugFlags' */\nexport const flags = debugFlags;\n","/** Rect describing an elements position */\nexport type Rect = {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  width: number;\n  height: number;\n};\n\n/** Elements you can set a value on and would have to trigger change and/or input events */\nexport type FormControlElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n/** Types that support querySelector(All) */\ntype QuerySelectorAble = ParentNode | ShadowRoot;\n\nexport function qS<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E | null;\nexport function qS<E extends Element = HTMLElement>(selector: string): E | null;\n\n/** Match the first element using a CSS selector\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The first matching element or null\n */\nexport function qS<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E | null {\n  if (typeof node_or_selector === 'string')\n    return document.querySelector<E>(node_or_selector);\n  else if (selector)\n    return node_or_selector.querySelector<E>(selector);\n  return null;\n}\n\n\nexport function qR<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E;\nexport function qR<E extends Element = HTMLElement>(selector: string): E;\n\n/** Match a specific element using a CSS selector, requiring it to exist and be unique\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The requested element. Throw it the selector doesn't match exactly one element\n */\nexport function qR<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E {\n  const matches = qSA<E>(node_or_selector as QuerySelectorAble, selector as string);\n  if (matches.length === 1)\n    return matches[0];\n\n  if (typeof node_or_selector !== 'string') {\n    console.error(`${matches.length} elements match selector \\`${selector}\\` with startingpoint`, node_or_selector, matches);\n    throw new Error(`${matches.length} elements match selector \\`${selector}\\` given startingpoint '${node_or_selector.nodeName}'`);\n  } else {\n    console.error(`${matches.length} elements match selector \\`${node_or_selector}\\` in the document`, matches);\n    throw new Error(`${matches.length} elements match selector \\`${node_or_selector}\\` in the document`);\n  }\n}\n\nexport function qSA<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E[];\nexport function qSA<E extends Element = HTMLElement>(selector: string): E[];\n\n/** Find multiple elements using a CSS selector\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The requested elements.\n */\nexport function qSA<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E[] {\n  if (typeof node_or_selector === 'string')\n    return Array.from(document.querySelectorAll(node_or_selector));\n  else if (selector)\n    return Array.from(node_or_selector.querySelectorAll(selector));\n\n  return [];\n}\n\n/** Return whether the passed element is a FormControlElement */\nexport function isFormControl(field: Element): field is FormControlElement {\n  return isHTMLElement(field) && [\"INPUT\", \"SELECT\", \"TEXTAREA\"].includes(field.tagName);\n}\n\n/** Return whether the passed element is an editable text field */\nexport function isEditControl(field: Element): field is HTMLElement {\n  return isHTMLElement(field) && ([\"INPUT\", \"TEXTAREA\"].includes(field.tagName) || field.isContentEditable);\n}\n\n/** Test whether node is an Element, even if it's in a different iframe */\nexport function isElement(node: unknown): node is Element {\n  //TODO What is actually going on if defaultView is missing?\n  if (!node || typeof node !== \"object\")\n    return false;\n\n  /* Getting the proto doesn't always work:\n  const proto = (node as Element).ownerDocument.defaultView?.Element;\n  (because our iframes derive off about? not sure) so until someone finds the real answer, we'll do a heuristic\n  */\n\n  /** Analyzing node.constructor.name doesn't work because custom elements don't necessarily have their constructor's name ending in Element\n  return Boolean(\"ownerDocument\" in node && node.constructor.name.match(/Element$/));\n  */\n\n  return Boolean(\"ownerDocument\" in node && (node as Element).nodeType === 1);\n\n}\n\n/** Test whether node is a HTMLElement, even if it's in a different iframe */\nexport function isHTMLElement(node: unknown): node is HTMLElement {\n  return isElement(node) && \"accessKey\" in node;\n}\n\n/**\n * get the relative bound difference between two elements, and return a writable copy\n *\n * @param node - The node for which you need coordinates\n * @param relativeto - Optional reference point. If not set, you just get a 'normal' coordinate object\n */\nexport function getRelativeBounds(node: Element, relativeto?: Element): Rect {\n  if (!relativeto)\n    relativeto = node.ownerDocument.documentElement;\n\n  const nodecoords = node.getBoundingClientRect();\n  const relcoords = relativeto.getBoundingClientRect();\n  return {\n    top: nodecoords.top - relcoords.top,\n    left: nodecoords.left - relcoords.left,\n    right: nodecoords.right - relcoords.left,\n    bottom: nodecoords.bottom - relcoords.top,\n    width: nodecoords.width,\n    height: nodecoords.height\n  };\n}\n\nexport type ParsedLanguageTag = {\n  /** The full tag, eg en-US */\n  tag: string;\n  /** The language code, eg 'en' */\n  language: string;\n  region?: string;\n  /** The script, eg 'Hant' */\n  script?: string;\n};\n\n/** Parse a BCP47 language tag */\nexport function parseLanguageTag(languageTag: string): ParsedLanguageTag {\n  /* https://datatracker.ietf.org/doc/html/rfc5646#section-2.1\n     langtag       = language\n                 [\"-\" script]\n                 [\"-\" region]\n                 *(\"-\" variant)\n                 *(\"-\" extension)\n                 [\"-\" privateuse]\n     BUT: we're limiting ourselves to language, script an region for now\n\n     language      = 2*3ALPHA           ; shortest ISO 639 code\n                    [\"-\" extlang]       ; sometimes followed by\n                                          extended language subtags\n\n                                           extlang       = 3ALPHA              ; selected ISO 639 codes\n                 *2(\"-\" 3ALPHA)      ; permanently reserved\n\n      script        = 4ALPHA              ; ISO 15924 code\n\n      region        = 2ALPHA              ; ISO 3166-1 code\n                    / 3DIGIT              ; UN M.49 code\n\n     Note that we're not yet fully implementing the spec, just the parts we expect to encounter in practice\n  */\n  const match = languageTag.match(/^([a-z]{2,}(-[a-z]{3})?)(-[A-Za-z]{4,})?(-[A-Z]{2}|-\\d{3})?$/);\n  if (!match)\n    throw new Error(`Invalid language tag: ${languageTag}`);\n\n  return {\n    tag: languageTag,\n    language: match[1],\n    ...(match[3] ? { script: match[3].substring(1) } : {}),\n    ...(match[4] ? { region: match[4].substring(1) } : {})\n  };\n}\n\n/** Get the effective language for an element (or the document)\n * @param node - The element for which to get the effective language. If not specified, the documentElement and finally the browser is used\n * @returns The language code, eg. \"nl\" or \"en-GB\"\n */\nexport function getLang(node?: Element): ParsedLanguageTag {\n  if (!node && typeof document !== \"undefined\")\n    node = document.documentElement;\n  const tag = (node?.closest('[lang]')?.getAttribute(\"lang\") || navigator.language || \"en\");\n  return parseLanguageTag(tag);\n}\n","import type { GetTidHooks } from \"./types.js\";\n\nlet hookFactory: (() => GetTidHooks) | undefined;\nlet gotHooks = false;\n\nexport function setGetTidHooksFactory(newHookFactory: () => GetTidHooks) {\n  if (gotHooks)\n    throw new Error(`The call to setGetTidHooksFactory was too late - hooks have already been retrieved once`);\n  hookFactory = newHookFactory;\n}\n\nexport function getGetTidHooks() {\n  gotHooks = true;\n  return hookFactory?.();\n}\n","import { decodeString, encodeString } from '@webhare/std';\nimport type { CompiledLanguageFile, GetTidHooks, LanguagePart, LanguageText, RecursiveLanguageTexts, TidAllowedHTMLTags, TidParam } from './types';\nimport { getGetTidHooks } from './hooks';\nimport { debugFlags, dtapStage } from '@webhare/env';\nimport { getLang } from '@webhare/dompack/src/tree';\n\n\n\nlet hooks: GetTidHooks | undefined;\nlet browserSetLanguage = getLang().language;\nconst defaultLanguage = \"en\";\n\nfunction ensureHooks(): GetTidHooks {\n  return hooks ??= getGetTidHooks?.() ?? {\n    loader: null,\n    currentLanguage: (lang) => {\n      if (lang)\n        browserSetLanguage = lang;\n      return browserSetLanguage;\n    }\n  };\n}\n\nexport function getTidLanguage(): string {\n  return ensureHooks().currentLanguage() || defaultLanguage;\n}\n\nexport function setTidLanguage(newLanguage: string): void {\n  ensureHooks().currentLanguage(newLanguage.toLowerCase());\n}\n\nconst langFileCache: Record<string, CompiledLanguageFile> = {};\n\nfunction getLanguageFile(module: string, langCode: string): CompiledLanguageFile | undefined {\n  const langkey = `${module}:${langCode}`;\n  let compiled = langFileCache[langkey];\n  if (!compiled || !compiled.resource) {\n    const loader = ensureHooks().loader;\n    if (loader) {\n      try {\n        compiled = loader(module, langCode, compiled?.registered ?? new Map);\n      } catch (e) {\n        // loading failed, erase the loaded texts (keep the registered texts, though)\n        if (dtapStage !== \"production\" || debugFlags.gtd) {\n          console.error(e);\n        }\n        const texts = compiled?.registered ?? new Map;\n        compiled = { resource: \"\", fallbackLanguage: \"\", langCode, texts, registered: texts };\n      }\n      langFileCache[langkey] = compiled;\n    }\n  }\n  if (!compiled && (dtapStage !== \"production\" || debugFlags.gtd)) {\n    console.warn(`No language texts found for module '${module}' and language '${langCode}'`);\n  }\n  return compiled;\n}\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- needed for generics\nexport type GetTidRenderFunc<Result extends object = object> = ((tag: TidAllowedHTMLTags, props: { children?: any[]; href?: string }, ...childNodes: any[]) => Result);\nexport type GetTidOptions = { langCode?: string; render?: GetTidRenderFunc | \"fragment\" };\n\ntype GetTidArgumentTypes = [GetTidOptions?] | [TidParam[], GetTidOptions?] | [TidParam?, TidParam?, TidParam?, TidParam?];\n\nfunction toHTMLNode(tag: string, props: { href?: string; children?: Array<string | Node> }): Node {\n  const node = document.createElement(tag);\n  if (props.href)\n    node.setAttribute(\"href\", props.href);\n  if (props.children)\n    node.append(...props.children);\n  return node;\n}\n\nfunction wrapInFragment(children: Array<string | Node>): DocumentFragment {\n  const fragment = document.createDocumentFragment();\n  fragment.append(...children);\n  return fragment;\n}\n\n\nfunction getTidInternal(tid: string, params: TidParam[], options?: GetTidOptions): string | Array<string | object> | DocumentFragment {\n  if (tid === \"\") {\n    return \"\";\n  }\n\n  if (tid.startsWith(\":\")) {\n    return tid.substring(1);\n  } else if (tid.startsWith(\"<>\")) {\n    return decodeString(tid.substring(2), \"html\");\n  }\n\n  const langCode = options?.langCode?.toLowerCase() || getTidLanguage();\n  if (options?.render) {\n    if (options.render === \"fragment\") {\n      const nodes = calcTIDForLanguage(langCode, tid, params, true, toHTMLNode) as Array<string | Node>;\n      return wrapInFragment(nodes);\n    }\n    return calcTIDForLanguage(langCode, tid, params, true, options.render);\n  } else\n    return calcTIDForLanguage(langCode, tid, params, false, null).join(\"\");\n}\n\nexport function getTid(tid: string, options?: GetTidOptions & { render?: undefined }): string;\nexport function getTid<VNode extends object>(tid: string, options?: GetTidOptions & { render?: GetTidRenderFunc<VNode> }): string | Array<string | VNode>;\nexport function getTid(tid: string, options?: GetTidOptions & { render?: \"fragment\" }): DocumentFragment;\nexport function getTid(tid: string, param: TidParam[], options?: GetTidOptions & { render?: undefined }): string;\nexport function getTid<VNode extends object>(tid: string, param: TidParam[], options?: GetTidOptions & { render?: GetTidRenderFunc<VNode> }): string | Array<string | VNode>;\nexport function getTid(tid: string, param: TidParam[], options?: GetTidOptions & { render?: \"fragment\" }): DocumentFragment;\nexport function getTid(tid: string, p1?: TidParam, p2?: TidParam, p3?: TidParam, p4?: TidParam): string;\n\nexport function getTid(tid: string, ...p: GetTidArgumentTypes): string | Array<string | object> | DocumentFragment {\n  if (Array.isArray(p[0])) // case: param: TidParam[], options?: GetTidOptions)\n    return getTidInternal(tid, p[0], p[1] as GetTidOptions);\n  if (p[0] && typeof p[0] === \"object\") // case: options: GetTidOptions\n    return getTidInternal(tid, [], p[0]);\n  return getTidInternal(tid, p as Array<TidParam | undefined>, {});\n}\n\nexport function getTidForLanguage(langCode: string, tid: string, p1: TidParam = null, p2: TidParam = null, p3: TidParam = null, p4: TidParam = null): string {\n  return getTid(tid, [p1, p2, p3, p4], { langCode });\n}\n\nexport function getHTMLTid(tid: string, ...params: TidParam[]): string {\n  return getHTMLTidForLanguage(getTidLanguage(), tid, ...params);\n}\n\nexport function getHTMLTidForLanguage(langCode: string, tid: string, ...params: TidParam[]): string {\n  if (tid === \"\") {\n    return \"\";\n  }\n\n  if (tid.startsWith(\":\")) {\n    return encodeString(tid.substring(1), \"html\");\n  } else if (tid.startsWith(\"<>\")) {\n    return tid.substring(2);\n  }\n\n  return calcTIDForLanguage(langCode, tid, params, true, null).join(\"\");\n}\n\nexport function getTIDListForLanguage(langcode: string, gid: string) {\n  gid = getCanonicalTid(gid.toLowerCase());\n  langcode = langcode.toLowerCase();\n\n  const modsep = gid.indexOf(':');\n  if (modsep === -1) {\n    if (dtapStage !== \"production\" || debugFlags.gtd)\n      console.warn(`Missing module name in call for gid '${gid}'`);\n    return `(cannot find textnode: ${gid})`;\n  }\n\n  const module = gid.substring(0, modsep);\n  const lookup = gid.substring(modsep + 1).replace(/ /g, \"_\") + \".\";\n\n  const compiled = getLanguageFile(module, langcode);\n  const result: string[] = [];\n  if (compiled) {\n    for (const key of compiled.texts.keys()) {\n      if (key.startsWith(lookup) && key.indexOf(\".\", lookup.length) === -1)\n        result.push(`${module}:${key}`);\n    }\n    if (compiled.fallbackLanguage) {\n      const fallback = getLanguageFile(module, compiled.fallbackLanguage);\n      if (fallback) {\n        for (const key of fallback.texts.keys()) {\n          if (key.startsWith(lookup) && key.indexOf(\".\", lookup.length) === -1 && !result.includes(`${module}:${key}`))\n            result.push(`${module}:${key}`);\n        }\n      }\n    }\n  }\n\n  return result;\n}\n\nfunction cannotFind(tid: string) {\n  if (debugFlags.sut)\n    return [tid.substring(tid.lastIndexOf(\".\"))];\n\n  return [`(cannot find text: ${tid})`];\n}\nfunction calcTIDForLanguage(langcode: string, tid: string, rawParams: TidParam[], rich: boolean, render: null): string[];\nfunction calcTIDForLanguage(langcode: string, tid: string, rawParams: TidParam[], rich: boolean, render: GetTidRenderFunc): Array<string | object>;\n\n\nfunction calcTIDForLanguage(langcode: string, tid: string, rawParams: TidParam[], rich: boolean, render: GetTidRenderFunc | null): Array<string | object> {\n  tid = getCanonicalTid(tid.toLowerCase());\n  if (langcode.match(/^[a-z]{2}-/)) //truncate country codes from language identifiers (eg en-GB) until we have actual support for those, so we don't break when en-GB is passed straight from eg. document.documentElement.lang\n    langcode = langcode.substring(0, 2);\n\n  if (tid === \"tollium:tilde.locale.datetimestrings\") {\n    return [getLanguageDatetimeStrings(langcode)];\n  }\n\n  // convert null to \"\", numbers to strings\n  const params = rawParams.map(p => (typeof p === \"number\" ? p.toString() : (p ?? \"\")));\n\n  const modsep = tid.indexOf(':');\n  if (modsep === -1) {\n    if (dtapStage !== \"production\" || debugFlags.gtd)\n      console.warn(`Missing module name in call for tid '${tid}'`);\n    return [`(missing module name in tid: ${tid})`];\n  }\n\n  const module = tid.substring(0, modsep);\n  const lookup = tid.substring(modsep + 1).replace(/ /g, \"_\");\n  tid = `${module}:${lookup}`;\n\n  if (langcode === \"debug\") {\n    const debugtid = `{${[tid, ...params].join(\"|\")}}`;\n    return [rich ? encodeString(debugtid, \"html\") : debugtid];\n  }\n\n  const compiled = getLanguageFile(module, langcode);\n  const match = compiled?.texts.get(lookup);\n  if (!match && compiled?.fallbackLanguage) {\n    const fallback = getLanguageFile(module, compiled.fallbackLanguage);\n    const fallbackMatch = fallback?.texts.get(lookup);\n    if (!fallbackMatch && (dtapStage !== \"production\" || debugFlags.gtd)) {\n      console.warn(`Cannot find text ${tid} for language ${langcode}, also tried fallback language '${compiled.fallbackLanguage}'`);\n    }\n    return fallbackMatch ? executeCompiledTidText(fallbackMatch, params, rich, render) : cannotFind(tid);\n  }\n\n  if (!match && (dtapStage !== \"production\" || debugFlags.gtd)) {\n    console.warn(`Cannot find text ${tid} for language ${langcode}, no fallback language`);\n  }\n  return match ? executeCompiledTidText(match, params, rich, render) : cannotFind(tid);\n}\n\nfunction getCanonicalTid(tid: string) {\n  if (tid.startsWith(\"tollium:common.buttons.\") || tid.startsWith(\"tollium:common.actions.\") || tid.startsWith(\"tollium:common.labels.\")) {\n    return `tollium:tilde.${tid.substring(tid.indexOf(\".\") + 1)}`;\n  } else if (tid.startsWith(\"~\")) {\n    return `tollium:tilde.${tid.substring(1)}`;\n  }\n\n  return tid;\n}\n\nfunction renderString(tok: string, rich: boolean, render: GetTidRenderFunc | null) {\n  return rich ?\n    render ?\n      tok.split(/(\\n)/).map(part => part !== \"\\n\" ? part : render(\"br\", {})).filter(_ => _) :\n      [encodeString(tok, \"html\")] :\n    [tok];\n}\n\nfunction executeCompiledTidText(text: string | LanguagePart[], params: string[], rich: boolean, render: GetTidRenderFunc | null): Array<object | string> {\n  if (typeof text === \"string\")\n    return renderString(text, rich, render);\n\n  const parts = new Array<object | string>;\n  for (const tok of text) {\n    if (typeof tok === \"string\") {\n      parts.push(...renderString(tok, rich, render));\n    } else if (typeof tok === \"number\") {\n      if (tok >= 1) {\n        const get_param = params[tok - 1];\n        if (get_param) {\n          parts.push(...renderString(get_param, rich, render));\n        }\n      }\n    } else if (tok.t === \"tag\") {\n      const sub = executeCompiledTidText(tok.subs, params, rich, render);\n      if (rich && render)\n        parts.push(render(tok.tag, { children: sub }));\n      else\n        parts.push(...(rich ? [`<${tok.tag}>`, ...sub, `</${tok.tag}>`] : sub));\n    } else if (tok.t === \"ifparam\") {\n      const get_param = params[tok.p - 1] || \"\";\n      parts.push(...executeCompiledTidText(get_param.toUpperCase() === tok.value.toUpperCase() ? tok.subs : tok.subselse, params, rich, render));\n    } else if (tok.t === \"a\") {\n      const sub = executeCompiledTidText(tok.subs, params, rich, render);\n      if (rich) {\n        let link = tok.link;\n        if (tok.linkparam > 0 && tok.linkparam <= params.length) {\n          link = params[tok.linkparam - 1] || link;\n        }\n        if (link) {\n          if (render)\n            parts.push(render(\"a\", { href: link, children: sub }));\n          else\n            parts.push(`<a href=\"${encodeString(link, \"attribute\")}\">`, ...sub, `</a>`);\n        } else {\n          parts.push(...sub);\n        }\n      } else {\n        parts.push(...sub);\n      }\n    }\n  }\n  return parts;\n}\n\nfunction flattenRecursiveLanguageTexts(text: RecursiveLanguageTexts, pathsofar: string, result: Map<string, LanguageText>): void {\n  if (typeof text === \"string\" || Array.isArray(text))\n    result.set(pathsofar, text);\n  else\n    for (const [name, value] of Object.entries(text))\n      flattenRecursiveLanguageTexts(value, `${pathsofar}${pathsofar && name ? \".\" : \"\"}${name}`, result);\n}\n\nexport function registerTexts(module: string, langCode: string, tids: RecursiveLanguageTexts) {\n  const langkey = `${module}:${langCode}`;\n  let compiledFile = langFileCache[langkey];\n  if (!compiledFile) {\n    const texts = new Map;\n    langFileCache[langkey] = compiledFile = { resource: \"\", fallbackLanguage: \"\", langCode, texts, registered: texts };\n  }\n  flattenRecursiveLanguageTexts(tids, \"\", compiledFile.registered);\n  if (compiledFile.texts !== compiledFile.registered) {\n    for (const [key, value] of compiledFile.registered)\n      compiledFile.texts.set(key, value);\n  }\n}\n\nfunction getLanguageDatetimeStrings(langCode: string) {\n  switch (langCode.substring(0, 2)) {\n    case \"nl\": return \"am;pm;januari;februari;maart;april;mei;juni;juli;augustus;september;oktober;november;december;maandag;dinsdag;woensdag;donderdag;vrijdag;zaterdag;zondag;jan;feb;mrt;apr;mei;jun;jul;aug;sep;okt;nov;dec;ma;di;wo;do;vr;za;zo\";\n    case \"de\": return \"am;pm;Januar;Februar;März;April;Mai;Juni;Juli;August;September;Oktober;November;Dezember;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag;Sonntag;Jan.;Febr.;März;Apr.;Mai;Juni;Juli;Aug.;Sept.;Okt.;Nov.;Dez.;Mo;Di;Mi;Do;Fr;Sa;So\";\n    case \"fr\": return \"am;pm;Janvier;Février;Mars;Avril;Mai;Juin;Juillet;Août;Septembre;Octobre;Novembre;Décembre;Lundi;Mardi;Mercredi;Jeudi;Vendredi;Samedi;Dimanche;Janv;Févr;Mars;Avril;Mai;Juin;Juil;Août;Sept;Oct;Nov;Déc;Lun;Mar;Mer;Jeu;Ven;Sam;Dim\";\n    case \"jp\": {\n      return Buffer.from(\"5Y2I5YmNO+WNiOW+jDvvvJHmnIg777yS5pyIO++8k+aciDvvvJTmnIg777yV5pyIO++8luaciDvvvJfmnIg777yY5pyIO++8meaciDvvvJHvvJDmnIg777yR77yR5pyIO++8ke+8kuaciDvmnIjmm5zml6U754Gr5puc5pelO+awtOabnOaXpTvmnKjmm5zml6U76YeR5puc5pelO+Wcn+abnOaXpTvml6Xmm5zml6U777yR5pyIO++8kuaciDvvvJPmnIg777yU5pyIO++8leaciDvvvJbmnIg777yX5pyIO++8mOaciDvvvJnmnIg777yR77yQ5pyIO++8ke+8keaciDvvvJHvvJLmnIg75pyIO+eBqzvmsLQ75pyoO+mHkTvlnJ875pel\", \"base64\").toString();\n    }\n  }\n\n  // \"en\" is the default\n  return \"am;pm;January;February;March;April;May;June;July;August;September;October;November;December;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday;Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec;Mon;Tue;Wed;Thu;Fri;Sat;Sun\";\n}\n","/* eslint-disable */\n/** smart-crop.js\n * A javascript library implementing content aware image cropping\n *\n * Copyright (C) 2014 Jonas Wagner\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n(function(){\n\"use strict\";\n\nfunction SmartCrop(options){\n   this.options = extend({}, SmartCrop.DEFAULTS, options);\n}\nSmartCrop.DEFAULTS = {\n    width: 0,\n    height: 0,\n    aspect: 0,\n    cropWidth: 0,\n    cropHeight: 0,\n    detailWeight: 0.2,\n    skinColor: [0.78, 0.57, 0.44],\n    skinBias: 0.01,\n    skinBrightnessMin: 0.2,\n    skinBrightnessMax: 1.0,\n    skinThreshold: 0.8,\n    skinWeight: 1.8,\n    saturationBrightnessMin: 0.05,\n    saturationBrightnessMax: 0.9,\n    saturationThreshold: 0.4,\n    saturationBias: 0.2,\n    saturationWeight: 0.3,\n    // step * minscale rounded down to the next power of two should be good\n    scoreDownSample: 8,\n    step: 8,\n    scaleStep: 0.1,\n    minScale: 0.9,\n    maxScale: 1.0,\n    edgeRadius: 0.4,\n    edgeWeight: -20.0,\n    outsideImportance: -0.5,\n    ruleOfThirds: true,\n    prescale: true,\n    canvasFactory: null,\n    debug: false\n};\nSmartCrop.crop = function(image, options, callback){\n    if(options.aspect){\n        options.width = options.aspect;\n        options.height = 1;\n    }\n\n    // work around images scaled in css by drawing them onto a canvas\n    if(image.naturalWidth && (image.naturalWidth != image.width || image.naturalHeight != image.height)){\n        var c = new SmartCrop(options).canvas(image.naturalWidth, image.naturalHeight),\n            cctx = c.getContext('2d');\n        c.width = image.naturalWidth;\n        c.height = image.naturalHeight;\n        cctx.drawImage(image, 0, 0);\n        image = c;\n    }\n\n    var scale = 1,\n        prescale = 1;\n    if(options.width && options.height) {\n        scale = min(image.width/options.width, image.height/options.height);\n        options.cropWidth = ~~(options.width * scale);\n        options.cropHeight = ~~(options.height * scale);\n        // img = 100x100, width = 95x95, scale = 100/95, 1/scale > min\n        // don't set minscale smaller than 1/scale\n        // -> don't pick crops that need upscaling\n        options.minScale = min(options.maxScale || SmartCrop.DEFAULTS.maxScale, max(1/scale, (options.minScale||SmartCrop.DEFAULTS.minScale)));\n    }\n    var smartCrop = new SmartCrop(options);\n    if(options.width && options.height) {\n        if(options.prescale !== false){\n            prescale = 1/scale/options.minScale;\n            if(prescale < 1) {\n                var prescaledCanvas = smartCrop.canvas(image.width*prescale, image.height*prescale),\n                    ctx = prescaledCanvas.getContext('2d');\n                ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, prescaledCanvas.width, prescaledCanvas.height);\n                image = prescaledCanvas;\n                smartCrop.options.cropWidth = ~~(options.cropWidth*prescale);\n                smartCrop.options.cropHeight = ~~(options.cropHeight*prescale);\n            }\n            else {\n                prescale = 1;\n            }\n        }\n    }\n    var result = smartCrop.analyse(image);\n    for(var i = 0, i_len = result.crops.length; i < i_len; i++) {\n        var crop = result.crops[i];\n        crop.x = ~~(crop.x/prescale);\n        crop.y = ~~(crop.y/prescale);\n        crop.width = ~~(crop.width/prescale);\n        crop.height = ~~(crop.height/prescale);\n    }\n    callback(result);\n    return result;\n};\n// check if all the dependencies are there\nSmartCrop.isAvailable = function(options){\n    try {\n        var s = new this(options),\n            c = s.canvas(16, 16);\n        return typeof c.getContext === 'function';\n    }\n    catch(e){\n        return false;\n    }\n};\nSmartCrop.prototype = {\n    canvas: function(w, h){\n        if(this.options.canvasFactory !== null){\n            return this.options.canvasFactory(w, h);\n        }\n        var c = document.createElement('canvas');\n        c.width = w;\n        c.height = h;\n        return c;\n    },\n    edgeDetect: function(i, o){\n        var id = i.data,\n            od = o.data,\n            w = i.width,\n            h = i.height;\n        for(var y = 0; y < h; y++) {\n            for(var x = 0; x < w; x++) {\n                var p = (y*w+x)*4,\n                    lightness;\n                if(x === 0 || x >= w-1 || y === 0 || y >= h-1){\n                    lightness = sample(id, p);\n                }\n                else {\n                    lightness = sample(id, p)*4 - sample(id, p-w*4) - sample(id, p-4) - sample(id, p+4) - sample(id, p+w*4);\n                }\n                od[p+1] = lightness;\n            }\n        }\n    },\n    skinDetect: function(i, o){\n        var id = i.data,\n            od = o.data,\n            w = i.width,\n            h = i.height,\n            options = this.options;\n        for(var y = 0; y < h; y++) {\n            for(var x = 0; x < w; x++) {\n                var p = (y*w+x)*4,\n                    lightness = cie(id[p], id[p+1], id[p+2])/255,\n                    skin = this.skinColor(id[p], id[p+1], id[p+2]);\n                if(skin > options.skinThreshold && lightness >= options.skinBrightnessMin && lightness <= options.skinBrightnessMax){\n                    od[p] = (skin-options.skinThreshold)*(255/(1-options.skinThreshold));\n                }\n                else {\n                    od[p] = 0;\n                }\n            }\n        }\n    },\n    saturationDetect: function(i, o){\n        var id = i.data,\n            od = o.data,\n            w = i.width,\n            h = i.height,\n            options = this.options;\n        for(var y = 0; y < h; y++) {\n            for(var x = 0; x < w; x++) {\n                var p = (y*w+x)*4,\n                    lightness = cie(id[p], id[p+1], id[p+2])/255,\n                    sat = saturation(id[p], id[p+1], id[p+2]);\n                if(sat > options.saturationThreshold && lightness >= options.saturationBrightnessMin && lightness <= options.saturationBrightnessMax){\n                    od[p+2] = (sat-options.saturationThreshold)*(255/(1-options.saturationThreshold));\n                }\n                else {\n                    od[p+2] = 0;\n                }\n            }\n        }\n    },\n    crops: function(image){\n        var crops = [],\n            width = image.width,\n            height = image.height,\n            options = this.options,\n            minDimension = min(width, height),\n            cropWidth = options.cropWidth || minDimension,\n            cropHeight = options.cropHeight || minDimension;\n        for(var scale = options.maxScale; scale >= options.minScale; scale -= options.scaleStep){\n            for(var y = 0; y+cropHeight*scale <= height; y+=options.step) {\n                for(var x = 0; x+cropWidth*scale <= width; x+=options.step) {\n                    crops.push({\n                        x: x,\n                        y: y,\n                        width: cropWidth*scale,\n                        height: cropHeight*scale\n                    });\n                }\n            }\n        }\n        return crops;\n    },\n    score: function(output, crop){\n        var score = {\n                detail: 0,\n                saturation: 0,\n                skin: 0,\n                total: 0\n            },\n            options = this.options,\n            od = output.data,\n            downSample = options.scoreDownSample,\n            invDownSample = 1/downSample,\n            outputHeightDownSample = output.height*downSample,\n            outputWidthDownSample = output.width*downSample,\n            outputWidth = output.width;\n        for(var y = 0; y < outputHeightDownSample; y+=downSample) {\n            for(var x = 0; x < outputWidthDownSample; x+=downSample) {\n                var p = (~~(y*invDownSample)*outputWidth+~~(x*invDownSample))*4,\n                    importance = this.importance(crop, x, y),\n                    detail = od[p+1]/255;\n                score.skin += od[p]/255*(detail+options.skinBias)*importance;\n                score.detail += detail*importance;\n                score.saturation += od[p+2]/255*(detail+options.saturationBias)*importance;\n            }\n\n        }\n        score.total = (score.detail*options.detailWeight + score.skin*options.skinWeight + score.saturation*options.saturationWeight)/crop.width/crop.height;\n        return score;\n    },\n    importance: function(crop, x, y){\n        var options = this.options;\n\n        if (crop.x > x || x >= crop.x+crop.width || crop.y > y || y >= crop.y+crop.height) return options.outsideImportance;\n        x = (x-crop.x)/crop.width;\n        y = (y-crop.y)/crop.height;\n        var px = abs(0.5-x)*2,\n            py = abs(0.5-y)*2,\n            // distance from edge\n            dx = Math.max(px-1.0+options.edgeRadius, 0),\n            dy = Math.max(py-1.0+options.edgeRadius, 0),\n            d = (dx*dx+dy*dy)*options.edgeWeight;\n        var s = 1.41-sqrt(px*px+py*py);\n        if(options.ruleOfThirds){\n            s += (Math.max(0, s+d+0.5)*1.2)*(thirds(px)+thirds(py));\n        }\n        return s+d;\n    },\n    skinColor: function(r, g, b){\n        var mag = sqrt(r*r+g*g+b*b),\n            options = this.options,\n            rd = (r/mag-options.skinColor[0]),\n            gd = (g/mag-options.skinColor[1]),\n            bd = (b/mag-options.skinColor[2]),\n            d = sqrt(rd*rd+gd*gd+bd*bd);\n            return 1-d;\n    },\n    analyse: function(image){\n        var result = {},\n            options = this.options,\n            canvas = this.canvas(image.width, image.height),\n            ctx = canvas.getContext('2d');\n        ctx.drawImage(image, 0, 0);\n        var input = ctx.getImageData(0, 0, canvas.width, canvas.height),\n            output = ctx.getImageData(0, 0, canvas.width, canvas.height);\n        this.edgeDetect(input, output);\n        this.skinDetect(input, output);\n        this.saturationDetect(input, output);\n\n        var scoreCanvas = this.canvas(ceil(image.width/options.scoreDownSample), ceil(image.height/options.scoreDownSample)),\n            scoreCtx = scoreCanvas.getContext('2d');\n\n        ctx.putImageData(output, 0, 0);\n        scoreCtx.drawImage(canvas, 0, 0, canvas.width, canvas.height, 0, 0, scoreCanvas.width, scoreCanvas.height);\n\n        var scoreOutput = scoreCtx.getImageData(0, 0, scoreCanvas.width, scoreCanvas.height);\n\n        var topScore = -Infinity,\n            topCrop = null,\n            crops = this.crops(image);\n\n        for(var i = 0, i_len = crops.length; i < i_len; i++) {\n            var crop = crops[i];\n            crop.score = this.score(scoreOutput, crop);\n            if(crop.score.total > topScore){\n                topCrop = crop;\n                topScore = crop.score.total;\n            }\n\n        }\n\n        result.crops = crops;\n        result.topCrop = topCrop;\n\n        if(options.debug && topCrop){\n            ctx.fillStyle = 'rgba(255, 0, 0, 0.1)';\n            ctx.fillRect(topCrop.x, topCrop.y, topCrop.width, topCrop.height);\n            for (var y = 0; y < output.height; y++) {\n                for (var x = 0; x < output.width; x++) {\n                    var p = (y * output.width + x) * 4;\n                    var importance = this.importance(topCrop, x, y);\n                    if (importance > 0) {\n                        output.data[p + 1] += importance * 32;\n                    }\n\n                    if (importance < 0) {\n                        output.data[p] += importance * -64;\n                    }\n                    output.data[p + 3] = 255;\n                }\n            }\n            ctx.putImageData(output, 0, 0);\n            ctx.strokeStyle = 'rgba(255, 0, 0, 0.8)';\n            ctx.strokeRect(topCrop.x, topCrop.y, topCrop.width, topCrop.height);\n            result.debugCanvas = canvas;\n        }\n        return result;\n    }\n};\n\n// aliases and helpers\nvar min = Math.min,\n    max = Math.max,\n    abs = Math.abs,\n    ceil = Math.ceil,\n    sqrt = Math.sqrt;\n\nfunction extend(o){\n    for(var i = 1, i_len = arguments.length; i < i_len; i++) {\n        var arg = arguments[i];\n        if(arg){\n            for(var name in arg){\n                o[name] = arg[name];\n            }\n        }\n    }\n    return o;\n}\n\n// gets value in the range of [0, 1] where 0 is the center of the pictures\n// returns weight of rule of thirds [0, 1]\nfunction thirds(x){\n    x = ((x-(1/3)+1.0)%2.0*0.5-0.5)*16;\n    return Math.max(1.0-x*x, 0.0);\n}\n\nfunction cie(r, g, b){\n    return 0.5126*b + 0.7152*g + 0.0722*r;\n}\nfunction sample(id, p) {\n    return cie(id[p], id[p+1], id[p+2]);\n}\nfunction saturation(r, g, b){\n    var maximum = max(r/255, g/255, b/255), minumum = min(r/255, g/255, b/255);\n    if(maximum === minumum){\n        return 0;\n    }\n    var l = (maximum + minumum) / 2,\n        d = maximum-minumum;\n    return l > 0.5 ? d/(2-maximum-minumum) : d/(maximum+minumum);\n}\n\n// amd\nif (typeof define !== 'undefined' && define.amd) define(function(){return SmartCrop;});\n//common js\nif (typeof exports !== 'undefined') exports.SmartCrop = SmartCrop;\n// browser\nelse if (typeof navigator !== 'undefined') window.SmartCrop = SmartCrop;\n// nodejs\nif (typeof module !== 'undefined') {\n    module.exports = SmartCrop;\n}\n})();\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.bowser=t():e.bowser=t()}(this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=90)}({17:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=r(18),i=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||\"\"},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||\"\"},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case\"NT\":return\"NT\";case\"XP\":return\"XP\";case\"NT 5.0\":return\"2000\";case\"NT 5.1\":return\"XP\";case\"NT 5.2\":return\"2003\";case\"NT 6.0\":return\"Vista\";case\"NT 6.1\":return\"7\";case\"NT 6.2\":return\"8\";case\"NT 6.3\":return\"8.1\";case\"NT 10.0\":return\"10\";default:return}},e.getMacOSVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),10===t[0])switch(t[1]){case 5:return\"Leopard\";case 6:return\"Snow Leopard\";case 7:return\"Lion\";case 8:return\"Mountain Lion\";case 9:return\"Mavericks\";case 10:return\"Yosemite\";case 11:return\"El Capitan\";case 12:return\"Sierra\";case 13:return\"High Sierra\";case 14:return\"Mojave\";case 15:return\"Catalina\";default:return}},e.getAndroidVersionName=function(e){var t=e.split(\".\").splice(0,2).map((function(e){return parseInt(e,10)||0}));if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?\"Cupcake\":1===t[0]&&t[1]>=6?\"Donut\":2===t[0]&&t[1]<2?\"Eclair\":2===t[0]&&2===t[1]?\"Froyo\":2===t[0]&&t[1]>2?\"Gingerbread\":3===t[0]?\"Honeycomb\":4===t[0]&&t[1]<1?\"Ice Cream Sandwich\":4===t[0]&&t[1]<4?\"Jelly Bean\":4===t[0]&&t[1]>=4?\"KitKat\":5===t[0]?\"Lollipop\":6===t[0]?\"Marshmallow\":7===t[0]?\"Nougat\":8===t[0]?\"Oreo\":9===t[0]?\"Pie\":void 0},e.getVersionPrecision=function(e){return e.split(\".\").length},e.compareVersions=function(t,r,n){void 0===n&&(n=!1);var i=e.getVersionPrecision(t),s=e.getVersionPrecision(r),a=Math.max(i,s),o=0,u=e.map([t,r],(function(t){var r=a-e.getVersionPrecision(t),n=t+new Array(r+1).join(\".0\");return e.map(n.split(\".\"),(function(e){return new Array(20-e.length).join(\"0\")+e})).reverse()}));for(n&&(o=a-Math.min(i,s)),a-=1;a>=o;){if(u[0][a]>u[1][a])return 1;if(u[0][a]===u[1][a]){if(a===o)return 0;a-=1}else if(u[0][a]<u[1][a])return-1}},e.map=function(e,t){var r,n=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)n.push(t(e[r]));return n},e.find=function(e,t){var r,n;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,n=e.length;r<n;r+=1){var i=e[r];if(t(i,r))return i}},e.assign=function(e){for(var t,r,n=e,i=arguments.length,s=new Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));var o=function(){var e=s[t];\"object\"==typeof e&&null!==e&&Object.keys(e).forEach((function(t){n[t]=e[t]}))};for(t=0,r=s.length;t<r;t+=1)o();return e},e.getBrowserAlias=function(e){return n.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return n.BROWSER_MAP[e]||\"\"},e}();t.default=i,e.exports=t.default},18:function(e,t,r){\"use strict\";t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0;t.BROWSER_ALIASES_MAP={\"Amazon Silk\":\"amazon_silk\",\"Android Browser\":\"android\",Bada:\"bada\",BlackBerry:\"blackberry\",Chrome:\"chrome\",Chromium:\"chromium\",Electron:\"electron\",Epiphany:\"epiphany\",Firefox:\"firefox\",Focus:\"focus\",Generic:\"generic\",\"Google Search\":\"google_search\",Googlebot:\"googlebot\",\"Internet Explorer\":\"ie\",\"K-Meleon\":\"k_meleon\",Maxthon:\"maxthon\",\"Microsoft Edge\":\"edge\",\"MZ Browser\":\"mz\",\"NAVER Whale Browser\":\"naver\",Opera:\"opera\",\"Opera Coast\":\"opera_coast\",PhantomJS:\"phantomjs\",Puffin:\"puffin\",QupZilla:\"qupzilla\",QQ:\"qq\",QQLite:\"qqlite\",Safari:\"safari\",Sailfish:\"sailfish\",\"Samsung Internet for Android\":\"samsung_internet\",SeaMonkey:\"seamonkey\",Sleipnir:\"sleipnir\",Swing:\"swing\",Tizen:\"tizen\",\"UC Browser\":\"uc\",Vivaldi:\"vivaldi\",\"WebOS Browser\":\"webos\",WeChat:\"wechat\",\"Yandex Browser\":\"yandex\",Roku:\"roku\"};t.BROWSER_MAP={amazon_silk:\"Amazon Silk\",android:\"Android Browser\",bada:\"Bada\",blackberry:\"BlackBerry\",chrome:\"Chrome\",chromium:\"Chromium\",electron:\"Electron\",epiphany:\"Epiphany\",firefox:\"Firefox\",focus:\"Focus\",generic:\"Generic\",googlebot:\"Googlebot\",google_search:\"Google Search\",ie:\"Internet Explorer\",k_meleon:\"K-Meleon\",maxthon:\"Maxthon\",edge:\"Microsoft Edge\",mz:\"MZ Browser\",naver:\"NAVER Whale Browser\",opera:\"Opera\",opera_coast:\"Opera Coast\",phantomjs:\"PhantomJS\",puffin:\"Puffin\",qupzilla:\"QupZilla\",qq:\"QQ Browser\",qqlite:\"QQ Browser Lite\",safari:\"Safari\",sailfish:\"Sailfish\",samsung_internet:\"Samsung Internet for Android\",seamonkey:\"SeaMonkey\",sleipnir:\"Sleipnir\",swing:\"Swing\",tizen:\"Tizen\",uc:\"UC Browser\",vivaldi:\"Vivaldi\",webos:\"WebOS Browser\",wechat:\"WeChat\",yandex:\"Yandex Browser\"};t.PLATFORMS_MAP={tablet:\"tablet\",mobile:\"mobile\",desktop:\"desktop\",tv:\"tv\"};t.OS_MAP={WindowsPhone:\"Windows Phone\",Windows:\"Windows\",MacOS:\"macOS\",iOS:\"iOS\",Android:\"Android\",WebOS:\"WebOS\",BlackBerry:\"BlackBerry\",Bada:\"Bada\",Tizen:\"Tizen\",Linux:\"Linux\",ChromeOS:\"Chrome OS\",PlayStation4:\"PlayStation 4\",Roku:\"Roku\"};t.ENGINE_MAP={EdgeHTML:\"EdgeHTML\",Blink:\"Blink\",Trident:\"Trident\",Presto:\"Presto\",Gecko:\"Gecko\",WebKit:\"WebKit\"}},90:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(91))&&n.__esModule?n:{default:n},s=r(18);function a(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,\"value\"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}var o=function(){function e(){}var t,r,n;return e.getParser=function(e,t){if(void 0===t&&(t=!1),\"string\"!=typeof e)throw new Error(\"UserAgent should be a string\");return new i.default(e,t)},e.parse=function(e){return new i.default(e).getResult()},t=e,n=[{key:\"BROWSER_MAP\",get:function(){return s.BROWSER_MAP}},{key:\"ENGINE_MAP\",get:function(){return s.ENGINE_MAP}},{key:\"OS_MAP\",get:function(){return s.OS_MAP}},{key:\"PLATFORMS_MAP\",get:function(){return s.PLATFORMS_MAP}}],(r=null)&&a(t.prototype,r),n&&a(t,n),e}();t.default=o,e.exports=t.default},91:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n=u(r(92)),i=u(r(93)),s=u(r(94)),a=u(r(95)),o=u(r(17));function u(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||\"\"===e)throw new Error(\"UserAgent parameter can't be empty\");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(n.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||\"\":this.getBrowser().name||\"\"},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(i.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||\"\":t||\"\"},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||\"\":t||\"\"},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(s.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||\"\":this.getEngine().name||\"\"},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(a.default,(function(t){if(\"function\"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some((function(t){return e.test(t)}));throw new Error(\"Browser's test function is not valid\")}));return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},n=0,i={},s=0;if(Object.keys(e).forEach((function(t){var a=e[t];\"string\"==typeof a?(i[t]=a,s+=1):\"object\"==typeof a&&(r[t]=a,n+=1)})),n>0){var a=Object.keys(r),u=o.default.find(a,(function(e){return t.isOS(e)}));if(u){var d=this.satisfies(r[u]);if(void 0!==d)return d}var c=o.default.find(a,(function(e){return t.isPlatform(e)}));if(c){var f=this.satisfies(r[c]);if(void 0!==f)return f}}if(s>0){var l=Object.keys(i),h=o.default.find(l,(function(e){return t.isBrowser(e,!0)}));if(void 0!==h)return this.compareVersion(i[h])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),n=e.toLowerCase(),i=o.default.getBrowserTypeByAlias(n);return t&&i&&(n=i.toLowerCase()),n===r},t.compareVersion=function(e){var t=[0],r=e,n=!1,i=this.getBrowserVersion();if(\"string\"==typeof i)return\">\"===e[0]||\"<\"===e[0]?(r=e.substr(1),\"=\"===e[1]?(n=!0,r=e.substr(2)):t=[],\">\"===e[0]?t.push(1):t.push(-1)):\"=\"===e[0]?r=e.substr(1):\"~\"===e[0]&&(n=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(i,r,n))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some((function(e){return t.is(e)}))},e}();t.default=d,e.exports=t.default},92:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n};var s=/version\\/(\\d+(\\.?_?\\d+)+)/i,a=[{test:[/googlebot/i],describe:function(e){var t={name:\"Googlebot\"},r=i.default.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\\/|opios/i],describe:function(e){var t={name:\"Opera\"},r=i.default.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:\"Samsung Internet for Android\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:\"NAVER Whale Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:\"MZ Browser\"},r=i.default.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:\"Focus\"},r=i.default.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:\"Swing\"},r=i.default.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:\"Opera Coast\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\\/\\d+(?:.?_?\\d+)+/i],describe:function(e){var t={name:\"Opera Touch\"},r=i.default.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:\"Yandex Browser\"},r=i.default.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:\"UC Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:\"Maxthon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:\"Epiphany\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:\"Puffin\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:\"Sleipnir\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:\"K-Meleon\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:\"WeChat\"},r=i.default.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?\"QQ Browser Lite\":\"QQ Browser\"},r=i.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:\"Internet Explorer\"},r=i.default.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\\sedg\\//i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:\"Microsoft Edge\"},r=i.default.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:\"Vivaldi\"},r=i.default.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:\"SeaMonkey\"},r=i.default.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:\"Sailfish\"},r=i.default.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:\"Amazon Silk\"},r=i.default.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:\"PhantomJS\"},r=i.default.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:\"SlimerJS\"},r=i.default.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t={name:\"BlackBerry\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:\"WebOS Browser\"},r=i.default.getFirstMatch(s,e)||i.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:\"Bada\"},r=i.default.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:\"Tizen\"},r=i.default.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:\"QupZilla\"},r=i.default.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:\"Firefox\"},r=i.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:\"Electron\"},r=i.default.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:\"Miui\"},r=i.default.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:\"Chromium\"},r=i.default.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i,e)||i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:\"Chrome\"},r=i.default.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:\"Google Search\"},r=i.default.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:\"Android Browser\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:\"PlayStation 4\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:\"Safari\"},r=i.default.getFirstMatch(s,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search(\"\\\\(\")?/^(.*)\\/(.*)[ \\t]\\((.*)/:/^(.*)\\/(.*) /;return{name:i.default.getFirstMatch(t,e),version:i.default.getSecondMatch(t,e)}}}];t.default=a,e.exports=t.default},93:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/Roku\\/DVP/],describe:function(e){var t=i.default.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i,e);return{name:s.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=i.default.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=i.default.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i,e),r=i.default.getWindowsVersionName(t);return{name:s.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(e){var t={name:s.OS_MAP.iOS},r=i.default.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=i.default.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i,e).replace(/[_\\s]/g,\".\"),r=i.default.getMacOSVersionName(t),n={name:s.OS_MAP.MacOS,version:t};return r&&(n.versionName=r),n}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=i.default.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i,e).replace(/[_\\s]/g,\".\");return{name:s.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=i.default.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i,e),r=i.default.getAndroidVersionName(t),n={name:s.OS_MAP.Android,version:t};return r&&(n.versionName=r),n}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=i.default.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i,e),r={name:s.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\\bbb\\d+/i,/rim\\stablet/i],describe:function(e){var t=i.default.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i,e)||i.default.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i,e)||i.default.getFirstMatch(/\\bbb(\\d+)/i,e);return{name:s.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=i.default.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=i.default.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:s.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:s.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=i.default.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i,e);return{name:s.OS_MAP.PlayStation4,version:t}}}];t.default=a,e.exports=t.default},94:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:[/googlebot/i],describe:function(){return{type:\"bot\",vendor:\"Google\"}}},{test:[/huawei/i],describe:function(e){var t=i.default.getFirstMatch(/(can-l01)/i,e)&&\"Nova\",r={type:s.PLATFORMS_MAP.mobile,vendor:\"Huawei\"};return t&&(r.model=t),r}},{test:[/nexus\\s*(?:7|8|9|10).*/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Nexus\"}}},{test:[/ipad/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\\//],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Apple\",model:\"iPad\"}}},{test:[/kftt build/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\",model:\"Kindle Fire HD 7\"}}},{test:[/silk/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet,vendor:\"Amazon\"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=i.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:s.PLATFORMS_MAP.mobile,vendor:\"Apple\",model:t}}},{test:[/nexus\\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Nexus\"}}},{test:[/[^-]mobi/i],describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"blackberry\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"BlackBerry\"}}},{test:function(e){return\"bada\"===e.getBrowserName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"windows phone\"===e.getBrowserName()},describe:function(){return{type:s.PLATFORMS_MAP.mobile,vendor:\"Microsoft\"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(\".\")[0]);return\"android\"===e.getOSName(!0)&&t>=3},describe:function(){return{type:s.PLATFORMS_MAP.tablet}}},{test:function(e){return\"android\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.mobile}}},{test:function(e){return\"macos\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop,vendor:\"Apple\"}}},{test:function(e){return\"windows\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"linux\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.desktop}}},{test:function(e){return\"playstation 4\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}},{test:function(e){return\"roku\"===e.getOSName(!0)},describe:function(){return{type:s.PLATFORMS_MAP.tv}}}];t.default=a,e.exports=t.default},95:function(e,t,r){\"use strict\";t.__esModule=!0,t.default=void 0;var n,i=(n=r(17))&&n.__esModule?n:{default:n},s=r(18);var a=[{test:function(e){return\"microsoft edge\"===e.getBrowserName(!0)},describe:function(e){if(/\\sedg\\//i.test(e))return{name:s.ENGINE_MAP.Blink};var t=i.default.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i,e);return{name:s.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:s.ENGINE_MAP.Trident},r=i.default.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:s.ENGINE_MAP.Presto},r=i.default.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:s.ENGINE_MAP.Gecko},r=i.default.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\\/537\\.36/i],describe:function(){return{name:s.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:s.ENGINE_MAP.WebKit},r=i.default.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=a,e.exports=t.default}})}));","function _extends() {\n  module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n  try {\n    var info = gen[key](arg);\n    var value = info.value;\n  } catch (error) {\n    reject(error);\n    return;\n  }\n  if (info.done) {\n    resolve(value);\n  } else {\n    Promise.resolve(value).then(_next, _throw);\n  }\n}\nfunction _asyncToGenerator(fn) {\n  return function () {\n    var self = this,\n      args = arguments;\n    return new Promise(function (resolve, reject) {\n      var gen = fn.apply(self, args);\n      function _next(value) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n      }\n      function _throw(err) {\n        asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n      }\n      _next(undefined);\n    });\n  };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _regeneratorRuntime() {\n  \"use strict\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */\n  module.exports = _regeneratorRuntime = function _regeneratorRuntime() {\n    return e;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  var t,\n    e = {},\n    r = Object.prototype,\n    n = r.hasOwnProperty,\n    o = Object.defineProperty || function (t, e, r) {\n      t[e] = r.value;\n    },\n    i = \"function\" == typeof Symbol ? Symbol : {},\n    a = i.iterator || \"@@iterator\",\n    c = i.asyncIterator || \"@@asyncIterator\",\n    u = i.toStringTag || \"@@toStringTag\";\n  function define(t, e, r) {\n    return Object.defineProperty(t, e, {\n      value: r,\n      enumerable: !0,\n      configurable: !0,\n      writable: !0\n    }), t[e];\n  }\n  try {\n    define({}, \"\");\n  } catch (t) {\n    define = function define(t, e, r) {\n      return t[e] = r;\n    };\n  }\n  function wrap(t, e, r, n) {\n    var i = e && e.prototype instanceof Generator ? e : Generator,\n      a = Object.create(i.prototype),\n      c = new Context(n || []);\n    return o(a, \"_invoke\", {\n      value: makeInvokeMethod(t, r, c)\n    }), a;\n  }\n  function tryCatch(t, e, r) {\n    try {\n      return {\n        type: \"normal\",\n        arg: t.call(e, r)\n      };\n    } catch (t) {\n      return {\n        type: \"throw\",\n        arg: t\n      };\n    }\n  }\n  e.wrap = wrap;\n  var h = \"suspendedStart\",\n    l = \"suspendedYield\",\n    f = \"executing\",\n    s = \"completed\",\n    y = {};\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n  var p = {};\n  define(p, a, function () {\n    return this;\n  });\n  var d = Object.getPrototypeOf,\n    v = d && d(d(values([])));\n  v && v !== r && n.call(v, a) && (p = v);\n  var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);\n  function defineIteratorMethods(t) {\n    [\"next\", \"throw\", \"return\"].forEach(function (e) {\n      define(t, e, function (t) {\n        return this._invoke(e, t);\n      });\n    });\n  }\n  function AsyncIterator(t, e) {\n    function invoke(r, o, i, a) {\n      var c = tryCatch(t[r], t, o);\n      if (\"throw\" !== c.type) {\n        var u = c.arg,\n          h = u.value;\n        return h && \"object\" == _typeof(h) && n.call(h, \"__await\") ? e.resolve(h.__await).then(function (t) {\n          invoke(\"next\", t, i, a);\n        }, function (t) {\n          invoke(\"throw\", t, i, a);\n        }) : e.resolve(h).then(function (t) {\n          u.value = t, i(u);\n        }, function (t) {\n          return invoke(\"throw\", t, i, a);\n        });\n      }\n      a(c.arg);\n    }\n    var r;\n    o(this, \"_invoke\", {\n      value: function value(t, n) {\n        function callInvokeWithMethodAndArg() {\n          return new e(function (e, r) {\n            invoke(t, n, e, r);\n          });\n        }\n        return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();\n      }\n    });\n  }\n  function makeInvokeMethod(e, r, n) {\n    var o = h;\n    return function (i, a) {\n      if (o === f) throw Error(\"Generator is already running\");\n      if (o === s) {\n        if (\"throw\" === i) throw a;\n        return {\n          value: t,\n          done: !0\n        };\n      }\n      for (n.method = i, n.arg = a;;) {\n        var c = n.delegate;\n        if (c) {\n          var u = maybeInvokeDelegate(c, n);\n          if (u) {\n            if (u === y) continue;\n            return u;\n          }\n        }\n        if (\"next\" === n.method) n.sent = n._sent = n.arg;else if (\"throw\" === n.method) {\n          if (o === h) throw o = s, n.arg;\n          n.dispatchException(n.arg);\n        } else \"return\" === n.method && n.abrupt(\"return\", n.arg);\n        o = f;\n        var p = tryCatch(e, r, n);\n        if (\"normal\" === p.type) {\n          if (o = n.done ? s : l, p.arg === y) continue;\n          return {\n            value: p.arg,\n            done: n.done\n          };\n        }\n        \"throw\" === p.type && (o = s, n.method = \"throw\", n.arg = p.arg);\n      }\n    };\n  }\n  function maybeInvokeDelegate(e, r) {\n    var n = r.method,\n      o = e.iterator[n];\n    if (o === t) return r.delegate = null, \"throw\" === n && e.iterator[\"return\"] && (r.method = \"return\", r.arg = t, maybeInvokeDelegate(e, r), \"throw\" === r.method) || \"return\" !== n && (r.method = \"throw\", r.arg = new TypeError(\"The iterator does not provide a '\" + n + \"' method\")), y;\n    var i = tryCatch(o, e.iterator, r.arg);\n    if (\"throw\" === i.type) return r.method = \"throw\", r.arg = i.arg, r.delegate = null, y;\n    var a = i.arg;\n    return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, \"return\" !== r.method && (r.method = \"next\", r.arg = t), r.delegate = null, y) : a : (r.method = \"throw\", r.arg = new TypeError(\"iterator result is not an object\"), r.delegate = null, y);\n  }\n  function pushTryEntry(t) {\n    var e = {\n      tryLoc: t[0]\n    };\n    1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);\n  }\n  function resetTryEntry(t) {\n    var e = t.completion || {};\n    e.type = \"normal\", delete e.arg, t.completion = e;\n  }\n  function Context(t) {\n    this.tryEntries = [{\n      tryLoc: \"root\"\n    }], t.forEach(pushTryEntry, this), this.reset(!0);\n  }\n  function values(e) {\n    if (e || \"\" === e) {\n      var r = e[a];\n      if (r) return r.call(e);\n      if (\"function\" == typeof e.next) return e;\n      if (!isNaN(e.length)) {\n        var o = -1,\n          i = function next() {\n            for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;\n            return next.value = t, next.done = !0, next;\n          };\n        return i.next = i;\n      }\n    }\n    throw new TypeError(_typeof(e) + \" is not iterable\");\n  }\n  return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, \"constructor\", {\n    value: GeneratorFunctionPrototype,\n    configurable: !0\n  }), o(GeneratorFunctionPrototype, \"constructor\", {\n    value: GeneratorFunction,\n    configurable: !0\n  }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, \"GeneratorFunction\"), e.isGeneratorFunction = function (t) {\n    var e = \"function\" == typeof t && t.constructor;\n    return !!e && (e === GeneratorFunction || \"GeneratorFunction\" === (e.displayName || e.name));\n  }, e.mark = function (t) {\n    return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, \"GeneratorFunction\")), t.prototype = Object.create(g), t;\n  }, e.awrap = function (t) {\n    return {\n      __await: t\n    };\n  }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {\n    return this;\n  }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {\n    void 0 === i && (i = Promise);\n    var a = new AsyncIterator(wrap(t, r, n, o), i);\n    return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {\n      return t.done ? t.value : a.next();\n    });\n  }, defineIteratorMethods(g), define(g, u, \"Generator\"), define(g, a, function () {\n    return this;\n  }), define(g, \"toString\", function () {\n    return \"[object Generator]\";\n  }), e.keys = function (t) {\n    var e = Object(t),\n      r = [];\n    for (var n in e) r.push(n);\n    return r.reverse(), function next() {\n      for (; r.length;) {\n        var t = r.pop();\n        if (t in e) return next.value = t, next.done = !1, next;\n      }\n      return next.done = !0, next;\n    };\n  }, e.values = values, Context.prototype = {\n    constructor: Context,\n    reset: function reset(e) {\n      if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = \"next\", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) \"t\" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);\n    },\n    stop: function stop() {\n      this.done = !0;\n      var t = this.tryEntries[0].completion;\n      if (\"throw\" === t.type) throw t.arg;\n      return this.rval;\n    },\n    dispatchException: function dispatchException(e) {\n      if (this.done) throw e;\n      var r = this;\n      function handle(n, o) {\n        return a.type = \"throw\", a.arg = e, r.next = n, o && (r.method = \"next\", r.arg = t), !!o;\n      }\n      for (var o = this.tryEntries.length - 1; o >= 0; --o) {\n        var i = this.tryEntries[o],\n          a = i.completion;\n        if (\"root\" === i.tryLoc) return handle(\"end\");\n        if (i.tryLoc <= this.prev) {\n          var c = n.call(i, \"catchLoc\"),\n            u = n.call(i, \"finallyLoc\");\n          if (c && u) {\n            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n          } else if (c) {\n            if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);\n          } else {\n            if (!u) throw Error(\"try statement without catch or finally\");\n            if (this.prev < i.finallyLoc) return handle(i.finallyLoc);\n          }\n        }\n      }\n    },\n    abrupt: function abrupt(t, e) {\n      for (var r = this.tryEntries.length - 1; r >= 0; --r) {\n        var o = this.tryEntries[r];\n        if (o.tryLoc <= this.prev && n.call(o, \"finallyLoc\") && this.prev < o.finallyLoc) {\n          var i = o;\n          break;\n        }\n      }\n      i && (\"break\" === t || \"continue\" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);\n      var a = i ? i.completion : {};\n      return a.type = t, a.arg = e, i ? (this.method = \"next\", this.next = i.finallyLoc, y) : this.complete(a);\n    },\n    complete: function complete(t, e) {\n      if (\"throw\" === t.type) throw t.arg;\n      return \"break\" === t.type || \"continue\" === t.type ? this.next = t.arg : \"return\" === t.type ? (this.rval = this.arg = t.arg, this.method = \"return\", this.next = \"end\") : \"normal\" === t.type && e && (this.next = e), y;\n    },\n    finish: function finish(t) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var r = this.tryEntries[e];\n        if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;\n      }\n    },\n    \"catch\": function _catch(t) {\n      for (var e = this.tryEntries.length - 1; e >= 0; --e) {\n        var r = this.tryEntries[e];\n        if (r.tryLoc === t) {\n          var n = r.completion;\n          if (\"throw\" === n.type) {\n            var o = n.arg;\n            resetTryEntry(r);\n          }\n          return o;\n        }\n      }\n      throw Error(\"illegal catch attempt\");\n    },\n    delegateYield: function delegateYield(e, r, n) {\n      return this.delegate = {\n        iterator: values(e),\n        resultName: r,\n        nextLoc: n\n      }, \"next\" === this.method && (this.arg = t), y;\n    }\n  }, e;\n}\nmodule.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// TODO(Babel 8): Remove this file.\n\nvar runtime = require(\"../helpers/regeneratorRuntime\")();\nmodule.exports = runtime;\n\n// Copied from https://github.com/facebook/regenerator/blob/main/packages/runtime/runtime.js#L736=\ntry {\n  regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n  if (typeof globalThis === \"object\") {\n    globalThis.regeneratorRuntime = runtime;\n  } else {\n    Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n  }\n}\n","function _setPrototypeOf(o, p) {\n  module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inheritsLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","'use strict';\n\n/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n  var constructor = this.constructor;\n  return this.then(\n    function(value) {\n      // @ts-ignore\n      return constructor.resolve(callback()).then(function() {\n        return value;\n      });\n    },\n    function(reason) {\n      // @ts-ignore\n      return constructor.resolve(callback()).then(function() {\n        // @ts-ignore\n        return constructor.reject(reason);\n      });\n    }\n  );\n}\n\nfunction allSettled(arr) {\n  var P = this;\n  return new P(function(resolve, reject) {\n    if (!(arr && typeof arr.length !== 'undefined')) {\n      return reject(\n        new TypeError(\n          typeof arr +\n            ' ' +\n            arr +\n            ' is not iterable(cannot read property Symbol(Symbol.iterator))'\n        )\n      );\n    }\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      if (val && (typeof val === 'object' || typeof val === 'function')) {\n        var then = val.then;\n        if (typeof then === 'function') {\n          then.call(\n            val,\n            function(val) {\n              res(i, val);\n            },\n            function(e) {\n              args[i] = { status: 'rejected', reason: e };\n              if (--remaining === 0) {\n                resolve(args);\n              }\n            }\n          );\n          return;\n        }\n      }\n      args[i] = { status: 'fulfilled', value: val };\n      if (--remaining === 0) {\n        resolve(args);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n}\n\n/**\n * @constructor\n */\nfunction AggregateError(errors, message) {\n  this.name = 'AggregateError', this.errors = errors;\n  this.message = message || '';\n}\nAggregateError.prototype = Error.prototype;\n\nfunction any(arr) {\n  var P = this;\n  return new P(function(resolve, reject) {\n    if (!(arr && typeof arr.length !== 'undefined')) {\n      return reject(new TypeError('Promise.any accepts an array'));\n    }\n\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return reject();\n\n    var rejectionReasons = [];\n    for (var i = 0; i < args.length; i++) {\n      try {\n        P.resolve(args[i])\n          .then(resolve)\n          .catch(function(error) {\n            rejectionReasons.push(error);\n            if (rejectionReasons.length === args.length) {\n              reject(\n                new AggregateError(\n                  rejectionReasons,\n                  'All promises were rejected'\n                )\n              );\n            }\n          });\n      } catch (ex) {\n        reject(ex);\n      }\n    }\n  });\n}\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n  return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n  return function() {\n    fn.apply(thisArg, arguments);\n  };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n  if (!(this instanceof Promise))\n    throw new TypeError('Promises must be constructed via new');\n  if (typeof fn !== 'function') throw new TypeError('not a function');\n  /** @type {!number} */\n  this._state = 0;\n  /** @type {!boolean} */\n  this._handled = false;\n  /** @type {Promise|undefined} */\n  this._value = undefined;\n  /** @type {!Array<!Function>} */\n  this._deferreds = [];\n\n  doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n  while (self._state === 3) {\n    self = self._value;\n  }\n  if (self._state === 0) {\n    self._deferreds.push(deferred);\n    return;\n  }\n  self._handled = true;\n  Promise._immediateFn(function() {\n    var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n    if (cb === null) {\n      (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n      return;\n    }\n    var ret;\n    try {\n      ret = cb(self._value);\n    } catch (e) {\n      reject(deferred.promise, e);\n      return;\n    }\n    resolve(deferred.promise, ret);\n  });\n}\n\nfunction resolve(self, newValue) {\n  try {\n    // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n    if (newValue === self)\n      throw new TypeError('A promise cannot be resolved with itself.');\n    if (\n      newValue &&\n      (typeof newValue === 'object' || typeof newValue === 'function')\n    ) {\n      var then = newValue.then;\n      if (newValue instanceof Promise) {\n        self._state = 3;\n        self._value = newValue;\n        finale(self);\n        return;\n      } else if (typeof then === 'function') {\n        doResolve(bind(then, newValue), self);\n        return;\n      }\n    }\n    self._state = 1;\n    self._value = newValue;\n    finale(self);\n  } catch (e) {\n    reject(self, e);\n  }\n}\n\nfunction reject(self, newValue) {\n  self._state = 2;\n  self._value = newValue;\n  finale(self);\n}\n\nfunction finale(self) {\n  if (self._state === 2 && self._deferreds.length === 0) {\n    Promise._immediateFn(function() {\n      if (!self._handled) {\n        Promise._unhandledRejectionFn(self._value);\n      }\n    });\n  }\n\n  for (var i = 0, len = self._deferreds.length; i < len; i++) {\n    handle(self, self._deferreds[i]);\n  }\n  self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n  var done = false;\n  try {\n    fn(\n      function(value) {\n        if (done) return;\n        done = true;\n        resolve(self, value);\n      },\n      function(reason) {\n        if (done) return;\n        done = true;\n        reject(self, reason);\n      }\n    );\n  } catch (ex) {\n    if (done) return;\n    done = true;\n    reject(self, ex);\n  }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n  return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n  // @ts-ignore\n  var prom = new this.constructor(noop);\n\n  handle(this, new Handler(onFulfilled, onRejected, prom));\n  return prom;\n};\n\nPromise.prototype['finally'] = finallyConstructor;\n\nPromise.all = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!isArray(arr)) {\n      return reject(new TypeError('Promise.all accepts an array'));\n    }\n\n    var args = Array.prototype.slice.call(arr);\n    if (args.length === 0) return resolve([]);\n    var remaining = args.length;\n\n    function res(i, val) {\n      try {\n        if (val && (typeof val === 'object' || typeof val === 'function')) {\n          var then = val.then;\n          if (typeof then === 'function') {\n            then.call(\n              val,\n              function(val) {\n                res(i, val);\n              },\n              reject\n            );\n            return;\n          }\n        }\n        args[i] = val;\n        if (--remaining === 0) {\n          resolve(args);\n        }\n      } catch (ex) {\n        reject(ex);\n      }\n    }\n\n    for (var i = 0; i < args.length; i++) {\n      res(i, args[i]);\n    }\n  });\n};\n\nPromise.any = any;\n\nPromise.allSettled = allSettled;\n\nPromise.resolve = function(value) {\n  if (value && typeof value === 'object' && value.constructor === Promise) {\n    return value;\n  }\n\n  return new Promise(function(resolve) {\n    resolve(value);\n  });\n};\n\nPromise.reject = function(value) {\n  return new Promise(function(resolve, reject) {\n    reject(value);\n  });\n};\n\nPromise.race = function(arr) {\n  return new Promise(function(resolve, reject) {\n    if (!isArray(arr)) {\n      return reject(new TypeError('Promise.race accepts an array'));\n    }\n\n    for (var i = 0, len = arr.length; i < len; i++) {\n      Promise.resolve(arr[i]).then(resolve, reject);\n    }\n  });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n  // @ts-ignore\n  (typeof setImmediate === 'function' &&\n    function(fn) {\n      // @ts-ignore\n      setImmediate(fn);\n    }) ||\n  function(fn) {\n    setTimeoutFunc(fn, 0);\n  };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n  if (typeof console !== 'undefined' && console) {\n    console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n  }\n};\n\nmodule.exports = Promise;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n  ? R.apply\n  : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target)\n      .concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n}\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n  }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function() {\n    return defaultMaxListeners;\n  },\n  set: function(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function() {\n\n  if (this._events === undefined ||\n      this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n  this._maxListeners = n;\n  return this;\n};\n\nfunction _getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n  var doError = (type === 'error');\n\n  var events = this._events;\n  if (events !== undefined)\n    doError = (doError && events.error === undefined);\n  else if (!doError)\n    return false;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    var er;\n    if (args.length > 0)\n      er = args[0];\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    }\n    // At least give some kind of context to the user\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n\n  if (handler === undefined)\n    return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      ReflectApply(listeners[i], this, args);\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  checkListener(listener);\n\n  events = target._events;\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] =\n        prepend ? [listener, existing] : [existing, listener];\n      // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    }\n\n    // Check for listener leak\n    m = _getMaxListeners(target);\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true;\n      // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n      var w = new Error('Possible EventEmitter memory leak detected. ' +\n                          existing.length + ' ' + String(type) + ' listeners ' +\n                          'added. Use emitter.setMaxListeners() to ' +\n                          'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction onceWrapper() {\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    if (arguments.length === 0)\n      return this.listener.call(this.target);\n    return this.listener.apply(this.target, arguments);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  checkListener(listener);\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      checkListener(listener);\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      checkListener(listener);\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      list = events[type];\n      if (list === undefined)\n        return this;\n\n      if (list === listener || list.listener === listener) {\n        if (--this._eventsCount === 0)\n          this._events = Object.create(null);\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length - 1; i >= 0; i--) {\n          if (list[i] === listener || list[i].listener === listener) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (position === 0)\n          list.shift();\n        else {\n          spliceOne(list, position);\n        }\n\n        if (list.length === 1)\n          events[type] = list[0];\n\n        if (events.removeListener !== undefined)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events, i;\n\n      events = this._events;\n      if (events === undefined)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (events.removeListener === undefined) {\n        if (arguments.length === 0) {\n          this._events = Object.create(null);\n          this._eventsCount = 0;\n        } else if (events[type] !== undefined) {\n          if (--this._eventsCount === 0)\n            this._events = Object.create(null);\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        var key;\n        for (i = 0; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners !== undefined) {\n        // LIFO order\n        for (i = listeners.length - 1; i >= 0; i--) {\n          this.removeListener(type, listeners[i]);\n        }\n      }\n\n      return this;\n    };\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n\n  if (events === undefined)\n    return [];\n\n  var evlistener = events[type];\n  if (evlistener === undefined)\n    return [];\n\n  if (typeof evlistener === 'function')\n    return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n  return unwrap ?\n    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n  for (var i = 0; i < n; ++i)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++)\n    list[index] = list[index + 1];\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n\nfunction once(emitter, name) {\n  return new Promise(function (resolve, reject) {\n    function errorListener(err) {\n      emitter.removeListener(name, resolver);\n      reject(err);\n    }\n\n    function resolver() {\n      if (typeof emitter.removeListener === 'function') {\n        emitter.removeListener('error', errorListener);\n      }\n      resolve([].slice.call(arguments));\n    };\n\n    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n    if (name !== 'error') {\n      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n    }\n  });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n  if (typeof emitter.on === 'function') {\n    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n  }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n  if (typeof emitter.on === 'function') {\n    if (flags.once) {\n      emitter.once(name, listener);\n    } else {\n      emitter.on(name, listener);\n    }\n  } else if (typeof emitter.addEventListener === 'function') {\n    // EventTarget does not have `error` event semantics like Node\n    // EventEmitters, we do not listen for `error` events here.\n    emitter.addEventListener(name, function wrapListener(arg) {\n      // IE does not have builtin `{ once: true }` support so we\n      // have to do it manually.\n      if (flags.once) {\n        emitter.removeEventListener(name, wrapListener);\n      }\n      listener(arg);\n    });\n  } else {\n    throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n  }\n}\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n  this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  --this.size;\n  return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    ++this.size;\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\nmodule.exports = listCacheSet;\n","var listCacheClear = require('./_listCacheClear'),\n    listCacheDelete = require('./_listCacheDelete'),\n    listCacheGet = require('./_listCacheGet'),\n    listCacheHas = require('./_listCacheHas'),\n    listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n  this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  var data = this.__data__,\n      result = data['delete'](key);\n\n  this.size = data.size;\n  return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  if (!isObject(value)) {\n    return false;\n  }\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 9 which returns 'object' for typed arrays and other constructors.\n  var tag = baseGetTag(value);\n  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\nmodule.exports = toSource;\n","var isFunction = require('./isFunction'),\n    isMasked = require('./_isMasked'),\n    isObject = require('./isObject'),\n    toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var baseIsNative = require('./_baseIsNative'),\n    getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getNative = require('./_getNative'),\n    root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n  this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  var result = this.has(key) && delete this.__data__[key];\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  this.size += this.has(key) ? 0 : 1;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\nmodule.exports = hashSet;\n","var hashClear = require('./_hashClear'),\n    hashDelete = require('./_hashDelete'),\n    hashGet = require('./_hashGet'),\n    hashHas = require('./_hashHas'),\n    hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var Hash = require('./_Hash'),\n    ListCache = require('./_ListCache'),\n    Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.size = 0;\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\nmodule.exports = mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\nmodule.exports = getMapData;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  var result = getMapData(this, key)['delete'](key);\n  this.size -= result ? 1 : 0;\n  return result;\n}\n\nmodule.exports = mapCacheDelete;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  var data = getMapData(this, key),\n      size = data.size;\n\n  data.set(key, value);\n  this.size += data.size == size ? 0 : 1;\n  return this;\n}\n\nmodule.exports = mapCacheSet;\n","var mapCacheClear = require('./_mapCacheClear'),\n    mapCacheDelete = require('./_mapCacheDelete'),\n    mapCacheGet = require('./_mapCacheGet'),\n    mapCacheHas = require('./_mapCacheHas'),\n    mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries == null ? 0 : entries.length;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var ListCache = require('./_ListCache'),\n    Map = require('./_Map'),\n    MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var data = this.__data__;\n  if (data instanceof ListCache) {\n    var pairs = data.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      this.size = ++data.size;\n      return this;\n    }\n    data = this.__data__ = new MapCache(pairs);\n  }\n  data.set(key, value);\n  this.size = data.size;\n  return this;\n}\n\nmodule.exports = stackSet;\n","var ListCache = require('./_ListCache'),\n    stackClear = require('./_stackClear'),\n    stackDelete = require('./_stackDelete'),\n    stackGet = require('./_stackGet'),\n    stackHas = require('./_stackHas'),\n    stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  var data = this.__data__ = new ListCache(entries);\n  this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n  try {\n    var func = getNative(Object, 'defineProperty');\n    func({}, '', {});\n    return func;\n  } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n  if (key == '__proto__' && defineProperty) {\n    defineProperty(object, key, {\n      'configurable': true,\n      'enumerable': true,\n      'value': value,\n      'writable': true\n    });\n  } else {\n    object[key] = value;\n  }\n}\n\nmodule.exports = baseAssignValue;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignMergeValue(object, key, value) {\n  if ((value !== undefined && !eq(object[key], value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignMergeValue;\n","/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\nmodule.exports = createBaseFor;\n","var createBaseFor = require('./_createBaseFor');\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var root = require('./_root');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\n\n/**\n * Creates a clone of  `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\nfunction cloneBuffer(buffer, isDeep) {\n  if (isDeep) {\n    return buffer.slice();\n  }\n  var length = buffer.length,\n      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n  buffer.copy(result);\n  return result;\n}\n\nmodule.exports = cloneBuffer;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","var Uint8Array = require('./_Uint8Array');\n\n/**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\nfunction cloneArrayBuffer(arrayBuffer) {\n  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n  new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n  return result;\n}\n\nmodule.exports = cloneArrayBuffer;\n","var cloneArrayBuffer = require('./_cloneArrayBuffer');\n\n/**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\nfunction cloneTypedArray(typedArray, isDeep) {\n  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nmodule.exports = cloneTypedArray;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction copyArray(source, array) {\n  var index = -1,\n      length = source.length;\n\n  array || (array = Array(length));\n  while (++index < length) {\n    array[index] = source[index];\n  }\n  return array;\n}\n\nmodule.exports = copyArray;\n","var isObject = require('./isObject');\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\n\n/**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\nvar baseCreate = (function() {\n  function object() {}\n  return function(proto) {\n    if (!isObject(proto)) {\n      return {};\n    }\n    if (objectCreate) {\n      return objectCreate(proto);\n    }\n    object.prototype = proto;\n    var result = new object;\n    object.prototype = undefined;\n    return result;\n  };\n}());\n\nmodule.exports = baseCreate;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\nmodule.exports = overArg;\n","var overArg = require('./_overArg');\n\n/** Built-in value references. */\nvar getPrototype = overArg(Object.getPrototypeOf, Object);\n\nmodule.exports = getPrototype;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var baseCreate = require('./_baseCreate'),\n    getPrototype = require('./_getPrototype'),\n    isPrototype = require('./_isPrototype');\n\n/**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\nfunction initCloneObject(object) {\n  return (typeof object.constructor == 'function' && !isPrototype(object))\n    ? baseCreate(getPrototype(object))\n    : {};\n}\n\nmodule.exports = initCloneObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n  return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","var baseIsArguments = require('./_baseIsArguments'),\n    isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n    !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","var isFunction = require('./isFunction'),\n    isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var isArrayLike = require('./isArrayLike'),\n    isObjectLike = require('./isObjectLike');\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\nmodule.exports = isArrayLikeObject;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n  return false;\n}\n\nmodule.exports = stubFalse;\n","var root = require('./_root'),\n    stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","var baseGetTag = require('./_baseGetTag'),\n    getPrototype = require('./_getPrototype'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to infer the `Object` constructor. */\nvar objectCtorString = funcToString.call(Object);\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n    return false;\n  }\n  var proto = getPrototype(value);\n  if (proto === null) {\n    return true;\n  }\n  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n  return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n    funcToString.call(Ctor) == objectCtorString;\n}\n\nmodule.exports = isPlainObject;\n","var baseGetTag = require('./_baseGetTag'),\n    isLength = require('./isLength'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    // Use `util.types` for Node.js 10+.\n    var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n    if (types) {\n      return types;\n    }\n\n    // Legacy `process.binding('util')` for Node.js < 10.\n    return freeProcess && freeProcess.binding && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n    baseUnary = require('./_baseUnary'),\n    nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction safeGet(object, key) {\n  if (key === 'constructor' && typeof object[key] === 'function') {\n    return;\n  }\n\n  if (key == '__proto__') {\n    return;\n  }\n\n  return object[key];\n}\n\nmodule.exports = safeGet;\n","var baseAssignValue = require('./_baseAssignValue'),\n    eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n  var objValue = object[key];\n  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n      (value === undefined && !(key in object))) {\n    baseAssignValue(object, key, value);\n  }\n}\n\nmodule.exports = assignValue;\n","var assignValue = require('./_assignValue'),\n    baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n  var isNew = !object;\n  object || (object = {});\n\n  var index = -1,\n      length = props.length;\n\n  while (++index < length) {\n    var key = props[index];\n\n    var newValue = customizer\n      ? customizer(object[key], source[key], key, object, source)\n      : undefined;\n\n    if (newValue === undefined) {\n      newValue = source[key];\n    }\n    if (isNew) {\n      baseAssignValue(object, key, newValue);\n    } else {\n      assignValue(object, key, newValue);\n    }\n  }\n  return object;\n}\n\nmodule.exports = copyObject;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\nmodule.exports = baseTimes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  var type = typeof value;\n  length = length == null ? MAX_SAFE_INTEGER : length;\n\n  return !!length &&\n    (type == 'number' ||\n      (type != 'symbol' && reIsUint.test(value))) &&\n        (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseTimes = require('./_baseTimes'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isBuffer = require('./isBuffer'),\n    isIndex = require('./_isIndex'),\n    isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  var isArr = isArray(value),\n      isArg = !isArr && isArguments(value),\n      isBuff = !isArr && !isArg && isBuffer(value),\n      isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n      skipIndexes = isArr || isArg || isBuff || isType,\n      result = skipIndexes ? baseTimes(value.length, String) : [],\n      length = result.length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (\n           // Safari 9 has enumerable `arguments.length` in strict mode.\n           key == 'length' ||\n           // Node.js 0.10 has enumerable non-index properties on buffers.\n           (isBuff && (key == 'offset' || key == 'parent')) ||\n           // PhantomJS 2 has enumerable non-index properties on typed arrays.\n           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n           // Skip index properties.\n           isIndex(key, length)\n        ))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction nativeKeysIn(object) {\n  var result = [];\n  if (object != null) {\n    for (var key in Object(object)) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = nativeKeysIn;\n","var isObject = require('./isObject'),\n    isPrototype = require('./_isPrototype'),\n    nativeKeysIn = require('./_nativeKeysIn');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeysIn(object) {\n  if (!isObject(object)) {\n    return nativeKeysIn(object);\n  }\n  var isProto = isPrototype(object),\n      result = [];\n\n  for (var key in object) {\n    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\nmodule.exports = baseKeysIn;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n    baseKeysIn = require('./_baseKeysIn'),\n    isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nmodule.exports = keysIn;\n","var copyObject = require('./_copyObject'),\n    keysIn = require('./keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n  return copyObject(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var assignMergeValue = require('./_assignMergeValue'),\n    cloneBuffer = require('./_cloneBuffer'),\n    cloneTypedArray = require('./_cloneTypedArray'),\n    copyArray = require('./_copyArray'),\n    initCloneObject = require('./_initCloneObject'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLikeObject = require('./isArrayLikeObject'),\n    isBuffer = require('./isBuffer'),\n    isFunction = require('./isFunction'),\n    isObject = require('./isObject'),\n    isPlainObject = require('./isPlainObject'),\n    isTypedArray = require('./isTypedArray'),\n    safeGet = require('./_safeGet'),\n    toPlainObject = require('./toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n  var objValue = safeGet(object, key),\n      srcValue = safeGet(source, key),\n      stacked = stack.get(srcValue);\n\n  if (stacked) {\n    assignMergeValue(object, key, stacked);\n    return;\n  }\n  var newValue = customizer\n    ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n    : undefined;\n\n  var isCommon = newValue === undefined;\n\n  if (isCommon) {\n    var isArr = isArray(srcValue),\n        isBuff = !isArr && isBuffer(srcValue),\n        isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n    newValue = srcValue;\n    if (isArr || isBuff || isTyped) {\n      if (isArray(objValue)) {\n        newValue = objValue;\n      }\n      else if (isArrayLikeObject(objValue)) {\n        newValue = copyArray(objValue);\n      }\n      else if (isBuff) {\n        isCommon = false;\n        newValue = cloneBuffer(srcValue, true);\n      }\n      else if (isTyped) {\n        isCommon = false;\n        newValue = cloneTypedArray(srcValue, true);\n      }\n      else {\n        newValue = [];\n      }\n    }\n    else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n      newValue = objValue;\n      if (isArguments(objValue)) {\n        newValue = toPlainObject(objValue);\n      }\n      else if (!isObject(objValue) || isFunction(objValue)) {\n        newValue = initCloneObject(srcValue);\n      }\n    }\n    else {\n      isCommon = false;\n    }\n  }\n  if (isCommon) {\n    // Recursively merge objects and arrays (susceptible to call stack limits).\n    stack.set(srcValue, newValue);\n    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n    stack['delete'](srcValue);\n  }\n  assignMergeValue(object, key, newValue);\n}\n\nmodule.exports = baseMergeDeep;\n","var Stack = require('./_Stack'),\n    assignMergeValue = require('./_assignMergeValue'),\n    baseFor = require('./_baseFor'),\n    baseMergeDeep = require('./_baseMergeDeep'),\n    isObject = require('./isObject'),\n    keysIn = require('./keysIn'),\n    safeGet = require('./_safeGet');\n\n/**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n *  counterparts.\n */\nfunction baseMerge(object, source, srcIndex, customizer, stack) {\n  if (object === source) {\n    return;\n  }\n  baseFor(source, function(srcValue, key) {\n    stack || (stack = new Stack);\n    if (isObject(srcValue)) {\n      baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n    }\n    else {\n      var newValue = customizer\n        ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      if (newValue === undefined) {\n        newValue = srcValue;\n      }\n      assignMergeValue(object, key, newValue);\n    }\n  }, keysIn);\n}\n\nmodule.exports = baseMerge;\n","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\nmodule.exports = identity;\n","/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\nmodule.exports = apply;\n","var apply = require('./_apply');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\nfunction overRest(func, start, transform) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = transform(array);\n    return apply(func, this, otherArgs);\n  };\n}\n\nmodule.exports = overRest;\n","/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\nfunction constant(value) {\n  return function() {\n    return value;\n  };\n}\n\nmodule.exports = constant;\n","var constant = require('./constant'),\n    defineProperty = require('./_defineProperty'),\n    identity = require('./identity');\n\n/**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar baseSetToString = !defineProperty ? identity : function(func, string) {\n  return defineProperty(func, 'toString', {\n    'configurable': true,\n    'enumerable': false,\n    'value': constant(string),\n    'writable': true\n  });\n};\n\nmodule.exports = baseSetToString;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n    HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\n\n/**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\nfunction shortOut(func) {\n  var count = 0,\n      lastCalled = 0;\n\n  return function() {\n    var stamp = nativeNow(),\n        remaining = HOT_SPAN - (stamp - lastCalled);\n\n    lastCalled = stamp;\n    if (remaining > 0) {\n      if (++count >= HOT_COUNT) {\n        return arguments[0];\n      }\n    } else {\n      count = 0;\n    }\n    return func.apply(undefined, arguments);\n  };\n}\n\nmodule.exports = shortOut;\n","var baseSetToString = require('./_baseSetToString'),\n    shortOut = require('./_shortOut');\n\n/**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\nvar setToString = shortOut(baseSetToString);\n\nmodule.exports = setToString;\n","var identity = require('./identity'),\n    overRest = require('./_overRest'),\n    setToString = require('./_setToString');\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  return setToString(overRest(func, start, identity), func + '');\n}\n\nmodule.exports = baseRest;\n","var eq = require('./eq'),\n    isArrayLike = require('./isArrayLike'),\n    isIndex = require('./_isIndex'),\n    isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\nmodule.exports = isIterateeCall;\n","var baseRest = require('./_baseRest'),\n    isIterateeCall = require('./_isIterateeCall');\n\n/**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n  return baseRest(function(object, sources) {\n    var index = -1,\n        length = sources.length,\n        customizer = length > 1 ? sources[length - 1] : undefined,\n        guard = length > 2 ? sources[2] : undefined;\n\n    customizer = (assigner.length > 3 && typeof customizer == 'function')\n      ? (length--, customizer)\n      : undefined;\n\n    if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n      customizer = length < 3 ? undefined : customizer;\n      length = 1;\n    }\n    object = Object(object);\n    while (++index < length) {\n      var source = sources[index];\n      if (source) {\n        assigner(object, source, index, customizer);\n      }\n    }\n    return object;\n  });\n}\n\nmodule.exports = createAssigner;\n","var baseMerge = require('./_baseMerge'),\n    createAssigner = require('./_createAssigner');\n\n/**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n *   if (_.isArray(objValue)) {\n *     return objValue.concat(srcValue);\n *   }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\nvar mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n  baseMerge(object, source, srcIndex, customizer);\n});\n\nmodule.exports = mergeWith;\n","function _getPrototypeOf(o) {\n  module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n    return o.__proto__ || Object.getPrototypeOf(o);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(fn) {\n  try {\n    return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n  } catch (e) {\n    return typeof fn === \"function\";\n  }\n}\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports)();\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nfunction _construct(t, e, r) {\n  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && setPrototypeOf(p, r.prototype), p;\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeFunction = require(\"./isNativeFunction.js\");\nvar construct = require(\"./construct.js\");\nfunction _wrapNativeSuper(Class) {\n  var _cache = typeof Map === \"function\" ? new Map() : undefined;\n  module.exports = _wrapNativeSuper = function _wrapNativeSuper(Class) {\n    if (Class === null || !isNativeFunction(Class)) return Class;\n    if (typeof Class !== \"function\") {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n    if (typeof _cache !== \"undefined\") {\n      if (_cache.has(Class)) return _cache.get(Class);\n      _cache.set(Class, Wrapper);\n    }\n    function Wrapper() {\n      return construct(Class, arguments, getPrototypeOf(this).constructor);\n    }\n    Wrapper.prototype = Object.create(Class.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    return setPrototypeOf(Wrapper, Class);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n  return _wrapNativeSuper(Class);\n}\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n  }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  Object.defineProperty(Constructor, \"prototype\", {\n    writable: false\n  });\n  return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*! For license information please see index.js.LICENSE.txt */\n!function(){var e={223:function(e){self,e.exports=function(){\"use strict\";var e={228:function(e){var t=Object.prototype.hasOwnProperty,n=\"~\";function r(){}function i(e,t,n){this.fn=e,this.context=t,this.once=n||!1}function o(e,t,r,o,a){if(\"function\"!=typeof r)throw new TypeError(\"The listener must be a function\");var s=new i(r,o||e,a),u=n?n+t:t;return e._events[u]?e._events[u].fn?e._events[u]=[e._events[u],s]:e._events[u].push(s):(e._events[u]=s,e._eventsCount++),e}function a(e,t){0==--e._eventsCount?e._events=new r:delete e._events[t]}function s(){this._events=new r,this._eventsCount=0}Object.create&&(r.prototype=Object.create(null),(new r).__proto__||(n=!1)),s.prototype.eventNames=function(){var e,r,i=[];if(0===this._eventsCount)return i;for(r in e=this._events)t.call(e,r)&&i.push(n?r.slice(1):r);return Object.getOwnPropertySymbols?i.concat(Object.getOwnPropertySymbols(e)):i},s.prototype.listeners=function(e){var t=n?n+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,o=r.length,a=new Array(o);i<o;i++)a[i]=r[i].fn;return a},s.prototype.listenerCount=function(e){var t=n?n+e:e,r=this._events[t];return r?r.fn?1:r.length:0},s.prototype.emit=function(e,t,r,i,o,a){var s=n?n+e:e;if(!this._events[s])return!1;var u,c,d=this._events[s],l=arguments.length;if(d.fn){switch(d.once&&this.removeListener(e,d.fn,void 0,!0),l){case 1:return d.fn.call(d.context),!0;case 2:return d.fn.call(d.context,t),!0;case 3:return d.fn.call(d.context,t,r),!0;case 4:return d.fn.call(d.context,t,r,i),!0;case 5:return d.fn.call(d.context,t,r,i,o),!0;case 6:return d.fn.call(d.context,t,r,i,o,a),!0}for(c=1,u=new Array(l-1);c<l;c++)u[c-1]=arguments[c];d.fn.apply(d.context,u)}else{var f,h=d.length;for(c=0;c<h;c++)switch(d[c].once&&this.removeListener(e,d[c].fn,void 0,!0),l){case 1:d[c].fn.call(d[c].context);break;case 2:d[c].fn.call(d[c].context,t);break;case 3:d[c].fn.call(d[c].context,t,r);break;case 4:d[c].fn.call(d[c].context,t,r,i);break;default:if(!u)for(f=1,u=new Array(l-1);f<l;f++)u[f-1]=arguments[f];d[c].fn.apply(d[c].context,u)}}return!0},s.prototype.on=function(e,t,n){return o(this,e,t,n,!1)},s.prototype.once=function(e,t,n){return o(this,e,t,n,!0)},s.prototype.removeListener=function(e,t,r,i){var o=n?n+e:e;if(!this._events[o])return this;if(!t)return a(this,o),this;var s=this._events[o];if(s.fn)s.fn!==t||i&&!s.once||r&&s.context!==r||a(this,o);else{for(var u=0,c=[],d=s.length;u<d;u++)(s[u].fn!==t||i&&!s[u].once||r&&s[u].context!==r)&&c.push(s[u]);c.length?this._events[o]=1===c.length?c[0]:c:a(this,o)}return this},s.prototype.removeAllListeners=function(e){var t;return e?(t=n?n+e:e,this._events[t]&&a(this,t)):(this._events=new r,this._eventsCount=0),this},s.prototype.off=s.prototype.removeListener,s.prototype.addListener=s.prototype.on,s.prefixed=n,s.EventEmitter=s,e.exports=s},815:function(e,t){var n,r,i=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},n(e,t)},function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});function o(e){return 60*e*60}function a(e,t){var n={};return Object.assign(n,e),t&&Object.assign(n,t),n}Object.defineProperty(t,\"__esModule\",{value:!0}),t.DeviceConfigPropertyHolder=t.DeviceConfigManager=t.DeviceConfigEnv=void 0,function(e){e.BETA=\"beta\",e.PROD=\"prod\",e.CUSTOM=\"custom\"}(r||(t.DeviceConfigEnv=r={}));var s=function(e){function t(t){return e.call(this,t)||this}return i(t,e),t}(Error),u=\"data\",c=o(1),d=o(2),l=\"base64\",f=function(){function e(e,t){var n,i,o,a,s,l,f,h;if(!t.fileKey)throw new Error(\"options.fileKey cannot be empty\");var p=null!==(n=t.clock)&&void 0!==n?n:new E,g=p.getMillis();switch(this.context=e,this.fileKey=t.fileKey,this.env=t.standardEnv,t.standardEnv){case r.BETA:this.fetchServer=\"beta.ivs-device-config-beta.live-video.net\";break;case r.PROD:this.fetchServer=\"prod.ivs-device-config.live-video.net\";break;case r.CUSTOM:if(!t.customServer)throw new Error(\"Custom env requires options.customServer\");this.fetchServer=t.customServer;break;default:throw new Error(\"Invalid value for standardEnv: \".concat(t.standardEnv))}this.trace=null!==(i=t.trace)&&void 0!==i?i:new m(t.enableConsoleLog),this.fetch=null!==(o=t.fetch)&&void 0!==o?o:new v(e),this.storage=new y(\"amazon_ivs_device_config_v1_\"+t.fileKey,e.localStorage),this.state=new b(this.storage,\"state\"),this.refresh={refreshIntervalSeconds:null!==(a=t.refresh.refreshIntervalSeconds)&&void 0!==a?a:c,retryCount:null!==(s=t.refresh.retryCount)&&void 0!==s?s:3,retryIntervalSeconds:null!==(l=t.refresh.retryIntervalSeconds)&&void 0!==l?l:10,maxCacheAgeSeconds:null!==(f=t.refresh.maxCacheAgeSeconds)&&void 0!==f?f:259200,stopRefreshAfterSeconds:null!==(h=t.refresh.stopRefreshAfterSeconds)&&void 0!==h?h:d,canRefreshNow:t.refresh.canRefreshNow},this.emitMetrics=t.emitMetrics,this.analyticsProperties=t.analyticsProperties,this.enableConsoleLog=t.enableConsoleLog,this.clock=p,this.isInitialRefreshDone=!1;var S=0,T=this.state.getState();T&&T.fetchServer===this.fetchServer&&T.lastFetchWhenMs&&(S=T.lastFetchWhenMs);var _,C=p.getMillis(),w=(C-S)/1e3;if(w<=this.refresh.maxCacheAgeSeconds){var k=this.storage.getJson(u);k&&k.fetchServer===this.fetchServer&&this.setData(k.json)}this.lastUseMs=C,w>=this.refresh.refreshIntervalSeconds||0==S?_=0:(_=Math.round(this.refresh.refreshIntervalSeconds-w),this.isInitialRefreshDone=!0),_<5&&(_=5),this.trace.onTrace(\"Will start refresh in \"+_+\" seconds\"),this.fetchTask=this.context.setTimeout(this.startRefresh.bind(this),1e3*_);var I=p.getMillis();this.initialLoadTime=I-g}return e.getInstance=function(t,n){try{if(!(t.fetch&&t.setTimeout&&t.clearTimeout&&t.localStorage))return void console.log(\"Context needs to provide fetch, setTimeout, clearTimeout, localStorage\")}catch(e){return void console.error(\"Error checking for context properties \"+e)}if(this.gInstance){if(this.gInstance.fileKey!=n.fileKey)throw new Error(\"Existing instance has file key \".concat(this.gInstance.fileKey,\", now asking for \").concat(n.fileKey));return this.gInstance}return this.gInstance=new e(t,n),this.gInstance},e.prototype.getConfigurationHolder=function(e){var t,n=this.clock.getMillis();this.lastUseMs=n;var r=null!==(t=e.analytics)&&void 0!==t?t:new g(this.enableConsoleLog),i=0,o=this.state.getState();return o&&o.fetchServer===this.fetchServer&&o.lastFetchWhenMs&&(i=o.lastFetchWhenMs),(n-i)/1e3<=this.refresh.maxCacheAgeSeconds?new h(r,this.analyticsProperties,this.properties,i,this.clock):new h(r,void 0,void 0,0,this.clock)},e.prototype.getFetchUrl=function(){var e=\"https://\".concat(this.fetchServer,\"/\").concat(this.fileKey,\".json\"),t=new URL(e);return t.searchParams.set(\"version\",\"1.0\"),t},e.clearInstance=function(){var e;null===(e=this.gInstance)||void 0===e||e.clearInstanceImpl(),this.gInstance=void 0},e.prototype.clearInstanceImpl=function(){this.context.clearTimeout(this.fetchTask),this.fetchTask=void 0,this.context.clearTimeout(this.retryTask),this.retryTask=void 0},e.prototype.startRefresh=function(){var e=this;this.trace.onTrace(\"Starting refresh request\"),this.fetchTask=void 0,this.retryTask&&(this.context.clearTimeout(this.retryTask),this.retryTask=void 0),this.fetchTask=this.context.setTimeout(this.startRefresh.bind(this),1e3*this.refresh.refreshIntervalSeconds);var t=this.clock.getMillis();if((t-this.lastUseMs)/1e3>this.refresh.stopRefreshAfterSeconds)this.trace.onTrace(\"Will not refresh due to refresh timeout\");else if(!this.isInitialRefreshDone||this.refresh.canRefreshNow()){this.isInitialRefreshDone=!0;var n={};this.fetchData().then((function(r){e.processResponse(r,n,t),e.emitMetricsImpl(n)})).catch((function(t){e.exceptionMetrics(n,t),e.emitMetricsImpl(n),e.trace.onTrace(\"Fetch error: \"+t),e.refresh.retryCount>0&&e.scheduleRetry(1)}))}else this.trace.onTrace(\"Will not refresh due to callback having returned false\")},e.prototype.fetchData=function(){var e=this.getFetchUrl(),t=new Headers,n=this.state.getState();return n.fetchServer===this.fetchServer&&(n.lastFetchWhenFullMs&&this.clock.getMillis()-n.lastFetchWhenFullMs>1e3*o(24)?this.trace.onTrace(\"Forcing full refresh\"):this.properties&&n.lastFetchEtagHeader&&t.set(\"If-None-Match\",n.lastFetchEtagHeader)),this.fetch.fetchUrl(e,t)},e.prototype.processResponse=function(e,t,n){var r={fetchServer:this.fetchServer,lastFetchWhenMs:this.clock.getMillis()},i=e.headers.get(\"etag\");if(i&&(r.lastFetchEtagHeader=i),e.status<300&&e.json)if(this.setData(e.json)){this.trace.onTrace(\"Successfully parsed fetched data\"),this.storage.setJson(u,{fetchServer:this.fetchServer,json:e.json});var o=this.clock.getMillis();r.lastFetchWhenFullMs=o,this.state.setState(r),t.success_new_data_count=1,t.fetch_duration_average=Math.max(0,o-n)}else t.fail_invalid_data_count=1;else{if(304!==e.status){var a=\"Unexpected http fetch status: \"+e.status;throw this.trace.onTrace(a),new s(a)}this.trace.onTrace(\"Server said no change in data\"),o=this.clock.getMillis(),r.lastFetchWhenMs=o,this.state.setState(r),t.success_no_change_count=1,t.fetch_duration_average=Math.max(0,o-n)}},e.prototype.scheduleRetry=function(e){var t=this;this.retryTask&&this.context.clearTimeout(this.retryTask);var n=e*this.refresh.retryIntervalSeconds;this.retryTask=this.context.setTimeout((function(){t.retryTask=void 0,t.fetchRetry(e)}),1e3*n)},e.prototype.fetchRetry=function(e){var t=this;this.trace.onTrace(\"Starting retry request \".concat(e,\"...\"));var n={},r=this.clock.getMillis();this.fetchData().then((function(e){t.processResponse(e,n,r),t.emitMetricsImpl(n)})).catch((function(r){t.exceptionMetrics(n,r),t.emitMetricsImpl(n),t.trace.onTrace(\"Fetch error: \"+r),t.refresh.retryCount>e&&t.scheduleRetry(e+1)}))},e.prototype.setData=function(e){if(!e)return!1;if(\"1.0\"!==e.version)return this.trace.onTrace(\"Data version is not 1.0, not applying\"),!1;var t=e.properties;if(!t||!Array.isArray(t))return this.trace.onTrace(\"Data properties is not an array, not applying\"),!1;for(var n=new Map,r=0,i=t;r<i.length;r++){var o=i[r];if(o.name&&o.type&&this.isValidValueType(o.type)){if(o.value_string&&\"string\"!=typeof o.value_string){this.trace.onTrace(\"Invalid type of value.value_string \"+typeof o.value_string);continue}if(o.value_number&&\"number\"!=typeof o.value_number){this.trace.onTrace(\"Invalid type of value.value_number \"+typeof o.value_number);continue}if(o.value_boolean&&\"boolean\"!=typeof o.value_boolean){this.trace.onTrace(\"Invalid type of value.value_boolean \"+typeof o.value_boolean);continue}if(o.value_json&&\"string\"!=typeof o.value_json){this.trace.onTrace(\"Invalid type of value.value_json \"+typeof o.value_json);continue}if(o.value_analytics&&\"string\"!=typeof o.value_analytics){this.trace.onTrace(\"Invalid type of item.value_analytics \"+typeof o.value_analytics);continue}var a=new S(o.name,this.parseValueType(o.type),o.value_string,o.value_number,o.value_boolean,o.value_json,o.value_analytics,o.encoding);n.set(a.name,a)}}return 0!=n.size&&(this.properties=n,!0)},e.prototype.isValidValueType=function(e){return\"string\"===e||\"number\"===e||\"boolean\"===e||\"json\"==e},e.prototype.parseValueType=function(e){switch(e){case\"string\":return p.STRING;case\"number\":return p.NUMBER;case\"boolean\":return p.BOOLEAN;case\"json\":return p.JSON;default:throw new Error(\"Unsupported value type \".concat(e))}},e.prototype.emitMetricsImpl=function(e){var t,n,r,i,o,s,u={initial_load_time:this.initialLoadTime,fetch_attempt_count:1,fetch_duration_average:null!==(t=e.fetch_duration_average)&&void 0!==t?t:0,success_no_change_count:null!==(n=e.success_no_change_count)&&void 0!==n?n:0,success_new_data_count:null!==(r=e.success_new_data_count)&&void 0!==r?r:0,fail_exception_count:null!==(i=e.fail_exception_count)&&void 0!==i?i:0,fail_http_error_count:null!==(o=e.fail_http_error_count)&&void 0!==o?o:0,fail_invalid_data_count:null!==(s=e.fail_invalid_data_count)&&void 0!==s?s:0};this.emitMetrics(a(u,this.analyticsProperties))},e.prototype.exceptionMetrics=function(e,t){var n;t instanceof s||(null===(n=null==t?void 0:t.message)||void 0===n?void 0:n.startsWith(\"http error\"))?e.fail_http_error_count=1:e.fail_exception_count=1},e}();t.DeviceConfigManager=f;var h=function(){function e(e,t,n,r,i){this.analytics=e,this.analyticsProperties=t,this.properties=n,this.dataFetchedWhenMs=r,this.clock=i}return e.prototype.getSize=function(){return this.properties?this.properties.size:-1},e.prototype.getStringValue=function(e){var t,n;if(this.properties){var r=this.properties.get(e);if(r){if(r.type===p.STRING){var i=null!==(t=r.valueString)&&void 0!==t?t:\"\";return this.analytics.onValue(a({key_name:r.name,value:null!==(n=r.valueAnalytics)&&void 0!==n?n:i,fetched_seconds_ago:this.getFetchedSecondsAgo()},this.analyticsProperties)),i}this.analytics.onError(a({key_name:r.name,message:\"Type is not string\"},this.analyticsProperties))}}else this.analytics.onTrace(a({key_name:e,message:\"Configuration is not available\"},this.analyticsProperties))},e.prototype.getNumberValue=function(e){var t,n;if(this.properties){var r=this.properties.get(e);if(r){if(r.type===p.NUMBER){var i=null!==(t=r.valueNumber)&&void 0!==t?t:0;return this.analytics.onValue(a({key_name:r.name,value:null!==(n=r.valueAnalytics)&&void 0!==n?n:i.toString(),fetched_seconds_ago:this.getFetchedSecondsAgo()},this.analyticsProperties)),i}this.analytics.onError(a({key_name:r.name,message:\"Type is not number\"},this.analyticsProperties))}}else this.analytics.onTrace(a({key_name:e,message:\"Configuration is not available\"},this.analyticsProperties))},e.prototype.getBooleanValue=function(e){var t,n;if(this.properties){var r=this.properties.get(e);if(r){if(r.type===p.BOOLEAN){var i=null!==(t=r.valueBoolean)&&void 0!==t&&t;return this.analytics.onValue(a({key_name:r.name,value:null!==(n=r.valueAnalytics)&&void 0!==n?n:i.toString(),fetched_seconds_ago:this.getFetchedSecondsAgo()},this.analyticsProperties)),i}this.analytics.onError(a({key_name:r.name,message:\"Type is not number\"},this.analyticsProperties))}}else this.analytics.onTrace(a({key_name:e,message:\"Configuration is not available\"},this.analyticsProperties))},e.prototype.getJsonValue=function(e){var t,n;if(this.properties){var r=this.properties.get(e);if(r){if(r.type===p.JSON){var i=r.valueJson;if(!i)return this.analytics.onValue(a({key_name:r.name,value:null!==(t=r.valueAnalytics)&&void 0!==t?t:\"\",fetched_seconds_ago:this.getFetchedSecondsAgo()},this.analyticsProperties)),null;try{var o=JSON.parse(i);return this.analytics.onValue(a({key_name:r.name,value:null!==(n=r.valueAnalytics)&&void 0!==n?n:o,fetched_seconds_ago:this.getFetchedSecondsAgo()},this.analyticsProperties)),o}catch(e){return void this.analytics.onError(a({key_name:r.name,message:\"JSON parse error\"},this.analyticsProperties))}}this.analytics.onError(a({key_name:r.name,message:\"Type is not JSON\"},this.analyticsProperties))}}else this.analytics.onTrace(a({key_name:e,message:\"Configuration is not available\"},this.analyticsProperties))},e.prototype.getFetchedSecondsAgo=function(){if(this.dataFetchedWhenMs)return(this.clock.getMillis()-this.dataFetchedWhenMs)/1e3},e}();t.DeviceConfigPropertyHolder=h;var p,v=function(){function e(e){this.context=e}return e.prototype.fetchUrl=function(e,t){var n=this,r={headers:t,cache:\"no-store\"},i=null;if(\"undefined\"!=typeof AbortController){var o=new AbortController;i=this.context.setTimeout((function(){return o.abort()}),15e3),r.signal=o.signal}return new Promise((function(t,o){n.context.fetch(e,r).then((function(e){if(e.status>=400)o(new s(\"http error \".concat(e.status,\", \").concat(e.statusText)));else{var n={status:e.status,headers:e.headers};e.json().then((function(e){n.json=e,t(n)})).catch((function(){t(n)}))}})).catch((function(e){o(e)})).finally((function(){i&&n.context.clearTimeout(i)}))}))},e}(),m=function(){function e(e){this.enableConsoleLog=e}return e.prototype.onTrace=function(e){this.enableConsoleLog&&console.log(\"DeviceConfig trace: \"+e)},e}(),g=function(){function e(e){this.enableConsoleLog=e}return e.prototype.onValue=function(e){this.enableConsoleLog&&console.log(\"DeviceConfig analytics value:  \".concat(e))},e.prototype.onError=function(e){this.enableConsoleLog&&console.error(\"DeviceConfig analytics error: \".concat(e))},e.prototype.onTrace=function(e){this.enableConsoleLog&&console.log(\"DeviceConfig analytics trace: \".concat(e))},e}(),y=function(){function e(e,t){this.prefix=e,this.storage=t}return e.prototype.getJson=function(e){var t=this.prefix+\"_\"+e;try{var n=this.storage.getItem(t);if(n)return JSON.parse(n)}catch(e){console.error(\"Error getting local storage key \".concat(t)+e)}return null},e.prototype.setJson=function(e,t){var n=this.prefix+\"_\"+e;try{this.storage.setItem(n,JSON.stringify(t))}catch(e){console.error(\"Error setting local storage key \".concat(n,\": \")+e)}},e}(),E=function(){function e(){}return e.prototype.getMillis=function(){return Date.now()},e}();!function(e){e[e.STRING=0]=\"STRING\",e[e.NUMBER=1]=\"NUMBER\",e[e.BOOLEAN=2]=\"BOOLEAN\",e[e.JSON=3]=\"JSON\"}(p||(p={}));var S=function(e,t,n,r,i,o,a,s){switch(this.name=e,this.type=t,this.valueString=n,this.valueNumber=r,this.valueBoolean=i,this.valueJson=o,this.valueAnalytics=a,this.type){case p.STRING:s===l&&n&&(this.valueString=atob(n));break;case p.JSON:s===l&&o&&(this.valueJson=atob(o))}},b=function(){function e(e,t){var n;this.storage=e,this.key=t,this.state=null!==(n=e.getJson(t))&&void 0!==n?n:{}}return e.prototype.getState=function(){return this.state},e.prototype.setState=function(e){Object.assign(this.state,e),this.storage.setJson(this.key,this.state)},e}()},456:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!(\"get\"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),i(n(903),t)},903:function(e,t,n){var r=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,i=0,o=t.length;i<o;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,\"__esModule\",{value:!0}),t.TypedEmitter=void 0;var i=n(228),o=function(){function e(e){var t=e.propagateErrors;this.emitter=new i.EventEmitter,this.propagateErrors=null!=t&&t}return e.prototype.on=function(e,t){t.call=this.wrapCall(e,t),this.emitter.on(e,t)},e.prototype.off=function(e,t){this.emitter.off(e,t)},e.prototype.emit=function(e){for(var t,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];(t=this.emitter).emit.apply(t,r([e],n,!1))},e.prototype.removeAllListeners=function(){this.emitter.removeAllListeners()},e.prototype.wrapCall=function(e,t){var n=this;return function(r){for(var i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];if(n.propagateErrors)t.apply(r,i);else try{t.apply(r,i)}catch(n){var a=\"Error in callback for \".concat(e),s=t.name;return s&&(a+=\" for function \".concat(s)),void console.error(a,n)}}},e}();t.TypedEmitter=o},987:function(e,t,n){var r,i=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!(\"get\"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)\"default\"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,\"__esModule\",{value:!0}),t.createFsm=t.FsmWildcardState=t.RejectedTransitionError=t.InvalidStateTransitionError=void 0;var u=s(n(293)),c=function(e){function t(t,n){var r=e.call(this,\"Invalid transition from '\".concat(n,\"' via event '\").concat(t,\"'\"))||this;return r.name=\"InvalidStateTransitionError\",r}return i(t,e),t}(Error);t.InvalidStateTransitionError=c;var d=function(e){function t(t,n,r){var i=e.call(this,\"Transition from '\".concat(n,\"' via event '\").concat(t,\"' was rejected for: \").concat(r))||this;return i.name=\"RejectedTransitionError\",i}return i(t,e),t}(Error);t.RejectedTransitionError=d,t.FsmWildcardState=\"*\",t.createFsm=function(e){var n,r=e.transitions,i=e.callbacks,o=e.initialState,a=function(e){var n,i=null===(n=r[e])||void 0===n?void 0:n.from;return!!i&&(\"string\"==typeof i?i===t.FsmWildcardState:i.includes(o))};return{canTransition:a,transition:function(e,t){var s,l,f,h,p,v;if(!a(e))return u.err(new c(String(o),String(e)));var m=r[e];return void 0===m.shouldTransition||m.shouldTransition(o)?(null===(l=null===(s=null==i?void 0:i[o])||void 0===s?void 0:s.onExiting)||void 0===l||l.call(s),null===(f=null==i?void 0:i.onStateExiting)||void 0===f||f.call(i,o),n=o,o=m.to,null===(p=null===(h=null==i?void 0:i[o])||void 0===h?void 0:h.onChanged)||void 0===p||p.call(h,n,t),null===(v=null==i?void 0:i.onStateChanged)||void 0===v||v.call(i,n,o,t),u.ok(o)):u.err(new d(String(o),String(e),\"shouldTransition returned false\"))},previousState:function(){return n},currentState:function(){return o}}}},156:function(e,t,n){var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!(\"get\"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)\"default\"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,\"__esModule\",{value:!0}),t.VERSION=void 0,t.VERSION=\"0.4.9\",i(n(815),t),i(n(456),t),i(n(987),t),i(n(293),t)},293:function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.getErr=t.getOk_or=t.getOk=t.isNotOk=t.isOk=t.err=t.ok=void 0,t.ok=function(e){return{ok:!0,value:e}},t.err=function(e){return{ok:!1,error:e}},t.isOk=function(e){return!0===e.ok},t.isNotOk=function(e){return!(0,t.isOk)(e)},t.getOk=function(e){return!0===e.ok?e.value:void 0},t.getOk_or=function(e,t){return!0===e.ok?e.value:t},t.getErr=function(e){return!0===e.ok?void 0:e.error}}},t={};return function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,n),o.exports}(156)}()},580:function(e,t,n){\"use strict\";n.d(t,{mC:function(){return a},cp:function(){return f}});var r,i=require(\"bowser\"),o=n(309),a=function(e){return e.CHROME=\"chrome\",e.EDGE=\"msEdgeChromium\",e.FIREFOX=\"firefox\",e.OPERA=\"opera\",e.SAFARI=\"safari\",e}({}),s=/^(\\d+)\\.(\\d+)\\.(\\d+)[+|-]?(.*)?$/,u=/^(\\d+)\\.(\\d+)[+|-]?(.*)?$/,c=/^(\\d+)$/,d=((r={})[a.CHROME]=!1,r[a.EDGE]=!1,r[a.FIREFOX]=!1,r[a.OPERA]=!1,r[a.SAFARI]=!1,r.chromecast=!1,r.domain=\"\",r.electron=!1,r.family=\"\",r.host=\"\",r.major=-1,r.minor=-1,r.msEdgeLegacy=!1,r.msIE=!1,r.name=\"\",r.osName=\"\",r.osVersion=\"\",r.patch=-1,r.url=\"\",r.userAgent=\"\",r.mobile=!1,r.supportsDataChannels=!1,r.supportsWebTransport=!1,r.supportsMSEInWorkers=!1,r),l=null;function f(){var e;if(l)return l;if(\"undefined\"==typeof window||\"undefined\"==typeof navigator)return l=d;var t,n,r=i.getParser(navigator.userAgent),f=(t=String(r.getBrowserVersion()),n=s.exec(t)||u.exec(t)||c.exec(t)||[],{major:parseInt(n[1],10)||0,minor:parseInt(n[2],10)||0,patch:parseInt(n[3],10)||0}),h=r.getEngine();return(e={})[a.CHROME]=!!r.some([a.CHROME]),e[a.FIREFOX]=!!r.some([a.FIREFOX]),e[a.EDGE]=!!r.some([\"microsoft edge\"])&&\"Blink\"===h.name,e[a.OPERA]=!!r.some([a.OPERA]),e[a.SAFARI]=!!r.some([a.SAFARI]),e.chromecast=navigator.userAgent.toLowerCase().indexOf(\"crkey\")>-1,e.domain=window.location.host.split(\".\").slice(-2).join(\".\"),e.electron=!!r.some([\"electron\"]),e.family=r.getBrowserName().toLowerCase(),e.host=window.location.host,e.major=f.major,e.minor=f.minor,e.msEdgeLegacy=!!r.some([\"microsoft edge\"])&&\"Blink\"!==h.name,e.msIE=!!r.some([\"internet explorer\"]),e.name=navigator.appVersion,e.osName=r.getOSName(),e.osVersion=String(r.getOSVersion()),e.patch=f.patch,e.url=window.location.href,e.userAgent=navigator.userAgent,e.mobile=!(!r.some([\"mobile\"])&&!r.some([\"tablet\"])),e.supportsDataChannels=\"RTCPeerConnection\"in window,e.supportsWebTransport=\"WebTransport\"in window,e.supportsMSEInWorkers=o.Z.isSupportedInWorker(),l=e}},530:function(e,t,n){\"use strict\";n.d(t,{YJ:function(){return s},aP:function(){return i},bz:function(){return o},dq:function(){return a}});var r=n(580);function i(){return\"undefined\"!=typeof MediaSource}function o(){var e='video/mp4; codecs=\"hvc1.1.40000000.L60.80.0.0.0.0.0\"';return i()?MediaSource.isTypeSupported(e):\"\"!==document.createElement(\"video\").canPlayType(e)}function a(){var e='video/mp4; codecs=\"av01.0.05M.08\"';return i()?MediaSource.isTypeSupported(e):\"\"!==document.createElement(\"video\").canPlayType(e)}function s(){var e=(0,r.cp)();return\"Windows\"===e.osName&&(e.chrome||e.firefox||e.msEdgeChromium)&&i()?\"mediaCapabilities\"in navigator?navigator.mediaCapabilities.decodingInfo({type:\"media-source\",video:{contentType:'video/mp4;codecs=\"vp09.00.41.08\"',width:1920,height:1080,bitrate:8e6,framerate:60}}).then((function(e){return e.supported&&e.smooth})):Promise.resolve(MediaSource.isTypeSupported('video/mp4;codecs=\"vp09.00.10.08\"')):Promise.resolve(!1)}},554:function(e,t,n){\"use strict\";n.d(t,{g:function(){return r}});var r=function(e){return e.UNKNOWN=\"Unspecified\",e.FILE=\"File\",e.SEGMENT=\"Segment\",e.SOURCE=\"Source\",e.DECODER=\"Decode\",e.RENDERER=\"Render\",e.MASTER_PLAYLIST=\"MasterPlaylist\",e.MEDIA_PLAYLIST=\"MediaPlaylist\",e.DRM=\"DRM\",e}({})},911:function(e,t,n){\"use strict\";n.d(t,{B:function(){return r},y:function(){return i}});var r=function(e){return e.GENERIC=\"Error\",e.NOT_SUPPORTED=\"ErrorNotSupported\",e.NO_SOURCE=\"ErrorNoSource\",e.INVALID_DATA=\"ErrorInvalidData\",e.INVALID_STATE=\"ErrorInvalidState\",e.INVALID_PARAMETER=\"ErrorInvalidParameter\",e.TIMEOUT=\"ErrorTimeout\",e.NETWORK=\"ErrorNetwork\",e.NETWORK_IO=\"ErrorNetworkIO\",e.AUTHORIZATION=\"ErrorAuthorization\",e.NOT_AVAILABLE=\"ErrorNotAvailable\",e}({}),i=function(e){return e[e.GEOBLOCKED=1]=\"GEOBLOCKED\",e[e.UNSUPPORTED_DEVICE=2]=\"UNSUPPORTED_DEVICE\",e[e.ANONYMIZER_BLOCKED=3]=\"ANONYMIZER_BLOCKED\",e[e.CELLULAR_NETWORK_PROHIBITED=4]=\"CELLULAR_NETWORK_PROHIBITED\",e[e.UNAUTHORIZATION_ENTITLEMENTS=5]=\"UNAUTHORIZATION_ENTITLEMENTS\",e[e.VOD_RESTRICTED=6]=\"VOD_RESTRICTED\",e}({})},695:function(e,t,n){\"use strict\";n.d(t,{P:function(){return r}});var r=function(e){return e.CAPTURE_ENABLED=\"CaptureEnabled\",e.CAPTURE_BUNDLE=\"CaptureBundle\",e.CAPTURE_ANALYTICS=\"CaptureAnalytics\",e.FMP4_SEGMENT=\"FMP4Segment\",e}({})},0:function(e,t,n){\"use strict\";n.d(t,{C:function(){return r},_:function(){return i}});var r=function(e){return e.ID3=\"MetaID3\",e.CAPTION=\"MetaCaption\",e}({}),i=function(e){return e.METADATA_ID=\"metadata.live-video.net\",e.INBAND_METADATA_ID=\"inband.metadata.live-video.net\",e}({})},184:function(e,t,n){\"use strict\";n.d(t,{a:function(){return r}});var r=function(e){return e.INITIALIZED=\"PlayerInitialized\",e.QUALITY_CHANGED=\"PlayerQualityChanged\",e.DURATION_CHANGED=\"PlayerDurationChanged\",e.VOLUME_CHANGED=\"PlayerVolumeChanged\",e.MUTED_CHANGED=\"PlayerMutedChanged\",e.PLAYBACK_RATE_CHANGED=\"PlayerPlaybackRateChanged\",e.REBUFFERING=\"PlayerRebuffering\",e.AUDIO_BLOCKED=\"PlayerAudioBlocked\",e.PLAYBACK_BLOCKED=\"PlayerPlaybackBlocked\",e.ERROR=\"PlayerError\",e.RECOVERABLE_ERROR=\"PlayerRecoverableError\",e.ANALYTICS_EVENT=\"PlayerAnalyticsEvent\",e.TIME_UPDATE=\"PlayerTimeUpdate\",e.SYNC_TIME_UPDATE=\"PlayerSyncTimeUpdate\",e.BUFFER_UPDATE=\"PlayerBufferUpdate\",e.SEEK_COMPLETED=\"PlayerSeekCompleted\",e.SESSION_DATA=\"PlayerSessionData\",e.STATE_CHANGED=\"PlayerStateChanged\",e.WORKER_ERROR=\"PlayerWorkerError\",e.METADATA=\"PlayerMetadata\",e.TEXT_CUE=\"PlayerTextCue\",e.TEXT_METADATA_CUE=\"PlayerTextMetadataCue\",e.AD_CUE=\"PlayerAdCue\",e.STREAM_SOURCE_CUE=\"PlayerStreamSourceCue\",e.NETWORK_UNAVAILABLE=\"PlayerNetworkUnavailable\",e.SEGMENT_DISCONTINUITY=\"PlayerSegmentDiscontinuity\",e.SEGMENT_METADATA=\"PlayerSegmentMetadata\",e}({})},355:function(e,t,n){\"use strict\";n.d(t,{G:function(){return r}});var r=function(e){return e.AVAILABLE=\"RemotePlayerAvailable\",e.UNAVAILABLE=\"RemotePlayerUnavailable\",e.SESSION_STARTED=\"RemotePlayerSessionStarted\",e.SESSION_ENDED=\"RemotePlayerSessionEnded\",e}({})},376:function(e,t,n){\"use strict\";n.d(t,{p:function(){return r}});var r=function(e){return e.IDLE=\"Idle\",e.READY=\"Ready\",e.BUFFERING=\"Buffering\",e.PLAYING=\"Playing\",e.ENDED=\"Ended\",e}({})},120:function(e,t,n){\"use strict\";n.d(t,{KJ:function(){return Sn},vt:function(){return yn},Zx:function(){return vn},HF:function(){return En},i$:function(){return gn},TH:function(){return mn}});var r=n(580),i=require(\"@babel/runtime/helpers/extends\"),o=n.n(i),a=n(184),s=null,u=null;function c(e){if(!e||!e.arg||!e.arg.name)return e;var t=e.type,n=e.arg,r=t===a.a.ANALYTICS_EVENT,i=\"video-play\"===n.name||\"minute-watched\"===n.name||\"video_error\"===n.name||n.name.includes(\"gpu_\");if(!r||!i)return e;if(!s&&!u)try{var o=document.createElement(\"canvas\"),c=o.getContext(\"webgl\")||o.getContext(\"experimental-webgl\");if(c&&\"getExtension\"in c){var d=c.getExtension(\"WEBGL_debug_renderer_info\");d&&\"getParameter\"in c&&(s=c.getParameter(d.UNMASKED_RENDERER_WEBGL),u=c.getParameter(d.UNMASKED_VENDOR_WEBGL))}}catch(e){}return e.arg.properties.gl_renderer=s,e.arg.properties.gl_vendor=u,e}var d=function(){function e(){var t=this;this.batteryManager=void 0,this.processor=this.processor.bind(this),e.isSupported()&&window.navigator.getBattery().then((function(e){t.batteryManager=e}))}return e.isSupported=function(){var e;return void 0!==(null==(e=window)||null==(e=e.navigator)?void 0:e.getBattery)},e.prototype.processor=function(e){var t=e.type===a.a.ANALYTICS_EVENT,n=e.arg&&\"minute-watched\"===e.arg.name;return t&&n&&this.batteryManager&&(e.arg.properties.battery_percent=this.batteryManager.level),e},e}(),l=require(\"@babel/runtime/helpers/asyncToGenerator\"),f=n.n(l),h=require(\"@babel/runtime/regenerator\"),p=n.n(h),v=n(139);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var g={enabled:!1,levels:{debug:!0,info:!0,warn:!0,error:!0}},y=function(e){var t=o()({},g),n=function(e){if(t.enabled&&t.levels[e]){for(var n=(new Date).toTimeString().split(\" \")[0],r=arguments.length,i=new Array(r>1?r-1:0),o=1;o<r;o++)i[o-1]=arguments[o];console[e].apply(console,[n+\" - [VideoTransformer]\"].concat(i))}};return{debug:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[v.$.DEBUG].concat(t))},log:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[v.$.INFO].concat(t))},info:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[v.$.INFO].concat(t))},warn:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[v.$.WARN].concat(t))},error:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[v.$.ERROR].concat(t))},setConfig:function(e){var n={debug:!1,info:!1,warn:!1,error:!1},r=function(e,t){for(var r,i=function(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return m(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(e);!(r=i()).done;){var o=r.value;n[o]=t}};switch(e.level){case v.$.DEBUG:r([v.$.DEBUG,v.$.INFO,v.$.WARN,v.$.ERROR],!0);break;case v.$.INFO:r([v.$.INFO,v.$.WARN,v.$.ERROR],!0);break;case v.$.WARN:r([v.$.WARN,v.$.ERROR],!0);break;case v.$.ERROR:r([v.$.ERROR],!0)}t.enabled=e.enabled,t.levels=o()({},n)}}}();y.setConfig({enabled:!0,level:v.$.WARN});var E=function(e){return e.gpu_pending=\"Awaiting WebGPU adapter\",e.gpu_unavailable=\"WebGPU unavailable\",e.gpu_adapter_unavailable=\"WebGPU adapter unavailable\",e.gpu_adapterinfo_undefined=\"WebGPU adapter.info undefined\",e.gpu_error=\"WebGPU error\",e}({}),S=n(530),b=n(290),T={keySystem:\"org.w3.clearkey\",uuid:\"1077efec-c0b2-4d02-ace3-3c1e52e2fb4b\"},_={keySystem:\"com.apple.fps.2_0\",certUrl:\"https://fairplay.twitch.keyos.com/api/v4/getCertificate?certHash=a17fd33d3843df9b17679ccf50a419b2\",licenseUrl:\"https://fairplay.twitch.keyos.com/api/v4/getLicense\",uuid:\"94CE86FB-07FF-4F43-ADB8-93D2FA968CA2\"},C={keySystem:\"com.microsoft.playready\",licenseUrl:\"https://playready.twitch.keyos.com/api/v4/getLicense\",uuid:\"9a04f079-9840-4286-ab92-e65be0885f95\"},w={keySystem:\"com.widevine.alpha\",licenseUrl:\"https://widevine.twitch.keyos.com/api/v4/getLicense\",uuid:\"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\"},k={CLEARKEY:T,FAIRPLAY:_,PLAYREADY:C,WIDEVINE:w},I={\"com.widevine.alpha\":w,\"com.microsoft.playready\":C,\"com.apple.fps.2_0\":_,\"org.w3.clearkey\":T},P=b.a1,A=b.Pt,D={value:A,message:\"Your browser does not support any DRM Content Decryption Modules\"},L={value:A,message:\"There was an issue while updating DRM License\"},M={value:b.Ec,message:\"Error while requesting DRM license\"},R={value:b.Ri,message:\"DRM license not available\"},x={NO_CDM_SUPPORT:D,SESSION_UPDATE:L,LICENSE_REQUEST:M,LICENSE_REQUEST_AUTHORIZATION:{value:b.$1,message:\"DRM license not authorized for this browser version\"},LICENSE_REQUEST_NOT_AVAILABLE:R,LICENSE_SERVER:{value:b.xA,message:\"DRM license server error\"},KEY_SESSION_CREATION:{value:A,message:\"Error creating key session\"},KEY_SESSION_INTERNAL:{value:A,message:\"Encryption key not usable because of internal error in CDM\"},NO_PSSH_FOUND:{value:A,message:\"Unable to find valid CDM support on media\"},AUTH_XML_REQUEST:{value:P,message:\"Request for AuthXML failed\"},CERT_REQUEST:{value:P,message:\"Request for DRM certificate failed\"}};function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function N(e){return window.WebKitMediaKeys&&\"function\"==typeof window.WebKitMediaKeys.isTypeSupported&&window.WebKitMediaKeys.isTypeSupported(k.FAIRPLAY.keySystem)?k.FAIRPLAY.uuid:\"function\"==typeof navigator.requestMediaKeySystemAccess?e.safari?\"\":e.msIE||e.msEdgeLegacy?k.PLAYREADY.uuid:k.WIDEVINE.uuid:\"\"}function U(e,t){if((e=F(e))===(t=F(t)))return!0;if(e.byteLength!==t.byteLength)return!1;for(var n=new DataView(e),r=new DataView(t),i=0;i<n.byteLength;i++)if(n.getUint8(i)!==r.getUint8(i))return!1;return!0}function F(e){return e instanceof Uint8Array||e instanceof Uint16Array?e.buffer:e}function V(e){return t=function(e){if(null===e)return[];for(var t=new DataView(e.buffer||e),n=[],r=0;!(r>=t.buffer.byteLength);){var i=r+t.getUint32(r);if(r+=4,t.getUint32(r)===W(\"pssh\")){r+=4;var o=t.getUint8(r);if(0===o||1===o){r++,r+=3;for(var a=\"\",s=0;s<4;s++)a+=K(t.getUint8(r+s));r+=4,a+=\"-\";for(var u=0;u<2;u++)a+=K(t.getUint8(r+u));r+=2,a+=\"-\";for(var c=0;c<2;c++)a+=K(t.getUint8(r+c));r+=2,a+=\"-\";for(var d=0;d<2;d++)a+=K(t.getUint8(r+d));r+=2,a+=\"-\";for(var l=0;l<6;l++)a+=K(t.getUint8(r+l));r+=6,a=a.toLowerCase(),r+=4,n.push(a),r=i}else r=i}else r=i}return n}(e),n=[],t.forEach((function(e){Object.keys(k).forEach((function(t){var r=k[t];r.uuid.toLowerCase()===e.toLowerCase()&&n.push(r)}))})),n;var t,n}function B(e,t){return new Promise((function(n,r){var i=new XMLHttpRequest;for(var o in i.open(t.method,e,!0),t.headers)Object.prototype.hasOwnProperty.call(t.headers,o)&&i.setRequestHeader(o,t.headers[o]);i.responseType=t.responseType,i.onload=function(){200===i.status&&n(i.response)},i.onloadend=function(){r(i.status)},i.send(t.body)}))}function G(e){var t=H(j(JSON.parse(String.fromCharCode.apply(null,e)).sinf[0]),\"schi\");return function(e){for(var t,n=\"\",r=function(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return O(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?O(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(e);!(t=r()).done;)n+=K(t.value);return n}(H(t,\"tenc\").subarray(8,24))}function H(e,t){for(var n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=W(t),i=0;i<e.byteLength;){var o=n.getUint32(i);if(n.getUint32(i+4)===r)return e.subarray(i+8,i+o);i+=o}return new Uint8Array(e)}function W(e){return(e.charCodeAt(0)<<24)+(e.charCodeAt(1)<<16)+(e.charCodeAt(2)<<8)+e.charCodeAt(3)}function K(e){var t=e.toString(16);return 1===t.length?\"0\"+t:t}function j(e){for(var t=atob(e),n=t.length,r=new Uint8Array(n),i=0;i<n;i++)r[i]=t.charCodeAt(i);return r}function z(e){return decodeURIComponent(e.replace(/\\+/g,\" \"))}var q=n(0),Q=n(355),Y=n(376);function Z(e){var t=e.querySelector(\"Challenge\"),n=null==t?void 0:t.textContent;return n?atob(n):\"\"}function J(e){var t=e.querySelectorAll(\"HttpHeader\");return Array.from(t).reduce((function(e,t){var n,r,i=null==(n=t.querySelector(\"name\"))?void 0:n.textContent,o=null==(r=t.querySelector(\"value\"))?void 0:r.textContent;return i&&o&&(e[i]=o),e}),{})}function X(e){var t=String.fromCharCode.apply(null,new Uint16Array(e)),n=(new DOMParser).parseFromString(t,\"application/xml\");return{headers:J(n),body:Z(n)}}function $(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ee=[{initDataTypes:[\"cenc\"],audioCapabilities:[{contentType:'audio/mp4;codecs=\"mp4a.40.2\"'}],videoCapabilities:[{robustness:\"SW_SECURE_CRYPTO\",contentType:'video/mp4;codecs=\"avc1.42E01E\"'}]}],te=function(){function e(e){var t=this;this.video=void 0,this.listener=void 0,this.cdmSupport=void 0,this.selectedCDM=void 0,this.mediaKeys=void 0,this.pendingSessions=void 0,this.sessions=void 0,this.authXml=void 0,this.video=e.video,this.listener=e.listener,this.cdmSupport=null,this.selectedCDM=null,this.mediaKeys=void 0,this.pendingSessions=[],this.reset(),this.video.addEventListener(\"encrypted\",(function(e){return t.handleEncrypted(e)})),this.video.addEventListener(\"webkitneedkey\",(function(e){return t.handleWebKitEncrypted(e)}))}var t=e.prototype;return t.configure=function(e){var t=this;if(!this.authXml){var n=new URL(e),r=n.pathname.split(\"/\"),i=r[r.length-1].split(\".\")[0],o=function(e){var t=new URL(e).searchParams,n={};return t.forEach((function(e,t){n[z(t)]=e?z(e):\"\"})),n}(e),a=o.token,s=o.sig,u=\"https://\"+n.host+\"/api/authxml/\"+i+\"?token=\"+encodeURIComponent(a)+\"&sig=\"+s;this.authXml=B(u,{method:\"GET\",responseType:\"text\"}).catch((function(e){t.handleError(Object.assign({code:e},x.AUTH_XML_REQUEST))}))}},t.reset=function(){this.authXml=null,this.sessions=[]},t.isProtected=function(){return null!==this.authXml},t.handleError=function(e){this.listener.onSinkError({value:e.value||b.Pt,code:e.code||0,message:e.message||\"\"})},t.hasSession=function(e){if(!e)return!1;for(var t,n=function(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return $(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(this.sessions);!(t=n()).done;){var r=t.value;if(r.initData&&U(r.initData,e))return!0}return!1},t.createKeySystemSupportChain=function(){if(null===this.cdmSupport||0===this.cdmSupport.length)return Promise.reject(x.NO_PSSH_FOUND);var e=Promise.reject();return this.cdmSupport.forEach((function(t){e=e.catch((function(){return navigator.requestMediaKeySystemAccess(t.keySystem,ee)}))})),e=e.catch((function(){return Promise.reject(x.NO_CDM_SUPPORT)}))},t.handleEncrypted=function(){var e=f()(p().mark((function e(t){var n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.hasSession(t.initData)){e.next=2;break}return e.abrupt(\"return\");case 2:if(this.sessions.push(t),\"sinf\"!==t.initDataType){e.next=6;break}return this.handleWebKitEncrypted(t),e.abrupt(\"return\");case 6:if(null===this.cdmSupport&&(this.cdmSupport=V(t.initData)),void 0!==this.mediaKeys){e.next=24;break}return this.mediaKeys=null,e.prev=9,e.next=12,this.createKeySystemSupportChain();case 12:return n=e.sent,this.selectedCDM=I[n.keySystem],e.next=16,n.createMediaKeys();case 16:return r=e.sent,e.next=19,this.setMediaKeys(r);case 19:e.next=24;break;case 21:e.prev=21,e.t0=e.catch(9),this.handleError(e.t0);case 24:this.addSession(t);case 25:case\"end\":return e.stop()}}),e,this,[[9,21]])})));return function(t){return e.apply(this,arguments)}}(),t.setMediaKeys=function(e){var t=this;return this.mediaKeys=e,this.pendingSessions.forEach((function(e){return t.createSessionRequest(e).catch((function(){t.handleError(x.KEY_SESSION_CREATION)}))})),this.pendingSessions=[],this.video.setMediaKeys(this.mediaKeys)},t.addSession=function(e){var t=this;this.mediaKeys?this.createSessionRequest(e).catch((function(){t.handleError(x.KEY_SESSION_CREATION)})):this.pendingSessions.push(e)},t.createSessionRequest=function(e){var t,n=this,r=e.initDataType,i=e.initData,o=null==(t=this.mediaKeys)?void 0:t.createSession();return o?(o.addEventListener(\"message\",(function(e){return n.handleMessage(e)})),o.addEventListener(\"keystatuseschange\",(function(e){return n.handleKeyStatusesChange(e,i)})),o.generateRequest(r,i)):Promise.reject()},t.handleKeyStatusesChange=function(e,t){var n=this,r=e.target,i=!1;r.keyStatuses.forEach((function(e){switch(e){case\"expired\":i=!0;break;case\"internal-error\":n.handleError(x.KEY_SESSION_INTERNAL)}})),i&&r.close().then((function(){return n.removeSession(t)}))},t.removeSession=function(e){for(var t=0;t<this.sessions.length;t++)if(this.sessions[t].initData===e)return void this.sessions.splice(t,1)},t.handleMessage=function(){var e=f()(p().mark((function e(t){var n,r,i=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=t.target,e.next=3,this.generateLicense(t.message);case 3:(r=e.sent)&&n.update(r).catch((function(){i.handleError(x.SESSION_UPDATE)}));case 5:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.generateLicense=function(){var e=f()(p().mark((function e(t){var n,r,i,o;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.selectedCDM!==k.CLEARKEY){e.next=5;break}return n=JSON.parse((new TextDecoder).decode(t)),r=n.kids.map((function(e){return{kty:\"oct\",alg:\"A128KW\",kid:e,k:e}})),i=(new TextEncoder).encode(JSON.stringify({keys:r})),e.abrupt(\"return\",Promise.resolve(i));case 5:if(!this.authXml){e.next=10;break}return e.next=8,this.authXml;case 8:return o=e.sent,e.abrupt(\"return\",this.requestLicense(t,o));case 10:this.handleError(x.AUTH_XML_REQUEST);case 11:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.requestLicense=function(){var e=f()(p().mark((function e(t,n){var r,i,o,a=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i={method:\"POST\",responseType:\"arraybuffer\",body:t,headers:{customdata:n,\"Content-Type\":\"application/octet-stream\"}},this.selectedCDM===k.PLAYREADY&&(o=X(t),i.body=o.body,i.headers=Object.assign(i.headers,o.headers)),e.abrupt(\"return\",B((null==(r=this.selectedCDM)?void 0:r.licenseUrl)||\"\",i).catch((function(e){var t;switch(e){case 0:t=x.LICENSE_REQUEST;break;case 404:t=x.LICENSE_REQUEST_NOT_AVAILABLE;break;case 403:t=x.LICENSE_REQUEST_AUTHORIZATION;break;default:t=x.LICENSE_SERVER}a.handleError(Object.assign({code:e},t))})));case 3:case\"end\":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.handleWebKitEncrypted=function(){var e=f()(p().mark((function e(t){var n,r=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return this.selectedCDM=k.FAIRPLAY,e.prev=1,e.next=4,B(k.FAIRPLAY.certUrl||\"\",{method:\"GET\",responseType:\"arraybuffer\",headers:{Pragma:\"Cache-Control: no-cache\",\"Cache-Control\":\"max-age=0\"}});case 4:n=e.sent,this.setupWebKitMediaKeys(t,n).catch((function(e){return r.handleError(e)})),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(1),this.handleError(Object.assign({code:e.t0},x.CERT_REQUEST));case 11:case\"end\":return e.stop()}}),e,this,[[1,8]])})));return function(t){return e.apply(this,arguments)}}(),t.setupWebKitMediaKeys=function(e,t){var n=this;if(!e.initData)return Promise.reject(\"Missing initData on MediaEncryptedEvent\");this.video.webkitKeys||this.video.webkitSetMediaKeys(new window.WebKitMediaKeys(k.FAIRPLAY.keySystem));var r=G(e.initData),i=this.video.webkitKeys.createSession(\"video/mp4\",e.initData);return i.contentId=r,new Promise((function(e,o){if(n.video.webkitKeys||o(\"Issue setting fairplay media keys\"),!i)return o(\"Could not create key session\");i.addEventListener(\"webkitkeymessage\",(function(e){var i=e.target;\"certificate\"===String.fromCharCode.apply(null,e.message)?i.update(new Uint8Array(t)):n.getWebkitLicense(e.message,r).then((function(e){var t=e.trim();\"<ckc>\"===t.substr(0,5)&&\"</ckc>\"===t.substr(-6)&&(t=t.slice(5,-6)),i.update(j(t))})).catch(o)})),i.addEventListener(\"webkitkeyadded\",e),i.addEventListener(\"webkitkeyerror\",o)}))},t.getWebkitLicense=function(e,t){return this.authXml?this.authXml.then((function(n){var r;return B(k.FAIRPLAY.licenseUrl||\"\",{method:\"POST\",body:\"spc=\"+(r=e,btoa(String.fromCharCode.apply(null,new Uint16Array(r)))+\"&assetId=\")+t,responseType:\"text\",headers:{\"Content-Type\":\"application/x-www-form-urlencoded\",customdata:n}}).catch((function(e){return Promise.reject(Object.assign({code:e},x.LICENSE_REQUEST))}))})):Promise.reject(x.AUTH_XML_REQUEST)},e}(),ne=require(\"@babel/runtime/helpers/inheritsLoose\"),re=n.n(ne),ie=function(){function e(){}var t=e.prototype;return t.addTrack=function(e){},t.bufferDuration=function(){return 0},t.buffered=function(){return{start:0,end:0}},t.getBufferedRanges=function(e){return[]},t.captureGesture=function(){},t.configure=function(e){},t.delete=function(){},t.endOfStream=function(){},t.enqueue=function(e){},t.getCurrentTime=function(){return 0},t.getPlaybackRate=function(){return 0},t.getVolume=function(){return 0},t.invoke=function(e){this[e.name].call(this,e.arg)},t.isMuted=function(){return!1},t.onSourceDurationChanged=function(e){},t.pause=function(){},t.play=function(){},t.reinit=function(){},t.remove=function(e){},t.seekTo=function(e){},t.setMuted=function(e){},t.setPlaybackRate=function(e){},t.setTimestampOffset=function(e){},t.setVolume=function(e){},t.changeSrc=function(e){},t.changeSrcObj=function(e){},t.onSegmentDiscontinuity=function(){},e}(),oe=\"pc-chromecast-sender\",ae=function(e){function t(n){var r;return(r=e.call(this)||this).remotePlayer=void 0,r.remotePlayerController=void 0,r.listener=void 0,r.seekTime=void 0,r.currentDuration=void 0,r.listener=n,r.currentDuration=0,t.prepareCastContext().then((function(){r.remotePlayer=new cast.framework.RemotePlayer,r.remotePlayerController=new cast.framework.RemotePlayerController(r.remotePlayer)})).catch((function(){r.listener.onSessionError()})),r}re()(t,e),t.canCast=function(){return(0,r.cp)().chrome},t.stopLookingForRemotePlaybackDevices=function(e){window.cast&&window.cast.framework&&cast.framework.CastContext.getInstance().removeEventListener(cast.framework.CastContextEventType.CAST_STATE_CHANGED,e)},t.lookForRemotePlaybackDevices=function(){var e=f()(p().mark((function e(n){var r,i;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.prepareCastContext();case 3:return r=e.sent,i=function(e){switch(e.castState){case cast.framework.CastState.NO_DEVICES_AVAILABLE:break;case cast.framework.CastState.NOT_CONNECTED:n.onRemoteDevice(!0);break;case cast.framework.CastState.CONNECTED:var t=r.getCurrentSession();t&&t.getSessionState()===cast.framework.SessionState.SESSION_RESUMED&&n.onRemoteReconnect()}},r.addEventListener(cast.framework.CastContextEventType.CAST_STATE_CHANGED,i),r.setOptions({receiverApplicationId:\"B3DCF968\",autoJoinPolicy:chrome.cast.AutoJoinPolicy.TAB_AND_ORIGIN_SCOPED}),e.abrupt(\"return\",i);case 10:e.prev=10,e.t0=e.catch(0),n.onRemoteDevice(!1);case 13:case\"end\":return e.stop()}}),e,null,[[0,10]])})));return function(t){return e.apply(this,arguments)}}(),t.prepareCastContext=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!window.cast||!window.cast.framework){e.next=2;break}return e.abrupt(\"return\",Promise.resolve(cast.framework.CastContext.getInstance()));case 2:return e.abrupt(\"return\",new Promise((function(e,t){if(n.g.__onGCastApiAvailable=function(n){n?e(cast.framework.CastContext.getInstance()):t()},!document.getElementById(oe)){var r=document.createElement(\"script\");r.id=oe,r.onerror=function(){document.body.removeChild(r),n.g.__onGCastApiAvailable=function(){},t()},r.async=!0,r.src=\"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\",document.body.appendChild(r)}})));case 3:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();var i=t.prototype;return i.configure=function(){var e=f()(p().mark((function e(n){var r,i,o,a,s,u,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=n.path,e.prev=1,e.next=4,t.prepareCastContext();case 4:if(o=e.sent,a=o.getCurrentSession()){e.next=13;break}return e.next=9,o.requestSession();case 9:a=o.getCurrentSession(),this.setupRemotePlayerListeners(a),e.next=14;break;case 13:a.getSessionState()===cast.framework.SessionState.SESSION_RESUMED&&this.setupRemotePlayerListeners(a);case 14:return(s=new chrome.cast.media.MediaInfo(r,\"\")).streamType=chrome.cast.media.StreamType.BUFFERED,u=new chrome.cast.media.GenericMediaMetadata,s.metadata=u,s.customData={analytics:{chromecast_sender:\"player-core\",platform:\"web\"}},this.remotePlayerController.stop(),c=new chrome.cast.media.LoadRequest(s),this.seekTime>0&&(c.currentTime=this.seekTime,this.seekTime=0),this.currentDuration=0,e.next=25,null==(i=a)?void 0:i.loadMedia(c);case 25:e.next=30;break;case 27:return e.prev=27,e.t0=e.catch(1),e.abrupt(\"return\",this.handleError(e.t0));case 30:case\"end\":return e.stop()}}),e,this,[[1,27]])})));return function(t){return e.apply(this,arguments)}}(),i.stopMedia=function(){var e=f()(p().mark((function e(n){var r,i;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return void 0===n&&(n=!0),e.next=3,t.prepareCastContext();case 3:r=e.sent,(i=r.getCurrentSession())&&i.getSessionState()!==cast.framework.SessionState.SESSION_RESUMED&&i.endSession(n);case 6:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),i.invoke=function(e){this[e.name].call(this,e.arg)},i.play=function(){this.remotePlayer&&this.remotePlayer.isPaused&&this.remotePlayerController.playOrPause()},i.pause=function(){this.remotePlayer&&!this.remotePlayer.isPaused&&this.remotePlayerController.playOrPause()},i.seekTo=function(e){this.remotePlayer&&(this.remotePlayer.playerState!==chrome.cast.media.PlayerState.IDLE?(this.remotePlayer.currentTime=e,this.remotePlayerController.seek()):this.seekTime=e)},i.getCurrentTime=function(){return this.remotePlayer?this.remotePlayer.currentTime:0},i.delete=function(){this.remotePlayer&&this.stopMedia()},i.setMuted=function(e){this.remotePlayer&&e!==this.remotePlayer.isMuted&&this.remotePlayerController.muteOrUnmute()},i.isMuted=function(){return!!this.remotePlayer&&this.remotePlayer.isMuted},i.setVolume=function(e){this.remotePlayer&&(this.remotePlayer.volumeLevel=e,this.remotePlayerController.setVolumeLevel())},i.getVolume=function(){return this.remotePlayer?this.remotePlayer.volumeLevel:0},i.getDevice=function(){var e=f()(p().mark((function e(){var n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.prepareCastContext();case 2:return n=e.sent,r=n.getCurrentSession(),e.abrupt(\"return\",(null==r?void 0:r.getCastDevice().friendlyName)||\"\");case 5:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),i.setupRemotePlayerListeners=function(e){var t=this,n=function(){var n=f()(p().mark((function n(){var r,i;return p().wrap((function(n){for(;;)switch(n.prev=n.next){case 0:(r=e.getMediaSession())&&(i=r.media,0===t.currentDuration&&null===i.duration&&(t.currentDuration=1/0,t.listener.onSinkDurationChanged(t.currentDuration)),t.listener.onSinkTimeUpdate());case 2:case\"end\":return n.stop()}}),n)})));return function(){return n.apply(this,arguments)}}(),r=function(){switch(t.remotePlayer.playerState){case chrome.cast.media.PlayerState.BUFFERING:t.listener.onSinkIdle();break;case chrome.cast.media.PlayerState.PLAYING:t.listener.onSinkPlaying(!1);break;case chrome.cast.media.PlayerState.IDLE:var n=e.getMediaSession();n&&n.idleReason===chrome.cast.media.IdleReason.FINISHED&&t.listener.onSinkEnded()}},i=function(){t.listener.onSinkVolumeChanged(t.remotePlayer.volumeLevel,!0)},o=function(){t.listener.onSinkMutedChanged(t.remotePlayer.isMuted)},a=function(){0!==t.remotePlayer.duration&&(t.currentDuration=t.remotePlayer.duration,t.listener.onSinkDurationChanged(t.currentDuration))},s=function(){t.remotePlayerController.removeEventListener(cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED,n),t.remotePlayerController.removeEventListener(cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED,r),t.remotePlayerController.removeEventListener(cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED,i),t.remotePlayerController.removeEventListener(cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED,o),t.remotePlayerController.removeEventListener(cast.framework.RemotePlayerEventType.DURATION_CHANGED,a),t.listener.onSessionStop()};e.addEventListener(cast.framework.SessionEventType.MEDIA_SESSION,(function(){t.remotePlayerController.addEventListener(cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED,n),t.remotePlayerController.addEventListener(cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED,r),t.remotePlayerController.addEventListener(cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED,i),t.remotePlayerController.addEventListener(cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED,o),t.remotePlayerController.addEventListener(cast.framework.RemotePlayerEventType.DURATION_CHANGED,a),t.listener.onSessionStarted(e.getCastDevice().friendlyName)}));var u=e.getSessionObj();u.addUpdateListener((function(){u.status===chrome.cast.SessionStatus.STOPPED&&s()})),u.addMediaListener(s)},i.handleError=function(e){if(chrome.cast)switch(e){case chrome.cast.ErrorCode.SESSION_ERROR:this.listener.onSessionError();break;case chrome.cast.ErrorCode.RECEIVER_UNAVAILABLE:this.listener.onRemoteDevice(!1);break;case chrome.cast.ErrorCode.LOAD_MEDIA_FAILED:this.listener.onLoadMediaError();break;case chrome.cast.ErrorCode.CANCEL:this.listener.onUserCancel();break;default:this.listener.onSinkError({value:1,code:0,message:\"Error requesting chromecast session\"})}else this.listener.onSinkError({value:1,code:0,message:\"Error loading chromecast SDK\"})},t}(ie),se=function(e){function t(t){var n;return(n=e.call(this)||this).video=void 0,n.video=t,n}re()(t,e);var n=t.prototype;return n.seekTo=function(e){this.video.currentTime=e},n.setPlaybackRate=function(e){this.video.playbackRate=e},n.setVolume=function(e){this.video.volume=e},n.getVolume=function(){return this.video.volume},n.isMuted=function(){return this.video.muted},n.setMuted=function(e){this.video.muted=e},n.getPlaybackRate=function(){return this.video.playbackRate},t}(ie),ue=n(623),ce=function(){function e(e,t){this.muted=void 0,this.video=void 0,this.listener=void 0,this.unsubscribes=[],this.expectingMutedChanged=!1,this.expectingVolumeChanged=!1,this.expectedRateChange=void 0,this.video=e,this.listener=t,this.muted=e.muted,this.unsubscribes.push((0,ue.B1)(e,\"volumechange\",this.volumeChange.bind(this))),this.unsubscribes.push((0,ue.B1)(e,\"ratechange\",this.rateChange.bind(this)))}var t=e.prototype;return t.volumeChange=function(){var e=!this.expectingVolumeChanged;this.expectingMutedChanged=!1,this.expectingVolumeChanged=!1;var t=this.video.muted;this.muted!==t?(this.muted=t,this.listener.onSinkMutedChanged(t)):this.listener.onSinkVolumeChanged(this.video.volume,e)},t.rateChange=function(){this.video.playbackRate!==this.expectedRateChange&&this.listener.onSinkPlaybackRateChanged(this.video.playbackRate)},t.unsubscribe=function(){this.unsubscribes.forEach((function(e){return e()}))},t.onConfigure=function(){this.expectingVolumeChanged&&(this.listener.onSinkVolumeChanged(this.video.volume,!1),this.expectingVolumeChanged=!1),this.expectingMutedChanged&&(this.muted=this.video.muted,this.listener.onSinkMutedChanged(this.video.muted),this.expectingMutedChanged=!1),this.expectedRateChange=void 0},t.trackRPC=function(e){var t=e.name,n=e.arg;\"setVolume\"===t&&this.video.volume!==n?this.expectingVolumeChanged=!0:\"setMuted\"===t&&this.video.muted!==n?this.expectingMutedChanged=!0:\"setPlaybackRate\"===t&&this.video.playbackRate!==n&&(this.expectedRateChange=n)},e}(),de=require(\"promise-polyfill\"),le=n.n(de),fe=(\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==n.g?n.g:void 0).Promise||le(),he=function(e){function t(t,n){var r;return(r=e.call(this)||this).paused=!0,r.listener=void 0,r.video=void 0,r.unsubscribers=void 0,r.lastVolumeChangeEvent=void 0,r.video=t,r.listener=n,r.paused=!0,r.unsubscribers=[],r.addListener(\"volumechange\",r.recordMuteChange.bind(r)),r.recordMuteChange(),r}re()(t,e);var n=t.prototype;return n.pause=function(){this.paused=!0,this.video.pause()},n.setPlaybackRate=function(e){this.video.playbackRate=e},n.delete=function(){this.unsubscribers.forEach((function(e){return e()}))},n.addListener=function(e,t,n){void 0===n&&(n=this.video),this.unsubscribers.push((0,ue.B1)(n,e,t))},n.recordMuteChange=function(){this.lastVolumeChangeEvent={time:this.video.currentTime,muted:this.video.muted}},n.checkStopped=function(e){return!this.video.paused||this.video.ended||this.video.error||this.paused||this.listener.onSinkStop(e||this.unmuteAutopause()),!1},n.unmuteAutopause=function(){var e=this.lastVolumeChangeEvent;return!this.video.muted&&!e.muted&&this.video.currentTime===e.time},t}(ie),pe=n(789),ve=function(e){function t(t,n){var r;return(r=e.call(this,t,n)||this).onSinkIdle=void 0,r.intervalId=void 0,r.idle=void 0,r.lastPlayhead=void 0,r.lastBufferEnd=void 0,r.idleTimeout=void 0,r.playAttempt=!1,r.seeking=!1,r.audioBufferList=void 0,r.awaitingAutoplayCompletion=!1,r.intervalId=0,r.idle=!0,r.lastPlayhead=0,r.lastBufferEnd=0,r.idleTimeout=-1,r.audioBufferList=[],r.bindEvents(),r}re()(t,e);var n=t.prototype;return n.bindEvents=function(){var e=this;this.addListener(\"play\",(function(){return e.onVideoPlay()})),this.addListener(\"pause\",(function(){return e.onVideoPause()})),this.addListener(\"timeupdate\",(function(){return e.onVideoTimeUpdate()})),this.addListener(\"ended\",(function(){return e.onVideoEnded()})),this.addListener(\"error\",(function(){return e.onVideoError()})),this.addListener(\"playing\",(function(){return e.onVideoPlaying()})),this.addListener(\"seeking\",(function(){return e.onVideoSeeking()}))},n.delete=function(){e.prototype.delete.call(this),this.audioBufferList=[],clearInterval(this.intervalId)},n.play=function(){this.paused=!1;for(var e=this.video.buffered,t=0,n=0;n<e.length;n++){var r=e.start(n);if(this.video.currentTime<=r){t=r;break}}this.video.currentTime<t&&(console.warn(\"Moving to buffered region\",t,this.video.currentTime),this.listener.onSinkGapJump(t-this.video.currentTime),this.seekTo(t)),this.playInternal()},n.endOfStream=function(){this.idle=!1,clearTimeout(this.idleTimeout),this.idleTimeout=-1},n.seekTo=function(e){this.video.seekable.length&&e!==this.video.currentTime&&(this.seeking=!0,this.video.currentTime=e)},n.addSourceBuffer=function(e,t){(t.indexOf(\"mp4a\")>-1||t.indexOf(\"opus\")>-1)&&(this.audioBufferList=[e])},n.clearSourceBuffers=function(){this.audioBufferList=[]},n.onIdle=function(){var e;this.listener.onSinkIdle(),null==(e=this.onSinkIdle)||e.call(this)},n.onVideoPlay=function(){var e=this;this.playAttempt?(this.lastPlayhead=this.video.currentTime,clearInterval(this.intervalId),this.intervalId=self.setInterval((function(){return e.heartbeat()}),pe.HJ)):(this.pause(),this.listener.play()),this.playAttempt=!1},n.onVideoPause=function(){this.awaitingAutoplayCompletion||(this.checkStopped(!1),clearInterval(this.intervalId))},n.onVideoTimeUpdate=function(){clearTimeout(this.idleTimeout),this.idleTimeout=-1,this.listener.onSinkTimeUpdate();var e=(0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de);this.checkBufferUpdate(e),this.updateIdle(e)},n.onVideoEnded=function(){this.listener.onSinkEnded()},n.onVideoPlaying=function(){this.video.paused||this.listener.onSinkPlaying(this.paused)},n.onVideoSeeking=function(){this.seeking?this.seeking=!1:this.listener.seekTo(this.video.currentTime)},n.onVideoError=function(){var e,t,n=null!=(e=null==this||null==(t=this.video)?void 0:t.error)?e:{},r=n.code,i=void 0===r?-1:r,o=n.message,a=void 0===o?\"\":o;this.listener.onSinkError({value:i,code:i,message:a})},n.heartbeat=function(){var e=(0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de);if(this.video.paused)clearInterval(this.intervalId);else if(this.video.currentTime===this.lastPlayhead){var t=(0,ue.tX)(this.video.buffered,this.video.currentTime,pe.de);t!==this.video.currentTime&&(this.audioBufferList.map((function(e){(0,ue.gd)(\"Audio Buffer\",e.buffered)})),(0,ue.gd)(\"<video> Buffer\",this.video.buffered),console.warn(\"jumping \"+(t-this.video.currentTime)+\"s gap, current position \"+this.video.currentTime+\", new position \"+t),this.listener.onSinkGapJump(t-this.video.currentTime),this.seekTo(t)),this.updateIdle(e,t===this.video.currentTime)}else this.checkBufferUpdate(e),this.lastPlayhead=this.video.currentTime},n.checkBufferUpdate=function(e){var t=e.end;t!==this.lastBufferEnd&&(this.lastBufferEnd=t,this.listener.onSinkBufferUpdate())},n.updateIdle=function(e,t){var n=this,r=e.end,i=void 0===r?0:r;void 0===t&&(t=!1);var o=this.video,a=o.buffered,s=o.currentTime;if(o.paused)this.idle=!0;else{var u=[i].concat(this.audioBufferList.map((function(e){return(0,ue.vG)(e.buffered,s,pe.de).end}))),c=Math.max.apply(null,u);Number.isFinite(c)||(c=0);var d=a.length,l=d>0?a.end(d-1):i,f=c-s<pe.de||t&&i>l;f&&!this.idle&&(console.warn(\"playhead\",s,\"max buffer\",c,\"max played\",l),clearTimeout(this.idleTimeout),this.idleTimeout=self.setTimeout((function(){return n.onBufferingTimeout()}),pe.Pp),this.onIdle()),this.idle=f}},n.onBufferingTimeout=function(){clearTimeout(this.idleTimeout),this.idleTimeout=-1,this.listener.onSinkError({value:b.yY,code:b.yY,message:\"Buffering timeout\"})},n.playInternal=function(){var e=this;this.playAttempt=!0,this.awaitingAutoplayCompletion=!0,fe.resolve(this.video.play()).then((function(){e.awaitingAutoplayCompletion=!1})).catch((function(){e.playAttempt=!1,e.checkStopped(!0)}))},t}(he),me=function(e){function t(t,n){var r;return(r=e.call(this)||this).listener=t,r.video=n,r.playbackMonitor=void 0,r.controlsObserver=void 0,r.playbackMonitor=new ve(n,t),r.observeControlsChange(),r}re()(t,e);var n=t.prototype;return n.configure=function(e){var t=e.srcObj;this.video.srcObject||(this.video.srcObject=t)},n.invoke=function(e){this[e.name].call(this,e.arg)},n.play=function(){this.playbackMonitor.play()},n.pause=function(){this.playbackMonitor.pause()},n.seekTo=function(e){this.playbackMonitor.seekTo(e)},n.endOfStream=function(){this.playbackMonitor.endOfStream()},n.setVolume=function(e){this.video.volume!==e&&(this.video.volume=e)},n.getVolume=function(){return this.video.volume},n.isMuted=function(){return this.video.muted},n.setMuted=function(e){this.video.muted!==e&&(this.video.muted=e)},n.setPlaybackRate=function(e){this.playbackMonitor.setPlaybackRate(e)},n.getPlaybackRate=function(){return this.video.playbackRate},n.getCurrentTime=function(){return this.video.currentTime},n.buffered=function(){return(0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de)},n.bufferDuration=function(){var e=this.buffered(),t=e.start;return e.end-Math.max(t,this.video.currentTime)},n.captureGesture=function(){this.playbackMonitor.play(),this.playbackMonitor.pause()},n.changeSrcObj=function(e){var t=this.video,n=t.playbackRate;t.srcObject=e,t.playbackRate=n},n.delete=function(){var e;this.playbackMonitor.delete(),this.video.srcObject=null,(0,ue.v8)(this.video),null==(e=this.controlsObserver)||e.disconnect()},n.observeControlsChange=function(){var e=this.listener,t=this.video;try{(this.controlsObserver=new MutationObserver((function(){e.onSinkControlsChanged(t.controls)}))).observe(t,{attributeFilter:[\"controls\"]}),e.onSinkControlsChanged(t.controls)}catch(e){}},t}(ie),ge=n(309),ye=function(){function e(e,t,n){void 0===n&&(n=new ve(t,e)),this.listener=e,this.video=t,this.playbackMonitor=n,this.controlsObserver=void 0,this.mseSink=void 0,this.awaitSink=void 0,this.observeControlsChange(),this.awaitSink=void 0,(0,ue.B1)(t,\"error\",this.onVideoError.bind(this))}var t=e.prototype;return t.invoke=function(e){var t=this.awaitSink,n=this.mseSink;t&&n?[\"enqueue\",\"addTrack\",\"setTimestampOffset\"].includes(e.name)?this.invokeAsync(e):this.invokeSync(e):t?this.invokeAsync(e):n&&this.invokeSync(e)},t.initSink=function(){var e=this,t=this.awaitSink;if(!this.mseSink&&!t){var n=ge.Z.create(this.onMediaSourceEnded.bind(this),this.onMediaSourceError.bind(this));this.awaitSink=new fe((function(t,r){n.sink.then((function(n){e.handleCreateSuccess(n),t()})).catch((function(t){e.handleCreateError(t),r()}))})),this.changeSrc(URL.createObjectURL(n.ms))}},t.configure=function(e){var t=e.trackID,n=e.codec,r=e.group,i=e.isProtected;this.initSink(),this.awaitSink||!this.isContentProtectionChanging(e)&&!this.isChangingToFromAudioOnly(e)||this.queueNewSink(),this.invoke({name:\"addTrack\",arg:o()({},Ee,{trackID:t,codec:n,group:r,isProtected:i})})},t.queueNewSink=function(){var e=this;this.awaitSink=new fe((function(t,n){e.deferUntilIdle().then((function(){var t=ge.Z.create(e.onMediaSourceEnded.bind(e),e.onMediaSourceError.bind(e));return e.changeSrc(URL.createObjectURL(t.ms)),t.sink})).then((function(n){e.destroyMSESink(),e.handleCreateSuccess(n),e.play(),t()})).catch((function(t){e.handleCreateError(t),n()}))}))},t.addTrack=function(e){var t=e.trackID,n=e.codec,r=e.group,i=e.isProtected,o=this.mseSink;try{var a=null==o?void 0:o.addTrack(t,n,r,i);a&&this.playbackMonitor.addSourceBuffer(a,n)}catch(e){this.handleCreateError(e)}},t.enqueue=function(e){var t,n=e.trackID,r=e.buffer;null==(t=this.mseSink)||t.append(n,r)},t.endOfStream=function(){var e,t=this;null==(e=this.mseSink)||e.scheduleUpdate().then((function(){return t.playbackMonitor.endOfStream()}))},t.setTimestampOffset=function(e){var t,n=e.trackID,r=e.offset;null==(t=this.mseSink)||t.setTimestampOffset(n,r)},t.onSourceDurationChanged=function(e){var t=this.mseSink,n=this.video;if(t){var r=t.duration,i=function(e,t,n){var r=e;return e===1/0||e===pe.Sf?n?r=1/0:n||(r=pe.Sf):e!==t&&(r=e),r}(e,r,n.controls);i!==r&&t.setDuration(i)}},t.play=function(){var e,t=this;null==(e=this.mseSink)||e.scheduleUpdate().then((function(){return t.playbackMonitor.play()}))},t.pause=function(){var e,t=this;null==(e=this.mseSink)||e.scheduleUpdate().then((function(){return t.playbackMonitor.pause()}))},t.remove=function(e){var t,n=e.start,r=e.end;null==(t=this.mseSink)||t.remove(n,r)},t.seekTo=function(e){var t=this.mseSink,n=this.playbackMonitor,r=this.video,i=(0,ue.vG)(r.buffered,r.currentTime,pe.de),o=i.start,a=i.end;e>=o&&e<a?null==t||t.scheduleUpdate().then((function(){return n.seekTo(e)})):n.seekTo(e)},t.setVolume=function(e){this.video.volume!==e&&(this.video.volume=e)},t.getVolume=function(){return this.video.volume},t.isMuted=function(){return this.video.muted},t.setMuted=function(e){this.video.muted!==e&&(this.video.muted=e)},t.setPlaybackRate=function(e){this.playbackMonitor.setPlaybackRate(e)},t.getPlaybackRate=function(){return this.video.playbackRate},t.getCurrentTime=function(){return this.video.currentTime},t.buffered=function(){return(0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de)},t.getBufferedRanges=function(e){var t,n;return null!=(t=null==(n=this.mseSink)?void 0:n.getBufferedRanges(e))?t:[]},t.bufferDuration=function(){var e=this.buffered(),t=e.start;return e.end-Math.max(t,this.video.currentTime)},t.captureGesture=function(){this.playbackMonitor.play(),this.playbackMonitor.pause()},t.changeSrc=function(e){(0,ue.GX)(this.video,e)},t.changeSrcObj=function(e){},t.delete=function(){var e;this.playbackMonitor.delete(),null==(e=this.controlsObserver)||e.disconnect(),this.destroyMSESink(),(0,ue.v8)(this.video)},t.invokeSync=function(e){this[e.name].call(this,e.arg)},t.invokeAsync=function(e){var t,n=this;null==(t=this.awaitSink)||t.then((function(){return n.invokeSync(e)})).catch((function(){}))},t.onMediaSourceEnded=function(){this.video.load(),this.listener.onSinkReset()},t.destroyMSESink=function(){var e=this,t=function(){e.mseSink&&e.mseSink.destroy(),e.awaitSink=void 0,e.mseSink=void 0};this.mseSink?t():this.awaitSink&&this.awaitSink.then((function(){return t()})),this.playbackMonitor&&this.playbackMonitor.clearSourceBuffers()},t.isContentProtectionChanging=function(e){var t,n;return(null!=(t=null==(n=this.mseSink)?void 0:n.isDrmProtected())&&t)!==e.isProtected},t.isChangingToFromAudioOnly=function(e){var t,n;return(null!=(t=null==(n=this.mseSink)?void 0:n.isAudioOnly())&&t)!==(\"audio_only\"===e.group)},t.deferUntilIdle=function(){var e=this,t=this.mseSink,n=this.playbackMonitor;return new fe((function(r){t&&!e.video.paused?n.onSinkIdle=function(){n.onSinkIdle=void 0,r()}:r()}))},t.handleCreateSuccess=function(e){this.mseSink=e,this.awaitSink=void 0,this.onSourceDurationChanged(pe.Sf),this.mseSink.setLiveSeekableRange(0,pe.Sf)},t.handleCreateError=function(e){this.listener.onSinkError({value:b.Pt,code:b.Pt,message:e.toString()})},t.onMediaSourceError=function(e,t,n,r){var i={value:e,code:t,message:n};r?this.listener.onSinkError(i):this.listener.onSinkRecoverableError(i)},t.onVideoError=function(){this.destroyMSESink()},t.observeControlsChange=function(){var e=this,t=this.video;try{(this.controlsObserver=new MutationObserver((function(){e.invoke({name:\"onSourceDurationChanged\",arg:t.duration})}))).observe(t,{attributeFilter:[\"controls\"]})}catch(e){}},t.onSegmentDiscontinuity=function(){},e}(),Ee={trackID:0,codec:'codecs=\"magic\"',mode:\"mse\",isProtected:!1,path:\"\",group:\"\",srcObj:null},Se=require(\"events\"),be=function(){function e(){this.emitter=void 0,this.emitter=new Se.EventEmitter}var t=e.prototype;return t.on=function(e,t){this.emitter.on(String(e),t)},t.removeListener=function(e,t){this.emitter.removeListener(String(e),t)},t.emit=function(e){for(var t,n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];(t=this.emitter).emit.apply(t,[String(e)].concat(r))},t.removeAllListeners=function(){this.emitter.removeAllListeners()},e}(),Te=function(e){return e.Pending=\"pending\",e.Ready=\"ready\",e.Configuring=\"configuring\",e.Active=\"active\",e.Error=\"error\",e}({}),_e=function(e){return e.Heartbeat=\"heartbeat\",e.Configure=\"configure\",e.Set_Log_Config=\"setLogConfig\",e.Debug=\"debug\",e.Destroy=\"destroy\",e}({}),Ce=function(e){return e.State_Changed=\"stateChanged\",e.Manifest_Load_Analytics=\"manifestLoadAnalytics\",e.Available_Segments=\"availableSegments\",e}({});function we(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var ke={enabled:!1,levels:{debug:!0,log:!0,info:!0,warn:!0,error:!0}},Ie=new be,Pe=function(e){var t=e.name,n=function(e){if(ke.enabled&&ke.levels[e]){for(var n=(new Date).toTimeString().split(\" \")[0],r=arguments.length,i=new Array(r>1?r-1:0),o=1;o<r;o++)i[o-1]=arguments[o];console[e].apply(console,[n+\" - (\"+t+\")\"].concat(i))}};return{debug:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[\"debug\"].concat(t))},log:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[\"log\"].concat(t))},info:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[\"info\"].concat(t))},warn:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[\"warn\"].concat(t))},error:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];return n.apply(void 0,[\"error\"].concat(t))}}},Ae=Pe({name:\"sw-host-config\"});function De(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return Le(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Le(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Me,Re=Pe({name:\"sw-host\"}),xe=function(){return Me},Oe=function(e){return e[e.Pending=0]=\"Pending\",e[e.Installing=1]=\"Installing\",e[e.Ready=2]=\"Ready\",e[e.Error=3]=\"Error\",e}(Oe||{}),Ne=function(e){var t,n=function(){return{isMSESupported:(0,S.aP)()}};if(((t=e)?t.url||(Ae.error(\"Service worker config must specify a url\"),0):(Ae.error(\"Service worker config is required\"),0))&&function(e,t){return!(!t.forceActivate&&e.isMSESupported)}(n(),e)){var r,i,a=new be,s=!0,u=Oe.Pending,c=[],d=[],l=[],h=Te.Pending,v=!1,m=function(){var t=f()(p().mark((function t(){var n,r;return p().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,E(Oe.Installing),navigator.serviceWorker.addEventListener(\"message\",T),t.prev=3,t.next=6,g(e.url);case 6:t.next=11;break;case 8:t.prev=8,t.t0=t.catch(3),Re.error(\"[registerAndActivate] Failed to unregister service worker instances: \"+t.t0);case 11:return n=void 0!==e.scope?{scope:e.scope}:void 0,t.next=14,navigator.serviceWorker.register(e.url,n);case 14:return(r=t.sent).installing?Re.log(\"Service worker installing\"):r.waiting?Re.log(\"Service worker installed\"):r.active&&Re.log(\"Service worker active\"),t.next=18,y(r);case 18:E(Oe.Ready),t.next=25;break;case 21:t.prev=21,t.t1=t.catch(0),Re.error(\"Registration failed with \"+t.t1),E(Oe.Error);case 25:case\"end\":return t.stop()}}),t,null,[[0,21],[3,8]])})));return function(){return t.apply(this,arguments)}}(),g=function(){var e=f()(p().mark((function e(t){var n;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=new RegExp(t),e.next=3,navigator.serviceWorker.getRegistrations().then(function(){var e=f()(p().mark((function e(t){var r,i,o;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:Re.debug(\"[unregisterOtherWorkerInstances] registrations\",t),r=De(t);case 2:if((i=r()).done){e.next=16;break}if(null===(o=i.value).active||!n.test(o.active.scriptURL)){e.next=14;break}return Re.debug(\"[unregisterOtherWorkerInstances] unregistering:\",o),e.prev=6,e.next=9,o.unregister();case 9:e.next=14;break;case 11:e.prev=11,e.t0=e.catch(6),Re.error(\"[unregisterOtherWorkerInstances] Failed to unregister service worker: \"+e.t0);case 14:e.next=2;break;case 16:case\"end\":return e.stop()}}),e,null,[[6,11]])})));return function(t){return e.apply(this,arguments)}}());case 3:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),y=function(){var e=f()(p().mark((function e(t){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",new Promise((function(e,n){null!==t.installing||null!==t.waiting?(t.installing||t.waiting).addEventListener(\"statechange\",(function(t){var r=t.target;Re.debug(\"sw registration, statechange\",r.state),\"activated\"===r.state?(Re.log(\"Service worker activated\"),e()):\"redundant\"===r.state&&n()})):e()})));case 1:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),E=function(e){if(Re.log(\"[changeHostState] host state changed from \"+u+\" to \"+e),(u=e)===Oe.Ready){var t=c.slice();c=[];for(var n,r=De(t);!(n=r()).done;)(0,n.value)();var i=d.slice();d=[];for(var o,a=De(i);!(o=a()).done;){var s=o.value;_(s)}}else if(u===Oe.Error){var f=l.slice();l=[];for(var h,p=De(f);!(h=p()).done;)(0,h.value)()}},b=function(e){u===Oe.Error?e():l.push(e)},T=function(e){var t=e.data;switch(t.type){case Ce.State_Changed:var n=t.state;h===Te.Configuring&&(v=!1),n===Te.Ready&&h!==Te.Pending&&Re.warn(\"[handleMessage] worker was restarted by the browser\"),h=n;break;case Ce.Manifest_Load_Analytics:Re.debug(\"Manifest_Load_Analytics\",t)}a.emit(t.type,t)},_=function(){var e=f()(p().mark((function e(t){var n;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return Re.log(\"[sendMessage] sending message: \",t),e.abrupt(\"return\",null==(n=navigator.serviceWorker.controller)?void 0:n.postMessage(t));case 2:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),C=function(){var e=f()(p().mark((function e(t){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(h!==Te.Pending){e.next=4;break}return Re.log(\"[sendMessageWhenReady] worker is not ready, queueing message\",t),d.push(t),e.abrupt(\"return\");case 4:_(t);case 5:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),w=function(){i&&clearTimeout(i),i=setTimeout((function(){k()}),1e4)},k=function(){s&&h!==Te.Pending&&(_({type:_e.Heartbeat}),w())},I=function(e,t){a.on(Ce.State_Changed,(function n(r){r.type===Ce.State_Changed&&r.state===e&&(a.removeListener(Ce.State_Changed,n),t(r))}))},P=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(u!==Oe.Ready){e.next=2;break}return e.abrupt(\"return\");case 2:return e.abrupt(\"return\",new Promise((function(e,t){var n;n=function(){Re.log(\"[ensureHostReady] host state changed to ready\"),e()},u===Oe.Ready?n():c.push(n),b((function(){Re.log(\"[ensureHostReady] host state changed to error\"),t()}))})));case 3:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),A=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(h===Te.Pending){e.next=2;break}return e.abrupt(\"return\");case 2:return e.abrupt(\"return\",new Promise((function(e,t){I(Te.Ready,(function(t){Re.log(\"[ensureWorkerReady] worker state changed to ready\",t),e()}))})));case 3:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),D=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,P();case 2:return e.next=4,A();case 4:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),L=function(){var e=f()(p().mark((function e(t){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return v=!0,r=M(null!=t?t:{}),e.next=4,D();case 4:_({type:_e.Configure,config:r});case 5:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),M=function(e){return o()({},r,e)},R=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(v||h!==Te.Active){e.next=2;break}return e.abrupt(\"return\");case 2:return e.next=4,D();case 4:return e.abrupt(\"return\",new Promise((function(e,t){I(Te.Active,(function(t){Re.log(\"[ensureConfigured] worker state changed to active\",t),e()}))})));case 5:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),x=function(e){C({type:_e.Set_Log_Config,config:e})};return function(){var t,i,a,s,u,c,d,l,f,h,p,v,m,g,y,E,S,b,T,C,k=n().isMSESupported?{cacheMultivariant:!1,transformTargetDuration:!1,lowLatencyMode:{enabled:!1,useLocalSegment:!1,convertPrefetchSegment:!1,preloadPrefetchSegments:!1},driftDetection:{enabled:!1,maxPlaylistPosition:0,triggerDetectionThreshold:0,minDurationBetweenCorrections:0},debug:{addMultivariantDelay:void 0,addFirstVariantDelay:void 0}}:{cacheMultivariant:!0,transformTargetDuration:!1,lowLatencyMode:{enabled:!0,useLocalSegment:!0,convertPrefetchSegment:!0,preloadPrefetchSegments:!1},driftDetection:{enabled:!0,maxPlaylistPosition:3,triggerDetectionThreshold:10,minDurationBetweenCorrections:60},debug:{addMultivariantDelay:void 0,addFirstVariantDelay:void 0}};r={cacheMultivariant:null!=(t=e.cacheMultivariant)?t:k.cacheMultivariant,transformTargetDuration:null!=(i=e.transformTargetDuration)?i:k.transformTargetDuration,lowLatencyMode:{enabled:null!=(a=null==(s=e.lowLatencyMode)?void 0:s.enabled)?a:k.lowLatencyMode.enabled,useLocalSegment:null!=(u=null==(c=e.lowLatencyMode)?void 0:c.useLocalSegment)?u:k.lowLatencyMode.useLocalSegment,convertPrefetchSegment:null!=(d=null==(l=e.lowLatencyMode)?void 0:l.convertPrefetchSegment)?d:k.lowLatencyMode.convertPrefetchSegment,preloadPrefetchSegments:null!=(f=null==(h=e.lowLatencyMode)?void 0:h.preloadPrefetchSegments)?f:k.lowLatencyMode.preloadPrefetchSegments},driftDetection:{enabled:null!=(p=null==(v=e.driftDetection)?void 0:v.enabled)?p:k.driftDetection.enabled,maxPlaylistPosition:null!=(m=null==(g=e.driftDetection)?void 0:g.maxPlaylistPosition)?m:k.driftDetection.maxPlaylistPosition,triggerDetectionThreshold:null!=(y=null==(E=e.driftDetection)?void 0:E.triggerDetectionThreshold)?y:k.driftDetection.triggerDetectionThreshold,minDurationBetweenCorrections:null!=(S=null==(b=e.driftDetection)?void 0:b.minDurationBetweenCorrections)?S:k.driftDetection.minDurationBetweenCorrections},debug:{addMultivariantDelay:null==(T=e.debug)?void 0:T.addMultivariantDelay,addFirstVariantDelay:null==(C=e.debug)?void 0:C.addFirstVariantDelay}},Re.info(\"[init] instantiating with config\",r),void 0!==e.debug&&(e.debug.api={delayNextMediaManifest:function(e){!function(e){if(\"delayNextMediaManifest\"===e.api){var t=e.delayInMs;Re.log(\"[handleDebugApiMessage] delaying next manifest by \"+t+\"ms\")}_(o()({type:_e.Debug},e))}({api:\"delayNextMediaManifest\",delayInMs:e})}}),Ie.on(\"logConfigUpdated\",x),w()}(),{registerAndActivate:m,addListener:function(e,t){a.on(e,t)},removeListener:function(e,t){a.removeListener(e,t)},sendMessage:_,ensureReady:D,configure:L,ensureConfigured:R,getConfig:function(){return r},getDriftDetectionConfig:function(){var e;return null==(e=r)?void 0:e.driftDetection},setLogConfig:x,destroy:function(){Re.log(\"[destroy] destroying\"),s=!1,i&&clearTimeout(i),a.removeAllListeners(),Ie.removeListener(\"logConfigUpdated\",x),navigator.serviceWorker.removeEventListener(\"message\",T),_({type:_e.Destroy})},debugPassthroughAnalytics:function(t){var n;null==(n=e.debug)||null==n.onPassthroughAnalytics||n.onPassthroughAnalytics(t)}}}},Ue=n(796),Fe=n(898),Ve=n.n(Fe),Be=function(){function e(){this.serverOffsetVal=e.SERVER_OFFSET_DEFAULT,this.liveLatencyVal=0,this.lastTranscodeReceive=-1}var t=e.prototype;return t.tryGenerateServerOffset=function(t){return this.serverOffsetVal!==e.SERVER_OFFSET_DEFAULT?(console.warn(\"[generateServerOffset] the server offset has already been generated, skipping\"),!1):(this.serverOffsetVal=function(e,t){return new Date(1e3*t).getTime()-e}(Date.now(),t),!0)},t.tryUpdateLatency=function(t){return this.serverOffsetVal!==e.SERVER_OFFSET_DEFAULT&&(t<this.lastTranscodeReceive?(console.warn(\"[updateLatency] received latency values too old, ignoring. previous: \"+this.lastTranscodeReceive+\" current: \"+t),!1):(this.liveLatencyVal=function(e,t,n){return(e+t-n)/1e3}(Date.now(),this.serverOffsetVal,t),this.lastTranscodeReceive=t,!0))},Ve()(e,[{key:\"serverOffset\",get:function(){return this.serverOffsetVal}},{key:\"liveLatency\",get:function(){return this.liveLatencyVal}}])}();Be.SERVER_OFFSET_DEFAULT=-1;var Ge=function(e){var t=parseFloat(e);if(!isNaN(t))return t},He=function(e){return e.Live_Latency_Load=\"liveLatencyLoad\",e.Live_Latency_Stats=\"liveLatencyStats\",e}({}),We=function(e){return e.Trigger_Drift_Correction=\"triggerDriftCorrection\",e}({}),Ke=function(e){return e.ID3=\"org.id3\",e.APPLE_HLS=\"com.apple.quicktime.HLS\",e}(Ke||{}),je=function(e){return e.PRIV=\"PRIV\",e.TXXX=\"TXXX\",e.TDEN=\"TDEN\",e.STREAM_LEVEL_SERVER_TIME=\"X-SERVER-TIME\",e}(je||{}),ze=Pe({name:\"sink\"}),qe=function(e){function t(t,n){var r;(r=e.call(this,n,t)||this).intervalId=void 0,r.bufferingTimeoutId=void 0,r.attemptingToPlay=void 0,r.hasPlayedSrc=void 0,r.hasReloadedOnDecodeError=void 0,r.unsubscribersForTrackEvents=void 0,r.latencyStatistics=void 0,r.processedInitialCues=void 0,r.serviceWorker=void 0,r.serviceWorkerHandler=void 0,r.positionTracker=void 0,r.driftDetector=void 0,r.driftDetectorHandler=void 0,r.analytics=void 0,r.analyticsHandler=void 0,r.intervalId=-1,r.bufferingTimeoutId=-1,r.attemptingToPlay=!1,r.hasPlayedSrc=!1,r.hasReloadedOnDecodeError=!1,r.unsubscribersForTrackEvents=[],r.latencyStatistics=new Be,r.processedInitialCues=!1,r.addListener(\"waiting\",(function(){return r.onVideoWaiting()}),r.video),r.addListener(\"timeupdate\",(function(){return r.onVideoTimeUpdate()}),r.video),r.addListener(\"durationchange\",(function(){return r.onVideoDurationChange()}),r.video),r.addListener(\"error\",(function(){return r.onVideoError()}),r.video),r.addListener(\"play\",(function(){return r.onVideoPlay()}),r.video),r.addListener(\"pause\",(function(){return r.onVideoPause()}),r.video),r.addListener(\"ended\",(function(){return r.onVideoEnded()}),r.video),r.addListener(\"playing\",(function(){return r.onVideoPlaying()}),r.video);var i,a,s,u,c,d,l,f,h,p,v,m,g,y,E=(0,Ue.sQ)(document).visibilityChange;if(r.addListener(E,(function(){return r.onVisibilityChange()}),document),r.serviceWorker=xe(),r.serviceWorkerHandler=function(e){return r.onServiceWorkerMessage(e)},r.addServiceWorkerListeners(),void 0!==r.serviceWorker){var S;r.positionTracker=(v=[],m=-1,g=function(){return 0===v.length||void 0===p?(m=-1,!1):-1!==(m=y(p))},y=function(e){var t=new RegExp(\"^\"+e);if(v){var n=v.findIndex((function(e){return t.test(e.pdt)}));if(-1===n)for(var r=new Date(e+\"Z\"),i=0;i<v.length;i++){var o=v[i],a=new Date(o.pdt);if(a.getTime()<=r.getTime()&&a.getTime()+1e3*o.duration>r.getTime()){n=i;break}}if(-1!==n)return n}return console.warn(\"Couldn't find segment for PDT \"+e),-1},{processAvailableSegments:function(e){return v=e,g()},processTDEN:function(e){return p=e,g()},getCurrentPosition:function(){return m}});var b=null==(S=r.serviceWorker)?void 0:S.getDriftDetectionConfig();void 0!==b&&b.enabled&&(r.driftDetector=(i={maxPlaylistPosition:b.maxPlaylistPosition,triggerDetectionThreshold:b.triggerDetectionThreshold,minDurationBetweenCorrections:b.minDurationBetweenCorrections},c=new be,d=0,l=0,f=function(){if(void 0!==a&&void 0!==s)if(a<=i.maxPlaylistPosition)l=0;else if((l+=1)>i.triggerDetectionThreshold){console.debug(\"[handleDriftDetection] above detection threshold\");var e=Date.now();(void 0===u||e-u>i.minDurationBetweenCorrections)&&(console.debug(\"[handleDriftDetection] within min duration, triggering rebuffer-to-live\"),h(e,a,s))}},h=function(e,t,n){d+=1,u=e,l=0;var r={type:We.Trigger_Drift_Correction,playlistPosition:t,playhead:n,rebufferCount:d};c.emit(We.Trigger_Drift_Correction,r)},{addListener:function(e,t){c.on(e,t)},removeListener:function(e,t){c.removeListener(e,t)},processPlaylistPosition:function(e){a=e},processTimeUpdate:function(e){var t=Math.floor(e);void 0!==s&&t===s||(s=t,f())}}),r.driftDetectorHandler=function(e){return r.onDriftDetectorEvent(e)},r.addDriftDetectorListeners()),r.analytics=function(){var e,t,n,r,i=new be,a={},s={duration:0},u={min:0,avg:0,max:0,last:0},c={first:void 0,last:void 0},d={count:0},l=function(){if((n=He.Live_Latency_Load)===He.Live_Latency_Load&&void 0===a[n]&&void 0!==e&&void 0!==t){var n,r=a[He.Live_Latency_Load]||0;a[He.Live_Latency_Load]=r+1,i.emit(He.Live_Latency_Load,{type:He.Live_Latency_Load,serverOffset:e,manifestLoadAnalytics:t})}},f=function(){var e=a[He.Live_Latency_Stats]||0;a[He.Live_Latency_Stats]=e+1,i.emit(He.Live_Latency_Stats,{type:He.Live_Latency_Stats,playlistPosition:o()({},u),liveLatencyTiming:o()({},c),driftCorrection:o()({},d)})};return{addListener:function(e,t){i.on(e,t)},removeListener:function(e,t){i.removeListener(e,t)},processServerOffset:function(t){e={serverTime:1e3*t.serverTime,clientTime:t.clientTime,serverOffset:t.serverOffset},l()},processManifestLoadAnalytics:function(e){t=e,l()},processSinkState:function(e){\"playing\"===n&&\"pause\"===e&&f(),n=e},processTimeUpdate:function(e){var t=Math.floor(e);void 0!==r&&t===r||(s.duration+=1,r=t,s.duration%10==0&&f())},processPlaylistPosition:function(e){e<u.min&&(u.min=e),e>u.max&&(u.max=e),0===u.avg?u.avg=e:u.avg=(u.avg*s.duration+e)/(s.duration+1),u.last=e},processLiveLatencyUpdate:function(e){void 0===c.first&&(c.first=o()({},e)),c.last=o()({},e)},processDriftCorrectionStart:function(){d.count+=1}}}(),r.analyticsHandler=function(e){return r.onAnalyticsEvent(e)},r.addAnalyticsListeners()}return r}re()(t,e);var n=t.prototype;return n.invoke=function(e){this[e.name].call(this,e.arg)},n.configure=function(e){var t=e.path;this.handleTrackEvents(),this.hasReloadedOnDecodeError=!1,this.hasPlayedSrc=!1,this.video.src=t},n.play=function(){var e=this,t=this.video.buffered;if(t.length>0){var n=t.start(t.length-1),r=t.end(t.length-1);this.video.duration===1/0&&(r<this.video.currentTime||this.video.currentTime<n)&&(this.listener.onSinkGapJump(n-this.video.currentTime),console.warn(\"Moving to buffered region\"),this.video.currentTime=n)}this.paused=!1,this.attemptingToPlay=!0,(void 0===e.serviceWorker||e.hasPlayedSrc?Promise.resolve(e.video.play()):e.serviceWorker.ensureConfigured().catch((function(e){ze.warn(\"sw, ensureConfigured failed\",e)})).then((function(){return Promise.resolve(e.video.play())}))).then((function(){e.attemptingToPlay=!1,e.hasPlayedSrc=!0})).catch((function(){e.attemptingToPlay=!1,e.checkStopped(!0)}))},n.pause=function(){e.prototype.pause.call(this),clearTimeout(this.intervalId)},n.seekTo=function(e){this.video.currentTime=e},n.setVolume=function(e){this.video.volume=e},n.getVolume=function(){return this.video.volume},n.buffered=function(){return(0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de)},n.decodedFrames=function(){return(0,ue.xB)(this.video)},n.droppedFrames=function(){return(0,ue.ld)(this.video)},n.delete=function(){e.prototype.delete.call(this),this.removeTrackListeners(),this.removeServiceWorkerListeners(),this.removeDriftDetectorListeners(),this.removeAnalyticsListeners(),this.video.src=\"\",this.video.load()},n.isMuted=function(){return this.video.muted},n.setMuted=function(e){this.video.muted=e},n.getPlaybackRate=function(){return this.video.playbackRate},n.getCurrentTime=function(){return this.video.currentTime},n.bufferDuration=function(){var e=this.buffered(),t=e.start;return e.end-Math.max(t,this.video.currentTime)},n.captureGesture=function(){Promise.resolve(this.video.play()).catch((function(){})),this.video.pause()},n.addServiceWorkerListeners=function(){void 0!==this.serviceWorker&&(this.serviceWorker.addListener(Ce.Manifest_Load_Analytics,this.serviceWorkerHandler),this.serviceWorker.addListener(Ce.Available_Segments,this.serviceWorkerHandler))},n.onServiceWorkerMessage=function(e){switch(e.type){case Ce.Manifest_Load_Analytics:var t;null==(t=this.analytics)||t.processManifestLoadAnalytics(e.data);break;case Ce.Available_Segments:var n;null==(n=this.positionTracker)||n.processAvailableSegments(e.segments)}},n.removeServiceWorkerListeners=function(){void 0!==this.serviceWorker&&(this.serviceWorker.removeListener(Ce.Manifest_Load_Analytics,this.serviceWorkerHandler),this.serviceWorker.removeListener(Ce.Available_Segments,this.serviceWorkerHandler))},n.addDriftDetectorListeners=function(){var e;null==(e=this.driftDetector)||e.addListener(We.Trigger_Drift_Correction,this.driftDetectorHandler)},n.onDriftDetectorEvent=function(e){var t;e.type===We.Trigger_Drift_Correction&&(ze.debug(\"triggering drift correction\",e),null==(t=this.analytics)||t.processDriftCorrectionStart(),this.resumeAtLive())},n.resumeAtLive=function(){this.pause(),this.configure({path:this.video.src}),this.play()},n.removeDriftDetectorListeners=function(){var e;null==(e=this.driftDetector)||e.removeListener(We.Trigger_Drift_Correction,this.driftDetectorHandler)},n.addAnalyticsListeners=function(){var e,t;null==(e=this.analytics)||e.addListener(He.Live_Latency_Load,this.analyticsHandler),null==(t=this.analytics)||t.addListener(He.Live_Latency_Stats,this.analyticsHandler)},n.onAnalyticsEvent=function(e){var t;switch(null==(t=this.serviceWorker)||t.debugPassthroughAnalytics(e),e.type){case He.Live_Latency_Load:ze.debug(\"analytics event, Live Latency Load\",e.serverOffset,e.manifestLoadAnalytics);break;case He.Live_Latency_Stats:ze.debug(\"analytics event, Live Latency Stats\",e.playlistPosition,e.liveLatencyTiming,e.driftCorrection)}},n.removeAnalyticsListeners=function(){var e,t;null==(e=this.analytics)||e.removeListener(He.Live_Latency_Load,this.analyticsHandler),null==(t=this.analytics)||t.removeListener(He.Live_Latency_Stats,this.analyticsHandler)},n.addTrackListener=function(e,t,n){this.unsubscribersForTrackEvents.push((0,ue.B1)(n,e,t))},n.removeTrackListeners=function(){this.unsubscribersForTrackEvents.forEach((function(e){return e()}))},n.checkTracksStatus=function(){for(var e=this.video.textTracks,t=0;t<e.length;t++){var n=e[t];\"metadata\"===n.kind&&\"disabled\"===n.mode&&(n.mode=\"hidden\")}},n.handleTDENDataReceived=function(e){if(void 0!==this.positionTracker&&this.positionTracker.processTDEN(e)){var t,n,r=this.positionTracker.getCurrentPosition();null==(t=this.analytics)||t.processPlaylistPosition(r),null==(n=this.driftDetector)||n.processPlaylistPosition(r)}},n.handleTXXXSegmentDataReceived=function(e){var t,n=function(e){var t=(0,Ue.N8)(e);if(\"transc_r\"in t)return{transc_r:parseInt(t.transc_r)}}(e);void 0!==n&&(n.transc_r>0&&this.listener.onPassthroughSinkPropertyChanged(\"transcodeReceiveInSecs\",n.transc_r/1e3),this.latencyStatistics.tryUpdateLatency(n.transc_r)&&(this.listener.onPassthroughSinkPropertyChanged(\"liveLatency\",this.latencyStatistics.liveLatency),null==(t=this.analytics)||t.processLiveLatencyUpdate({transc_r:n.transc_r,latency:this.latencyStatistics.liveLatency})))},n.handleInitialCues=function(e){for(var t,n,r=0;r<e.length;++r){var i=e[r];i.type===Ke.APPLE_HLS&&i.value.key===je.STREAM_LEVEL_SERVER_TIME&&(t=Ge(i.value.data))}this.processedInitialCues=!0,void 0!==t&&this.latencyStatistics.tryGenerateServerOffset(t)&&(null==(n=this.analytics)||n.processServerOffset({serverTime:t,clientTime:Date.now(),serverOffset:this.latencyStatistics.serverOffset}))},n.shouldPropagateCue=function(e){var t=e.type,n=e.value;return!(t!==Ke.ID3||!n||!(n.key===je.TXXX&&\"segmentmetadata\"!==n.info||n.key===je.PRIV&&n.info===q._.METADATA_ID||n.key===je.PRIV&&n.info===q._.INBAND_METADATA_ID))},n.handleCueChange=function(e){var t=this,n=new Set;this.addTrackListener(\"cuechange\",(function(){var r;!t.processedInitialCues&&e.cues&&t.handleInitialCues(e.cues);var i=null!=(r=e.activeCues)?r:[];if(i.length>0){for(var o=new Set,a=0;a<i.length;++a){var s=i[a];if(!n.has(s)){var u=s.value;if(t.listener.onPassthroughSinkDataCue(s),u.key===je.TXXX&&\"segmentmetadata\"===u.info&&t.handleTXXXSegmentDataReceived(u.data),u.key===je.TDEN&&t.handleTDENDataReceived(u.data),t.shouldPropagateCue(s)){var c=u.key===je.PRIV?new TextDecoder(\"utf-8\").decode(u.data):u.data||\"\",d=u.info||\"\";t.listener.onPassthroughSinkMetadata(s.startTime,s.endTime,c,d,d)}}o.add(s)}n=o}}),e)},n.handleTrackEvents=function(){var e=this;this.removeTrackListeners(),void 0===window.DataCue&&void 0===window.WebKitDataCue||(this.addTrackListener(\"change\",(function(){e.checkTracksStatus()}),this.video.textTracks),this.addTrackListener(\"addtrack\",(function(t){var n=t.track;\"metadata\"===n.kind&&\"disabled\"===n.mode&&(n.mode=\"hidden\",e.handleCueChange(n))}),this.video.textTracks))},n.onVideoWaiting=function(){var e=this;if((0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de).end-this.video.currentTime<pe.de){this.listener.onSinkIdle(),clearTimeout(this.bufferingTimeoutId),this.bufferingTimeoutId=self.setTimeout((function(){e.listener.onSinkError({value:b.yY,code:b.yY,message:\"Buffering timeout\"})}),pe.Pp);var t=(0,ue.B1)(this.video,\"timeupdate\",(function(){t(),clearTimeout(e.bufferingTimeoutId)}))}var n=(0,ue.B1)(this.video,\"timeupdate\",(function(){4===e.video.readyState&&(n(),e.onVideoPlaying())}))},n.onVideoTimeUpdate=function(){var e,t;this.listener.onSinkTimeUpdate(),null==(e=this.analytics)||e.processTimeUpdate(this.getCurrentTime()),null==(t=this.driftDetector)||t.processTimeUpdate(this.getCurrentTime())},n.onVideoDurationChange=function(){this.listener.onSinkDurationChanged(this.video.duration)},n.onVideoError=function(){var e=this.video.error,t=e.code,n=e.message,r=void 0===n?\"\":n,i=-1!==this.video.src.indexOf(\".m3u8\");if(t===b.Pt&&!this.hasPlayedSrc&&i)return clearTimeout(this.bufferingTimeoutId),void this.listener.onSinkError({value:b.$_,code:b.$_,message:r});t!==b.ok||this.hasReloadedOnDecodeError?this.listener.onSinkError({value:t,code:t,message:r}):this.hasReloadedOnDecodeError||(this.hasReloadedOnDecodeError=!0,console.warn(\"Reload video element on MEDIA_ERR_DECODE 3\"),this.video.load())},n.onVideoPlay=function(){var e=this,t=this.video.currentTime;clearTimeout(this.intervalId),this.intervalId=self.setTimeout((function(){return e.heartbeat(t)}),pe.HJ)},n.onVideoPause=function(){var e;clearTimeout(this.intervalId),this.attemptingToPlay||(null==(e=this.analytics)||e.processSinkState(\"pause\"),this.checkStopped(!1))},n.onVideoEnded=function(){this.listener.onSinkEnded()},n.onVideoPlaying=function(){var e;null==(e=this.analytics)||e.processSinkState(\"playing\"),this.listener.onSinkPlaying(this.paused),this.trackBufferUpdate((0,ue.vG)(this.video.buffered,this.video.currentTime,pe.de).end)},n.onVisibilityChange=function(){var e=(0,Ue.sQ)(document).hidden;document[e]&&(this.hasReloadedOnDecodeError=!1)},n.heartbeat=function(e){var t=this,n=this.video.currentTime;if(n===e){if((0,ue.V3)(this.video,pe.de))return void this.listener.onSinkIdle();var r=(0,ue.tX)(this.video.buffered,n,pe.de);r!==n&&(console.warn(\"jumping \"+(r-n)+\"s gap\"),this.listener.onSinkGapJump(r-this.video.currentTime),this.video.currentTime=r,n=this.video.currentTime)}this.intervalId=self.setTimeout((function(){return t.heartbeat(n)}),pe.HJ)},n.trackBufferUpdate=function(e){var t=this,n=this.buffered().end;n!==e&&this.listener.onSinkBufferUpdate();var r=(0,ue.B1)(this.video,\"timeupdate\",(function(){r(),t.trackBufferUpdate(n)}))},t}(he),Qe=function(e){function t(){return e.apply(this,arguments)||this}return re()(t,e),t.prototype.onIdle=function(){this.onSinkIdle?this.onSinkIdle():this.listener.onSinkIdle()},t}(ve),Ye=function(e){function t(t,n,r){var i;return(i=e.call(this,t,n,new Qe(n,t))||this).listener=t,i.video=n,i.adjustments=r,i}re()(t,e);var n=t.prototype;return n.configure=function(e){var t=e.trackID,n=e.codec,r=e.group,i=e.isProtected;if(this.initSink(),this.isContentProtectionChanging(e)&&this.queueNewSink(),this.isNewSinkNeeded(e)){this.queueNewSink();var a=this.getTrack(pe.kD.audio);a&&this.invoke({name:\"addTrack\",arg:a})}this.invoke({name:\"addTrack\",arg:o()({},Ze,{trackID:t,codec:n,group:r,isProtected:i})})},n.queueNewSink=function(){var e=this;this.awaitSink=new Promise((function(t,n){e.deferUntilIdle().then((function(){var t=ge.Z.create(e.onMediaSourceEnded.bind(e),e.onMediaSourceError.bind(e));return e.changeSrc(URL.createObjectURL(t.ms)),t.sink})).then((function(n){e.invokeAsync({name:\"play\",arg:void 0}),e.destroyMSESink(),e.handleCreateSuccess(n),t()})).catch((function(t){e.handleCreateError(t),n()}))}))},n.deferUntilIdle=function(){var e=this,t=this.mseSink,n=this.playbackMonitor;return new Promise((function(r){t&&!e.video.paused?(n.onSinkIdle=function(){},e.video.addEventListener(\"waiting\",(function(){n.onSinkIdle=void 0,r()}),{once:!0})):r()}))},n.onSegmentDiscontinuity=function(){var e=this.adjustments,t=this.awaitSink,n=this.mseSink;e.rebuildMediaSinkOnDiscontinuity&&n&&!t&&this.queueNewSink()},n.isSinkVideoSourceQualityChangeRequired=function(e,t){return!!this.adjustments.rebuildMediaSinkOnSourceQualityChange&&\"chunked\"===e!=(\"chunked\"===t)},n.isNewSinkNeeded=function(e){var t=this.adjustments,n=this.mseSink,r=this.awaitSink;if(e.trackID!==pe.kD.video)return!1;if(!t.rebuildMediaSinkOnSourceQualityChange)return!1;if(!n||r)return!1;var i=this.getTrack(pe.kD.video),o=this.getTrack(pe.kD.audio);return!(!i||!o)&&this.isSinkVideoSourceQualityChangeRequired(i.group,e.group)},n.getTrack=function(e){var t,n=this.mseSink;return null!=(t=null==n?void 0:n.bufferProperties.find((function(t){return t.trackID===e})))?t:null},t}(ye),Ze={trackID:0,codec:'codecs=\"magic\"',mode:\"mse\",isProtected:!1,path:\"\",group:\"\",srcObj:null},Je=function(){function e(e,t,n,r){this.listener=e,this.adjustments=n,this.video=void 0,this.drmManager=void 0,this.codecs=void 0,this.sink=void 0,this.observer=void 0,this.remoteDevicesListener=void 0,this.video=r,this.listener=e,this.drmManager=new te({video:this.video,listener:e}),this.codecs=Object.create(null),this.sink=new se(this.video),t&&(this.remoteDevicesListener=ae.lookForRemotePlaybackDevices(this.listener)),this.observer=new ce(this.video,e)}var t=e.prototype;return t.videoElement=function(){return this.video},t.delete=function(){var e;this.reset(),null==(e=this.remoteDevicesListener)||e.then((function(e){e&&ae.stopLookingForRemotePlaybackDevices(e)}))},t.configure=function(e){var t=e.mode,n=e.codec,r=e.trackID;this.sink instanceof se&&(this.sink=this.getSink(t)),n?this.codecs[r]=n:e.codec=this.codecs[r],this.sink.configure(e);var i=e.path,o=e.isProtected;i&&o&&this.drmManager.configure(i),this.observer.onConfigure()},t.applyRPC=function(e){this.observer.trackRPC(e),this.sink.invoke(e)},t.getCurrentSink=function(){return this.sink},t.reset=function(){this.sink.delete(),this.drmManager.reset(),this.sink=new se(this.video),this.listener.onSinkTimeUpdate(),this.listener.onSinkBufferUpdate()},t.isProtected=function(){return this.drmManager.isProtected()},t.captureGesture=function(){this.video.played.length||this.sink.captureGesture()},t.destroy=function(){this.observer.unsubscribe(),this.delete()},t.isLowLatencyCapable=function(){return this.sink instanceof ye},t.onSegmentDiscontinuity=function(){this.sink.onSegmentDiscontinuity()},t.getSink=function(e){switch(e){case\"chromecast\":return new ae(this.listener);case\"mse-worker\":return new me(this.listener,this.video);case\"passthrough\":return new qe(this.listener,this.video);case\"webview\":return new Ye(this.listener,this.video,this.adjustments);default:return new ye(this.listener,this.video)}},e}(),Xe=1111,$e=[{CLASS:\"timestamp\",attributes:new Set([\"X-SERVER-TIME\"])},{CLASS:\"twitch-session\",attributes:new Set([\"X-TV-TWITCH-SESSIONID\"])},{CLASS:\"twitch-stitched-ad\",attributes:new Set([\"X-TV-TWITCH-AD-URL\",\"X-TV-TWITCH-AD-LINE-ITEM-ID\",\"X-TV-TWITCH-AD-AD-FORMAT\",\"X-TV-TWITCH-AD-DSA-VERSION\",\"X-TV-TWITCH-AD-CLICK-BEACON-ID\",\"X-TV-TWITCH-AD-POD-LENGTH\",\"X-TV-TWITCH-AD-POD-POSITION\",\"X-TV-TWITCH-AD-ROLL-TYPE\",\"X-TV-TWITCH-AD-RADS-TOKEN\",\"X-TV-TWITCH-AD-AD-SESSION-ID\",\"X-TV-TWITCH-AD-ADVERTISER-ID\",\"X-TV-TWITCH-AD-CREATIVE-ID\",\"X-TV-TWITCH-AD-ORDER-ID\",\"X-TV-TWITCH-AD-CLICK-TRACKING-URL\",\"X-TV-TWITCH-AD-DSA-SS-CONTEXT\",\"X-TV-TWITCH-AD-DSA-SS-LOCATION\",\"X-TV-TWITCH-AD-POD-FILLED-DURATION\",\"X-TV-TWITCH-AD-AF-ICR-AD-ID\",\"X-TV-TWITCH-AD-AF-ICR-CREATIVE-ID\",\"X-TV-TWITCH-AD-AF-ICR-MEDIA-DURATION\",\"X-TV-TWITCH-AD-LOUDNESS\"])},{CLASS:\"twitch-stream-source\",attributes:new Set([\"X-TV-TWITCH-STREAM-SOURCE\"])},{CLASS:\"twitch-trigger\",attributes:new Set([\"X-TV-TWITCH-TRIGGER-URL\"])},{CLASS:\"twitch-ad-quartile\",attributes:new Set([\"X-TV-TWITCH-AD-QUARTILE\"])}],et=function(e){return e[e.STATE_CHANGED=0]=\"STATE_CHANGED\",e[e.CONFIGURE=1]=\"CONFIGURE\",e[e.RESET=2]=\"RESET\",e[e.ADD_CUE=3]=\"ADD_CUE\",e[e.GET_DECODE_INFO=4]=\"GET_DECODE_INFO\",e[e.MEDIA_SINK_RPC=5]=\"MEDIA_SINK_RPC\",e[e.GET_EXPERIMENTS=6]=\"GET_EXPERIMENTS\",e[e.LOG_MESSAGE=7]=\"LOG_MESSAGE\",e[e.DATA_CHANNEL_CREATE=8]=\"DATA_CHANNEL_CREATE\",e[e.DATA_CHANNEL_CLOSE=9]=\"DATA_CHANNEL_CLOSE\",e[e.DATA_CHANNEL_SEND=10]=\"DATA_CHANNEL_SEND\",e[e.RTC_SET_REMOTE_DESCRIPTION=11]=\"RTC_SET_REMOTE_DESCRIPTION\",e[e.PROPERTY_CHANGED=12]=\"PROPERTY_CHANGED\",e[e.SYNC_TIME_CHANGED=13]=\"SYNC_TIME_CHANGED\",e[e.BUFFERED_RANGES=14]=\"BUFFERED_RANGES\",e[e.DESTROY=15]=\"DESTROY\",e}({}),tt={rebuildMediaSinkOnSourceQualityChange:!1,rebuildMediaSinkOnDiscontinuity:!1,abrTranscodesOnly:!1},nt=require(\"lodash/mergeWith\"),rt=n.n(nt),it=function(e){return e.AVC=\"avc1\",e.HEVC=\"hvc1\",e.AV1=\"av01\",e}({}),ot=n(223),at=function(){function e(e){this.emitAnalytics=void 0,this.emitAnalytics=e}var t=e.prototype;return t.onValue=function(e){this.emit(\"ivs_devconf_value\",e)},t.onError=function(e){this.emit(\"ivs_devconf_error\",e)},t.onTrace=function(e){this.emit(\"ivs_devconf_trace\",e)},t.emit=function(e,t){this.emitAnalytics(e,t)},e}(),st=function(e){return e.HEVC=\"b8b7cac6-956d-4819-8d35-9ae57aa5f0ce\",e.AV1=\"d16629fa-a0bf-4a2a-b490-c1f92af05009\",e.GPU=\"8b0cb43a-720b-4775-9f98-21da360d60b1\",e.GPUStaff=\"59d57100-3c9c-4f13-aeff-9b1c1b6b4c66\",e.DeviceConfigTest=\"a5c3a8f0-d293-4597-af87-f0352c58d1b3\",e.SafariMSEInWorkers=\"4f4511c5-588d-4a39-8ca1-4b95149a00d2\",e.EdgeMSEInWorkers=\"2caeb3ea-ae9e-4a3c-b675-de3eb85c6ddb\",e.OperaMSEInWorkers=\"c704aec0-73be-4ce5-9872-2ce674c5ccb2\",e.PassthroughDaterangeTags=\"46d7d385-62a6-4aff-bb08-ca35fbadd8e6\",e.DroppedFrameFilter=\"171673d5-bd3f-438c-b9da-70ca99609b25\",e}({}),ut=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return rt().apply(void 0,[{},e].concat(n,[function(e,t){Array.isArray(t)&&[].concat(t)}]))},ct=function(){function e(e,t){var n;void 0===e&&(e={}),this.onConfigChanged=t,this.mainConfig=void 0,this.experimentHandler=void 0,this.defaultConfig={media:{abr:{},codecConfigs:[]},logLevel:\"\",features:{gpu:{flags:{enable_render_surface:!1,add_canvas_to_surface:!1,allow_canvas_visible:!1,init_transformer:!1,run_transformer:!1},render:{},module:{},configured:!1},mseInWorkers:{enable:!0,supportedBrowsers:(n={},n[r.mC.CHROME]=!0,n[r.mC.EDGE]=!1,n[r.mC.FIREFOX]=!1,n[r.mC.SAFARI]=!1,n[r.mC.OPERA]=!1,n)}},experiments:{}},this.deviceConfigManager=void 0,this.deviceConfigAnalyticsHandler=void 0,this.resetMainConfig(),this.setupExperimentHandlers(),this.mainConfig=ut(this.mainConfig,function(e){var t,n=rt()({},e),r=Object.entries(null!=(t=n.experiments)?t:{});n.experiments={};for(var i=0,o=r;i<o.length;i++){var a=o[i],s=(a[0],a[1]);null!=s&&s.id&&(n.experiments[s.id]=s)}return n}(e));for(var i=0,o=Object.values(null!=(a=this.mainConfig.experiments)?a:[]);i<o.length;i++){var a,s=o[i];s&&this.setExperiment(s.id,s.assignment)}}var t=e.prototype;return t.initDeviceConfigManager=function(e){var t;this.shouldEnableDeviceConfigManager()&&(this.deviceConfigManager||(this.deviceConfigManager=ot.DeviceConfigManager.getInstance(window,{fileKey:\"player-web-v1\",standardEnv:ot.DeviceConfigEnv.PROD,refresh:{canRefreshNow:e.canRefreshNow},emitMetrics:e.emitMetrics,analyticsProperties:{client_sdk:\"player-web\",env:\"prod\"},enableConsoleLog:\"localhost\"==window.location.hostname||(null==(t=window.location.hostname)?void 0:t.startsWith(\"localhost.\"))}),this.deviceConfigManager&&(this.deviceConfigAnalyticsHandler=new at(e.emitAnalytics))))},t.shouldEnableDeviceConfigManager=function(){var e;return\"treatment\"===(null==(e=this.mainConfig.experiments[st.DeviceConfigTest])?void 0:e.assignment)},t.setupExperimentHandlers=function(){var e=this,t=this.handleExperiment((function(){return e.mainConfig.media.codecConfigs}),lt,(function(t){var n=e.mainConfig.media.codecConfigs;e.mainConfig.media.codecConfigs=null==n?void 0:n.concat(t)})),n=this.handleExperiment((function(){return e.mainConfig.media.codecConfigs}),ft,(function(t){var n=e.mainConfig.media.codecConfigs;e.mainConfig.media.codecConfigs=null==n?void 0:n.concat(t)})),i=this.handleExperiment((function(){return e.mainConfig.features.gpu}),(function(e,t){if(e.configured)return e;var n=dt(t),r=ut(e,n);return r.configured=!0,r}),(function(t){e.mainConfig.features.gpu=t})),a=function(e,t,n){if(\"treatment\"===n){var r=o()({},t);return r.supportedBrowsers[e]=!0,r}return t},s=function(t){return e.handleExperiment((function(){return e.mainConfig.features.mseInWorkers}),a.bind(e,t),(function(t){e.mainConfig.features.mseInWorkers=t}))},u=this.handleExperiment((function(){var t;return null!=(t=e.mainConfig.features.passthroughDaterangeTags)&&t}),(function(e,t){return\"treatment\"===t}),(function(t){e.mainConfig.features.passthroughDaterangeTags=t})),c=this.handleExperiment((function(){return e.mainConfig.media.abr.droppedFrameFilterThresholdCoefficient}),(function(e,t){var n=t.split(\"_\"),r=n[0],i=n[1];if(\"treatment\"===r){var o=parseInt(i);if(!Number.isNaN(o))return o}}),(function(t){e.mainConfig.media.abr.droppedFrameFilterThresholdCoefficient=t}));this.experimentHandler=new Map([[st.HEVC,t],[st.AV1,n],[st.GPU,i],[st.GPUStaff,i],[st.SafariMSEInWorkers,s(r.mC.SAFARI)],[st.EdgeMSEInWorkers,s(r.mC.EDGE)],[st.OperaMSEInWorkers,s(r.mC.OPERA)],[st.PassthroughDaterangeTags,u],[st.DroppedFrameFilter,c]])},t.getDeviceConfigPropertyHolder=function(){if(this.deviceConfigManager&&this.deviceConfigAnalyticsHandler)return this.deviceConfigManager.getConfigurationHolder({analytics:this.deviceConfigAnalyticsHandler})},t.getConfigSnapshot=function(){return o()({},this.mainConfig)},t.setExperiment=function(e,t){var n;e&&t&&(this.mainConfig.experiments[e]={id:e,assignment:t,version:0},null==(n=this.experimentHandler.get(e))||n(t))},t.delete=function(){this.resetMainConfig()},t.resetMainConfig=function(){this.mainConfig=o()({},this.defaultConfig)},t.handleExperiment=function(e,t,n){var r=this;return function(i){var o=e(),a=t(o,i);a!==o&&(n(a),r.onConfigChanged())}},e}(),dt=function(e){var t={};if(!e)return t;var n=e.split(\"_config_\"),r=(n[0],n[1]);if(!r)return t;try{t=JSON.parse(atob(r))}catch(t){console.warn(\"[ConfigManager]: Invalid assignment config provided\",e,t)}return t};function lt(e,t){switch(t){case\"control\":case\"holdback\":return[{codecString:it.HEVC,setting:{disableUse:!0}}];case\"forceOn\":return[{codecString:it.HEVC,setting:{skipPlatformSupportChecks:!0}}];case\"treatment\":return[];default:return e}}function ft(e,t){switch(t){case\"control\":case\"holdback\":return[{codecString:it.AV1,setting:{disableUse:!0}}];case\"forceOn\":return[{codecString:it.AV1,setting:{skipPlatformSupportChecks:!0}}];case\"treatment\":return[];default:return e}}var ht=require(\"@babel/runtime/helpers/wrapNativeSuper\"),pt=function(e){function t(t,n,r,i){var o;return(o=e.call(this,r)||this).source=t,o.code=n,o.message=r,o.fatal=i,o}return re()(t,e),t}(n.n(ht)()(Error)),vt=function(e){return e[e.WebGPUNotAvailable=-1e3]=\"WebGPUNotAvailable\",e[e.WebGPUAdapterNotAvailable=-1001]=\"WebGPUAdapterNotAvailable\",e[e.WebGPUDeviceNotAvailable=-1002]=\"WebGPUDeviceNotAvailable\",e[e.WebGPUAdapterInfoUndefined=-1003]=\"WebGPUAdapterInfoUndefined\",e[e.ShaderCompilationFailed=-1100]=\"ShaderCompilationFailed\",e[e.PipelineCreationFailed=-1101]=\"PipelineCreationFailed\",e[e.SamplerCreationFailed=-1102]=\"SamplerCreationFailed\",e[e.StreamCreationFailed=-1103]=\"StreamCreationFailed\",e[e.ModelInitFailed=-1104]=\"ModelInitFailed\",e[e.OutOfMemory=-1200]=\"OutOfMemory\",e[e.InvalidBuffer=-1201]=\"InvalidBuffer\",e[e.InvalidBufferSize=-1202]=\"InvalidBufferSize\",e[e.BufferCopyFailed=-1203]=\"BufferCopyFailed\",e[e.DeviceLost=-1300]=\"DeviceLost\",e[e.DeviceLostTooManyRetries=-1301]=\"DeviceLostTooManyRetries\",e[e.CanvasCreationFailed=-1400]=\"CanvasCreationFailed\",e[e.InferenceFailed=-1500]=\"InferenceFailed\",e[e.FetchFailed=-1600]=\"FetchFailed\",e[e.Render=-1700]=\"Render\",e[e.Init=-1800]=\"Init\",e[e.FrameCaptureFailed=-1900]=\"FrameCaptureFailed\",e[e.Performance=-2e3]=\"Performance\",e[e.PerformanceLowRenderFramerate=-2001]=\"PerformanceLowRenderFramerate\",e[e.PerformanceLowCaptureFramerate=-2002]=\"PerformanceLowCaptureFramerate\",e[e.PerformanceTooManyOverbudgetFrames=-2010]=\"PerformanceTooManyOverbudgetFrames\",e[e.PerformanceTooManySkippedFrames=-2011]=\"PerformanceTooManySkippedFrames\",e[e.PerformanceTooManyDroppedSourceFrames=-2012]=\"PerformanceTooManyDroppedSourceFrames\",e[e.PerformanceTooManyMissedFrames=-2013]=\"PerformanceTooManyMissedFrames\",e[e.ResourceClosed=-9998]=\"ResourceClosed\",e[e.BadParameters=-9999]=\"BadParameters\",e}({}),mt=function(){function e(){this.frameStats=void 0,this.resetStats()}var t=e.prototype;return t.init=function(){var e=this;return new WritableStream({write:function(t){t&&Promise.resolve().then((function(){e.onFrameRecord(t)})).catch((function(e){y.error(e)}))}})},t.stats=function(){return o()({},this.frameStats)},t.resetStats=function(){this.frameStats={received:0,overBudget:0,skipped:0,failed:0,transformed:0,rendered:0,transformTime:0,renderTime:0,receiveDelay:0,endToEnd:0}},t.onFrameRecord=function(e){var t={receive:e.timings.received-e.timings.captured,transform:e.timings.transformEnd-e.timings.transformStart,render:e.timings.renderEnd-e.timings.renderStart,endToEnd:e.timings.renderEnd-e.timings.captured};this.frameStats.received++,this.frameStats.receiveDelay+=t.receive,e.skipped&&(this.frameStats.skipped++,y.warn(\"[FrameRecordSink]: Frame \"+e.number+\" was skipped. Frame receive delay: \"+t.receive+\", Initial budget: \"+e.budget+\"ms, Min budget: \"+e.minBudget+\"ms\",t,e)),e.transformed&&(this.frameStats.transformed++,this.frameStats.transformTime+=t.transform),e.rendered&&(this.frameStats.rendered++,this.frameStats.renderTime+=t.render),e.failed&&(this.frameStats.failed++,y.warn(\"[FrameRecordSink]: Frame \"+e.number+\" failed to to transform or render. See error log for details.\",t,e)),t.endToEnd>=e.budget&&(this.frameStats.overBudget++,y.warn(\"[FrameRecordSink]: Frame \"+e.number+\" was overbudget. End to end time: \"+t.endToEnd+\"ms Budget: \"+e.budget+\"ms\",t,e)),this.frameStats.endToEnd+=t.endToEnd},e}(),gt=function(){function e(e,t,n,r){this.inputFrameStream=e,this.sink=t,this.onError=n,this.config=r,this.pipeline=void 0,this.transformer=void 0,this.frameRecordSink=void 0,this.frameRecordSink=new mt}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(t){var n,r=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.transformer=t,e.prev=1,n=this.frameRecordSink.init(),this.pipeline=this.createPipeline(),this.pipeline.readable.pipeTo(n).catch((function(e){r.onError(new pt(\"VideoFramePipeline\",vt.PipelineCreationFailed,\"Failed to pipe to frameRecordStream: \"+(null==e?void 0:e.message),!0))})),this.inputFrameStream.pipeThrough(this.pipeline),e.next=11;break;case 8:return e.prev=8,e.t0=e.catch(1),e.abrupt(\"return\",new pt(\"VideoFramePipeline\",vt.PipelineCreationFailed,\"Failed to init pipeline: \"+(null==e.t0?void 0:e.t0.message),!0));case 11:return e.abrupt(\"return\",void 0);case 12:case\"end\":return e.stop()}}),e,this,[[1,8]])})));return function(t){return e.apply(this,arguments)}}(),t.stats=function(){return this.frameRecordSink.stats()},t.resetStats=function(){this.frameRecordSink.resetStats()},t.createPipeline=function(){var e,t=this,n=new TransformStream({transform:(e=f()(p().mark((function e(n,r){var i,o,a,s,u,c,d,l,h,v,m;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=n.frame,o=n.record,a=performance.now(),s=void 0,u=[],c=Math.min(a-o.timings.captured,0),o.timings.received=a,d=1e3/t.config.minimumFramerate-(t.config.includeReceiveDelay?c:0),o.budget=d,o.minBudget=0,l=function(){var e=f()(p().mark((function e(){var n,a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.render(i,o,s);case 2:n=e.sent,(a=n.renderError)&&u.push(a),i.close(),o.failed=!!u.length,r.enqueue(o),u.forEach((function(e){return t.handleErrorInternal(e)}));case 9:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),!(d<=0)){e.next=16;break}return o.skipped=!0,e.next=15,l();case 15:return e.abrupt(\"return\");case 16:return e.next=18,t.frameToTexture(i,o,d);case 18:return h=e.sent,v=h.transformError,m=h.texture,s=m,v&&u.push(v),e.next=25,l();case 25:case\"end\":return e.stop()}}),e)}))),function(t,n){return e.apply(this,arguments)})});return n},t.frameToTexture=function(){var e=f()(p().mark((function e(t,n,r){var i,o,a,s,u;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=performance.now(),o=void 0,n.timings.transformStart=i,e.next=5,this.transformer.transform(t,r);case 5:return a=e.sent,s=a.texture,(u=a.error)?(y.warn(\"[VideoFramePipeline]: Failed to transform frame \"+n.number),o=u):s&&(n.transformed=!0),n.timings.transformEnd=performance.now(),e.abrupt(\"return\",{transformError:o,texture:s});case 11:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),t.render=function(){var e=f()(p().mark((function e(t,n,r){var i,o,a,s,u,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=performance.now(),n.timings.renderStart=i,o=void 0,e.prev=3,u=null!=(a=null==r?void 0:r.width)?a:t.displayWidth,c=null!=(s=null==r?void 0:r.height)?s:t.displayHeight,this.sink.setDimensions(u,c),e.next=9,this.sink.render(null!=r?r:t);case 9:(o=e.sent)||(n.rendered=!0),e.next=17;break;case 13:e.prev=13,e.t0=e.catch(3),y.warn(\"[VideoFramePipeline]: Failed to render frame \"+n.number),o=e.t0;case 17:return n.timings.renderEnd=performance.now(),e.abrupt(\"return\",{renderError:o});case 19:case\"end\":return e.stop()}}),e,this,[[3,13]])})));return function(t,n,r){return e.apply(this,arguments)}}(),t.handleErrorInternal=function(e){y.warn(\"[VideoFramePipeline]: Error transforming frame\",e),this.onError(e)},e}(),yt=function(){function e(e,t){this.config=e,this.onError=t,this.active=!1,this.frameStream=void 0,this.frameWriter=void 0,this.stopCapture=void 0,this.captureStats=void 0,this.resetStats()}var t=e.prototype;return t.init=function(){try{this.frameStream=new TransformStream({},{highWaterMark:this.config.maxQueueSize}),this.frameWriter=this.frameStream.writable.getWriter()}catch(e){return new pt(\"VideoFrameCaptureStream\",vt.StreamCreationFailed,e.message,!0)}},t.start=function(e){this.active?y.warn(\"[VideoFrameCaptureStream]: Start called, but already capturing\"):(this.startRVFC(e),this.active=!0)},t.stop=function(){var e;this.active=!1,null==(e=this.stopCapture)||e.call(this)},t.stats=function(){return this.captureStats},t.resetStats=function(){this.captureStats={captured:0,missed:0,blocked:0,rVFCDelay:0}},t.getStream=function(){return this.frameStream.readable},t.startRVFC=function(e){var t,n=this,r=void 0,i=-1;null==(t=this.stopCapture)||t.call(this),this.stopCapture=function(){return e.cancelVideoFrameCallback(i)};var a=function(){var t=f()(p().mark((function t(s,u){var c,d,l,f;return p().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(n.active){t.next=2;break}return t.abrupt(\"return\");case 2:if(t.prev=2,d=performance.now(),n.captureStats.rVFCDelay+=d-s,l=new VideoFrame(e),(f=o()({},{timings:{composited:0,captured:0,received:0,transformStart:0,transformEnd:0,renderStart:0,renderEnd:0},number:0,budget:0,minBudget:0,blocked:!1,skipped:!1,transformed:!1,rendered:!1,overbudget:!1,failed:!1})).number=u.presentedFrames,f.timings.composited=s,f.timings.captured=d,!((null!=(c=n.frameWriter.desiredSize)?c:0)<1)){t.next=17;break}return n.captureStats.blocked++,f.blocked=!0,t.next=15,n.frameWriter.write({frame:l,record:f});case 15:t.next=18;break;case 17:n.frameWriter.write({frame:l,record:f}).catch((function(e){n.onError(new pt(\"CaptureStream\",vt.FrameCaptureFailed,\"Failed to write frame to stream: \"+((null==e?void 0:e.message)||\"unknown error\"),!0))}));case 18:void 0===r?r=u.presentedFrames:u.presentedFrames-r>1&&(n.captureStats.missed+=u.presentedFrames-r),r=u.presentedFrames,n.captureStats.captured++,i=e.requestVideoFrameCallback(a),t.next=27;break;case 24:t.prev=24,t.t0=t.catch(2),n.errorHandler(new pt(\"CaptureStream\",vt.FrameCaptureFailed,\"Failed to write frame to stream: \"+((null==t.t0?void 0:t.t0.message)||\"unknown error\"),!0));case 27:case\"end\":return t.stop()}}),t,null,[[2,24]])})));return function(e,n){return t.apply(this,arguments)}}();y.log(\"[VideoFrameCaptureStream]: Started\",e),i=e.requestVideoFrameCallback(a)},t.errorHandler=function(e){this.stop(),this.onError(e)},e}(),Et=function(){function e(e,t){this.windowContext=e,this.config=t,this.adapter=void 0,this.adapterInfo=void 0,this.device=void 0,this.queue=void 0,this.timingInfoEnabled=void 0,this.storageFormat=void 0}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(){var t,n,r,i,o,a;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.windowContext.navigator.gpu){e.next=2;break}return e.abrupt(\"return\",new pt(\"WebGPUContext\",vt.WebGPUNotAvailable,\"WebGPU not available\",!0));case 2:return e.next=4,this.windowContext.navigator.gpu.requestAdapter({});case 4:if(t=e.sent){e.next=7;break}return e.abrupt(\"return\",new pt(\"WebGPUContext\",vt.WebGPUAdapterNotAvailable,\"WebGPU Adapter not available\",!0));case 7:if(t.info){e.next=9;break}return e.abrupt(\"return\",new pt(\"WebGPUContext\",vt.WebGPUAdapterInfoUndefined,\"WebGPU adapter.info is undefined\",!0));case 9:return n=[].concat(this.config.requiredFeatures),r={},i=\"bgra8unorm\"===this.windowContext.navigator.gpu.getPreferredCanvasFormat()&&t.features.has(\"bgra8unorm-storage\"),o=this.config.timingInfoEnabled&&t.features.has(\"timestamp-query\"),i&&n.push(\"bgra8unorm-storage\"),o&&n.push(\"timestamp-query\"),r.requiredFeatures=n,e.next=18,this.tryGetDevice(t,r);case 18:if(a=e.sent){e.next=21;break}return e.abrupt(\"return\",new pt(\"WebGPUContext\",vt.WebGPUDeviceNotAvailable,\"WebGPU Device not available\",!0));case 21:this.adapterInfo=t.info,this.timingInfoEnabled=o,this.storageFormat=i?\"bgra8unorm\":\"rgba8unorm\",this.adapter=t,this.device=a,this.queue=a.queue,y.info(\"[WebGPUContext]: WebGPU context initialized\",this.properties());case 28:case\"end\":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.properties=function(){var e;if(!this.adapterInfo)return{architecture:\"\",description:\"\",device:\"\",vendor:\"\",adapterFeatures:\"\",deviceFeatures:\"\",wgslFeatures:\"\"};var t=\"\";this.adapter.features.forEach((function(e){t+=e+\",\"}));var n=\"\";this.device.features.forEach((function(e){n+=e+\",\"}));var r=\"\";return null==(e=navigator.gpu.wgslLanguageFeatures)||e.forEach((function(e){r+=e+\",\"})),{architecture:this.adapterInfo.architecture,description:this.adapterInfo.description,device:this.adapterInfo.device,vendor:this.adapterInfo.vendor,adapterFeatures:t,deviceFeatures:n,wgslFeatures:r}},t.createBuffer=function(e,t){return this.device.pushErrorScope(\"out-of-memory\"),this.device.createBuffer({size:e,usage:t})},t.setBufferData=function(){var e=f()(p().mark((function e(t,n,r){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(void 0===r&&(r=!0),this.device.queue.writeBuffer(t,0,n),!r){e.next=5;break}return e.next=5,this.device.queue.onSubmittedWorkDone();case 5:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),t.createShaderModule=function(){var e=f()(p().mark((function e(t){var n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=this.device.createShaderModule({code:t}),e.next=3,n.getCompilationInfo();case 3:if(!((r=e.sent).messages.length>0)){e.next=7;break}return y.error(\"[WebGPUContext]: Error compiling shader\",r.messages),e.abrupt(\"return\",{err:new pt(\"WebGPUContext\",vt.ShaderCompilationFailed,\"Compilation failed: \"+r.messages.join(),!0)});case 7:return e.abrupt(\"return\",{module:n});case 8:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.tryGetDevice=function(){var e=f()(p().mark((function e(t,n){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,t.requestDevice(n);case 3:case 11:return e.abrupt(\"return\",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),e.prev=8,e.next=11,t.requestDevice(null);case 14:return e.prev=14,e.t1=e.catch(8),e.abrupt(\"return\",void 0);case 17:case\"end\":return e.stop()}}),e,null,[[0,6],[8,14]])})));return function(t,n){return e.apply(this,arguments)}}(),e}(),St=function(){function e(e,t,n){this.canvasEl=e,this.gpuContext=t,this.onError=n,this.canvas=void 0,this.device=void 0,this.canvasContext=void 0,this.pipelines=void 0,this.device=t.device,this.pipelines=new Map}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.setCanvas(this.canvasEl.transferControlToOffscreen());case 3:e.next=8;break;case 5:return e.prev=5,e.t0=e.catch(0),e.abrupt(\"return\",new pt(\"CanvasSink\",vt.CanvasCreationFailed,e.t0.message,!0));case 8:return e.abrupt(\"return\",void 0);case 9:case\"end\":return e.stop()}}),e,this,[[0,5]])})));return function(){return e.apply(this,arguments)}}(),t.render=function(){var e=f()(p().mark((function e(t){var n,r,i,o,a,s,u,c,d;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.canvasContext&&this.canvas){e.next=2;break}return e.abrupt(\"return\",new pt(\"CanvasSink\",vt.Render,\"Failed to get WebGPU Canvas context\",!0));case 2:return n=t instanceof VideoFrame,e.next=5,this.getPipeline(this.canvas.width,this.canvas.height,n);case 5:if(r=e.sent,i=r.pipeline,!(o=r.error)&&i){e.next=10;break}return e.abrupt(\"return\",o);case 10:a=n?this.device.importExternalTexture({source:t}):t.createView(),s=i.getBindGroupLayout(0),u=this.device.createBindGroup({layout:s,entries:[{binding:0,resource:this.canvasContext.getCurrentTexture().createView()},{binding:1,resource:a}]}),this.device.pushErrorScope(\"validation\"),c=this.device.createCommandEncoder(),(d=c.beginComputePass()).setPipeline(i),d.setBindGroup(0,u),d.dispatchWorkgroups(Math.ceil(this.canvas.width/16),Math.ceil(this.canvas.height/16),1),d.end(),this.device.queue.submit([c.finish()]),this.checkForErrorsAsync();case 22:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.setDimensions=function(e,t){!this.canvas||e===this.canvas.width&&t===this.canvas.height||(this.canvas.width=e,this.canvas.height=t)},t.setCanvas=function(){var e=f()(p().mark((function e(t){var n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.canvas=t,this.canvasContext=t.getContext(\"webgpu\"),this.canvasContext){e.next=4;break}return e.abrupt(\"return\",new pt(\"CanvasSink\",vt.Render,\"Failed to get WebGPU Canvas context\",!0));case 4:return n=this.gpuContext.storageFormat,r={device:this.device,format:n,usage:GPUTextureUsage.STORAGE_BINDING,viewFormats:[n],alphaMode:\"opaque\"},this.device.pushErrorScope(\"validation\"),this.canvasContext.configure(r),e.next=10,this.device.popErrorScope();case 10:if(!e.sent){e.next=13;break}return e.abrupt(\"return\",new pt(\"CanvasSink\",vt.Render,\"Failed to configure Canvas context\",!0));case 13:return e.abrupt(\"return\",void 0);case 14:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.getPipeline=function(){var e=f()(p().mark((function e(t,n,r){var i,o=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=r+\"_\"+t+\"_\"+n,!this.pipelines.has(i)||!this.pipelines.get(i)){e.next=3;break}return e.abrupt(\"return\",{pipeline:this.pipelines.get(i),error:void 0});case 3:return e.abrupt(\"return\",this.makePipeline(t,n,r).then((function(e){return e.pipeline&&o.pipelines.set(i,e.pipeline),e})));case 4:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),t.makePipeline=function(){var e=f()(p().mark((function e(t,n,r){var i,o,a,s,u,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=this.getShader(t,n,r),e.next=3,this.createShaderModule(i);case 3:if(o=e.sent,a=o.module,s=o.error,a&&!s){e.next=8;break}return e.abrupt(\"return\",{error:s});case 8:return this.device.pushErrorScope(\"validation\"),u=this.device.createComputePipeline({layout:\"auto\",compute:{module:a,entryPoint:\"main\"},label:\"canvas-sink_\"+t+\"_\"+n+\"_\"+r}),e.next=12,this.device.popErrorScope();case 12:if(!(c=e.sent)){e.next=15;break}return e.abrupt(\"return\",{error:new pt(\"CanvasSink\",vt.PipelineCreationFailed,\"\"+c.message,!0)});case 15:return e.abrupt(\"return\",{pipeline:u});case 16:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r){return e.apply(this,arguments)}}(),t.createShaderModule=function(){var e=f()(p().mark((function e(t){var n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=this.device.createShaderModule({code:t}),e.next=3,n.getCompilationInfo();case 3:if(!((r=e.sent).messages.length>0)){e.next=7;break}return y.error(\"[CanvasSink]: Error compiling shader\",r.messages),e.abrupt(\"return\",{error:new pt(\"CanvasSink\",vt.ShaderCompilationFailed,\"Shader compilation failed: \"+r.messages.join(),!0)});case 7:return e.abrupt(\"return\",{module:n});case 8:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.getShader=function(e,t,n){return\"\\n        @group(0) @binding(0) var outputTexture: texture_storage_2d<\"+this.gpuContext.storageFormat+\", write>;\\n        @group(0) @binding(1) var inputTexture: \"+(n?\"texture_external\":\"texture_2d<f32>\")+\";\\n\\n        @compute @workgroup_size(16,16,1)\\n        fn main(@builtin(global_invocation_id) global_id : vec3<u32>) {\\n            if (global_id.x >= \"+e+\" || global_id.y >= \"+t+\") {\\n                return;\\n            }\\n            let color = \"+(n?\"textureLoad(inputTexture, global_id.xy);\":\"textureLoad(inputTexture, global_id.xy, 0);\")+\";\\n            textureStore(outputTexture, global_id.xy, color);\\n        }\\n        \"},t.checkForErrorsAsync=function(){var e=this;this.device.popErrorScope().then((function(t){t&&(y.warn(\"[CanvasSink]: WebGPU error encountered\",t),e.onErrorInternal(new pt(\"CanvasSink\",vt.Render,\"Failed to render: \"+t.message,!0)))})).catch((function(t){e.onError(new pt(\"CanvasSink\",vt.BadParameters,\"Failed to popErrorScope: \"+((null==t?void 0:t.message)||\"unknown error\"),!0))}))},t.onErrorInternal=function(e){this.onError(e)},e}(),bt=function(){function e(e){this.name=e,this.frameBudgetTimeout=-1}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",Promise.resolve(void 0));case 1:case\"end\":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),t.transform=function(){var e=f()(p().mark((function e(t,n){var r,i=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.race([this.doTransform(t),this.frameBudgetExceededPassthrough(n)]).catch((function(e){return clearTimeout(i.frameBudgetTimeout),{frame:t,error:e}}));case 2:return r=e.sent,clearTimeout(this.frameBudgetTimeout),e.abrupt(\"return\",r);case 5:case\"end\":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.doTransform=function(){var e=f()(p().mark((function e(t){var n;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.transformFn(t);case 2:return n=e.sent,e.abrupt(\"return\",{texture:n});case 4:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.frameBudgetExceededPassthrough=function(){var e=f()(p().mark((function e(t){var n=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",new Promise((function(e){return n.frameBudgetTimeout=window.setTimeout((function(){e({})}),t)})));case 1:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),t.transformFn=function(){var e=f()(p().mark((function e(t){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",void 0);case 1:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),e}(),Tt=function(e){function t(){return e.call(this,\"PassthroughTransformer\")||this}return re()(t,e),t.prototype.transform=function(){var e=f()(p().mark((function e(t){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",{});case 1:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),t}(bt);function _t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Ct=function(){function e(e,t,n){this.config=e,this.getStats=t,this.listeners=n,this.monitorInterval=-1,this.active=!1,this.validators=[],y.log(\"[PerformanceMontior]: Config\",this.config),this.validators.push(function(e){return{validate:function(t){var n=1-t.source_presented/t.source;if(n>=e.maxDroppedFramesPct)return{code:vt.PerformanceTooManyDroppedSourceFrames,fatal:!0,reason:\"Too many dropped source frames. Dropped: \"+(100*n).toFixed(0)+\"%, Max: \"+100*e.maxDroppedFramesPct+\"% Presented frames: \"+t.source_presented+\", Total frames: \"+t.source}}}}({maxDroppedFramesPct:e.frameRateDiffPercentage}),function(e){return{validate:function(t){var n=t.captured,r=t.source_presented,i=r-r*e.frameCountDiffPercentage;if(n<i)return{code:vt.PerformanceLowRenderFramerate,fatal:!0,reason:\"Capture framerate is too low. Source Presented: \"+r+\" Min: \"+i+\" Captured: \"+n+\" Config: \"+100*e.frameCountDiffPercentage+\"%\"}}}}({frameCountDiffPercentage:this.config.frameCountDiffPercentage,captureRateDiffPercentage:this.config.frameRateDiffPercentage}),function(e){return{validate:function(t){var n=t.source,r=t.rendered,i=t.received;if(t.overBudget>i*e.frameCountDiffPercentage)return{code:vt.PerformanceTooManyOverbudgetFrames,fatal:!0,reason:\"Too many overbudget frames. Received: \"+i+\" Max: \"+i*e.frameCountDiffPercentage+\" Have: \"+t.overBudget+\" Config: \"+100*e.frameCountDiffPercentage+\"%\"};if(t.skipped>i*e.frameCountDiffPercentage)return{code:vt.PerformanceTooManySkippedFrames,fatal:!0,reason:\"Too many skipped frames. Received: \"+i+\" Max: \"+i*e.frameCountDiffPercentage+\" Have: \"+t.skipped+\" Config: \"+100*e.frameCountDiffPercentage+\"%\"};var o=n-n*e.renderFramerateDiffPercentage;return r<o?{code:vt.PerformanceLowRenderFramerate,fatal:!0,reason:\"Render framerate is too low. Source: \"+n+\" Min: \"+o+\" Rendered: \"+r+\" Config: \"+100*e.renderFramerateDiffPercentage+\"%\"}:void 0}}}({frameCountDiffPercentage:this.config.frameCountDiffPercentage,renderFramerateDiffPercentage:this.config.frameRateDiffPercentage}))}var t=e.prototype;return t.start=function(){var e=this;if(this.config.enable)if(this.monitoring())y.log(\"[PerformanceMonitor]: Resume called on active instance\");else{y.log(\"[PerformanceMonitor]: Monitoring started\");var t=this.getStats();window.clearInterval(this.monitorInterval),this.monitorInterval=window.setInterval((function(){var n=e.getStats(),r=e.validatePerformance(t,n);r&&e.listeners.performanceBreach(r),t=n}),this.config.monitorIntervalMs)}},t.stop=function(){window.clearInterval(this.monitorInterval),this.monitorInterval=-1},t.monitoring=function(){return this.monitorInterval>0},t.validatePerformance=function(e,t){var n=this.diffFrameStats(e.frames,t.frames);y.log(\"[PerformanceMonitor] Stats:\",e,t),y.log(\"[PerformanceMonitor] Stats diff:\",n);var r=this.config.monitorIntervalMs/1e3*20;if(n.source<=r)y.log(\"[PerformanceMonitor]: Not enough source frames to validate. Have: \"+n.source+\" Need: \"+r);else for(var i,o=function(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return _t(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_t(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(this.validators);!(i=o()).done;){var a=i.value.validate(n);if(a)return a}},t.diffFrameStats=function(e,t){for(var n={source:0,source_presented:0,captured:0,missed:0,blocked:0,received:0,skipped:0,transformed:0,rendered:0,failed:0,overBudget:0},r=0,i=Object.entries(t);r<i.length;r++){var o=i[r],a=o[0],s=o[1];n[a]=s-e[a]}return n},e}(),wt=function(e){return e[e.External=0]=\"External\",e[e.Texture=1]=\"Texture\",e[e.Buffer=2]=\"Buffer\",e}({});function kt(e,t,n){return Array.from({length:e},(function(e,t){return t})).map(n).join(t)}var It=function(e){return e[e.Default=0]=\"Default\",e[e.HostToDevice=1]=\"HostToDevice\",e[e.DeviceToHost=4]=\"DeviceToHost\",e[e.TimingQuery=8]=\"TimingQuery\",e}({}),Pt=function(){function e(e,t,n){void 0===n&&(n=It.Default),this.bytesize=t,this.usage=n,this.deviceBuffer=void 0,this.stagingBuffer=void 0,this.closed=!1;var r=GPUBufferUsage.STORAGE;n===It.HostToDevice?r|=GPUBufferUsage.COPY_DST:n===It.DeviceToHost?(r|=GPUBufferUsage.COPY_SRC,this.stagingBuffer=e.createBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ)):n===It.TimingQuery&&(r|=GPUBufferUsage.QUERY_RESOLVE|GPUBufferUsage.COPY_DST|GPUBufferUsage.COPY_SRC,this.stagingBuffer=e.createBuffer(t,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ)),this.deviceBuffer=e.createBuffer(t,r)}var t=e.prototype;return t.copyToDevice=function(){var e=f()(p().mark((function e(t,n){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.closed){e.next=2;break}return e.abrupt(\"return\",new pt(\"Buffer\",vt.ResourceClosed,\"Buffer has been closed\",!0));case 2:return e.prev=2,e.next=5,t.setBufferData(this.deviceBuffer,n,!1);case 5:e.next=10;break;case 7:return e.prev=7,e.t0=e.catch(2),e.abrupt(\"return\",new pt(\"Buffer\",vt.BadParameters,\"Failed to copy to host: \"+((null==e.t0?void 0:e.t0.message)||\"unknown\"),!0));case 10:case\"end\":return e.stop()}}),e,this,[[2,7]])})));return function(t,n){return e.apply(this,arguments)}}(),t.copyToHost=function(){var e=f()(p().mark((function e(t){var n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.closed){e.next=2;break}return e.abrupt(\"return\",{err:new pt(\"Buffer\",vt.ResourceClosed,\"Buffer has been closed\",!0)});case 2:if(this.stagingBuffer&&this.usage!==It.DeviceToHost){e.next=4;break}return e.abrupt(\"return\",{err:new pt(\"Buffer\",vt.BadParameters,\"Buffer usage is \"+this.usage+\", but should be BufferUsage.DeviceToHost\",!0)});case 4:return e.prev=4,(n=t.createCommandEncoder()).copyBufferToBuffer(this.deviceBuffer,0,this.stagingBuffer,0,this.bytesize),t.queue.submit([n.finish()]),e.next=10,t.queue.onSubmittedWorkDone();case 10:return e.next=12,this.stagingBuffer.mapAsync(GPUMapMode.READ);case 12:return r=structuredClone(this.stagingBuffer.getMappedRange()),this.stagingBuffer.unmap(),e.abrupt(\"return\",{buffer:r});case 17:return e.prev=17,e.t0=e.catch(4),e.abrupt(\"return\",{err:new pt(\"Buffer\",vt.BufferCopyFailed,\"Failed to copy to host: \"+((null==e.t0?void 0:e.t0.message)||\"unknown\"),!0)});case 20:case\"end\":return e.stop()}}),e,this,[[4,17]])})));return function(t){return e.apply(this,arguments)}}(),t.close=function(){var e;this.closed=!0,this.deviceBuffer.destroy(),null==(e=this.stagingBuffer)||e.destroy()},e}(),At=function(){function e(e,t,n,r,i){void 0===i&&(i=It.Default),this.usage=i,this.stagingBuffer=void 0,this.deviceTexture=void 0,this.closed=!1;var o=GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING;i===It.HostToDevice?o|=GPUTextureUsage.COPY_DST:i===It.DeviceToHost?(y.warn(\"[Buffer]: Copying texture to host buffer only supports 32bpp formats.\"),o|=GPUTextureUsage.COPY_SRC,this.stagingBuffer=e.createBuffer(256*Math.ceil(4*t/256)*n,GPUBufferUsage.COPY_DST|GPUBufferUsage.MAP_READ)):i===It.TimingQuery&&y.warn(\"[Buffer]: BufferUsage.TimingQuery is not valid for Texture\"),this.deviceTexture=e.device.createTexture({size:{width:t,height:n},format:r,usage:o})}var t=e.prototype;return t.copyToHost=function(){var e=f()(p().mark((function e(t){var n,r,i;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.closed){e.next=2;break}return e.abrupt(\"return\",{err:new pt(\"Texture\",vt.ResourceClosed,\"Texture has been closed\",!0)});case 2:if(this.stagingBuffer&&this.usage!==It.DeviceToHost){e.next=4;break}return e.abrupt(\"return\",{err:new pt(\"Texture\",vt.BadParameters,\"Buffer usage is \"+this.usage+\", but should be BufferUsage.DeviceToHost\",!0)});case 4:return y.debug(\"[Buffer]: copying texture\",this.deviceTexture),e.prev=5,(n=t.createCommandEncoder()).copyTextureToBuffer({texture:this.deviceTexture,mipLevel:0,origin:[0,0,0],aspect:\"all\"},{buffer:this.stagingBuffer,offset:0,bytesPerRow:256*Math.ceil(4*this.deviceTexture.width/256),rowsPerImage:this.deviceTexture.height},[this.deviceTexture.width,this.deviceTexture.height,1]),t.queue.submit([n.finish()]),e.next=11,t.queue.onSubmittedWorkDone();case 11:return e.next=13,this.stagingBuffer.mapAsync(GPUMapMode.READ);case 13:return r=this.stagingBuffer.getMappedRange(),i=structuredClone(r),this.stagingBuffer.unmap(),e.abrupt(\"return\",{buffer:i});case 19:return e.prev=19,e.t0=e.catch(5),e.abrupt(\"return\",{err:new pt(\"Texture\",vt.BufferCopyFailed,\"Failed to copy to host: \"+((null==e.t0?void 0:e.t0.message)||\"unknown\"),!0)});case 22:case\"end\":return e.stop()}}),e,this,[[5,19]])})));return function(t){return e.apply(this,arguments)}}(),t.close=function(){var e;this.closed=!0,this.deviceTexture.destroy(),null==(e=this.stagingBuffer)||e.destroy()},e}(),Dt=function(e){return e.F16=\"f16\",e.F32=\"f32\",e}({}),Lt=function(){function e(e,t,n,r,i,o,a){void 0===i&&(i=1),void 0===o&&(o=!0),void 0===a&&(a=!1),this.inFilters=e,this.outFilters=t,this.kernelSize=n,this.scaleFactor=r,this.outPadding=i,this.convertToYuv=o,this.hostReadableOutput=a,this._configuration=void 0,this._activation=void 0,this._weights=void 0,this._biases=void 0,this._inputs=void 0,this._outputs=void 0,this._pipeline=void 0,this._outputShape=void 0,this._sampler=void 0}var t=e.prototype;return t.configure=function(){var e=f()(p().mark((function e(t,n){var r,i,o,a,s,u,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.device.pushErrorScope(\"validation\"),this._outputShape=[Math.ceil(n.inputShape[0]*this.scaleFactor),Math.ceil(n.inputShape[1]*this.scaleFactor),this.outFilters],r=(this._outputShape[0]+2*this.outPadding)*(this._outputShape[1]+2*this.outPadding)*this.outFilters,y.debug(\"[Conv2dEntry_Upscale]: Creating output buffer of size\",r),i=n.dataType===Dt.F32?4:2,this._configuration=n,this._activation=n.activation,this._outputs=new Pt(t,r*i,this.hostReadableOutput?It.DeviceToHost:It.Default),o=this._createShader(n.expectedInputType),this._sampler=t.device.createSampler({magFilter:\"linear\",minFilter:\"linear\"}),e.next=12,t.createShaderModule(o);case 12:if(a=e.sent,s=a.module,!(u=a.err)&&s){e.next=17;break}return e.abrupt(\"return\",u||new pt(\"Conv2dEntry_Upscale\",vt.PipelineCreationFailed,\"Failed to create shader module\",!0));case 17:return this._pipeline=t.device.createComputePipeline({layout:\"auto\",compute:{module:s,entryPoint:\"main\"},label:\"conv2d_entry_upscale\"}),e.next=20,t.device.popErrorScope();case 20:if(!(c=e.sent)){e.next=23;break}return e.abrupt(\"return\",new pt(\"Conv2dEntry_Upscale\",vt.PipelineCreationFailed,\"Error creating compute pipeline: \"+c.message,!0));case 23:case\"end\":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.setWeights=function(e){this._weights=e},t.setBiases=function(e){this._biases=e},t.setInputs=function(e){this._inputs=e},t.setQuantOffsets=function(e){},t.getOutputs=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",this._outputs);case 1:case\"end\":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.close=function(){var e;this._weights.close(),null==(e=this._biases)||e.close(),this._outputs.close()},t.createFinalizedPass=function(e,t,n){try{var r,i={label:\"conv2d_entry_upscale\"},o=this._pipeline.getBindGroupLayout(0);if(this._inputs instanceof GPUTexture)r=this._inputs.createView();else if(this._inputs instanceof VideoFrame)r=e.device.importExternalTexture({source:this._inputs});else{if(!(this._inputs instanceof GPUExternalTexture))return y.error(\"Conv2d_entry_upscale invalid input type\"),{err:new pt(\"Conv2d_Entry_Upscale\",vt.BadParameters,\"Input type is not one of GPUTexture, GPUExternalTexture, VideoFrame\",!0)};r=this._inputs}var a=[{binding:0,resource:{buffer:this._outputs.deviceBuffer}},{binding:1,resource:r},{binding:2,resource:this._sampler},{binding:3,resource:{buffer:this._weights.deviceBuffer}}];this._biases&&a.push({binding:4,resource:{buffer:this._biases.deviceBuffer}});var s=e.device.createBindGroup({layout:o,entries:a});n&&(i.timestampWrites={querySet:n,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1});var u=t.beginComputePass(i);return u.setPipeline(this._pipeline),u.setBindGroup(0,s),u.dispatchWorkgroups(Math.ceil(this._outputShape[1]/12),Math.ceil(this._outputShape[0]/12),1),u.end(),{pass:u}}catch(e){return{err:new pt(\"Conv2d_Entry_Upscale\",vt.InferenceFailed,\"Failed to create finalized pass: \"+((null==e?void 0:e.message)||\"unknown\"),!0)}}},t._createShader=function(e){var t=e===wt.External?\"texture_external\":\"texture_2d<fT>\",n=this._configuration.dataType,r=\"sum;\";this._activation&&(r=this._activation.getWGSL(\"x\",n)+\";\");var i=4,o=\"\";return this._biases&&(o=\"@group(0) @binding(\"+i+\") var<storage, read> biases: array<fT, M * N>;\",i++),\"\\n        \"+(this._configuration.dataType===Dt.F16?\"enable f16;\":\"\")+\"\\n        const GROUP_SIDE: u32 = 12;\\n        const GROUP_LIMIT: u32 = 14;\\n        const GROUP_THREADS: u32 = GROUP_SIDE * GROUP_SIDE;\\n        const WARP_SIZE = 32;\\n        const IN_FILTERS: u32 = \"+this.inFilters+\";\\n        const OUT_FILTERS: u32 = \"+this.outFilters+\";\\n        const OUT_PADDING: u32 = \"+this.outPadding+\";\\n        const IN_PADDING: u32 = 1;\\n\\n        const TOTAL_FILTERS = IN_FILTERS * OUT_FILTERS;\\n\\n        const TILE_OFFSET: u32 = (GROUP_LIMIT - GROUP_SIDE) / 2;\\n        const KERNEL_SIZE: u32 = 3;\\n        const OUT_WIDTH: u32 = \"+this._outputShape[1]+\";\\n        const OUT_HEIGHT: u32 = \"+this._outputShape[0]+\";\\n        const Y_COEF = vec3<fT>(0.299, 0.587, 0.114);\\n\\n        alias fT = \"+this._configuration.dataType+\";\\n\\n        @group(0) @binding(0) var<storage, read_write> outputBuffer: array<fT, (OUT_HEIGHT + OUT_PADDING * 2) * (OUT_WIDTH + OUT_PADDING * 2) * OUT_FILTERS>;\\n        @group(0) @binding(1) var inputTexture: \"+t+\";\\n        @group(0) @binding(2) var inputSampler: sampler;\\n        @group(0) @binding(3) var<storage, read> weightsBuffer: array<fT, KERNEL_SIZE * KERNEL_SIZE * TOTAL_FILTERS>;\\n\\n        \"+o+\"\\n\\n        var<workgroup> weights: array<fT, KERNEL_SIZE * KERNEL_SIZE * TOTAL_FILTERS>;\\n        var<workgroup> scratch1: array<fT, GROUP_LIMIT*GROUP_LIMIT>; // Handles input to convolution\\n\\n        fn activate(x: fT) -> fT {\\n            return \"+r+\";\\n        }\\n\\n        @compute @workgroup_size(GROUP_SIDE,GROUP_SIDE,1)\\n        fn main(@builtin(global_invocation_id) global_id: vec3<u32>,\\n                @builtin(local_invocation_index) tid: u32,\\n                @builtin(local_invocation_id) thread_id: vec3<u32>,\\n                @builtin(workgroup_id) group_id: vec3<u32>) {\\n            let texSize = vec2<f32>(f32(OUT_WIDTH), f32(OUT_HEIGHT));\\n            let texelSize = 1.0 / texSize;\\n            let cRow = group_id.y * GROUP_SIDE;\\n            let cCol = group_id.x * GROUP_SIDE ;\\n\\n            // 1. load weights\\n            for (var i: u32 = 0 ; i < (TOTAL_FILTERS*KERNEL_SIZE*KERNEL_SIZE+GROUP_THREADS-1)/GROUP_THREADS; i++) {\\n                let idx: u32 = i * GROUP_THREADS + tid;\\n                if (idx < TOTAL_FILTERS*KERNEL_SIZE*KERNEL_SIZE) {\\n                    weights[idx] = weightsBuffer[idx];\\n                }\\n            }\\n\\n            // 2. load pixels from input texture into shared scratch\\n            if (thread_id.x * 2 < GROUP_LIMIT && thread_id.y * 2 < GROUP_LIMIT) {\\n                let sRow = i32(cRow) - i32(TILE_OFFSET);\\n                let sCol = i32(cCol) - i32(TILE_OFFSET);\\n                let lRow = i32(thread_id.y * 2) + sRow;\\n                let lCol = i32(thread_id.x * 2) + sCol;\\n                var s: array<vec3<fT>, 4>;\\n                let curPos = vec2<f32>(f32(lCol), f32(lRow)) * texelSize;\\n                let cInc = vec2<f32>(texelSize.x, 0.0);\\n                let rInc = vec2<f32>(0.0, texelSize.y);\\n\\n                // Collect the pixels this thread should collect, storing in registers\\n                s[0] = vec3<fT>(textureSampleBaseClampToEdge(inputTexture, inputSampler, curPos).rgb);\\n                s[1] = vec3<fT>(textureSampleBaseClampToEdge(inputTexture, inputSampler, curPos+cInc).rgb);\\n                s[2] = vec3<fT>(textureSampleBaseClampToEdge(inputTexture, inputSampler, curPos+rInc).rgb);\\n                s[3] = vec3<fT>(textureSampleBaseClampToEdge(inputTexture, inputSampler, curPos+texelSize).rgb);\\n\\n                // Do YUV conversion and store in workgroup memory.\\n                // Doing the YUV conversion here instead of when storing to registers seems to be more performant (on M2 macbook anyway)\\n                //\\n                let row = thread_id.y * 2;\\n                let col = thread_id.x * 2;\\n\\n                // Convert RGB to YUV and compress from full range to video range [16-236]. Not doing this will result in artifacts.\\n                scratch1[row * GROUP_LIMIT + col] = dot(s[0] * 0.8627 + 0.0627, Y_COEF);\\n                if (col+1 < GROUP_LIMIT) {\\n                    scratch1[row * GROUP_LIMIT + col + 1] = dot(s[1] * 0.8627 + 0.0627, Y_COEF);\\n                }\\n                if (row+1 < GROUP_LIMIT) {\\n                    scratch1[(row+1) * GROUP_LIMIT + col] = dot(s[2] * 0.8627 + 0.0627, Y_COEF);\\n                    if (col+1 < GROUP_LIMIT) {\\n                        scratch1[(row+1) * GROUP_LIMIT + col + 1] = dot(s[3] * 0.8627 + 0.0627, Y_COEF);\\n                    }\\n                }\\n            }\\n            workgroupBarrier();\\n\\n            // Each thread will perform OUT_FILTERS convolutions\\n            var centers: array<u32, OUT_FILTERS>;\\n            var results: array<fT, OUT_FILTERS>;\\n            for (var i: u32 = 0; i < OUT_FILTERS; i++) {\\n                let z = thread_id.z + i;\\n                // let y = thread_id.y;\\n                // let x = thread_id.x;\\n                centers[i] = z;//vec3<u32>(x,y,z);\\n            }\\n            {\\n\\n                let row = thread_id.y + 1;\\n                let col = thread_id.x + 1;\\n\\n                // Load values. There will probably be bank conflicts here that we can optimize in the future.\\n                // TODO: Batch this into array<fT,9*4>;\\n                var v: array<fT, 9>;\\n                v[0] = scratch1[(row-1) * GROUP_LIMIT + (col-1)];\\n                v[3] = scratch1[(row) * GROUP_LIMIT + (col-1)];\\n                v[6] = scratch1[(row+1) * GROUP_LIMIT + (col-1)];\\n                v[1] = scratch1[(row-1) * GROUP_LIMIT + (col)];\\n                v[4] = scratch1[(row) * GROUP_LIMIT + (col)];\\n                v[7] = scratch1[(row+1) * GROUP_LIMIT + (col)];\\n                v[2] = scratch1[(row-1) * GROUP_LIMIT + (col+1)];\\n                v[5] = scratch1[(row) * GROUP_LIMIT + (col+1)];\\n                v[8] = scratch1[(row+1) * GROUP_LIMIT + (col+1)];\\n                for (var i: u32 = 0; i < OUT_FILTERS; i++) {\\n                    // Load weights\\n                    var w: array<fT, 9>;\\n                    let off = centers[i] * KERNEL_SIZE * KERNEL_SIZE;\\n                    for (var j: u32 = 0; j < KERNEL_SIZE * KERNEL_SIZE; j++) {\\n                        w[j] = weights[off + j];\\n                    }\\n\\n                    // Do dots\\n                    var sum: fT = 0.0;\\n                    sum += v[0] * w[0];\\n                    sum += v[1] * w[1];\\n                    sum += v[2] * w[2];\\n                    sum += v[3] * w[3];\\n                    sum += v[4] * w[4];\\n                    sum += v[5] * w[5];\\n                    sum += v[6] * w[6];\\n                    sum += v[7] * w[7];\\n                    sum += v[8] * w[8];\\n                    results[i] = activate(sum);\\n                }\\n            }\\n\\n            // write results\\n            for (var i: u32 = 0; i < OUT_FILTERS; i++) {\\n                let x = thread_id.x + cCol;\\n                let y = thread_id.y + cRow;\\n                let z = centers[i];\\n                // reliniarize\\n                let idx = (y+OUT_PADDING) * (OUT_WIDTH + OUT_PADDING * 2) * OUT_FILTERS + x * OUT_FILTERS + z;\\n                outputBuffer[idx] = results[i];\\n            }\\n        }\\n        \"},e}(),Mt=function(){function e(e,t,n){void 0===n&&(n=!1),this.inFilters=e,this.outFilters=t,this.hostReadableOutput=n,this._configuration=void 0,this._activation=void 0,this._weights=void 0,this._biases=void 0,this._inputs=void 0,this._outputs=void 0,this._pipeline=void 0,this._inputShape=void 0,this._outputShape=void 0}var t=e.prototype;return t.configure=function(){var e=f()(p().mark((function e(t,n){var r,i,o,a,s,u,c,d;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,t.device.pushErrorScope(\"validation\"),r=Math.floor(1),this._outputShape=[n.inputShape[0]-r+1,n.inputShape[1]-r+1,this.outFilters],this._inputShape=n.inputShape,i=(this._outputShape[0]+2)*(this._outputShape[1]+2)*this.outFilters,y.debug(\"GPURenderPipeline hidden output shape: \"+this._outputShape+\", size: \"+i+\" hostReadable \"+this.hostReadableOutput),o=n.dataType===Dt.F32?4:2,this._configuration=n,this._activation=n.activation,this._outputs=new Pt(t,i*o,this.hostReadableOutput?It.DeviceToHost:It.Default),a=this.createShader(),e.next=14,t.createShaderModule(a);case 14:if(s=e.sent,u=s.module,!(c=s.err)&&u){e.next=19;break}return e.abrupt(\"return\",new pt(\"Conv2d_3x3s1p1\",vt.PipelineCreationFailed,\"Pipeline creation failed: \"+(null==c?void 0:c.message),!0));case 19:return this._pipeline=t.device.createComputePipeline({layout:\"auto\",compute:{module:u,entryPoint:\"main\"},label:\"conv2d_entry_upscale\"}),e.next=22,t.device.popErrorScope();case 22:if(!(d=e.sent)){e.next=25;break}return e.abrupt(\"return\",new pt(\"Conv2d_3x3s1p1\",vt.PipelineCreationFailed,\"Pipeline creation failed: \"+(null==d?void 0:d.message),!0));case 25:e.next=30;break;case 27:return e.prev=27,e.t0=e.catch(0),e.abrupt(\"return\",new pt(\"Conv2d_3x3s1p1\",vt.PipelineCreationFailed,\"Pipeline creation failed: \"+(null==e.t0?void 0:e.t0.message),!0));case 30:case\"end\":return e.stop()}}),e,this,[[0,27]])})));return function(t,n){return e.apply(this,arguments)}}(),t.close=function(){var e;this._weights.close(),null==(e=this._biases)||e.close(),this._outputs.close()},t.setWeights=function(e){this._weights=e},t.setBiases=function(e){this._biases=e},t.setInputs=function(e){this._inputs=e},t.getOutputs=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",this._outputs);case 1:case\"end\":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.createFinalizedPass=function(e,t,n){if(!(this._inputs instanceof Pt))return{err:new pt(\"Conv2d_3x3s1p1\",vt.BadParameters,\"ModelLayerInput is not a Buffer\",!0)};try{var r={label:\"conv2d_mid_basic\"},i=this._pipeline.getBindGroupLayout(0),o=[{binding:0,resource:{buffer:this._outputs.deviceBuffer}},{binding:1,resource:{buffer:this._inputs.deviceBuffer}},{binding:2,resource:{buffer:this._weights.deviceBuffer}}];this._biases&&o.push({binding:3,resource:{buffer:this._biases.deviceBuffer}});var a=e.device.createBindGroup({layout:i,entries:o});n&&(r.timestampWrites={querySet:n,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1});var s=t.beginComputePass(r);return s.setPipeline(this._pipeline),s.setBindGroup(0,a),s.dispatchWorkgroups(Math.ceil(this._outputShape[1]/12),Math.ceil(this._outputShape[0]/8),this._outputShape[2]/8),s.end(),{pass:s}}catch(e){return{err:new pt(\"Conv2d_3x3s1p1\",vt.InferenceFailed,\"Layer pass failed: \"+((null==e?void 0:e.message)||\"unknown\"),!0)}}},t.createShader=function(){var e=this._configuration.dataType,t=\"sum;\";this._activation&&(t=this._activation.getWGSL(\"x\",e)+\";\");var n=\"\";return this._biases&&(n=\"@group(0) @binding(3) var<storage, read> biases: array<fT, M * N>;\"),\"\\n            \"+(this._configuration.dataType===Dt.F16?\"enable f16;\":\"\")+\"\\n            const IN_FILTERS: u32 = \"+this.inFilters+\";\\n            const OUT_FILTERS: u32 = \"+this.outFilters+\";\\n            const TOTAL_FILTERS: u32 = IN_FILTERS * OUT_FILTERS;\\n            const OUT_WIDTH: u32 = \"+this._outputShape[1]+\";\\n            const OUT_HEIGHT: u32 = \"+this._outputShape[0]+\";\\n            const IN_WIDTH: u32 = \"+this._inputShape[1]+\";\\n            const IN_HEIGHT: u32 = \"+this._inputShape[0]+\";\\n            const PADDING: u32 = 1;\\n            const KERNEL_SIZE: u32 = 3;\\n            const GROUP_SIDE_W: u32 = 12;\\n            const GROUP_SIDE_H: u32 = 8;\\n            const GROUP_DEPTH: u32 = 8;\\n            const THREAD_DEPTH: u32 = 8;\\n            const GROUP_LIMIT_W: u32 = GROUP_SIDE_W + PADDING * 2;\\n            const GROUP_LIMIT_H: u32 = GROUP_SIDE_H + PADDING * 2;\\n            const GROUP_THREADS: u32 = GROUP_SIDE_W * GROUP_SIDE_H;\\n\\n            const WARP_SIZE: u32 = 32;\\n            alias fT = \"+this._configuration.dataType+\";\\n            @group(0) @binding(0) var<storage, read_write> outputBuffer: array<fT, (OUT_HEIGHT + PADDING * 2) * (OUT_WIDTH + PADDING * 2) * OUT_FILTERS>;\\n            @group(0) @binding(1) var<storage, read> inputBuffer: array<fT, (IN_HEIGHT + PADDING * 2) * (IN_WIDTH + PADDING * 2) * IN_FILTERS>;\\n            @group(0) @binding(2) var<storage, read> weightsBuffer: array<fT, TOTAL_FILTERS * KERNEL_SIZE * KERNEL_SIZE>;\\n            \"+n+\"\\n            var<workgroup> weights: array<fT, KERNEL_SIZE * KERNEL_SIZE * TOTAL_FILTERS>;\\n            var<workgroup> inputs: array<fT, GROUP_LIMIT_W * GROUP_LIMIT_H * IN_FILTERS>;\\n\\n            fn activate(x: fT) -> fT {\\n                return \"+t+\";\\n            }\\n\\n            @compute @workgroup_size(GROUP_SIDE_W, GROUP_SIDE_H, GROUP_DEPTH/THREAD_DEPTH)\\n            fn main(@builtin(global_invocation_id) global_id: vec3<u32>,\\n                    @builtin(local_invocation_index) tid: u32,\\n                    @builtin(local_invocation_id) thread_id: vec3<u32>,\\n                    @builtin(workgroup_id) group_id: vec3<u32>) {\\n\\n                let tileCol = group_id.x * GROUP_SIDE_W ;\\n                let tileRow = group_id.y * GROUP_SIDE_H ;\\n\\n                // Load weights\\n                for (var i: u32 = 0 ; i < ((TOTAL_FILTERS*KERNEL_SIZE*KERNEL_SIZE+GROUP_THREADS-1)/GROUP_THREADS); i++) {\\n                    let idx: u32 = i * GROUP_THREADS + tid;\\n                    if (idx < TOTAL_FILTERS*KERNEL_SIZE*KERNEL_SIZE) {\\n                        weights[idx] = weightsBuffer[idx];\\n                    }\\n                }\\n\\n                // Load activations. This will be GROUP_LIMIT*GROUP_LIMIT*IN_FILTERS in size.\\n                // Buffers are in (H,W,C) format\\n\\n                if (thread_id.x * 2 < GROUP_LIMIT_W && thread_id.y * 2 < GROUP_LIMIT_H) {\\n                    for (var c: u32 = 0; c < IN_FILTERS; c++) {\\n                        for (var n: u32 = 0; n < 2; n++) {\\n                            for (var m: u32 = 0; m < 2; m++) {\\n                                let sCol: u32 = (thread_id.x*2+m) * IN_FILTERS + c;\\n                                let sRow: u32 = (thread_id.y*2+n) * IN_FILTERS * GROUP_LIMIT_W;\\n                                let gIdx: u32 = (tileRow + thread_id.y*2 + n) * IN_FILTERS * (IN_WIDTH + PADDING * 2) + (tileCol + thread_id.x*2 + m) * IN_FILTERS + c;\\n                                inputs[sRow + sCol] = inputBuffer[gIdx];\\n                            }\\n                        }\\n                    }\\n                }\\n                workgroupBarrier();\\n                var centers: array<vec3<u32>, THREAD_DEPTH>;\\n                var results: array<fT, THREAD_DEPTH>;\\n                for (var i: u32 = 0; i < THREAD_DEPTH; i++) {\\n                    let z = group_id.z * GROUP_DEPTH + thread_id.z * THREAD_DEPTH + i;\\n                    let y = thread_id.y;\\n                    let x = thread_id.x;\\n                    centers[i] = vec3<u32>(x,y,z);\\n                    results[i] = 0.0;\\n                }\\n                for (var z: u32 = 0; z < IN_FILTERS; z++) {\\n                    let row = thread_id.y + PADDING;\\n                    let col = thread_id.x + PADDING;\\n                    let c: u32 = (tid + z) % IN_FILTERS;\\n                    // Load values. There will probably be bank conflicts here that we can optimize in the future.\\n                    var v: array<fT, 9>;\\n                    v[0] = inputs[(row-1) * GROUP_LIMIT_W * IN_FILTERS + (col-1) * IN_FILTERS + c];\\n                    v[3] = inputs[(row) * GROUP_LIMIT_W * IN_FILTERS + (col-1) * IN_FILTERS + c];\\n                    v[6] = inputs[(row+1) * GROUP_LIMIT_W * IN_FILTERS + (col-1) * IN_FILTERS + c];\\n                    v[1] = inputs[(row-1) * GROUP_LIMIT_W * IN_FILTERS + (col) * IN_FILTERS + c];\\n                    v[4] = inputs[(row) * GROUP_LIMIT_W * IN_FILTERS + (col) * IN_FILTERS + c];\\n                    v[7] = inputs[(row+1) * GROUP_LIMIT_W * IN_FILTERS + (col) * IN_FILTERS + c];\\n                    v[2] = inputs[(row-1) * GROUP_LIMIT_W * IN_FILTERS + (col+1) * IN_FILTERS + c];\\n                    v[5] = inputs[(row) * GROUP_LIMIT_W * IN_FILTERS + (col+1) * IN_FILTERS + c];\\n                    v[8] = inputs[(row+1) * GROUP_LIMIT_W * IN_FILTERS + (col+1) * IN_FILTERS + c];\\n\\n                    // Do dots\\n                    for (var i: u32 = 0; i < THREAD_DEPTH; i++) {\\n                        let weightBase = centers[i].z * IN_FILTERS * KERNEL_SIZE * KERNEL_SIZE ;\\n                        var w: array<fT, 9>;\\n                        let off = weightBase + c * KERNEL_SIZE * KERNEL_SIZE;\\n                        for (var j: u32 = 0; j < KERNEL_SIZE * KERNEL_SIZE; j++) {\\n                            w[j] = weights[off + j];\\n                        }\\n\\n                        var sum: fT = 0.0;\\n                        sum += v[0] * w[0];\\n                        sum += v[1] * w[1];\\n                        sum += v[2] * w[2];\\n                        sum += v[3] * w[3];\\n                        sum += v[4] * w[4];\\n                        sum += v[5] * w[5];\\n                        sum += v[6] * w[6];\\n                        sum += v[7] * w[7];\\n                        sum += v[8] * w[8];\\n                        results[i] += sum;\\n                    }\\n                }\\n\\n                // write results\\n                for (var i: u32 = 0; i < GROUP_DEPTH; i++) {\\n                    let x = centers[i].x + PADDING;\\n                    let y = centers[i].y + PADDING;\\n                    let z = centers[i].z;\\n\\n                    let outIdx = (tileRow + y) * (OUT_WIDTH + PADDING * 2) * OUT_FILTERS + (tileCol + x) * OUT_FILTERS + z ;\\n                    if (tileRow + y < (OUT_HEIGHT - PADDING) && tileCol + x < (OUT_WIDTH - PADDING)) {\\n                        outputBuffer[outIdx] = activate(results[i]);\\n                    }\\n                }\\n            };\\n        \"},e}(),Rt=function(e){return e[e.Bits16=0]=\"Bits16\",e[e.Bits32=1]=\"Bits32\",e[e.Vec2_Bits16=2]=\"Vec2_Bits16\",e[e.Vec4_Bits16=3]=\"Vec4_Bits16\",e[e.Vec2_Bits32=4]=\"Vec2_Bits32\",e[e.Vec4_Bits32=5]=\"Vec4_Bits32\",e}({});function xt(e){switch(e){case 16:return Rt.Vec4_Bits32;case 8:return Rt.Vec2_Bits32;case 4:return Rt.Bits32;case 2:return Rt.Bits16}return Rt.Bits32}function Ot(e){switch(e){case Rt.Bits16:case Rt.Vec2_Bits16:case Rt.Vec4_Bits16:return 2;default:return 4}}function Nt(e){switch(e){case Rt.Bits16:case Rt.Bits32:return 1;case Rt.Vec2_Bits16:case Rt.Vec2_Bits32:return 2;case Rt.Vec4_Bits16:case Rt.Vec4_Bits32:return 4}}function Ut(e){return Ot(e)*Nt(e)}function Ft(e,t,n){void 0===n&&(n=!1);var r=Ut(e),i=2===Ot(e)?\"f16\":n?\"f32\":\"u32\",o=\"\";switch(Nt(e)){case 4:o=\"vec4<\"+i+\">\";break;case 2:o=\"vec2<\"+i+\">\";break;default:o=i}return r===t?o:\"array<\"+o+\", \"+Math.floor(t/r)+\">\"}function Vt(e,t,n,r,i,o,a,s,u){var c=Ut(u.bufferMemoryLayout);if(1===r||t===e&&n===e)return Gt(e,r,i,o,a,s,u);if(e>=u.numberThreads*c){for(var d=\"\",l=0;l<r;l++)d+=\"{\\n                let src_off_\"+l+\" = \"+i+\" + \"+l*t+\";\\n                let dst_off_\"+l+\" = \"+o+\" + \"+l*n+\";\\n                \"+Gt(e,1,\"src_off_\"+l,\"dst_off_\"+l,a,s,u)+\"\\n            }\";return d}return function(e,t,n,r,i,o,a,s,u){var c=Ut(u.bufferMemoryLayout),d=function(e,t){return function(e,t,n){var r=Math.ceil(e/(n.subgroupSize*t));return{subgroupsPerLoadgroup:r,loadgroups:Math.floor(n.numberThreads/(n.subgroupSize*r))}}(e,Ut(t.bufferMemoryLayout),t)}(e,u),l=d.subgroupsPerLoadgroup,f=d.loadgroups,h=Math.floor(r/f),p=r%f,v=\"{\\n\";v+=function(e,t){var n=\"\";return(n+=\"let loadgroupId = i32(\"+t.subgroupIdName+\") / \"+e+\";\\n\")+\"let loadgroupTid = i32(\"+t.threadIdName+\") % (\"+e*t.subgroupSize+\");\\n\"}(l,u),v+=\"if (loadgroupTid < \"+e/c+\") {\";for(var m=0;m<h;m++){var g=Bt(0,0,n,h,0,\"loadgroupId\",\"loadgroupTid\",0,o,m,u),y=Bt(0,0,t,h,0,\"loadgroupId\",\"loadgroupTid\",0,i,m,u);v+=\"{\\n            \"+g.registers+\"\\n            \"+y.registers+\"\\n            \"+s+g.indices+\" = \"+a+y.indices+\";\\n        }\"}if(p>0){var E=Bt(0,0,n,1,0,\"loadgroupId\",\"loadgroupTid\",h*f*n,o,0,u),S=Bt(0,0,t,1,0,\"loadgroupId\",\"loadgroupTid\",h*f*t,i,0,u);v+=\"\\n        if (loadgroupId < \"+p+\") {\\n            \"+E.registers+\"\\n            \"+S.registers+\"\\n            \"+s+E.indices+\" = \"+a+S.indices+\";\\n        }\"}return v+=\"}\",v+=\"}\\n\"}(e,t,n,r,i,o,a,s,u)}function Bt(e,t,n,r,i,o,a,s,u,c,d){d.subgroupThreadIdName,0===r&&(d.threadIdName,d.numberThreads,d.subgroupSize);var l=d.bufferMemoryLayout,f=(Ot(l),Nt(l),Ut(l)),h=\"[\";return h+=\"(\"+u+\" / \"+f+\") + \"+s/f+\" + \",h+=\"(\"+c+\" + \"+r+\" * \"+o+\") * \"+n/f+\" +\",h+=\"(\"+a+\")\",{registers:\"\",indices:h+=\"]\"}}function Gt(e,t,n,r,i,o,a){var s=e*t,u=Ut(a.bufferMemoryLayout),c=Math.floor(s/(u*a.numberThreads)),d=s%(u*a.numberThreads)/u,l=\"{\\n\";l+=\"let loadgroupId = 1;\\n\",l+=\"let loadgroupTid = i32(\"+a.threadIdName+\");\\n\";for(var f=0;f<c;f++){var h=Bt(0,a.numberThreads,u*a.numberThreads,0,0,\"loadgroupId\",\"loadgroupTid\",0,r,f,a),p=Bt(0,a.numberThreads,u*a.numberThreads,0,0,\"loadgroupId\",\"loadgroupTid\",0,n,f,a);l+=\"{\",l+=\"\"+h.registers,l+=\"\"+p.registers,l+=\"\"+o+h.indices+\" = \"+i+p.indices+\";\",l+=\"}\\n\"}if(d>0){l+=\"\\n              if (\"+a.threadIdName+\" < \"+d+\") {\\n\";var v=Bt(0,0,d*u,0,0,\"loadgroupId\",\"loadgroupTid\",c*u*a.numberThreads,r,0,a),m=Bt(0,0,d*u,0,0,\"loadgroupId\",\"loadgroupTid\",c*u*a.numberThreads,n,0,a);l+=v.registers,l+=m.registers,l+=\"\"+o+v.indices+\" = \"+i+m.indices+\";\",l+=\"}\"}return l+\"}\\n\"}var Ht=function(){function e(e,t,n){void 0===n&&(n=!1),this.inChannels=e,this.outChannels=t,this.hostReadableOutput=n,this._configuration=void 0,this._activation=void 0,this._weights=void 0,this._biases=void 0,this._inputs=void 0,this._outputs=void 0,this._pipeline=void 0,this._inputShape=void 0,this._outputShape=void 0}var t=e.prototype;return t.configure=function(){var e=f()(p().mark((function e(t,n){var r,i,o,a,s,u,c;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.device.pushErrorScope(\"validation\"),this._outputShape=[n.inputShape[0]-1+1,n.inputShape[1]-1+1,this.outChannels],this._inputShape=n.inputShape,r=(this._outputShape[0]+2)*(this._outputShape[1]+2)*this.outChannels,y.debug(\"[Conv2d_igemm_f16_Nx3x3x8]: Hidden output shape: \"+this._outputShape+\", size: \"+r+\" hostReadable \"+this.hostReadableOutput),i=n.dataType===Dt.F32?4:2,this._configuration=n,this._activation=n.activation,this._outputs=new Pt(t,r*i,this.hostReadableOutput?It.DeviceToHost:It.Default),o=this._createShader(),y.debug(\"[Conv2d_igemm_f16_Nx3x3x8]: Shader\",o),e.next=14,t.createShaderModule(o);case 14:if(a=e.sent,s=a.module,!(u=a.err)&&s){e.next=19;break}return e.abrupt(\"return\",u||new pt(\"Conv2d_igemm_f16_Nx3x3x8\",vt.PipelineCreationFailed,\"Failed to create shader module\",!0));case 19:return this._pipeline=t.device.createComputePipeline({layout:\"auto\",compute:{module:s,entryPoint:\"main\"},label:\"conv2d_igemm_f16_Nx3x3x8\"}),e.next=22,t.device.popErrorScope();case 22:if(!(c=e.sent)){e.next=25;break}return e.abrupt(\"return\",new pt(\"conv2d_igemm_f16_Nx3x3x8\",vt.PipelineCreationFailed,\"Failed to create compute pipeline: \"+c.message,!0));case 25:case\"end\":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.setWeights=function(e){this._weights=e},t.setBiases=function(e){this._biases=e},t.setInputs=function(e){this._inputs=e},t.setQuantOffsets=function(e){},t.getOutputs=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",this._outputs);case 1:case\"end\":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.close=function(){var e;this._weights.close(),null==(e=this._biases)||e.close(),this._outputs.close()},t.createFinalizedPass=function(e,t,n){if(!(this._inputs instanceof Pt))return{err:new pt(\"Conv2d_igemm_f16_Nx3x3x8\",vt.BadParameters,\"ModelLayerInput is not a Buffer\",!0)};try{var r={label:\"conv2d_mid_basic\"},i=this._pipeline.getBindGroupLayout(0),o=[{binding:0,resource:{buffer:this._outputs.deviceBuffer}},{binding:1,resource:{buffer:this._inputs.deviceBuffer}},{binding:2,resource:{buffer:this._weights.deviceBuffer}}];this._biases&&o.push({binding:3,resource:{buffer:this._biases.deviceBuffer}});var a=e.device.createBindGroup({layout:i,entries:o});n&&(r.timestampWrites={querySet:n,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1});var s=t.beginComputePass(r);return s.setPipeline(this._pipeline),s.setBindGroup(0,a),s.dispatchWorkgroups(Math.ceil(this._outputShape[1]/16),Math.ceil(this._outputShape[0]/8),1),s.end(),{pass:s}}catch(e){return{err:new pt(\"Conv2d_igemm_f16_Nx3x3x8\",vt.InferenceFailed,\"Finalized pass failed: \"+((null==e?void 0:e.message)||\"unknown\"),!0)}}},t._createShader=function(){var e=this,t=this._configuration.dataType,n=\"sum;\";this._activation&&(n=this._activation.getWGSL(\"x\",t)+\";\");var r=\"\";this._biases&&(r=\"@group(0) @binding(3) var<storage, read> biases: array<fT, M * N>;\");var i=this._configuration.loadWidthBytes,o={bufferMemoryLayout:xt(i),numberThreads:128,subgroupSize:32,threadIdName:\"tid\",subgroupThreadIdName:\"wtid\",subgroupIdName:\"wid\",subgroupSizeName:\"WARP_SIZE\"},a=Ut(o.bufferMemoryLayout),s=(this._inputShape[0]+2)*(this._inputShape[1]+2)*this.inChannels*2,u=this.inChannels*this.outChannels*3*3*2,c=18*this.inChannels*10*2,d=Nt(o.bufferMemoryLayout),l=a/(2*d);return\"\\n        \"+(this._configuration.dataType===Dt.F16?\"enable f16;\":\"\")+\"\\n        // Load Width: \"+i+\"\\n        const IN_CHANNELS: i32 = \"+this.inChannels+\";\\n        const OUT_CHANNELS: i32 = \"+this.outChannels+\";\\n        const PACKED_IN_CHANNELS: i32 = IN_CHANNELS/2;\\n        const PACKED_OUT_CHANNELS: i32 = OUT_CHANNELS/2;\\n        const KERNEL_SIZE: i32 = 3;\\n\\n        const TILE_IN_W: i32 = 18;\\n        const TILE_IN_H: i32 = 10;\\n        const TILE_OUT_W: i32 = 16;\\n        const TILE_OUT_H: i32 = 8;\\n        const TILE_OUT_DEPTH: i32 = OUT_CHANNELS;\\n        const PACKED_TILE_OUT_DEPTH: i32 = PACKED_OUT_CHANNELS;\\n\\n        const IN_PADDING: i32 = 1;\\n        const OUT_PADDING: i32 = 1;\\n\\n        const IN_WIDTH: i32 = \"+this._inputShape[1]+\";\\n        const IN_HEIGHT: i32 = \"+this._inputShape[0]+\";\\n        const OUT_WIDTH: i32 = \"+this._outputShape[1]+\";\\n        const OUT_HEIGHT: i32 = \"+this._outputShape[0]+\";\\n\\n        const K: i32 = IN_CHANNELS * 3 * 3;\\n\\n        alias fT = \"+this._configuration.dataType+\";\\n        @group(0) @binding(0) var<storage, read_write> outputBuffer: array<vec2<fT>, (OUT_HEIGHT + OUT_PADDING * 2) * (OUT_WIDTH + OUT_PADDING * 2) * PACKED_OUT_CHANNELS>;\\n        @group(0) @binding(1) var<storage, read> inputBuffer: \"+Ft(o.bufferMemoryLayout,s)+\";\\n        @group(0) @binding(2) var<storage, read> weightsBuffer: \"+Ft(o.bufferMemoryLayout,u)+\";\\n        \"+r+\"\\n\\n        var<workgroup> S_WEIGHTS: \"+Ft(o.bufferMemoryLayout,u)+\";\\n        var<workgroup> S_ACTIVATIONS: \"+Ft(o.bufferMemoryLayout,c)+\";\\n\\n        fn activate(x: fT) -> fT {\\n            return \"+n+\";\\n        }\\n\\n        @compute @workgroup_size(128,1,1)\\n        fn main(@builtin(global_invocation_id) global_id: vec3<u32>,\\n                @builtin(local_invocation_index) tid: u32,\\n                @builtin(local_invocation_id) thread_id: vec3<u32>,\\n                @builtin(workgroup_id) group_id: vec3<u32>) {\\n\\n            let tileCol: i32 = i32(group_id.x) * TILE_OUT_W;\\n            let tileRow: i32 = i32(group_id.y) * TILE_OUT_H;\\n            let wid: i32 = i32(tid) / 32;\\n            let wtid: i32 = i32(tid) % 32;\\n            let warpX: i32 = wid % 2;\\n            let warpY: i32 = wid / 2;\\n            let threadX: i32 = wtid % 8;\\n            let threadY: i32 = wtid / 8;\\n            \\n            {\\n                \"+Vt(u,0,0,1,\"0\",\"0\",\"weightsBuffer\",\"S_WEIGHTS\",o)+\"\\n            }\\n            \\n            // Load activations to SMEM\\n            {\\n                let x: i32 = i32(group_id.x) * TILE_OUT_W;\\n                let y: i32 = i32(group_id.y) * TILE_OUT_H;\\n                let offsetBytes = (y * (IN_WIDTH+IN_PADDING*2) * IN_CHANNELS + x * IN_CHANNELS) * 2;\\n                \"+Vt(18*this.inChannels*2,this.inChannels*(this._inputShape[1]+2)*2,18*this.inChannels*2,10,\"offsetBytes\",\"0\",\"inputBuffer\",\"S_ACTIVATIONS\",o)+\"\\n            }\\n            // Wait for memory operations to complete\\n            workgroupBarrier();\\n\\n            var results: array<array<array<vec2<fT>, PACKED_OUT_CHANNELS>, 1>, 1>;\\n            for (var k: i32 = 0; k < K; k += 8) {\\n                var weights: array<array<vec2<fT>, 4>, OUT_CHANNELS>;\\n                var activations: array<array<array<vec2<fT>,4>, 1>, 1>;\\n                \"+kt(1,\"\\n\\t\\t\\t\",(function(e){return kt(1,\"\\n\\t\\t\\t\",(function(t){return\"\\n                    {\\n                        let currentXOff: i32 = (k / IN_CHANNELS) % 3;\\n                        let currentYOff: i32 = (k / IN_CHANNELS) / 3;\\n                        let currentCOff: i32 = k % IN_CHANNELS;\\n                        let idx: i32 = ((currentYOff + (warpY * 4) + (threadY * 1) + \"+e+\") * TILE_IN_W * IN_CHANNELS\\n                            + (currentXOff + (warpX * 8) + (threadX * 1) + \"+t+\") * IN_CHANNELS\\n                            + currentCOff) / \"+l+\";\\n                        \"+kt(8/l,\"\\n\\t\\t\\t\",(function(n){return\"{\\n                                    let outer: i32 = (idx+\"+n+\") / \"+d+\";\\n                                    let inner: i32 = ((idx+\"+n+\") % \"+d+\");\\n                                    activations[\"+e+\"][\"+t+\"][\"+n+\"] = vec2<f16>(unpack2x16float(S_ACTIVATIONS[outer][inner]));\\n                                }\\n                                \"}))+\"\\n                    }\"}))}))+\"\\n                \\n                for (var co: i32 = 0; co < OUT_CHANNELS; co++) {\\n                    let idx: i32 = co * KERNEL_SIZE * KERNEL_SIZE * IN_CHANNELS / \"+l+\";\\n                    \"+kt(8/l,\"\\n\\t\\t\\t\\t\",(function(e){return\"\\n                          {\\n                            let outer: i32 = (idx + k / \"+l+\" + \"+e+\") / \"+d+\";\\n                            let inner: i32 = ((idx + k / \"+l+\" + \"+e+\") % \"+d+\");\\n                            weights[co][\"+e+\"] = vec2<f16>(unpack2x16float(S_WEIGHTS[outer][inner]));\\n                          }\\n                          \"}))+\"\\n                }\\n                \\n                \"+kt(1,\"\\n\\t\\t\\t\\t\",(function(t){return kt(1,\"\\n\\t\\t\\t\\t\",(function(n){return kt(e.outChannels,\"\\n\\t\\t\\t\\t\",(function(e){var r=Math.floor(e/2),i=e%2;return kt(8,\"\\n\\t\\t\\t\\t\",(function(o){var a=Math.floor(o/2),s=o%2;return\"results[\"+t+\"][\"+n+\"][\"+r+\"][\"+i+\"] += activations[\"+t+\"][\"+n+\"][\"+a+\"][\"+s+\"] * weights[\"+e+\"][\"+a+\"][\"+s+\"];\"}))}))}))}))+\"\\n            }\\n            // OK we now have all of our output channels for this pixel. Write to VRAM.\\n            \"+kt(1,\"\\n\\t\\t\\t\",(function(t){return kt(1,\"\\n\\t\\t\\t\",(function(n){return\"\\n            {\\n                let idx: i32 = (tileRow + OUT_PADDING + (warpY * 4) + (threadY * 1) + \"+t+\") * (OUT_WIDTH + OUT_PADDING * 2) * PACKED_OUT_CHANNELS\\n                              + (tileCol + OUT_PADDING + (warpX * 8) + (threadX * 1) + \"+n+\") * PACKED_OUT_CHANNELS; \\n                \"+kt(e.outChannels/2,\"\\n\\t\\t\\t\\t\",(function(e){return\"outputBuffer[idx + \"+e+\"] = vec2<fT>(activate(results[\"+t+\"][\"+n+\"][\"+e+\"][0]), activate(results[\"+t+\"][\"+n+\"][\"+e+\"][1]));\"}))+\"\\n            }\"}))}))+\"\\n        };\\n    \"},e}(),Wt=function(){function e(e,t,n,r,i){void 0===i&&(i=!1),this.inFeatures=e,this.outFeatures=t,this.kernelSize=n,this.inPadding=r,this.hostReadableOutput=i,this._configuration=void 0,this._activation=void 0,this._weights=void 0,this._biases=void 0,this._inputs=void 0,this._lrImage=void 0,this._outputs=void 0,this._pipeline=void 0,this._inputShape=void 0,this._outputShape=void 0,this._sampler=void 0,this._storageFormat=void 0}var t=e.prototype;return t.configure=function(){var e=f()(p().mark((function e(t,n){var r,i,o,a,s,u;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t.device.pushErrorScope(\"validation\"),r=Math.floor((this.kernelSize-1)/2),this._outputShape=[n.inputShape[0]-r+this.inPadding,n.inputShape[1]-r+this.inPadding,this.outFeatures],this._storageFormat=t.storageFormat,this._inputShape=n.inputShape,this._configuration=n,this._activation=n.activation,this._outputs=new At(t,this._outputShape[1],this._outputShape[0],this._storageFormat,this.hostReadableOutput?It.DeviceToHost:It.Default),i=this._createShader(n.expectedInputType),this._sampler=t.device.createSampler({magFilter:\"linear\",minFilter:\"linear\"}),e.next=12,t.createShaderModule(i);case 12:if(o=e.sent,a=o.module,!(s=o.err)&&a){e.next=17;break}return e.abrupt(\"return\",s||new pt(\"Conv2d_Exit_ChromaCombine\",vt.ShaderCompilationFailed,\"Failed to create shader module\",!0));case 17:return this._pipeline=t.device.createComputePipeline({layout:\"auto\",compute:{module:a,entryPoint:\"main\"},label:\"conv2d_entry_upscale\"}),e.next=20,t.device.popErrorScope();case 20:(u=e.sent)&&new pt(\"Conv2d_Exit_ChromaCombine\",vt.PipelineCreationFailed,\"Failed to create compute pipeline: \"+u.message,!0);case 22:case\"end\":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.setWeights=function(e){this._weights=e},t.setBiases=function(e){this._biases=e},t.setInputs=function(e){this._inputs=e},t.setQuantOffsets=function(e){},t.getOutputs=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt(\"return\",this._outputs);case 1:case\"end\":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),t.setLowResTexture=function(e){this._lrImage=e},t.close=function(){var e;this._weights.close(),null==(e=this._biases)||e.close(),this._outputs.close()},t.createFinalizedPass=function(e,t,n){if(!(this._inputs instanceof Pt))return{err:new pt(\"Conv2d_Exit_ChromaCombine\",vt.BadParameters,\"ModelLayerInput is not a Buffer\",!0)};try{var r,i={label:\"conv2d_exit\"};if(this._lrImage instanceof GPUTexture)r=this._lrImage.createView();else if(this._lrImage instanceof VideoFrame)r=e.device.importExternalTexture({source:this._lrImage});else{if(!(this._lrImage instanceof GPUExternalTexture))return{err:new pt(\"Conv2d_Exit_ChromaCombine\",vt.BadParameters,\"Input is not one of GPUTexture, VideoFrame, GPUExternalTexture\",!0)};r=this._lrImage}var o=this._pipeline.getBindGroupLayout(0),a=[{binding:0,resource:this._outputs.deviceTexture.createView()},{binding:1,resource:{buffer:this._inputs.deviceBuffer}},{binding:2,resource:{buffer:this._weights.deviceBuffer}},{binding:3,resource:r},{binding:4,resource:this._sampler}];this._biases&&a.push({binding:3,resource:{buffer:this._biases.deviceBuffer}});var s=e.device.createBindGroup({layout:o,entries:a});n&&(i.timestampWrites={querySet:n,beginningOfPassWriteIndex:0,endOfPassWriteIndex:1});var u=t.beginComputePass(i);return u.setPipeline(this._pipeline),u.setBindGroup(0,s),u.dispatchWorkgroups(Math.ceil(this._outputShape[1]/16),Math.ceil(this._outputShape[0]/16),1),u.end(),{pass:u}}catch(e){return{err:new pt(\"Conv2d_Exit_ChromaCombine\",vt.InferenceFailed,\"Failed to create finalized pass: \"+((null==e?void 0:e.message)||\"unknown\"),!0)}}},t._createShader=function(e){var t=e===wt.External?\"texture_external\":\"texture_2d<fT>\",n=this._configuration.dataType;this._activation&&this._activation.getWGSL(\"sum\",n);var r=\"\";return this._biases&&(r=\"@group(0) @binding(5) var<storage, read> biases: array<fT, M * N>;\"),\"\\n            \"+(this._configuration.dataType===Dt.F16?\"enable f16;\":\"\")+\"\\n\\n            const OUT_FEATURES: u32 = \"+this.outFeatures+\";\\n            const OUT_WIDTH: u32 = \"+this._outputShape[1]+\";\\n            const OUT_HEIGHT: u32 = \"+this._outputShape[0]+\";\\n            const IN_WIDTH: u32 = \"+this._inputShape[1]+\";\\n            const IN_HEIGHT: u32 = \"+this._inputShape[0]+\";\\n            const IN_FEATURES: u32 = \"+this.inFeatures+\";\\n            const IN_PADDING: u32 = \"+this.inPadding+\";\\n            const KERNEL_SIZE: u32 = \"+this.kernelSize+\";\\n            const GROUP_SIDE: u32 = 16;\\n            const GROUP_THREADS: u32 = GROUP_SIDE * GROUP_SIDE;\\n\\n            alias fT = \"+this._configuration.dataType+\";\\n            @group(0) @binding(0) var outputTexture: texture_storage_2d<\"+this._storageFormat+\", write>;\\n            @group(0) @binding(1) var<storage, read> inputBuffer: array<fT, (IN_HEIGHT + IN_PADDING * 2) * (IN_WIDTH + IN_PADDING * 2) * IN_FEATURES>;\\n            @group(0) @binding(2) var<storage, read> weightsBuffer: array<fT, OUT_FEATURES * IN_FEATURES * KERNEL_SIZE * KERNEL_SIZE>;\\n            @group(0) @binding(3) var lrTexture: \"+t+\";\\n            @group(0) @binding(4) var inputSampler: sampler;\\n            \"+r+\"\\n            const Y_COEF = vec3<fT>(0.299, 0.587, 0.114);\\n            fn rgbToYuv(x: vec3<f32>) -> vec3<f32> {\\n                let y = dot(x, vec3<f32>(Y_COEF));\\n                return vec3<f32>(\\n                    y, 0.493*(x.b-y), 0.877*(x.r-y)\\n                );\\n            }\\n\\n            fn yuvToRgb(x: vec3<f32>) -> vec3<f32> {\\n                return vec3<f32>(\\n                    x.x + 1.0 / 0.877 * x.z,\\n                    x.x - 0.39393 * x.y - 0.58081 * x.z,\\n                    x.x + 1.0 / 0.493 * x.y\\n                );\\n            }\\n\\n            @compute @workgroup_size(GROUP_THREADS,1,1)\\n            fn main(@builtin(global_invocation_id) global_id: vec3<u32>,\\n                    @builtin(local_invocation_index) tid: u32,\\n                    @builtin(workgroup_id) group_id: vec3<u32>) {\\n                let cRow = group_id.y * GROUP_SIDE + tid / GROUP_SIDE;\\n                let cCol = group_id.x * GROUP_SIDE + (tid % GROUP_SIDE);\\n\\n                // TODO: Optimize. First, load these into workgroup memory.\\n                // assuming symmetric odd-numbered kernel size\\n                var inputs: array<fT, KERNEL_SIZE * KERNEL_SIZE * IN_FEATURES>;\\n                let off: u32 = (KERNEL_SIZE-1)/2;\\n\\n                for (var m: u32 = 0; m < KERNEL_SIZE; m++) {\\n                    for (var n: u32 = 0; n < KERNEL_SIZE; n++) {\\n                        for (var c: u32 = 0; c < IN_FEATURES; c++) {\\n                            let in_idx = (cRow + n - off + IN_PADDING) * (IN_WIDTH + IN_PADDING * 2) * IN_FEATURES + (cCol + m - off + IN_PADDING) * IN_FEATURES + c;\\n                            inputs[n * KERNEL_SIZE * IN_FEATURES + m * IN_FEATURES + c] = inputBuffer[in_idx];\\n                        }\\n                    }\\n                }\\n\\n                // Should probably change the order of these loops to better map to channel ordering\\n                // Also move weights loading into workgroup memory...\\n                var color = vec4<f32>(0.0, 0.0, 0.0, 1.0);\\n                for (var z: u32 = 0; z < OUT_FEATURES; z++) {\\n                    var sum: fT = 0.0;\\n                    for (var j: u32 = 0; j < IN_FEATURES; j++) {\\n                        var weights: array<fT, KERNEL_SIZE * KERNEL_SIZE>;\\n                        for (var m: u32 = 0; m < KERNEL_SIZE; m++) {\\n                            for (var n: u32 = 0; n < KERNEL_SIZE; n++) {\\n                                var weights_off = z * IN_FEATURES * KERNEL_SIZE * KERNEL_SIZE + m * KERNEL_SIZE * IN_FEATURES + n * IN_FEATURES + j;\\n                                weights[m * KERNEL_SIZE + n] = weightsBuffer[weights_off];\\n                            }\\n                        }\\n                        {\\n                            {\\n                                sum += inputs[0 * KERNEL_SIZE * IN_FEATURES + 0 * IN_FEATURES + j] * weights[0 * KERNEL_SIZE + 0];\\n                                sum += inputs[0 * KERNEL_SIZE * IN_FEATURES + 1 * IN_FEATURES + j] * weights[0 * KERNEL_SIZE + 1];\\n                                sum += inputs[0 * KERNEL_SIZE * IN_FEATURES + 2 * IN_FEATURES + j] * weights[0 * KERNEL_SIZE + 2];\\n                            }\\n                            {\\n                                sum += inputs[1 * KERNEL_SIZE * IN_FEATURES + 0 * IN_FEATURES + j] * weights[1 * KERNEL_SIZE + 0];\\n                                sum += inputs[1 * KERNEL_SIZE * IN_FEATURES + 1 * IN_FEATURES + j] * weights[1 * KERNEL_SIZE + 1];\\n                                sum += inputs[1 * KERNEL_SIZE * IN_FEATURES + 2 * IN_FEATURES + j] * weights[1 * KERNEL_SIZE + 2];\\n                            }\\n                            {\\n                                sum += inputs[2 * KERNEL_SIZE * IN_FEATURES + 0 * IN_FEATURES + j] * weights[2 * KERNEL_SIZE + 0];\\n                                sum += inputs[2 * KERNEL_SIZE * IN_FEATURES + 1 * IN_FEATURES + j] * weights[2 * KERNEL_SIZE + 1];\\n                                sum += inputs[2 * KERNEL_SIZE * IN_FEATURES + 2 * IN_FEATURES + j] * weights[2 * KERNEL_SIZE + 2];\\n                            }\\n                        }\\n                    }\\n                    color[z] = clamp(f32(sum), 0.0627, 1.0-0.0627);\\n                }\\n\\n                let texSize = vec2<f32>(f32(OUT_WIDTH), f32(OUT_HEIGHT));\\n                let texelSize = 1.0 / texSize;\\n                let inPos = vec2<f32>(f32(cCol+1), f32(cRow)) * texelSize;\\n                let lr = rgbToYuv(textureSampleBaseClampToEdge(lrTexture, inputSampler, inPos).rgb * 0.8627 + 0.0627);\\n                let mixval: f32 = f32(cCol > 3) * f32(cRow > 3) * f32(cCol < OUT_WIDTH - 3) * f32(cRow < OUT_HEIGHT - 3);\\n                color.x = mix(lr.x, color.x, mixval);\\n                color = vec4((yuvToRgb(vec3<f32>(color.x, lr.y, lr.z)) * 1.1591) - 0.0627, 1.0);\\n                textureStore(outputTexture, vec2<u32>(cCol, cRow), color);\\n            };\\n        \"},e}(),Kt=function(){function e(e){this.a=e}var t=e.prototype;return t.activationsPerFeature=function(){return 1},t.getWGSL=function(e){return this.a+\" * \"+e+\" + (1 - \"+this.a+\") * max(0, \"+e+\")\"},e}(),jt={\"init_feat.0\":{weight:{offset:0,bits:16,count:144}},\"bottleneck.0\":{weight:{offset:288,bits:16,count:1152}},\"bottleneck.2\":{weight:{offset:2592,bits:16,count:576}},\"bottleneck.4\":{weight:{offset:3744,bits:16,count:576}},\"bottleneck.6\":{weight:{offset:4896,bits:16,count:576}},reconstruct:{weight:{offset:6048,bits:16,count:72}}},zt=function(){try{for(var e=atob(\"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\"),t=new Uint8Array(e.length),n=0;n<e.length;n++)t[n]=e.charCodeAt(n);return{buffer:t.buffer}}catch(e){return{err:new pt(\"Model\",vt.ModelInitFailed,\"Failed to read weights binary string: \"+((null==e?void 0:e.message)||\"unknown\"),!0)}}};function qt(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return Qt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Qt(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function Qt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Yt=function(){function e(e,t,n){this.config=e,this.gpuContext=t,this.onError=n,this.entry=void 0,this.exit=void 0,this.hidden=[],this.timingInfoEntry=void 0,this.timingInfoExit=void 0,this.timingQueryEntry=void 0,this.timingQueryExit=void 0,this.weightsMap=void 0,this.weightsBinary=void 0,this.width=0,this.height=0,this.frameNum=0,this.initialized=!1,this.initializing=!1,this.MIN_AREA=void 0,this.MAX_AREA=void 0,this.SCALE_FACTOR=void 0,this.MIN_AREA=this.config.inputResolutionAreaBand[0],this.MAX_AREA=this.config.inputResolutionAreaBand[1],this.SCALE_FACTOR=this.config.scaleFactor,y.info(\"[ModelIVSEN]: Config\",this.config)}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(){var t,n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(y.info(\"[ModelIVSEN]: Initializing\"),this.initialized=!1,this.initializing=!1,this.entry=void 0,this.exit=void 0,this.width=0,this.height=0,this.frameNum=0,e.prev=8,this.weightsMap=jt,t=zt(),n=t.buffer,!(r=t.err)){e.next=14;break}return y.error(\"Model init failed\",r),e.abrupt(\"return\",r);case 14:this.weightsBinary=n,e.next=21;break;case 17:return e.prev=17,e.t0=e.catch(8),y.error(\"Model init failed\",e.t0),e.abrupt(\"return\",new pt(\"Model\",vt.ModelInitFailed,\"Failed to init the model: \"+((null==e.t0?void 0:e.t0.message)||\"unknown\"),!0));case 21:return y.info(\"[ModelIVSEN]: Init complete\"),e.abrupt(\"return\",void 0);case 23:case\"end\":return e.stop()}}),e,this,[[8,17]])})));return function(){return e.apply(this,arguments)}}(),t.infer=function(){var e=f()(p().mark((function e(t){var n,r,i,o,a,s,u,c,d,l,f,h,v,m,g,E,S,b,T,_,C=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.initializing){e.next=2;break}return e.abrupt(\"return\",void 0);case 2:if(n=t instanceof VideoFrame?t.displayWidth:t.width,r=t instanceof VideoFrame?t.displayHeight:t.height,!((i=n*r)<this.MIN_AREA||i>this.MAX_AREA)){e.next=9;break}return this.initialized=!1,this.initializing=!1,e.abrupt(\"return\");case 9:if(n===this.width&&r===this.height||(this.initialized=!1),this.initialized){e.next=14;break}return e.next=13,this.reinit(n,r);case 13:return e.abrupt(\"return\",void 0);case 14:for(performance.now(),this.gpuContext.device.pushErrorScope(\"validation\"),o=this.gpuContext.device.createCommandEncoder(),this.entry&&(this.entry.setInputs(t),this.entry.createFinalizedPass(this.gpuContext,o,this.timingQueryEntry),this.timingInfoEntry&&this.timingQueryEntry&&o.resolveQuerySet(this.timingQueryEntry,0,2,this.timingInfoEntry.deviceBuffer,0)),a=qt(this.hidden);!(s=a()).done;)(u=s.value).layer&&u.layer.createFinalizedPass(this.gpuContext,o,u.timingQuery),u.timingQuery&&u.timingInfo&&o.resolveQuerySet(u.timingQuery,0,2,u.timingInfo.deviceBuffer,0);return this.exit&&(this.exit.setLowResTexture(t),this.exit.createFinalizedPass(this.gpuContext,o,this.timingQueryExit),this.timingInfoExit&&this.timingQueryExit&&o.resolveQuerySet(this.timingQueryExit,0,2,this.timingInfoExit.deviceBuffer,0)),this.gpuContext.queue.submit([o.finish()]),this.frameNum++,this.frameNum,e.next=25,this.gpuContext.queue.onSubmittedWorkDone();case 25:if(!this.timingInfoEntry){e.next=35;break}return e.next=28,this.timingInfoEntry.copyToHost(this.gpuContext.device);case 28:if(c=e.sent,d=c.err,l=c.buffer,!d){e.next=34;break}return this.onError(d),e.abrupt(\"return\");case 34:y.debug(\"[ModelIVSEN]: entry timing=\"+Zt(l));case 35:f=qt(this.hidden);case 36:if((h=f()).done){e.next=50;break}if(!(v=h.value).timingInfo){e.next=48;break}return e.next=41,v.timingInfo.copyToHost(this.gpuContext.device);case 41:if(m=e.sent,g=m.err,E=m.buffer,!g){e.next=47;break}return this.onError(g),e.abrupt(\"return\");case 47:y.debug(\"[ModelIVSEN]: hidden[\"+v.idx+\"] timing=\"+Zt(E));case 48:e.next=36;break;case 50:if(!this.timingInfoExit){e.next=60;break}return e.next=53,this.timingInfoExit.copyToHost(this.gpuContext.device);case 53:if(S=e.sent,b=S.err,T=S.buffer,!b){e.next=59;break}return this.onError(b),e.abrupt(\"return\");case 59:y.debug(\"[ModelIVSEN]: exit timing=\"+Zt(T));case 60:if(this.gpuContext.device.popErrorScope().then((function(e){var t;e&&C.onError(new pt(\"ModelIVSEN\",vt.InferenceFailed,null!=(t=null==e?void 0:e.message)?t:\"Unknown error\",!0))})).catch((function(e){var t;C.onError(new pt(\"ModelIVSEN\",vt.InferenceFailed,null!=(t=null==e?void 0:e.message)?t:\"Unknown error\",!0))})),this.exit){e.next=64;break}return y.warn([\"ModelIVSEN: Exit layer does not exist, cant return texture\"]),e.abrupt(\"return\",void 0);case 64:return e.next=66,this.exit.getOutputs();case 66:if((_=e.sent)instanceof At){e.next=71;break}return this.initialized=!1,y.warn([\"ModelIVSEN: Exit layer did not return a texture\"]),e.abrupt(\"return\",void 0);case 71:return e.abrupt(\"return\",_.deviceTexture);case 72:case\"end\":return e.stop()}}),e,this)})));return function(t){return e.apply(this,arguments)}}(),t.reinit=function(){var e=f()(p().mark((function e(t,n){var r,i,o,a,s,u,c,d,l,f,h,v,m,g,y,E,S;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=this.weightsBinary,i=this.weightsMap,r&&i){e.next=4;break}return e.abrupt(\"return\",new pt(\"Model\",vt.ModelInitFailed,\"Model was not initialized before infer was called\",!0));case 4:return this.initializing=!0,this.cleanup(),e.next=8,this.configureEntrypoint(t,n,this.SCALE_FACTOR,1,16,r,i);case 8:if(o=e.sent,a=o.err,s=o.entry,!a&&s){e.next=14;break}return this.handleError(a||new pt(\"Model\",vt.PipelineCreationFailed,\"Failed to create entry layer\",!0)),e.abrupt(\"return\");case 14:this.entry=s,this.hidden=[],u=0;case 17:if(!(u<4)){e.next=42;break}if(c=void 0,d=8,0!==u){e.next=27;break}return e.next=23,this.entry.getOutputs();case 23:c=e.sent,d=16,e.next=30;break;case 27:return e.next=29,this.hidden[u-1].layer.getOutputs();case 29:c=e.sent;case 30:return e.next=32,this.configureMid(Math.ceil(t*this.SCALE_FACTOR),Math.ceil(n*this.SCALE_FACTOR),d,8,r,i,c,2*u);case 32:if(l=e.sent,f=l.err,h=l.layer){e.next=38;break}return this.handleError(f||new pt(\"Model\",vt.PipelineCreationFailed,\"Failed to create midlayer\",!0)),e.abrupt(\"return\");case 38:this.hidden.push({layer:h,timingInfo:null,timingQuery:null,idx:u});case 39:u++,e.next=17;break;case 42:return e.next=44,this.configureExit(Math.ceil(t*this.SCALE_FACTOR),Math.ceil(n*this.SCALE_FACTOR),8,1,r,i);case 44:if(v=e.sent,m=v.err,g=v.exit,!m&&g){e.next=50;break}return this.handleError(m||new pt(\"Model\",vt.PipelineCreationFailed,\"Failed to create exit layer\",!0)),e.abrupt(\"return\");case 50:if(this.exit=g,this.gpuContext.timingInfoEnabled){for(this.timingInfoEntry=new Pt(this.gpuContext,16,It.TimingQuery),y=qt(this.hidden);!(E=y()).done;)(S=E.value).timingInfo=new Pt(this.gpuContext,16,It.TimingQuery),S.timingQuery=this.gpuContext.device.createQuerySet({type:\"timestamp\",count:2});this.timingInfoExit=new Pt(this.gpuContext,16,It.TimingQuery),this.timingQueryEntry=this.gpuContext.device.createQuerySet({type:\"timestamp\",count:2}),this.timingQueryExit=this.gpuContext.device.createQuerySet({type:\"timestamp\",count:2})}this.width=t,this.height=n,this.initializing=!1,this.initialized=!0;case 56:case\"end\":return e.stop()}}),e,this)})));return function(t,n){return e.apply(this,arguments)}}(),t.cleanup=function(){var e,t,n,r;null==(e=this.exit)||e.close();for(var i,o=qt(this.hidden);!(i=o()).done;)i.value.layer.close();null==(t=this.entry)||t.close(),null==(n=this.timingInfoEntry)||n.close(),null==(r=this.timingInfoExit)||r.close()},t.configureEntrypoint=function(){var e=f()(p().mark((function e(t,n,r,i,o,a,s){var u,c,d,l,f,h,v;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return u=new Lt(i,o,3,r,1,!0,!1),c=s[\"init_feat.0\"].weight,d=c.bits/8,l=a.slice(c.offset,c.offset+c.count*d),f={inputShape:[n,t,i],weightShape:[3,3,o*i],bias:!1,dataType:4===d?Dt.F32:Dt.F16,expectedInputType:wt.External,activation:new Kt(.1),loadWidthBytes:this.config.loadWidthBytes},h=new Pt(this.gpuContext,9*i*o*d,It.HostToDevice),e.next=8,h.copyToDevice(this.gpuContext,l);case 8:return u.setWeights(h),e.next=11,u.configure(this.gpuContext,f);case 11:if(!(v=e.sent)){e.next=14;break}return e.abrupt(\"return\",{err:v});case 14:return e.abrupt(\"return\",{entry:u});case 15:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r,i,o,a,s){return e.apply(this,arguments)}}(),t.configureMid=function(){var e=f()(p().mark((function e(t,n,r,i,o,a,s,u){var c,d,l,f,h,v,m;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=a[\"bottleneck.\"+u].weight,d=c.bits/8,l=o.slice(c.offset,c.offset+c.count*d),f=4===d?new Mt(r,i,!1):new Ht(r,i,!1),h={inputShape:[n,t,r],weightShape:[3,3,i*r],bias:!1,dataType:4===d?Dt.F32:Dt.F16,expectedInputType:wt.Buffer,activation:new Kt(.1),loadWidthBytes:this.config.loadWidthBytes},v=new Pt(this.gpuContext,9*r*i*d,It.HostToDevice),e.next=8,v.copyToDevice(this.gpuContext,l);case 8:return f.setInputs(s),f.setWeights(v),e.next=12,f.configure(this.gpuContext,h);case 12:if(!(m=e.sent)){e.next=15;break}return e.abrupt(\"return\",{err:m});case 15:return e.abrupt(\"return\",{layer:f});case 16:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r,i,o,a,s,u){return e.apply(this,arguments)}}(),t.configureExit=function(){var e=f()(p().mark((function e(t,n,r,i,o,a){var s,u,c,d,l,f,h,v=this;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=new Wt(r,i,3,1,!1),u=a.reconstruct.weight,c=u.bits/8,d=o.slice(u.offset,u.offset+u.count*c),l={inputShape:[n,t,r],weightShape:[3,3,i*r],bias:!1,dataType:4===c?Dt.F32:Dt.F16,expectedInputType:wt.External,activation:new Kt(.1),loadWidthBytes:this.config.loadWidthBytes},f=new Pt(this.gpuContext,9*r*i*c,It.HostToDevice),e.next=8,f.copyToDevice(this.gpuContext,d);case 8:return this.hidden[this.hidden.length-1].layer.getOutputs().then((function(e){return s.setInputs(e)})).catch((function(e){var t;v.onError(new pt(\"Model\",vt.BadParameters,null!=(t=null==e?void 0:e.message)?t:\"Failed to access hidden layer\",!0))})),s.setWeights(f),e.next=12,s.configure(this.gpuContext,l);case 12:if(!(h=e.sent)){e.next=15;break}return e.abrupt(\"return\",{err:h});case 15:return e.abrupt(\"return\",{exit:s});case 16:case\"end\":return e.stop()}}),e,this)})));return function(t,n,r,i,o,a){return e.apply(this,arguments)}}(),t.handleError=function(e){this.initializing=!1,this.initialized=!1,this.onError(e)},e}(),Zt=function(e){if(!e)return y.warn(\"[ModelIVSEN]: timingInfo buffer is undefined\"),0;var t=0;try{var n=new BigInt64Array(e);t=Number(n[1]-n[0])/1e9}catch(e){y.warn(\"[ModelIVSEN': Failed to get seconds from timingInfo\")}return t},Jt=function(e){function t(t,n,r){var i;return(i=e.call(this,\"SuperResolutionTransformer\")||this).onError=r,i.model=void 0,i.model=new Yt(t,n,r),i}re()(t,e);var n=t.prototype;return n.init=function(){var e=f()(p().mark((function e(){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.model.init();case 2:return e.abrupt(\"return\",e.sent);case 3:case\"end\":return e.stop()}}),e,this)})));return function(){return e.apply(this,arguments)}}(),n.transformFn=function(){var e=f()(p().mark((function e(t){return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this.model.infer(t);case 3:return e.abrupt(\"return\",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),this.onError(new pt(\"SuperResolutionTransformer\",vt.InferenceFailed,\"Unhandled exception \"+(null==e.t0?void 0:e.t0.message),!0)),e.abrupt(\"return\",void 0);case 10:case\"end\":return e.stop()}}),e,this,[[0,6]])})));return function(t){return e.apply(this,arguments)}}(),t}(bt),Xt=function(){function e(e,t,n){this.windowContext=e,this.listeners=n,this.canvas=void 0,this.sourceVideo=void 0,this.pipeline=void 0,this.frameStream=void 0,this.gpuContext=void 0,this.performanceMonitor=void 0,this.config=void 0,this.config=ut({gpu:{timingInfoEnabled:!1,requiredFeatures:[\"shader-f16\"]},pipeline:{minimumFramerate:60,includeReceiveDelay:!0},capture:{maxQueueSize:2},monitor:{enable:!0,monitorIntervalMs:5e3,frameRateDiffPercentage:.25,frameCountDiffPercentage:.25},model:{enable:!1,inputResolutionAreaBand:[0,921600],scaleFactor:1.5,loadWidthBytes:8}},t),y.info(\"[VideoTransformer]: Parsed config\",this.config),this.canvas=e.document.createElement(\"canvas\")}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(){var t,n,r,i,o,a,s,u,c,d,l,f,h;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=performance.now(),y.log(\"[VideoTransformer]: Init start\"),n=this.onErrorInternal.bind(this),e.prev=3,r=this.gpuContext=new Et(this.windowContext,this.config.gpu),e.next=7,r.init();case 7:if(!(i=e.sent)){e.next=10;break}return e.abrupt(\"return\",{err:i});case 10:return o=new St(this.canvas,r,n),e.next=13,o.init();case 13:if(!(a=e.sent)){e.next=16;break}return e.abrupt(\"return\",{err:a});case 16:if(s=new yt(this.config.capture,n),!(u=s.init())){e.next=20;break}return e.abrupt(\"return\",{err:u});case 20:if(c=new gt(s.getStream(),o,n,this.config.pipeline),!this.config.model.enable){e.next=31;break}return l=new Jt(this.config.model,r,n),e.next=25,l.init();case 25:if(!(f=e.sent)){e.next=28;break}return e.abrupt(\"return\",{err:f});case 28:d=l,e.next=32;break;case 31:d=new Tt;case 32:return e.next=34,c.init(d);case 34:if(!(h=e.sent)){e.next=37;break}return e.abrupt(\"return\",{err:h});case 37:return this.performanceMonitor=new Ct(this.config.monitor,this.stats.bind(this),{performanceBreach:this.onPerformanceBreach.bind(this)}),this.frameStream=s,this.pipeline=c,y.log(\"[VideoTransformer]: Init complete in \"+(performance.now()-t).toFixed(3)+\"ms\"),e.abrupt(\"return\",{info:{timeMs:performance.now()-t,gpuProperties:r.properties()}});case 44:return e.prev=44,e.t0=e.catch(3),y.warn(\"[VideoTransformer]: Failed to init\",e.t0),e.abrupt(\"return\",{err:new pt(\"VideoTransformer\",vt.Init,e.t0.message,!0)});case 48:case\"end\":return e.stop()}}),e,this,[[3,44]])})));return function(){return e.apply(this,arguments)}}(),t.start=function(e){var t,n;this.ready()?this.active()?y.warn(\"[VideoTransformer]: Start called on active instance\"):(this.sourceVideo=e,null==(t=this.frameStream)||t.start(e),null==(n=this.performanceMonitor)||n.start(),y.log(\"[VideoTransformer]: Pipeline started\")):y.log(\"[VideoTransformer]: Start called before init\")},t.stop=function(){var e,t;y.log(\"[VideoTransformer]: Stopping render pipeline\"),null==(e=this.frameStream)||e.stop(),null==(t=this.performanceMonitor)||t.stop()},t.active=function(){var e,t;return null!=(e=null==(t=this.frameStream)?void 0:t.active)&&e},t.stats=function(){var e,t,n,r,i,o;if(!this.pipeline||!this.frameStream)return{timestamp:performance.now(),frames:{source:0,source_presented:0,captured:0,received:0,transformed:0,rendered:0,missed:0,blocked:0,skipped:0,failed:0,overBudget:0},timings:{captureDelay:0,receiveDelay:0,transformTime:0,renderTime:0,endToEnd:0},resolution:{sourceHeight:0,sourceWidth:0,renderHeight:0,renderWidth:0}};var a=this.pipeline.stats(),s=a.received,u=a.transformTime,c=a.skipped,d=a.transformed,l=a.failed,f=a.overBudget,h=a.rendered,p=a.renderTime,v=a.receiveDelay,m=a.endToEnd,g=this.frameStream.stats(),y=g.captured,E=g.blocked,S=g.missed,b=g.rVFCDelay,T=null!=(e=null==(t=this.sourceVideo)?void 0:t.getVideoPlaybackQuality())?e:{totalVideoFrames:0,droppedVideoFrames:0},_=T.totalVideoFrames,C=T.droppedVideoFrames;return{timestamp:performance.now(),frames:{source:_,source_presented:_-C,captured:y,received:s,transformed:d,rendered:h,missed:S,blocked:E,skipped:c,failed:l,overBudget:f},timings:{captureDelay:b,receiveDelay:v,transformTime:u,renderTime:p,endToEnd:m},resolution:{sourceHeight:null!=(n=null==(r=this.sourceVideo)?void 0:r.videoHeight)?n:0,sourceWidth:null!=(i=null==(o=this.sourceVideo)?void 0:o.videoWidth)?i:0,renderHeight:this.canvas.height,renderWidth:this.canvas.width}}},t.renderSurface=function(){return this.canvas},t.gpuProperties=function(){var e;return null==(e=this.gpuContext)?void 0:e.properties()},t.reset=function(){var e,t,n;y.info(\"[VideoTransformer]: Resetting instance\"),null==(e=this.frameStream)||e.resetStats(),null==(t=this.pipeline)||t.resetStats(),null!=(n=this.performanceMonitor)&&n.monitoring()&&(this.performanceMonitor.stop(),this.performanceMonitor.start())},t.destroy=function(){y.info(\"[VideoTransformer]: Destroying instance\"),this.stop(),this.gpuContext=void 0,this.frameStream=void 0,this.pipeline=void 0,this.performanceMonitor=void 0},t.ready=function(){return!!(this.frameStream&&this.pipeline&&this.performanceMonitor&&this.gpuContext)},t.onPerformanceBreach=function(e){this.onErrorInternal(new pt(\"PerformanceMonitor\",e.code,e.reason,e.fatal))},t.onErrorInternal=function(e){this.stop(),this.reset(),this.listeners.error(e)},e}(),$t=function(e){return e.setAttribute(\"playsinline\",\"\"),{element:function(){return e},displayDimensions:function(){return{width:e.clientWidth,height:e.clientHeight}},videoDimensions:function(){return{width:e.videoWidth,height:e.videoHeight}},stats:function(){return{timestamp:performance.now(),droppedFrames:(0,ue.ld)(e),decodedFrames:(0,ue.xB)(e)}},visible:function(){return(0,Ue.j)(e)}}},en=[\"nvidia\"],tn=[\"ampere\",\"lovelace\"],nn=function(){function e(e,t){var n;this.initialConfig=e,this.listeners=t,this.videoTransformer=void 0,this.surface=void 0,this.statusInterval=void 0,this.scoutModeTimeout=void 0,this.config=void 0,this.disabled=!1,this.scouted=!1,this.resumeOnVisible=!1;var r={statusIntervalMs:5e3,scoutPeriodMs:5500,logLevel:v.$.WARN,gpuAllowlist:{vendors:[],architectures:[]},transformer:{}};this.config=ut(r,e.module);var i=null==(n=this.config.transformer.monitor)?void 0:n.monitorIntervalMs;void 0===e.module.scoutPeriodMs&&i&&(this.config.scoutPeriodMs=i+500),y.setConfig({enabled:!0,level:this.config.logLevel})}var t=e.prototype;return t.init=function(){var e=f()(p().mark((function e(){var t,n,r;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!this.videoTransformer){e.next=3;break}return y.debug(\"[VideoTransformerModule]: Init called on setup instance\"),e.abrupt(\"return\",void 0);case 3:if(!this.disabled){e.next=6;break}return y.warn(\"[VideoTransformerModule]: Init called, but the module is disabled\"),e.abrupt(\"return\",void 0);case 6:return e.prev=6,t=new Xt(window,this.config.transformer,{error:this.onTransformerError.bind(this)}),e.next=10,t.init();case 10:if(!(n=e.sent).err){e.next=14;break}return this.onTransformerError(n.err),e.abrupt(\"return\",void 0);case 14:if(this.videoTransformer=t,r=this.gpuAllowed(),this.logInitEvent(n,r),r){e.next=20;break}return this.disable(),e.abrupt(\"return\",void 0);case 20:return this.surface=this.createWebGpuCanvasSurface(t.renderSurface()),e.abrupt(\"return\",this.surface);case 24:return e.prev=24,e.t0=e.catch(6),y.error(\"[VideoTransformerModule]: Unhandled error encountered during init\",e.t0),this.onTransformerError(new pt(\"VideoTransformerModule\",vt.Init,\"Unhandled error during init: \"+((null==e.t0?void 0:e.t0.message)||\"unknown\"),!0)),e.abrupt(\"return\",void 0);case 29:case\"end\":return e.stop()}}),e,this,[[6,24]])})));return function(){return e.apply(this,arguments)}}(),t.start=function(e){if(this.disabled)y.log(\"[VideoTransformerModule]: Video transformer not starting: module is disabled\");else if(this.videoTransformer)if(this.videoTransformer.active())y.log(\"[VideoTransformerModule]: Start called, but transformer is already active\");else{if(an())return y.log(\"[VideoTransformerModule]: Start called, but page is hidden. Resuming on visible\"),void(this.resumeOnVisible=!0);y.log(\"[VideoTransformerModule]: Starting\"),this.videoTransformer.start(e),this.videoTransformer.active()?(this.startLogStatusEvents(this.config.statusIntervalMs),this.scout(this.config.scoutPeriodMs)):(y.log(\"[VideoTransformerModule]: Failed to start\"),this.onTransformerError(new pt(\"VideoTransformerModule\",vt.BadParameters,\"Transformer failed to start\",!0)))}else y.log(\"[VideoTransformerModule]: Video transformer not starting: start called before transformer init\")},t.stats=function(){var e,t,n=0,r=0,i=performance.now(),o=null==(e=this.videoTransformer)?void 0:e.stats().frames;return o?(n=null!=(t=o.rendered)?t:0,{timestamp:i,droppedFrames:r=o.missed+o.skipped+o.failed,decodedFrames:n}):{timestamp:i,decodedFrames:n,droppedFrames:r}},t.swapVideoSource=function(e){var t;null!=(t=this.videoTransformer)&&t.active()&&(this.videoTransformer.stop(),this.videoTransformer.start(e))},t.stop=function(){var e;null==(e=this.videoTransformer)||e.stop(),this.resumeOnVisible=!1,clearInterval(this.statusInterval),clearInterval(this.scoutModeTimeout)},t.reset=function(){var e;null==(e=this.videoTransformer)||e.reset()},t.destroy=function(){this.stop(),this.videoTransformer=void 0,this.listeners.inactive()},t.disable=function(){this.disabled=!0,this.destroy()},t.onPageVisibilityChanged=function(e,t){if(e){var n,r,i=null!=(n=null==(r=this.videoTransformer)?void 0:r.active())&&n;this.stop(),y.log(\"[VideoTransformerModule]: Page hidden. Was active: \"+i),this.resumeOnVisible=i}else y.log(\"[VideoTransformerModule]: Page visible, resumeOnVisible: \"+this.resumeOnVisible),this.resumeOnVisible&&this.start(t),this.resumeOnVisible=!1},t.scout=function(e){var t=this;window.clearTimeout(this.scoutModeTimeout),this.scouted?y.log(\"[VideoTransformerModule]: Already scouted\"):(y.log(\"[VideoTransformerModule]: Starting \"+e+\"ms scout mode before ready\"),this.scoutModeTimeout=window.setTimeout((function(){var e;t.scouted=!0,null!=(e=t.videoTransformer)&&e.active()?(y.log(\"[VideoTransformerModule]: Scout mode complete\"),t.listeners.active()):y.log(\"[VideoTransformerModule]: Scout mode complete, but video transformer is no longer active\")}),e))},t.gpuAllowed=function(){var e,t=null==(e=this.videoTransformer)?void 0:e.gpuProperties();if(!t)return y.info(\"[VideoTransformerModule]: GPU not allowed: gpu properties not found\"),!1;var n,r,i,o,a,s=(n=this.config.gpuAllowlist,o=[].concat(en,null!=(r=null==n?void 0:n.vendors)?r:[]),a=[].concat(tn,null!=(i=null==n?void 0:n.architectures)?i:[]),{allowed:function(e){var t={allowed:!0,reason:\"\"};return o.includes(e.vendor)||o.includes(\"*\")||(t={allowed:!1,reason:\"GPU Vendor not allowed. Have: \"+e.vendor+\" Need: \"+o.join(\",\")}),a.includes(e.architecture)||a.includes(\"*\")||(t={allowed:!1,reason:\"GPU Architecture not allowed. Have: \"+e.architecture+\" Need: \"+a.join(\",\")}),t}}),u=s.allowed(t);return!!u.allowed||(y.info(\"[VideoTransformerModule]: GPU not allowed: \"+u.reason),!1)},t.createWebGpuCanvasSurface=function(e){var t=function(e){return e.className=\"ivs-player-canvas-surface\",e.style.objectFit=\"contain\",e.style.overflowClipMargin=\"content-box\",e.style.overflow=\"clip\",e.style.imageRendering=\"auto\",{element:function(){return e},displayDimensions:function(){return{width:e.clientWidth,height:e.clientHeight}},videoDimensions:function(){return{width:e.clientWidth,height:e.clientHeight}},stats:function(){return{timestamp:performance.now(),droppedFrames:0,decodedFrames:0}},visible:function(){return(0,Ue.j)(e)}}}(e);return t.stats=this.stats.bind(this),t},t.startLogStatusEvents=function(e){var t,n,r=this,i=null!=(t=null==(n=this.videoTransformer)?void 0:n.stats())?t:on();clearInterval(this.statusInterval),this.statusInterval=window.setInterval((function(){var t,n;if(r.videoTransformer){var a=r.videoTransformer.stats(),s=rn(i,a),u=s.frames,c=s.timings,d=s.timestamp,l=s.resolution,f=0,h=0,p=0,v=0,m=(a.timestamp-i.timestamp)/1e3;m>0&&(f=s.frames.source/m,h=s.frames.source_presented/m,p=s.frames.captured/m,v=s.frames.rendered/m),r.printStats(s,f,h,p,v);var g=o()({status_timestamp:d,status_interval:e,surface_visible:null!=(t=null==(n=r.surface)?void 0:n.visible())&&t,source_height:l.sourceHeight,source_width:l.sourceWidth,render_height:l.renderHeight,render_width:l.renderWidth,frames_source:u.source,frames_source_presented:u.source_presented,frames_captured:u.captured,frames_missed:u.missed,frames_blocked:u.blocked,frames_skipped:u.skipped,frames_transformed:u.transformed,frames_rendered:u.rendered,frames_overbudget:u.overBudget,frames_failed:u.failed,framerate_source:f,framerate_source_presented:h,framerate_capture:p,framerate_render:v,time_capture_delay:c.captureDelay,time_receive_delay:c.receiveDelay,time_transform:c.transformTime,time_render:c.renderTime,time_end_to_end:c.endToEnd},r.gpuAnalyticsProperties());i=a,r.listeners.analytics({name:\"onGpuStatus\",data:g})}else window.clearInterval(r.statusInterval)}),e)},t.logInitEvent=function(e,t){if(e.info){var n=e.info,r=n.timeMs,i=n.gpuProperties,a=o()({gpu_time_init:r,gpu_adapter_features:i.adapterFeatures,gpu_device_features:i.deviceFeatures,gpu_wgsl_features:i.wgslFeatures,gpu_transformer_config:JSON.stringify(this.initialConfig),gpu_allowed:t},this.gpuAnalyticsProperties());this.listeners.analytics({name:\"onGpuInit\",data:a})}},t.onTransformerError=function(e){var t,n;this.stop();var r=o()({code:e.code,source:e.source,message:e.message,fatal:!0,surface_visible:null!=(t=null==(n=this.surface)?void 0:n.visible())&&t},this.gpuAnalyticsProperties());y.warn(\"[VideoTransformerModule]: Error, disabling module\",e),this.disabled=!0,this.listeners.error(r),this.listeners.analytics({name:\"onGpuError\",data:r})},t.gpuAnalyticsProperties=function(){var e,t,n,r,i,o=null==(e=this.videoTransformer)?void 0:e.gpuProperties();return{gpu_architecture:null!=(t=null==o?void 0:o.architecture)?t:\"\",gpu_description:null!=(n=null==o?void 0:o.description)?n:\"\",gpu_device:null!=(r=null==o?void 0:o.device)?r:\"\",gpu_vendor:null!=(i=null==o?void 0:o.vendor)?i:\"\"}},t.printStats=function(e,t,n,r,i){var o,a,s=e.frames,u=s.source,c=s.source_presented,d=s.captured,l=s.received,f=s.transformed,h=s.rendered,p=s.missed,v=s.blocked,m=s.skipped,g=s.failed,E=s.overBudget,S=e.timings,b=S.captureDelay,T=S.receiveDelay,_=S.transformTime/f,C=S.renderTime/h,w=T/d,k=S.endToEnd/h,I=b/d,P=\"Stats:\\nStats Interval:                        \"+this.config.statusIntervalMs+\"ms\\nDocument visible:                      \"+!document.hidden+\"\\nSurface visible:                       \"+(null!=(o=null==(a=this.surface)?void 0:a.visible())&&o)+\"\\nSource Resolution                      \"+e.resolution.sourceWidth+\"x\"+e.resolution.sourceHeight+\"\\nRender Resolution                      \"+e.resolution.renderWidth+\"x\"+e.resolution.renderHeight+\"\\nSource Total Framerate:                \"+t.toFixed(1)+\"\\nSource Presented Framerate:            \"+n.toFixed(1)+\"\\nCapture Framerate:                     \"+r.toFixed(1)+\"\\nRender Framerate:                      \"+i.toFixed(1)+\"\\nSource Total frames:                   \"+u+\"\\nSource Presented frames:               \"+c+\"\\nSource Dropped frames:                 \"+(u-c)+\"\\nCaptured frames:                       \"+d+\"\\nReceived frames:                       \"+l+\"\\nTransformed frames:                    \"+f+\"\\nRendered frames:                       \"+h+\"\\nMissed frames:                         \"+p+\"\\nBlocked frames:                        \"+v+\"\\nSkipped frames:                        \"+m+\"\\nOverbudget frames:                     \"+E+\"\\nFailed frames:                         \"+g+\"\\nAverage rVFC capture delay:            \"+I.toFixed(3)+\"ms\\nAverage frame receive delay:           \"+w.toFixed(3)+\"ms\\nAverage frame transform time:          \"+_.toFixed(3)+\"ms\\nAverage frame render time:             \"+C.toFixed(3)+\"ms\\nAverage frame end-to-end time:         \"+k.toFixed(3)+\"ms\\n\";y.log(\"[VideoTransformerModule]: \"+P)},e}(),rn=function(e,t){var n={timestamp:t.timestamp,resolution:o()({},t.resolution),frames:{source:0,source_presented:0,captured:0,received:0,transformed:0,rendered:0,missed:0,blocked:0,skipped:0,failed:0,overBudget:0},timings:{captureDelay:0,receiveDelay:0,transformTime:0,renderTime:0,endToEnd:0}};return[\"frames\",\"timings\"].forEach((function(r){for(var i=0,o=Object.entries(t[r]);i<o.length;i++){var a=o[i],s=a[0],u=a[1];n[r][s]=u-e[r][s]}})),n},on=function(){return{timestamp:performance.now(),frames:{source:0,source_presented:0,captured:0,received:0,transformed:0,rendered:0,missed:0,blocked:0,skipped:0,failed:0,overBudget:0},timings:{captureDelay:0,receiveDelay:0,transformTime:0,renderTime:0,endToEnd:0},resolution:{sourceHeight:0,sourceWidth:0,renderHeight:0,renderWidth:0}}},an=function(){var e=(0,Ue.sQ)(document).hidden;return document[e]},sn=function(e,t){var n=e,r=t,i=0;return{update:function(e,t){t!==r&&(i=(e-n)/(t-r)*1e3,n=e,r=t)},framerate:function(){return i}}},un=function(e){return e.video=\"video\",e.canvas=\"canvas\",e.debug_both=\"debug_both\",e}({}),cn=function(){function e(e){this.context=e,this.video=void 0,this.canvas=void 0,this.surfaceContainer=void 0,this.framerateTracker=void 0,this.surfaceContainer=e.createElement(\"div\");var t=e.createElement(\"video\");this.video=$t(t),this.moveVideoToRenderSurface();var n=this.video.stats();this.framerateTracker=sn(n.decodedFrames,n.timestamp)}var t=e.prototype;return t.setVideo=function(e){if(this.video.element()!==e){this.activeSurface()!==un.video&&this.hideSurface(e);var t=$t(e),n=t.stats();this.framerateTracker=sn(n.decodedFrames,n.timestamp),this.video=t}},t.moveVideoToRenderSurface=function(){this.replaceElement(un.video,this.video.element())},t.setCanvas=function(e){this.canvas!==e&&(this.activeSurface()!==un.canvas&&this.hideSurface(e.element()),this.replaceElement(un.canvas,e.element()),this.canvas=e)},t.setActiveSurface=function(e){if(e!==this.activeSurface())if(e===un.canvas){if(!this.canvas)return void console.warn(\"[RenderSurface]: Tried to set canvas surface to active, but the canvas surface is undefiend.\");this.hideSurface(this.video.element()),this.showSurface(this.canvas.element())}else if(e===un.video){var t;this.hideSurface(null==(t=this.canvas)?void 0:t.element()),this.showSurface(this.video.element())}else if(e===un.debug_both){var n;this.showSurface(null==(n=this.canvas)?void 0:n.element()),this.showSurface(this.video.element())}},t.surface=function(){return this.surfaceContainer},t.videoElement=function(){return this.video.element()},t.displayDimensions=function(){return this.video.displayDimensions()},t.videoDimensions=function(){return this.video.videoDimensions()},t.stats=function(){var e=this.video.stats();return this.framerateTracker.update(e.decodedFrames,e.timestamp),e},t.framerate=function(){return this.framerateTracker.framerate()},t.activeSurface=function(){var e;return null!=(e=this.canvas)&&e.visible()?un.canvas:un.video},t.safeAppendSurface=function(e){try{this.surfaceContainer.appendChild(e)}catch(e){console.warn(\"[RenderSurface]: Failed to append surface to container\",e)}},t.safeRemoveSurface=function(e){try{var t=this.surfaceContainer.querySelector(e);t&&this.surfaceContainer.removeChild(t)}catch(e){console.warn(\"[RenderSurface]: Failed to remove surface from container\",e)}},t.replaceElement=function(e,t){this.safeRemoveSurface(e),this.safeAppendSurface(t)},t.hideSurface=function(e){e&&(e.style.visibility=\"hidden\",e.style.position=\"absolute\",e.style.inset=\"0\")},t.showSurface=function(e){e&&(e.style.visibility=\"inherit\",e.style.position=\"inherit\",e.style.inset=\"inherit\")},e}(),dn=function(){function e(){this.emitter=new ot.TypedEmitter({}),this.queue=new Array}e.getInstance=function(){return e.gInstance||(e.gInstance=new e),e.gInstance};var t=e.prototype;return t.registerMetricsCallback=function(e){this.emitter.on(\"newMetrics\",e)},t.unregisterMetricsCallback=function(e){this.emitter.off(\"newMetrics\",e)},t.enqueue=function(e){this.queue.push(e),this.emitter.emit(\"newMetrics\")},t.dequeueAll=function(){var e=this.queue;return this.queue=new Array,e},e}();function ln(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}dn.gInstance=void 0;var fn=function(){function e(t,n){var i,s,u=this;this.worker=void 0,this.id=void 0,this.emitter=new be,this.seekTime=null,this.paused=!0,this.isLoaded=!1,this.autoPlayOptions=null,this.mediaSinkManager=void 0,this.experiments={},this.adjustments=void 0,this.enableRemoteSearch=void 0,this.isQualitySupported=void 0,this.onvisibilitychange=void 0,this.onmessage=function(e){return u.onWorkerMessage(e)},this.onOnline=function(){return u.postMessage(\"onOnline\")},this.onOffline=function(){return u.postMessage(\"onOffline\")},this.pauseHiddenSilentTab=void 0,this.state=void 0,this.workerMessageProcessors=[c],this.configManager=void 0,this.deviceConfigMetricsHelper=dn.getInstance(),this.deviceConfigEmitMetricsBound=this.emitDeviceConfigManagerMetrics.bind(this),this.daterangeTagAssembler=void 0,this.videoTransformerModule=void 0,this.renderSurface=new cn(document),this.startCapture=void 0,this.stopCapture=void 0,this.requestCaptureAnalytics=void 0,e.instanceCount+=1,this.worker=n,this.id=e.instanceId++,this.isQualitySupported=t.isQualitySupported||Ue.h3,this.onvisibilitychange=function(){return u.onVisibilityChange()},this.enableRemoteSearch=t.enableRemoteSearch||!1;var l,h=(0,r.cp)();if(this.pauseHiddenSilentTab=h.chrome&&63===h.major||h.opera,this.adjustments=(l=null!=(i=null==(s=t.webviewHost)?void 0:s.adjustments)?i:{},o()({},tt,l)),this.mediaSinkManager=new Je(this,this.enableRemoteSearch,this.adjustments,this.renderSurface.videoElement()),d.isSupported()){var v=new d;this.workerMessageProcessors.push(v.processor)}var m,g,b,T,_=(m={architecture:\"\",description:\"\",device:\"\",vendor:\"\"},g=!1,b=null,{init:function(){return f()(p().mark((function e(){var t;return p().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(g=!1,b=E.gpu_pending,e.prev=2,navigator.gpu){e.next=7;break}return y.warn(E.gpu_unavailable),b=E.gpu_unavailable,e.abrupt(\"return\");case 7:return e.next=9,navigator.gpu.requestAdapter();case 9:if(t=e.sent){e.next=14;break}return y.warn(E.gpu_adapter_unavailable),b=E.gpu_adapter_unavailable,e.abrupt(\"return\");case 14:if(t.info){e.next=18;break}return y.warn(E.gpu_adapterinfo_undefined),b=E.gpu_adapterinfo_undefined,e.abrupt(\"return\");case 18:m=t.info,b=null,g=!0,e.next=27;break;case 23:e.prev=23,e.t0=e.catch(2),y.warn(E.gpu_error,e.t0),b=E.gpu_error+\" \"+((null==e.t0?void 0:e.t0.message)||\"unknown\");case 27:case\"end\":return e.stop()}}),e,null,[[2,23]])})))()},process:function(e){if(!e)return e;var t=e.type,n=e.arg,r=t===a.a.ANALYTICS_EVENT,i=n&&(\"video-play\"===n.name||\"minute-watched\"===n.name);return r&&i?(n.properties.gpu_supported=g,n.properties.gpu_unsupported_reason=b,n.properties.gpu_architecture=m.architecture,n.properties.gpu_description=m.description,n.properties.gpu_device=m.device,n.properties.gpu_vendor=m.vendor,e):e}});_.init(),this.workerMessageProcessors.push(_.process.bind(_)),void 0!==t.serviceWorker&&(\"serviceWorker\"in navigator||(Re.warn(\"Service workers are not supported.\"),0))&&(function(e){Me=Ne(e)}(t.serviceWorker),null==(T=xe())||T.registerAndActivate()),this.state={averageBitrate:0,bandwidthEstimate:0,looping:!1,autoQualityMode:!0,volume:1,liveLatency:0,liveLowLatencyEnabled:!0,liveLowLatency:!1,statistics:{}},this.resetState(),this.attachHandlers(),this.checkDebugCaptureEnabled();var C=[];(0,S.bz)()&&C.push(\"hevc\"),(0,S.dq)()&&C.push(\"av01\"),this.configManager=new ct({},this.onConfigChanged.bind(this)),this.onConfigChanged(),this.postMessage(\"create\",[{mseSupported:(0,S.aP)(),keySystem:void 0!==t.keySystem?t.keySystem:N(h),browserContext:o()({},h,{webviewHost:t.webviewHost}),codecs:C,testOnly:t.testOnly,playerFramework:t.playerFramework,buildDistId:\"npm\"},this.configManager.getConfigSnapshot()]);var w=(0,Ue.sQ)(document).hidden;this.postMessage(\"setVisible\",[!document[w]]),this.deviceConfigMetricsHelper.registerMetricsCallback(this.deviceConfigEmitMetricsBound),this.emitDeviceConfigManagerMetrics()}var t=e.prototype;return t.delete=function(){var t,n,r=this;null==(t=xe())||t.destroy();var i=(0,Ue.sQ)(document).visibilityChange;document.removeEventListener(i,this.onvisibilitychange),window.removeEventListener(\"online\",this.onOnline),window.removeEventListener(\"offline\",this.onOffline),this.emitter.removeAllListeners(),this.emitter.on(et.DESTROY,(function(){r.mediaSinkManager.destroy(),r.emitter.removeAllListeners(),r.worker.removeEventListener(\"message\",r.onmessage)})),this.configManager.delete(),null==(n=this.videoTransformerModule)||n.destroy(),this.videoTransformerModule=void 0,this.postMessage(\"delete\"),e.instanceCount>0&&(e.instanceCount-=1),this.deviceConfigMetricsHelper.unregisterMetricsCallback(this.deviceConfigEmitMetricsBound)},t.attachHTMLVideoElement=function(e){var t,n;null==(t=this.mediaSinkManager)||t.destroy(),this.mediaSinkManager=new Je(this,this.enableRemoteSearch,this.adjustments,e),this.processVideoElementAttributes(e),this.renderSurface.setVideo(e),null==(n=this.videoTransformerModule)||n.swapVideoSource(e),this.configManager.getConfigSnapshot().features.gpu.flags.enable_render_surface&&this.renderSurface.moveVideoToRenderSurface()},t.getHTMLVideoElement=function(){return this.renderSurface.videoElement()},t.getVideoRenderSurface=function(){if(this.configManager.getConfigSnapshot().features.gpu.flags.enable_render_surface)return this.renderSurface.surface()},t.load=function(t,n){var r,i=this;void 0===n&&(n=\"\"),null==(r=xe())||r.configure(),this.trySetupVideoTransformer(),this.postMessage(\"load\",[t,n]),this.autoPlayOptions&&this.postMessage(\"playIntent\"),this.configManager.initDeviceConfigManager({canRefreshNow:e.canDeviceConfigManagerRefreshNowCallback,emitMetrics:e.emitDeviceConfigManagerMetricsCallback,emitAnalytics:function(e,t){i.sendConfigManagerDeviceConfigAnalytics(e,t)}});var o=this.getDeviceConfigPropertyHolder();o&&o.getJsonValue(\"sr_model_f16\")},t.play=function(){this.postMessage(\"playIntent\"),this.mediaSinkManager.captureGesture(),this.paused=!1,this.attemptPlay()},t.setAutoplay=function(e){this.autoPlayOptions=e?{attemptMutedRetry:!0}:null},t.setAutoPlayOptions=function(e){this.autoPlayOptions=e},t.getExperiments=function(){return this.experiments},t.setExperiment=function(e,t){this.setExperimentData({id:e,assignment:t,version:0,type:\"\"})},t.setExperimentData=function(e){this.configManager.setExperiment(e.id,e.assignment),this.postMessage(\"setExperiment\",[e])},t.pause=function(){this.paused=!0,this.postMessage(\"pause\")},t.isPaused=function(){return this.paused},t.seekTo=function(e){this.seekTime=e,this.postMessage(\"seekTo\",[e])},t.isSeeking=function(){return null!==this.seekTime},t.isAutoplay=function(){return!!this.autoPlayOptions},t.getDuration=function(){return this.state.duration},t.getStartOffset=function(){return this.state.startOffset||0},t.getPosition=function(){return null===this.seekTime?this.mediaSinkManager.getCurrentSink().getCurrentTime():this.seekTime},t.getSyncTime=function(){return this.state.syncTime},t.getBuffered=function(){return this.mediaSinkManager.getCurrentSink().buffered()},t.getBufferedRanges=function(){return this.postMessage(\"updateBufferedRanges\",[]),this.state.trackBufferedRanges},t.getSinkBufferedRanges=function(){var e=this.mediaSinkManager.getCurrentSink();return{audio:e.getBufferedRanges(\"audio\"),video:e.getBufferedRanges(\"video\")}},t.getBufferDuration=function(){return this.state.bufferedPosition-this.getPosition()},t.getState=function(){return this.state.state},t.getVideoWidth=function(){return this.getHTMLVideoElement().videoWidth},t.getVideoHeight=function(){return this.getHTMLVideoElement().videoHeight},t.getVideoFrameRate=function(){return this.state.statistics.framerate},t.getVideoBitRate=function(){return this.state.statistics.bitrate},t.getAverageBitrate=function(){return this.state.averageBitrate},t.getBandwidthEstimate=function(){return this.state.bandwidthEstimate},t.getPath=function(){return this.state.path},t.getProtocol=function(){return this.state.protocol},t.getVersion=function(){return\"1.34.1\"},t.isLiveLowLatency=function(){return this.state.liveLowLatencyEnabled&&this.state.liveLowLatency},t.isLooping=function(){return this.state.looping},t.setLogLevel=function(e){!function(e){var t={debug:!1,log:!1,info:!1,warn:!1,error:!1},n=function(e,n){for(var r,i=function(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return we(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?we(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(e);!(r=i()).done;){var o=r.value;t[o]=n}};switch(e.level){case\"debug\":n([\"debug\",\"log\",\"info\",\"warn\",\"error\"],!0);break;case\"log\":n([\"log\",\"info\",\"warn\",\"error\"],!0);break;case\"info\":n([\"info\",\"warn\",\"error\"],!0);break;case\"warn\":n([\"warn\",\"error\"],!0);break;case\"error\":n([\"error\"],!0)}!function(e){ke.enabled=e.enabled,ke.levels=o()({},e.levels),Ie.emit(\"logConfigUpdated\",e)}({enabled:e.enabled,levels:t})}({enabled:!0,level:e}),this.postMessage(\"setLogLevel\",[e])},t.setLooping=function(e){this.state.looping=e,this.postMessage(\"setLooping\",[e])},t.isMuted=function(){return this.mediaSinkManager.getCurrentSink().isMuted()},t.setMuted=function(e){this.mediaSinkManager.getCurrentSink().setMuted(e)},t.setVolume=function(e){this.state.volume=e,this.postMessage(\"setVolume\",[this.state.volume])},t.getVolume=function(){return this.state.volume},t.getQuality=function(){return this.state.quality},t.setQuality=function(e,t){void 0===t&&(t=!1),this.getHTMLVideoElement().controls||(this.postMessage(\"setQuality\",[e,t]),this.state.autoQualityMode=!1)},t.getQualities=function(){return this.state.qualities},t.setAuthToken=function(e){this.postMessage(\"setAuthToken\",[e])},t.isAutoQualityMode=function(){return this.state.autoQualityMode},t.setAutoQualityMode=function(e){this.state.autoQualityMode=e,this.postMessage(\"setAutoQualityMode\",[e])},t.setAutoInitialBitrate=function(e){this.postMessage(\"setAutoInitialBitrate\",[e])},t.setAutoMaxQuality=function(e){this.postMessage(\"setAutoMaxQuality\",[e])},t.setAutoMaxBitrate=function(e){this.postMessage(\"setAutoMaxBitrate\",[e])},t.setAutoMaxVideoSize=function(e,t){this.postMessage(\"setAutoMaxVideoSize\",[e,t])},t.setAutoViewportSize=function(e,t){this.postMessage(\"setAutoViewportSize\",[e,t])},t.getPlaybackRate=function(){return this.mediaSinkManager.getCurrentSink().getPlaybackRate()},t.setPlaybackRate=function(e){return this.mediaSinkManager.getCurrentSink().setPlaybackRate(e)},t.setClientId=function(e){this.postMessage(\"setClientId\",[e])},t.setDeviceId=function(e){this.postMessage(\"setDeviceId\",[e])},t.setLiveSpeedUpRate=function(e){this.postMessage(\"setLiveSpeedUpRate\",[e])},t.setPlayerType=function(e){this.postMessage(\"setPlayerType\",[e])},t.setLiveMaxLatency=function(e){this.postMessage(\"setLiveMaxLatency\",[e])},t.setLiveLowLatencyEnabled=function(e){this.state.liveLowLatencyEnabled=e,this.postMessage(\"setLiveLowLatencyEnabled\",[e])},t.setRebufferToLive=function(e){var t;null!=(t=xe())&&null!=(t=t.getDriftDetectionConfig())&&t.enabled||this.postMessage(\"setRebufferToLive\",[e])},t.setVisible=function(e){this.postMessage(\"setVisible\",[e])},t.setInitialBufferDuration=function(e){this.postMessage(\"setInitialBufferDuration\",[e])},t.addEventListener=function(e,t){this.emitter.on(e,t)},t.removeEventListener=function(e,t){this.emitter.removeListener(e,t)},t.getDroppedFrames=function(){return this.state.statistics.droppedFrames},t.getDecodedFrames=function(){return this.state.statistics.decodedFrames},t.getDisplayWidth=function(){return this.renderSurface.displayDimensions().width},t.getDisplayHeight=function(){return this.renderSurface.displayDimensions().height},t.getSessionId=function(){return this.state.sessionId},t.getChannelMetadata=function(){return this.state.channelMetadata},t.getSessionData=function(){return this.state.sessionData},t.getLiveLatency=function(){return this.state.liveLatency},t.isProtected=function(){return this.mediaSinkManager.isProtected()},t.startRemotePlayback=function(){this.postMessage(\"startRemotePlayback\")},t.endRemotePlayback=function(){this.postMessage(\"endRemotePlayback\")},t.setPlatformName=function(e){this.postMessage(\"setPlatformName\",[e])},t.setRequestCredentials=function(e){this.postMessage(\"setRequestCredentials\",[e])},t.setSinkType=function(e){this.postMessage(\"setSinkType\",[e])},t.onSinkTimeUpdate=function(){if(null===this.seekTime){var e=this.mediaSinkManager.getCurrentSink(),t=this.renderSurface.stats(),n=t.droppedFrames,r=t.decodedFrames,i=this.renderSurface.displayDimensions(),o=i.height,s=i.width;this.postMessage(\"onClientSinkUpdate\",[{currentTime:e.getCurrentTime(),decodedFrames:r,droppedFrames:n,framerate:this.renderSurface.framerate(),bufferDuration:e.bufferDuration(),displayHeight:o,displayWidth:s}]),this.setAutoViewportSize(s*window.devicePixelRatio,o*window.devicePixelRatio),this.emitter.emit(a.a.TIME_UPDATE,e.getCurrentTime())}},t.onSinkBufferUpdate=function(){this.emitter.emit(a.a.BUFFER_UPDATE)},t.onSinkDurationChanged=function(e){this.postMessage(\"onClientSinkDurationChanged\",[e])},t.onSinkEnded=function(){this.postMessage(\"onClientSinkEnded\")},t.onSinkIdle=function(){this.postMessage(\"onClientSinkIdle\")},t.onSinkPlaying=function(e){this.postMessage(\"onClientSinkPlaying\"),e&&this.play()},t.onSinkStop=function(e){var t,n,r=(0,Ue.sQ)(document).hidden;if(document[r])this.postMessage(\"pause\");else if(e){if(!this.isMuted()&&(null==(t=null==(n=this.autoPlayOptions)?void 0:n.attemptMutedRetry)||t))return this.setMuted(!0),this.mediaSinkManager.getCurrentSink().play(),void this.emitter.emit(a.a.AUDIO_BLOCKED);this.pause(),this.emitter.emit(a.a.PLAYBACK_BLOCKED)}else this.pause()},t.onSinkReset=function(){this.postMessage(\"onClientSinkReset\")},t.onSinkError=function(e){var t=e.value,n=e.code,r=e.message;this.postMessage(\"onClientSinkError\",[t,n,r])},t.onSinkRecoverableError=function(e){var t=e.value,n=e.code,r=e.message;this.postMessage(\"onClientSinkRecoverableError\",[t,n,r])},t.onSinkVolumeChanged=function(e,t){this.getHTMLVideoElement().controls&&t&&this.setVolume(e),this.emitter.emit(a.a.VOLUME_CHANGED,this.state.volume)},t.onSinkMutedChanged=function(e){this.postMessage(\"setMuted\",[e]),this.emitter.emit(a.a.MUTED_CHANGED)},t.onSinkPlaybackRateChanged=function(e){this.postMessage(\"setPlaybackRate\",[e])},t.onPassthroughSinkDataCue=function(e){var t;null==(t=this.daterangeTagAssembler)||t.addCue(e)},t.onPassthroughSinkMetadata=function(e,t,n,r,i){this.emitter.emit(a.a.TEXT_METADATA_CUE,{description:r,endTime:t,startTime:e,text:n,owner:i,type:\"TextMetadataCue\"})},t.onPassthroughSinkPropertyChanged=function(e,t){this.postMessage(\"onClientSinkPassthroughPropertyChanged\",[e,t])},t.onSinkControlsChanged=function(e){this.postMessage(\"setControls\",[e])},t.onSinkGapJump=function(e){this.postMessage(\"onClientSinkGapJump\",[e])},t.onRemoteDevice=function(e){this.emitter.emit(e?Q.G.AVAILABLE:Q.G.UNAVAILABLE)},t.onRemoteReconnect=function(){this.startRemotePlayback()},t.onSessionError=function(){this.postMessage(\"onClientSinkError\",[b.pn,0,\"Chromecast session error\"])},t.onLoadMediaError=function(){this.postMessage(\"onClientSinkError\",[b.pn,0,\"Chromecast load media failed\"])},t.onUserCancel=function(){this.endRemotePlayback(),this.emitter.emit(Q.G.SESSION_ENDED)},t.onSegmentDiscontinuity=function(){this.mediaSinkManager.onSegmentDiscontinuity()},t.onSessionStop=function(){this.endRemotePlayback(),this.emitter.emit(Q.G.SESSION_ENDED)},t.onSessionStarted=function(e){this.emitter.emit(Q.G.SESSION_STARTED,e)},e.canDeviceConfigManagerRefreshNowCallback=function(){return e.instanceCount>0},e.emitDeviceConfigManagerMetricsCallback=function(e){dn.getInstance().enqueue(e)},t.emitDeviceConfigManagerMetrics=function(){for(var e,t=function(e,t){var n=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if(\"string\"==typeof e)return ln(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===n&&e.constructor&&(n=e.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(e):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ln(e,t):void 0}}(e))||t&&e&&\"number\"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}(this.deviceConfigMetricsHelper.dequeueAll());!(e=t()).done;){var n=e.value;this.sendConfigManagerDeviceConfigAnalytics(\"ivs_devconf_ops_metrics\",n)}},t.sendConfigManagerDeviceConfigAnalytics=function(e,t){var n=(0,Ue.dl)(t);n&&this.postMessage(\"onDeviceConfigAnalytics\",[e,n])},t.attemptPlay=function(){var e=(0,Ue.sQ)(document).hidden;!document[e]&&this.isLoaded&&this.postMessage(\"play\")},t.postMessage=function(e,t,n){void 0===n&&(n=[]),this.worker.postMessage({id:this.id,funcName:e,args:t},n)},t.resetState=function(){Object.assign(this.state,{state:Y.p.IDLE,quality:{name:\"\",group:\"\",codecs:\"\",bitrate:0,width:0,height:0,framerate:0},qualities:[],duration:0,startOffset:0,sessionData:{},volume:1,statistics:{bitrate:0,framerate:0,droppedFrames:0,decodeFrames:0,renderedFrames:0},trackBufferedRanges:{audio:[],video:[]},channelMetadata:[]}),this.emitter.emit(a.a.DURATION_CHANGED,0),this.seekTime=null,this.isLoaded=!1},t.attachHandlers=function(){var e=this;this.worker.addEventListener(\"message\",this.onmessage);var t=(0,Ue.sQ)(document).visibilityChange;document.addEventListener(t,this.onvisibilitychange),window.addEventListener(\"online\",this.onOnline),window.addEventListener(\"offline\",this.onOffline);var n=this.emitter;n.on(a.a.VOLUME_CHANGED,(function(){return e.onVolumeChanged()})),n.on(a.a.MUTED_CHANGED,(function(){return e.onMutedChanged()})),n.on(a.a.SEEK_COMPLETED,(function(){return e.onSeekCompleted()})),n.on(a.a.ERROR,(function(){return e.onError()})),n.on(a.a.SESSION_DATA,(function(t){return e.onSessionData(t)})),n.on(a.a.SEGMENT_DISCONTINUITY,(function(){return e.onSegmentDiscontinuity()})),n.on(et.STATE_CHANGED,(function(t){return e.onStateChanged(t)})),n.on(et.MEDIA_SINK_RPC,(function(t){return e.mediaSinkManager.applyRPC(t)})),n.on(et.CONFIGURE,(function(t){e.mediaSinkManager.configure(t),e.setSinkType(t.mode)})),n.on(et.RESET,(function(){var t,n;null==(t=e.videoTransformerModule)||t.stop(),null==(n=e.videoTransformerModule)||n.reset(),e.mediaSinkManager.reset()})),n.on(q.C.ID3,(function(t){return e.onID3(t)})),n.on(et.GET_EXPERIMENTS,(function(t){e.experiments=t})),n.on(et.PROPERTY_CHANGED,(function(t){var n=t.key,r=t.value;e.state[n]=function(e,t){return\"syncTime\"===e&&(t*=1e3),t}(n,r)})),n.on(et.SYNC_TIME_CHANGED,(function(t){e.emitter.emit(a.a.SYNC_TIME_UPDATE,1e3*t)})),n.on(et.BUFFERED_RANGES,(function(t){e.state.trackBufferedRanges=t})),n.on(et.LOG_MESSAGE,(function(e){var t=e.level,n=e.message;return console[t](n)}))},t.onVolumeChanged=function(){var e=(0,Ue.sQ)(document).hidden;this.pauseHiddenSilentTab&&document[e]&&0===this.getVolume()&&this.postMessage(\"pause\")},t.onMutedChanged=function(){var e=(0,Ue.sQ)(document).hidden;this.pauseHiddenSilentTab&&document[e]&&this.isMuted()&&this.postMessage(\"pause\")},t.onSeekCompleted=function(){this.seekTime=null},t.onError=function(){this.paused=!0},t.onStateChanged=function(e){var t=this;switch(e){case Y.p.READY:var n=this.isQualitySupported;if(this.adjustments.abrTranscodesOnly&&this.state.qualities.length>1){var r=this.state.qualities.slice().sort((function(e,t){return t.bitrate-e.bitrate}));\"chunked\"!==r[0].group?n=function(e){return\"chunked\"!==e.group&&t.isQualitySupported(e)}:this.setAutoMaxQuality(r[1])}var i=(0,Ue.YH)(this.state.qualities,n);this.state.qualities=i.supported,i.unsupported.forEach((function(e){return t.postMessage(\"removeQuality\",[e])})),this.isLoaded=!0,this.autoPlayOptions&&this.play(),this.paused||this.attemptPlay();break;case Y.p.IDLE:var o;null==(o=this.videoTransformerModule)||o.stop();break;case Y.p.PLAYING:this.tryStartVideoTransformer();break;case Y.p.ENDED:this.paused=!0}this.emitter.emit(a.a.STATE_CHANGED,e),this.emitter.emit(e)},t.onID3=function(e){var t=this;e.forEach((function(e){if(\"TXXX\"===e.id&&\"segmentmetadata\"===e.desc&&e.info.length){var n=(0,Ue.N8)(e.info[0]);if(Object.prototype.hasOwnProperty.call(n,\"stream_offset\")){var r=Number(n.stream_offset);isNaN(r)||(t.state.startOffset=r-t.getPosition())}}}))},t.onVisibilityChange=function(){var e,t=(0,Ue.sQ)(document).hidden,n=document[t];this.paused||document[t]||this.attemptPlay(),this.pauseHiddenSilentTab&&!this.paused&&n&&(this.isMuted()||0===this.getVolume())&&this.postMessage(\"pause\"),null==(e=this.videoTransformerModule)||e.onPageVisibilityChanged(n,this.getHTMLVideoElement()),(0,r.cp)().firefox||this.postMessage(\"setVisible\",[!n])},t.onSessionData=function(e){Object.assign(this.state,e)},t.onConfigChanged=function(){var e,t=this.configManager.getConfigSnapshot();t.features.gpu.flags.enable_render_surface&&this.renderSurface.moveVideoToRenderSurface(),this.setupDaterangeTagAssembler(null!=(e=t.features.passthroughDaterangeTags)&&e),this.postMessage(\"updatePlayerConfiguration\",[t])},t.setupDaterangeTagAssembler=function(e){var t,n,r,i,s=this;e?this.daterangeTagAssembler||(this.daterangeTagAssembler=(t=function(e){var t=e.attributes[\"X-TV-TWITCH-STREAM-SOURCE\"];void 0!==t&&s.emitter.emit(a.a.STREAM_SOURCE_CUE,{type:\"StreamSourceCue\",streamSource:t}),s.emitter.emit(a.a.METADATA,{type:\"text/json\",data:(0,Ue.dl)(o()({ID:e.ID,CLASS:e.CLASS},e.attributes))})},n=new Map,r=function(e,t){return Array.from(e.attributes).every((function(e){return void 0!==t.attributes[e]}))},i=function(e,n,i,o){for(var a=0;a<n.length;++a){var s=n[a];if(s.CLASS===e.CLASS&&void 0===s.attributes[i])return s.attributes[i]=o,r(e,s)&&(n.splice(a,1),t(s)),!0}return!1},{addCue:function(e){var o,a,s=null==(o=e.value)?void 0:o.key,u=null==(a=e.value)?void 0:a.data;if(void 0!==s&&void 0!==u)for(var c=0;c<$e.length;++c){var d=$e[c];if(d.attributes.has(s)){var l=e.startTime+\"-\"+e.endTime,f=n.get(l);if(f||(f=[],n.set(l,f)),!i(d,f,s,u)){var h,p={ID:\"com.apple.quicktime.FAKE-HLS-\"+Xe++,CLASS:d.CLASS,attributes:(h={},h[s]=u,h.DURATION=\"\"+(e.endTime-e.startTime),h[\"START-DATE\"]=(new Date).toISOString(),h)};r(d,p)?t(p):f.push(p)}}}}})):this.daterangeTagAssembler=void 0},t.trySetupVideoTransformer=function(){var e=this;if(!this.videoTransformerModule){var t=this.configManager.getConfigSnapshot().features.gpu;if(t.flags.init_transformer||t.flags.run_transformer){var n=function(t){e.renderSurface.setActiveSurface(un.video),y.warn(\"[MediaPlayer]: Video Transformer error, switching render surface to video\",t)},r=function(t){y.debug(\"[MediaPlayer]: Sending analytics event\",t),e.postMessage(t.name,[t.data])};this.videoTransformerModule=new nn(t,{error:n,analytics:r,active:function(){var n,r=un.video;t.flags.allow_canvas_visible&&(r=un.canvas,null!=(n=t.render)&&n.debug&&(r=un.debug_both)),e.renderSurface.setActiveSurface(r)},inactive:function(){e.renderSurface.setActiveSurface(un.video)}}),this.videoTransformerModule.init().then((function(n){n&&e.videoTransformerModule&&(t.flags.add_canvas_to_surface&&(y.debug(\"[MediaPlayer]: Adding canvas to render surface\"),e.renderSurface.setCanvas(n)),e.getState()===Y.p.PLAYING&&e.tryStartVideoTransformer())})).catch((function(t){var i;null==(i=e.videoTransformerModule)||i.disable(),y.warn(\"[MediaPlayer]: Unhanled error initializing the Video Transformer\");var o={source:\"MediaPlayer\",code:vt.Init,message:\"Unhandled error initializing the Video Transformer: \"+((null==t?void 0:t.message)||\"unknown\"),fatal:!0,gpu_architecture:\"\",gpu_description:\"\",gpu_device:\"\",gpu_vendor:\"\",surface_visible:!1};n(),r({name:\"onGpuError\",data:o})}))}}},t.tryStartVideoTransformer=function(){this.videoTransformerModule&&this.configManager.getConfigSnapshot().features.gpu.flags.run_transformer&&this.videoTransformerModule.start(this.getHTMLVideoElement())},t.onWorkerMessage=function(e){var t=e.data;if(t&&t.id===this.id){var n=this.workerMessageProcessors.reduce((function(e,t){return t(e)}),t),r=n.type,i=n.arg;void 0!==t.arg?this.emitter.emit(r,i):this.emitter.emit(r)}},t.processVideoElementAttributes=function(e){if(e.hasAttribute(\"autoplay\")&&(e.removeAttribute(\"autoplay\"),this.setAutoplay(!0)),e.hasAttribute(\"playbackRate\")){var t,n=parseFloat(null!=(t=e.getAttribute(\"playbackRate\"))?t:\"1.0\");if(!isNaN(n)){var r=(0,Ue.qE)(n,.25,2);this.setPlaybackRate(r)}e.removeAttribute(\"playbackRate\")}if(e.hasAttribute(\"src\")){var i=e.src;(0,Ue.Pr)(e),this.load(i)}if(e.hasAttribute(\"loop\")&&(e.removeAttribute(\"loop\"),this.setLooping(!0)),e.hasAttribute(\"muted\")&&(e.removeAttribute(\"muted\"),this.setMuted(!0)),e.hasAttribute(\"volume\")){var o,a=parseFloat(null!=(o=e.getAttribute(\"volume\"))?o:\"1.0\");isNaN(a)||this.setVolume((0,Ue.qE)(a,0,1)),e.removeAttribute(\"volume\")}},t.checkDebugCaptureEnabled=function(){},t.getDeviceConfigPropertyHolder=function(){return this.configManager.getDeviceConfigPropertyHolder()},e}();fn.instanceCount=0,fn.instanceId=0;var hn=n(573),pn=function(){function e(e){var t=this;this.workerPort=void 0,this.emitter=void 0,this.messageQueue=void 0,this.workerPort={postMessage:this.postMessageFromWorker.bind(this),onmessage:function(){}},this.emitter=new Se.EventEmitter,this.messageQueue=new hn.o,this.loadScript(e,(function(e){return t.applyWorkerEnv(e)}))}var t=e.prototype;return t.postMessage=function(e){this.messageQueue?this.messageQueue.push(e):this.postMessageToWorker(e)},t.addEventListener=function(e,t){this.emitter.on(e,t)},t.removeEventListener=function(e,t){this.emitter.off(e,t)},t.onmessage=function(){},t.onmessageerror=function(){},t.onerror=function(){},t.terminate=function(){},t.dispatchEvent=function(){return!0},t.loadScript=function(e,t){var n=this,r=new XMLHttpRequest;r.open(\"GET\",e),r.addEventListener(\"load\",(function(){r.status>=200&&r.status<400?t(r.response):n.emitter.emit(\"error\",new Error(r.statusText))})),r.addEventListener(\"error\",(function(e){n.emitter.emit(\"error\",e)})),r.send()},t.applyWorkerEnv=function(e){if(this.messageQueue){try{Function(\"self\",\"messageHandler\",e)(window,this.workerPort)}catch(e){return void this.emitter.emit(\"error\",e)}for(;!this.messageQueue.empty();)this.postMessageToWorker(this.messageQueue.pop());this.messageQueue=null}},t.postMessageFromWorker=function(e){var t=this;setTimeout((function(){t.emitter.emit(\"message\",{data:e})}),0)},t.postMessageToWorker=function(e){var t=this;setTimeout((function(){t.workerPort.onmessage({data:e})}),0)},e}();function vn(e,t,n){var i;return void 0===n&&(n=!1),(i=(0,r.cp)().msIE?new pn(e):(0,Ue.J6)(e)?new Worker(e):new Worker(URL.createObjectURL(new Blob([\"importScripts('\"+e+\"')\"])))).postMessage({wasmBinaryUrl:t,showWorkerLogs:n}),i}var mn=\"undefined\"!=typeof window&&\"object\"==typeof window.WebAssembly&&\"function\"==typeof window.WebAssembly.instantiate,gn=mn;function yn(e){var t=e.asmWorker,n=e.wasmWorker,r=e.wasmBinary;if(!gn&&!t)throw new Error(\"WebAssembly is not supported by the browser. This is required for playback.\");var i=vn(gn?n:t,r,e.showWorkerLog);return new Sn(e,i)}function En(){return\"1.34.1\"}var Sn=function(){function e(e,t){this.core=void 0,this.startCapture=void 0,this.stopCapture=void 0,this.requestCaptureAnalytics=void 0,this.core=new fn(e,t)}var t=e.prototype;return t.addEventListener=function(e,t){var n;null==(n=this.checkCore())||n.addEventListener(e,t)},t.attachHTMLVideoElement=function(e){var t;null==(t=this.checkCore())||t.attachHTMLVideoElement(e)},t.delete=function(){var e;null==(e=this.checkCore())||e.delete(),this.core=null},t.endRemotePlayback=function(){var e;null==(e=this.checkCore())||e.endRemotePlayback()},t.isAutoplay=function(){var e;return null==(e=this.checkCore())?void 0:e.isAutoplay()},t.isAutoQualityMode=function(){var e;return null==(e=this.checkCore())?void 0:e.isAutoQualityMode()},t.getAverageBitrate=function(){var e;return null==(e=this.checkCore())?void 0:e.getAverageBitrate()},t.getBandwidthEstimate=function(){var e;return null==(e=this.checkCore())?void 0:e.getBandwidthEstimate()},t.getBufferDuration=function(){var e;return null==(e=this.checkCore())?void 0:e.getBufferDuration()},t.getBuffered=function(){var e;return null==(e=this.checkCore())?void 0:e.getBuffered()},t.getBufferedRanges=function(){var e;return null==(e=this.checkCore())?void 0:e.getBufferedRanges()},t.getSinkBufferedRanges=function(){var e;return null==(e=this.checkCore())?void 0:e.getSinkBufferedRanges()},t.getDecodedFrames=function(){var e;return null==(e=this.checkCore())?void 0:e.getDecodedFrames()},t.getDisplayHeight=function(){var e;return null==(e=this.checkCore())?void 0:e.getDisplayHeight()},t.getDisplayWidth=function(){var e;return null==(e=this.checkCore())?void 0:e.getDisplayWidth()},t.getDroppedFrames=function(){var e;return null==(e=this.checkCore())?void 0:e.getDroppedFrames()},t.getDuration=function(){var e;return null==(e=this.checkCore())?void 0:e.getDuration()},t.getExperiments=function(){var e;return null==(e=this.checkCore())?void 0:e.getExperiments()},t.getHTMLVideoElement=function(){var e;return null==(e=this.checkCore())?void 0:e.getHTMLVideoElement()},t.getVideoRenderSurface=function(){var e;return null==(e=this.checkCore())?void 0:e.getVideoRenderSurface()},t.getLiveLatency=function(){var e;return null==(e=this.checkCore())?void 0:e.getLiveLatency()},t.getPath=function(){var e;return null==(e=this.checkCore())?void 0:e.getPath()},t.getProtocol=function(){var e;return null==(e=this.checkCore())?void 0:e.getProtocol()},t.getPlaybackRate=function(){var e;return null==(e=this.checkCore())?void 0:e.getPlaybackRate()},t.getPosition=function(){var e;return null==(e=this.checkCore())?void 0:e.getPosition()},t.getSyncTime=function(){var e;return null==(e=this.checkCore())?void 0:e.getSyncTime()},t.getQualities=function(){var e;return null==(e=this.checkCore())?void 0:e.getQualities()},t.getQuality=function(){var e;return null==(e=this.checkCore())?void 0:e.getQuality()},t.getSessionData=function(){var e;return null==(e=this.checkCore())?void 0:e.getSessionData()},t.getSessionId=function(){var e;return null==(e=this.checkCore())?void 0:e.getSessionId()},t.getChannelMetadata=function(){var e,t;return null!=(e=null==(t=this.checkCore())?void 0:t.getChannelMetadata())?e:[]},t.getStartOffset=function(){var e;return null==(e=this.checkCore())?void 0:e.getStartOffset()},t.getState=function(){var e;return null==(e=this.checkCore())?void 0:e.getState()},t.getVersion=function(){var e;return null==(e=this.checkCore())?void 0:e.getVersion()},t.getVideoBitRate=function(){var e;return null==(e=this.checkCore())?void 0:e.getVideoBitRate()},t.getVideoFrameRate=function(){var e;return null==(e=this.checkCore())?void 0:e.getVideoFrameRate()},t.getVideoHeight=function(){var e;return null==(e=this.checkCore())?void 0:e.getVideoHeight()},t.getVideoWidth=function(){var e;return null==(e=this.checkCore())?void 0:e.getVideoWidth()},t.getVolume=function(){var e;return null==(e=this.checkCore())?void 0:e.getVolume()},t.isLiveLowLatency=function(){var e;return null==(e=this.checkCore())?void 0:e.isLiveLowLatency()},t.isLooping=function(){var e;return null==(e=this.checkCore())?void 0:e.isLooping()},t.isMuted=function(){var e;return null==(e=this.checkCore())?void 0:e.isMuted()},t.isPaused=function(){var e;return null==(e=this.checkCore())?void 0:e.isPaused()},t.isProtected=function(){var e;return null==(e=this.checkCore())?void 0:e.isProtected()},t.isSeeking=function(){var e;return null==(e=this.checkCore())?void 0:e.isSeeking()},t.load=function(e,t){var n;return void 0===t&&(t=\"\"),null==(n=this.checkCore())?void 0:n.load(e,t)},t.pause=function(){var e;null==(e=this.checkCore())||e.pause()},t.play=function(){var e;null==(e=this.checkCore())||e.play()},t.removeEventListener=function(e,t){var n;null==(n=this.checkCore())||n.removeEventListener(e,t)},t.seekTo=function(e){var t;null==(t=this.checkCore())||t.seekTo(e)},t.setAuthToken=function(e){var t;null==(t=this.checkCore())||t.setAuthToken(e)},t.setAutoInitialBitrate=function(e){var t;null==(t=this.checkCore())||t.setAutoInitialBitrate(e)},t.setAutoMaxQuality=function(e){var t;null==(t=this.checkCore())||t.setAutoMaxQuality(e)},t.setAutoMaxBitrate=function(e){var t;null==(t=this.checkCore())||t.setAutoMaxBitrate(e)},t.setAutoMaxVideoSize=function(e,t){var n;null==(n=this.checkCore())||n.setAutoMaxVideoSize(e,t)},t.setAutoplay=function(e){var t;null==(t=this.checkCore())||t.setAutoplay(e)},t.setAutoPlayOptions=function(e){var t;null==(t=this.checkCore())||t.setAutoPlayOptions(e)},t.setAutoQualityMode=function(e){var t;null==(t=this.checkCore())||t.setAutoQualityMode(e)},t.setAutoViewportSize=function(e,t){var n;null==(n=this.checkCore())||n.setAutoViewportSize(e,t)},t.setClientId=function(e){var t;null==(t=this.checkCore())||t.setClientId(e)},t.setDeviceId=function(e){var t;null==(t=this.checkCore())||t.setDeviceId(e)},t.setExperiment=function(e,t){var n;null==(n=this.checkCore())||n.setExperiment(e,t)},t.setExperimentData=function(e){var t;null==(t=this.checkCore())||t.setExperimentData(e)},t.setInitialBufferDuration=function(e){var t;null==(t=this.checkCore())||t.setInitialBufferDuration(e)},t.setLiveLowLatencyEnabled=function(e){var t;null==(t=this.checkCore())||t.setLiveLowLatencyEnabled(e)},t.setLiveMaxLatency=function(e){var t;null==(t=this.checkCore())||t.setLiveMaxLatency(e)},t.setLiveSpeedUpRate=function(e){var t;null==(t=this.checkCore())||t.setLiveSpeedUpRate(e)},t.setLogLevel=function(e){var t;null==(t=this.checkCore())||t.setLogLevel(e)},t.setLooping=function(e){var t;null==(t=this.checkCore())||t.setLooping(e)},t.setMuted=function(e){var t;null==(t=this.checkCore())||t.setMuted(e)},t.setPlaybackRate=function(e){var t;null==(t=this.checkCore())||t.setPlaybackRate(e)},t.setPlayerType=function(e){var t;null==(t=this.checkCore())||t.setPlayerType(e)},t.setQuality=function(e,t){var n;void 0===t&&(t=!1),null==(n=this.checkCore())||n.setQuality(e,t)},t.setRebufferToLive=function(e){var t;null==(t=this.checkCore())||t.setRebufferToLive(e)},t.setVisible=function(e){var t;null==(t=this.checkCore())||t.setVisible(e)},t.setVolume=function(e){var t;null==(t=this.checkCore())||t.setVolume(e)},t.startRemotePlayback=function(){var e;null==(e=this.checkCore())||e.startRemotePlayback()},t.setPlatformName=function(e){var t;null==(t=this.checkCore())||t.setPlatformName(e)},t.setRequestCredentials=function(e){var t;null==(t=this.checkCore())||t.setRequestCredentials(e)},t.checkCore=function(){return this.core||console.warn(\"Method called on deleted player instance.\"),this.core},e}()},573:function(e,t,n){\"use strict\";n.d(t,{o:function(){return r}});var r=function(){function e(){this.buffer=void 0,this.head=void 0,this.tail=void 0,this.buffer=[],this.head=0,this.tail=0}var t=e.prototype;return t.push=function(e){this.tail===this.buffer.length?this.buffer.push(e):this.buffer[this.tail]=e,this.tail++},t.pop=function(){var e,t=null!=(e=this.buffer[this.head])?e:null;return this.buffer[this.head]=null,this.head++,this.empty()&&(this.head=0,this.tail=0),t},t.size=function(){return this.tail-this.head},t.empty=function(){return this.head>=this.tail},e}()},290:function(e,t,n){\"use strict\";n.d(t,{$1:function(){return c},$_:function(){return h},Ec:function(){return f},Pt:function(){return i},Ri:function(){return d},a1:function(){return r},lU:function(){return u},ok:function(){return o},pn:function(){return a},xA:function(){return l},yY:function(){return s}});var r=2,i=4,o=3,a=1,s=101,u=102,c=201,d=202,l=203,f=204,h=404},309:function(e,t,n){\"use strict\";n.d(t,{Z:function(){return l}});var r=n(898),i=n.n(r),o=n(290),a=n(573),s=n(623);function u(e){var t=(e||\"\").match(/codecs=\"([^.]+)\\./);return t&&t[1]?t[1]:\"\"}var c=function(){function e(e,t,n,r,i){this.rawCodec=t,this.group=n,this.isProtected=r,this.onError=i,this.pending=void 0,this.unsubscribers=[],this.srcBuf=void 0,this.blocked=!1,this.srcBuf=e,this.pending=new a.o,this.unsubscribers.push((0,s.B1)(e,\"updateend\",this.process.bind(this)))}var t=e.prototype;return t.getBufferedRanges=function(){try{var e=[];if(this.srcBuf)for(var t=this.srcBuf.buffered,n=0;n<t.length;n++)e.push({start:t.start(n),end:t.end(n)});return e}catch(e){return[]}},t.abort=function(){this.schedule((function(e){e.abort()}))},t.changeType=function(e){this.rawCodec=function(e){var t=(e||\"\").match(/codecs=\".+\"/);return t&&t[0]?t[0]:'codecs=\"\"'}(e),this.schedule((function(t){t.changeType(e)}))},t.appendBuffer=function(e){this.schedule((function(t){try{t.appendBuffer(e)}catch(e){if(\"QuotaExceededError\"!==e.name)throw e;var n=t.buffered,r=n.start(0),i=n.end(n.length-1),o=(r+i)/2;t.remove(o,i)}}))},t.setTimestampOffset=function(e){this.schedule((function(t){t.timestampOffset=e}))},t.remove=function(e,t){this.schedule((function(n){var r=n.buffered;if(r.length){var i=Math.max(e,r.start(0)),o=Math.min(t,r.end(r.length-1));i<o&&n.remove(i,o)}}))},t.block=function(){var e=this;return new Promise((function(t){e.schedule((function(){e.blocked=!0,t()}))}))},t.unblock=function(){this.blocked=!1,this.process()},t.destroy=function(){this.pending=new a.o,this.unsubscribers.forEach((function(e){return e()})),this.srcBuf=void 0},t.schedule=function(e){this.pending.empty()&&this.canProcess()?this.safeExecute(e):(this.pending.push(e),this.process())},t.safeExecute=function(e){try{if(!this.srcBuf)throw new Error(\"srcBuf is undefined\");e(this.srcBuf)}catch(e){this.onError(e,!1)}},t.process=function(){for(;!this.pending.empty()&&this.canProcess();)this.safeExecute(this.pending.pop())},t.canProcess=function(){return!(!this.srcBuf||this.srcBuf.updating||this.blocked)},i()(e,[{key:\"buffer\",get:function(){return this.srcBuf}},{key:\"codec\",get:function(){return this.rawCodec}},{key:\"timestampOffset\",get:function(){return this.buffer?this.buffer.timestampOffset:0}}])}(),d=n(789),l=function(){function e(e,t,n){this.mediaSource=e,this.onEnded=t,this.onError=n,this.sourceBuffers=Object.create(null),this.unsubscribers=[],this.unsubscribers.push((0,s.B1)(e,\"sourceended\",this.onEnded))}e.isSupported=function(){return void 0!==self.MediaSource},e.isSupportedInWorker=function(){return e.isSupported()&&MediaSource.canConstructInDedicatedWorker&&\"function\"==typeof MediaSourceHandle},e.create=function(t,n){var r=new MediaSource,i=new Promise((function(i,o){var a=(0,s.B1)(r,\"sourceopen\",(function(){\"open\"===r.readyState?(i(new e(r,t,n)),a()):o(\"The MediaSource was closed upon opening\")}))}));return{ms:r,sink:i}};var t=e.prototype;return t.getBufferedRanges=function(e){var t,n;return null!=(t=null==(n=this.sourceBuffers[d.kD[e]])?void 0:n.getBufferedRanges())?t:[]},t.addTrack=function(e,t,n,r){var i=this.mediaSource,o=this.sourceBuffers,a=function(e){return\"video/mp4;\"+e}(t);if(o[e]){var s,d=u(o[e].codec);return u(t)!==d&&o[e].changeType(a),null!=(s=o[e].buffer)?s:null}try{var l=i.addSourceBuffer(a);return o[e]=new c(l,t,n,r,this.handleError.bind(this)),l}catch(e){this.handleError(e,\"open\"===i.readyState)}return null},t.append=function(e,t){var n;null==(n=this.sourceBuffers[e])||n.appendBuffer(t)},t.remove=function(e,t){for(var n=this.sourceBuffers,r=0,i=Object.keys(n);r<i.length;r++)n[i[r]].remove(e,t)},t.setTimestampOffset=function(e,t){var n=this.sourceBuffers[e];n&&(n.abort(),n.setTimestampOffset(t))},t.setDuration=function(e){var t=this;this.scheduleUpdate((function(){return t.mediaSource.duration=e})).catch((function(e){return t.handleError(e,!1)}))},t.setLiveSeekableRange=function(e,t){var n=this;this.scheduleUpdate((function(){return n.mediaSource.setLiveSeekableRange(e,t)})).catch((function(e){return n.handleError(e,!1)}))},t.scheduleUpdate=function(e){var t=this;void 0===e&&(e=f);var n=Object.keys(this.sourceBuffers).map((function(e){return t.sourceBuffers[e]}));return Promise.all(n.map((function(e){return e.block()}))).then(e).then((function(){return n.forEach((function(e){return e.unblock()}))}))},t.isDrmProtected=function(){return this.bufferProperties.some((function(e){return e.isProtected}))},t.isAudioOnly=function(){return 1===this.bufferProperties.length&&\"audio_only\"===this.bufferProperties[0].group},t.destroy=function(){this.destroySourceBuffers(),this.unsubscribers.forEach((function(e){return e()})),this.unsubscribers=[]},t.handleError=function(e,t){var n=e.code||o.lU,r=o.lU;\"NotSupportedError\"===e.name&&(r=n=o.Pt),this.onError(r,n,e.message,t)},t.destroySourceBuffers=function(){for(var e=this.mediaSource;e.sourceBuffers.length>0;)try{e.removeSourceBuffer(e.sourceBuffers[0])}catch(e){this.handleError(e,!1);break}for(var t=0,n=Object.keys(this.sourceBuffers);t<n.length;t++){var r=n[t];this.sourceBuffers[r].destroy()}this.sourceBuffers=Object.create(null)},i()(e,[{key:\"duration\",get:function(){return this.mediaSource.duration}},{key:\"bufferProperties\",get:function(){var e=this.sourceBuffers;return Object.keys(e).map((function(t){var n=e[t];return{trackID:Number(t),codec:n.codec,mode:\"mse\",path:\"\",isProtected:n.isProtected,group:n.group,srcObj:null}}))}}])}(),f=function(){}},789:function(e,t,n){\"use strict\";n.d(t,{HJ:function(){return a},Pp:function(){return o},Sf:function(){return i},de:function(){return r},kD:function(){return s}});var r=.1,i=1<<30,o=12e4,a=3e3,s={audio:1936684398,video:1986618469}},623:function(e,t,n){\"use strict\";n.d(t,{B1:function(){return l},GX:function(){return h},V3:function(){return c},gd:function(){return s},ld:function(){return a},tX:function(){return d},v8:function(){return f},vG:function(){return u},xB:function(){return o}});var r=n(796),i=n(789);function o(e){return\"number\"==typeof e.webkitDecodedFrameCount?e.webkitDecodedFrameCount:\"function\"==typeof e.getVideoPlaybackQuality?e.getVideoPlaybackQuality().totalVideoFrames:\"number\"==typeof e.mozDecodedFrames?e.mozDecodedFrames:0}function a(e){return\"number\"==typeof e.webkitDroppedFrameCount?e.webkitDroppedFrameCount:\"function\"==typeof e.getVideoPlaybackQuality?e.getVideoPlaybackQuality().droppedVideoFrames:0}function s(e,t){for(var n=0;n<t.length;n++)console.info(e,\"start: \",t.start(n),\", end: \",t.end(n))}function u(e,t,n){for(var r=0;r<e.length;r++){var i=e.start(r),o=e.end(r);if(!(o<=t)){if(i-n>t)break;for(var a=r+1;a<e.length&&!(e.start(a)-o>n);a++)o=e.end(a);for(var s=r-1;s>=0&&!(i-e.end(s)>n);s--)i=e.start(s);return{start:Math.min(i,t),end:o}}}return{start:t,end:t}}function c(e,t){var n=u(e.buffered,e.currentTime,t).end,r=e.currentTime,i=n-r;return!(e.ended||e.duration-r<t)&&i<t}function d(e,t,n){void 0===n&&(n=i.de);var r=u(e,t,n).end-t>n;if(e.length>1||!r)for(var o=0;o<e.length;o++){var a=e.start(o),s=e.end(o);if(t<a&&s-a>n)return a+n}return r?t+n:t}function l(e,t,n){return e.addEventListener(t,n),function(){e.removeEventListener(t,n)}}function f(e){if(e.src){var t=e.src;r.Pr(e),e.load(),URL.revokeObjectURL(t)}}function h(e,t){var n=e.playbackRate,r=e.src;r&&URL.revokeObjectURL(r),e.src=t,e.playbackRate=n}},272:function(){},847:function(){},139:function(e,t,n){\"use strict\";n.d(t,{$:function(){return r}});var r=function(e){return e.DEBUG=\"debug\",e.INFO=\"info\",e.WARN=\"warn\",e.ERROR=\"error\",e}({})},993:function(){},796:function(e,t,n){\"use strict\";function r(e){try{return JSON.parse(e)}catch(t){return console.error(\"Failed JSON parse:\",e),{}}}function i(e){try{return JSON.stringify(e)}catch(t){return console.error(\"Failed JSON stringify:\",e),\"\"}}function o(e){return\"\"===e.codecs||\"undefined\"==typeof MediaSource||MediaSource.isTypeSupported('video/mp4;codecs=\"'+e.codecs+'\"')}function a(e,t){var n=[],r=[];return e.forEach((function(e){t(e)?n.push(e):r.push(e)})),{supported:n,unsupported:r}}function s(e){var t,n;return void 0!==e.hidden?(t=\"hidden\",n=\"visibilitychange\"):void 0!==e.msHidden?(t=\"msHidden\",n=\"msvisibilitychange\"):void 0!==e.webkitHidden&&(t=\"webkitHidden\",n=\"webkitvisibilitychange\"),{hidden:t,visibilityChange:n}}function u(e,t,n){return Math.min(n,Math.max(t,e))}function c(e){e.removeAttribute(\"src\")}function d(e){var t=window.location,n=document.createElement(\"a\");return n.href=e,n.hostname===t.hostname&&n.port===t.port&&n.protocol===t.protocol}function l(e){if(\"function\"==typeof e.checkVisibility)return e.checkVisibility({visibilityProperty:!0});var t=e.style;return\"none\"!==t.display&&\"hidden\"!==t.visibility}n.d(t,{J6:function(){return d},N8:function(){return r},Pr:function(){return c},YH:function(){return a},dl:function(){return i},h3:function(){return o},j:function(){return l},qE:function(){return u},sQ:function(){return s}})},579:function(e,t,n){\"use strict\";n.d(t,{G:function(){return h}});var r,i=n(911),o=n(0),a=n(184),s=n(376),u=n(120),c=function(e){return e.DURATION_CHANGE=\"durationchange\",e.ENDED=\"ended\",e.ERROR=\"error\",e.LOADED_METADATA=\"loadedmetadata\",e.LOADSTART=\"loadstart\",e.PAUSE=\"pause\",e.PLAY=\"play\",e.PLAYING=\"playing\",e.RATE_CHANGE=\"ratechange\",e.SEEKED=\"seeked\",e.SEEKING=\"seeking\",e.TIME_UPDATE=\"timeupdate\",e.VOLUME_CHANGE=\"volumechange\",e.WAITING=\"waiting\",e}({}),d=function(e){return e[e.HAVE_NOTHING=0]=\"HAVE_NOTHING\",e[e.HAVE_METADATA=1]=\"HAVE_METADATA\",e[e.HAVE_CURRENT_DATA=2]=\"HAVE_CURRENT_DATA\",e[e.HAVE_FUTURE_DATA=3]=\"HAVE_FUTURE_DATA\",e[e.HAVE_ENOUGH_DATA=4]=\"HAVE_ENOUGH_DATA\",e}(d||{}),l=((r={})[s.p.IDLE]=1,r[s.p.READY]=1,r[s.p.BUFFERING]=2,r[s.p.PLAYING]=2,r[s.p.ENDED]=1,r),f=\"AmazonIVS\";function h(e,t){if(void 0===e||\"function\"!=typeof e.getTech)throw{message:\"videojs not available, AmazonIVS tech not registered\",code:1};if(!u.i$)throw{message:\"WebAssembly support is required for AmazonIVS tech\",code:2};if(!e.getTech(f)){var n,r={featuresProgressEvents:!0,featuresTimeupdateEvents:!0,featuresPlaybackRate:!0,featuresFullscreenResize:!0,featuresVolumeControl:!0,featuresMuteControl:!0,featuresNativeTextTracks:!1,privateContructor:function(n,r,i){this._readyState=d.HAVE_NOTHING,this._defaultPlaybackRate=1,this._seeking=!1,t.playerFramework={name:\"videojs\",version:e.VERSION},this._mediaPlayer=(0,u.vt)(t),this._mediaPlayer.setAutoplay(!0===n.autoplay),this._attachVideojsListeners(),this._mediaPlayer.addEventListener(a.a.METADATA,this._onCaptionEvent.bind(this));var o=this._createEl(n);n.el=o,i(this,n,r),window.vttjs&&window.vttjs.restore(),this.triggerReady(),setTimeout(function(){var e=this.options(),t=e.loop,n=e.muted;t&&this._mediaPlayer.setLooping(!0),n&&this._mediaPlayer.setMuted(!0)}.bind(this),0)},dispose:function(){this._mediaPlayer.delete()},setPreload:function(){},autoplay:function(e){if(\"boolean\"!=typeof e)return this._mediaPlayer.autoplay;this.setAutoplay(e)},setAutoplay:function(e){this._mediaPlayer.setAutoplay(e)},preload:function(){},load:function(){},readyState:function(){return this._readyState},seeking:function(){return this._seeking},networkState:function(){if(!this._mediaPlayer)return 0;var e=this._mediaPlayer.getHTMLVideoElement();if(!e.src&&!e.srcObject)return 3;var t=this._mediaPlayer.getState();return l[t]},ended:function(){return this._mediaPlayer.getState()===s.p.ENDED},seekable:function(){return e.createTimeRange(0,this._mediaPlayer.getDuration())},play:function(){this._mediaPlayer.play(),this.trigger(c.PLAY)},pause:function(){this._mediaPlayer.pause()},setCurrentTime:function(e){var t=this._mediaPlayer.getHTMLVideoElement();(t.src||t.srcObject)&&(this._mediaPlayer.seekTo(e),this._seeking=!0,this.trigger(c.SEEKING))},controls:function(){return!1},setControls:function(){return!1},muted:function(){return this._mediaPlayer.isMuted()},setMuted:function(e){this._mediaPlayer.setMuted(e)},volume:function(){return this._mediaPlayer.getVolume()},setVolume:function(e){this._mediaPlayer.setVolume(e)},defaultPlaybackRate:function(e){if(!e)return this._defaultPlaybackRate;this._defaultPlaybackRate=e},playbackRate:function(){return this._mediaPlayer.getPlaybackRate()},setPlaybackRate:function(e){this._mediaPlayer.setPlaybackRate(e)},paused:function(){return this._mediaPlayer.isPaused()},duration:function(){return this._mediaPlayer.getDuration()},currentTime:function(){return this._mediaPlayer.getPosition()},_createEl:function(e){var t=this._mediaPlayer.getHTMLVideoElement();t.setAttribute(\"class\",\"vjs-tech\"),void 0!==e.disablePictureInPicture&&(t.disablePictureInPicture=e.disablePictureInPicture),[\"preload\",\"poster\"].forEach(function(n){e[n]&&t.setAttribute(n,e[n])}.bind(this)),e.playsinline&&(t.setAttribute(\"webkit-playsinline\",\"\"),t.setAttribute(\"playsinline\",\"\"));var n=document.createElement(\"div\");return n.appendChild(t),n},src:function(e){this.trigger(c.LOADSTART),this._seeking=!1,this._captionTrack&&(this.textTracks().removeTrack(this._captionTrack),this._captionTrack=null),e&&this._mediaPlayer.load(e)},addEventListener:function(e,t){this._mediaPlayer.addEventListener(e,t)},removeEventListener:function(e,t){this._mediaPlayer.removeEventListener(e,t)},getMediaPlayerAPI:function(){return this._mediaPlayer},supportsFullScreen:function(){return!0},enterFullScreen:function(){var e=this._mediaPlayer.getHTMLVideoElement();(e.requestFullscreen||e.webkitRequestFullscreen||e.mozRequestFullScreen||e.msRequestFullscreen||e.webkitEnterFullscreen||function(){console.error(\"Fullscreen API is not available\")}).call(e)},exitFullScreen:function(){(document.exitFullScreen||document.webkitExitFullscreen||document.mozCancelFullScreen||document.msExitFullscreen||function(){console.error(\"Exitscreen API is not available\")}).call(document)},requestPictureInPicture:function(){return this._mediaPlayer.getHTMLVideoElement().requestPictureInPicture()},setDisablePictureInPicture:function(e){this._mediaPlayer.getHTMLVideoElement().disablePictureInPicture=e},disablePictureInPicture:function(){return this._mediaPlayer.getHTMLVideoElement().disablePictureInPicture},_onCaptionEvent:function(e){if(\"text/json\"===e.type){var t=JSON.parse(e.data);if(t.caption){var n=t.caption;this._captionTrack||(this._captionTrack=this.addTextTrack(\"captions\",n.format),this._currentCue=null),this._currentCue&&this._captionTrack.removeCue(this._currentCue);var r=this._mediaPlayer.getHTMLVideoElement(),i=window.VTTCue||window.vttjs.VTTCue;i?(this._currentCue=new i(r.currentTime,r.currentTime+2,n.text),this._captionTrack.addCue(this._currentCue)):console.warn(\"No VTTCue implementation available, caption may not be available\")}}},_attachVideojsListeners:function(){this._mediaPlayer.addEventListener(s.p.READY,function(){this._readyState=d.HAVE_METADATA,this.trigger(c.LOADED_METADATA)}.bind(this)),this._mediaPlayer.addEventListener(s.p.IDLE,function(){this._readyState=d.HAVE_NOTHING,this.trigger(c.PAUSE)}.bind(this)),this._mediaPlayer.addEventListener(s.p.PLAYING,function(){this._readyState<=d.HAVE_CURRENT_DATA&&(this._readyState=d.HAVE_FUTURE_DATA),this.trigger(c.PLAY),this.trigger(c.PLAYING)}.bind(this)),this._mediaPlayer.addEventListener(s.p.ENDED,function(){this._readyState=d.HAVE_NOTHING,this.trigger(c.ENDED)}.bind(this)),this._mediaPlayer.addEventListener(s.p.BUFFERING,function(){this._readyState=d.HAVE_CURRENT_DATA}.bind(this)),this._mediaPlayer.addEventListener(a.a.REBUFFERING,function(){this._readyState=d.HAVE_CURRENT_DATA,this.trigger(c.WAITING)}.bind(this)),this._mediaPlayer.addEventListener(a.a.TIME_UPDATE,function(){this.trigger(c.TIME_UPDATE)}.bind(this)),this._mediaPlayer.addEventListener(a.a.VOLUME_CHANGED,function(){this.trigger(c.VOLUME_CHANGE)}.bind(this)),this._mediaPlayer.addEventListener(a.a.MUTED_CHANGED,function(){this.trigger(c.VOLUME_CHANGE)}.bind(this)),this._mediaPlayer.addEventListener(a.a.ERROR,function(){this.trigger(c.ERROR)}.bind(this)),this._mediaPlayer.addEventListener(a.a.DURATION_CHANGED,function(){this.trigger(c.DURATION_CHANGE)}.bind(this)),this._mediaPlayer.addEventListener(a.a.SEEK_COMPLETED,function(){this._seeking=!1,this.trigger(c.SEEKED)}.bind(this)),this._mediaPlayer.addEventListener(a.a.PLAYBACK_RATE_CHANGED,function(){this.trigger(c.RATE_CHANGE)}.bind(this))}},h=e.getTech(\"Tech\");\"function\"==typeof e.extend?(r.constructor=function(e,t){this.privateContructor(e,t,(function(e,t,n){h.call(e,t,n)}))},n=e.extend(h,r,f)):((n=function(e,t){this.privateContructor(e,t,(function(e,t,n){var r=h.prototype,i=r.featuresProgressEvents,o=r.featuresTimeupdateEvents,a=r.featuresPlaybackRate,s=r.featuresFullscreenResize,u=r.featuresVolumeControl,d=r.featuresMuteControl,l=r.featuresNativeTextTracks;r.featuresProgressEvents=!0,r.featuresTimeupdateEvents=!0,r.featuresPlaybackRate=!0,r.featuresFullscreenResize=!0,r.featuresVolumeControl=!0,r.featuresMuteControl=!0,r.featuresNativeTextTracks=!1,Object.assign(e,new h(t,n)),e.on(c.PLAYING,(function(){e.hasStarted_=!0})),e.on(c.LOADSTART,(function(){e.hasStarted_=!1})),r.featuresProgressEvents=i,r.featuresTimeupdateEvents=o,r.featuresPlaybackRate=a,r.featuresFullscreenResize=s,r.featuresVolumeControl=u,r.featuresMuteControl=d,r.featuresNativeTextTracks=l}))}).prototype=Object.create(h.prototype),Object.assign(n.prototype,r)),n.supportsFullScreen=function(){return!0},n.isSupported=function(){return-1===(navigator.appVersion||\"\").toLowerCase().indexOf(\"rv:11\")},n.canPlayType=function(e){return\"string\"==typeof e&&e.length>0&&(e.indexOf(\"application/x-mpegURL\")>-1?\"undefined\"!=typeof MediaSource&&MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"'):\"\"!==document.createElement(\"video\").canPlayType(e))},n.canPlaySource=function(){return!0},e.registerTech(\"AmazonIVS\",n);var p=e.registerPlugin||e.plugin;p(\"getIVSEvents\",(function(){return{PlayerEventType:a.a,MetadataEventType:o.C,PlayerState:s.p,ErrorType:i.B}})),p(\"getIVSPlayer\",(function(){return this.tech(!0).getMediaPlayerAPI()}))}}},405:function(e,t,n){\"use strict\";n.d(t,{U:function(){return a}});var r=n(184),i=n(376),o=\"enableIVSQualityPlugin\";function a(e){if(void 0===e||\"function\"!=typeof e.getTech)throw{message:\"videojs not available, Amazon IVS Quality Plugin not registered\",code:1};if(!e.getPlugin(o)){var t,n=e.getComponent(\"MenuButton\"),a=e.getComponent(\"MenuItem\"),s={privateConstructor:function(e,t,n){n(this,e,t),this.controlText(\"Quality\")},createItems:function(){var e=this.player(),t=e.getIVSPlayer(),n=[],i=new a(e,{selectable:!0,label:\"Auto\",qualityGroup:\"auto\"});i.selected(t.isAutoQualityMode()),i.on([\"click\",\"tap\"],(function(){t.setAutoQualityMode(!0)})),i.on([\"click\",\"tap\"],this._clickHandler.bind(this,i)),n.push(i);var o=t.getQuality(),s=t.getQualities();return s&&s.length>0&&s.forEach(function(r){var i=new a(e,{selectable:!0,label:r.name,qualityGroup:r.group}),s=function(e){t.setQuality(e)}.bind(null,r);i.on([\"click\",\"tap\"],s),i.on([\"click\",\"tap\"],this._clickHandler.bind(this,i)),t.isAutoQualityMode()||i.selected(o.group===r.group),n.push(i)}.bind(this)),t.addEventListener(r.a.QUALITY_CHANGED,(function(n){var r;if(!t.isAutoQualityMode()){var i=null==(r=e.controlBar)?void 0:r.getChild(\"QualityMenuButton\");null==i||i.items.forEach((function(e){var t=e.options().qualityGroup;n&&t&&e.selected(n.group===t)}))}})),this.qualityItems=n,n},buildCSSClass:function(){return\"vjs-icon-hd vjs-icon-placeholder \"+n.prototype.buildCSSClass.call(this)},_clickHandler:function(e){this.items.forEach((function(t){t!==e&&t.selected(!1)}))}};\"function\"==typeof e.extend?(s.constructor=function(e,t){this.privateConstructor(e,t,(function(e,t,r){n.call(e,t,r)}))},t=e.extend(n,s)):((t=function(e,t){this.privateConstructor(e,t,(function(e,t,r){var i=\"quality-control\";r.name=i;var o=new n(t,r);o.getChild(i).addClass(\"vjs-icon-hd vjs-icon-placeholder\"),Object.assign(e,o),e.items=e.createItems(),e.items.forEach((function(t){e.menu.addItem(t)}))}))}).prototype=Object.create(n.prototype),Object.assign(t.prototype,s)),e.registerComponent(\"QualityMenuButton\",t),(e.registerPlugin||e.plugin)(o,(function(){var e=this;e.getIVSPlayer().addEventListener(i.p.READY,(function(){var t,n,r=null==(t=e.controlBar)?void 0:t.getChild(\"QualityMenuButton\");r&&(r.dispose(),e.controlBar.removeChild(r)),null==(n=e.controlBar)||n.addChild(\"QualityMenuButton\")}))}))}}},898:function(e){\"use strict\";e.exports=require(\"@babel/runtime/helpers/createClass\")}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if(\"object\"==typeof globalThis)return globalThis;try{return this||new Function(\"return this\")()}catch(e){if(\"object\"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var r={};!function(){\"use strict\";n.r(r),n.d(r,{AuthorizationError:function(){return i.y},CaptureEventType:function(){return s.P},ErrorSource:function(){return t.g},ErrorType:function(){return i.B},LogLevel:function(){return p.$},MediaPlayer:function(){return e.KJ},MetadataEventType:function(){return o.C},MetadataID3Type:function(){return o._},PlayerEventType:function(){return a.a},PlayerState:function(){return u.p},RemotePlayerEvent:function(){return y.G},create:function(){return e.vt},createWorker:function(){return e.Zx},getVersion:function(){return e.HF},isPlayerSupported:function(){return e.i$},isVP9Supported:function(){return g.YJ},isWasmSupported:function(){return e.TH},registerIVSQualityPlugin:function(){return m.U},registerIVSTech:function(){return v.G}});var e=n(120),t=n(554),i=n(911),o=n(0),a=n(184),s=n(695),u=n(376),c=n(847),d={};for(var l in c)[\"default\",\"LogLevel\",\"registerIVSTech\",\"registerIVSQualityPlugin\",\"isVP9Supported\",\"MediaPlayer\",\"create\",\"createWorker\",\"getVersion\",\"isPlayerSupported\",\"isWasmSupported\",\"ErrorSource\",\"AuthorizationError\",\"ErrorType\",\"MetadataEventType\",\"MetadataID3Type\",\"PlayerEventType\",\"CaptureEventType\",\"PlayerState\"].indexOf(l)<0&&(d[l]=function(e){return c[e]}.bind(0,l));n.d(r,d);var f=n(993);for(var l in d={},f)[\"default\",\"LogLevel\",\"registerIVSTech\",\"registerIVSQualityPlugin\",\"isVP9Supported\",\"MediaPlayer\",\"create\",\"createWorker\",\"getVersion\",\"isPlayerSupported\",\"isWasmSupported\",\"ErrorSource\",\"AuthorizationError\",\"ErrorType\",\"MetadataEventType\",\"MetadataID3Type\",\"PlayerEventType\",\"CaptureEventType\",\"PlayerState\"].indexOf(l)<0&&(d[l]=function(e){return f[e]}.bind(0,l));n.d(r,d);var h=n(272);for(var l in d={},h)[\"default\",\"LogLevel\",\"registerIVSTech\",\"registerIVSQualityPlugin\",\"isVP9Supported\",\"MediaPlayer\",\"create\",\"createWorker\",\"getVersion\",\"isPlayerSupported\",\"isWasmSupported\",\"ErrorSource\",\"AuthorizationError\",\"ErrorType\",\"MetadataEventType\",\"MetadataID3Type\",\"PlayerEventType\",\"CaptureEventType\",\"PlayerState\"].indexOf(l)<0&&(d[l]=function(e){return h[e]}.bind(0,l));n.d(r,d);var p=n(139),v=n(579),m=n(405),g=n(530),y=n(355)}(),module.exports=r}();","/* frontend-config parses the wh-config object in the browser and mocks any missing data. @webhare/env does not actually expose this config, @webhare/frontend does\n   The frontend configuration is built in the SiteResponse's 'frontendConfig' member */\n\nimport type { DTAPStage } from \"@webhare/env/src/concepts\";\nimport { debugFlags, initEnv } from \"@webhare/env/src/envbackend\";\nimport { getBrowserDebugFlags } from \"@webhare/env/src/init-browser\";\nimport type { FrontendDataTypes } from \"@webhare/frontend\";\n\n\n/** The format of the <script id=\"wh-config\"> object  */\nexport interface WHConfigScriptData {\n  ///Plugins may add keys at this level\n  [key: string]: unknown;\n\n  //NOTE: existing frontend code doesn't expect site/obj to ever be null. not sure if 'object' provides the best interface or whether we need some sort of 'unknown but an existing object'\n  /** Page (targetobject) specific settings */\n  obj: { [key: string]: unknown };\n  /** Site specific settings */\n  site: { [key: string]: unknown };\n\n  /** Numeric server version number (eg 5.02.24 = 50224)\n   *  @deprecated Interpreting numbers (or version strings) is dangerous. Feature flags/testing or limiting your entire module to compatible versions is safer\n  */\n  server: number;\n  /** Root URL of this site */\n  siteRoot: string;\n  /** @deprecated Use `document.documentElement.lang` instead */\n  locale: never;\n}\n\n//names fields can still have when not yet republished\nexport interface WHConfigScriptData_OldPublishFields {\n  islive: boolean;\n  dtapstage: DTAPStage;\n  siteroot: string;\n}\n\n//fallback names with deprecation warnings\nexport interface WHConfigScriptData_LegacyFields {\n  /** @deprecated Use dtapStage in WH5.4+ */\n  islive: boolean;\n  /** @deprecated Use `dtapStage` from \"\\@webhare/env\"; in WH5.4+ */\n  dtapstage: DTAPStage;\n  /** @deprecated Use `getSiteRoot` from \"\\@webhare/frontend\"; in WH5.7+ */\n  siteroot: string;\n}\n\ntype Configured = Partial<WHConfigScriptData & WHConfigScriptData_OldPublishFields & { dtapStage?: DTAPStage }>;\nlet config: Configured | undefined;\nlet siteroot;\nlet dtapStage: DTAPStage = \"production\";\n\n//if document is undefined, we're serverside or in a worker\nconst whconfigel = typeof document !== \"undefined\" ? document.querySelector('script#wh-config') : null;\nif (whconfigel?.textContent) {\n  config = JSON.parse(whconfigel.textContent) as Configured;\n\n  //Fallbacks for pages last published with WH5.3 *and* pages published from HareScript which still emit lowercase props\n  siteroot = config.siteRoot ?? config.siteroot;\n  dtapStage = config.dtapstage ?? config.dtapStage ?? dtapStage;\n}\n\ninitEnv(dtapStage, '/');\n\nif (typeof location !== \"undefined\")\n  for (const flag of getBrowserDebugFlags('wh-debug'))\n    debugFlags[flag] = true;\n\n\n/** @deprecated frontendConfig has been deprecated. Switch to the getFrontendData system */\n// Make sure we have obj/site as some sort of object, to prevent crashes on naive 'if ($wh.config.obj.x)' tests'\nexport const frontendConfig = {\n  server: 0,\n  ...config,\n  obj: config?.obj || {},\n  site: config?.site || {},\n  siteRoot: siteroot,\n  //deprecated variables:\n  dtapstage: dtapStage,\n  islive: ([\"production\", \"acceptance\"]).includes(dtapStage!),\n  siteroot\n} as WHConfigScriptData & WHConfigScriptData_LegacyFields; //in a future version we can either obsolete or even drop '& WHConfigScriptData_LegacyFields' and validation will fail without breaking existing JS code\n\n\n//NOTE: These APIs need to live in init.ts so eg gtm.ts can access us without triggering a CSS reset through frontend.ts. When frontend.ts stops auto-resetting we might move it back\n\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(type: Type, options: { allowMissing: true }): FrontendDataTypes[Type] | null;\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(type: Type, options?: { allowMissing: boolean }): FrontendDataTypes[Type];\n\n/** Get data exported by the response\n * @typeParam Type - The type of data to get\n * @param dataObject - The data object of data to get\n * @param allowMissing - If true, return null if the data object is missing. Otherwise throw an error\n * @example\n```\n  declare module \"@webhare/frontend\" {\n    interface FrontendDataTypes {\n      \"mymodule:type\": {\n        test: number;\n      };\n    }\n  }\n\n  const data = getFrontendData(\"mymodule:type\");\n```\n*/\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(dataObject: Type, { allowMissing = false } = {}): FrontendDataTypes[Type] | null {\n  const retval = config?.[dataObject] as FrontendDataTypes[Type];\n  if (!retval)\n    if (allowMissing)\n      return null;\n    else\n      throw new Error(`Missing frontend data object: ${dataObject}`);\n\n  return retval;\n}\n\n/** Get the current site root\n *\n * @returns The site root URL (ending with a slash)\n*/\nexport function getSiteRoot() { //now an API to improve treeshaking\n  return frontendConfig.siteRoot;\n}\n","\n//Note that @webhare/env does not invoke this API itself. In WebHare @webhare/frontend/src/init uses this to initialize\nexport function getBrowserDebugFlags(varname: string): string[] {\n  const flags = [];\n  const urldebugvar = new URL(location.href).searchParams.get(varname);\n  if (urldebugvar)\n    flags.push(...urldebugvar.split(','));\n\n  //not importing getCookie to solve some import ordering issues\n  if (typeof document !== \"undefined\") { //'document' is undefined in a worker but assetpacks compiled for a ServiceWorker will also load us\n    const debugcookie = document.cookie.match(`(?:^|;)\\\\s*${varname}=([^;]*)`); //TODO escape varname\n    if (debugcookie) {\n      const debugcookievalue = decodeURIComponent(debugcookie[1]);\n      if (debugcookievalue)\n        flags.push(... (debugcookievalue.split('.').filter(flag => !flag.startsWith('sig='))));\n    }\n  }\n\n  if (typeof sessionStorage !== \"undefined\") {\n    const sessionDebug = sessionStorage.getItem(varname);\n    if (sessionDebug)\n      flags.push(...sessionDebug.split(','));\n  }\n\n  return flags;\n}\n","// Set up dispose symbols - https://github.com/evanw/esbuild/pull/3192 \"you'll need to polyfill Symbol.dispose if it's not present before you use it.\n\n//@ts-ignore -- It's marked readonly\nSymbol.dispose ||= Symbol.for('Symbol.dispose');\n//@ts-ignore -- It's marked readonly\nSymbol.asyncDispose ||= Symbol.for('Symbol.asyncDispose');\n\n// Set up promise resolvers (ES2024)\nPromise.withResolvers ||= function <T>(): PromiseWithResolvers<T> {\n  let resolve: (value: T | PromiseLike<T>) => void;\n  let reject: (reason: Error) => void;\n  const promise = new Promise<T>((_resolve, _reject) => { resolve = _resolve; reject = _reject; });\n  // @ts-ignore `resolve` and `reject` are assigned synchronously, which isn't picked up by the TypeScript compiler (see\n  // https://github.com/Microsoft/TypeScript/issues/30053)\n  return { promise, resolve, reject };\n};\n\n// Polyfills for https://caniuse.com/?search=groupby - needed until we can assume safari 17.4 as global baseline\nif (!Map.groupBy)\n  Map.groupBy = function <Item, Key>(items: Iterable<Item>, callbackfn: (item: Item, idx: number) => Key): Map<Key, Item[]> {\n    const retval = new Map<Key, Item[]>;\n    let idx = 0;\n    for (const item of items) {\n      const key = callbackfn(item, idx++);\n      let list = retval.get(key);\n      if (!list)\n        retval.set(key, list = []);\n      list.push(item);\n    }\n    return retval;\n  };\n\nif (!Object.groupBy)\n  Object.groupBy = function <Item, Key extends string | number | symbol>(items: Iterable<Item>, callbackfn: (item: Item, idx: number) => Key): Partial<Record<Key, Item[]>> {\n    return Object.fromEntries(Map.groupBy(items, callbackfn).entries()) as Partial<Record<Key, Item[]>>;\n  };\n","/* eslint-disable @typescript-eslint/array-type */\n/* eslint-disable @typescript-eslint/no-loop-func */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n\n/* Iterator polyfills (https://caniuse.com/?search=iterator) - stage 4 ES but not in all browsers yet\n   Based on https://github.com/alkihis/iterator-polyfill/tree/master but we removed all the AsyncIterator\n   stuff as that's still stage 2 AND not implemented in TypeScript (as of 5.6)\n\n   We're ignoring a few linting/any issues as we really don't care to maintain this much\n   Fixed an issue with .some - reported as https://github.com/alkihis/iterator-polyfill/issues/6\n*/\n\n(function () {\n  // polyfill already applied / proposal implemented\n  if ('Iterator' in globalThis) {\n    return;\n  }\n\n  // Polyfill for Iterator\n  const IteratorPrototype = {};\n\n  const ArrayIteratorPrototype = Object.getPrototypeOf([][Symbol.iterator]());\n  const OriginalIteratorPrototype = Object.getPrototypeOf(ArrayIteratorPrototype);\n\n  Object.setPrototypeOf(OriginalIteratorPrototype, IteratorPrototype);\n\n  Object.defineProperties(IteratorPrototype, {\n    [Symbol.iterator]: {\n      value() {\n        return this;\n      }\n    },\n    map: {\n      *value<T, R>(callback: (value: T) => R): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = callback(value.value);\n          const next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    filter: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n          if (callback(real_value)) {\n            next_value = yield real_value;\n            value = it.next(next_value);\n          } else {\n            value = it.next(next_value);\n          }\n        }\n\n        return value.value;\n      },\n    },\n    find: {\n      value<T>(callback: (value: boolean) => T) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            return real_value;\n\n          value = it.next();\n        }\n      }\n    },\n    every: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (!callback(real_value))\n            return false;\n\n          value = it.next();\n        }\n\n        return true;\n      }\n    },\n    some: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value)) {\n            it.return();\n            return true;\n          }\n\n          value = it.next();\n        }\n\n        return false;\n      }\n    },\n    toArray: {\n      value(max_count = Infinity) {\n        const values = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (max_count <= 0)\n            return values;\n\n          values.push(real_value);\n\n          if (max_count !== Infinity)\n            max_count--;\n\n          value = it.next();\n        }\n\n        return values;\n      }\n    },\n    take: {\n      *value(limit: number): Generator<any, any, any> {\n        limit = Number(limit);\n        if (limit < 0)\n          throw new RangeError('Invalid limit.');\n\n        const it = this;\n        let value = it.next();\n        let remaining = limit;\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (remaining <= 0)\n            return;\n\n          next_value = yield real_value;\n          value = it.next(next_value);\n          remaining--;\n        }\n\n        return value.value;\n      },\n    },\n    drop: {\n      *value(limit: number): Generator<any, any, any> {\n        limit = Number(limit);\n        if (limit < 0)\n          throw new RangeError('Invalid limit.');\n\n        const it = this;\n        let value = it.next();\n        let remaining = limit;\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (remaining > 0) {\n            value = it.next(next_value);\n            remaining--;\n            continue;\n          }\n\n          next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    asIndexedPairs: {\n      *value(): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let index = 0;\n\n        while (!value.done) {\n          const real_value = value.value;\n          const next_value = yield [index, real_value];\n          value = it.next(next_value);\n          index++;\n        }\n\n        return value.value;\n      }\n    },\n    flatMap: {\n      *value<T, R extends object>(mapper: (value: T) => IterableIterator<R> | R): Generator<any, any, any> {\n        if (typeof mapper !== 'function') {\n          throw new TypeError('Mapper must be a function.');\n        }\n\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n          const mapped = mapper(real_value);\n\n          if (Symbol.iterator in mapped) {\n            // @ts-ignore -- copied from original\n            next_value = yield* mapped[Symbol.iterator]();\n          } else {\n            next_value = yield mapped;\n          }\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    reduce: {\n      value<T, V>(reducer: (acc: V, value: T) => V, initial_value?: V) {\n        let acc = initial_value;\n\n        const it = this;\n        if (acc === undefined) {\n          acc = it.next().value;\n        }\n\n        let value = it.next();\n        while (!value.done) {\n          const real_value = value.value;\n\n          acc = reducer(acc!, real_value);\n\n          value = it.next();\n        }\n\n        return acc;\n      }\n    },\n    forEach: {\n      value<T>(callback: (value: T) => any) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          callback(real_value);\n\n          value = it.next();\n        }\n      }\n    },\n    [Symbol.toStringTag]: {\n      value: 'IteratorPrototype'\n    },\n\n    /* OUTSIDE PROPOSAL */\n    count: {\n      value() {\n        let count = 0;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          count++;\n          value = it.next();\n        }\n\n        return count;\n      },\n    },\n    join: {\n      value(string: string) {\n        let final = '';\n        let first = true;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (first) {\n            first = false;\n            final += real_value;\n          } else {\n            final += string + real_value;\n          }\n\n          value = it.next();\n        }\n\n        return final;\n      }\n    },\n    chain: {\n      *value<I>(...iterables: IterableIterator<I>[]) {\n        yield* this;\n\n        for (const it of iterables) {\n          yield* it;\n        }\n      }\n    },\n    zip: {\n      *value<T, O>(...others: IterableIterator<O>[]): Iterator<(T | O)[]> {\n        const it_array = [this, ...others].map((e: any) => Symbol.iterator in e ? e[Symbol.iterator]() : e as Iterator<T | O>);\n        let values = it_array.map(e => e.next());\n        let next_value: any;\n\n        while (values.every(e => !e.done)) {\n          next_value = yield values.map(e => e.value);\n          values = it_array.map(e => e.next(next_value));\n        }\n      },\n    },\n    takeWhile: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            next_value = yield real_value;\n          else\n            return;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    dropWhile: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n        let finished = false;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (!finished && callback(real_value)) {\n            value = it.next(next_value);\n            continue;\n          }\n\n          finished = true;\n          next_value = yield real_value;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    fuse: {\n      *value(): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (real_value !== undefined && real_value !== null)\n            next_value = yield real_value;\n          else\n            return;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    partition: {\n      value<T>(callback: (value: T) => boolean) {\n        const partition1 = [], partition2 = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            partition1.push(real_value);\n          else\n            partition2.push(real_value);\n\n          value = it.next();\n        }\n\n        return [partition1, partition2];\n      },\n    },\n    findIndex: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let i = 0;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            return i;\n\n          value = it.next();\n          i++;\n        }\n\n        return -1;\n      }\n    },\n    max: {\n      value() {\n        let max = -Infinity;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (max < real_value)\n            max = real_value;\n\n          value = it.next();\n        }\n\n        return max;\n      },\n    },\n    min: {\n      value() {\n        let min = Infinity;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (min > real_value)\n            min = real_value;\n\n          value = it.next();\n        }\n\n        return min;\n      },\n    },\n    cycle: {\n      *value(): Generator<any, any, any> {\n        const values = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n          values.push(real_value);\n\n          const next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        while (true) {\n          yield* values;\n        }\n      },\n    },\n  });\n\n  //iterator.from from https://github.com/rauschma/iterator-helpers-polyfill/\n\n  function isObject(value: unknown) {\n    if (value === null) return false;\n    const t = typeof value;\n    return t === 'object' || t === 'function';\n  }\n\n  function GetIteratorFlattenable<T>(obj: Record<symbol, any>): T {\n    if (!isObject(obj)) {\n      throw new TypeError();\n    }\n    const method = obj[Symbol.iterator];\n    let iterator = undefined;\n    if (typeof method !== 'function') {\n      iterator = obj;\n    } else {\n      iterator = method.call(obj);\n    }\n    if (!isObject(iterator)) {\n      throw new TypeError();\n    }\n    return iterator;\n  }\n\n  if (!('Iterator' in globalThis)) {\n    const Iterator = function Iterator() { };\n\n    Iterator.prototype = IteratorPrototype;\n\n    // @ts-expect-error We're still missing From in this poyfill\n    (globalThis).Iterator = Iterator;\n  }\n\n\n  //----- Static method -----\n  // Must be done after Iterator.prototype was set up,\n  // so that `extends Iterator` works below\n\n  class WrappedIterator<T, TReturn = any, TNext = undefined> extends Iterator<T, TReturn, TNext> {\n    #iterator;\n    constructor(iterator: Iterator<T, TReturn, TNext>) {\n      super();\n      this.#iterator = iterator;\n    }\n    override next(...args: [] | [TNext]): any {\n      return this.#iterator.next(...args);\n    }\n    // `async` helps with line (*)\n    override return(value?: TReturn | PromiseLike<TReturn>): any {\n      const returnMethod = this.#iterator.return;\n      if (returnMethod === undefined) {\n        return { done: true, value: value as any }; // (*)\n      }\n      return returnMethod.call(this.#iterator);\n    }\n  }\n\n  function Iterator_from<T>(value: any) {\n    const iterator = GetIteratorFlattenable<Iterator<T>>(value);\n    if (iterator instanceof Iterator) {\n      return iterator;\n    }\n    // `iterator´ does not support the new API – wrap it so that it does\n    return new WrappedIterator(iterator);\n  }\n\n  Object.defineProperty(\n    Iterator, 'from',\n    {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: Iterator_from,\n    }\n  );\n})();\n","import { debugFlags } from '@webhare/env';\nimport * as domevents from '../../../modules/system/js/dompack/src/events';\nimport \"@webhare/tsrun/src/polyfills\";\n\nlet locallocks: BusyLock[] = [];\nlet modallocked = false;\nlet uiwatcher: NodeJS.Timeout | null = null;\nlet installedanticancelhandler = false;\n\nlet currentbusymodaldialog: HTMLDialogElement | null = null;\nlet currentbusymodaluserdialog: HTMLDialogElement | null = null;\nlet busymodalcontent: string | HTMLElement | HTMLDialogElement | undefined;\nlet mylockmgr: LockManager | undefined;\n\nexport type BusyModalEvent = CustomEvent<{ show: boolean }>;\n\n// As 'Lock' already exists on the Web (https://developer.mozilla.org/docs/Web/API/Lock) and it's seldom used just use a longer name. Available since WH 5.4\nexport interface UIBusyLock extends Disposable {\n  release(): void;\n  [Symbol.dispose](): void;\n}\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:busymodal\": BusyModalEvent;\n  }\n  interface Window {\n    __dompack_busylockmanager?: LockManager;\n  }\n\n  // __dompack_busylockmanager: LockManager | undefined;  //\n}\n\nfunction getLockmgr(): LockManager {\n  if (!mylockmgr) {\n    mylockmgr = getParentLockManager() || new LockManager;\n    if (typeof window !== \"undefined\")\n      window.__dompack_busylockmanager = mylockmgr;\n  }\n  return mylockmgr;\n}\n\nfunction anyModalLocks() {\n  return locallocks.some(l => l.modal);\n}\n\n/* scheduleCheckUIFree is invoked by release() or when waitUIFree is explicitly called. the call from release() should\n   be a 'fast' path. We schedule a full check for the next tick if there's a chance it might actually find a free UI */\nfunction scheduleCheckUIFree() {\n  if (!uiwatcher && locallocks.length === 0)\n    uiwatcher = setTimeout(() => checkUIFree(), 0);\n}\n\n/* check if the UI is actually free. if so, remove busymodals and resolve waitUIFrees for the benefit of testfw  */\nfunction checkUIFree() {\n  uiwatcher = null;\n\n  if (modallocked && !anyModalLocks()) { //did the last frame-level *modal* lock just get released?\n    modallocked = false;\n    toggleBusyModal(false);\n  }\n\n  if (locallocks.length === 0) {\n    const lockmgr = getLockmgr();\n    lockmgr.busyframes.delete(window); //we won't release our block in the lockmanager until we've had a chance to remove our modal layer\n    lockmgr.checkUIFree(); //to resolve any waitUIFrees. runs in the top-level frame. note that lockmgr cares about ALL ui locks, not just modals\n  }\n}\n\nfunction isDialogElement(el: unknown): boolean {\n  return typeof el === \"object\" && (el as HTMLElement).matches?.(\"dialog\") || false;\n}\n\nfunction checkCancelEvent(evt: Event) {\n  if (modallocked)\n    evt.preventDefault();\n}\n\nfunction toggleBusyModal(show: boolean) {\n  //'islock' is legacy non-camel version. TypeScript typing should help us transition (since 5.3). 'as' shuts up the warning TODO remove 'islock' and the 'as'\n  if (!domevents.dispatchCustomEvent(window, 'dompack:busymodal', { bubbles: true, cancelable: true, detail: { show: show, islock: show } as BusyModalEvent['detail'] }))\n    return; //cancelled!\n\n  if (!installedanticancelhandler) {\n    //capture cancel, as it doesn't bubble up\n    addEventListener(\"cancel\", evt => checkCancelEvent(evt), { capture: true });\n    installedanticancelhandler = true;\n  }\n\n  if (show) {\n    if (isDialogElement(busymodalcontent)) { //the user provided us with an element\n      currentbusymodaluserdialog = busymodalcontent as HTMLDialogElement;\n      currentbusymodaluserdialog.showModal();\n    } else if (busymodalcontent) { //we'll create our own dialog\n      const dialog = document.createElement('dialog');\n      const toembed = typeof busymodalcontent === \"string\" ? document.createTextNode(busymodalcontent) : busymodalcontent.cloneNode(true);\n      dialog.className = \"dompack-busydialog\";\n      dialog.role = \"status\";\n      dialog.ariaLive = \"off\";\n      dialog.append(toembed);\n      document.body.appendChild(dialog);\n      currentbusymodaldialog = dialog;\n      dialog.showModal();\n      return;\n    }\n\n    document.documentElement.classList.add(\"dompack--busymodal\");\n    return;\n  }\n\n  //hiding\n  document.documentElement.classList.remove(\"dompack--busymodal\");\n  if (currentbusymodaluserdialog)\n    currentbusymodaluserdialog.close();\n  if (currentbusymodaldialog) { //we added a dialog to the dom\n    currentbusymodaldialog.close();\n    document.body.removeChild(currentbusymodaldialog);\n    currentbusymodaldialog = null;\n  }\n}\n\nclass LockManager {\n  locks: BusyLock[];\n  busyframes: Set<Window> = new Set;\n  busycounter: number;\n  deferreduipromise: PromiseWithResolvers<boolean> | null;\n\n  //this object is not for external consumption\n  constructor() {\n    this.locks = [];\n    this.busycounter = 0;\n    this.deferreduipromise = null;\n  }\n  add(lock: BusyLock) {\n    this.locks.push(lock);\n    const returnvalue = this.busycounter++;\n    return returnvalue;\n  }\n  release(lock: BusyLock) {\n    const pos = this.locks.indexOf(lock);\n    if (pos === -1) {\n      if (debugFlags.bus) {\n        console.error(\"Duplicate release of busy lock #\" + lock.locknum);\n        console.log(\"Lock allocated:\");\n        console.log(lock.acquirestack);\n        console.log(\"Lock first released:\");\n        console.log(lock.releasestack);\n      }\n      throw new Error(\"Duplicate release of busy lock\");\n    }\n\n    this.locks.splice(pos, 1);\n  }\n  getNumLocks() {\n    return this.locks.length;\n  }\n  //used by child windows to schedule a check in *our* frame (eg before they themselves are unloaded)\n  scheduleCheckUIFree() {\n    scheduleCheckUIFree();\n  }\n  checkUIFree() {\n    if (this.locks.length === 0 && this.busyframes.size === 0 && this.deferreduipromise) {\n      this.deferreduipromise.resolve(true);\n      this.deferreduipromise = null;\n    }\n  }\n  waitUIFree() {\n    if (!this.deferreduipromise)\n      this.deferreduipromise = Promise.withResolvers();\n\n    scheduleCheckUIFree(); //ensures uiwait is released at next tick if no locks are present at all\n    return this.deferreduipromise.promise;\n  }\n  logLocks() {\n    this.locks.forEach(lock => console.log('[bus] lock #' + lock.locknum, lock.acquirestack, lock));\n    console.log(\"[bus] total \" + this.locks.length + \" locks\");\n  }\n  getLockIds() {\n    return this.locks.map(l => \"#\" + l.locknum).join(\", \");\n  }\n}\n\n/** Configure an (accessible) modal dialog\n * @param bmc - What to show in the dialog: either a text or DOM fragment to clone.\n *              If a <dialog> element is passed, this dialog will be used instead of creating a new one.\n */\nexport function setupBusyModal(bmc: NonNullable<typeof busymodalcontent>) {\n  busymodalcontent = bmc;\n}\n\ninterface LockOptions {\n  ///Whether this lock should enable a modality laayer\n  modal?: boolean;\n}\n\nclass BusyLock implements UIBusyLock {\n  modal: boolean;\n  locknum: number;\n  acquirestack: string | undefined;\n  releasestack: string | undefined;\n\n  constructor(options?: LockOptions) {\n    //legacy non-camel name is 'ismodal'\n    this.modal = options?.modal ?? (options as { ismodal?: boolean })?.ismodal ?? false;\n\n    const lockmgr = getLockmgr();\n    this.locknum = lockmgr.add(this);\n    lockmgr.busyframes.add(window);\n    locallocks.push(this);\n\n    if (this.modal && !modallocked) {\n      modallocked = true;\n      toggleBusyModal(true);\n    }\n\n    if (debugFlags.bus) {\n      this.acquirestack = (new Error).stack;\n      console.trace('[bus] Busy lock #' + this.locknum + ' taken. ' + lockmgr.getNumLocks() + \" locks active now: \" + lockmgr.getLockIds());\n    }\n  }\n\n  [Symbol.dispose]() {\n    if (debugFlags.bus)\n      this.releasestack = (new Error).stack;\n\n    const lockmgr = getLockmgr();\n    lockmgr.release(this);\n    const lockpos = locallocks.indexOf(this);\n    locallocks.splice(lockpos, 1);\n\n    if (debugFlags.bus) {\n      console.trace('[bus] Busy lock #' + this.locknum + ' released. ' + lockmgr.getNumLocks() + \" locks active now: \" + lockmgr.getLockIds());\n    }\n\n    scheduleCheckUIFree();\n  }\n\n  release() {\n    this[Symbol.dispose]();\n  }\n}\n\n/** Return a promise resolving as soon as the UI (any accessible frame) is free for at least one tick */\nexport function waitUIFree() {\n  return getLockmgr().waitUIFree();\n}\n\n/**\n     flag userinterface as busy. tests then know not to interact with the UI until the busy flag is released\n *\n    @param options - Options.<br>\n                   - modal: true/false - Whether the lock is a modal lock\n */\nexport function flagUIBusy(options?: LockOptions): UIBusyLock {\n  return new BusyLock(options);\n}\n\nexport function getUIBusyCounter() {\n  return getLockmgr().busycounter;\n}\n\nfunction getParentLockManager(): LockManager | null {\n  try { //we're accessing a parent window, so we may hit security exceptions\n    if (!(window.parent?.__dompack_busylockmanager))\n      return null;\n\n    //if we connected to a parent...  deregister our locks, eg. if parent navigated our frame away\n    window.addEventListener(\"pagehide\", () => {\n      if (debugFlags.bus)\n        console.log(\"[bus] Frame unloading, \" + locallocks.length + \" locks pending.\", locallocks.map(l => \"#\" + l.locknum).join(\", \"), locallocks);\n\n      //switch to local instance in case anyone still tries to touch these locks during unload\n      const lockmgr = getLockmgr();\n      const locallockmgr = new LockManager;\n      locallocks.forEach(lock => { lockmgr.release(lock); locallockmgr.add(lock); });\n      locallocks = [];\n\n      lockmgr.busyframes.delete(window); //explicitly remove us so we won't be waited upon\n      lockmgr.scheduleCheckUIFree();\n      mylockmgr = locallockmgr;\n    });\n\n    return window.parent.__dompack_busylockmanager;\n  } catch (e) {\n    return null;\n  }\n}\n","import type { FormControlElement } from \"@webhare/dompack\";\n\nexport const CustomEvent = globalThis.CustomEvent;\n/** Wrap an event to ensure it's target is a HTMLElement\n * @typeParam EventType - The expected event type\n * @typeParam CurrentTargetType - The type of the elemnt you're binding the event to. Optional, defaults to HTMLElement\n * @typeParam RelatedTargetType - The type of the elemnt you're binding the event to. Optional, defaults to HTMLElement\n*/\nexport type DocEvent<EventType extends Event, CurrentTargetType extends HTMLElement = HTMLElement, RelatedTargetType extends HTMLElement = HTMLElement> = EventType & {\n  target: HTMLElement;\n  currentTarget: CurrentTargetType;\n  relatedTarget: RelatedTargetType | null;\n};\n\nexport type DomEventOptions =\n  {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    relatedTarget?: EventTarget;\n    detail?: object;\n  };\n\nexport function dispatchDomEvent(element: EventTarget, eventtype: string, options?: DomEventOptions) {\n  //see here https://developer.mozilla.org/en-US/docs/Web/Events whether an event is bubbles/cancelabel\n  options = {\n    bubbles: [\n      \"input\", \"change\", \"click\", \"contextmenu\", \"dblclick\",\n      \"reset\", \"submit\"\n    ].includes(eventtype),\n    cancelable: [\n      \"animationstart\", \"animationcancel\", \"animationend\", \"animationiteration\",\n      \"beforeunload\",\n      \"click\", \"contextmenu\", \"dblclick\",\n      \"reset\", \"submit\",\n      \"transitionstart\", \"transitioncancel\", \"transitionend\", \"transitionrun\"\n    ].includes(eventtype),\n    ...options\n  };\n\n  if (!element || !(element as Node).ownerDocument)\n    return true; //the element has left the dom... so there's no more bubbling. just drop it\n\n  //FIXME the load/scroll is buggy and we should be probably be using new Event (but an earlier attempt at that triggered quite a few test failures)\n  const createtype = /*[\"load\",\"scroll\"].includes(eventtype) === \"load\" ? \"UIEvents\" :*/[\"focus\", \"blur\", \"focusin\", \"focusout\"].includes(eventtype) ? \"FocusEvent\" : eventtype === \"click\" ? \"MouseEvents\" : \"HTMLEvents\";\n  //we verified its non-null ness above but TS doesn't really understand that\n  const evt = (element as Node).ownerDocument!.createEvent(createtype);\n  evt.initEvent(eventtype, options.bubbles, options.cancelable);\n  if (options.detail)\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we should just rewrite to new Event\n    (evt as any).detail = options.detail;\n  if (options.relatedTarget) //its a readonly prop, so redefine it\n    Object.defineProperty(evt, 'relatedTarget', { value: options.relatedTarget, writable: false });\n\n  //TODO: Should we keep this code?\n  // @ts-ignore IScroll is a custom Window property set by IScroll\n  if (eventtype === 'click' && window.IScroll)\n    // @ts-ignore _constructed is a custom Event property used by IScroll\n    evt._constructed = true; //ensure IScroll doesn't blindly cancel our synthetic clicks\n\n  return element.dispatchEvent(evt);\n}\n\n/** Fire the proper modified events (input and/or change) on the element after changing its value\n * @param element - Element to receive event\n * @param options - Event options\n * @deprecated Use changeValue so we can figure out the proper events to fire\n */\nexport function fireModifiedEvents(element: FormControlElement, options?: DomEventOptions) {\n  dispatchDomEvent(element, 'input', options);\n  dispatchDomEvent(element, 'change', options);\n}\n\n//manually fire 'onchange' events. needed for event simulation - DEPRECATED\n/**\n * @param element - Element to receive event\n * @param type - Event type\n * @param options - Event options\n * @deprecated Use dispatchDomEvent instead\n */\nexport function fireHTMLEvent(element: EventTarget, type: string, options?: DomEventOptions) {\n  return dispatchDomEvent(element, type, options);\n}\n\ntype CustomEventParams =\n  {\n    /** Whether this event should bubble up in the DOM */\n    bubbles: boolean;\n    /** Whether this event can be cancelled */\n    cancelable: boolean;\n    /** Custom event information */\n    detail?: unknown;\n    /** Handler to execute if the default isn't prevented by a event listener */\n    defaulthandler?: (evt: CustomEvent) => void;\n  };\n\n/** Fire a custom event\n    @param node - node to fire the event on\n    @param event - event type. You should add this event to the GlobalEventHandlersEventMap for validation in dispatchCustomEvent calls and addEventListener callbacks.\n    @param params - Event options\n    @returns true if the default wasn't prevented\n */\n\nexport function dispatchCustomEvent<K extends string>(\n  node: EventTarget,\n  event: K,\n  params: CustomEventParams & (K extends keyof GlobalEventHandlersEventMap ?\n    GlobalEventHandlersEventMap[K] extends CustomEvent ?\n    { detail: GlobalEventHandlersEventMap[K][\"detail\"] } : unknown : unknown)) {\n\n  if (!params)\n    throw new Error(`Missing dispatchCustomEvent params`);\n  ['bubbles', 'cancelable'].forEach(prop => {\n    if (!(prop in params))\n      throw new Error(`Missing '${prop}' in dispatchCustomEvent params`);\n  });\n\n  const evt = new CustomEvent(event, {\n    bubbles: params.bubbles,\n    cancelable: params.cancelable,\n    detail: params.detail\n  });\n  let defaultaction = true;\n  try {\n    if (!node.dispatchEvent(evt))\n      defaultaction = false; //defaultPrevented is unreliable on IE11, so double check\n  } finally {\n    if (!evt.defaultPrevented && params.defaulthandler && defaultaction) {\n      params.defaulthandler(evt);\n    }\n  }\n  return defaultaction && !evt.defaultPrevented;\n}\n\n/**\n     Change the value of a form element, and fire the correct events as if it were a user change\n *\n    @param element - Element to change\n    @param newvalue - New value\n */\nexport function changeValue(element: FormControlElement, newvalue: string | number | boolean) {\n  if (element.matches(`input[type=radio], input[type=checkbox]`)) {\n    if (Boolean((element as HTMLInputElement).checked) === Boolean(newvalue))\n      return;\n    (element as HTMLInputElement).checked = Boolean(newvalue);\n  } else {\n    //FIXME it's not really clean to assume that this element is changeable - throw for non input/select..\n    const asString = String(newvalue);\n    if ((element as HTMLInputElement).value === asString)\n      return;\n\n    (element as HTMLInputElement).value = String(newvalue);\n  }\n  dispatchDomEvent(element as EventTarget, 'input');\n  dispatchDomEvent(element as EventTarget, 'change');\n}\n\nlet keydata: { mapping: { [key: string]: string } };\n\nfunction initKeyMapping() {\n  keydata =\n  {\n    // Mapping from keyIdentifier/key to key. If not found, translate U+XXXX to the unicode char and return that.\n\n    // List of all current key mappings (and current inconsistencies\n    // at https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n    mapping:\n    {\n      \"Del\": \"Delete\", // IE/edge use 'Del' instead of 'Delete'\n      \"Esc\": \"Escape\", // IE/edge use 'Esc' instead of 'Escape'\n      \"OS\": \"Meta\", // Meta key is called OS on IE 9 and Firefox (tested v50)\n      \"Win\": \"Meta\", // Meta key is called Win on IE/Edge\n      \"Scroll\": \"ScrollLock\", // More IE/Edge, from tests\n      \"PrintScreen\": \"Print\", // More IE/Edge, from tests\n      \"MozHomeScreen\": \"GoHome\", // Prior to Firefox 37, the Home button generated a key code of \"Exit\". Starting in Firefox 37, the button generates the key code \"MozHomeScreen\".\n\n      // Internet Explorer 9 and Firefox 36 and earlier return \"Left\", \"Right\", \"Up\", and \"Down\" for the arrow keys, instead of \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", and \"ArrowDown\".\n      \"Left\": \"ArrowLeft\",\n      \"Right\": \"ArrowRight\",\n      \"Up\": \"ArrowUp\",\n      \"Down\": \"ArrowDown\",\n      // More IE and old Firefox stuff\n      \"Crsel\": \"CrSel\",\n      \"Exsel\": \"ExSel\",\n      \"Nonconvert\": \"NonConvert\",\n      // Internet Explorer 9 and Firefox 36 and earlier report \"Apps\" instead of \"ContextMenu\" for the context menu key.\n      \"Apps\": \"ContextMenu\",\n      // Internet Explorer 9 and Firefox 36 and earlier use \"MediaNextTrack\" and \"MediaPreviousTrack\" instead of \"MediaTrackNext\" and \"MediaTrackPrevious\".\n      \"MediaNextTrack\": \"MediaTrackNext\",\n      \"MediaPreviousTrack\": \"MediaTrackPrevious\",\n      // In Internet Explorer 9, and prior to Firefox 49, \"AudioVolumeUp\", \"AudioVolumeDown\", and \"AudioVolumeMute\" were \"VolumeUp\", \"VolumeDown\", and \"VolumeMute\".\n      // In Firefox 49 they were updated to match the latest specification. The old names are still used on Boot to Gecko.\n      \"VolumeUp\": \"AudioVolumeUp\",\n      \"VolumeDown\": \"AudioVolumeDown\",\n      \"VolumeMute\": \"AudioVolumeMute\",\n      // Firefox added proper support for the \"TV\" key in Firefox 37; before that, this key generated the key code \"Live\".\n      \"Live\": \"TV\",\n      // Internet Explorer 9 and Firefox 36 and earlier identify the zoom toggle button as \"Zoom\". Firefox 37 corrects this to \"ZoomToggle\".\n      \"Zoom\": \"ZoomToggle\",\n      // Internet Explorer 9 and Firefox 36 and earlier use \"SelectMedia\" instead of \"LaunchMediaPlayer\". Firefox 37 through Firefox 48 use \"MediaSelect\". Firefox 49 has been updated to match the latest specification, and to return \"LaunchMediaPlayer\".\n      \"SelectMedia\": \"LaunchMediaPlayer\",\n      \"MediaSelect\": \"LaunchMediaPlayer\",\n      // Google Chrome returns \"LaunchCalculator\" instead of \"LaunchApplication1\". See Chromium bug 612743 for more information.\n      // Google Chrome returns \"LaunchMyComputer\" instead of \"LaunchApplication2\". See Chromium bug 612743 for more information.\n      // (LaunchCalculator and LaunchMyComputer are valid too, so no translation)\n\n      // While older browsers used words like \"Add\", \"Decimal\", \"Multiply\", and so forth modern browsers identify these using the actual character (\"+\", \".\", \"*\", and so forth).\n      \"Multiply\": \"*\",\n      \"Add\": \"+\",\n      \"Divide\": \"/\",\n      \"Subtract\": \"-\",\n      \"Decimal\": \".\", // (mozilla Key_Values doc says depends on region)\n      \"Separator\": \".\", // (mozilla Key_Values doc says depends on region)\n\n      // keyIdenfier spec mapping of non-printable keys: https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#keyset-keyidentifiers\n      // Used in safari\n      \"U+0008\": \"Backspace\",\n      \"U+0009\": \"Tab\",\n      \"U+000D\": \"Enter\",\n      \"U+0018\": \"Cancel\",\n      \"U+001B\": \"Escape\",\n      \"U+007F\": \"Delete\",\n      \"U+0300\": \"DeadGrave\",\n      \"U+0301\": \"DeadEacute\",\n      \"U+0302\": \"DeadCircumflex\",\n      \"U+0303\": \"DeadTilde\",\n      \"U+0304\": \"DeadMacron\",\n      \"U+0306\": \"DeadBreve\",\n      \"U+0307\": \"DeadAboveDot\",\n      \"U+0308\": \"DeadUmlaut\",\n      \"U+030A\": \"DeadAboveRing\",\n      \"U+030B\": \"DeadDoubleacute\",\n      \"U+030C\": \"DeadCaron\",\n      \"U+0327\": \"DeadCedilla\",\n      \"U+0328\": \"DeadOgonek\",\n      \"U+0345\": \"DeadIota\",\n      \"U+3099\": \"DeadVoicedSound\",\n      \"U+309A\": \"DeadSemivoicedSound\",\n\n      // keyIdenfier spec mapping to characters: https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#keyset-keyidentifiers\n      \"Exclamation\": \"!\",\n      \"DoubleQuote\": \"\\\"\",\n      \"Hash\": \"#\",\n      \"Dollar\": \"$\",\n      \"Ampersand\": \"&\",\n      \"LeftParen\": \"(\",\n      \"RightParen\": \")\",\n      \"Asterisk\": \"*\",\n      \"Plus\": \"+\",\n      \"Percent\": \"%\",\n      \"Comma\": \",\",\n      \"HyphenMinus\": \"-\",\n      \"Period\": \".\",\n      \"Solidus\": \"/\",\n      \"Colon\": \":\",\n      \"Semicolon\": \";\",\n      \"LessThan\": \"<\",\n      \"Equals\": \"=\",\n      \"GreaterThan\": \">\",\n      \"QuestionMark\": \"?\",\n      \"At\": \"@\",\n      \"LeftSquareBracket\": \"[\",\n      \"Backslash\": \"\\\\\",\n      \"RightSquareBracket\": \"]\",\n      \"Circumflex\": \"^\",\n      \"Underscore\": \"_\",\n      \"Grave\": \"`\",\n      \"LeftCurlyBracket\": \"{\",\n      \"Pipe\": \"|\",\n      \"RightCurlyBracket\": \"}\",\n      \"Euro\": \"€\",\n      \"InvertedExclamation\": \"¡\",\n\n      // Safari fixes: viewed in local tests\n      \"U+0010\": \"ContextMenu\"\n    }\n  };\n}\n\nexport type NormalizedKeyboardEvent =\n  {\n    type: string;\n    target: EventTarget | null;\n    key: string;\n    code: string;\n    ctrlKey: boolean;\n    altKey: boolean;\n    location: number;\n    shiftKey: boolean;\n    metaKey: boolean;\n    repeat: boolean;\n    isComposing: boolean;\n  };\n\n/**\n     Returns normalized keyboard event properties, following the current W3C UI Events spec\n *\n    @param evt - Keyboard event\n    @returns Normalized keyboard event data\n */\nexport function normalizeKeyboardEventData(evt: KeyboardEvent): NormalizedKeyboardEvent {\n  // event.key is supported from chrome:51, edge, ff: 29, ie: 9, not in safari\n  // event.keyIdentifier in chrome 26-54, opera 15-41, safara: 5.1\n  // safari doesn't provide either in keypress events, use U+evt.keyCode (uppercase 4-byte hex)\n\n  let key = evt.key;\n  if (!keydata)\n    initKeyMapping();\n  if (keydata.mapping[key])\n    key = keydata.mapping[key];\n  else if (key.startsWith(\"U+\")) // U+xxxx code\n    key = String.fromCodePoint(parseInt(key.substring(2), 16));\n\n  // Seen in chrome 56.0.2924.76 on linux, numpad '.' without numlock returns key \"\\u0000\"\n  if (evt.key === \"\\u0000\" && evt.code === \"NumpadDecimal\")\n    key = \".\";\n\n  return (\n    {\n      type: evt.type,\n      target: evt.target,\n      key: key,\n      code: evt.code || \"Unidentified\",\n      ctrlKey: evt.ctrlKey,\n      altKey: evt.altKey,\n      location: evt.location,\n      shiftKey: evt.shiftKey,\n      metaKey: evt.metaKey,\n      repeat: evt.repeat,\n      isComposing: evt.isComposing\n    });\n}\n\n/**\n * Stop, fully, an event\n *\n * @param event - Event to stop\n */\nexport function stop(event: Event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\n/** Add an event listener to HTMLElements inside a document (which allows us to ensure that 'target' is a HTMLElement for easier typings) */\nexport function addDocEventListener<CurrentTargetType extends HTMLElement, Type extends keyof HTMLElementEventMap>(node: CurrentTargetType, type: Type, listener: (this: CurrentTargetType, ev: DocEvent<HTMLElementEventMap[Type], CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void;\nexport function addDocEventListener<CurrentTargetType extends HTMLElement>(node: CurrentTargetType, type: string, listener: (this: CurrentTargetType, evt: DocEvent<Event, CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void;\n\nexport function addDocEventListener<CurrentTargetType extends HTMLElement>(node: CurrentTargetType, type: string, listener: (this: CurrentTargetType, evt: DocEvent<Event, CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void {\n  node.addEventListener(type, listener as EventListener, options);\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/dompack\" {\n}\n\n/* This is our public api */\nexport { flagUIBusy, setupBusyModal } from './busy';\nexport type { UIBusyLock, BusyModalEvent } from './busy';\nexport { dispatchCustomEvent, dispatchDomEvent, fireModifiedEvents, changeValue, stop, addDocEventListener } from '../../../modules/system/js/dompack/src/events';\nexport type { DocEvent, DomEventOptions } from '../../../modules/system/js/dompack/src/events';\nexport { qS, qR, qSA, isFormControl, isEditControl, isElement, isHTMLElement, getRelativeBounds, getLang } from './tree';\nexport type { FormControlElement, Rect } from './tree';\nexport { isDomReady, onDomReady } from '../../../modules/system/js/dompack/src/tree';\nexport { create, jsxcreate, jsxfragment } from '../../../modules/system/js/dompack/src/create';\nexport { focus, register, registerMissed } from '../../../modules/system/js/dompack/src/components';\nexport type { TakeFocusEvent } from '../../../modules/system/js/dompack/src/components';\nexport { getLocal, setLocal, getSession, setSession, listCookies, getCookie, setCookie, deleteCookie } from './storage';\nexport { loadImage, loadScript, loadCSS } from \"./preload\";\nexport { browser, getBrowser, isMultiSelectKey, isCopyKey } from './browser';\nexport type { KeyAttributeValue, UserAgentInfo, Platform, Device } from './browser';\n\n/** @deprecated As 'Lock' conflicts, in WH5.4+ you can safely switch to UIBusyLock */\nimport type { UIBusyLock } from './busy';\nexport type Lock = UIBusyLock;\n","\n/* Regex to identify dimensionless style sttributes. copied from old version of preact/src/constants.js (MIT)\n   meant to capture:\n  { boxFlex:1, boxFlexGroup:1, columnCount:1, fillOpacity:1, flex:1, flexGrow:1,\n    flexPositive:1, flexShrink:1, flexNegative:1, fontWeight:1, lineClamp:1, lineHeight:1,\n    opacity:1, order:1, orphans:1, strokeOpacity:1, widows:1, zIndex:1, zoom:1\n*/\nconst IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nexport { qS, qSA } from '@webhare/dompack/src/tree.ts';\n\nfunction generateInsertList(nodes: Array<string | Node>) {\n  if (nodes.length === 1)\n    return typeof nodes[0] === 'string' ? document.createTextNode(nodes[0]) : nodes[0];\n\n  const frag = document.createDocumentFragment();\n  nodes.forEach(node => frag.appendChild(typeof node === 'string' ? document.createTextNode(node) : node));\n  return frag;\n}\n\n/** @deprecated Use node.matches() */\nexport function matches(node: Element, selector: string): boolean {\n  //only invoke 'matches' if it exists. it *should* but past versions of dompack.matches would check for it too (and thus not fail if you passed in a string instead of a Node)\n  return node.matches?.(selector);\n}\n/** @deprecated Use node.closest() */\nexport function closest(node: Element, selector: string) {\n  if (node.closest)\n    return node.closest(selector);\n  //TODO: Warn about out-of-date browser?\n  let testNode: Element | null = node;\n  for (; testNode && !matches(testNode, selector); testNode = testNode.parentElement)\n    /*iterate*/;\n  return testNode;\n}\n//implements contains. TODO we only really need this on IE11, which doesn't consider a text node a child, we can probably fall back to native elsewhere ?\n/** @deprecated Use node.contains() */\nexport function contains(ancestor: Node, child: Node) {\n  if (ancestor.contains)\n    return ancestor.contains(child);\n  //TODO: Warn about out-of-date browser?\n  for (let testNode: Node | null = child; testNode; testNode = testNode.parentNode)\n    if (testNode === ancestor)\n      return true;\n  return false;\n}\n//insert a range of nodes before a node: https://dom.spec.whatwg.org/#dom-childnode-before\n/** @deprecated Use node.before() */\nexport function before(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.before) {\n    node.before(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.insertBefore(generateInsertList(nodes), node);\n}\n//insert a range of nodes after a node: https://dom.spec.whatwg.org/#dom-childnode-after\n/** @deprecated Use node.after() */\nexport function after(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.after) {\n    node.after(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.insertBefore(generateInsertList(nodes), node.nextSibling);\n}\n//replace node with a set of nodes : https://dom.spec.whatwg.org/#dom-childnode-replacewith\n/** @deprecated Use node.replaceWith() */\nexport function replaceWith(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.replaceWith) {\n    node.replaceWith(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.replaceChild(generateInsertList(nodes), node);\n}\n//remove node with a set of nodes : https://dom.spec.whatwg.org/#dom-childnode-remove\n/** @deprecated Use node.remove() */\nexport function remove(node: ChildNode) {\n  if (node.remove) {\n    node.remove();\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.removeChild(node);\n}\n//insert nodes at start: https://dom.spec.whatwg.org/#dom-parentnode-prepend\n/** @deprecated Use node.prepend() */\nexport function prepend(node: ParentNode, ...nodes: Array<string | Node>) {\n  if (node.prepend) {\n    node.prepend(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  node.insertBefore(generateInsertList(nodes), node.firstChild);\n}\n//insert nodes at end: https://dom.spec.whatwg.org/#dom-parentnode-append\n/** @deprecated Use node.append() */\nexport function append(node: ParentNode, ...nodes: Array<string | Node>) {\n  if (node.append) {\n    node.append(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  node.appendChild(generateInsertList(nodes));\n}\n\n/**\n * Toggle a single class\n *\n * @param node - Node to modify\n * @param classname - Class to toggle\n * @param settoggle - true to enable, false to disable, undefined to toggle\n * @deprecated Just use classList.toggle on the node itself\n */\n/** @deprecated Use classList.toggle() */\nexport function toggleClass(node: Element, classname: string, settoggle?: boolean) {\n  if (arguments.length === 2) //in old dompack, 2 argument version toggled and 3 argument version toggled off. match that behavior\n    node.classList.toggle(classname);\n  else\n    node.classList.toggle(classname, settoggle);\n}\n\n/**\n     Toggle classes in a node\n *\n    @param node - Node which classes to toggle\n    @param toggles - Object, all keys will be added/removed based on the truthyness of their values\n */\nexport function toggleClasses(node: Element, toggles: { [key: string]: boolean }) {\n  if (typeof (toggles) !== \"object\")\n    throw new Error(\"Expected an object with keys as classnames\");\n  Object.keys(toggles).forEach(key => node.classList[toggles[key] ? \"add\" : \"remove\"](key));\n}\n\n/* remove the contents of an existing node */\n/** @deprecated Use node.replaceChildren() */\nexport function empty(node: Element) {\n  if (node.replaceChildren) {\n    node.replaceChildren();\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  while (node.lastChild)\n    node.removeChild(node.lastChild);\n}\n\nexport function isDomReady() {\n  //ensure no domready events can run if there will never be a dom\n  return typeof document !== \"undefined\" && (document.readyState === \"interactive\" || document.readyState === \"complete\");\n}\n\n/* run the specified function 'on ready'. adds to DOMContentLoaded if dom is not ready yet. Exceptions/rejections from the ready handler will not be fatal to the rest of code execution */\nexport function onDomReady(callback: () => unknown | Promise<unknown>) {\n  if (isDomReady()) {\n    try {\n      void callback(); //Ignore unhandled rejections\n    } catch (e) { // We don't want our caller to 'stop' due to a domready exception as its usually the toplevel initialization code, so log the exception ourselves\n      void Promise.reject(new Error(\"Synchronous onDomReady handler failed\", { cause: e })); //Let it propagate as a standard unhandled rejection\n    }\n  } else\n    document.addEventListener(\"DOMContentLoaded\", () => void callback());\n}\n\n//parse JSON data, throw with more info on parse failure\nexport function getJSONAttribute<T>(node: Element, attributename: string): T | null {\n  try {\n    if (node.hasAttribute(attributename))\n      return JSON.parse(node.getAttribute(attributename) as string);\n  } catch (e) {\n    console.error(\"JSON parse failure on attribute '\" + attributename + \"' of node\", node);\n    throw e;\n  }\n  return null;\n}\n\n/**\n     Get the base URI of the current document. IE11 doesn't implement document.baseURI\n *\n    @param doc - Document to query. Defaults to window.document\n    @deprecated Use document.baseURI\n */\nexport function getBaseURI(doc: Document | undefined) {\n  if (!doc)\n    doc = window.document;\n  if (doc.baseURI)\n    return doc.baseURI;\n\n  const base = doc.querySelector('base');\n  if (base && base.href)\n    return base.href;\n  return doc.URL;\n}\n\n/**\n     Sets multiple styles on a node, automatically adding 'px' to numbers when appropriate\n    (can be used as replacement for Mootools .setStyles)\n *\n * @param node - Node to update\n * @param value - Styles to set\n */\nexport function setStyles(node: HTMLElement, value?: string | { [key: string]: string | number }) {\n  if (!value)\n    node.style.cssText = '';\n  else if (typeof value === 'string')\n    node.style.cssText = value || '';\n  else {\n    for (const [key, propvalue] of Object.entries(value)) {\n      // for numbers, add 'px' if the constant isn't dimensionless (eg zIndex)\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we don't know which keys will be set\n      (node.style as any)[key] = typeof value[key] === 'number' && IS_NON_DIMENSIONAL.test(key) === false\n        ? propvalue + 'px'\n        : propvalue;\n    }\n  }\n}\n","import { append, setStyles } from './tree';\n\n// This will assign the `any` type to the list of accepted attributes for elements constructed via JSX syntax.\ndeclare global {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace JSX {\n    interface IntrinsicElements {\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      [eleName: string]: any;\n    }\n  }\n}\n\ntype CreateAttributes = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  [key: string]: any;\n  on?: {\n    [key in keyof GlobalEventHandlersEventMap]?: (evt: GlobalEventHandlersEventMap[key]) => void;\n  };\n};\n\ntype CreateElementFunction = (attributes: CreateAttributes, _1?: null, _2?: null) => HTMLElement;\n\nfunction flattenArray<T>(list: T[]): T[] {\n  return list.reduce((acc: T[], elt) => acc.concat(Array.isArray(elt) ? flattenArray(elt) : elt), []);\n}\n\nfunction setClassName(node: Element, value?: string | string[] | { [key: string]: boolean }) {\n  if (!value)\n    node.className = '';\n  else if (typeof value === 'string')\n    node.className = value || '';\n  else if (Array.isArray(value))\n    node.className = value.filter(elt => elt && typeof elt === 'string').join(\" \");\n  else if (typeof value === \"object\") {\n    let str = \"\";\n    Object.keys(value).forEach((key, idx) => { if (value[key]) str += (idx ? \" \" : \"\") + key; });\n    node.className = str;\n  }\n}\n\n/**\n     Matches non-first uppercase characters\n    (when the second char is uppercases, the first char is passed too)\n */\nconst MATCH_UPCASE = /([A-Z])/g;\nconst MATCH_DASH_AND_CHAR = /-([a-zA-Z])/g;\n\n/**\n Convert a camelCased identifier to a dashed string\n *\n * @param value - identifier to convert\n */\nexport function toDashed(value: string) {\n  if (value)\n    return (value.substring(0, 1) + value.substring(1).replace(MATCH_UPCASE, \"-$1\")).toLowerCase();\n  return \"\";\n}\n\n/**\n Convert a dashed string to a camelCase identifier\n *\n * @param value - identifier to convert\n */\nexport function toCamel(value: string) {\n  return value.replace(MATCH_DASH_AND_CHAR, (_, match_1) => match_1.toUpperCase());\n}\n\nfunction attrHasBooleanValue(propname: string) {\n  return ['disabled', 'checked', 'selected', 'readonly', 'multiple', 'ismap'].includes(propname);\n}\n\nfunction createElement(elementname: string, attributes?: CreateAttributes, toattrs?: boolean) {\n  const node = document.createElement(elementname);\n  if (attributes) {\n    Object.keys(attributes).forEach(attrname => {\n      if (attrname === 'events')\n        throw new Error(\"Use 'on' instead of 'events' in dompack.create\");\n      if (attrname === 'styles')\n        throw new Error(\"Use 'style' instead of 'styles' in dompack.create\");\n      if (attrname === 'children') {\n        // allow null 'children' property for jsxcreate, property delete is detrimental to performance.\n        if (attributes[attrname])\n          throw new Error(\"Use 'childNodes' instead of 'children' in dompack.create\");\n        return;\n      }\n\n      const value = attributes[attrname];\n\n      if (attrname === 'on') //create event listeners\n        return void Object.keys(value).forEach(eventname => node.addEventListener(eventname, value[eventname], false));\n      else if (attrname.startsWith(\"on\"))\n        return void node.addEventListener(toDashed(attrname.substring(2)), value, false);\n\n      if (attrname === \"className\" || attrname === \"class\") {\n        if (node.className) // already modified the class?\n          throw new Error(\"Specify either 'className' or 'class' to dompack.create, but not both\");\n        setClassName(node, value);\n        return;\n      }\n\n      if (attrname === 'style')\n        return void setStyles(node, value);\n\n      if (attrname === 'dataset') //explicitly assign\n        return void Object.assign(node[attrname], value);\n\n      if (attrname === 'childNodes') //append as children\n        return void append(node, ...attributes.childNodes.filter((child: Node | string | number | boolean | null) => child !== null && child !== true && child !== false && child !== undefined));\n\n      if (toattrs && attrHasBooleanValue(attrname)) {\n        if (value)\n          node.setAttribute(attrname, \"\");\n        else\n          node.removeAttribute(attrname);\n        return;\n      }\n\n      if (toattrs && !attrname.startsWith(\"prop\")) {\n        if (value !== null && value !== undefined) {\n          if (value && typeof value === \"object\")\n            throw new Error(\"Cannot store non-null objects in attributes, use a property starting with 'prop'\");\n          node.setAttribute(attrname, attributes[attrname]);\n        }\n      } else {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we don't know which keys will be set\n        (node as any)[attrname] = attributes[attrname];\n      }\n    });\n  }\n  return node;\n}\n\n/* create elements. sets properties (not attributes!) immediately.\n   everything inside 'on' is added as an addEventListener without capture\n   everything inside 'childNodes' is appended to the node. nulls are ignored inside childNodes\n\n   Examples:\n   domtools.create(\"input\", { type:\"file\", className: \"myupload\", style: { display: \"none\" }));\n\n*/\nexport function create<K extends keyof HTMLElementTagNameMap>(elementname: K, attributes?: CreateAttributes, children?: Array<Node | string>): HTMLElementTagNameMap[K];\nexport function create(elementname: string, attributes?: CreateAttributes, children?: Array<Node | string>): HTMLElement;\n\nexport function create(elementname: string, attributes?: CreateAttributes, children?: Array<Node | string>) {\n  const el = createElement(elementname, attributes, false);\n  if (children?.length)\n    el.append(...children);\n  return el;\n}\n\n/** Function to create for jsx, create elements directly (instead of virtual dom nodes).\n\n    import * as dompack from 'dompack';\n\n    /* \\@jsx dompack.jsxcreate *\\/\n    /* \\@jsxFrag dompack.jsxfragment *\\/\n    your code\n\n    @param element - Name of the element to create\n    @param childNodes - Any child nodes to add immediately\n*/\nexport function jsxcreate<K extends keyof HTMLElementTagNameMap>(element: K, attributes: CreateAttributes, ...childNodes: Array<Node | string | number>): HTMLElementTagNameMap[K];\nexport function jsxcreate(element: string | CreateElementFunction, attributes: CreateAttributes, ...childNodes: Array<Node | string | number>): HTMLElement;\n\nexport function jsxcreate(element: string | CreateElementFunction, attributes: CreateAttributes, ...childNodes: Array<Node | string | number>): HTMLElement {\n  // Ensure attributes\n  attributes = attributes || {};\n  // Flatten childnodes arrays, convert numbers to strings. Also support children property (React uses that)\n  let parts: Array<Node | string | number> = (attributes.childNodes || []).concat(attributes.children || []).concat(childNodes);\n  if (attributes.children)\n    attributes.children = null;\n  parts = flattenArray(parts);\n  parts = parts.map((elt) => typeof elt === \"number\" ? String(elt) : elt);\n  // Create the element\n  attributes.childNodes = parts;\n  if (typeof element === \"function\")\n    return element(attributes, null, null);\n  return createElement(element, attributes, true);\n}\n\nexport function jsxfragment(inp: Node): DocumentFragment {\n  const frag = document.createDocumentFragment();\n  frag.append(...inp.childNodes);\n  return frag;\n}\n","import * as domtree from './tree';\nimport * as domevents from './events';\n\nexport type TakeFocusEvent = CustomEvent<{ options?: FocusOptions }>;\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:takefocus\": TakeFocusEvent;\n  }\n}\n\ntype RegistrationHandler<E extends Element = HTMLElement> = (node: E, index?: number) => void;\ntype ComponentRegistration<E extends Element = HTMLElement> =\n  {\n    selector: string;\n    handler: RegistrationHandler<E>;\n    index: number;\n    num: number;\n    afterdomready: boolean;\n  };\n\nconst components: Array<ComponentRegistration<Element>> = [];\nconst map = new WeakMap();\n\n//is a node completely in the dom? if we can find a sibling anywhere, it must be closed\nfunction isNodeCompletelyInDom(node: Element | null) {\n  for (; node; node = node.parentElement)\n    if (node.nextSibling)\n      return true;\n  return false;\n}\nfunction processRegistration<E extends Element>(item: E, reg: ComponentRegistration<E>, domready: boolean) {\n  if (!domready && !isNodeCompletelyInDom(item))\n    return; //not safe to register\n\n  if (!map.has(item))\n    map.set(item, [reg.num]);\n  else {\n    const list = map.get(item);\n    if (list.includes(reg.num))\n      return;\n    list.push(reg.num);\n  }\n  reg.handler(item, reg.index++); //note: if an exception is reported from Object.handler,\n}\nfunction applyRegistration<E extends Element>(reg: ComponentRegistration<E>, startnode?: Element) {\n  const domready = domtree.isDomReady();\n  if (reg.afterdomready && !domready)\n    return;\n\n  const items = Array.from((startnode || document).querySelectorAll(reg.selector)) as E[];\n  if (startnode?.matches(reg.selector))\n    items.unshift(startnode as E); //if startnode matches it has to be an E\n\n  items.forEach(item => {\n    try {\n      processRegistration<E>(item, reg, domready);\n    } catch (e) {\n      console.error(\"Exception handling registration of\", item, \"for rule\", reg.selector);\n      console.log(\"Registration\", reg);\n      if (e instanceof Error) {\n        console.log(e, e.stack);\n        if (window.onerror) {\n          // Send to onerror to trigger exception reporting\n          try {\n            // @ts-ignore: fileName, lineNumber and columnNumber are non-standard\n            window.onerror(e.message, e.fileName || \"\", e.lineNumber || 1, e.columNumber || 1, e);\n          } catch (e2) { }\n        }\n      } else\n        console.log(e);\n    }\n  });\n}\n\n/* A focus implementation that allows the node to intercept focused, allowing eg\n   radio/checkbox replacements to redirect focus but also explicitly preventing\n   focus of a disabled element\n   Returns true when the focus operation was successfull or handled by an event handler.\n   @param node Node to focus\n   @param options.preventScroll Prevent scroll to focused element\n*/\nexport function focus(node: Element, options?: FocusOptions) {\n  if (!domevents.dispatchCustomEvent(node, 'dompack:takefocus', { bubbles: true, cancelable: true, detail: { options } }))\n    return true;\n\n  if (typeof (node as HTMLElement).focus !== \"function\" || (node as HTMLInputElement).disabled)\n    return false;\n\n  (node as HTMLInputElement).focus(options);\n  return true;\n}\n\n/**\n * @param node - Node to show\n * @param options - Scroll options\n * @deprecated invoke scrollIntoView directly  on the nodes\n */\nexport function scrollIntoView(node: Element, options?: ScrollIntoViewOptions) {\n  node.scrollIntoView(options);\n  return true;\n}\n\n/**\n    Register a component for auto-initialization.\n\n    @param selector - Selector the component must match\n    @param handler - Handler\n    @param options - Any unrecognized options are passed to the handler\n\n    The handler will be invoked with two parameters\n    - the node to register\n    - the index of the node (a unique counter for this selector - first is 0)\n */\n\nexport function register<E extends Element = HTMLElement>(selector: string, handler: RegistrationHandler<E>, options?: { afterdomready: boolean }) {\n  const newreg: ComponentRegistration<E> =\n  {\n    selector: selector,\n    handler: handler,\n    index: 0,\n    num: components.length,\n    afterdomready: !options || options.afterdomready\n  };\n  if (components.length === 0 && !domtree.isDomReady()) //first component... we'll need a ready handler\n    domtree.onDomReady(() => registerMissed());\n\n  components.push(newreg as ComponentRegistration<Element>);\n  applyRegistration(newreg);\n}\n\n// register any components we missed on previous scans\nexport function registerMissed(startnode?: Element) {\n  const todo = components.slice(0);\n  todo.forEach(item => applyRegistration(item, startnode));\n}\n","export type CookieOptions = {\n  path?: string;\n  domain?: string | null;\n  expires?: Date | Temporal.Instant | null;\n  duration?: number | null;\n  secure?: boolean;\n  sameSite?: \"Strict\" | \"Lax\" | \"None\";\n};\n\nexport type ServersideCookieOptions = CookieOptions & {\n  httpOnly?: boolean;\n};\n\nexport function buildCookieHeader(name: string, value: string, options?: ServersideCookieOptions) {\n  let header = `${name}=${encodeURIComponent(value)}`;\n  if (options?.domain)\n    header += ';domain=' + options?.domain;\n  header += ';path=' + (options?.path || '/');\n  if (!value) //clearing a cookie, so ignore expires/duration and just set 1970\n    header += ';expires=Thu, 01 Jan 1970 00:00:00 GMT';\n  else if (options?.expires) //we need toUTCString to give us the proper Date formatting\n    header += ';expires=' + (\"epochMilliseconds\" in options.expires ? new Date(options.expires.epochMilliseconds) : options.expires).toUTCString();\n  else if (options?.duration) {\n    const date = new Date();\n    date.setTime(date.getTime() + options?.duration * 24 * 60 * 60 * 1000);\n    header += ';expires=' + date.toUTCString();\n  }\n  if (options?.secure)\n    header += ';secure';\n  if (options?.sameSite)\n    header += ';SameSite=' + options?.sameSite;\n  if (options?.httpOnly) //NOTE browsers cannot effectively set this\n    header += ';HttpOnly';\n  return header;\n}\n","import { buildCookieHeader, type CookieOptions } from '@webhare/dompack/src/cookiebuilder';\nimport { escapeRegExp, parseTyped, stringify } from '@webhare/std';\n\nconst backup: {\n  sessionStorage?: Record<string, string>;\n  localStorage?: Record<string, string>;\n} = {};\ntype BrowserStorage = keyof typeof backup;\n\nexport function listCookies() {\n  return document.cookie.split(';').map(cookie => {\n    const parts = cookie.split('=');\n    return { name: decodeURIComponent(parts[0].trim()), value: decodeURIComponent(parts[1] || '') };\n  });\n}\n\nexport function setCookie(key: string, value: string, options?: CookieOptions) {\n  document.cookie = buildCookieHeader(key, value, options);\n}\n\nexport function getCookie(key: string): string | null {\n  const value = document.cookie.match('(?:^|;)\\\\s*' + escapeRegExp(key) + '=([^;]*)');\n  return (value) ? decodeURIComponent(value[1]) : null;\n}\n\nexport function deleteCookie(key: string, options?: CookieOptions) {\n  setCookie(key, '', { ...options, duration: -1, expires: undefined });\n}\n\nfunction get(storage: BrowserStorage, key: string): unknown | null {\n  let foundvalue: string | undefined | null = backup[storage]?.[key];\n  if (foundvalue) //if it's in the backups storage encoding can't fail either\n    return parseTyped(foundvalue);\n\n  try {\n    foundvalue = window[storage].getItem(key);\n    if (foundvalue)\n      return parseTyped(foundvalue);\n  } catch (e) {\n    //we ignore parse failures\n  }\n  return null;\n}\n\nfunction set(storage: BrowserStorage, key: string, value: unknown) {\n  const tostore = value !== null && value !== undefined ? stringify(value, { typed: true }) : null;\n  try {\n    if (tostore !== null)\n      window[storage].setItem(key, tostore);\n    else\n      window[storage].removeItem(key);\n    return;\n  } catch (e) {\n    //ignore\n  }\n\n  const store = (backup[storage] ||= {});\n  if (tostore !== null)\n    store[key] = tostore;\n  else\n    delete store[key];\n}\n\nexport function getSession<T>(key: string): T | null {\n  return get(\"sessionStorage\", key) as T | null;\n}\nexport function setSession<T>(key: string, value: T | null) {\n  set(\"sessionStorage\", key, value);\n}\nexport function getLocal<T>(key: string): T | null {\n  return get(\"localStorage\", key) as T | null;\n}\nexport function setLocal<T>(key: string, value: T | null) {\n  set(\"localStorage\", key, value);\n}\n","/* Identify devices for the purpose of analytics/tracing\n   NOT a library for feature detection!\n   Originally based on Mootools.Browser\n*/\n\nexport type Platform = \"windows\" | \"ios\" | \"webos\" | \"android\" | \"linux\" | \"mac\" | \"other\";\nexport type Device = \"desktop\" | \"mobile\" | \"tablet\" | \"\";\n\n/** Valid KeyboardEvent.key values (next to 'plain' keys)\n    This list was built from https://www.w3.org/TR/uievents-key/\n    using `console.log([...new Set([...document.querySelectorAll(\".key-table-key .key\")].map(_ => _.textContent))].toSorted().join(' | '))`\n*/\nexport type KeyAttributeValue = \"AVRInput\" | \"AVRPower\" | \"Accept\" | \"Again\" | \"AllCandidates\" | \"Alphanumeric\" | \"Alt\" | \"AltGraph\" | \"AppSwitch\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\" | \"ArrowUp\" | \"Attn\" | \"AudioBalanceLeft\" | \"AudioBalanceRight\" | \"AudioBassBoostDown\" | \"AudioBassBoostToggle\" | \"AudioBassBoostUp\" | \"AudioFaderFront\" | \"AudioFaderRear\" | \"AudioSurroundModeNext\" | \"AudioTrebleDown\" | \"AudioTrebleUp\" | \"AudioVolumeDown\" | \"AudioVolumeMute\" | \"AudioVolumeUp\" | \"Backspace\" | \"BrightnessDown\" | \"BrightnessUp\" | \"BrowserBack\" | \"BrowserFavorites\" | \"BrowserForward\" | \"BrowserHome\" | \"BrowserRefresh\" | \"BrowserSearch\" | \"BrowserStop\" | \"Call\" | \"Camera\" | \"CameraFocus\" | \"Cancel\" | \"CapsLock\" | \"ChannelDown\" | \"ChannelUp\" | \"Clear\" | \"Close\" | \"ClosedCaptionToggle\" | \"CodeInput\" | \"ColorF0Red\" | \"ColorF1Green\" | \"ColorF2Yellow\" | \"ColorF3Blue\" | \"ColorF4Grey\" | \"ColorF5Brown\" | \"Compose\" | \"ContextMenu\" | \"Control\" | \"Convert\" | \"Copy\" | \"CrSel\" | \"Cut\" | \"DVR\" | \"Dead\" | \"Delete\" | \"Dimmer\" | \"DisplaySwap\" | \"Eisu\" | \"Eject\" | \"End\" | \"EndCall\" | \"Enter\" | \"EraseEof\" | \"Escape\" | \"ExSel\" | \"Execute\" | \"Exit\" | \"F1\" | \"F10\" | \"F11\" | \"F12\" | \"F2\" | \"F3\" | \"F4\" | \"F5\" | \"F6\" | \"F7\" | \"F8\" | \"F9\" | \"FavoriteClear0\" | \"FavoriteClear1\" | \"FavoriteClear2\" | \"FavoriteClear3\" | \"FavoriteRecall0\" | \"FavoriteRecall1\" | \"FavoriteRecall2\" | \"FavoriteRecall3\" | \"FavoriteStore0\" | \"FavoriteStore1\" | \"FavoriteStore2\" | \"FavoriteStore3\" | \"FinalMode\" | \"Find\" | \"Fn\" | \"FnLock\" | \"GoBack\" | \"GoHome\" | \"GroupFirst\" | \"GroupLast\" | \"GroupNext\" | \"GroupPrevious\" | \"Guide\" | \"GuideNextDay\" | \"GuidePreviousDay\" | \"HangulMode\" | \"HanjaMode\" | \"Hankaku\" | \"HeadsetHook\" | \"Help\" | \"Hibernate\" | \"Hiragana\" | \"HiraganaKatakana\" | \"Home\" | \"Hyper\" | \"Info\" | \"Insert\" | \"InstantReplay\" | \"JunjaMode\" | \"KanaMode\" | \"KanjiMode\" | \"Katakana\" | \"Key11\" | \"Key12\" | \"LastNumberRedial\" | \"LaunchApplication1\" | \"LaunchApplication2\" | \"LaunchCalendar\" | \"LaunchContacts\" | \"LaunchMail\" | \"LaunchMediaPlayer\" | \"LaunchMusicPlayer\" | \"LaunchPhone\" | \"LaunchScreenSaver\" | \"LaunchSpreadsheet\" | \"LaunchWebBrowser\" | \"LaunchWebCam\" | \"LaunchWordProcessor\" | \"Link\" | \"ListProgram\" | \"LiveContent\" | \"Lock\" | \"LogOff\" | \"MailForward\" | \"MailReply\" | \"MailSend\" | \"MannerMode\" | \"MediaApps\" | \"MediaAudioTrack\" | \"MediaClose\" | \"MediaFastForward\" | \"MediaLast\" | \"MediaNextTrack\" | \"MediaPause\" | \"MediaPlay\" | \"MediaPlayPause\" | \"MediaPreviousTrack\" | \"MediaRecord\" | \"MediaRewind\" | \"MediaSkipBackward\" | \"MediaSkipForward\" | \"MediaStepBackward\" | \"MediaStepForward\" | \"MediaStop\" | \"MediaTopMenu\" | \"MediaTrackNext\" | \"MediaTrackPrevious\" | \"Meta\" | \"MicrophoneToggle\" | \"MicrophoneVolumeDown\" | \"MicrophoneVolumeMute\" | \"MicrophoneVolumeUp\" | \"ModeChange\" | \"NavigateIn\" | \"NavigateNext\" | \"NavigateOut\" | \"NavigatePrevious\" | \"New\" | \"NextCandidate\" | \"NextFavoriteChannel\" | \"NextUserProfile\" | \"NonConvert\" | \"Notification\" | \"NumLock\" | \"OnDemand\" | \"Open\" | \"PageDown\" | \"PageUp\" | \"Pairing\" | \"Paste\" | \"Pause\" | \"PinPDown\" | \"PinPMove\" | \"PinPToggle\" | \"PinPUp\" | \"Play\" | \"PlaySpeedDown\" | \"PlaySpeedReset\" | \"PlaySpeedUp\" | \"Power\" | \"PowerOff\" | \"PreviousCandidate\" | \"Print\" | \"PrintScreen\" | \"Process\" | \"Props\" | \"RandomToggle\" | \"RcLowBattery\" | \"RecordSpeedNext\" | \"Redo\" | \"RfBypass\" | \"Romaji\" | \"STBInput\" | \"STBPower\" | \"Save\" | \"ScanChannelsToggle\" | \"ScreenModeNext\" | \"ScrollLock\" | \"Select\" | \"Settings\" | \"Shift\" | \"SingleCandidate\" | \"Soft1\" | \"Soft2\" | \"Soft3\" | \"Soft4\" | \"SpeechCorrectionList\" | \"SpeechInputToggle\" | \"SpellCheck\" | \"SplitScreenToggle\" | \"Standby\" | \"Subtitle\" | \"Super\" | \"Symbol\" | \"SymbolLock\" | \"TV\" | \"TV3DMode\" | \"TVAntennaCable\" | \"TVAudioDescription\" | \"TVAudioDescriptionMixDown\" | \"TVAudioDescriptionMixUp\" | \"TVContentsMenu\" | \"TVDataService\" | \"TVInput\" | \"TVInputComponent1\" | \"TVInputComponent2\" | \"TVInputComposite1\" | \"TVInputComposite2\" | \"TVInputHDMI1\" | \"TVInputHDMI2\" | \"TVInputHDMI3\" | \"TVInputHDMI4\" | \"TVInputVGA1\" | \"TVMediaContext\" | \"TVNetwork\" | \"TVNumberEntry\" | \"TVPower\" | \"TVRadioService\" | \"TVSatellite\" | \"TVSatelliteBS\" | \"TVSatelliteCS\" | \"TVSatelliteToggle\" | \"TVTerrestrialAnalog\" | \"TVTerrestrialDigital\" | \"TVTimer\" | \"Tab\" | \"Teletext\" | \"Undo\" | \"Unidentified\" | \"VideoModeNext\" | \"VoiceDial\" | \"WakeUp\" | \"Wink\" | \"Zenkaku\" | \"ZenkakuHankaku\" | \"ZoomIn\" | \"ZoomOut\" | \"ZoomToggle\";\n\nexport type UserAgentInfo =\n  {\n    /** Browser name, eg 'chrome' or 'firefox' */\n    name: string;\n    /** Browser numeric version (eg 97) */\n    version: number;\n    /** Platform the browser is running on (eg 'windows') */\n    platform: Platform;\n    /** Type of device (eg 'desktop' or 'tablet' for an iPad) */\n    device: Device;\n    /** platform-browsername-version eg ios-safari-11 */\n    triplet: string;\n  };\n\nexport function parseUserAgent(ua: string): UserAgentInfo {\n  ua = ua.toLowerCase();\n\n  // chrome is included in the edge UA, so need to check for edge first, before checking if it's chrome.\n  // safari is included in the miuibrowser UA, so need to check for miuibrowser first, before checking if it's safari.\n  let UA: RegExpMatchArray | null = ua.match(/(edge|miuibrowser)[\\s/:]([\\w\\d.]+)/);\n  if (!UA)\n    UA = ua.match(/(opera|ie|firefox|chrome|trident|crios|version)[\\s/:]([\\w\\d.]+)?.*?(safari|(?:rv[\\s/:]|version[\\s/:])([\\w\\d.]+)|$)/);\n  if (!UA) { //try ios 11.4.1\n    UA = ua.match(/; cpu os ([\\d]+)/);\n    if (UA)\n      UA = ['', 'safari', UA[1]];\n  }\n  if (!UA)\n    UA = ['', 'unknown', \"0\"];\n\n  if (UA[1] === 'trident') {\n    UA[1] = 'ie';\n    if (UA[4]) UA[2] = UA[4];\n  } else if (UA[1] === 'crios') {\n    UA[1] = 'chrome';\n  }\n\n  let platform = ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || ua.match(/mac|win|linux/) || ['other'])[0];\n  if (platform === 'win')\n    platform = 'windows';\n\n  const name = (UA[1] === 'version') ? UA[3] : UA[1];\n  const version = parseInt((UA[1] === 'opera' && UA[4]) ? UA[4] : UA[2]);\n  const device = ua.match(/ipad/) ? 'tablet' : ['ios', 'webos', 'android'].includes(platform) ? 'mobile' : ['mac', 'windows', 'linux'].includes(platform) ? 'desktop' : '';\n\n  return {\n    name,\n    version,\n    platform: platform as Platform,\n    device,\n    triplet: platform + '-' + name + '-' + version\n  };\n}\n\n/**\n * Is the native 'multiselect' modifier for this platform pressed? (Cmd for Mac, Ctrl for Windows/Linux)\n *\n * @param event - Event to check\n */\nexport function isMultiSelectKey(event: KeyboardEvent | MouseEvent): boolean {\n  return browser.platform === 'mac' ? event.metaKey : event.ctrlKey;\n}\n\n/**\n * Is the native 'copy' modifier for this platform pressed?\n *\n * @param event - Event to check\n */\nexport function isCopyKey(event: KeyboardEvent | MouseEvent): boolean {\n  return browser.platform === 'mac' ? event.altKey : event.ctrlKey;\n}\n\n/** @deprecated Use getBrowser() instead, available since WH5.6.3. We will remove `browser` in the future to improve tree shaking */\nexport const browser: Readonly<UserAgentInfo> = Object.freeze(parseUserAgent(globalThis.navigator?.userAgent || \"\"));\n\n/** Get browser information */\nexport function getBrowser(): Readonly<UserAgentInfo> {\n  //Offer this as a function to improve treeshakability\n  return browser;\n}\n\n//CSS Query used to find valid submittors\nexport const submitselector = 'input[type=submit],input[type=image],button[type=submit],button:not([type])';\n//Must match possible types returned by the submitselector\nexport type SubmitSelectorType = HTMLInputElement | HTMLButtonElement;\n","import { isHTMLElement } from \"@webhare/dompack\";\nimport type { CMSConfig } from \"@mod-system/js/internal/generation/gen_misc_ts\";\n\nlet config: CMSConfig | undefined;\n\nfunction forwardPublisherNavigation(event: Event) {\n  /* we watch for clicks.. as we only want to update the Publisher's selection for user triggered actions (otherwise we'd\n     start navigation in response to JS or internal link autoredirects) */\n  if (!isHTMLElement(event.target) || !config?.interfaceServers)\n    return;\n\n  const navaction = event.target.closest<HTMLAnchorElement>('a[href]');\n  if (!navaction)\n    return;\n\n  const desturl = navaction.href;\n  if (desturl.split('#')[0] !== location.href.split('#')[0]) { //it's actual navigation...\n    for (const origin of config.interfaceServers) {\n      try {\n        window.top?.postMessage({ type: \"webhare-navigation\", location: desturl }, origin);\n      } catch (ignore) {\n        //ignore crossdomain errors\n      }\n    }\n  }\n}\n\nasync function configureForCMS() {\n  try {\n    const res = await fetch(\"/.wh/ea/config/cms.json\");\n    config = await res.json();\n  } catch (e) {\n    console.log(\"Failed to get CMS configuration\", e);\n    return;\n  }\n  window.addEventListener(\"click\", forwardPublisherNavigation);\n}\n\nif (typeof window !== \"undefined\" && window !== window.top) { //if we're in an iframe, we may be running in WebHare and need to forward navigation events\n  //we have no way to detect whether we're in a WebHare iframe or a 3rd party iframe. assume it's webhare and grab the interface servers\n  void configureForCMS();\n}\n","/** Normal hydration that attaches to a DOM tree but does not diff it. */\nexport const MODE_HYDRATE = 1 << 5;\n/** Signifies this VNode suspended on the previous render */\nexport const MODE_SUSPENDED = 1 << 7;\n/** Indicates that this node needs to be inserted while patching children */\nexport const INSERT_VNODE = 1 << 16;\n/** Indicates a VNode has been matched with another VNode in the diff */\nexport const MATCHED = 1 << 17;\n\n/** Reset all mode flags */\nexport const RESET_MODE = ~(MODE_HYDRATE | MODE_SUSPENDED);\n\nexport const EMPTY_OBJ = /** @type {any} */ ({});\nexport const EMPTY_ARR = [];\nexport const IS_NON_DIMENSIONAL =\n\t/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n","import { EMPTY_ARR } from './constants';\n\nexport const isArray = Array.isArray;\n\n/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\t// @ts-expect-error We change the type of `obj` to be `O & P`\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\n/**\n * Remove a child node from its parent if attached. This is a workaround for\n * IE11 which doesn't support `Element.prototype.remove()`. Using this function\n * is smaller than including a dedicated polyfill.\n * @param {preact.ContainerNode} node The node to remove\n */\nexport function removeNode(node) {\n\tlet parentNode = node.parentNode;\n\tif (parentNode) parentNode.removeChild(node);\n}\n\nexport const slice = EMPTY_ARR.slice;\n","import { _catchError } from './diff/catch-error';\n\n/**\n * The `option` object can potentially contain callback functions\n * that are called during various stages of our renderer. This is the\n * foundation on which all our addons like `preact/debug`, `preact/compat`,\n * and `preact/hooks` are based on. See the `Options` type in `internal.d.ts`\n * for a full list of available option hooks (most editors/IDEs allow you to\n * ctrl+click or cmd+click on mac the type definition below).\n * @type {Options}\n */\nconst options = {\n\t_catchError\n};\n\nexport default options;\n","import { slice } from './util';\nimport options from './options';\n\nlet vnodeId = 0;\n\n/**\n * Create an virtual node (used for JSX)\n * @param {VNode[\"type\"]} type The node name or Component constructor for this\n * virtual node\n * @param {object | null | undefined} [props] The properties of the virtual node\n * @param {Array<import('.').ComponentChildren>} [children] The children of the\n * virtual node\n * @returns {VNode}\n */\nexport function createElement(type, props, children) {\n\tlet normalizedProps = {},\n\t\tkey,\n\t\tref,\n\t\ti;\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse normalizedProps[i] = props[i];\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\t// If a Component VNode, check for and apply defaultProps\n\t// Note: type may be undefined in development, must never error here.\n\tif (typeof type == 'function' && type.defaultProps != null) {\n\t\tfor (i in type.defaultProps) {\n\t\t\tif (normalizedProps[i] === undefined) {\n\t\t\t\tnormalizedProps[i] = type.defaultProps[i];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn createVNode(type, normalizedProps, key, ref, null);\n}\n\n/**\n * Create a VNode (used internally by Preact)\n * @param {VNode[\"type\"]} type The node name or Component\n * Constructor for this virtual node\n * @param {object | string | number | null} props The properties of this virtual node.\n * If this virtual node represents a text node, this is the text of the node (string or number).\n * @param {string | number | null} key The key for this virtual node, used when\n * diffing it against its children\n * @param {VNode[\"ref\"]} ref The ref property that will\n * receive a reference to its created child\n * @returns {VNode}\n */\nexport function createVNode(type, props, key, ref, original) {\n\t// V8 seems to be better at detecting type shapes if the object is allocated from the same call site\n\t// Do not inline into createElement and coerceToVNode!\n\t/** @type {VNode} */\n\tconst vnode = {\n\t\ttype,\n\t\tprops,\n\t\tkey,\n\t\tref,\n\t\t_children: null,\n\t\t_parent: null,\n\t\t_depth: 0,\n\t\t_dom: null,\n\t\t// _nextDom must be initialized to undefined b/c it will eventually\n\t\t// be set to dom.nextSibling which can return `null` and it is important\n\t\t// to be able to distinguish between an uninitialized _nextDom and\n\t\t// a _nextDom that has been set to `null`\n\t\t_nextDom: undefined,\n\t\t_component: null,\n\t\tconstructor: undefined,\n\t\t_original: original == null ? ++vnodeId : original,\n\t\t_index: -1,\n\t\t_flags: 0\n\t};\n\n\t// Only invoke the vnode hook if this was *not* a direct copy:\n\tif (original == null && options.vnode != null) options.vnode(vnode);\n\n\treturn vnode;\n}\n\nexport function createRef() {\n\treturn { current: null };\n}\n\nexport function Fragment(props) {\n\treturn props.children;\n}\n\n/**\n * Check if a the argument is a valid Preact VNode.\n * @param {*} vnode\n * @returns {vnode is VNode}\n */\nexport const isValidElement = vnode =>\n\tvnode != null && vnode.constructor == undefined;\n","import { assign } from './util';\nimport { diff, commitRoot } from './diff/index';\nimport options from './options';\nimport { Fragment } from './create-element';\nimport { MODE_HYDRATE } from './constants';\n\n/**\n * Base Component class. Provides `setState()` and `forceUpdate()`, which\n * trigger rendering\n * @param {object} props The initial component props\n * @param {object} context The initial context from parent components'\n * getChildContext\n */\nexport function BaseComponent(props, context) {\n\tthis.props = props;\n\tthis.context = context;\n}\n\n/**\n * Update component state and schedule a re-render.\n * @this {Component}\n * @param {object | ((s: object, p: object) => object)} update A hash of state\n * properties to update with new values or a function that given the current\n * state and props returns a new partial state\n * @param {() => void} [callback] A function to be called once component state is\n * updated\n */\nBaseComponent.prototype.setState = function (update, callback) {\n\t// only clone state when copying to nextState the first time.\n\tlet s;\n\tif (this._nextState != null && this._nextState !== this.state) {\n\t\ts = this._nextState;\n\t} else {\n\t\ts = this._nextState = assign({}, this.state);\n\t}\n\n\tif (typeof update == 'function') {\n\t\t// Some libraries like `immer` mark the current state as readonly,\n\t\t// preventing us from mutating it, so we need to clone it. See #2716\n\t\tupdate = update(assign({}, s), this.props);\n\t}\n\n\tif (update) {\n\t\tassign(s, update);\n\t}\n\n\t// Skip update if updater function returned null\n\tif (update == null) return;\n\n\tif (this._vnode) {\n\t\tif (callback) {\n\t\t\tthis._stateCallbacks.push(callback);\n\t\t}\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Immediately perform a synchronous re-render of the component\n * @this {Component}\n * @param {() => void} [callback] A function to be called after component is\n * re-rendered\n */\nBaseComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode) {\n\t\t// Set render mode so that we can differentiate where the render request\n\t\t// is coming from. We need this because forceUpdate should never call\n\t\t// shouldComponentUpdate\n\t\tthis._force = true;\n\t\tif (callback) this._renderCallbacks.push(callback);\n\t\tenqueueRender(this);\n\t}\n};\n\n/**\n * Accepts `props` and `state`, and returns a new Virtual DOM tree to build.\n * Virtual DOM is generally constructed via [JSX](http://jasonformat.com/wtf-is-jsx).\n * @param {object} props Props (eg: JSX attributes) received from parent\n * element/component\n * @param {object} state The component's current state\n * @param {object} context Context object, as returned by the nearest\n * ancestor's `getChildContext()`\n * @returns {ComponentChildren | void}\n */\nBaseComponent.prototype.render = Fragment;\n\n/**\n * @param {VNode} vnode\n * @param {number | null} [childIndex]\n */\nexport function getDomSibling(vnode, childIndex) {\n\tif (childIndex == null) {\n\t\t// Use childIndex==null as a signal to resume the search from the vnode's sibling\n\t\treturn vnode._parent\n\t\t\t? getDomSibling(vnode._parent, vnode._index + 1)\n\t\t\t: null;\n\t}\n\n\tlet sibling;\n\tfor (; childIndex < vnode._children.length; childIndex++) {\n\t\tsibling = vnode._children[childIndex];\n\n\t\tif (sibling != null && sibling._dom != null) {\n\t\t\t// Since updateParentDomPointers keeps _dom pointer correct,\n\t\t\t// we can rely on _dom to tell us if this subtree contains a\n\t\t\t// rendered DOM node, and what the first rendered DOM node is\n\t\t\treturn sibling._dom;\n\t\t}\n\t}\n\n\t// If we get here, we have not found a DOM node in this vnode's children.\n\t// We must resume from this vnode's sibling (in it's parent _children array)\n\t// Only climb up and search the parent if we aren't searching through a DOM\n\t// VNode (meaning we reached the DOM parent of the original vnode that began\n\t// the search)\n\treturn typeof vnode.type == 'function' ? getDomSibling(vnode) : null;\n}\n\n/**\n * Trigger in-place re-rendering of a component.\n * @param {Component} component The component to rerender\n */\nfunction renderComponent(component) {\n\tlet oldVNode = component._vnode,\n\t\toldDom = oldVNode._dom,\n\t\tcommitQueue = [],\n\t\trefQueue = [];\n\n\tif (component._parentDom) {\n\t\tconst newVNode = assign({}, oldVNode);\n\t\tnewVNode._original = oldVNode._original + 1;\n\t\tif (options.vnode) options.vnode(newVNode);\n\n\t\tdiff(\n\t\t\tcomponent._parentDom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tcomponent._globalContext,\n\t\t\tcomponent._parentDom.namespaceURI,\n\t\t\toldVNode._flags & MODE_HYDRATE ? [oldDom] : null,\n\t\t\tcommitQueue,\n\t\t\toldDom == null ? getDomSibling(oldVNode) : oldDom,\n\t\t\t!!(oldVNode._flags & MODE_HYDRATE),\n\t\t\trefQueue\n\t\t);\n\n\t\tnewVNode._original = oldVNode._original;\n\t\tnewVNode._parent._children[newVNode._index] = newVNode;\n\t\tcommitRoot(commitQueue, newVNode, refQueue);\n\n\t\tif (newVNode._dom != oldDom) {\n\t\t\tupdateParentDomPointers(newVNode);\n\t\t}\n\t}\n}\n\n/**\n * @param {VNode} vnode\n */\nfunction updateParentDomPointers(vnode) {\n\tif ((vnode = vnode._parent) != null && vnode._component != null) {\n\t\tvnode._dom = vnode._component.base = null;\n\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\tlet child = vnode._children[i];\n\t\t\tif (child != null && child._dom != null) {\n\t\t\t\tvnode._dom = vnode._component.base = child._dom;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn updateParentDomPointers(vnode);\n\t}\n}\n\n/**\n * The render queue\n * @type {Array<Component>}\n */\nlet rerenderQueue = [];\n\n/*\n * The value of `Component.debounce` must asynchronously invoke the passed in callback. It is\n * important that contributors to Preact can consistently reason about what calls to `setState`, etc.\n * do, and when their effects will be applied. See the links below for some further reading on designing\n * asynchronous APIs.\n * * [Designing APIs for Asynchrony](https://blog.izs.me/2013/08/designing-apis-for-asynchrony)\n * * [Callbacks synchronous and asynchronous](https://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/)\n */\n\nlet prevDebounce;\n\nconst defer =\n\ttypeof Promise == 'function'\n\t\t? Promise.prototype.then.bind(Promise.resolve())\n\t\t: setTimeout;\n\n/**\n * Enqueue a rerender of a component\n * @param {Component} c The component to rerender\n */\nexport function enqueueRender(c) {\n\tif (\n\t\t(!c._dirty &&\n\t\t\t(c._dirty = true) &&\n\t\t\trerenderQueue.push(c) &&\n\t\t\t!process._rerenderCount++) ||\n\t\tprevDebounce !== options.debounceRendering\n\t) {\n\t\tprevDebounce = options.debounceRendering;\n\t\t(prevDebounce || defer)(process);\n\t}\n}\n\n/**\n * @param {Component} a\n * @param {Component} b\n */\nconst depthSort = (a, b) => a._vnode._depth - b._vnode._depth;\n\n/** Flush the render queue by rerendering all queued components */\nfunction process() {\n\tlet c;\n\trerenderQueue.sort(depthSort);\n\t// Don't update `renderCount` yet. Keep its value non-zero to prevent unnecessary\n\t// process() calls from getting scheduled while `queue` is still being consumed.\n\twhile ((c = rerenderQueue.shift())) {\n\t\tif (c._dirty) {\n\t\t\tlet renderQueueLength = rerenderQueue.length;\n\t\t\trenderComponent(c);\n\t\t\tif (rerenderQueue.length > renderQueueLength) {\n\t\t\t\t// When i.e. rerendering a provider additional new items can be injected, we want to\n\t\t\t\t// keep the order from top to bottom with those new items so we can handle them in a\n\t\t\t\t// single pass\n\t\t\t\trerenderQueue.sort(depthSort);\n\t\t\t}\n\t\t}\n\t}\n\tprocess._rerenderCount = 0;\n}\n\nprocess._rerenderCount = 0;\n","import { IS_NON_DIMENSIONAL } from '../constants';\nimport options from '../options';\n\nfunction setStyle(style, key, value) {\n\tif (key[0] === '-') {\n\t\tstyle.setProperty(key, value == null ? '' : value);\n\t} else if (value == null) {\n\t\tstyle[key] = '';\n\t} else if (typeof value != 'number' || IS_NON_DIMENSIONAL.test(key)) {\n\t\tstyle[key] = value;\n\t} else {\n\t\tstyle[key] = value + 'px';\n\t}\n}\n\n// A logical clock to solve issues like https://github.com/preactjs/preact/issues/3927.\n// When the DOM performs an event it leaves micro-ticks in between bubbling up which means that\n// an event can trigger on a newly reated DOM-node while the event bubbles up.\n//\n// Originally inspired by Vue\n// (https://github.com/vuejs/core/blob/caeb8a68811a1b0f79/packages/runtime-dom/src/modules/events.ts#L90-L101),\n// but modified to use a logical clock instead of Date.now() in case event handlers get attached\n// and events get dispatched during the same millisecond.\n//\n// The clock is incremented after each new event dispatch. This allows 1 000 000 new events\n// per second for over 280 years before the value reaches Number.MAX_SAFE_INTEGER (2**53 - 1).\nlet eventClock = 0;\n\n/**\n * Set a property value on a DOM node\n * @param {PreactElement} dom The DOM node to modify\n * @param {string} name The name of the property to set\n * @param {*} value The value to set the property to\n * @param {*} oldValue The old value the property had\n * @param {string} namespace Whether or not this DOM node is an SVG node or not\n */\nexport function setProperty(dom, name, value, oldValue, namespace) {\n\tlet useCapture;\n\n\to: if (name === 'style') {\n\t\tif (typeof value == 'string') {\n\t\t\tdom.style.cssText = value;\n\t\t} else {\n\t\t\tif (typeof oldValue == 'string') {\n\t\t\t\tdom.style.cssText = oldValue = '';\n\t\t\t}\n\n\t\t\tif (oldValue) {\n\t\t\t\tfor (name in oldValue) {\n\t\t\t\t\tif (!(value && name in value)) {\n\t\t\t\t\t\tsetStyle(dom.style, name, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (value) {\n\t\t\t\tfor (name in value) {\n\t\t\t\t\tif (!oldValue || value[name] !== oldValue[name]) {\n\t\t\t\t\t\tsetStyle(dom.style, name, value[name]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Benchmark for comparison: https://esbench.com/bench/574c954bdb965b9a00965ac6\n\telse if (name[0] === 'o' && name[1] === 'n') {\n\t\tuseCapture =\n\t\t\tname !== (name = name.replace(/(PointerCapture)$|Capture$/i, '$1'));\n\n\t\t// Infer correct casing for DOM built-in events:\n\t\tif (\n\t\t\tname.toLowerCase() in dom ||\n\t\t\tname === 'onFocusOut' ||\n\t\t\tname === 'onFocusIn'\n\t\t)\n\t\t\tname = name.toLowerCase().slice(2);\n\t\telse name = name.slice(2);\n\n\t\tif (!dom._listeners) dom._listeners = {};\n\t\tdom._listeners[name + useCapture] = value;\n\n\t\tif (value) {\n\t\t\tif (!oldValue) {\n\t\t\t\tvalue._attached = eventClock;\n\t\t\t\tdom.addEventListener(\n\t\t\t\t\tname,\n\t\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\t\tuseCapture\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tvalue._attached = oldValue._attached;\n\t\t\t}\n\t\t} else {\n\t\t\tdom.removeEventListener(\n\t\t\t\tname,\n\t\t\t\tuseCapture ? eventProxyCapture : eventProxy,\n\t\t\t\tuseCapture\n\t\t\t);\n\t\t}\n\t} else {\n\t\tif (namespace == 'http://www.w3.org/2000/svg') {\n\t\t\t// Normalize incorrect prop usage for SVG:\n\t\t\t// - xlink:href / xlinkHref --> href (xlink:href was removed from SVG and isn't needed)\n\t\t\t// - className --> class\n\t\t\tname = name.replace(/xlink(H|:h)/, 'h').replace(/sName$/, 's');\n\t\t} else if (\n\t\t\tname != 'width' &&\n\t\t\tname != 'height' &&\n\t\t\tname != 'href' &&\n\t\t\tname != 'list' &&\n\t\t\tname != 'form' &&\n\t\t\t// Default value in browsers is `-1` and an empty string is\n\t\t\t// cast to `0` instead\n\t\t\tname != 'tabIndex' &&\n\t\t\tname != 'download' &&\n\t\t\tname != 'rowSpan' &&\n\t\t\tname != 'colSpan' &&\n\t\t\tname != 'role' &&\n\t\t\tname in dom\n\t\t) {\n\t\t\ttry {\n\t\t\t\tdom[name] = value == null ? '' : value;\n\t\t\t\t// labelled break is 1b smaller here than a return statement (sorry)\n\t\t\t\tbreak o;\n\t\t\t} catch (e) {}\n\t\t}\n\n\t\t// aria- and data- attributes have no boolean representation.\n\t\t// A `false` value is different from the attribute not being\n\t\t// present, so we can't remove it. For non-boolean aria\n\t\t// attributes we could treat false as a removal, but the\n\t\t// amount of exceptions would cost too many bytes. On top of\n\t\t// that other frameworks generally stringify `false`.\n\n\t\tif (typeof value == 'function') {\n\t\t\t// never serialize functions as attribute values\n\t\t} else if (value != null && (value !== false || name[4] === '-')) {\n\t\t\tdom.setAttribute(name, value);\n\t\t} else {\n\t\t\tdom.removeAttribute(name);\n\t\t}\n\t}\n}\n\n/**\n * Create an event proxy function.\n * @param {boolean} useCapture Is the event handler for the capture phase.\n * @private\n */\nfunction createEventProxy(useCapture) {\n\t/**\n\t * Proxy an event to hooked event handlers\n\t * @param {PreactEvent} e The event object from the browser\n\t * @private\n\t */\n\treturn function (e) {\n\t\tif (this._listeners) {\n\t\t\tconst eventHandler = this._listeners[e.type + useCapture];\n\t\t\tif (e._dispatched == null) {\n\t\t\t\te._dispatched = eventClock++;\n\n\t\t\t\t// When `e._dispatched` is smaller than the time when the targeted event\n\t\t\t\t// handler was attached we know we have bubbled up to an element that was added\n\t\t\t\t// during patching the DOM.\n\t\t\t} else if (e._dispatched < eventHandler._attached) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\treturn eventHandler(options.event ? options.event(e) : e);\n\t\t}\n\t};\n}\n\nconst eventProxy = createEventProxy(false);\nconst eventProxyCapture = createEventProxy(true);\n","import { enqueueRender } from './component';\n\nexport let i = 0;\n\nexport function createContext(defaultValue, contextId) {\n\tcontextId = '__cC' + i++;\n\n\tconst context = {\n\t\t_id: contextId,\n\t\t_defaultValue: defaultValue,\n\t\t/** @type {FunctionComponent} */\n\t\tConsumer(props, contextValue) {\n\t\t\t// return props.children(\n\t\t\t// \tcontext[contextId] ? context[contextId].props.value : defaultValue\n\t\t\t// );\n\t\t\treturn props.children(contextValue);\n\t\t},\n\t\t/** @type {FunctionComponent} */\n\t\tProvider(props) {\n\t\t\tif (!this.getChildContext) {\n\t\t\t\t/** @type {Component[]} */\n\t\t\t\tlet subs = [];\n\t\t\t\tlet ctx = {};\n\t\t\t\tctx[contextId] = this;\n\n\t\t\t\tthis.getChildContext = () => ctx;\n\n\t\t\t\tthis.shouldComponentUpdate = function (_props) {\n\t\t\t\t\tif (this.props.value !== _props.value) {\n\t\t\t\t\t\t// I think the forced value propagation here was only needed when `options.debounceRendering` was being bypassed:\n\t\t\t\t\t\t// https://github.com/preactjs/preact/commit/4d339fb803bea09e9f198abf38ca1bf8ea4b7771#diff-54682ce380935a717e41b8bfc54737f6R358\n\t\t\t\t\t\t// In those cases though, even with the value corrected, we're double-rendering all nodes.\n\t\t\t\t\t\t// It might be better to just tell folks not to use force-sync mode.\n\t\t\t\t\t\t// Currently, using `useContext()` in a class component will overwrite its `this.context` value.\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\t// subs.some(c => {\n\t\t\t\t\t\t// \tc.context[contextId] = _props.value;\n\t\t\t\t\t\t// \tenqueueRender(c);\n\t\t\t\t\t\t// });\n\t\t\t\t\t\tsubs.some(c => {\n\t\t\t\t\t\t\tc._force = true;\n\t\t\t\t\t\t\tenqueueRender(c);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tthis.sub = c => {\n\t\t\t\t\tsubs.push(c);\n\t\t\t\t\tlet old = c.componentWillUnmount;\n\t\t\t\t\tc.componentWillUnmount = () => {\n\t\t\t\t\t\tsubs.splice(subs.indexOf(c), 1);\n\t\t\t\t\t\tif (old) old.call(c);\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn props.children;\n\t\t}\n\t};\n\n\t// Devtools needs access to the context object when it\n\t// encounters a Provider. This is necessary to support\n\t// setting `displayName` on the context object instead\n\t// of on the component itself. See:\n\t// https://reactjs.org/docs/context.html#contextdisplayname\n\n\treturn (context.Provider._contextRef = context.Consumer.contextType =\n\t\tcontext);\n}\n","import { diff, unmount, applyRef } from './index';\nimport { createVNode, Fragment } from '../create-element';\nimport { EMPTY_OBJ, EMPTY_ARR, INSERT_VNODE, MATCHED } from '../constants';\nimport { isArray } from '../util';\nimport { getDomSibling } from '../component';\n\n/**\n * Diff the children of a virtual node\n * @param {PreactElement} parentDom The DOM element whose children are being\n * diffed\n * @param {ComponentChildren[]} renderResult\n * @param {VNode} newParentVNode The new virtual node whose children should be\n * diff'ed against oldParentVNode\n * @param {VNode} oldParentVNode The old virtual node whose children should be\n * diff'ed against newParentVNode\n * @param {object} globalContext The current context object - modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diffChildren(\n\tparentDom,\n\trenderResult,\n\tnewParentVNode,\n\toldParentVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\tlet i,\n\t\t/** @type {VNode} */\n\t\toldVNode,\n\t\t/** @type {VNode} */\n\t\tchildVNode,\n\t\t/** @type {PreactElement} */\n\t\tnewDom,\n\t\t/** @type {PreactElement} */\n\t\tfirstChildDom;\n\n\t// This is a compression of oldParentVNode!=null && oldParentVNode != EMPTY_OBJ && oldParentVNode._children || EMPTY_ARR\n\t// as EMPTY_OBJ._children should be `undefined`.\n\t/** @type {VNode[]} */\n\tlet oldChildren = (oldParentVNode && oldParentVNode._children) || EMPTY_ARR;\n\n\tlet newChildrenLength = renderResult.length;\n\n\tnewParentVNode._nextDom = oldDom;\n\tconstructNewChildrenArray(newParentVNode, renderResult, oldChildren);\n\toldDom = newParentVNode._nextDom;\n\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\tchildVNode = newParentVNode._children[i];\n\t\tif (\n\t\t\tchildVNode == null ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// At this point, constructNewChildrenArray has assigned _index to be the\n\t\t// matchingIndex for this VNode's oldVNode (or -1 if there is no oldVNode).\n\t\tif (childVNode._index === -1) {\n\t\t\toldVNode = EMPTY_OBJ;\n\t\t} else {\n\t\t\toldVNode = oldChildren[childVNode._index] || EMPTY_OBJ;\n\t\t}\n\n\t\t// Update childVNode._index to its final index\n\t\tchildVNode._index = i;\n\n\t\t// Morph the old element into the new one, but don't append it to the dom yet\n\t\tdiff(\n\t\t\tparentDom,\n\t\t\tchildVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\toldDom,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\n\t\t// Adjust DOM nodes\n\t\tnewDom = childVNode._dom;\n\t\tif (childVNode.ref && oldVNode.ref != childVNode.ref) {\n\t\t\tif (oldVNode.ref) {\n\t\t\t\tapplyRef(oldVNode.ref, null, childVNode);\n\t\t\t}\n\t\t\trefQueue.push(\n\t\t\t\tchildVNode.ref,\n\t\t\t\tchildVNode._component || newDom,\n\t\t\t\tchildVNode\n\t\t\t);\n\t\t}\n\n\t\tif (firstChildDom == null && newDom != null) {\n\t\t\tfirstChildDom = newDom;\n\t\t}\n\n\t\tif (\n\t\t\tchildVNode._flags & INSERT_VNODE ||\n\t\t\toldVNode._children === childVNode._children\n\t\t) {\n\t\t\t// @ts-expect-error olDom should be present on a DOM node\n\t\t\tif (oldDom && !oldDom.isConnected) {\n\t\t\t\toldDom = getDomSibling(oldVNode);\n\t\t\t}\n\t\t\toldDom = insert(childVNode, oldDom, parentDom);\n\t\t} else if (\n\t\t\ttypeof childVNode.type == 'function' &&\n\t\t\tchildVNode._nextDom !== undefined\n\t\t) {\n\t\t\t// Since Fragments or components that return Fragment like VNodes can\n\t\t\t// contain multiple DOM nodes as the same level, continue the diff from\n\t\t\t// the sibling of last DOM child of this child VNode\n\t\t\toldDom = childVNode._nextDom;\n\t\t} else if (newDom) {\n\t\t\toldDom = newDom.nextSibling;\n\t\t}\n\n\t\t// Eagerly cleanup _nextDom. We don't need to persist the value because it\n\t\t// is only used by `diffChildren` to determine where to resume the diff\n\t\t// after diffing Components and Fragments. Once we store it the nextDOM\n\t\t// local var, we can clean up the property. Also prevents us hanging on to\n\t\t// DOM nodes that may have been unmounted.\n\t\tchildVNode._nextDom = undefined;\n\n\t\t// Unset diffing flags\n\t\tchildVNode._flags &= ~(INSERT_VNODE | MATCHED);\n\t}\n\n\t// TODO: With new child diffing algo, consider alt ways to diff Fragments.\n\t// Such as dropping oldDom and moving fragments in place\n\t//\n\t// Because the newParentVNode is Fragment-like, we need to set it's\n\t// _nextDom property to the nextSibling of its last child DOM node.\n\t//\n\t// `oldDom` contains the correct value here because if the last child\n\t// is a Fragment-like, then oldDom has already been set to that child's _nextDom.\n\t// If the last child is a DOM VNode, then oldDom will be set to that DOM\n\t// node's nextSibling.\n\tnewParentVNode._nextDom = oldDom;\n\tnewParentVNode._dom = firstChildDom;\n}\n\n/**\n * @param {VNode} newParentVNode\n * @param {ComponentChildren[]} renderResult\n * @param {VNode[]} oldChildren\n */\nfunction constructNewChildrenArray(newParentVNode, renderResult, oldChildren) {\n\t/** @type {number} */\n\tlet i;\n\t/** @type {VNode} */\n\tlet childVNode;\n\t/** @type {VNode} */\n\tlet oldVNode;\n\n\tconst newChildrenLength = renderResult.length;\n\tlet oldChildrenLength = oldChildren.length,\n\t\tremainingOldChildren = oldChildrenLength;\n\n\tlet skew = 0;\n\n\tnewParentVNode._children = [];\n\tfor (i = 0; i < newChildrenLength; i++) {\n\t\t// @ts-expect-error We are reusing the childVNode variable to hold both the\n\t\t// pre and post normalized childVNode\n\t\tchildVNode = renderResult[i];\n\n\t\tif (\n\t\t\tchildVNode == null ||\n\t\t\ttypeof childVNode == 'boolean' ||\n\t\t\ttypeof childVNode == 'function'\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = null;\n\t\t}\n\t\t// If this newVNode is being reused (e.g. <div>{reuse}{reuse}</div>) in the same diff,\n\t\t// or we are rendering a component (e.g. setState) copy the oldVNodes so it can have\n\t\t// it's own DOM & etc. pointers\n\t\telse if (\n\t\t\ttypeof childVNode == 'string' ||\n\t\t\ttypeof childVNode == 'number' ||\n\t\t\t// eslint-disable-next-line valid-typeof\n\t\t\ttypeof childVNode == 'bigint' ||\n\t\t\tchildVNode.constructor == String\n\t\t) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tnull,\n\t\t\t\tchildVNode,\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (isArray(childVNode)) {\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tFragment,\n\t\t\t\t{ children: childVNode },\n\t\t\t\tnull,\n\t\t\t\tnull,\n\t\t\t\tnull\n\t\t\t);\n\t\t} else if (childVNode.constructor === undefined && childVNode._depth > 0) {\n\t\t\t// VNode is already in use, clone it. This can happen in the following\n\t\t\t// scenario:\n\t\t\t//   const reuse = <div />\n\t\t\t//   <div>{reuse}<span />{reuse}</div>\n\t\t\tchildVNode = newParentVNode._children[i] = createVNode(\n\t\t\t\tchildVNode.type,\n\t\t\t\tchildVNode.props,\n\t\t\t\tchildVNode.key,\n\t\t\t\tchildVNode.ref ? childVNode.ref : null,\n\t\t\t\tchildVNode._original\n\t\t\t);\n\t\t} else {\n\t\t\tchildVNode = newParentVNode._children[i] = childVNode;\n\t\t}\n\n\t\tconst skewedIndex = i + skew;\n\n\t\t// Handle unmounting null placeholders, i.e. VNode => null in unkeyed children\n\t\tif (childVNode == null) {\n\t\t\toldVNode = oldChildren[skewedIndex];\n\t\t\tif (\n\t\t\t\toldVNode &&\n\t\t\t\toldVNode.key == null &&\n\t\t\t\toldVNode._dom &&\n\t\t\t\t(oldVNode._flags & MATCHED) === 0\n\t\t\t) {\n\t\t\t\tif (oldVNode._dom == newParentVNode._nextDom) {\n\t\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode, false);\n\n\t\t\t\t// Explicitly nullify this position in oldChildren instead of just\n\t\t\t\t// setting `_match=true` to prevent other routines (e.g.\n\t\t\t\t// `findMatchingIndex` or `getDomSibling`) from thinking VNodes or DOM\n\t\t\t\t// nodes in this position are still available to be used in diffing when\n\t\t\t\t// they have actually already been unmounted. For example, by only\n\t\t\t\t// setting `_match=true` here, the unmounting loop later would attempt\n\t\t\t\t// to unmount this VNode again seeing `_match==true`.  Further,\n\t\t\t\t// getDomSibling doesn't know about _match and so would incorrectly\n\t\t\t\t// assume DOM nodes in this subtree are mounted and usable.\n\t\t\t\toldChildren[skewedIndex] = null;\n\t\t\t\tremainingOldChildren--;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tchildVNode._parent = newParentVNode;\n\t\tchildVNode._depth = newParentVNode._depth + 1;\n\n\t\tconst matchingIndex = findMatchingIndex(\n\t\t\tchildVNode,\n\t\t\toldChildren,\n\t\t\tskewedIndex,\n\t\t\tremainingOldChildren\n\t\t);\n\n\t\t// Temporarily store the matchingIndex on the _index property so we can pull\n\t\t// out the oldVNode in diffChildren. We'll override this to the VNode's\n\t\t// final index after using this property to get the oldVNode\n\t\tchildVNode._index = matchingIndex;\n\n\t\toldVNode = null;\n\t\tif (matchingIndex !== -1) {\n\t\t\toldVNode = oldChildren[matchingIndex];\n\t\t\tremainingOldChildren--;\n\t\t\tif (oldVNode) {\n\t\t\t\toldVNode._flags |= MATCHED;\n\t\t\t}\n\t\t}\n\n\t\t// Here, we define isMounting for the purposes of the skew diffing\n\t\t// algorithm. Nodes that are unsuspending are considered mounting and we detect\n\t\t// this by checking if oldVNode._original === null\n\t\tconst isMounting = oldVNode == null || oldVNode._original === null;\n\n\t\tif (isMounting) {\n\t\t\tif (matchingIndex == -1) {\n\t\t\t\tskew--;\n\t\t\t}\n\n\t\t\t// If we are mounting a DOM VNode, mark it for insertion\n\t\t\tif (typeof childVNode.type != 'function') {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t} else if (matchingIndex !== skewedIndex) {\n\t\t\tif (matchingIndex === skewedIndex + 1) {\n\t\t\t\tskew++;\n\t\t\t} else if (matchingIndex > skewedIndex) {\n\t\t\t\tif (remainingOldChildren > newChildrenLength - skewedIndex) {\n\t\t\t\t\tskew += matchingIndex - skewedIndex;\n\t\t\t\t} else {\n\t\t\t\t\tskew--;\n\t\t\t\t}\n\t\t\t} else if (matchingIndex < skewedIndex) {\n\t\t\t\tif (matchingIndex == skewedIndex - 1) {\n\t\t\t\t\tskew = matchingIndex - skewedIndex;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tskew = 0;\n\t\t\t}\n\n\t\t\t// Move this VNode's DOM if the original index (matchingIndex) doesn't\n\t\t\t// match the new skew index (i + new skew)\n\t\t\tif (matchingIndex !== i + skew) {\n\t\t\t\tchildVNode._flags |= INSERT_VNODE;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove remaining oldChildren if there are any. Loop forwards so that as we\n\t// unmount DOM from the beginning of the oldChildren, we can adjust oldDom to\n\t// point to the next child, which needs to be the first DOM node that won't be\n\t// unmounted.\n\tif (remainingOldChildren) {\n\t\tfor (i = 0; i < oldChildrenLength; i++) {\n\t\t\toldVNode = oldChildren[i];\n\t\t\tif (oldVNode != null && (oldVNode._flags & MATCHED) === 0) {\n\t\t\t\tif (oldVNode._dom == newParentVNode._nextDom) {\n\t\t\t\t\tnewParentVNode._nextDom = getDomSibling(oldVNode);\n\t\t\t\t}\n\n\t\t\t\tunmount(oldVNode, oldVNode);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * @param {VNode} parentVNode\n * @param {PreactElement} oldDom\n * @param {PreactElement} parentDom\n * @returns {PreactElement}\n */\nfunction insert(parentVNode, oldDom, parentDom) {\n\t// Note: VNodes in nested suspended trees may be missing _children.\n\n\tif (typeof parentVNode.type == 'function') {\n\t\tlet children = parentVNode._children;\n\t\tfor (let i = 0; children && i < children.length; i++) {\n\t\t\tif (children[i]) {\n\t\t\t\t// If we enter this code path on sCU bailout, where we copy\n\t\t\t\t// oldVNode._children to newVNode._children, we need to update the old\n\t\t\t\t// children's _parent pointer to point to the newVNode (parentVNode\n\t\t\t\t// here).\n\t\t\t\tchildren[i]._parent = parentVNode;\n\t\t\t\toldDom = insert(children[i], oldDom, parentDom);\n\t\t\t}\n\t\t}\n\n\t\treturn oldDom;\n\t} else if (parentVNode._dom != oldDom) {\n\t\tparentDom.insertBefore(parentVNode._dom, oldDom || null);\n\t\toldDom = parentVNode._dom;\n\t}\n\n\tdo {\n\t\toldDom = oldDom && oldDom.nextSibling;\n\t} while (oldDom != null && oldDom.nodeType === 8);\n\n\treturn oldDom;\n}\n\n/**\n * Flatten and loop through the children of a virtual node\n * @param {ComponentChildren} children The unflattened children of a virtual\n * node\n * @returns {VNode[]}\n */\nexport function toChildArray(children, out) {\n\tout = out || [];\n\tif (children == null || typeof children == 'boolean') {\n\t} else if (isArray(children)) {\n\t\tchildren.some(child => {\n\t\t\ttoChildArray(child, out);\n\t\t});\n\t} else {\n\t\tout.push(children);\n\t}\n\treturn out;\n}\n\n/**\n * @param {VNode} childVNode\n * @param {VNode[]} oldChildren\n * @param {number} skewedIndex\n * @param {number} remainingOldChildren\n * @returns {number}\n */\nfunction findMatchingIndex(\n\tchildVNode,\n\toldChildren,\n\tskewedIndex,\n\tremainingOldChildren\n) {\n\tconst key = childVNode.key;\n\tconst type = childVNode.type;\n\tlet x = skewedIndex - 1;\n\tlet y = skewedIndex + 1;\n\tlet oldVNode = oldChildren[skewedIndex];\n\n\t// We only need to perform a search if there are more children\n\t// (remainingOldChildren) to search. However, if the oldVNode we just looked\n\t// at skewedIndex was not already used in this diff, then there must be at\n\t// least 1 other (so greater than 1) remainingOldChildren to attempt to match\n\t// against. So the following condition checks that ensuring\n\t// remainingOldChildren > 1 if the oldVNode is not already used/matched. Else\n\t// if the oldVNode was null or matched, then there could needs to be at least\n\t// 1 (aka `remainingOldChildren > 0`) children to find and compare against.\n\tlet shouldSearch =\n\t\tremainingOldChildren >\n\t\t(oldVNode != null && (oldVNode._flags & MATCHED) === 0 ? 1 : 0);\n\n\tif (\n\t\toldVNode === null ||\n\t\t(oldVNode &&\n\t\t\tkey == oldVNode.key &&\n\t\t\ttype === oldVNode.type &&\n\t\t\t(oldVNode._flags & MATCHED) === 0)\n\t) {\n\t\treturn skewedIndex;\n\t} else if (shouldSearch) {\n\t\twhile (x >= 0 || y < oldChildren.length) {\n\t\t\tif (x >= 0) {\n\t\t\t\toldVNode = oldChildren[x];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) === 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn x;\n\t\t\t\t}\n\t\t\t\tx--;\n\t\t\t}\n\n\t\t\tif (y < oldChildren.length) {\n\t\t\t\toldVNode = oldChildren[y];\n\t\t\t\tif (\n\t\t\t\t\toldVNode &&\n\t\t\t\t\t(oldVNode._flags & MATCHED) === 0 &&\n\t\t\t\t\tkey == oldVNode.key &&\n\t\t\t\t\ttype === oldVNode.type\n\t\t\t\t) {\n\t\t\t\t\treturn y;\n\t\t\t\t}\n\t\t\t\ty++;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn -1;\n}\n","import {\n\tEMPTY_OBJ,\n\tMODE_HYDRATE,\n\tMODE_SUSPENDED,\n\tRESET_MODE\n} from '../constants';\nimport { BaseComponent, getDomSibling } from '../component';\nimport { Fragment } from '../create-element';\nimport { diffChildren } from './children';\nimport { setProperty } from './props';\nimport { assign, isArray, removeNode, slice } from '../util';\nimport options from '../options';\n\n/**\n * Diff two virtual nodes and apply proper changes to the DOM\n * @param {PreactElement} parentDom The parent of the DOM element\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object. Modified by\n * getChildContext\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {PreactElement} oldDom The current attached DOM element any new dom\n * elements should be placed around. Likely `null` on first render (except when\n * hydrating). Can be a sibling DOM element when diffing Fragments that have\n * siblings. In most cases, it starts out as `oldChildren[0]._dom`.\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n */\nexport function diff(\n\tparentDom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\toldDom,\n\tisHydrating,\n\trefQueue\n) {\n\t/** @type {any} */\n\tlet tmp,\n\t\tnewType = newVNode.type;\n\n\t// When passing through createElement it assigns the object\n\t// constructor as undefined. This to prevent JSON-injection.\n\tif (newVNode.constructor !== undefined) return null;\n\n\t// If the previous diff bailed out, resume creating/hydrating.\n\tif (oldVNode._flags & MODE_SUSPENDED) {\n\t\tisHydrating = !!(oldVNode._flags & MODE_HYDRATE);\n\t\toldDom = newVNode._dom = oldVNode._dom;\n\t\texcessDomChildren = [oldDom];\n\t}\n\n\tif ((tmp = options._diff)) tmp(newVNode);\n\n\touter: if (typeof newType == 'function') {\n\t\ttry {\n\t\t\tlet c, isNew, oldProps, oldState, snapshot, clearProcessingException;\n\t\t\tlet newProps = newVNode.props;\n\n\t\t\t// Necessary for createContext api. Setting this property will pass\n\t\t\t// the context value as `this.context` just for this component.\n\t\t\ttmp = newType.contextType;\n\t\t\tlet provider = tmp && globalContext[tmp._id];\n\t\t\tlet componentContext = tmp\n\t\t\t\t? provider\n\t\t\t\t\t? provider.props.value\n\t\t\t\t\t: tmp._defaultValue\n\t\t\t\t: globalContext;\n\n\t\t\t// Get component and set it to `c`\n\t\t\tif (oldVNode._component) {\n\t\t\t\tc = newVNode._component = oldVNode._component;\n\t\t\t\tclearProcessingException = c._processingException = c._pendingError;\n\t\t\t} else {\n\t\t\t\t// Instantiate the new component\n\t\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\t\t// @ts-expect-error The check above verifies that newType is suppose to be constructed\n\t\t\t\t\tnewVNode._component = c = new newType(newProps, componentContext); // eslint-disable-line new-cap\n\t\t\t\t} else {\n\t\t\t\t\t// @ts-expect-error Trust me, Component implements the interface we want\n\t\t\t\t\tnewVNode._component = c = new BaseComponent(\n\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t);\n\t\t\t\t\tc.constructor = newType;\n\t\t\t\t\tc.render = doRender;\n\t\t\t\t}\n\t\t\t\tif (provider) provider.sub(c);\n\n\t\t\t\tc.props = newProps;\n\t\t\t\tif (!c.state) c.state = {};\n\t\t\t\tc.context = componentContext;\n\t\t\t\tc._globalContext = globalContext;\n\t\t\t\tisNew = c._dirty = true;\n\t\t\t\tc._renderCallbacks = [];\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t}\n\n\t\t\t// Invoke getDerivedStateFromProps\n\t\t\tif (c._nextState == null) {\n\t\t\t\tc._nextState = c.state;\n\t\t\t}\n\n\t\t\tif (newType.getDerivedStateFromProps != null) {\n\t\t\t\tif (c._nextState == c.state) {\n\t\t\t\t\tc._nextState = assign({}, c._nextState);\n\t\t\t\t}\n\n\t\t\t\tassign(\n\t\t\t\t\tc._nextState,\n\t\t\t\t\tnewType.getDerivedStateFromProps(newProps, c._nextState)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\toldProps = c.props;\n\t\t\toldState = c.state;\n\t\t\tc._vnode = newVNode;\n\n\t\t\t// Invoke pre-render lifecycle methods\n\t\t\tif (isNew) {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tc.componentWillMount != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillMount();\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidMount != null) {\n\t\t\t\t\tc._renderCallbacks.push(c.componentDidMount);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (\n\t\t\t\t\tnewType.getDerivedStateFromProps == null &&\n\t\t\t\t\tnewProps !== oldProps &&\n\t\t\t\t\tc.componentWillReceiveProps != null\n\t\t\t\t) {\n\t\t\t\t\tc.componentWillReceiveProps(newProps, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t!c._force &&\n\t\t\t\t\t((c.shouldComponentUpdate != null &&\n\t\t\t\t\t\tc.shouldComponentUpdate(\n\t\t\t\t\t\t\tnewProps,\n\t\t\t\t\t\t\tc._nextState,\n\t\t\t\t\t\t\tcomponentContext\n\t\t\t\t\t\t) === false) ||\n\t\t\t\t\t\tnewVNode._original === oldVNode._original)\n\t\t\t\t) {\n\t\t\t\t\t// More info about this here: https://gist.github.com/JoviDeCroock/bec5f2ce93544d2e6070ef8e0036e4e8\n\t\t\t\t\tif (newVNode._original !== oldVNode._original) {\n\t\t\t\t\t\t// When we are dealing with a bail because of sCU we have to update\n\t\t\t\t\t\t// the props, state and dirty-state.\n\t\t\t\t\t\t// when we are dealing with strict-equality we don't as the child could still\n\t\t\t\t\t\t// be dirtied see #3883\n\t\t\t\t\t\tc.props = newProps;\n\t\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t\t\tc._dirty = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t\t\tnewVNode._children.forEach(vnode => {\n\t\t\t\t\t\tif (vnode) vnode._parent = newVNode;\n\t\t\t\t\t});\n\n\t\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t\t}\n\t\t\t\t\tc._stateCallbacks = [];\n\n\t\t\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\t\t\tcommitQueue.push(c);\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\n\t\t\t\tif (c.componentWillUpdate != null) {\n\t\t\t\t\tc.componentWillUpdate(newProps, c._nextState, componentContext);\n\t\t\t\t}\n\n\t\t\t\tif (c.componentDidUpdate != null) {\n\t\t\t\t\tc._renderCallbacks.push(() => {\n\t\t\t\t\t\tc.componentDidUpdate(oldProps, oldState, snapshot);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tc.context = componentContext;\n\t\t\tc.props = newProps;\n\t\t\tc._parentDom = parentDom;\n\t\t\tc._force = false;\n\n\t\t\tlet renderHook = options._render,\n\t\t\t\tcount = 0;\n\t\t\tif ('prototype' in newType && newType.prototype.render) {\n\t\t\t\tc.state = c._nextState;\n\t\t\t\tc._dirty = false;\n\n\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\tfor (let i = 0; i < c._stateCallbacks.length; i++) {\n\t\t\t\t\tc._renderCallbacks.push(c._stateCallbacks[i]);\n\t\t\t\t}\n\t\t\t\tc._stateCallbacks = [];\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tc._dirty = false;\n\t\t\t\t\tif (renderHook) renderHook(newVNode);\n\n\t\t\t\t\ttmp = c.render(c.props, c.state, c.context);\n\n\t\t\t\t\t// Handle setState called in render, see #2553\n\t\t\t\t\tc.state = c._nextState;\n\t\t\t\t} while (c._dirty && ++count < 25);\n\t\t\t}\n\n\t\t\t// Handle setState called in render, see #2553\n\t\t\tc.state = c._nextState;\n\n\t\t\tif (c.getChildContext != null) {\n\t\t\t\tglobalContext = assign(assign({}, globalContext), c.getChildContext());\n\t\t\t}\n\n\t\t\tif (!isNew && c.getSnapshotBeforeUpdate != null) {\n\t\t\t\tsnapshot = c.getSnapshotBeforeUpdate(oldProps, oldState);\n\t\t\t}\n\n\t\t\tlet isTopLevelFragment =\n\t\t\t\ttmp != null && tmp.type === Fragment && tmp.key == null;\n\t\t\tlet renderResult = isTopLevelFragment ? tmp.props.children : tmp;\n\n\t\t\tdiffChildren(\n\t\t\t\tparentDom,\n\t\t\t\tisArray(renderResult) ? renderResult : [renderResult],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnamespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\toldDom,\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\tc.base = newVNode._dom;\n\n\t\t\t// We successfully rendered this VNode, unset any stored hydration/bailout state:\n\t\t\tnewVNode._flags &= RESET_MODE;\n\n\t\t\tif (c._renderCallbacks.length) {\n\t\t\t\tcommitQueue.push(c);\n\t\t\t}\n\n\t\t\tif (clearProcessingException) {\n\t\t\t\tc._pendingError = c._processingException = null;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnewVNode._original = null;\n\t\t\t// if hydrating or creating initial tree, bailout preserves DOM:\n\t\t\tif (isHydrating || excessDomChildren != null) {\n\t\t\t\tnewVNode._dom = oldDom;\n\t\t\t\tnewVNode._flags |= isHydrating\n\t\t\t\t\t? MODE_HYDRATE | MODE_SUSPENDED\n\t\t\t\t\t: MODE_HYDRATE;\n\t\t\t\texcessDomChildren[excessDomChildren.indexOf(oldDom)] = null;\n\t\t\t\t// ^ could possibly be simplified to:\n\t\t\t\t// excessDomChildren.length = 0;\n\t\t\t} else {\n\t\t\t\tnewVNode._dom = oldVNode._dom;\n\t\t\t\tnewVNode._children = oldVNode._children;\n\t\t\t}\n\t\t\toptions._catchError(e, newVNode, oldVNode);\n\t\t}\n\t} else if (\n\t\texcessDomChildren == null &&\n\t\tnewVNode._original === oldVNode._original\n\t) {\n\t\tnewVNode._children = oldVNode._children;\n\t\tnewVNode._dom = oldVNode._dom;\n\t} else {\n\t\tnewVNode._dom = diffElementNodes(\n\t\t\toldVNode._dom,\n\t\t\tnewVNode,\n\t\t\toldVNode,\n\t\t\tglobalContext,\n\t\t\tnamespace,\n\t\t\texcessDomChildren,\n\t\t\tcommitQueue,\n\t\t\tisHydrating,\n\t\t\trefQueue\n\t\t);\n\t}\n\n\tif ((tmp = options.diffed)) tmp(newVNode);\n}\n\n/**\n * @param {Array<Component>} commitQueue List of components\n * which have callbacks to invoke in commitRoot\n * @param {VNode} root\n */\nexport function commitRoot(commitQueue, root, refQueue) {\n\troot._nextDom = undefined;\n\n\tfor (let i = 0; i < refQueue.length; i++) {\n\t\tapplyRef(refQueue[i], refQueue[++i], refQueue[++i]);\n\t}\n\n\tif (options._commit) options._commit(root, commitQueue);\n\n\tcommitQueue.some(c => {\n\t\ttry {\n\t\t\t// @ts-expect-error Reuse the commitQueue variable here so the type changes\n\t\t\tcommitQueue = c._renderCallbacks;\n\t\t\tc._renderCallbacks = [];\n\t\t\tcommitQueue.some(cb => {\n\t\t\t\t// @ts-expect-error See above comment on commitQueue\n\t\t\t\tcb.call(c);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\toptions._catchError(e, c._vnode);\n\t\t}\n\t});\n}\n\n/**\n * Diff two virtual nodes representing DOM element\n * @param {PreactElement} dom The DOM element representing the virtual nodes\n * being diffed\n * @param {VNode} newVNode The new virtual node\n * @param {VNode} oldVNode The old virtual node\n * @param {object} globalContext The current context object\n * @param {string} namespace Current namespace of the DOM node (HTML, SVG, or MathML)\n * @param {Array<PreactElement>} excessDomChildren\n * @param {Array<Component>} commitQueue List of components which have callbacks\n * to invoke in commitRoot\n * @param {boolean} isHydrating Whether or not we are in hydration\n * @param {any[]} refQueue an array of elements needed to invoke refs\n * @returns {PreactElement}\n */\nfunction diffElementNodes(\n\tdom,\n\tnewVNode,\n\toldVNode,\n\tglobalContext,\n\tnamespace,\n\texcessDomChildren,\n\tcommitQueue,\n\tisHydrating,\n\trefQueue\n) {\n\tlet oldProps = oldVNode.props;\n\tlet newProps = newVNode.props;\n\tlet nodeType = /** @type {string} */ (newVNode.type);\n\t/** @type {any} */\n\tlet i;\n\t/** @type {{ __html?: string }} */\n\tlet newHtml;\n\t/** @type {{ __html?: string }} */\n\tlet oldHtml;\n\t/** @type {ComponentChildren} */\n\tlet newChildren;\n\tlet value;\n\tlet inputValue;\n\tlet checked;\n\n\t// Tracks entering and exiting namespaces when descending through the tree.\n\tif (nodeType === 'svg') namespace = 'http://www.w3.org/2000/svg';\n\telse if (nodeType === 'math')\n\t\tnamespace = 'http://www.w3.org/1998/Math/MathML';\n\telse if (!namespace) namespace = 'http://www.w3.org/1999/xhtml';\n\n\tif (excessDomChildren != null) {\n\t\tfor (i = 0; i < excessDomChildren.length; i++) {\n\t\t\tvalue = excessDomChildren[i];\n\n\t\t\t// if newVNode matches an element in excessDomChildren or the `dom`\n\t\t\t// argument matches an element in excessDomChildren, remove it from\n\t\t\t// excessDomChildren so it isn't later removed in diffChildren\n\t\t\tif (\n\t\t\t\tvalue &&\n\t\t\t\t'setAttribute' in value === !!nodeType &&\n\t\t\t\t(nodeType ? value.localName === nodeType : value.nodeType === 3)\n\t\t\t) {\n\t\t\t\tdom = value;\n\t\t\t\texcessDomChildren[i] = null;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (dom == null) {\n\t\tif (nodeType === null) {\n\t\t\treturn document.createTextNode(newProps);\n\t\t}\n\n\t\tdom = document.createElementNS(\n\t\t\tnamespace,\n\t\t\tnodeType,\n\t\t\tnewProps.is && newProps\n\t\t);\n\n\t\t// we created a new parent, so none of the previously attached children can be reused:\n\t\texcessDomChildren = null;\n\t\t// we are creating a new node, so we can assume this is a new subtree (in\n\t\t// case we are hydrating), this deopts the hydrate\n\t\tisHydrating = false;\n\t}\n\n\tif (nodeType === null) {\n\t\t// During hydration, we still have to split merged text from SSR'd HTML.\n\t\tif (oldProps !== newProps && (!isHydrating || dom.data !== newProps)) {\n\t\t\tdom.data = newProps;\n\t\t}\n\t} else {\n\t\t// If excessDomChildren was not null, repopulate it with the current element's children:\n\t\texcessDomChildren = excessDomChildren && slice.call(dom.childNodes);\n\n\t\toldProps = oldVNode.props || EMPTY_OBJ;\n\n\t\t// If we are in a situation where we are not hydrating but are using\n\t\t// existing DOM (e.g. replaceNode) we should read the existing DOM\n\t\t// attributes to diff them\n\t\tif (!isHydrating && excessDomChildren != null) {\n\t\t\toldProps = {};\n\t\t\tfor (i = 0; i < dom.attributes.length; i++) {\n\t\t\t\tvalue = dom.attributes[i];\n\t\t\t\toldProps[value.name] = value.value;\n\t\t\t}\n\t\t}\n\n\t\tfor (i in oldProps) {\n\t\t\tvalue = oldProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\toldHtml = value;\n\t\t\t} else if (i !== 'key' && !(i in newProps)) {\n\t\t\t\tif (\n\t\t\t\t\t(i == 'value' && 'defaultValue' in newProps) ||\n\t\t\t\t\t(i == 'checked' && 'defaultChecked' in newProps)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tsetProperty(dom, i, null, value, namespace);\n\t\t\t}\n\t\t}\n\n\t\t// During hydration, props are not diffed at all (including dangerouslySetInnerHTML)\n\t\t// @TODO we should warn in debug mode when props don't match here.\n\t\tfor (i in newProps) {\n\t\t\tvalue = newProps[i];\n\t\t\tif (i == 'children') {\n\t\t\t\tnewChildren = value;\n\t\t\t} else if (i == 'dangerouslySetInnerHTML') {\n\t\t\t\tnewHtml = value;\n\t\t\t} else if (i == 'value') {\n\t\t\t\tinputValue = value;\n\t\t\t} else if (i == 'checked') {\n\t\t\t\tchecked = value;\n\t\t\t} else if (\n\t\t\t\ti !== 'key' &&\n\t\t\t\t(!isHydrating || typeof value == 'function') &&\n\t\t\t\toldProps[i] !== value\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, value, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\n\t\t// If the new vnode didn't have dangerouslySetInnerHTML, diff its children\n\t\tif (newHtml) {\n\t\t\t// Avoid re-applying the same '__html' if it did not changed between re-render\n\t\t\tif (\n\t\t\t\t!isHydrating &&\n\t\t\t\t(!oldHtml ||\n\t\t\t\t\t(newHtml.__html !== oldHtml.__html &&\n\t\t\t\t\t\tnewHtml.__html !== dom.innerHTML))\n\t\t\t) {\n\t\t\t\tdom.innerHTML = newHtml.__html;\n\t\t\t}\n\n\t\t\tnewVNode._children = [];\n\t\t} else {\n\t\t\tif (oldHtml) dom.innerHTML = '';\n\n\t\t\tdiffChildren(\n\t\t\t\tdom,\n\t\t\t\tisArray(newChildren) ? newChildren : [newChildren],\n\t\t\t\tnewVNode,\n\t\t\t\toldVNode,\n\t\t\t\tglobalContext,\n\t\t\t\tnodeType === 'foreignObject'\n\t\t\t\t\t? 'http://www.w3.org/1999/xhtml'\n\t\t\t\t\t: namespace,\n\t\t\t\texcessDomChildren,\n\t\t\t\tcommitQueue,\n\t\t\t\texcessDomChildren\n\t\t\t\t\t? excessDomChildren[0]\n\t\t\t\t\t: oldVNode._children && getDomSibling(oldVNode, 0),\n\t\t\t\tisHydrating,\n\t\t\t\trefQueue\n\t\t\t);\n\n\t\t\t// Remove children that are not part of any vnode.\n\t\t\tif (excessDomChildren != null) {\n\t\t\t\tfor (i = excessDomChildren.length; i--; ) {\n\t\t\t\t\tif (excessDomChildren[i] != null) removeNode(excessDomChildren[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// As above, don't diff props during hydration\n\t\tif (!isHydrating) {\n\t\t\ti = 'value';\n\t\t\tif (\n\t\t\t\tinputValue !== undefined &&\n\t\t\t\t// #2756 For the <progress>-element the initial value is 0,\n\t\t\t\t// despite the attribute not being present. When the attribute\n\t\t\t\t// is missing the progress bar is treated as indeterminate.\n\t\t\t\t// To fix that we'll always update it when it is 0 for progress elements\n\t\t\t\t(inputValue !== dom[i] ||\n\t\t\t\t\t(nodeType === 'progress' && !inputValue) ||\n\t\t\t\t\t// This is only for IE 11 to fix <select> value not being updated.\n\t\t\t\t\t// To avoid a stale select value we need to set the option.value\n\t\t\t\t\t// again, which triggers IE11 to re-evaluate the select value\n\t\t\t\t\t(nodeType === 'option' && inputValue !== oldProps[i]))\n\t\t\t) {\n\t\t\t\tsetProperty(dom, i, inputValue, oldProps[i], namespace);\n\t\t\t}\n\n\t\t\ti = 'checked';\n\t\t\tif (checked !== undefined && checked !== dom[i]) {\n\t\t\t\tsetProperty(dom, i, checked, oldProps[i], namespace);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn dom;\n}\n\n/**\n * Invoke or update a ref, depending on whether it is a function or object ref.\n * @param {Ref<any>} ref\n * @param {any} value\n * @param {VNode} vnode\n */\nexport function applyRef(ref, value, vnode) {\n\ttry {\n\t\tif (typeof ref == 'function') ref(value);\n\t\telse ref.current = value;\n\t} catch (e) {\n\t\toptions._catchError(e, vnode);\n\t}\n}\n\n/**\n * Unmount a virtual node from the tree and apply DOM changes\n * @param {VNode} vnode The virtual node to unmount\n * @param {VNode} parentVNode The parent of the VNode that initiated the unmount\n * @param {boolean} [skipRemove] Flag that indicates that a parent node of the\n * current element is already detached from the DOM.\n */\nexport function unmount(vnode, parentVNode, skipRemove) {\n\tlet r;\n\tif (options.unmount) options.unmount(vnode);\n\n\tif ((r = vnode.ref)) {\n\t\tif (!r.current || r.current === vnode._dom) {\n\t\t\tapplyRef(r, null, parentVNode);\n\t\t}\n\t}\n\n\tif ((r = vnode._component) != null) {\n\t\tif (r.componentWillUnmount) {\n\t\t\ttry {\n\t\t\t\tr.componentWillUnmount();\n\t\t\t} catch (e) {\n\t\t\t\toptions._catchError(e, parentVNode);\n\t\t\t}\n\t\t}\n\n\t\tr.base = r._parentDom = null;\n\t}\n\n\tif ((r = vnode._children)) {\n\t\tfor (let i = 0; i < r.length; i++) {\n\t\t\tif (r[i]) {\n\t\t\t\tunmount(\n\t\t\t\t\tr[i],\n\t\t\t\t\tparentVNode,\n\t\t\t\t\tskipRemove || typeof vnode.type != 'function'\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!skipRemove && vnode._dom != null) {\n\t\tremoveNode(vnode._dom);\n\t}\n\n\t// Must be set to `undefined` to properly clean up `_nextDom`\n\t// for which `null` is a valid value. See comment in `create-element.js`\n\tvnode._component = vnode._parent = vnode._dom = vnode._nextDom = undefined;\n}\n\n/** The `.render()` method for a PFC backing instance. */\nfunction doRender(props, state, context) {\n\treturn this.constructor(props, context);\n}\n","import { EMPTY_OBJ } from './constants';\nimport { commitRoot, diff } from './diff/index';\nimport { createElement, Fragment } from './create-element';\nimport options from './options';\nimport { slice } from './util';\n\n/**\n * Render a Preact virtual node into a DOM element\n * @param {ComponentChild} vnode The virtual node to render\n * @param {PreactElement} parentDom The DOM element to render into\n * @param {PreactElement | object} [replaceNode] Optional: Attempt to re-use an\n * existing DOM tree rooted at `replaceNode`\n */\nexport function render(vnode, parentDom, replaceNode) {\n\tif (options._root) options._root(vnode, parentDom);\n\n\t// We abuse the `replaceNode` parameter in `hydrate()` to signal if we are in\n\t// hydration mode or not by passing the `hydrate` function instead of a DOM\n\t// element..\n\tlet isHydrating = typeof replaceNode == 'function';\n\n\t// To be able to support calling `render()` multiple times on the same\n\t// DOM node, we need to obtain a reference to the previous tree. We do\n\t// this by assigning a new `_children` property to DOM nodes which points\n\t// to the last rendered tree. By default this property is not present, which\n\t// means that we are mounting a new tree for the first time.\n\tlet oldVNode = isHydrating\n\t\t? null\n\t\t: (replaceNode && replaceNode._children) || parentDom._children;\n\n\tvnode = ((!isHydrating && replaceNode) || parentDom)._children =\n\t\tcreateElement(Fragment, null, [vnode]);\n\n\t// List of effects that need to be called after diffing.\n\tlet commitQueue = [],\n\t\trefQueue = [];\n\tdiff(\n\t\tparentDom,\n\t\t// Determine the new vnode tree and store it on the DOM element on\n\t\t// our custom `_children` property.\n\t\tvnode,\n\t\toldVNode || EMPTY_OBJ,\n\t\tEMPTY_OBJ,\n\t\tparentDom.namespaceURI,\n\t\t!isHydrating && replaceNode\n\t\t\t? [replaceNode]\n\t\t\t: oldVNode\n\t\t\t? null\n\t\t\t: parentDom.firstChild\n\t\t\t? slice.call(parentDom.childNodes)\n\t\t\t: null,\n\t\tcommitQueue,\n\t\t!isHydrating && replaceNode\n\t\t\t? replaceNode\n\t\t\t: oldVNode\n\t\t\t? oldVNode._dom\n\t\t\t: parentDom.firstChild,\n\t\tisHydrating,\n\t\trefQueue\n\t);\n\n\t// Flush all queued effects\n\tcommitRoot(commitQueue, vnode, refQueue);\n}\n\n/**\n * Update an existing DOM element with data from a Preact virtual node\n * @param {ComponentChild} vnode The virtual node to render\n * @param {PreactElement} parentDom The DOM element to update\n */\nexport function hydrate(vnode, parentDom) {\n\trender(vnode, parentDom, hydrate);\n}\n","import { assign, slice } from './util';\nimport { createVNode } from './create-element';\n\n/**\n * Clones the given VNode, optionally adding attributes/props and replacing its\n * children.\n * @param {VNode} vnode The virtual DOM element to clone\n * @param {object} props Attributes/props to add when cloning\n * @param {Array<ComponentChildren>} rest Any additional arguments will be used\n * as replacement children.\n * @returns {VNode}\n */\nexport function cloneElement(vnode, props, children) {\n\tlet normalizedProps = assign({}, vnode.props),\n\t\tkey,\n\t\tref,\n\t\ti;\n\n\tlet defaultProps;\n\n\tif (vnode.type && vnode.type.defaultProps) {\n\t\tdefaultProps = vnode.type.defaultProps;\n\t}\n\n\tfor (i in props) {\n\t\tif (i == 'key') key = props[i];\n\t\telse if (i == 'ref') ref = props[i];\n\t\telse if (props[i] === undefined && defaultProps !== undefined) {\n\t\t\tnormalizedProps[i] = defaultProps[i];\n\t\t} else {\n\t\t\tnormalizedProps[i] = props[i];\n\t\t}\n\t}\n\n\tif (arguments.length > 2) {\n\t\tnormalizedProps.children =\n\t\t\targuments.length > 3 ? slice.call(arguments, 2) : children;\n\t}\n\n\treturn createVNode(\n\t\tvnode.type,\n\t\tnormalizedProps,\n\t\tkey || vnode.key,\n\t\tref || vnode.ref,\n\t\tnull\n\t);\n}\n","/**\n * Find the closest error boundary to a thrown error and call it\n * @param {object} error The thrown value\n * @param {VNode} vnode The vnode that threw the error that was caught (except\n * for unmounting when this parameter is the highest parent that was being\n * unmounted)\n * @param {VNode} [oldVNode]\n * @param {ErrorInfo} [errorInfo]\n */\nexport function _catchError(error, vnode, oldVNode, errorInfo) {\n\t/** @type {Component} */\n\tlet component,\n\t\t/** @type {ComponentType} */\n\t\tctor,\n\t\t/** @type {boolean} */\n\t\thandled;\n\n\tfor (; (vnode = vnode._parent); ) {\n\t\tif ((component = vnode._component) && !component._processingException) {\n\t\t\ttry {\n\t\t\t\tctor = component.constructor;\n\n\t\t\t\tif (ctor && ctor.getDerivedStateFromError != null) {\n\t\t\t\t\tcomponent.setState(ctor.getDerivedStateFromError(error));\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\tif (component.componentDidCatch != null) {\n\t\t\t\t\tcomponent.componentDidCatch(error, errorInfo || {});\n\t\t\t\t\thandled = component._dirty;\n\t\t\t\t}\n\n\t\t\t\t// This is an error boundary. Mark it as having bailed out, and whether it was mid-hydration.\n\t\t\t\tif (handled) {\n\t\t\t\t\treturn (component._pendingError = component);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t}\n\t\t}\n\t}\n\n\tthrow error;\n}\n","import { options } from 'preact';\nimport { initDevTools } from './devtools';\n\ninitDevTools();\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, name: string) => T}\n */\nexport function addHookName(value, name) {\n\tif (options._addHookName) {\n\t\toptions._addHookName(name);\n\t}\n\treturn value;\n}\n","import { options, Fragment, Component } from 'preact';\n\nexport function initDevTools() {\n\tif (typeof window != 'undefined' && window.__PREACT_DEVTOOLS__) {\n\t\twindow.__PREACT_DEVTOOLS__.attachPreact('10.22.0', options, {\n\t\t\tFragment,\n\t\t\tComponent\n\t\t});\n\t}\n}\n","const ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nlet loggedTypeFailures = {};\n\n/**\n * Reset the history of which prop type warnings have been logged.\n */\nexport function resetPropWarnings() {\n\tloggedTypeFailures = {};\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * Adapted from https://github.com/facebook/prop-types/blob/master/checkPropTypes.js\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n */\nexport function checkPropTypes(\n\ttypeSpecs,\n\tvalues,\n\tlocation,\n\tcomponentName,\n\tgetStack\n) {\n\tObject.keys(typeSpecs).forEach(typeSpecName => {\n\t\tlet error;\n\t\ttry {\n\t\t\terror = typeSpecs[typeSpecName](\n\t\t\t\tvalues,\n\t\t\t\ttypeSpecName,\n\t\t\t\tcomponentName,\n\t\t\t\tlocation,\n\t\t\t\tnull,\n\t\t\t\tReactPropTypesSecret\n\t\t\t);\n\t\t} catch (e) {\n\t\t\terror = e;\n\t\t}\n\t\tif (error && !(error.message in loggedTypeFailures)) {\n\t\t\tloggedTypeFailures[error.message] = true;\n\t\t\tconsole.error(\n\t\t\t\t`Failed ${location} type: ${error.message}${\n\t\t\t\t\t(getStack && `\\n${getStack()}`) || ''\n\t\t\t\t}`\n\t\t\t);\n\t\t}\n\t});\n}\n","import { options, Fragment } from 'preact';\n\n/**\n * Get human readable name of the component/dom node\n * @param {import('./internal').VNode} vnode\n * @param {import('./internal').VNode} vnode\n * @returns {string}\n */\nexport function getDisplayName(vnode) {\n\tif (vnode.type === Fragment) {\n\t\treturn 'Fragment';\n\t} else if (typeof vnode.type == 'function') {\n\t\treturn vnode.type.displayName || vnode.type.name;\n\t} else if (typeof vnode.type == 'string') {\n\t\treturn vnode.type;\n\t}\n\n\treturn '#text';\n}\n\n/**\n * Used to keep track of the currently rendered `vnode` and print it\n * in debug messages.\n */\nlet renderStack = [];\n\n/**\n * Keep track of the current owners. An owner describes a component\n * which was responsible to render a specific `vnode`. This exclude\n * children that are passed via `props.children`, because they belong\n * to the parent owner.\n *\n * ```jsx\n * const Foo = props => <div>{props.children}</div> // div's owner is Foo\n * const Bar = props => {\n *   return (\n *     <Foo><span /></Foo> // Foo's owner is Bar, span's owner is Bar\n *   )\n * }\n * ```\n *\n * Note: A `vnode` may be hoisted to the root scope due to compiler\n * optimiztions. In these cases the `_owner` will be different.\n */\nlet ownerStack = [];\n\n/**\n * Get the currently rendered `vnode`\n * @returns {import('./internal').VNode | null}\n */\nexport function getCurrentVNode() {\n\treturn renderStack.length > 0 ? renderStack[renderStack.length - 1] : null;\n}\n\n/**\n * If the user doesn't have `@babel/plugin-transform-react-jsx-source`\n * somewhere in his tool chain we can't print the filename and source\n * location of a component. In that case we just omit that, but we'll\n * print a helpful message to the console, notifying the user of it.\n */\nlet showJsxSourcePluginWarning = true;\n\n/**\n * Check if a `vnode` is a possible owner.\n * @param {import('./internal').VNode} vnode\n */\nfunction isPossibleOwner(vnode) {\n\treturn typeof vnode.type == 'function' && vnode.type != Fragment;\n}\n\n/**\n * Return the component stack that was captured up to this point.\n * @param {import('./internal').VNode} vnode\n * @returns {string}\n */\nexport function getOwnerStack(vnode) {\n\tconst stack = [vnode];\n\tlet next = vnode;\n\twhile (next._owner != null) {\n\t\tstack.push(next._owner);\n\t\tnext = next._owner;\n\t}\n\n\treturn stack.reduce((acc, owner) => {\n\t\tacc += `  in ${getDisplayName(owner)}`;\n\n\t\tconst source = owner.__source;\n\t\tif (source) {\n\t\t\tacc += ` (at ${source.fileName}:${source.lineNumber})`;\n\t\t} else if (showJsxSourcePluginWarning) {\n\t\t\tconsole.warn(\n\t\t\t\t'Add @babel/plugin-transform-react-jsx-source to get a more detailed component stack. Note that you should not add it to production builds of your App for bundle size reasons.'\n\t\t\t);\n\t\t}\n\t\tshowJsxSourcePluginWarning = false;\n\n\t\treturn (acc += '\\n');\n\t}, '');\n}\n\n/**\n * Setup code to capture the component trace while rendering. Note that\n * we cannot simply traverse `vnode._parent` upwards, because we have some\n * debug messages for `this.setState` where the `vnode` is `undefined`.\n */\nexport function setupComponentStack() {\n\tlet oldDiff = options._diff;\n\tlet oldDiffed = options.diffed;\n\tlet oldRoot = options._root;\n\tlet oldVNode = options.vnode;\n\tlet oldRender = options._render;\n\n\toptions.diffed = vnode => {\n\t\tif (isPossibleOwner(vnode)) {\n\t\t\townerStack.pop();\n\t\t}\n\t\trenderStack.pop();\n\t\tif (oldDiffed) oldDiffed(vnode);\n\t};\n\n\toptions._diff = vnode => {\n\t\tif (isPossibleOwner(vnode)) {\n\t\t\trenderStack.push(vnode);\n\t\t}\n\t\tif (oldDiff) oldDiff(vnode);\n\t};\n\n\toptions._root = (vnode, parent) => {\n\t\townerStack = [];\n\t\tif (oldRoot) oldRoot(vnode, parent);\n\t};\n\n\toptions.vnode = vnode => {\n\t\tvnode._owner =\n\t\t\townerStack.length > 0 ? ownerStack[ownerStack.length - 1] : null;\n\t\tif (oldVNode) oldVNode(vnode);\n\t};\n\n\toptions._render = vnode => {\n\t\tif (isPossibleOwner(vnode)) {\n\t\t\townerStack.push(vnode);\n\t\t}\n\n\t\tif (oldRender) oldRender(vnode);\n\t};\n}\n","import { checkPropTypes } from './check-props';\nimport { options, Component } from 'preact';\nimport {\n\tELEMENT_NODE,\n\tDOCUMENT_NODE,\n\tDOCUMENT_FRAGMENT_NODE\n} from './constants';\nimport {\n\tgetOwnerStack,\n\tsetupComponentStack,\n\tgetCurrentVNode,\n\tgetDisplayName\n} from './component-stack';\nimport { assign, isNaN } from './util';\n\nconst isWeakMapSupported = typeof WeakMap == 'function';\n\n/**\n * @param {import('./internal').VNode} vnode\n * @returns {Array<string>}\n */\nfunction getDomChildren(vnode) {\n\tlet domChildren = [];\n\n\tif (!vnode._children) return domChildren;\n\n\tvnode._children.forEach(child => {\n\t\tif (child && typeof child.type === 'function') {\n\t\t\tdomChildren.push.apply(domChildren, getDomChildren(child));\n\t\t} else if (child && typeof child.type === 'string') {\n\t\t\tdomChildren.push(child.type);\n\t\t}\n\t});\n\n\treturn domChildren;\n}\n\n/**\n * @param {import('./internal').VNode} parent\n * @returns {string}\n */\nfunction getClosestDomNodeParentName(parent) {\n\tif (!parent) return '';\n\tif (typeof parent.type == 'function') {\n\t\tif (parent._parent === null) {\n\t\t\tif (parent._dom !== null && parent._dom.parentNode !== null) {\n\t\t\t\treturn parent._dom.parentNode.localName;\n\t\t\t}\n\t\t\treturn '';\n\t\t}\n\t\treturn getClosestDomNodeParentName(parent._parent);\n\t}\n\treturn /** @type {string} */ (parent.type);\n}\n\nexport function initDebug() {\n\tsetupComponentStack();\n\n\tlet hooksAllowed = false;\n\n\t/* eslint-disable no-console */\n\tlet oldBeforeDiff = options._diff;\n\tlet oldDiffed = options.diffed;\n\tlet oldVnode = options.vnode;\n\tlet oldRender = options._render;\n\tlet oldCatchError = options._catchError;\n\tlet oldRoot = options._root;\n\tlet oldHook = options._hook;\n\tconst warnedComponents = !isWeakMapSupported\n\t\t? null\n\t\t: {\n\t\t\t\tuseEffect: new WeakMap(),\n\t\t\t\tuseLayoutEffect: new WeakMap(),\n\t\t\t\tlazyPropTypes: new WeakMap()\n\t\t  };\n\tconst deprecations = [];\n\n\toptions._catchError = (error, vnode, oldVNode, errorInfo) => {\n\t\tlet component = vnode && vnode._component;\n\t\tif (component && typeof error.then == 'function') {\n\t\t\tconst promise = error;\n\t\t\terror = new Error(\n\t\t\t\t`Missing Suspense. The throwing component was: ${getDisplayName(vnode)}`\n\t\t\t);\n\n\t\t\tlet parent = vnode;\n\t\t\tfor (; parent; parent = parent._parent) {\n\t\t\t\tif (parent._component && parent._component._childDidSuspend) {\n\t\t\t\t\terror = promise;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We haven't recovered and we know at this point that there is no\n\t\t\t// Suspense component higher up in the tree\n\t\t\tif (error instanceof Error) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\terrorInfo = errorInfo || {};\n\t\t\terrorInfo.componentStack = getOwnerStack(vnode);\n\t\t\toldCatchError(error, vnode, oldVNode, errorInfo);\n\n\t\t\t// when an error was handled by an ErrorBoundary we will nonetheless emit an error\n\t\t\t// event on the window object. This is to make up for react compatibility in dev mode\n\t\t\t// and thus make the Next.js dev overlay work.\n\t\t\tif (typeof error.then != 'function') {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthrow e;\n\t\t}\n\t};\n\n\toptions._root = (vnode, parentNode) => {\n\t\tif (!parentNode) {\n\t\t\tthrow new Error(\n\t\t\t\t'Undefined parent passed to render(), this is the second argument.\\n' +\n\t\t\t\t\t'Check if the element is available in the DOM/has the correct id.'\n\t\t\t);\n\t\t}\n\n\t\tlet isValid;\n\t\tswitch (parentNode.nodeType) {\n\t\t\tcase ELEMENT_NODE:\n\t\t\tcase DOCUMENT_FRAGMENT_NODE:\n\t\t\tcase DOCUMENT_NODE:\n\t\t\t\tisValid = true;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tisValid = false;\n\t\t}\n\n\t\tif (!isValid) {\n\t\t\tlet componentName = getDisplayName(vnode);\n\t\t\tthrow new Error(\n\t\t\t\t`Expected a valid HTML node as a second argument to render.\tReceived ${parentNode} instead: render(<${componentName} />, ${parentNode});`\n\t\t\t);\n\t\t}\n\n\t\tif (oldRoot) oldRoot(vnode, parentNode);\n\t};\n\n\toptions._diff = vnode => {\n\t\tlet { type } = vnode;\n\n\t\thooksAllowed = true;\n\n\t\tif (type === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t'Undefined component passed to createElement()\\n\\n' +\n\t\t\t\t\t'You likely forgot to export your component or might have mixed up default and named imports' +\n\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t);\n\t\t} else if (type != null && typeof type == 'object') {\n\t\t\tif (type._children !== undefined && type._dom !== undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid type passed to createElement(): ${type}\\n\\n` +\n\t\t\t\t\t\t'Did you accidentally pass a JSX literal as JSX twice?\\n\\n' +\n\t\t\t\t\t\t`  let My${getDisplayName(vnode)} = ${serializeVNode(type)};\\n` +\n\t\t\t\t\t\t`  let vnode = <My${getDisplayName(vnode)} />;\\n\\n` +\n\t\t\t\t\t\t'This usually happens when you export a JSX literal and not the component.' +\n\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tthrow new Error(\n\t\t\t\t'Invalid type passed to createElement(): ' +\n\t\t\t\t\t(Array.isArray(type) ? 'array' : type)\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\tvnode.ref !== undefined &&\n\t\t\ttypeof vnode.ref != 'function' &&\n\t\t\ttypeof vnode.ref != 'object' &&\n\t\t\t!('$$typeof' in vnode) // allow string refs when preact-compat is installed\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Component's \"ref\" property should be a function, or an object created ` +\n\t\t\t\t\t`by createRef(), but got [${typeof vnode.ref}] instead\\n` +\n\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t);\n\t\t}\n\n\t\tif (typeof vnode.type == 'string') {\n\t\t\tfor (const key in vnode.props) {\n\t\t\t\tif (\n\t\t\t\t\tkey[0] === 'o' &&\n\t\t\t\t\tkey[1] === 'n' &&\n\t\t\t\t\ttypeof vnode.props[key] != 'function' &&\n\t\t\t\t\tvnode.props[key] != null\n\t\t\t\t) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Component's \"${key}\" property should be a function, ` +\n\t\t\t\t\t\t\t`but got [${typeof vnode.props[key]}] instead\\n` +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check prop-types if available\n\t\tif (typeof vnode.type == 'function' && vnode.type.propTypes) {\n\t\t\tif (\n\t\t\t\tvnode.type.displayName === 'Lazy' &&\n\t\t\t\twarnedComponents &&\n\t\t\t\t!warnedComponents.lazyPropTypes.has(vnode.type)\n\t\t\t) {\n\t\t\t\tconst m =\n\t\t\t\t\t'PropTypes are not supported on lazy(). Use propTypes on the wrapped component itself. ';\n\t\t\t\ttry {\n\t\t\t\t\tconst lazyVNode = vnode.type();\n\t\t\t\t\twarnedComponents.lazyPropTypes.set(vnode.type, true);\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\tm + `Component wrapped in lazy() is ${getDisplayName(lazyVNode)}`\n\t\t\t\t\t);\n\t\t\t\t} catch (promise) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\tm + \"We will log the wrapped component's name once it is loaded.\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet values = vnode.props;\n\t\t\tif (vnode.type._forwarded) {\n\t\t\t\tvalues = assign({}, values);\n\t\t\t\tdelete values.ref;\n\t\t\t}\n\n\t\t\tcheckPropTypes(\n\t\t\t\tvnode.type.propTypes,\n\t\t\t\tvalues,\n\t\t\t\t'prop',\n\t\t\t\tgetDisplayName(vnode),\n\t\t\t\t() => getOwnerStack(vnode)\n\t\t\t);\n\t\t}\n\n\t\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n\t};\n\n\tlet renderCount = 0;\n\tlet currentComponent;\n\toptions._render = vnode => {\n\t\tif (oldRender) {\n\t\t\toldRender(vnode);\n\t\t}\n\t\thooksAllowed = true;\n\n\t\tconst nextComponent = vnode._component;\n\t\tif (nextComponent === currentComponent) {\n\t\t\trenderCount++;\n\t\t} else {\n\t\t\trenderCount = 1;\n\t\t}\n\n\t\tif (renderCount >= 25) {\n\t\t\tthrow new Error(\n\t\t\t\t`Too many re-renders. This is limited to prevent an infinite loop ` +\n\t\t\t\t\t`which may lock up your browser. The component causing this is: ${getDisplayName(\n\t\t\t\t\t\tvnode\n\t\t\t\t\t)}`\n\t\t\t);\n\t\t}\n\n\t\tcurrentComponent = nextComponent;\n\t};\n\n\toptions._hook = (comp, index, type) => {\n\t\tif (!comp || !hooksAllowed) {\n\t\t\tthrow new Error('Hook can only be invoked from render methods.');\n\t\t}\n\n\t\tif (oldHook) oldHook(comp, index, type);\n\t};\n\n\t// Ideally we'd want to print a warning once per component, but we\n\t// don't have access to the vnode that triggered it here. As a\n\t// compromise and to avoid flooding the console with warnings we\n\t// print each deprecation warning only once.\n\tconst warn = (property, message) => ({\n\t\tget() {\n\t\t\tconst key = 'get' + property + message;\n\t\t\tif (deprecations && deprecations.indexOf(key) < 0) {\n\t\t\t\tdeprecations.push(key);\n\t\t\t\tconsole.warn(`getting vnode.${property} is deprecated, ${message}`);\n\t\t\t}\n\t\t},\n\t\tset() {\n\t\t\tconst key = 'set' + property + message;\n\t\t\tif (deprecations && deprecations.indexOf(key) < 0) {\n\t\t\t\tdeprecations.push(key);\n\t\t\t\tconsole.warn(`setting vnode.${property} is not allowed, ${message}`);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst deprecatedAttributes = {\n\t\tnodeName: warn('nodeName', 'use vnode.type'),\n\t\tattributes: warn('attributes', 'use vnode.props'),\n\t\tchildren: warn('children', 'use vnode.props.children')\n\t};\n\n\tconst deprecatedProto = Object.create({}, deprecatedAttributes);\n\n\toptions.vnode = vnode => {\n\t\tconst props = vnode.props;\n\t\tif (\n\t\t\tvnode.type !== null &&\n\t\t\tprops != null &&\n\t\t\t('__source' in props || '__self' in props)\n\t\t) {\n\t\t\tconst newProps = (vnode.props = {});\n\t\t\tfor (let i in props) {\n\t\t\t\tconst v = props[i];\n\t\t\t\tif (i === '__source') vnode.__source = v;\n\t\t\t\telse if (i === '__self') vnode.__self = v;\n\t\t\t\telse newProps[i] = v;\n\t\t\t}\n\t\t}\n\n\t\t// eslint-disable-next-line\n\t\tvnode.__proto__ = deprecatedProto;\n\t\tif (oldVnode) oldVnode(vnode);\n\t};\n\n\toptions.diffed = vnode => {\n\t\tconst { type, _parent: parent } = vnode;\n\t\t// Check if the user passed plain objects as children. Note that we cannot\n\t\t// move this check into `options.vnode` because components can receive\n\t\t// children in any shape they want (e.g.\n\t\t// `<MyJSONFormatter>{{ foo: 123, bar: \"abc\" }}</MyJSONFormatter>`).\n\t\t// Putting this check in `options.diffed` ensures that\n\t\t// `vnode._children` is set and that we only validate the children\n\t\t// that were actually rendered.\n\t\tif (vnode._children) {\n\t\t\tvnode._children.forEach(child => {\n\t\t\t\tif (typeof child === 'object' && child && child.type === undefined) {\n\t\t\t\t\tconst keys = Object.keys(child).join(',');\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Objects are not valid as a child. Encountered an object with the keys {${keys}}.` +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (vnode._component === currentComponent) {\n\t\t\trenderCount = 0;\n\t\t}\n\n\t\tif (\n\t\t\ttypeof type === 'string' &&\n\t\t\t(isTableElement(type) ||\n\t\t\t\ttype === 'p' ||\n\t\t\t\ttype === 'a' ||\n\t\t\t\ttype === 'button')\n\t\t) {\n\t\t\t// Avoid false positives when Preact only partially rendered the\n\t\t\t// HTML tree. Whilst we attempt to include the outer DOM in our\n\t\t\t// validation, this wouldn't work on the server for\n\t\t\t// `preact-render-to-string`. There we'd otherwise flood the terminal\n\t\t\t// with false positives, which we'd like to avoid.\n\t\t\tlet domParentName = getClosestDomNodeParentName(parent);\n\t\t\tif (domParentName !== '') {\n\t\t\t\tif (\n\t\t\t\t\ttype === 'table' &&\n\t\t\t\t\t// Tables can be nested inside each other if it's inside a cell.\n\t\t\t\t\t// See https://developer.mozilla.org/en-US/docs/Learn/HTML/Tables/Advanced#nesting_tables\n\t\t\t\t\tdomParentName !== 'td' &&\n\t\t\t\t\tisTableElement(domParentName)\n\t\t\t\t) {\n\t\t\t\t\tconsole.log(domParentName, parent._dom);\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Improper nesting of table. Your <table> should not have a table-node parent.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\t(type === 'thead' || type === 'tfoot' || type === 'tbody') &&\n\t\t\t\t\tdomParentName !== 'table'\n\t\t\t\t) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Improper nesting of table. Your <thead/tbody/tfoot> should have a <table> parent.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t} else if (\n\t\t\t\t\ttype === 'tr' &&\n\t\t\t\t\tdomParentName !== 'thead' &&\n\t\t\t\t\tdomParentName !== 'tfoot' &&\n\t\t\t\t\tdomParentName !== 'tbody'\n\t\t\t\t) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Improper nesting of table. Your <tr> should have a <thead/tbody/tfoot> parent.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t} else if (type === 'td' && domParentName !== 'tr') {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Improper nesting of table. Your <td> should have a <tr> parent.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t} else if (type === 'th' && domParentName !== 'tr') {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Improper nesting of table. Your <th> should have a <tr>.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (type === 'p') {\n\t\t\t\tlet illegalDomChildrenTypes = getDomChildren(vnode).filter(childType =>\n\t\t\t\t\tILLEGAL_PARAGRAPH_CHILD_ELEMENTS.test(childType)\n\t\t\t\t);\n\t\t\t\tif (illegalDomChildrenTypes.length) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Improper nesting of paragraph. Your <p> should not have ' +\n\t\t\t\t\t\t\tillegalDomChildrenTypes.join(', ') +\n\t\t\t\t\t\t\t'as child-elements.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (type === 'a' || type === 'button') {\n\t\t\t\tif (getDomChildren(vnode).indexOf(type) !== -1) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Improper nesting of interactive content. Your <${type}>` +\n\t\t\t\t\t\t\t` should not have other ${type === 'a' ? 'anchor' : 'button'}` +\n\t\t\t\t\t\t\t' tags as child-elements.' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\thooksAllowed = false;\n\n\t\tif (oldDiffed) oldDiffed(vnode);\n\n\t\tif (vnode._children != null) {\n\t\t\tconst keys = [];\n\t\t\tfor (let i = 0; i < vnode._children.length; i++) {\n\t\t\t\tconst child = vnode._children[i];\n\t\t\t\tif (!child || child.key == null) continue;\n\n\t\t\t\tconst key = child.key;\n\t\t\t\tif (keys.indexOf(key) !== -1) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'Following component has two or more children with the ' +\n\t\t\t\t\t\t\t`same key attribute: \"${key}\". This may cause glitches and misbehavior ` +\n\t\t\t\t\t\t\t'in rendering process. Component: \\n\\n' +\n\t\t\t\t\t\t\tserializeVNode(vnode) +\n\t\t\t\t\t\t\t`\\n\\n${getOwnerStack(vnode)}`\n\t\t\t\t\t);\n\n\t\t\t\t\t// Break early to not spam the console\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tkeys.push(key);\n\t\t\t}\n\t\t}\n\n\t\tif (vnode._component != null && vnode._component.__hooks != null) {\n\t\t\t// Validate that none of the hooks in this component contain arguments that are NaN.\n\t\t\t// This is a common mistake that can be hard to debug, so we want to catch it early.\n\t\t\tconst hooks = vnode._component.__hooks._list;\n\t\t\tif (hooks) {\n\t\t\t\tfor (let i = 0; i < hooks.length; i += 1) {\n\t\t\t\t\tconst hook = hooks[i];\n\t\t\t\t\tif (hook._args) {\n\t\t\t\t\t\tfor (let j = 0; j < hook._args.length; j++) {\n\t\t\t\t\t\t\tconst arg = hook._args[j];\n\t\t\t\t\t\t\tif (isNaN(arg)) {\n\t\t\t\t\t\t\t\tconst componentName = getDisplayName(vnode);\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`Invalid argument passed to hook. Hooks should not be called with NaN in the dependency array. Hook index ${i} in component ${componentName} was called with NaN.`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\nconst setState = Component.prototype.setState;\nComponent.prototype.setState = function (update, callback) {\n\tif (this._vnode == null) {\n\t\t// `this._vnode` will be `null` during componentWillMount. But it\n\t\t// is perfectly valid to call `setState` during cWM. So we\n\t\t// need an additional check to verify that we are dealing with a\n\t\t// call inside constructor.\n\t\tif (this.state == null) {\n\t\t\tconsole.warn(\n\t\t\t\t`Calling \"this.setState\" inside the constructor of a component is a ` +\n\t\t\t\t\t`no-op and might be a bug in your application. Instead, set ` +\n\t\t\t\t\t`\"this.state = {}\" directly.\\n\\n${getOwnerStack(getCurrentVNode())}`\n\t\t\t);\n\t\t}\n\t}\n\n\treturn setState.call(this, update, callback);\n};\n\nfunction isTableElement(type) {\n\treturn (\n\t\ttype === 'table' ||\n\t\ttype === 'tfoot' ||\n\t\ttype === 'tbody' ||\n\t\ttype === 'thead' ||\n\t\ttype === 'td' ||\n\t\ttype === 'tr' ||\n\t\ttype === 'th'\n\t);\n}\n\nconst ILLEGAL_PARAGRAPH_CHILD_ELEMENTS =\n\t/^(address|article|aside|blockquote|details|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|main|menu|nav|ol|p|pre|search|section|table|ul)$/;\n\nconst forceUpdate = Component.prototype.forceUpdate;\nComponent.prototype.forceUpdate = function (callback) {\n\tif (this._vnode == null) {\n\t\tconsole.warn(\n\t\t\t`Calling \"this.forceUpdate\" inside the constructor of a component is a ` +\n\t\t\t\t`no-op and might be a bug in your application.\\n\\n${getOwnerStack(\n\t\t\t\t\tgetCurrentVNode()\n\t\t\t\t)}`\n\t\t);\n\t} else if (this._parentDom == null) {\n\t\tconsole.warn(\n\t\t\t`Can't call \"this.forceUpdate\" on an unmounted component. This is a no-op, ` +\n\t\t\t\t`but it indicates a memory leak in your application. To fix, cancel all ` +\n\t\t\t\t`subscriptions and asynchronous tasks in the componentWillUnmount method.` +\n\t\t\t\t`\\n\\n${getOwnerStack(this._vnode)}`\n\t\t);\n\t}\n\treturn forceUpdate.call(this, callback);\n};\n\n/**\n * Serialize a vnode tree to a string\n * @param {import('./internal').VNode} vnode\n * @returns {string}\n */\nexport function serializeVNode(vnode) {\n\tlet { props } = vnode;\n\tlet name = getDisplayName(vnode);\n\n\tlet attrs = '';\n\tfor (let prop in props) {\n\t\tif (props.hasOwnProperty(prop) && prop !== 'children') {\n\t\t\tlet value = props[prop];\n\n\t\t\t// If it is an object but doesn't have toString(), use Object.toString\n\t\t\tif (typeof value == 'function') {\n\t\t\t\tvalue = `function ${value.displayName || value.name}() {}`;\n\t\t\t}\n\n\t\t\tvalue =\n\t\t\t\tObject(value) === value && !value.toString\n\t\t\t\t\t? Object.prototype.toString.call(value)\n\t\t\t\t\t: value + '';\n\n\t\t\tattrs += ` ${prop}=${JSON.stringify(value)}`;\n\t\t}\n\t}\n\n\tlet children = props.children;\n\treturn `<${name}${attrs}${\n\t\tchildren && children.length ? '>..</' + name + '>' : ' />'\n\t}`;\n}\n","export const ELEMENT_NODE = 1;\nexport const DOCUMENT_NODE = 9;\nexport const DOCUMENT_FRAGMENT_NODE = 11;\n","/**\n * Assign properties from `props` to `obj`\n * @template O, P The obj and props types\n * @param {O} obj The object to copy properties to\n * @param {P} props The object to copy properties from\n * @returns {O & P}\n */\nexport function assign(obj, props) {\n\tfor (let i in props) obj[i] = props[i];\n\treturn /** @type {O & P} */ (obj);\n}\n\nexport function isNaN(value) {\n\treturn value !== value;\n}\n","import { initDebug } from './debug';\nimport 'preact/devtools';\n\ninitDebug();\n\nexport { resetPropWarnings } from './check-props';\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we can't know the types passed to merge call\ntype FormatFunction = (value: any) => string | number;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we can't know the types passed to merge call\ntype UpdateFunction = (node: HTMLElement, value: any) => void;\nconst formatters: { [key: string]: FormatFunction } = {};\nconst updaters: { [key: string]: UpdateFunction } = {};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we can't know the types passed to merge call\nfunction mergeNode(node: HTMLElement, set: string, data: any) {\n  const parts = set.split(\":\");\n  const isNodeFunc = parts.length === 1;\n  if (parts.length > 2) {\n    console.error(`Illegal merge expression: '${set}'`, node);\n    return;\n  }\n\n  let func = \"\";\n  let exprpath = (isNodeFunc ? parts[0] : parts[1]).trim();\n\n  const callparts = exprpath.split(\"(\");\n  if (callparts.length > 1) {\n    if (callparts.length !== 2) {\n      console.error(`Illegal merge value: '${set}'`, node);\n      return;\n    }\n\n    func = callparts[0].trim();\n    const funcrest = callparts[1].split(\")\");\n    if (funcrest.length !== 2 || funcrest[1] !== \"\") {\n      console.error(`Illegal merge value: '${set}'`, node);\n      return;\n    }\n    exprpath = funcrest[0].trim();\n  }\n\n  let value = data;\n  if (exprpath !== \"*\") {\n    const exprpathparts = exprpath.split(\".\");\n    for (let i = 0; i < exprpathparts.length; ++i) {\n      value = value[exprpathparts[i].trim()];\n      if (typeof value === \"undefined\")\n        return;\n    }\n  }\n\n  if (isNodeFunc) {\n    if (func && updaters[func])\n      updaters[func](node, value);\n    else if (func)\n      console.error(`Unknown updating function '${func}' in '${set}'`, node);\n    else\n      console.error(`A function is required for merges without a property (in '${set}')`, node);\n    return;\n  }\n\n  const prop = parts[0].trim();\n  if (func) {\n    if (formatters[func])\n      value = formatters[func](value);\n    else {\n      console.error(`Unknown formatting function '${func}' in '${set}'`, node);\n      return;\n    }\n  }\n\n  if (typeof value !== \"string\" && typeof value !== \"number\") {\n    console.error(`Got a value of type ${typeof value} in '${set}'`, node);\n    return;\n  }\n\n  switch (prop) {\n    case 'events':\n    case 'styles':\n    case 'children':\n    case 'on':\n    case \"className\":\n    case \"class\":\n    case 'style':\n    case 'dataset':\n    case 'childNodes':\n      {\n        console.error(`Cannot modify '${prop}' with merge`, node);\n        return;\n      }\n    default:\n      {\n        // 1-to-1 name to property mapping\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we don't know which keys will be set\n        (node as any)[prop] = value;\n        return;\n      }\n  }\n}\n\n/**\n     Apply all merge fields within a node, recursively\n *\n    @param mergenode - Root node to start merging\n    @param data - Merge data\n    @param options - filter: If set, a function that will be called for every node with merge functions. If it returns a falsy value, the node will be skipped.\n */\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we can't know the types passed to merge call\nexport async function run(mergenode: ParentNode, data: any, { filter }: { filter?: (node: Element) => boolean } = {}) {\n  const nodes = mergenode.querySelectorAll('*[data-merge],*[data-wh-merge]') as NodeListOf<HTMLElement>;\n  for (const node of Array.from(nodes)) { //FIXME drop support for data-wh-merge as soon as we've completed the phase out\n    if (node.nodeType !== 1 || (filter && !filter(node)))\n      continue;\n\n    // Parse 'a=b;c=d(e)'\n    const sets = ((node as HTMLElement).dataset.merge || (node as HTMLElement).dataset.whMerge)?.split(\";\");\n    if (sets)\n      for (const set of sets)\n        mergeNode(node, set, data);\n  }\n}\n\n/**\n     Register a formatter function.\n *\n    @param name - Name of the formatter function\n    @param callback - Formatter function. Called with parameter (value), must return a formatted value to write to the property.\n */\nexport function registerFormatter(name: string, callback: FormatFunction) {\n  formatters[name] = callback;\n}\n\n/**\n     Register an updater function (used to update multiple properties of a node at once)\n *\n    @param name - Name of the updater function\n    @param callback - Updater function. Called with parameters (node: HTMLElement, value: Any).\n */\nexport function registerUpdater(name: string, callback: UpdateFunction) {\n  updaters[name] = callback;\n}\n","import * as dompack from '@webhare/dompack';\nimport type { FieldErrorOptions, FormFrontendMessage } from '../formbase';\nimport { debugFlags } from '@webhare/env';\nimport { getFieldDisplayName, getFieldNativeError } from '@webhare/forms/src/domsupport';\n\n///Fired at nodes to apply error\nexport type SetFieldErrorData = {\n  error: FormFrontendMessage;\n  reportimmediately: boolean;\n  serverside: boolean;\n  metadata: unknown;\n};\n\nexport type FieldValidator<E extends HTMLElement = HTMLElement> = (node: E) => Promise<FormFrontendMessage | undefined> | FormFrontendMessage | undefined;\n\nfunction setupServerErrorClear(field: HTMLElement) {\n  const group = field.closest<HTMLElement>('.wh-form__fieldgroup') || field;\n  field.propWhCleanupFunction = () => {\n    group.removeEventListener(\"change\", field.propWhCleanupFunction!, true);\n    group.removeEventListener(\"input\", field.propWhCleanupFunction!, true);\n    group.removeEventListener(\"blur\", field.propWhCleanupFunction!, true);\n    setFieldError(field, '', { serverside: true });\n    field.propWhCleanupFunction = undefined;\n  };\n\n  // to be rightly paranoid (plugins and JS directly editing other fields) we'll blur when anything anywhere seems to change\n  // eg wrd.testwrdauth-emailchange would fail on Chrome without this if the browser window was not currently focused\n  group.addEventListener(\"change\", field.propWhCleanupFunction, true);\n  group.addEventListener(\"input\", field.propWhCleanupFunction, true);\n  if (!field.closest('form[novalidate]')) //if we're doing html5 validation, errors will block submit, so let's already clear on blur\n    group.addEventListener(\"blur\", field.propWhCleanupFunction, true);\n}\n\nclass ComponentValidationState {\n  el: HTMLElement;\n\n  /** Explicitly set error */\n  explicit: {\n    error: FormFrontendMessage;\n    serverside: boolean;\n    reportimmediately: boolean;\n    metadata?: unknown;\n\n  } | null = null;\n\n  /** Dynamic errors (generated by the validation steps, refreshable instead of waiting for explciit errors) */\n  dynamicError: FormFrontendMessage | null = null;\n\n  validators: FieldValidator[] = [];\n\n  constructor(el: HTMLElement) {\n    this.el = el;\n  }\n\n  getState(): { error: FormFrontendMessage; suggested?: never } | { error?: never; suggested: FormFrontendMessage } | null {\n    const err = this.getError();\n    if (err)\n      return { error: err };\n\n    if (this.el.propWhValidationSuggestion)\n      return { suggested: this.el.propWhValidationSuggestion };\n\n    return null;\n  }\n\n  getError(): FormFrontendMessage | null {\n    return this.explicit?.error || this.dynamicError || getFieldNativeError(this.el) || null;\n  }\n\n  hasError(): boolean {\n    return Boolean(this.getError());\n  }\n}\n\nconst validations = new WeakMap<HTMLElement, ComponentValidationState>();\n\nexport function getValidationState(field: HTMLElement) {\n\n  const state = validations.get(field);\n  if (state)\n    return state;\n\n  const newstate = new ComponentValidationState(field);\n  validations.set(field, newstate);\n  return newstate;\n}\n\n/* TODO Are we sure we should expose this API? A form-level setupValidator might be better as we can then re-validate at the proper point in time\n   instead of relying on an external user to enable and shutdown the error. We're mixing two completely different systems with setupValidator (which\n   works nicely with our focusout hadling) and setFieldError (which is extremely stateful and relies on the error-setter managing all the edge cases)\n\n   Oh and serverside errors float somewhere halfway that spectrum.. as we setup explicit clearing callbacks to remove the state we created ourselves.\n*/\nexport function setFieldError(field: Element, error: FormFrontendMessage, options?: Partial<FieldErrorOptions>) {\n  if (!dompack.isHTMLElement(field))\n    throw new Error(`Field is not a valid target for handling errors`);\n\n  const state = getValidationState(field);\n  if (!error) {  //clearing\n    if (!state.explicit)\n      return; //no change\n\n    state.explicit = null;\n    if (debugFlags.fhv)\n      console.log(`[fhv] Clearing error state for ${getFieldDisplayName(field)}`, field, error, options);\n  } else { //changing ?\n    if (debugFlags.fhv)\n      console.log(`[fhv] ${state.explicit ? 'Updating' : 'Setting'} error state for ${getFieldDisplayName(field)}`, field, error, options);\n\n    state.explicit = {\n      error,\n      serverside: options?.serverside || false,\n      reportimmediately: options?.reportimmediately || false,\n      metadata: options?.metadata\n    };\n\n    if (options?.serverside)\n      setupServerErrorClear(field);\n  }\n\n  updateFieldError(field);\n}\n\nexport function updateFieldError(field: HTMLElement) {\n  const state = getValidationState(field);\n\n  dompack.dispatchCustomEvent(field, 'wh:form-setfielderror', //this is where parsley hooks in and cancels to handle the rendering of faults itself\n    {\n      bubbles: true,\n      cancelable: true,\n      detail: {\n        error: state.explicit?.error || getFieldNativeError(field) || '',\n        reportimmediately: state.explicit?.reportimmediately || false,\n        serverside: state.explicit?.serverside || false,\n        metadata: state.explicit?.metadata\n      }\n    });\n}\n\n/** Set up a custom validator\n * @param node - Form element to validate\n * @param checker - Sync or async function that returns a string with an error message or undefined if the field is valid.\n*/\nexport function setupValidator<NodeType extends HTMLElement>(node: NodeType, checker: FieldValidator<NodeType>): void {\n  getValidationState(node).validators.push(checker as FieldValidator);\n\n  //if the checker as a name, we'll add it. otherwise we'll ensure that data-wh-form-custom-validator is set so we can scan for it (and it's probably nice to see it in the dom)\n  node.dataset.whFormCustomValidator = ((node.dataset.whFormCustomValidator || \"\") + \" \" + (checker.name || \"?\")).trim();\n}\n","/* This is our public api. Any direct inclusions from src/.... not mentioned here are not a stable API\n*/\n\nexport { createDeferred } from '@webhare/std';\nexport { flagUIBusy, getRelativeBounds, type Rect } from '@webhare/dompack';\nexport {\n  dispatchCustomEvent, dispatchDomEvent, fireModifiedEvents, changeValue, normalizeKeyboardEventData,\n  stop\n} from './src/events';\nexport {\n  qS, qSA, contains, closest, matches,\n  empty, isDomReady, onDomReady, getJSONAttribute,\n  before, after, replaceWith, remove, prepend, append,\n  toggleClass, toggleClasses,\n  setStyles,\n  getBaseURI,\n} from './src/tree';\nexport { create, jsxcreate, jsxfragment } from './src/create';\nexport { focus, register, registerMissed, scrollIntoView } from './src/components';\nexport type { TakeFocusEvent } from './src/components';\n\nimport { debugFlags } from \"@webhare/env\";\n\n/** @deprecated You should use debugFlags from \\@webhare/env */\nexport const debugflags = debugFlags;\n","/**\n * Get ISO-formatted local date from a date (getISOString returns an UTC datetime)\n *\n * @param date - Date to return\n * @returns Date as a YYYY-MM-DD string\n */\nexport function getISOLocalDate(date: Date) {\n  return date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);\n}\n","export function getActiveElement(doc: Document | null): HTMLElement | null {\n  return doc?.activeElement as HTMLElement || null;\n}\n\nexport function getToplevelWindow() {\n  let toplevelwindow: Window = window;\n  while (toplevelwindow.frameElement)\n    toplevelwindow = toplevelwindow.parent;\n  return toplevelwindow;\n}\n\nexport function asIframe(node: Element | null): HTMLIFrameElement | null {\n  return node && (node as HTMLElement)?.matches?.('iframe') ? node as HTMLIFrameElement : null;\n}\n\n/**\n     Find the currently focused element\n *\n    @param limitdoc - If set, only return compontents in the specified document (prevents editable iframes from returning subframes)\n    @returns The element or null\n */\nexport function getCurrentlyFocusedElement(limitdoc?: Document): HTMLElement | null {\n  try {\n    let focused = getActiveElement(getToplevelWindow().document);\n    for (; ;) {\n      const frame = asIframe(focused);\n      if (frame && (!limitdoc || frame.ownerDocument !== limitdoc))\n        focused = getActiveElement(frame.contentDocument);\n      else\n        break;\n    }\n    if (focused && limitdoc && focused.ownerDocument !== limitdoc)\n      return null;\n    return focused;\n  } catch (e) {\n    return null;\n  }\n}\n\n/** Return whether the node is reachable for focus by keyboard navigation\n   (because tabIndex === -1 will be seen a non(keyboard)focusable by this function)\n\n    @param node - Node to test\n    @param ignoreInert - Ignore the inert attribute\n*/\nexport function canFocusTo(node: Element, { ignoreInertAttribute = false } = {}): node is HTMLElement { //returns if a -visible- node is focusable (this function does not check for visibility itself)\n  if (!node.closest) //callers are not necessarily calling us with HTMLElement, eg getClosestValidFocusTarget might supply a document\n    return false;\n  if (!ignoreInertAttribute && node.closest('[inert]'))\n    return false;\n\n  if ((node as HTMLElement).contentEditable === \"true\")\n    return true;\n  if (node.shadowRoot?.delegatesFocus)\n    return true;\n\n  return (node as HTMLElement).tabIndex >= 0 && !(node as HTMLInputElement).disabled && !(node.tagName === 'A' && !(node as HTMLAnchorElement).href);\n}\n\nexport function getFocusableComponents(startnode: Element | null, options?: boolean | { recurseFrames?: boolean; ignoreInertAttribute?: boolean }): HTMLElement[] {\n  if (typeof options !== \"object\") {\n    options = { recurseFrames: options };\n  }\n  let focusable: HTMLElement[] = [];\n  if (!startnode)\n    return focusable;\n  for (const currentnode of startnode.children) {\n    // Get current style (avoid mootools due to cross-frame issues)\n    const currentstyle = getComputedStyle(currentnode);\n    if (!currentstyle || currentstyle.display === \"none\" || currentstyle.visibility === \"hidden\") {\n      //if(currentnode.getStyle) console.log(\"getFocusableComponents skipping\",currentnode, $(currentnode).getStyle(\"display\"), currentnode.getStyle(\"visibility\"))\n      continue;\n    }\n\n    let iframe;\n    if (options?.recurseFrames && (iframe = asIframe(currentnode))) { //might contain more things to focus\n      try {\n        const subnodes = getFocusableComponents(iframe.contentDocument!.documentElement, options);\n        if (subnodes.length)\n          focusable = focusable.concat(subnodes);\n      } catch {\n        //assume permission error\n      }\n    } else if (canFocusTo(currentnode, options)) {\n      focusable.push(currentnode);\n    }\n\n    if ((currentnode as HTMLElement).isContentEditable)\n      continue; //don't look for further focusable nodes inside, the whole RTE counts as an editable component\n\n    const subnodes = getFocusableComponents(currentnode, options);\n    if (subnodes.length)\n      focusable = focusable.concat(subnodes);\n  }\n  return focusable;\n}\n\nexport function getAllFocusableComponents() {\n  return getFocusableComponents(getToplevelWindow().document.documentElement, true);\n}\n","/* eslint-disable @typescript-eslint/no-floating-promises -- FIXME: needs API rework */\n\nimport * as dompack from '@webhare/dompack';\nimport { type DocEvent, type FormControlElement, type TakeFocusEvent, addDocEventListener, isFormControl } from '@webhare/dompack';\nimport * as domfocus from 'dompack/browserfix/focus';\nimport * as webharefields from './internal/webharefields';\nimport * as merge from './internal/merge';\nimport './internal/requiredstyles.css';\nimport { type SetFieldErrorData, getValidationState, setFieldError, setupValidator, updateFieldError } from './internal/customvalidation';\nimport { generateRandomId, isPromise, wrapSerialized } from '@webhare/std';\nimport { debugFlags, isLive, navigateTo, type NavigateInstruction } from '@webhare/env';\nimport { getFieldDisplayName, isFieldNativeErrored, isRadioOrCheckbox, isRadioNodeList, type ConstrainedRadioNodeList, parseCondition, getFormElementCandidates, isFormFieldLike, queryFormFieldLike, getFieldName } from '@webhare/forms/src/domsupport';\nimport { rfSymbol } from '@webhare/forms/src/registeredfield';\nimport type { FormAnalyticsEventData, FormAnalyticsSubEvents, FormCondition, FormFileValue, RPCFormMessage } from '@webhare/forms/src/types';\nimport { FieldMapDataProxy, FormFieldMap } from '@webhare/forms/src/fieldmap';\nimport { submitselector, type SubmitSelectorType } from '@webhare/dompack/src/browser';\nimport type { FormSubmitDetails } from './rpc';\nimport type { FormConfiguration } from '@webhare/forms';\n\n//Suggestion or error messages\nexport type FormFrontendMessage = HTMLElement | string;\n\ndeclare global {\n  interface HTMLElement {\n    //TODO Clean this up, these are internal. Move to a weakobject ?\n    propWhFormSavedRequired?: boolean;\n    propWhFormSavedEnabled?: boolean;\n    propWhFormSavedHidden?: boolean;\n    //TODO And how does this differ from propWhFormSavedRequired?\n    propWhFormInitialRequired?: boolean;\n    propWhFormCurrentEnabled?: boolean;\n    propWhFormCurrentRequired?: boolean;\n    propWhFormCurrentVisible?: boolean;\n    //TODO It's suspicious that both propWhFormCurrent... and propWhNodeCurrent... exist\n    propWhNodeCurrentEnabled?: boolean;\n    propWhNodeCurrentRequired?: boolean;\n    propWhNodeCurrentHidden?: boolean;\n    propWhFormlineCurrentVisible?: boolean;\n    propWhValidationSuggestion?: FormFrontendMessage | null;\n    propWhCleanupFunction?: () => void;\n    /** @deprecated Use `getFormHandler` or `getFormData` from `@webhare/forms` to access the form's API */\n    propWhFormhandler?: FormBase<object>;\n    whFormsApiChecker?: () => Promise<void> | void;\n    whUseFormGetValue?: boolean;\n    whValidationPolyfilled?: boolean;\n    __didPlaceholderWarning?: boolean;\n  }\n\n  interface GlobalEventHandlersEventMap {\n    \"wh:form-enable\": CustomEvent<{ enabled: boolean }>;\n    \"wh:form-require\": CustomEvent<{ required: boolean }>;\n    \"wh:form-getvalue\": CustomEvent<{ deferred: PromiseWithResolvers<unknown> }>;\n    \"wh:form-setfielderror\": CustomEvent<SetFieldErrorData>; //TODO can we phase this out? it's a too deep integration\n    \"wh:form-configure\": CustomEvent<FormConfiguration>;\n    \"wh:form-pagechange\": CustomEvent<{\n      formHandler: FormBase<object>;\n      /** TODO Add numPages and currentPage, but we'd need to figure out how to properly account for Captcha pages (you don't want either numPages or currentPage to count that one)\n      numPages: number;\n      currentPage: number;\n      */\n    }>;\n    \"wh:form-preparesubmit\": CustomEvent<{ extrasubmit: Record<string, unknown> }>;\n    \"wh:form-response\": CustomEvent<FormSubmitResult>;\n    \"wh:form-submitted\": CustomEvent<FormSubmitDetails>;\n  }\n}\n\ntype ExtraData = unknown;\n\ntype FormControlDescription = {\n  name: string;\n  multi: false;\n  node: HTMLElement;\n} | {\n  name: string;\n  multi: true;\n  nodes: HTMLInputElement[];\n};\n\nexport type FormResultValue = Record<string, unknown>;\n\n/** The result returned to onSubmitSuccess */\nexport type FormSubmitEmbeddedResult<UserResult = { [key: string]: unknown }> = UserResult & {\n  //webtool submit additions. TODO a future API shouldn't mix these at the same level but allow them in the FormSubmitResult\n  submittype?: string;\n  richvalues?: RichValues;\n  resultsguid?: string;\n  submitinstruction?: NavigateInstruction;\n};\n\nexport interface FormSubmitMessage {\n  name: string;\n  message: string;\n  metadata: unknown;\n}\n\nexport interface FormSubmitResult {\n  success: boolean;\n  //TODO a next form iteration should not mix all these additional props into the form user's 'result'\n  result: FormSubmitEmbeddedResult;\n  errors: FormSubmitMessage[];\n  warnings: FormSubmitMessage[];\n  messages: RPCFormMessage[];\n}\n\ntype RichValues = Array<{ field: string; value: string }>;\n\nexport interface FieldErrorOptions {\n  serverside: boolean;\n  reportimmediately: boolean;\n  metadata?: unknown;\n}\n\ntype LimitSet = undefined | HTMLElement | HTMLElement[];\n\ninterface ValidationOptions {\n  // focusfailed Focus the first invalid element (defaults to true)\n  focusfailed?: boolean;\n  iffailedbefore?: boolean;\n}\n\ninterface FormValidationResult {\n  /// True if the fields successfuly validated\n  valid: boolean;\n  failed: HTMLElement[];\n  firstfailed: HTMLElement | null;\n}\n\ninterface ValidationQueueElement {\n  limitset?: LimitSet;\n  options?: ValidationOptions;\n  defer: PromiseWithResolvers<FormValidationResult>;\n}\n\ninterface PageState {\n  pages: HTMLElement[];\n  curpage: number;\n}\n\nlet delayvalidation = false, validationpendingfor: EventTarget | null = null;\nlet didGlobalHandlers: true | undefined;\n\n/** Convert linefeeds to BR tags */\nfunction lineFeedsToBreaks(text: string): DocumentFragment {\n  const frag = new DocumentFragment;\n  for (const part of text.split(/\\r?\\n/)) {\n    if (frag.childNodes.length)\n      frag.appendChild(document.createElement(\"br\"));\n    frag.append(part);\n  }\n  return frag;\n}\n\nfunction getPageIdx(state: PageState, page: number | HTMLElement) {\n  if (typeof page === 'number') {\n    if (page < 0 || page >= state.pages.length)\n      throw new Error(`Cannot navigate to nonexisting page #${page}`);\n    return page;\n  }\n\n  const idx = state.pages.indexOf(page);\n  if (idx === -1) {\n    console.error(`Cannot find page by element`, page);\n    throw new Error(`Cannot find page`);\n  }\n\n  return idx;\n}\n\nfunction getErrorFields(validationresult: FormValidationResult) {\n  return validationresult.failed.map(field => getFieldName(field) || field.dataset.whFormGroupFor || \"?\")\n    .sort()\n    .filter((value, index, self) => self.indexOf(value) === index) //unique filter\n    .join(\" \");\n}\nfunction hasEverFailed(field: HTMLElement) {\n  if (field.matches(\"input[type=radio],input[type=checkbox]\")) //these are handled by their group, so do the failed check there\n    return field.closest(\".wh-form__fieldgroup\")?.classList.contains('wh-form__field--everfailed');\n\n  return field.classList.contains('wh-form__field--everfailed');\n}\nfunction doValidation(field: EventTarget | null, iffailedbefore: boolean) {\n  if (iffailedbefore || validationpendingfor)\n    releasePendingValidations(); //release any earlier validation. this also cancels 'delayvalidation' but better safe than sorry if we double-run here\n\n  if (delayvalidation) { //Can't be \"iffailedbefore\" as that would have been cleared above\n    if (debugFlags.fhv)\n      console.log(\"[fhv] doValidation: validations are delayed. now pending: \", field);\n    validationpendingfor = field;\n    return;\n  }\n\n  const form = (field as HTMLElement).closest?.('form');\n  if (!form || !form.propWhFormhandler)\n    return;\n\n  const formhandler = form.propWhFormhandler;\n  formhandler.validate([field as HTMLElement], { focusfailed: false, iffailedbefore: iffailedbefore });\n}\n\n\nfunction doDelayValidation() {\n  if (delayvalidation)\n    releasePendingValidations();\n\n  delayvalidation = true;\n}\n\nfunction releasePendingValidations() {\n  if (!delayvalidation)\n    return;\n\n  delayvalidation = false;\n\n  if (validationpendingfor) {\n    const tovalidate = validationpendingfor;\n    if (debugFlags.fhv)\n      console.log(\"[fhv] releasePendingValidations: \", tovalidate);\n    validationpendingfor = null;\n    doValidation(tovalidate, false);\n  }\n}\n\n/* Browser extensions such as 1Password interfere with the event model and may\n   cause focusout to not fire for email and password fields. They don't seem\n   to break focusin so we'll watch focusin to detect missed focusout events */\nlet lastfocusout: EventTarget | null = null;\nfunction handleFocusOutEvent(event: FocusEvent) {\n  lastfocusout = event.target;\n  doValidation(event.target, false);\n}\nfunction handleFocusInEvent(event: FocusEvent) {\n  if (event.relatedTarget && lastfocusout !== event.relatedTarget)\n    doValidation(event.relatedTarget, false);\n}\n\nfunction handleValidateAfterEvent(event: Event) {\n  doValidation(event.target, true);\n}\n\nexport default class FormBase<DataShape extends object = Record<string, unknown>> extends FormFieldMap<DataShape> {\n  /** @deprecated Use node.elements if you want a true HTMLFormControlsCollection, use getElementByName since WH5.4+ for properly typed elements */\n  readonly elements: HTMLFormControlsCollection;\n  private _formsessionid = generateRandomId();\n  private _firstinteraction: number | undefined;\n  protected _submitstart: number | undefined;\n  private validationqueue = new Array<ValidationQueueElement>;\n  private _submitter: SubmitSelectorType | null = null;\n  private _submittimeout: NodeJS.Timeout | undefined;\n  /** Is the form currently interactive? Used to ignore changes done by code/setFieldValue */\n  private isInteractive = true;\n  /** Did we warn about old style form controls? */\n  private didLegacyWarning = false;\n  /** Are we currently in the _submit handler? (prevent duplicate submit attemps while eg. inside onBeforeSubmit) */\n  private inSubmit = false;\n  /** Where should the exitButton navigate to? */\n  private exitButtonNavigateTo?: NavigateInstruction;\n  /** Name of last focused element */\n  #lastFocused = \"\";\n\n  readonly data = new Proxy<DataShape>({} as DataShape, new FieldMapDataProxy(this));\n\n  constructor(public readonly node: HTMLFormElement) {\n    if (node.nodeName !== 'FORM')\n      throw new Error(\"Specified node is not a <form>\"); //we want our clients to be able to assume 'this.node.elements' works\n\n    super(\"\", getFormElementCandidates(node, ''));\n\n    this.elements = node.elements;\n    if (this.node.propWhFormhandler)\n      throw new Error(\"Specified node already has an attached form handler\");\n    this.node.propWhFormhandler = this;\n\n    //TODO Can we scope these handlers to the form ? Or register only once needed?\n    if (!didGlobalHandlers) {\n      didGlobalHandlers = true;\n      window.addEventListener(\"mouseup\", releasePendingValidations, true);\n      window.addEventListener(\"focusin\", handleFocusInEvent, true);\n    }\n\n    //Implement webhare fields extensions, eg 'now' for date fields or 'enablecomponents'\n    webharefields.setup(this.node);\n    //Implement page navigation\n    addDocEventListener(this.node, \"click\", evt => this._checkClick(evt));\n    addDocEventListener(this.node, \"dompack:takefocus\", evt => this._onTakeFocus(evt));\n    addDocEventListener(this.node, \"input\", evt => this._onInputChange(), { capture: true });\n    addDocEventListener(this.node, \"change\", evt => this._onInputChange(), { capture: true });\n    addDocEventListener(this.node, 'submit', evt => this._submit(evt, null));\n    addDocEventListener(this.node, 'wh:form-dosubmit', evt => { throw new Error(`wh:form-dosubmit is no longer supported`); });\n    addDocEventListener(this.node, \"wh:form-setfielderror\", evt => this._doSetFieldError(evt));\n    addDocEventListener(this.node, \"mousedown\", doDelayValidation);\n    addDocEventListener(this.node, \"focusout\", handleFocusOutEvent, { capture: true });\n    addDocEventListener(this.node, \"input\", handleValidateAfterEvent, { capture: true });\n    addDocEventListener(this.node, \"change\", handleValidateAfterEvent, { capture: true });\n    addDocEventListener(this.node, \"focusin\", this.#recordLastFocus, { capture: true });\n    this.node.noValidate = true;\n\n    this._rewriteEnableOn();\n    this._updateConditions(true); //Update required etc handlers\n    this._applyPrefills();\n\n    //Update page navigation\n    const pagestate = this._getPageState();\n    this._updatePageVisibility(pagestate.pages, 0);\n    this._updatePageNavigation();\n  }\n\n  static getForNode<DataShape extends object = Record<string, unknown>>(node: HTMLElement): FormBase<DataShape> | null {\n    return (node.propWhFormhandler as FormBase<DataShape>) || null;\n  }\n\n  ///like namedItem but improves on the types returned. does *not* lookup by data-wh-form-name!\n  getElementByName(name: string): FormControlElement | ConstrainedRadioNodeList | null {\n    return this.node.elements.namedItem(name) as FormControlElement | ConstrainedRadioNodeList | null;\n  }\n\n  /** Get language for this form */\n  getLangCode() {\n    return this.node.closest<HTMLElement>('[lang]')?.lang ?? 'en';\n  }\n\n  #recordLastFocus = (evt: dompack.DocEvent<FocusEvent>) => {\n    if (this.node.contains(evt.target)) {\n      const name = getFieldName(evt.target) || evt.target.dataset.whFormGroupFor;\n      if (name)\n        this.#lastFocused = name;\n    }\n  };\n\n  #onUnload = () => {\n    this.sendFormEvent({\n      event: 'abandoned',\n      lastfocused: this.#lastFocused,\n      pagenum: this.getCurrentPageNumber()\n    });\n  };\n\n  protected __formStarted() {\n  }\n\n  protected sendFormEvent(event?: FormAnalyticsSubEvents) {\n    const now = Date.now();\n    if (event?.event === 'submitted')\n      removeEventListener(\"pagehide\", this.#onUnload);\n\n    if (!this._firstinteraction) {   //The user hasn't interacted with the form yet\n      if (!this.isInteractive) { //ignore events triggered by code, eg a form prefill\n        if (event?.event && debugFlags.anl)\n          console.log(`[anl] Form is supressing broadcast of '${event?.event}' because it hasn't been interacted with yet`);\n        return;\n      }\n\n      //The user has interacted, start the clock!\n      this._firstinteraction = now; //set for calculation base *and* to prevent endless loops\n      this.sendFormEvent({ event: \"started\" });\n      addEventListener(\"pagehide\", this.#onUnload);\n    }\n\n    if (!event)\n      return; //we were only triggered to signal First Interaction\n    this._firstinteraction ||= now;\n\n    const pagestate = this._getPageState();\n    const eventdata: FormAnalyticsEventData = {\n      ...event,\n      id: this.node.dataset.whFormId || '',\n      session: this._formsessionid,\n      pagetitle: this._getPageTitle(pagestate.curpage),\n      pagenum: pagestate.curpage + 1,\n      time: now - this._firstinteraction,\n      objref: this.node.dataset.whFormObjref || ''\n    };\n\n    if (this._submitstart) //is set during a pending submission\n      eventdata.waittime = Date.now() - this._submitstart;\n\n    dompack.dispatchCustomEvent(this.node, \"wh:form-analytics\", { bubbles: true, cancelable: false, detail: eventdata });\n  }\n\n  _rewriteEnableOn() { //ADDME move this to webhare server\n    // EnablingComponents may set data-wh-form-enable. input(radio/checkbox) and option qualify\n    type EnablingComponent = HTMLInputElement | HTMLOptionElement;\n\n    // This is the initialization, check the enable components for all elements within the form\n    for (const control of dompack.qSA<EnablingComponent>(this.node, \"*[data-wh-form-enable]\"))\n      for (const element of control.dataset.whFormEnable!.split(\" \")) {\n        const target = this.getElementByName(element);\n        if (target && target instanceof HTMLElement) {\n          const name = (control instanceof HTMLOptionElement ? control.closest<HTMLSelectElement>(\"select\") : control)?.name;\n          if (!name) //duplicated node?\n            continue;\n\n          let ourcondition: FormCondition = { field: name, matchtype: \"IN\", value: control.value };\n          if (target.dataset.whFormEnabledIf) //append to existing criterium\n            ourcondition = { conditions: [parseCondition(target.dataset.whFormEnabledIf), ourcondition], matchtype: \"AND\" };\n          target.dataset.whFormEnabledIf = JSON.stringify({ c: ourcondition });\n        }\n      }\n  }\n\n  _applyPrefills() {\n    //Apply prefills. Set in field order, so controls-enabling-controls things will generally work\n    const searchparams = new URL(location.href).searchParams;\n    for (const field of this._queryAllFields()) {\n      const allvalues = searchparams.getAll(field.name);\n      if (!allvalues.length)\n        continue;\n\n      if (field.multi && field.nodes[0].type === 'checkbox') {\n        for (const node of field.nodes) {\n          const shouldbechecked = allvalues.includes(node.value);\n          if (shouldbechecked !== node.checked) //NOTE: used to read 'field.checked' which doesn't exist so this if() would always evaluate to true\n            this.setFieldValue(node, shouldbechecked);\n        }\n      } else if (field.multi) { //implies radio\n        const tocheck = field.nodes.filter(_ => _.value === allvalues[allvalues.length - 1])[0];\n        if (tocheck && !tocheck.checked)\n          this.setFieldValue(tocheck, true);\n        if (!tocheck)\n          field.nodes.filter(_ => _.checked).forEach(_ => this.setFieldValue(_, false));\n      } else if (field.node.matches(\"input:not([type=file]),select,textarea\")) { //Limit URL prefills to simple elements - TODO allow custom components to decide on this themselves OR *explicitly* require fields to opt-in to being prefillable\n        if (!this._isNowSettable(field.node))\n          continue;\n        this.setFieldValue(field.node, allvalues[allvalues.length - 1]); //last value wins\n      }\n    }\n  }\n\n  /**\n   * Set or update the message for the specified field\n   * @param field - node on which the validation triggered\n   * @param type - type of the message (\"error\" or \"suggestion\") - a field or group can have both an \"error\" and \"suggestion\" visible\n   * @param getError - function which returns a reference to the error node (or DocumentFragment) or a text\n   *\n   * .wh-form__field--error      - Used to indicate this element has an error\n   * .wh-form__field--suggestion - Used to indicate this element has an suggestion\n   * .wh-form__error             - The error message container\n   * .wh-form_suggestion         - The suggestion message container\n   */\n  _updateFieldGroupMessageState(field: HTMLElement, type: \"error\" | \"suggestion\", getError: (field: HTMLElement) => FormFrontendMessage | null) {\n    //Please note that _updateFieldGroupMessageState doesn't *validate* anything - it takes the current error/suggestion status and updates the DOM accordingly\n\n    /*\n    ADDME: ability to show multiple messages in case both the toplevel and a subfield have an error/suggestion.\n           Example: a checkboxgroup in which too many options are selected AND the required textfield of a selected option is empty.\n\n    ADDME: how should an error message reference a required nested textfield?\n\n    ADDME: Support progressive enhancements such as splitdatetime which use a native form element\n           to store the value. (it's probably confusing that aria-described by ends up on an\n           element which needs receives focus and cannot be used to influence/fix the value).\n           (such as the splitdatetime)\n\n           Suggestion for possible solution:\n           - have the progressive enchancement code add an attribute to the native form element\n             with the ID of the (group)element.\n    */\n    const fieldgroup = field.closest<HTMLElement>(\".wh-form__fieldgroup\");\n    //console.log(\"_updateFieldGroupMessageState\", field, fieldgroup);\n    if (!fieldgroup)\n      return;\n\n    /* Within the group this field belongs to we lookup the first node we can find which is marked as having the\n       type of message we want (\"error\" or \"suggestion\").\n       First we'll see if the fieldgroup wants to report something (radio & checkboxes handle their errors at the group level)\n       otherwise whe'll look for the first node which has a message.\n    */\n    const field_with_message = fieldgroup.classList.contains(\"wh-form__field--\" + type) ? fieldgroup : fieldgroup.querySelector<HTMLElement>(\".wh-form__field--\" + type);\n    //Do not pick up errors from deeper groups (array rows)\n    const error = (field_with_message && field_with_message.closest(\".wh-form__fieldgroup\") === fieldgroup ? getError(field_with_message) : null) || null;\n\n    // Now mark the whole .wh-form__fieldgroup as having an error/suggestion\n    fieldgroup.classList.toggle(\"wh-form__fieldgroup--\" + type, Boolean(error));\n\n    // Lookup the error message from the field metadata\n    if (error) { //mark the field has having failed at one point. we will now switch to faster updating error state\n      if (!field.classList.contains('wh-form__field--everfailed')) {\n        if (debugFlags.fhv)\n          console.log('[fhv] marking as everfailed', field, 'because of error', error);\n        field.classList.add('wh-form__field--everfailed');\n      }\n    }\n\n    // Determine the contextnode to set ARIA attributes on\n\n    // ADDME: before looking up a group, check if there an attribute specifying\n    //        another element with role=\"group\" handled the input.\n\n    // Find the first role=\"group\" we can find\n    // (ineither the .wh-form__subfield or .wh-form__field)\n    const potentialgroupnode = field.closest<HTMLElement>(\"[role=group],.wh-form__subfield,wh-form__fieldgroup\");\n    const group = potentialgroupnode?.role === \"group\" ? potentialgroupnode : null;\n    const contextnode = group ?? field;\n\n    let messageid = \"\";\n    let messagenode = fieldgroup.querySelector(\".wh-form__\" + type); //either wh-form__error or wh-form__suggestion\n\n    // Create a container for the suggestion or error\n    if (messagenode) {\n      messageid = messagenode.id; // reuse the existing messagenode\n    } else {\n      if (!error)\n        return; //nothing to do\n\n      // Generate a temporary id for the message which we can use in\n      // the aria-describedby to point to the message.\n      const random = Math.floor((1 + Math.random()) * 0x10000000).toString(16);\n      messageid = \"whform-msg-\" + random; // `${fieldname}-${random}`;\n\n      const suggestionholder = field.closest('.wh-form__fields') || fieldgroup.querySelector('.wh-form__fields') || fieldgroup;\n      messagenode = dompack.create(\"div\", { className: \"wh-form__\" + type }); // add a wh-form__error or wh-form__suggestion message container\n      messagenode.id = messageid; // id to reference to in the aria-describedby\n      suggestionholder.appendChild(messagenode);\n    }\n\n    if (error) { // Do we show a message?\n      messagenode.replaceChildren(typeof error === \"string\" ? lineFeedsToBreaks(error) : error);\n      this._addDescribedBy(contextnode, messageid);\n\n      if (type === \"error\")\n        contextnode.setAttribute(\"aria-invalid\", \"true\");\n    } else {\n      messagenode.replaceChildren(); // remove previous errors/suggestions texts from the errornode\n      this._removeDescribedBy(contextnode, messageid);\n      contextnode.removeAttribute(\"aria-invalid\");\n    }\n\n  }\n\n  // add the specified id of the message element to the list of elements in aria-describedby\n  _addDescribedBy(contextnode: HTMLElement, messageid: string) {\n    const describedby = contextnode.getAttribute(\"aria-describedby\") ?? \"\";\n    const describedby_fields = describedby !== \"\" ? describedby.split(\" \") : [];\n\n    if (describedby_fields.indexOf(messageid) === -1) {\n\n      describedby_fields.push(messageid);\n      contextnode.setAttribute(\"aria-describedby\", describedby_fields.join(\" \"));\n    }\n  }\n\n  // remove the specified id of the message element from the list of elements in aria-describedby\n  _removeDescribedBy(contextnode: HTMLElement, messageid: string) {\n    const describedby = contextnode.getAttribute(\"aria-describedby\") ?? \"\";\n    const describedby_fields = describedby !== \"\" ? describedby.split(\" \") : [];\n\n    for (let idx = 0; idx < describedby_fields.length; idx++) {\n      if (describedby_fields[idx] === messageid) {\n        describedby_fields.splice(idx, 1); // remove that item\n        break;\n      }\n    }\n\n    if (describedby_fields.length > 0)\n      contextnode.setAttribute(\"aria-describedby\", describedby_fields.join(\" \"));\n    else\n      contextnode.removeAttribute(\"aria-describedby\");\n  }\n\n  _updateFieldGroupErrorState(field: HTMLElement) {\n    this._updateFieldGroupMessageState(field, 'error', failedfield => getValidationState(failedfield).getError());\n  }\n\n  _updateFieldGroupSuggestionState(field: HTMLElement) {\n    this._updateFieldGroupMessageState(field, 'suggestion', failedfield => failedfield.propWhValidationSuggestion || '');\n  }\n\n  _doSetFieldError(evt: DocEvent<CustomEvent<SetFieldErrorData>>) {\n    //FIXME properly handle multiple fields in this group reporting errors\n    dompack.stop(evt);\n\n\n    this._reportFieldValidity(evt.target);\n  }\n\n  /** @returns false on error */\n  _reportFieldValidity(node: HTMLElement): boolean {\n    const state = getValidationState(node).getState();\n    node.classList.toggle(\"wh-form__field--error\", Boolean(state?.error));\n    node.classList.toggle(\"wh-form__field--suggestion\", Boolean(state?.suggested));\n\n    this._updateFieldGroupErrorState(node);\n    this._updateFieldGroupSuggestionState(node);\n    return !(state && \"error\" in state);\n  }\n\n  //validate and submit. normal submissions should use this function, directly calling submit() skips validation and busy locking\n  async validateAndSubmit(extradata: ExtraData) {\n    await this._submit(null, extradata);\n  }\n\n  /** Override beforeSubmit to have a last chance to block/confirm actual form submission\n   * @returns true to continue submitting\n  */\n  beforeSubmit(extradata: ExtraData): boolean | Promise<boolean> {\n    return true;\n  }\n\n  async _submit(evt: SubmitEvent | null, extradata: ExtraData) {\n    if (this.node.classList.contains('wh-form--submitting') || this.inSubmit) { //already submitting\n      evt?.preventDefault(); //avoid 'No RPC handler installed' noise during 429 errors\n      return;\n    }\n\n    //A form element's default button is the first submit button in tree order whose form owner is that form element.\n    const submitter = this._submitter || this.node.querySelector(submitselector);\n    this._submitter = null;\n\n    if (debugFlags.fhv)\n      console.log('[fhv] received submit event, submitter:', submitter);\n\n    let tempbutton = null;\n    if (submitter) { //temporarily add a hidden field representing the selected button\n      tempbutton = document.createElement('input');\n      tempbutton.name = submitter.name;\n      tempbutton.value = submitter.value;\n      tempbutton.type = \"hidden\";\n      this.node.appendChild(tempbutton);\n    }\n\n    try {\n      this.inSubmit = true;\n      const beforeResult = this.beforeSubmit(extradata);\n      if (!beforeResult || (isPromise(beforeResult) && !await beforeResult))\n        return;\n\n      /* DEPRECATED - Switch to onBeforeSubmit in 5.7+ */\n      if (!dompack.dispatchCustomEvent(this.node, 'wh:form-beforesubmit', { bubbles: true, cancelable: true })) { //allow parsley to hook into us\n        console.error(\"The use of wh:form-beforesubmit is deprecated and will be removed in a future version. Use onBeforeSubmit instead\");\n        return;\n      }\n\n      await this._doSubmit(evt, extradata);\n    } finally {\n      tempbutton?.remove();\n      this.inSubmit = false;\n    }\n  }\n\n  private _shouldValidateField(el: HTMLElement) {\n    //TODO maybe we can get rid of the data attributes by checking for explicit symbols like whFormsApiChecker\n    return (el.whFormsApiChecker || el.matches(`${queryFormFieldLike},*[data-wh-form-name],*[data-wh-form-custom-validator`)) &&\n      this._isPartOfForm(el);\n  }\n\n  _getFieldsToValidate(startingpoint?: HTMLElement) {\n    return dompack.qSA<HTMLElement>(startingpoint ?? this.node, \"*\").filter(el => this._shouldValidateField(el));\n  }\n\n  //reset any serverside generated errors (generally done when preparing a new submission)\n  resetServerSideErrors() {\n    for (const field of this._getFieldsToValidate()) {\n      const state = getValidationState(field);\n      if (state?.explicit?.serverside && field.propWhCleanupFunction)\n        field.propWhCleanupFunction();\n    }\n  }\n\n  async _doSubmit(evt: SubmitEvent | null, extradata: ExtraData) {\n    if (evt)\n      evt.preventDefault();\n\n    const lock = dompack.flagUIBusy({ modal: true });\n    this._submitstart = Date.now();\n    this._submittimeout = setTimeout(() => this._submitHasTimedOut(), 5000);\n    this.node.classList.add('wh-form--submitting');\n\n    try {\n      this.resetServerSideErrors();\n\n      const validationresult = await this.validate();\n      if (validationresult.valid) {\n        const result = await this.submit(extradata);\n        if (result.result && result.result.submittype && result.result.submittype !== this._getVariableValueForConditions(\"formsubmittype\")) {\n          this.node.setAttribute(\"data-wh-form-var-formsubmittype\", result.result.submittype);\n          this._updateConditions(false);\n        }\n      } else {\n        this.sendFormEvent({ event: \"failed\", errorfields: getErrorFields(validationresult), errorsource: 'client' });\n      }\n    } finally {\n      lock.release();\n      this.node.classList.remove('wh-form--submitting');\n      if (this._submittimeout) {\n        clearTimeout(this._submittimeout);\n        this._submittimeout = undefined;\n      }\n      this._submitstart = undefined;\n    }\n  }\n\n  _submitHasTimedOut() { //TODO extend this to (background) RPCs too, and make waitfor more specific. also check whether we're stuck on client or server side\n    this.sendFormEvent({ event: \"slow\", waitfor: \"submit\" });\n  }\n\n  //default submission function. eg. RPC will override this\n  async submit(extradata?: ExtraData): Promise<{ result?: FormSubmitEmbeddedResult }> {\n    this.node.submit();\n    return {};\n  }\n\n  _onTakeFocus(evt: DocEvent<TakeFocusEvent>) {\n    const containingpage = evt.target.closest('.wh-form__page');\n    if (containingpage && containingpage.classList.contains('wh-form__page--hidden')) {\n      //make sure the page containing the errored component is visible\n      const pagenum = dompack.qSA(this.node, '.wh-form__page').findIndex(page => page === containingpage);\n      if (pagenum >= 0)\n        this.gotoPage(pagenum);\n    }\n  }\n\n  _checkClick(evt: DocEvent<MouseEvent>) {\n    const actionnode = evt.target?.closest<HTMLElement>(\"*[data-wh-form-action]\");\n    if (!actionnode) {\n      const submitter = evt.target.closest<SubmitSelectorType>(submitselector);\n      if (submitter?.form === this.node) { //if we found the submit buton AND it's for *this* form. don't intercept otherwise\n        if (!this.node.classList.contains('wh-form--allowsubmit')) { //we're not allowed to submit yet (not on a final page)\n          dompack.stop(evt);\n          if (this.node.classList.contains('wh-form--allownext'))  //but we can convert your action to a NextPage! which is likely what you intended\n            this.executeFormAction('next');\n          return;\n        }\n\n        this._submitter = submitter; //store as submitter in case a submit event actually occurs\n        setTimeout(() => this._submitter = null); //but clear it as soon as event processing ends\n      }\n      return;\n    }\n\n    dompack.stop(evt);\n    this.executeFormAction(actionnode.dataset.whFormAction!);\n  }\n\n  private _getPageState(): PageState {\n    const pages = dompack.qSA<HTMLElement>(this.node, '.wh-form__page');\n    const curpage = pages.findIndex(page => !page.classList.contains('wh-form__page--hidden'));\n    return { pages, curpage };\n  }\n\n  _updatePageVisibility(pagelist: HTMLElement[], currentpage: number) {\n    pagelist.forEach((page, idx) => {\n      page.classList.toggle('wh-form__page--hidden', idx !== currentpage);\n      page.classList.toggle('wh-form__page--visible', idx === currentpage);\n    });\n  }\n\n  ///Get the currently opened page (page node)\n  getCurrentPage() {\n    const state = this._getPageState();\n    return state.curpage >= 0 ? state.pages[state.curpage] : null;\n  }\n\n  /** Position the specified element's group or the form itself into view, using `.wh-anchor` nodes to correct for fixed headers\n      @param scrollto -  Element to position into view. If not set, the form it scrolled into view */\n  scrollIntoView(scrollto?: HTMLElement) {\n    const origscrollto = scrollto;\n    scrollto = (scrollto ? scrollto.closest<HTMLElement>('.wh-form__fieldgroup') : undefined) || this.node;\n    scrollto = scrollto.querySelector<HTMLElement>('.wh-anchor') || scrollto;\n    if (origscrollto && scrollto !== origscrollto && debugFlags.fhv)\n      console.log('[fhv] Modified scroll target from ', origscrollto, ' to anchor ', scrollto);\n    else if (debugFlags.fhv)\n      console.log('[fhv] Scroll to ', scrollto);\n\n    scrollto.scrollIntoView();\n  }\n\n  /** Get the current page number\n      @returns 0-based index of page to jump to */\n  getCurrentPageNumber() {\n    return this._getPageState().curpage;\n  }\n\n  /** Goto a specific page\n      @param page - 0-based index of page or the HTML element of the page to jump to */\n  async gotoPage(page: number | HTMLElement, { __isSubmit = false } = {}): Promise<void> {\n    const state = this._getPageState();\n    const pageidx = getPageIdx(state, page);\n    if (state.curpage === pageidx)\n      return;\n\n    const goingforward = pageidx > state.curpage;\n    if (!__isSubmit)\n      this.sendFormEvent({\n        event: goingforward ? __isSubmit ? 'submitted' : 'nextpage' : 'previouspage',\n        targetpagenum: pageidx + 1,\n        targetpagetitle: this._getPageTitle(pageidx)\n      });\n\n    this._updatePageVisibility(state.pages, pageidx);\n    if (goingforward) //only makes sense to update if we're making progress\n      merge.run(state.pages[pageidx], { form: await this.getFormValue() });\n\n    this._updatePageNavigation();\n\n    //scroll back up\n    this.scrollIntoView();\n\n    /* tell the page it's now visible - note that we specifically don't fire this on init, as it's very likely\n       users would 'miss' the event anyway - registerHandler usually executes faster than your wh:form-pagechange\n       registrations, if you wrapped those in a dompack.register */\n    dompack.dispatchCustomEvent(state.pages[pageidx], \"wh:form-pagechange\", { bubbles: true, cancelable: false, detail: { formHandler: this } });\n  }\n\n  private _getDestinationPage(pagestate: PageState, direction: number) {\n    let pagenum = pagestate.curpage + direction;\n    //TODO \"captcha\" should no longer exist since WH5.9 - unless there are still some static published forms around, so keep skipping them for a while\n    while (pagenum >= 0 && pagenum < pagestate.pages.length && (pagestate.pages[pagenum].propWhFormCurrentVisible === false || pagestate.pages[pagenum].dataset.whFormPagerole === \"captcha\"))\n      pagenum = pagenum + direction;\n    if (pagenum < 0 || pagenum >= pagestate.pages.length)\n      return -1;\n    return pagenum;\n  }\n\n  _getPageTitle(pagenum: number) {\n    const pagenode = this._getPageState().pages[pagenum];\n    if (!pagenode)\n      return \"\";\n    return pagenode.dataset.whFormPagetitle || (\"#\" + (pagenum + 1));\n  }\n\n  async executeFormAction(action: string) {\n    switch (action) {\n      case 'previous':\n        {\n          if (this.node.classList.contains('wh-form--allowprevious')) {\n            const pagestate = this._getPageState();\n            if (pagestate.curpage > 0)\n              this.gotoPage(this._getDestinationPage(pagestate, -1));\n            else if (this.node.dataset.whFormBacklink)\n              navigateTo({ type: \"redirect\", url: this.node.dataset.whFormBacklink });\n          }\n          return;\n        }\n      case 'next':\n        {\n          const pagestate = this._getPageState();\n          if (this.node.classList.contains('wh-form--allownext')) {\n            this.resetServerSideErrors();\n\n            const validationstatus = await this.validate(pagestate.pages[pagestate.curpage]);\n            if (validationstatus.valid) {\n              this.gotoPage(this._getDestinationPage(pagestate, +1));\n            } else {\n              this.sendFormEvent({ event: \"failed\", errorfields: getErrorFields(validationstatus), errorsource: 'nextpage' });\n            }\n          }\n          return;\n        }\n      case 'exit': {\n        if (!this.exitButtonNavigateTo)\n          throw new Error(\"No exit navigation target set for this form\");\n\n        navigateTo(this.exitButtonNavigateTo);\n        return;\n      }\n      default: {\n        console.error(`Unknown form action '${action}'`);\n      }\n    }\n  }\n\n  async refreshConditions() {\n    await this._updateConditions(false);\n  }\n\n  _onInputChange() {\n    this.sendFormEvent(); //only trigger implicit _firstinteraction event\n    this._updateConditions(false);\n  }\n\n  async _updateConditions(isinit: boolean) {\n    // Check pages visibility\n    const hiddenPages = [];\n    const mergeNodes = [];\n    let anychanges = false;\n\n    for (const formpage of dompack.qSA(this.node, \".wh-form__page\")) {\n      let visible = true;\n      if (formpage.dataset.whFormVisibleIf) {\n        visible = this._matchesCondition(formpage.dataset.whFormVisibleIf);\n        if (!visible)\n          hiddenPages.push(formpage); // We don't have to check fields on this page any further\n\n        if (visible !== formpage.propWhFormCurrentVisible) {\n          anychanges = true;\n          formpage.propWhFormCurrentVisible = visible;\n          mergeNodes.push(formpage);\n        }\n      }\n    }\n    if (anychanges)\n      this._updatePageNavigation();\n\n    const tovalidate = new Array<HTMLElement>;\n    const hiddengroups = [], enabledgroups = [], requiredgroups = [];\n    for (const formgroup of dompack.qSA(this.node, \".wh-form__fieldgroup\")) {\n      const groupPage = formgroup.closest<HTMLElement>(\".wh-form__page\");\n      const visible = (!groupPage || !hiddenPages.includes(groupPage)) && this._matchesCondition(formgroup.dataset.whFormVisibleIf);\n      if (!visible)\n        hiddengroups.push(formgroup);\n\n      const enabled = visible\n        && this._matchesCondition(formgroup.dataset.whFormEnabledIf);\n\n      if (enabled)\n        enabledgroups.push(formgroup);\n\n      //load initial status?\n      if (formgroup.propWhFormInitialRequired === undefined)\n        formgroup.propWhFormInitialRequired = formgroup.classList.contains(\"wh-form__fieldgroup--required\");\n\n      const required = enabled\n        && (formgroup.dataset.whFormRequiredIf ? this._matchesCondition(formgroup.dataset.whFormRequiredIf) : formgroup.propWhFormInitialRequired);\n\n      if (required)\n        requiredgroups.push(formgroup);\n\n      if (visible !== formgroup.propWhFormCurrentVisible // These are initially undefined, so this code will always run first time\n        || enabled !== formgroup.propWhFormCurrentEnabled\n        || required !== formgroup.propWhFormCurrentRequired) {\n        formgroup.propWhFormCurrentVisible = visible;\n        formgroup.propWhFormCurrentEnabled = enabled;\n        formgroup.propWhFormCurrentRequired = required;\n\n        formgroup.classList.toggle(\"wh-form__fieldgroup--disabled\", !enabled);\n        formgroup.classList.toggle(\"wh-form__fieldgroup--hidden\", !visible);\n        formgroup.classList.toggle(\"wh-form__fieldgroup--required\", required);\n\n        mergeNodes.push(formgroup);\n      }\n    }\n\n    for (const formline of dompack.qSA(this.node, \".wh-form__fieldline\")) {\n      const formgroup = formline.closest<HTMLElement>(\".wh-form__fieldgroup\");\n      if (!formgroup)\n        continue;\n      const visible = !hiddengroups.includes(formgroup) && this._matchesCondition(formline.dataset.whFormVisibleIf);\n      const enabled = visible && enabledgroups.includes(formgroup) && this._matchesCondition(formline.dataset.whFormEnabledIf);\n      const required = enabled && requiredgroups.includes(formgroup);\n\n      if (visible !== formline.propWhFormlineCurrentVisible) {  // These are initially undefined, so this code will always run first time\n        formline.propWhFormlineCurrentVisible = visible;\n        formline.classList.toggle(\"wh-form__fieldline--hidden\", !visible);\n      }\n\n      // Look for nodes that are explicit enable state (enablee/require) listeners, or that need to do so because they're real input controls\n      const inputtargets = dompack.qSA(formline, `${queryFormFieldLike},[data-wh-form-state-listener='true']`);\n\n      for (const node of inputtargets) {\n        //Record initial states\n        if (node.propWhFormSavedEnabled === undefined)\n          node.propWhFormSavedEnabled = \"disabled\" in node ? !node.disabled : !(\"whFormDisabled\" in node.dataset);\n\n        if (node.propWhFormSavedRequired === undefined)\n          node.propWhFormSavedRequired = Boolean(\"required\" in node && node.required);\n\n        // The field is enabled if all of these are matched:\n        // - we're setting it to enabled now\n        // - it hasn't been disabled explicitly (set initially on the node)\n        // - it hasn't been disabled through enablecomponents\n        const node_enabled = enabled && node.propWhFormSavedEnabled && this._matchesCondition(node.dataset.whFormEnabledIf);\n\n        if (node_enabled !== node.propWhNodeCurrentEnabled) {\n          node.propWhNodeCurrentEnabled = node_enabled;\n\n          // Give the formgroup a chance to handle it\n          if (dompack.dispatchCustomEvent(node, \"wh:form-enable\", { bubbles: true, cancelable: true, detail: { enabled: node_enabled } })) {\n            // Not cancelled, so run our default handler\n            if (isFormFieldLike(node)) //For true html5 inputs we'll use the native attributes. formstatelisteners: we use data attributes\n              node.disabled = !node_enabled;\n            else if (node_enabled)\n              node.removeAttribute(\"data-wh-form-disabled\");\n            else\n              node.setAttribute(\"data-wh-form-disabled\", \"\");\n          }\n\n          if (!isinit && !node_enabled && !tovalidate.includes(node))\n            tovalidate.push(node); // to clear errors for this disabled field\n        }\n\n        const node_required = (node.propWhFormSavedRequired || required) && node_enabled && visible;\n        if (node.propWhNodeCurrentRequired !== node_required) {\n          node.propWhNodeCurrentRequired = node_required;\n\n          // Give the formgroup a chance to handle it\n          if (dompack.dispatchCustomEvent(node, \"wh:form-require\", { bubbles: true, cancelable: true, detail: { required: node_required } })) {\n            // Not cancelled, so run our default handler\n            if (isFormFieldLike(node)) { //For true html5 inputs we'll use the native attributes. formstatelisteners: we use data attributes\n              if (!isFormControl(node) || node.type !== 'checkbox') //don't set required on checkboxes, that doesn't do what you want\n                node.required = node_required;\n            } else if (node_required)\n              node.setAttribute(\"data-wh-form-required\", \"\");\n            else\n              node.removeAttribute(\"data-wh-form-required\");\n          }\n\n          if (!isinit && !node_required && formgroup.classList.contains(\"wh-form__fieldgroup--error\") && !tovalidate.includes(node))\n            tovalidate.push(node); // to clear errors for this now optional field\n        }\n      }\n    }\n\n    for (const option of dompack.qSA<HTMLOptionElement>(this.node, \".wh-form__fieldgroup select option\")) {\n      const visible = this._matchesCondition(option.dataset.whFormVisibleIf);\n\n      //Record initial states\n      if (option.propWhFormSavedEnabled === undefined)\n        option.propWhFormSavedEnabled = !option.disabled;\n      if (option.propWhFormSavedHidden === undefined)\n        option.propWhFormSavedHidden = option.hidden;\n\n      const option_enabled = visible && option.propWhFormSavedEnabled;\n      const option_hidden = !visible || option.propWhFormSavedHidden;\n\n      if (option_enabled !== option.propWhNodeCurrentEnabled || option_hidden !== option.propWhNodeCurrentHidden) {\n        option.propWhNodeCurrentEnabled = option_enabled;\n        option.propWhNodeCurrentHidden = option_hidden;\n        option.disabled = !option_enabled;\n        option.hidden = option_hidden;\n\n        // If this option was the selected option, but is now disabled (but not the placeholder), reset the select's value\n        const selectnode = option.closest<HTMLSelectElement>(\"select\");\n        if (selectnode && option.selected && (!option_enabled || option_hidden) && option.dataset.placeholder === undefined) {\n          if (selectnode.options[0].dataset.placeholder !== undefined) { //we have a placeholder...\n            selectnode.selectedIndex = 0;\n          } else {\n            selectnode.selectedIndex = -1;\n            if (!selectnode.__didPlaceholderWarning) {\n              selectnode.__didPlaceholderWarning = true;\n              console.warn(\"This <select> lacks an explicit placeholder so we had to set selectedIndex to -1\", selectnode);\n            }\n          }\n        }\n\n        if (selectnode && !isinit && !tovalidate.includes(selectnode))\n          tovalidate.push(selectnode); // to clear errors for this option's select field\n      }\n    }\n\n    if (tovalidate.length)\n      await this.validate(tovalidate, { focusfailed: false, iffailedbefore: true });\n\n    this.fixupMergeFields(mergeNodes);\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-misused-promises -- FIXME: needs API rework\n  __scheduleUpdateConditions = wrapSerialized(() => this._updateConditions(false), { coalesce: true });\n\n  async fixupMergeFields(nodes: HTMLElement[]) {\n    // Rename the data-wh-merge attribute to data-wh-dont-merge on hidden pages and within hidden formgroups to prevent\n    // merging invisible nodes\n    // FIXME 'merge' has a filter option now - convert to that!\n    const formvalue = await this.getFormValue();\n    for (const node of nodes) {\n      if (node.propWhFormCurrentVisible) {\n        for (const mergeNode of dompack.qSA(node, '*[data-wh-dont-merge]')) {\n          mergeNode.dataset.merge = mergeNode.dataset.whDontMerge;\n          mergeNode.removeAttribute(\"data-wh-dont-merge\");\n        }\n        merge.run(node, { form: formvalue });\n      } else {\n        for (const mergeNode of dompack.qSA(node, '*[data-merge]')) {\n          mergeNode.dataset.whDontMerge = mergeNode.dataset.merge;\n          mergeNode.removeAttribute(\"data-merge\");\n        }\n      }\n    }\n  }\n\n  _matchesCondition(conditiontext: string | undefined) {\n    if (!conditiontext)\n      return true;\n\n    return this._matchesConditionRecursive(parseCondition(conditiontext));\n  }\n\n  _getConditionRawValue(fieldname: string, options?: { checkdisabled?: boolean }) {\n    if (this.node.hasAttribute(\"data-wh-form-var-\" + fieldname))\n      return this.node.getAttribute(\"data-wh-form-var-\" + fieldname);\n\n    const matchfield = this.getElementByName(fieldname);\n    if (!matchfield) {\n      console.error(`No match for conditional required field '${fieldname}'`);\n      return null;\n    }\n\n    if (isRadioNodeList(matchfield)) {\n      let currentvalue = null;\n\n      for (const field of matchfield)\n        if (((options && options.checkdisabled) || this._isNowSettable(field)) && field.checked) {\n          if (field.type !== \"checkbox\")\n            return field.value;\n\n          if (!currentvalue)\n            currentvalue = [];\n          currentvalue.push(field.value);\n        }\n      return currentvalue;\n    } else {\n      //Can we set this field?\n      if ((!options || !options.checkdisabled) && !this._isNowSettable(matchfield))\n        return null;\n    }\n\n    if (matchfield.type === \"checkbox\")\n      return (matchfield as HTMLInputElement).checked ? [matchfield.value] : null;\n\n    if (matchfield.type === \"radio\")\n      return (matchfield as HTMLInputElement).checked ? matchfield.value : null;\n\n    return matchfield.value;\n  }\n\n  _getVariableValueForConditions(conditionfield: string, options?: { matchcase?: boolean; checkdisabled?: boolean }) {\n    if (this.node.hasAttribute(\"data-wh-form-var-\" + conditionfield))\n      return this.node.getAttribute(\"data-wh-form-var-\" + conditionfield);\n\n    const fields = conditionfield.split(\"$\");\n\n    if (fields.length > 1) {\n      // If the condition field has a subfield, check if it's available through a form var\n      // The '$' in the attribute name is replaced with '.' to make the attribute name valid\n      const attrname = fields.join(\".\");\n      if (this.node.hasAttribute(\"data-wh-form-var-\" + attrname))\n        return this.node.getAttribute(\"data-wh-form-var-\" + attrname);\n    }\n\n    let currentvalue = this._getConditionRawValue(fields[0], options);\n    if (fields.length === 1 || currentvalue === null) //no subs to process\n      return currentvalue;\n\n    // Look for an extrafield match\n    const matchfield = this.getElementByName(fields[0]);\n    if (!matchfield) {\n      console.error(`No match for conditional required field '${conditionfield}'`);\n      return null;\n    }\n\n    if (matchfield instanceof HTMLSelectElement) {\n      if (Array.isArray(currentvalue)) {\n        const selectedvalue = currentvalue;\n        currentvalue = [];\n        for (const val of selectedvalue) {\n          const selected = dompack.qS<HTMLOptionElement>(matchfield, `option[value=\"${CSS.escape(val)}\"]`);\n          if (!selected?.dataset.__extrafields)\n            return null;\n          const extrafields = JSON.parse(selected.dataset.__extrafields);\n          currentvalue.push(extrafields[fields[1]]);\n        }\n      } else {\n        const selected = dompack.qS<HTMLOptionElement>(matchfield, `option[value=\"${CSS.escape(currentvalue)}\"]`);\n        if (!selected?.dataset.__extrafields)\n          return null;\n        const extrafields = JSON.parse(selected.dataset.__extrafields);\n        currentvalue = extrafields[fields[1]];\n      }\n      return currentvalue;\n    } else {\n      console.error(\"Subfield matching not supported for non-select fields\");\n      return null;\n    }\n  }\n\n\n  _matchesConditionRecursive(condition: FormCondition): boolean {\n    switch (condition.matchtype) {\n      case \"AND\":\n        for (const subcondition of condition.conditions)\n          if (!this._matchesConditionRecursive(subcondition))\n            return false;\n        return true;\n\n      case \"OR\":\n        for (const subcondition of condition.conditions)\n          if (this._matchesConditionRecursive(subcondition))\n            return true;\n        return false;\n\n      case \"NOT\":\n        return !this._matchesConditionRecursive(condition.condition);\n\n      case \"AGE<\":\n      case \"AGE>=\": {\n        const currentvalue = this._getVariableValueForConditions(condition.field);\n        if (!currentvalue)\n          return false;\n\n        const now = new Date, birthdate = new Date(Array.isArray(currentvalue) ? currentvalue[0] : currentvalue); //should never be an array, but _getVariableValueForConditions is generic\n        let age = now.getFullYear() - birthdate.getFullYear();\n        //birthdate not hit yet this year? then you lose a year\n        if (now.getMonth() < birthdate.getMonth()\n          || (now.getMonth() === birthdate.getMonth() && now.getDate() < birthdate.getDate())) {\n          --age;\n        }\n\n        return (condition.matchtype === 'AGE<' ? age < condition.value : age >= condition.value);\n      }\n    }\n\n    const currentvalue = this._getVariableValueForConditions(condition.field, condition.options);\n\n    if (condition.matchtype === \"HASVALUE\")\n      return Boolean(currentvalue) === Boolean(condition.value);\n\n    if ([\"IN\", \"HAS\", \"IS\"].includes(condition.matchtype)) {\n      const matchcase = condition.options?.matchcase !== false; // Defaults to true\n      const compareagainst = Array.isArray(condition.value) ? condition.value : condition.value ? [condition.value] : [];\n      const currentValArray: string[] = Array.isArray(currentvalue) ? currentvalue : currentvalue ? [currentvalue] : [];\n\n      // If the match is not case-sensitive, the condition value is already uppercased, so we only have to uppercase the\n      // current value(s) when checking\n      if (!matchcase)\n        currentValArray.forEach((_, idx) => currentValArray[idx] = currentValArray[idx].toUpperCase());\n\n      // The current value and the condition value should (at least) overlap\n      if (!currentValArray.some(value => compareagainst.includes(value)))\n        return false;\n\n      // For \"HAS\" and \"IS\" conditions, all of the required values should be selected (there shouldn't be required values\n      // that are not selected)\n      if ((condition.matchtype === \"HAS\" || condition.matchtype === \"IS\") && compareagainst.some(value => !currentValArray.includes(value)))\n        return false;\n\n      // For an \"IS\" condition, all of the selected values should be required (there shouldn't be selected values that are\n      // not required)\n      if (condition.matchtype === \"IS\" && currentValArray.some(value => !compareagainst.includes(value)))\n        return false;\n\n      return true;\n    }\n\n    return console.error(`No support for conditional type '${condition.matchtype}'`), false;\n  }\n\n  _updatePageNavigation() {\n    const pagestate = this._getPageState();\n    const nextpage = this._getDestinationPage(pagestate, +1);\n    const morepages = nextpage !== -1;\n    const curpagerole = pagestate.pages[pagestate.curpage] ? pagestate.pages[pagestate.curpage].dataset.whFormPagerole : '';\n    const nextpagerole = morepages ? pagestate.pages[nextpage].dataset.whFormPagerole : \"\";\n\n    this.node.classList.toggle(\"wh-form--allowprevious\", Boolean((pagestate.curpage > 0 && curpagerole !== 'thankyou') || (pagestate.curpage <= 0 && this.node.dataset.whFormBacklink)));\n    this.node.classList.toggle(\"wh-form--allownext\", morepages && nextpagerole !== 'thankyou');\n    this.node.classList.toggle(\"wh-form--allowsubmit\", curpagerole === 'thankyou'\n      ? pagestate.pages[pagestate.curpage].dataset.whFormExitButton !== undefined\n      : (!morepages || nextpagerole === 'thankyou'));\n  }\n\n  _navigateToThankYou(richvalues?: RichValues) {\n    const state = this._getPageState();\n\n    if (state.curpage >= 0) {\n      const nextpage = this._getDestinationPage(state, +1);\n      if (nextpage !== -1 && state.pages[nextpage] && state.pages[nextpage].dataset.whFormPagerole === 'thankyou') {\n        const rawNavigateTo = state.pages[nextpage].dataset.whFormNavigateTo;\n        const exitButton = state.pages[nextpage].dataset.whFormExitButton;\n        const parsedNavTo = rawNavigateTo ? JSON.parse(rawNavigateTo) : null;\n        if (parsedNavTo)\n          this.exitButtonNavigateTo = parsedNavTo;\n\n        const redirectdelay = parseInt(state.pages[nextpage].dataset.whFormPageredirectDelay ?? \"\");\n\n        if (exitButton) {\n          const submitButton = this.node.querySelector<HTMLElement>(\".wh-form__button--submit\");\n          const submitButtonLabel = submitButton?.querySelector<HTMLElement>(\".wh-form__buttonlabel\");\n          if (submitButton && submitButtonLabel) {\n            submitButton.dataset.whFormAction = \"exit\";\n            submitButtonLabel.textContent = exitButton;\n          } else {\n            console.error(`Unable to find the submit button '.wh-form__button--submit .wh-form__buttonlabel' - I need to replace its label with '${exitButton}'!`);\n          }\n        }\n\n        if (parsedNavTo && !(redirectdelay >= 0) && !exitButton) {\n          navigateTo(parsedNavTo);\n          return;\n        }\n\n        this.updateRichValues(state.pages[nextpage], richvalues);\n        this.gotoPage(nextpage, { __isSubmit: true });\n        if (parsedNavTo && redirectdelay >= 0) {\n          // If redirectdelay==0 (redirect immediately, while showing the thank you page), redirect after a small delay to\n          // give the browser time to hide the busy layer\n          // Might be caused by this: https://stackoverflow.com/a/60439478\n          setTimeout(() => navigateTo(parsedNavTo), redirectdelay * 1000 || 100);\n        }\n      }\n    }\n  }\n  updateRichValues(page: HTMLElement, richvalues?: RichValues) {\n    if (richvalues) {\n      for (const { field, value } of richvalues) {\n        const node = page.querySelector(`.wh-form__fieldgroup--richtext[data-wh-form-group-for=\"${CSS.escape(field)}\"] .wh-form__richtext`);\n        if (node) {\n          node.innerHTML = value;\n          dompack.registerMissed(node);\n        }\n      }\n    }\n  }\n\n  private ensureLegacyWarning(field: HTMLElement) {\n    if (!this.didLegacyWarning && !isLive)\n      console.warn(`[form] ${getFieldDisplayName(field)} is using wh:form-getvalue/wh:form-setvalue events. It should switch to JSFormElement`);\n\n    this.didLegacyWarning = true;\n  }\n\n  /* Override this to overwrite the processing of individual fields. Note that\n     radio and checkboxes are not passed through getFieldValue, and that\n     getFieldValue may return undefined or a promise. */\n  async getFieldValue(field: HTMLElement) {\n    if (field[rfSymbol])\n      return field[rfSymbol].getValue();\n\n    if (field.hasAttribute('data-wh-form-name') || field.whUseFormGetValue) {\n      //create a deferred promise for the field to fulfill\n      const deferred = Promise.withResolvers<unknown>();\n      //if cancelled, we'll assume the promise is taken over\n      if (!dompack.dispatchCustomEvent(field, 'wh:form-getvalue', { bubbles: true, cancelable: true, detail: { deferred } })) {\n        this.ensureLegacyWarning(field);\n        return deferred.promise;\n      }\n    }\n    if (!isFormFieldLike(field)) {\n      /* Can't fail on these, weird embeddings do weird things. Eg google's recaptcha v2 triggers this because it assigns a random name=\n         to the iframe it injects and then we pick that up.. (may need to move this error behind a debugflag if that's the only likely cause) */\n      if (debugFlags.fhv)\n        console.log(`[fhv] Cannot get value on non-FormControl`, field);\n      return undefined; //TODO throw? but wasn't currently fatal\n    }\n\n    if (field.matches('input[type=file]')) //We don't care for multiple yet, as our form RPC APIs don't support that either\n      return [...(field as HTMLInputElement).files || []].map(file => ({ fileName: file.name, file: file, link: null })) satisfies FormFileValue[];\n\n    return field.value;\n  }\n\n  /* Override this to overwrite the setting of individual fields. In contrast\n     to getFieldValue, this function will also be invoked for radio and checkboxes */\n  setFieldValue(fieldnode: HTMLElement, value: unknown) {\n    if (fieldnode[rfSymbol])\n      return fieldnode[rfSymbol].setValue(value);\n\n    if (fieldnode.hasAttribute('data-wh-form-name')) {\n      if (!dompack.dispatchCustomEvent(fieldnode, 'wh:form-setvalue', { bubbles: true, cancelable: true, detail: { value } })) {\n        this.ensureLegacyWarning(fieldnode);\n        return;\n      }\n      // Event is not cancelled, set node value directly\n    }\n\n    if (!isFormFieldLike(fieldnode)) {\n      console.error(`Cannot set value on non-FormControl`, fieldnode, value);\n      return; //TODO throw? but wasn't currently fatal\n    }\n\n    //NOTE this blocks a lot of 'new sets' being done through setFieldValue, eg resetting an array by setting it to []. which is fine for me, just use the data proxy..\n    if (typeof value !== \"string\" && typeof value !== \"number\" && typeof value !== \"boolean\") {\n      console.error(`Setting value of type ${typeof value} on a FormControl`, fieldnode, value);\n      return; //TODO throw? but wasn't currently fatal\n    }\n\n    const saveInteractive = this.isInteractive;\n    try {\n      this.isInteractive = false;\n      if (isFormControl(fieldnode))\n        dompack.changeValue(fieldnode, value);\n      else\n        fieldnode.value = value;\n    } finally {\n      this.isInteractive = saveInteractive;\n    }\n  }\n\n  _isPartOfForm(el: HTMLElement) {\n    //In HTML terms, an input must either have *no* form attribute or explicitly point to us. eg <input form> is *outside* a form\n    //However nodes may live in fragments (eg arrayedits) that are not in the DOM and not attached anywhere, so we also consider anything outside the DOM to be in our form...\n    return !(\"form\" in el) || el.form === this.node || !document.contains(el)\n      || (!this.node && !el.hasAttribute(\"form\")); //FIXME remove this workaround needed now to work around form init race where arrayfields try to use _queryAllFields\n  }\n\n  _queryAllFields(options?: {\n    skiparraymembers?: boolean;\n    skipfield?: HTMLElement;\n    onlysettable?: boolean;\n    startnode?: HTMLElement;\n  }): FormControlDescription[] {\n    const foundfields = new Array<FormControlDescription>;\n    const skiparraymembers = options && options.skiparraymembers;\n\n    for (const field of this._getFieldsToValidate(options?.startnode)) {\n      if (options && field === options.skipfield) //arrayfield.es needs it\n        continue;\n      if (!this._isPartOfForm(field))\n        continue;\n      if (options && options.onlysettable && !this._isNowSettable(field))\n        continue;\n      if (skiparraymembers && field.closest(\".wh-form__arrayrow\"))\n        continue;\n\n      const name = getFieldName(field);\n      if (!name)\n        continue;\n\n      let addto = foundfields.find(_ => _.name === name);\n      if (isRadioOrCheckbox(field)) { //expect multiple inputs with this name?\n        if (!addto) {\n          addto = { name: name, multi: true, nodes: [] };\n          foundfields.push(addto);\n        } else if (!addto.multi) {\n          console.error(`[fhv] Encountered duplicate field '${name}'`, field);\n          continue;\n        }\n        addto.nodes.push(field);\n      } else {\n        if (addto) {\n          console.error(`[fhv] Encountered duplicate field '${name}'`, field);\n          continue;\n        }\n\n        foundfields.push({ name: name, multi: false, node: field });\n      }\n    }\n\n    return foundfields;\n  }\n\n  /** Return the names of all form elements */\n  getFormElementNames() {\n    return this._queryAllFields().map(_ => _.name);\n  }\n\n  /** getValue from a field as returned by _queryAllFields (supporting both multilevel and plain fields)\n      @returns promise */\n  _getQueryiedFieldValue(field: FormControlDescription) {\n    if (!field.multi)\n      return this.getFieldValue(field.node);\n\n    return field.nodes.filter(node => node.checked).map(node => node.value);\n  }\n\n  /** Return a promise resolving to the submittable form value */\n  async getFormValue(): Promise<FormResultValue> {\n    const outdata: FormResultValue = {};\n    const fieldpromises = new Array<Promise<void>>;\n\n    for (const field of this._queryAllFields({ onlysettable: true, skiparraymembers: true }))\n      this._processFieldValue(outdata, fieldpromises, field.name, this._getQueryiedFieldValue(field));\n\n    await Promise.all(fieldpromises);\n    return outdata;\n  }\n\n  _isNowSettable(node: HTMLElement) {\n    // If the node is disabled, it's not settable\n    if (\"disabled\" in node && node.disabled)\n      return false;\n\n    // If the node's field group is disabled or hidden, it's not settable\n    const formgroup = node.closest(\".wh-form__fieldgroup\");\n    if (formgroup) {\n      if (formgroup.classList.contains(\"wh-form__fieldgroup--disabled\"))\n        return false;\n      if (formgroup.classList.contains(\"wh-form__fieldgroup--hidden\"))\n        return false;\n    }\n\n    // If the node's form page is hidden dynamically, it's not settable\n    const formpage = node.closest<HTMLElement>(\".wh-form__page\");\n    if (formpage) {\n      if (formpage.propWhFormCurrentVisible === false)\n        return false;\n    }\n    // The node is settable\n    return true;\n  }\n\n  _processFieldValue(outdata: FormResultValue, fieldpromises: Array<Promise<void>>, fieldname: string, receivedvalue: unknown) {\n    if (receivedvalue === undefined)\n      return;\n    if (isPromise(receivedvalue)) {\n      fieldpromises.push(new Promise<void>((resolve, reject) => {\n        receivedvalue.then(result => {\n          if (result !== undefined)\n            outdata[fieldname] = result;\n\n          resolve();\n        }).catch(e => reject(e as Error));\n      }));\n    } else {\n      outdata[fieldname] = receivedvalue;\n    }\n  }\n\n  //get the option lines associated with a specific radio/checkbox group\n  getOptions(name: string) {\n    const nodes = this.getElementByName(name);\n    if (!(nodes instanceof RadioNodeList))\n      return [];\n\n    return [...nodes].map(node => ({\n      inputnode: node,\n      fieldline: node.closest<HTMLElement>('.wh-form__fieldline'),\n      value: node.value\n    }));\n  }\n\n  /** gets the selected option associated with a radio/checkbox group as an array\n      */\n  getSelectedOptions(name: string) {\n    let opts = this.getOptions(name);\n    opts = opts.filter(node => node.inputnode.checked);\n    return opts;\n  }\n\n  /** get the selected option associated with a radio/checkbox group. returns an object that's either null or the first selected option\n      */\n  getSelectedOption(name: string) {\n    const opts = this.getSelectedOptions(name);\n    return opts.length ? opts[0] : null;\n  }\n\n  /** get the fieldgroup for an element */\n  getFieldGroup(name: string): HTMLElement | null {\n    let node = this.getElementByName(name);\n    if (node instanceof RadioNodeList)\n      node = node[0];\n\n    return node ? node.closest<HTMLElement>('.wh-form__fieldgroup') : null;\n  }\n\n  /** get the values of the currently selected radio/checkbox group */\n  private getValues(name: string) {\n    return this.getSelectedOptions(name).map(node => node.value);\n  }\n  /** get the value of the first currently selected radio/checkbox group */\n  private getValue(name: string) {\n    const vals = this.getValues(name);\n    return vals.length ? vals[0] : null;\n  }\n\n  /** @deprecated Just import setupValidator from \\@mod-publisher/js/forms */\n  static setupValidator(node: HTMLElement, checker: (node: HTMLElement) => Promise<string> | string) {\n    setupValidator(node, checker);\n  }\n\n  /** @deprecated Just import setFieldError from \\@mod-publisher/js/forms */\n  static setFieldError(field: HTMLElement, error: string, options?: Partial<FieldErrorOptions>) {\n    setFieldError(field, error, options);\n  }\n\n  setFieldError(field: HTMLElement, error: string, options?: Partial<FieldErrorOptions>) {\n    setFieldError(field, error, options);\n  }\n\n  async validateSingleFormField(field: HTMLElement): Promise<boolean> {\n    return true;\n  }\n\n  async _validateSingleFieldOurselves(field: HTMLElement): Promise<boolean> {\n    const state = getValidationState(field);\n\n    if (!state.explicit && isFieldNativeErrored(field)) {\n      //browser checks go first, any additional checks are always additive (just disable browserchecks you don't want to apply)\n      updateFieldError(field);\n      return this._reportFieldValidity(field);\n    }\n\n    //TODO we probably *shouldn't* be bothering running our validations if state.explicit is set, but then setFieldError needs to rerun the checks once the explicit error is dropped\n    state.dynamicError = null;\n    await this.validateSingleFormField(field);\n\n    if (!state.dynamicError)\n      for (const validator of state.validators) {\n        state.dynamicError = await validator(field) || null;\n        if (state.dynamicError)\n          break; //one is enough\n      }\n\n    if (!state.dynamicError && field.whFormsApiChecker)\n      await field.whFormsApiChecker();\n\n    return this._reportFieldValidity(field);\n  }\n\n  /** validate the form\n      @param limitset - A single element, nodelist or array of elements to validate (or their children)\n      @returns a promise that will fulfill when the form is validated\n       */\n  async validate(limitset?: LimitSet, options?: ValidationOptions): Promise<FormValidationResult> {\n    if (debugFlags.fdv) {\n      console.warn(`[fdv] Validation of form was skipped`);\n      return { valid: true, failed: [], firstfailed: null };\n    }\n\n    //Overlapping validations are dangerous, because we can't evaluate 'hasEverFailed' too early... if an earlier validation is still running it may still decide to mark fields as failed.\n    const defer = Promise.withResolvers<FormValidationResult>();\n    this.validationqueue.push({ defer, limitset, options });\n    if (this.validationqueue.length === 1)\n      this._executeNextValidation(); //we're first on the queue so process it\n\n    return defer.promise;\n  }\n\n  async _executeNextValidation() {\n    while (this.validationqueue.length) {\n      const item = this.validationqueue[0];\n      try {\n        const result = await this._executeQueuedValidation(item.limitset, item.options);\n        item.defer.resolve(result);\n      } catch (error) {\n        item.defer.reject(error as Error);\n      }\n      this.validationqueue.shift(); //remove the top item\n    }\n  }\n\n  async _executeQueuedValidation(limitset?: LimitSet, options?: ValidationOptions): Promise<FormValidationResult> {\n    const original = limitset;\n    if (!limitset)  //validate entire form if unspecified what to validate\n      limitset = this._getFieldsToValidate();\n\n    const tovalidate = new Set<HTMLElement>;\n    for (const node of Array.isArray(limitset) ? limitset : [limitset]) {\n      /* If you're explicitly validating a radio/checkbox, we need to validate its group (but not recurse down) as that's where radiogroup.es and checkboxgroup.es attach their validations\n         If you're targeting a group, we'll end up validating both the radio/checkbox (directly attached here) and any eg. embedded textedits  */\n      if (node.matches(`input[type=radio],input[type=checkbox]`)) {\n        const group = node.closest<HTMLElement>(\".wh-form__fieldgroup\");\n        if (group)\n          tovalidate.add(group);\n        continue;\n      }\n\n      if (this._shouldValidateField(node))\n        tovalidate.add(node);\n      for (const subnode of this._getFieldsToValidate(node)) //TODO this is overly recursive esp. if limitset is empty...\n        tovalidate.add(subnode);\n    }\n\n    /* This was:\n    tovalidate = Array.from(tovalidate); //we need an array now for further processing\n       but that breaks on some old mootools integrations, see https://gitlab.webhare.com/webharebv/codekloppers/-/issues/677#note_146801\n       wokaround: */\n    let tovalidatelist = [...tovalidate]; //we need an array now for further processing\n\n    if (options && options.iffailedbefore)\n      tovalidatelist = tovalidatelist.filter(node => hasEverFailed(node));\n\n    if (debugFlags.fhv)\n      console.log(\"[fhv] Validation of %o expanded to %d elements: %o\", original, tovalidatelist.length, [...tovalidatelist]);\n\n    const lock = dompack.flagUIBusy();\n    try {\n      if (!tovalidatelist.length)\n        return { valid: true, failed: [], firstfailed: null };\n\n      const validationresults = await Promise.all(tovalidatelist.map(fld => this._validateSingleFieldOurselves(fld)));\n      //remove the elements from validate for which the promise failed\n      const failed = tovalidatelist.filter((fld, idx) => !validationresults[idx]);\n      const result: FormValidationResult = {\n        valid: failed.length === 0,\n        failed: failed,\n        firstfailed: null\n      };\n\n      result.firstfailed = result.failed.length ? result.failed[0] : null;\n      if (result.firstfailed && (!options || options.focusfailed)) {\n        //FIXME shouldn't getFocusableComponents also return startnode if focusable?\n        const tofocus = domfocus.canFocusTo(result.firstfailed) ? result.firstfailed : domfocus.getFocusableComponents(result.firstfailed)[0];\n        if (tofocus)\n          dompack.focus(tofocus, { preventScroll: true });\n\n        this.scrollIntoView(result.firstfailed);\n      }\n\n      if (debugFlags.fhv)\n        console.log(`[fhv] Validation of ${tovalidatelist.length} fields done, ${result.failed.length} failed`, result);\n\n      return result;\n    } finally {\n      lock.release();\n    }\n  }\n\n  reset() {\n    this.node.reset();\n    this.gotoPage(0);\n  }\n}\n","export const rfSymbol = Symbol('RegisteredField');\n\ndeclare global {\n  interface HTMLElement {\n    [rfSymbol]?: FormFieldAPI;\n  }\n}\n\nexport interface FormFieldAPI {\n  getValue(): unknown;\n  setValue(newvalue: unknown): void;\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/gettid\" {\n}\n\nexport {\n  getTidLanguage,\n  setTidLanguage,\n  getTid,\n  getTidForLanguage,\n  getHTMLTid,\n  getHTMLTidForLanguage,\n  getTIDListForLanguage\n} from \"./internal\";\n","/* eslint-disable @typescript-eslint/no-floating-promises -- FIXME: needs API rework */\n\nimport { getTid } from \"@webhare/gettid\";\nimport \"./arrayfield.css\";\nimport { throwError } from \"@webhare/std\";\nimport { addDocEventListener, qS, qSA, type DocEvent, registerMissed, stop } from \"@webhare/dompack\";\nimport { getFieldName, getFormElementCandidates, getFormHandler, parseCondition, setFieldName } from \"@webhare/forms/src/domsupport\";\nimport type { FormCondition } from \"@webhare/forms/src/types\";\nimport { RecordFieldHandler, type FormParent } from \"@webhare/forms/src/fieldmap\";\nimport type FormBase from \"../formbase\";\nimport { setup } from \"../internal/webharefields\";\n\n\nfunction fixupConditionRecursive(node: HTMLElement, condition: FormCondition, mapping: Map<string, string>): boolean {\n  switch (condition.matchtype) {\n    case \"AND\":\n    case \"OR\":\n      {\n        let anychanges = false;\n        for (const subcondition of condition.conditions)\n          anychanges = fixupConditionRecursive(node, subcondition, mapping) || anychanges;\n        return anychanges;\n      }\n    case \"NOT\":\n      {\n        return fixupConditionRecursive(node, condition.condition, mapping);\n      }\n    default:\n      {\n        const newName = mapping.get(condition.field);\n        if (newName && node.querySelector(`[name=\"${newName}\"]`)) {\n          condition.field = newName;\n          return true;\n        }\n      }\n  }\n  return false;\n}\n\ntype NewType = FormParent;\n\nexport default class ArrayField {\n  valueNode: HTMLInputElement;\n  nextrowid = 0;\n  template;\n  insertPoint: HTMLElement;\n  arrayBaseName;\n\n  constructor(private handler: NewType, private node: HTMLElement, items: HTMLElement[], private name: string) {\n    this.arrayBaseName = node.dataset.whFormGroupFor || throwError(\"Missing array base name\");\n\n    // The template for new rows. If we have arrays-in-array, it will still be the first <template>\n    this.template = qS<HTMLTemplateElement>(node, \"template\") || throwError(\"Missing array template\");\n    // The node before which to add new rows\n    this.insertPoint = this.template.parentNode!.lastElementChild! as HTMLElement;\n    if (!this.insertPoint.matches(\".wh-form__arrayadd\"))\n      throw new Error(\"Missing array insert point\");\n\n    // Event handler for add/delete button clicks\n    this.insertPoint.addEventListener(\"click\", event => this.onAddRow(event));\n    addDocEventListener(node, \"click\", event => this._onClick(event));\n\n    // Proxy node for getting/setting properties and receiving events\n    this.valueNode = qS<HTMLInputElement>(node, \"input.wh-form__arrayinput\") ?? throwError(\"Missing array input\");\n    this.valueNode.whUseFormGetValue = true;\n    this.valueNode.addEventListener(\"wh:form-getvalue\", event => this._onGetValue(event));\n    //@ts-expect-error wh:form-setvalue isn't defined - but it'll go away anyway\n    this.valueNode.addEventListener(\"wh:form-setvalue\", event => this._onSetValue(event));\n\n    // Initialize initial value rows\n    for (const rownode of qSA(this.node, \".wh-form__arrayrow\"))\n      this._fixupRowNode(rownode);\n\n    this._checkValidity();\n  }\n\n  get form(): FormBase {\n    const form = getFormHandler(this.node.closest(\"form\") ?? throwError(\"Could not find <form>\")) ?? throwError(\"Could not find form for arrayfield\");\n    if (!form._getFieldsToValidate) //avoid calling into formbase from our constructor, it may not be there yet...\n      throw new Error(\"The <form> is not ready yet\");\n    return form;\n  }\n\n  addRow(): HTMLElement {\n    // Instatiate a new row\n    const newrow = this.template.content.cloneNode(true) as HTMLElement;\n    (newrow.firstElementChild! as HTMLElement).dataset.whFormRowid = String(this.nextrowid++);\n\n    // Insert the new row\n    this.insertPoint.parentNode!.insertBefore(newrow, this.insertPoint);\n    const addedrow = this.insertPoint.previousElementSibling! as HTMLElement;\n\n    /* If the form is relying on legacy dompack.register to go through ImgEditField and do the actual\n       customElements.define call.... then the 'name' attributes won't actually work on the 'new' elements.\n       therefore dompack.registerMissed must run before _fixupRowNode */\n    registerMissed(addedrow);\n    setup(addedrow);\n\n    this._fixupRowNode(addedrow as HTMLElement);\n    this._checkValidity();\n    this.form.__scheduleUpdateConditions();\n    return this.insertPoint.previousSibling as HTMLElement;\n  }\n\n  /* seems a unused API ?.  .. if we need to provide this, just let people pass us a row node instead of understanding IDs\n    removeRow(id)\n    {\n      // Remove a row by id\n      let node = this.node.querySelector(`.wh-form__arrayrow[data-row-id=${id}]`);\n      if (node)\n        this._removeRowNode(node);\n    }\n  */\n\n  private onAddRow(event: Event) {\n    stop(event);\n    this.addRow();\n  }\n  _onClick(event: DocEvent<MouseEvent>) {\n    // Check if a delete button was clicked\n    const delNode = event.target.closest(\".wh-form__arraydelete\");\n    if (delNode) {\n      event.preventDefault();\n      this._removeRowNode(delNode.closest(\".wh-form__arrayrow\")!);\n    }\n  }\n\n  getRowHandler(row: HTMLElement): RecordFieldHandler {\n    const rowBaseName = this.valueNode.name + \".\" + row.dataset.whFormRowid;\n    const rowFields = getFormElementCandidates(row, rowBaseName).filter(_ => _.dataset.whFormCellname !== \"row_uid\"); //row_uid points back to us, so requesting that triggers a loop\n    return new RecordFieldHandler(this.handler, rowBaseName, rowFields);\n  }\n\n  getValue() {\n    const rows = [];\n    for (const row of qSA(this.node, \".wh-form__arrayrow\").filter(n => n.parentNode === this.template.parentNode)) {\n      const handler = this.getRowHandler(row);\n      const rowval = handler.getValue();\n      rows.push(rowval);\n    }\n    return rows;\n  }\n\n  _onGetValue(event: CustomEvent<{ deferred: PromiseWithResolvers<unknown> }>) {\n    // We're using the deferred promise to return our value\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Create a promise for each row that resolves with the combined value of all fields in the row\n    const valuePromises = [];\n    for (const row of qSA(this.node, \".wh-form__arrayrow\").filter(n => n.parentNode === this.template.parentNode)) {\n      const rowFields = this._queryAllFields(row);\n      // Create a promise for each of the row's subfields to get its value\n      const rowPromises = rowFields.map(field => (this.form as FormBase)._getQueryiedFieldValue(field)); //FIXME get rid of 'as FormBase' to support array-in-array\n      // Add an all promise for the value promises and add it to the list of row promises\n      valuePromises.push(Promise.all(rowPromises).then(values => {\n        // Combine the values into a value object for this row\n        const rowValue: Record<string, unknown> = { formrowid: row.dataset.whFormRowid };\n        values.forEach((value, idx) => {\n          // The values are returned in the order that the promises were added to the list of value promises, so we can use\n          // the index of the value to get the original field\n          const rowField = rowFields[idx];\n          const firstnode = rowField.multi ? rowField.nodes[0] : rowField.node;\n          rowValue[firstnode.dataset.whFormCellname!] = value;\n        });\n        return rowValue;\n      }));\n    }\n    // Wait for all the row promises (which resolves with a list of promise resolution values, which will be the final value\n    // of the array field)\n    Promise.all(valuePromises).then(valueRows => event.detail.deferred.resolve(valueRows));\n  }\n\n  setValue(newvalue: unknown[]) {\n    if (!Array.isArray(newvalue))\n      throw new Error(`Invalid value for array field '${this.name}': ${JSON.stringify(newvalue)}`);\n\n    // Remove all current rows (TODO optimize)\n    while (this.insertPoint.previousElementSibling?.classList.contains(\"wh-form__arrayrow\"))\n      this._removeRowNode(this.insertPoint.previousElementSibling);\n\n    // Check if we have an array value\n    for (const value of newvalue) {\n      // Add a row\n      const row = this.addRow();\n      const handler = this.getRowHandler(row);\n      handler.setValue(value);\n    }\n    this._checkValidity();\n  }\n\n  _onSetValue(event: CustomEvent<{ value: unknown }>) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Remove all current rows\n    while (this.insertPoint.previousElementSibling?.classList.contains(\"wh-form__arrayrow\"))\n      this._removeRowNode(this.insertPoint.previousElementSibling);\n\n    // Check if we have an array value\n    if (Array.isArray(event.detail.value)) {\n      for (const value of event.detail.value) {\n        // Add a row\n        const row = this.addRow();\n        // Initialize the row's fields\n        for (const field of this._queryAllFields(row)) {\n          for (const fieldnode of (field.multi ? field.nodes : [field.node])) {\n            if (fieldnode.dataset.whFormCellname && fieldnode.dataset.whFormCellname in value) {\n              (this.form as FormBase).setFieldValue(fieldnode, value[fieldnode.dataset.whFormCellname]); //FIXME get rid of 'as FormBase' to support array-in-array\n            }\n          }\n        }\n      }\n    }\n    this._checkValidity();\n  }\n\n  _fixupRowNode(node: HTMLElement) {\n    const rowid = node.dataset.whFormRowid;\n\n    // Rename all fields to avoid duplicate field names\n    const mapping = new Map<string, string>;\n    for (const fieldnode of getFormElementCandidates(node, this.arrayBaseName)) {\n\n      // Leave embedded arrayfields alone! Except if this is specifically the wh-form__arrayinput one level down\n      const nodeArray = fieldnode.closest(\".wh-form__fieldgroup--array\");\n      if (nodeArray && nodeArray !== this.node && !(fieldnode.matches(\".wh-form__arrayinput\") && (nodeArray.parentNode! as HTMLElement).closest(\".wh-form__fieldgroup--array\") === this.node)) {\n        // console.log(\"Skipping\", fieldnode, \"as it's not in our array\");\n        continue;\n      }\n\n      // Rename fields\n      const fieldname = getFieldName(fieldnode);\n      // When rendering, the fields simply have their arrayname prefixed in their name=, see InstantiateField in array.whlib (TODO seems dangerous, eg preset radio buttons interfering with each other?\n      // So we'll just take the part after the first dot as the cellname\n      fieldnode.dataset.whFormCellname ||= fieldname.substring(this.arrayBaseName.length + 1);\n\n      const cellname: string = fieldnode.dataset.whFormCellname;\n      const subname = this.valueNode.name + \".\" + rowid + \".\" + cellname;\n      // console.log(\"for\", this.name, \"rename\", fieldname, \"to\", subname, fieldnode);\n      setFieldName(fieldnode, subname);\n      mapping.set(fieldname, subname);\n\n      // Rename id's to make them unique; update the labels within the field's fieldgroup to point to the new id\n      if (fieldnode.id) {\n        const labelnodes = qSA<HTMLLabelElement>(node, `label[for=\"${fieldnode.id}\"]`);\n        fieldnode.id += \"-\" + rowid;\n        for (const labelnode of labelnodes)\n          labelnode.htmlFor = fieldnode.id;\n      }\n\n      // Rewrite conditions after all fields have been renamed\n      for (const type of [\"visible\", \"enabled\", \"required\"]) {\n        for (const conditionnode of qSA(node, `[data-wh-form-${type}-if]`)) {\n          const condition = parseCondition(conditionnode.dataset[`whForm${type[0].toUpperCase() + type.slice(1)}If`]!);\n          if (fixupConditionRecursive(node, condition, mapping))\n            conditionnode.dataset[`whForm${type[0].toUpperCase() + type.slice(1)}If`] = JSON.stringify({ c: condition });\n        }\n      }\n    }\n\n    this.getRowHandler(node); //initializes deeper arrays. fieldmap should probably be handling this and build a full mapping top to botom...\n  }\n\n  _removeRowNode(node: Element) {\n    // Remove the row node\n    node.remove();\n    this._checkValidity();\n  }\n\n  _checkValidity() {\n    const minRows = parseInt(this.valueNode.dataset.whMin || \"0\");\n    const maxRows = parseInt(this.valueNode.dataset.whMax || \"0\");\n\n    const numRows = this.node.querySelectorAll(\".wh-form__arrayrow\").length;\n    if (numRows < minRows)\n      this.valueNode.setCustomValidity(getTid(\"publisher:site.forms.commonerrors.minarray\", minRows));\n    else if (maxRows > 0 && numRows > maxRows)\n      this.valueNode.setCustomValidity(getTid(\"publisher:site.forms.commonerrors.maxarray\", maxRows));\n    else\n      this.valueNode.setCustomValidity(\"\");\n\n    // Disable the add button if the maximum number of rows is reached\n    if (maxRows > 0 && numRows >= maxRows)\n      this.node.classList.add(\"wh-form__array--maxrows\");\n    else\n      this.node.classList.remove(\"wh-form__array--maxrows\");\n  }\n\n  _queryAllFields(node: HTMLElement) {\n    return (this.form as FormBase)._queryAllFields({ startnode: node, skipfield: this.valueNode });  //FIXME get rid of 'as FormBase' to support array-in-array\n  }\n}\n","import { getFieldName } from \"./domsupport\";\nimport { rfSymbol, type FormFieldAPI } from \"./registeredfield\";\nimport ArrayField from \"@mod-publisher/js/forms/fields/arrayfield\";\nimport type { AddressValue } from \"@webhare/address\";\nimport { omit, nameToSnakeCase, nameToCamelCase, throwError, isDate } from \"@webhare/std\";\nimport type { RecursivePartial } from \"@webhare/js-api-tools\";\nimport type { FormFieldLike } from \"./jsformelement\";\n\nexport interface FormParent {\n  __scheduleUpdateConditions(): void;\n}\n\n\ninterface FormField {\n  getValue(): unknown;\n\n  /** Set a value\n   * @param newvalue - The new value to set\n   * @param ignoreInvalid - Do not throw if the value is invalid. Used for eg. prefills which can't usefully handle it anyway\n   * @returns True if succesfully set */\n\n  setValue(newvalue: unknown): void;\n}\n\ntype ValueType = \"number\" | \"boolean\" | \"date\";\n\nfunction unmapFieldName(camelCaseName: string) {\n  return camelCaseName.startsWith(\"__formfield\") ? camelCaseName : nameToSnakeCase(camelCaseName);\n\n}\nfunction mapFieldName(htmlName: string) {\n  return htmlName.startsWith(\"__formfield\") ? htmlName : nameToCamelCase(htmlName);\n}\n\nfunction mapValue(type: ValueType, invalue: string) {\n  switch (type) {\n    case \"number\":\n      return parseFloat(invalue);\n    case \"boolean\":\n      return invalue === \"true\";\n    case \"date\":\n      return new Date(invalue);\n  }\n}\n\nfunction unmapValue(type: ValueType | undefined, invalue: unknown, fieldDescr: string) {\n  switch (type) {\n    case null:\n      if (typeof invalue !== \"string\")\n        throw new Error(`Invalid type ${typeof invalue} for string field ${fieldDescr}: ${invalue}`);\n      return invalue;\n\n    case \"number\":\n      if (typeof invalue !== \"number\")\n        throw new Error(`Invalid type ${typeof invalue} for number field ${fieldDescr}: ${invalue}`);\n      return String(invalue);\n\n    case \"boolean\":\n      if (typeof invalue !== \"boolean\")\n        throw new Error(`Invalid type ${typeof invalue} for boolean field ${fieldDescr}: ${invalue}`);\n      return String(invalue);\n\n    case \"date\":\n      if (!isDate(invalue))\n        throw new Error(`Invalid type ${typeof invalue} for date field ${fieldDescr}: ${invalue}`);\n      return invalue.toISOString();\n  }\n}\n\nclass HTMLFormFieldHandler implements FormField {\n  valuetype?: ValueType;\n\n  constructor(private form: FormParent, private readonly field: FormFieldLike) {\n    this.valuetype = field.dataset.whFormValueType as undefined | ValueType;\n    if (!this.valuetype && field.matches('input[type=number]'))\n      this.valuetype = \"number\";\n  }\n\n  getValue(): unknown {\n    if (this.field.matches('input[type=checkbox]'))\n      return (this.field as HTMLInputElement).checked;\n    if (this.field.matches('input[type=date]'))\n      return (this.field as HTMLInputElement).valueAsDate;\n\n    if (this.field.tagName === \"SELECT\") {\n      const selectedrow = (this.field as HTMLSelectElement).selectedOptions[0];\n      if (!selectedrow || selectedrow.dataset.placeholder !== undefined)\n        return null; //didn't select a 'real' option\n\n      return this.valuetype ? mapValue(this.valuetype, selectedrow.value) : selectedrow.value;\n    }\n\n    return this.valuetype ? mapValue(this.valuetype, this.field.value as string) : this.field.value;\n  }\n\n  setValue(newvalue: unknown): void {\n    if (this.field.matches('input[type=checkbox]')) {\n      //For convenience we're interpreting setting a checkbox as 'truthy' instead of explicit true/false\n      const setvalue = Boolean(newvalue);\n      if (setvalue === (this.field as HTMLInputElement).checked)\n        return;\n\n      (this.field as HTMLInputElement).checked = setvalue;\n    } else if (this.field.matches('input[type=date]')) {\n      if ((this.field as HTMLInputElement)?.valueAsDate?.getTime() === (newvalue as Date | null)?.getTime())\n        return;\n      (this.field as HTMLInputElement).valueAsDate = newvalue as Date;\n    } else if (this.field.tagName === \"SELECT\" && newvalue === null) { //'null' resets the select to 'no value', so figure out if there's a placeholder row\n      const setvalue = (this.field as HTMLSelectElement).options[0]?.dataset.placeholder !== undefined ? 0 : -1;\n      if ((this.field as HTMLSelectElement).selectedIndex === setvalue)\n        return;\n      (this.field as HTMLSelectElement).selectedIndex = setvalue;\n    } else {\n      const setvalue = this.valuetype ? unmapValue(this.valuetype, newvalue, this.field.name) : newvalue;\n      if (this.field.value === setvalue)\n        return;\n      this.field.value = setvalue;\n    }\n    this.form.__scheduleUpdateConditions();\n  }\n}\n\nclass RadioFormFieldHandler implements FormField {\n  valuetype?: ValueType;\n  constructor(private form: FormParent, private readonly name: string, private readonly rnodes: HTMLInputElement[]) {\n    const group = rnodes[0].closest<HTMLElement>(\".wh-form__fieldgroup\");\n    if (!group) { //value metadata is stored at the fieldgroup level, so reject these\n      console.error(\"Missing group for radiofield \", group);\n      console.error('if a radio field does not want to participate in the form, it should set attribute form=\"\"');\n    } else {\n      this.valuetype = group.dataset.whFormValueType as undefined | ValueType;\n    }\n  }\n  getValue(): unknown {\n    const node = this.rnodes.find(_ => _.checked);\n    return (node ? this.valuetype ? mapValue(this.valuetype, node.value) : node.value : null);\n  }\n  setValue(newvalue: unknown): void {\n    if (newvalue === null) {\n      for (const node of this.rnodes)\n        node.checked = false;\n\n      this.form.__scheduleUpdateConditions();\n      return;\n    }\n\n    const myname = `radio group ${this.name}`;\n    const setvalue = unmapValue(this.valuetype, newvalue, myname);\n\n    const node = this.rnodes.find(_ => _.value === setvalue);\n    if (!node)\n      throw new Error(`No such value '${setvalue}' in radio group '${this.name}`);\n\n    node.checked = true;\n    this.form.__scheduleUpdateConditions();\n  }\n}\n\nclass CheckboxGroupHandler implements FormField {\n  valuetype?: ValueType;\n  constructor(private form: FormParent, private readonly name: string, private readonly cboxes: HTMLInputElement[]) {\n    this.valuetype = (cboxes[0].closest<HTMLElement>(\".wh-form__fieldgroup\") ?? throwError(\"RadioFormFieldHandler: Missing group\")).dataset.whFormValueType as undefined | ValueType;\n  }\n  getValue(): unknown {\n    return this.cboxes.filter(_ => _.checked).map(_ => this.valuetype ? mapValue(this.valuetype, _.value) : _.value);\n  }\n  setValue(newvalue: unknown): void {\n    const myname = `checkbox group '${this.name}'`;\n    if (!Array.isArray(newvalue))\n      throw new Error(`Value for ${myname} should be an array, got '${JSON.stringify(newvalue)}'`);\n\n    const toset = newvalue.map(_ => unmapValue(this.valuetype, _, myname));\n\n    this.cboxes.forEach(_ => _.checked = toset.includes(_.value));\n    this.form.__scheduleUpdateConditions();\n\n    //in case the error is caught and ignored (eg prefill), we'll update what we can\n    const missing = toset.filter(_ => !this.cboxes.some(cbox => cbox.value === _));\n    if (missing.length)\n      throw new Error(`Invalid value(s) for ${myname}: ${missing.join(', ')}`);\n  }\n}\n\nclass RegisteredFieldHandler implements FormField {\n  constructor(protected form: FormParent, private readonly field: FormFieldAPI) {\n  }\n\n  getValue(): unknown {\n    return this.field.getValue();\n  }\n  setValue(newvalue: unknown): void {\n    this.field.setValue(newvalue);\n  }\n}\n\nexport class ArrayFieldHandler extends RegisteredFieldHandler implements FormField {\n  constructor(form: FormParent, private node: HTMLElement, items: HTMLElement[]) {\n    node[rfSymbol] ||= new ArrayField(form, node, items, getFieldName(items[0]));\n    super(form, node[rfSymbol]);\n  }\n\n  __scheduleUpdateConditions() {\n    this.form.__scheduleUpdateConditions();\n  }\n}\n\n/** The FormFieldMap exposes a multi-level (ie unflattened) view of the form values. Internally it works with the\n   original names because generated fields names, eg __formfieldbbbwVsWih_0DrJOc0beS7Q_, cannot be assumed to be snake_case and convertable */\nexport abstract class FormFieldMap<DataShape> {\n  /** Field mapping. Uses original names */\n  protected fieldmap = new Map<string, FormField>();\n\n  constructor(protected fieldName: string, nodes: HTMLElement[]) {\n    const subpos = fieldName ? fieldName.length + 1 : 0;\n    const groups = Map.groupBy(nodes, _ => getFieldName(_).substring(subpos).split('.')[0]);\n\n    for (const [name, items] of groups) {\n      const fullName = (fieldName ? fieldName + '.' : '') + name;\n      if (!name) {\n        console.error(`There are fields without a name:`, items);\n        continue;\n      }\n\n      if (items[0].matches('input[type=radio]')) {\n        this.fieldmap.set(name, new RadioFormFieldHandler(this, fullName, items as HTMLInputElement[]));\n        continue;\n      }\n\n      if (items[0].matches('.wh-form__arrayinput')) {\n        const arraygroup = items[0].closest<HTMLElement>('.wh-form__fieldgroup--array');\n        if (arraygroup) {\n          this.fieldmap.set(name, new ArrayFieldHandler(this, arraygroup, items));\n          continue;\n        }\n      }\n\n      const hasGroupLeader = getFieldName(items[0]) === fullName; //ie name has no followup '.xx'\n      if (hasGroupLeader) { //if no subname, it's the group leader ?\n        if (items[0].matches('input[type=checkbox]')) {//is it a checkbox group?\n          const cboxgroup = items[0].closest(\".wh-form__fieldgroup--checkboxgroup\");\n          if (cboxgroup) {\n            this.fieldmap.set(name, new CheckboxGroupHandler(this, fullName, items as HTMLInputElement[]));\n            continue;\n          }\n        }\n\n        this.fieldmap.set(name, new HTMLFormFieldHandler(this, items[0] as FormFieldLike));\n        continue;\n      }\n\n      //We're an implicit record (even if with just one member)\n      if (items[0].matches('select[name$=\".country\"][data-orderingdata]')) //looks like address.whlib\n        this.fieldmap.set(name, new AddressFieldHandler(this, fullName, items));\n      else\n        this.fieldmap.set(name, new RecordFieldHandler(this, fullName, items));\n    }\n  }\n\n  abstract __scheduleUpdateConditions(): void;\n\n  /** Get a field handler by name */\n  getField(name: string, options: { allowMissing: true }): FormField | null;\n  getField(name: string, options?: { allowMissing?: boolean }): FormField;\n\n  getField(name: string, options?: { allowMissing?: boolean }): FormField | null {\n    const mapName = unmapFieldName(name);\n    const match = this.fieldmap.get(mapName);\n    if (match)\n      return match;\n    if (options?.allowMissing)\n      return null;\n\n    throw new Error(`Field '${name}' not found in this form`); //TODO report the fukll anme\n  }\n\n  getFieldNames(): string[] {\n    return [...this.fieldmap.keys()].map(mapFieldName);\n  }\n\n  /** Set a value for multiple fields\n   * @param data - The data to set\n   * @param ignoreUnknownFields - Do not throw if a field is not found in the form. This is the default\n   */\n  assign(data: RecursivePartial<DataShape>, { ignoreUnknownFields = true } = {}) {\n    for (const [key, value] of Object.entries(data as object)) {\n      const field = this.getField(key, { allowMissing: ignoreUnknownFields });\n      if (field)\n        field.setValue(value);\n    }\n  }\n}\n\nexport class RecordFieldHandler extends FormFieldMap<object> implements FormField {\n  constructor(private form: FormParent, baseName: string, nodes: HTMLElement[]) {\n    super(baseName, nodes);\n  }\n\n  getValue(): unknown {\n    const retval: Record<string, unknown> = {};\n    for (const [name, field] of this.fieldmap) {\n      const val = field.getValue();\n      if (val !== undefined) //Suppress undefined values (where we cannot safely re-set them, eg images in Object.keys\n        retval[mapFieldName(name)] = val;\n    }\n\n    return retval;\n  }\n\n  setValue(newvalue: unknown): void {\n    if (typeof newvalue !== 'object' || newvalue === null)\n      throw new Error(`Invalid value for record field '${this.fieldName}': ${newvalue}`);\n\n    for (const [name, field] of this.fieldmap) {\n      const prettyName = mapFieldName(name);\n      if (prettyName in newvalue)\n        field.setValue((newvalue as Record<string, unknown>)[prettyName]);\n    }\n  }\n\n  __scheduleUpdateConditions() {\n    this.form.__scheduleUpdateConditions();\n  }\n}\n\n/* TODO cleanup... this is a workaround to translate nr_detail to houseNumber. ideally the server would just send house_number as field\n        name but that transition will take time. also we need a nice way to 'take over' addressifelds rather than fieldmapper special casing\n        its detection\n*/\ntype OldAddressValue = Omit<AddressValue, \"houseNumber\"> & { nrDetail?: string };\n\nclass AddressFieldHandler extends RecordFieldHandler {\n  constructor(form: FormParent, baseName: string, nodes: HTMLElement[]) {\n    super(form, baseName, nodes);\n  }\n\n  getValue(): unknown {\n    const val = super.getValue() as OldAddressValue;\n    if (val?.country === null)\n      return null;\n\n    return val?.nrDetail !== undefined ? { ...omit(val, [\"nrDetail\"]), houseNumber: val.nrDetail } : val;\n  }\n\n  setValue(val: unknown) {\n    if (val === null) {\n      super.setValue({ country: null, city: \"\", street: \"\", zip: \"\", nrDetail: \"\", state: \"\" });\n      return;\n    }\n\n    ///@ts-expect-error ugly hack, not really worth overwriting with as\n    super.setValue(val?.houseNumber !== undefined ? { ...omit(val, [\"houseNumber\"]), nrDetail: val.houseNumber } : val);\n  }\n}\n\nexport class FieldMapDataProxy implements ProxyHandler<object> {\n  constructor(private readonly form: FormFieldMap<object>) {\n  }\n  get(target: object, p: string | symbol) {\n    //Don't attempt to validate getters... it will break various introspection calls (eg requesting constructor, checking for 'then'...)\n    const field = typeof p === \"string\" ? this.form.getField(p, { allowMissing: true }) : null;\n    return field ? field.getValue() : (target as Record<string | symbol, unknown>)[p];\n  }\n  set(target: unknown, p: string, value: unknown): boolean {\n    this.form.getField(p).setValue(value);\n    return true;\n  }\n  ownKeys(target: object): ArrayLike<string | symbol> {\n    return this.form.getFieldNames();\n  }\n  getOwnPropertyDescriptor(target: unknown, prop: string) { // allows ownKeys to actually return to Object.keys\n    return { enumerable: true, configurable: true };\n  }\n}\n","/* eslint-disable @typescript-eslint/no-floating-promises -- FIXME: needs API rework */\n\nimport * as dompack from \"@webhare/dompack\";\nimport FormBase from \"../formbase\";\nimport { debugFlags } from \"@webhare/env\";\nimport { verifyHareScriptAddress, type HareScriptAddressValidationResult, type AddressChecks, type HareScriptAddressValue } from \"@webhare/forms/src/address\";\nimport { setFieldError } from \"../internal/customvalidation\";\nimport { throwError } from \"@webhare/std\";\n\nclass SubField {\n  node;\n  fieldgroup: HTMLElement;\n  pos: number;\n\n  constructor(node: dompack.FormControlElement, pos: number) {\n    this.node = node;\n    this.pos = pos;\n    this.fieldgroup = node.closest(\".wh-form__fieldgroup\") ?? throwError(\"Could not find fieldgroup for field\");\n  }\n}\n\ninterface OrderingData {\n  countries: string[];\n  fieldorder: string[];\n}\n\nexport default class AddressField {\n  numvaliditycalls = 0;\n  node: HTMLElement;\n  formnode: HTMLFormElement;\n  countryNode: HTMLSelectElement;\n  currentcountry: string;\n  fieldName: string;\n  orderingData: OrderingData[];\n  allFields = new Map<string, SubField>;\n  _updatingFields = false;\n\n  constructor(node: HTMLElement) {\n    this.node = node;\n    //We won't FormBase.getForNode yet here so we're not too dependent on registration ordering\n    this.formnode = node.closest(\"form\") ?? throwError(\"Could not find form for addressfield\");\n\n    // AddressField is initialized for the address's country field, so first find the other fields\n    this.countryNode = dompack.qR(this.node, \"select.wh-form__pulldown\"); //TODO why aren't we targetting by ID ? this will work but seems ambiguous\n    if (!this.countryNode)\n      throw new Error(\"Could not find country select node\");\n    if (!this.countryNode.dataset.orderingdata)\n      throw new Error(\"Addressfield not properly configured\");\n\n    this.currentcountry = this.countryNode.value;\n    this.fieldName = this.countryNode.name.substr(0, this.countryNode.name.lastIndexOf(\".\"));\n    this.orderingData = JSON.parse(this.countryNode.dataset.orderingdata) as OrderingData[];\n    const prefixLength = this.fieldName.length + 1; // fieldName + \".\"\n    this.allFields = new Map();\n    let fieldpos = 0;\n    this.allFields.set(this.countryNode.name.substr(prefixLength), new SubField(this.countryNode, ++fieldpos));\n\n    for (const field of dompack.qSA<HTMLInputElement | HTMLTextAreaElement>(this.formnode, `[name^='${this.fieldName}.']`)) {\n      this.allFields.set(field.name.substring(prefixLength), new SubField(field, ++fieldpos));\n\n      field.addEventListener(\"change\", event => this._gotFieldChange(event));\n    }\n\n    if (this.orderingData) {\n      this.countryNode.addEventListener(\"change\", () => this._reconfigureFieldOrdering());\n      this._reconfigureFieldOrdering();\n    }\n  }\n\n  _gotFieldChange(event: Event) {\n    if (this._updatingFields)\n      return; // We're updating our own fields\n\n    if (event.target === this.countryNode && this.currentcountry !== this.countryNode.value) {\n      //country changed. clear errors on all fields before revalidating.. otherwise the errors will just seem to 'linger' for a while after switching\n      this._clearErrors();\n      this.currentcountry = this.countryNode.value;\n    }\n\n    if (this._getFieldValue(\"country\") === \"NL\") {\n      if (!this._getFieldValue(\"zip\") || !this._getFieldValue(\"nr_detail\"))\n        return;\n    }\n    this._checkValidity(event);\n  }\n\n  _getFieldValue(fieldname: string) {\n    const data = this.allFields.get(fieldname);\n    if (data)\n      return data.node.value;\n    return \"\";\n  }\n\n  _getFirstCountrySpecificField() {\n    let firstfield = null;\n    for (const [key, field] of this.allFields.entries())\n      if (key !== \"country\" && !field.fieldgroup.classList.contains(\"wh-form__fieldgroup--hidden\") && (!firstfield || firstfield.pos > field.pos))\n        firstfield = field;\n\n    return firstfield ?? throwError(\"Cannot find field for error\");\n  }\n\n  _reconfigureFieldOrdering() {\n    const country = this.countryNode.value;\n    if (country) {\n      const ordering = this.orderingData.find(e => e.countries.length === 0 || e.countries.includes(country));\n      if (ordering) {\n        let prevgroup;\n        for (let idx = 0; idx < ordering.fieldorder.length; ++idx) {\n          const item = this.allFields.get(ordering.fieldorder[idx]);\n          if (!item)\n            continue; //ordering may appear to fields that have not been rendered, eg 'state'\n\n          item.pos = idx + 1;\n          const fieldgroup = item.fieldgroup;\n          if (prevgroup) {\n            const compareres = prevgroup!.compareDocumentPosition(fieldgroup);\n            if (compareres & Node.DOCUMENT_POSITION_PRECEDING)\n              prevgroup!.parentNode!.insertBefore(fieldgroup, prevgroup!.nextSibling);\n          }\n          prevgroup = fieldgroup;\n        }\n      }\n    }\n\n    //street + city should skip client side validation for NL, we will be looking it up server side (FIXME we should consider overwriting our validation to delay validation until address lookups are complete)\n    for (const fieldname of ['street', 'city']) {\n      const field = this.allFields.get(fieldname);\n      if (field)\n        if (country.toUpperCase() === 'NL')\n          field.node.setAttribute(\"data-wh-form-skipnativevalidation\", \"\");\n        else\n          field.node.removeAttribute(\"data-wh-form-skipnativevalidation\");\n    }\n  }\n\n  _clearErrors() {\n    this.allFields.forEach(field => setFieldError(field.node, \"\", { reportimmediately: true }));\n  }\n\n  _getCurState() {\n    const value: HareScriptAddressValue = { country: \"\" };\n    const visiblefields: HTMLElement[] = [];\n    let anyset = false, allrequiredset = true;\n    this.allFields.forEach((field, key) => {\n      if (!field.fieldgroup.classList.contains(\"wh-form__fieldgroup--hidden\")) {\n        visiblefields.push(field.node.closest(\".wh-form__fieldgroup\")!);\n        value[key as keyof HareScriptAddressValue] = field.node.value;\n\n        if (!anyset && key !== 'country' && field.node.value)\n          anyset = true;\n        if (field.node.required && !field.node.value && !field.node.hasAttribute(\"data-wh-form-skipnativevalidation\"))\n          allrequiredset = false;\n      }\n    });\n\n    return { value, visiblefields, anyset, allrequiredset, lookupkey: JSON.stringify(value) };\n  }\n\n  async _checkValidity(event: Event) {\n    const form = FormBase.getForNode(this.formnode) ?? throwError(\"Parent form for address field not yet initialized\");\n    /* we used to clear fields that are no longer visible after a country change, add visible fields to the value we're checking\n       but not sure why. ignoring those fields should be okay? and this is a very eager trigger, so if we really do this, do\n       this on base of the country actually changing, not an external checkbox controlling visibility of the whole country field\n       and a stray update event\n       */\n    const curstate = this._getCurState();\n    if (!curstate.anyset) { //fields are empty..\n      this._clearErrors();\n      return; //then don't validate\n    }\n    if (!curstate.allrequiredset)\n      return; //no need to validate if we don't even have the required fields in place\n\n    let result: HareScriptAddressValidationResult;\n    const lock = dompack.flagUIBusy();\n    try {\n      curstate.visiblefields.forEach(el => el.classList.add(\"wh-form__fieldgroup--addresslookup\"));\n      ++this.numvaliditycalls;\n      result = await verifyHareScriptAddress(curstate.value as HareScriptAddressValue, {\n        lang: form.getLangCode(),\n        checks: (this.node.dataset.checks?.split(' ') ?? []) as AddressChecks[]\n      });\n    } catch (e) {\n      console.error(`Error while validating value: ${e}`);\n      return;\n    } finally {\n      if (--this.numvaliditycalls === 0) //we're the last call\n        curstate.visiblefields.forEach(el => el.classList.remove(\"wh-form__fieldgroup--addresslookup\"));\n\n      lock.release();\n    }\n    if (this._getCurState().lookupkey !== curstate.lookupkey)\n      return; //abandon this _checkValidity call, the field has already changed.\n\n    if (debugFlags.fhv)\n      console.log(`[fhv] Validation result for address '${this.fieldName}': ${result.status}`);\n\n    if (debugFlags.fdv) {\n      if ([\"different_citystreet\", \"incomplete\"].includes(result.status))\n        console.warn(`[fdv] Address validation was performed, processing incomplete address (status: '${result.status}')`);\n      else {\n        console.warn(`[fdv] Ignoring return status '${result.status}' of address validation`);\n        result.status = \"ok\";\n      }\n    }\n\n    this._clearErrors();\n\n    for (const err of result.errors) {\n      const field = this.allFields.get(err.fields[0]) ?? this._getFirstCountrySpecificField();\n      if (field)\n        form.setFieldError(field.node, err.message, { reportimmediately: true });\n    }\n\n    if (result.corrections) {\n      let anychanges = false;\n      this._updatingFields = true;\n\n      for (const [key, newvalue] of Object.entries(result.corrections)) {\n        const field = this.allFields.get(key);\n        if (field && field.node.value !== newvalue) {\n          dompack.changeValue(field.node, newvalue);\n          anychanges = true;\n        }\n      }\n\n      this._updatingFields = false;\n      if (anychanges)\n        form.refreshConditions();\n    }\n  }\n}\n","import type { AddressValue } from \"@webhare/address\";\nimport { stringify, emplace, omit } from \"@webhare/std\";\nimport { getFormService, type HareScriptAddressValidationResult, type HareScriptAddressValue } from \"./formservice\";\n\nexport type { HareScriptAddressValue, HareScriptAddressValidationResult } from \"./formservice\";\n\nexport type AddressChecks = \"nl-zip-suggest\" | \"nl-zip-force\";\n\nexport type AddressValidationStatus = \"ok\" | \"unknown\" | \"error\";\n// not_supported\" | \"ok\" | \"not_enough_data\" | \"invalid_city\" | \"invalid_zip\" | \"invalid_nr_detail\" | \"zip_not_found\" | \"address_not_found\" | \"different_citystreet\" | \"incomplete\" | \"lookup_failed\";\n\nexport interface AddressValidationOptions {\n  checks?: AddressChecks[];\n  lang?: string;\n}\n\nexport interface AddressValidationResult {\n  status: AddressValidationStatus;\n  errors: Array<{\n    ///Fields affected by the error\n    fields: string[];\n    ///Error message in the requested language\n    message: string;\n  }>;\n  corrections: Partial<Record<keyof AddressValue, string>> | null;\n}\n\nlet lookupcache: Map<string, Promise<AddressValidationResult>> | undefined;\n\nexport async function verifyHareScriptAddress(address: HareScriptAddressValue, options: AddressValidationOptions = {}): Promise<HareScriptAddressValidationResult> {\n  if (!lookupcache)\n    lookupcache = new Map<string, Promise<AddressValidationResult>>;\n\n  const lookupkey = stringify({ address, options }, { stable: true });\n  const lookup = emplace(lookupcache, lookupkey, {\n    insert: () => getFormService().verifyAddress(location.pathname, address, options)\n  });\n  return await lookup;\n}\n\nexport async function verifyAddress(address: AddressValue, options: AddressValidationOptions = {}): Promise<AddressValidationResult> {\n  if (!lookupcache)\n    lookupcache = new Map<string, Promise<AddressValidationResult>>;\n\n  // convert houseNumber to nr_detail\n  const hsAddress = { ...omit(address, [\"houseNumber\"]), nr_detail: address.houseNumber };\n\n  const hsresult = await verifyHareScriptAddress(hsAddress, options);\n\n  // back-convert nr_detail to houseNumber\n  let corrections: AddressValidationResult[\"corrections\"] = null;\n  if (hsresult.corrections) {\n    corrections = {};\n    for (const [key, value] of Object.entries(hsresult.corrections) as Array<[keyof HareScriptAddressValue, string]>) {\n      corrections[key === \"nr_detail\" ? \"houseNumber\" as const : key] = value;\n    }\n  }\n  return {\n    status: hsresult.status,\n    errors: hsresult.errors.map(error => ({ fields: error.fields.map(f => f === \"houseNumber\" ? \"nr_detail\" : f), message: error.message })),\n    corrections,\n  };\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/jsonrpc-client\" {\n}\n\nimport { debugFlags, backendBase } from \"@webhare/env\";\nimport { type StackTrace, parseTrace, prependStackTrace, type PromisifyFunctionReturnType } from \"@webhare/js-api-tools\";\n\n//just number RPCs globally instead of per server, makes debug ouput more useful\nlet globalseqnr = 0;\n\nexport interface RPCCallOptions {\n  /** Append function name to URLs. Purely for better logging/visibility as the WebHare JSONRPC server will ignore it */\n  addfunctionname?: boolean;\n  /** Custom URL marker */\n  urlappend?: string;\n  /** Call timeout */\n  timeout?: number;\n  /** Abort signal to cancel the RPC */\n  signal?: AbortSignal;\n  /** Retry on 429 */\n  retry429?: boolean;\n  /** Silent - do not log errors */\n  silent?: boolean;\n  /** Debug (Follows 'rpc' debugflag if not explicity specified) */\n  debug?: boolean;\n  /** Wrap result with response info */\n  wrapresult?: boolean;\n  keepalive?: boolean;\n  /** Headers to submit (Eg Authorization) */\n  headers?: Record<string, string>;\n  /** Base URL for service paths */\n  baseUrl?: string;\n  /** Overide fetch credentials option (defaults to same-origin) */\n  credentials?: RequestCredentials;\n}\n\nexport type RequestID = number | string | null;\n\nexport interface JSONRPCBaseResponse {\n  id: RequestID;\n  debug?: {\n    consoleLog: Array<{\n      //TODO this is Serialized<ConsoleLogItem[]> - should probably rename it to SerializedToJSON and move to std or env ?\n      /** Date when console function was called */\n      when: string;\n      /** `console` method that was called (eg 'log') */\n      method: string;\n      /** Logged data */\n      data: string;\n      /** Location of caller */\n      location?: {\n        filename: string;\n        line: number;\n        col: number;\n        func: string;\n      };\n      /** Codecontext */\n      codeContextId?: string;\n    }>;\n  };\n}\n\nexport interface JSONRPCSuccesfulResponse extends JSONRPCBaseResponse {\n  error: null;\n  result: unknown;\n}\n\nexport interface JSONRPCErrorResponse extends JSONRPCBaseResponse {\n  result: null;\n  error: {\n    code: number;\n    message: string;\n    data?: {\n      trace?: StackTrace;\n    };\n  };\n}\n\nexport type JSONRPCResponse = JSONRPCSuccesfulResponse | JSONRPCErrorResponse;\n\nfunction getDebugAppend() {\n  if (typeof window !== \"undefined\" && typeof window.location !== \"undefined\") {\n    const urldebugvar = new URL(window.location.href).searchParams.get(\"wh-debug\");\n    if (urldebugvar)\n      return '?wh-debug=' + encodeURIComponent(urldebugvar);\n  }\n  return '';\n}\n\nclass ControlledCall {\n  client: RPCClient;\n  options: RPCCallOptions;\n  abortcontroller: AbortController;\n  timeout?: number;\n  _callurl: string;\n  _fetchoptions: RequestInit;\n  promise: Promise<unknown>;\n  timedout?: boolean;\n  aborted?: boolean;\n\n  constructor(client: RPCClient, method: string, stack: StackTrace | null, id: number, options: RPCCallOptions, callurl: string, fetchoptions: RequestInit) {\n    this.client = client;\n    this.options = options;\n\n    // if(options.timeout || options.signal) //as long as rpcResolve exists, we'll ALWAYS need to setup a controller\n    {\n      this.abortcontroller = new AbortController;\n      fetchoptions.signal = this.abortcontroller.signal;\n\n      if (options.timeout && options.timeout > 0) {\n        this.timeout = options.timeout;\n        setTimeout(() => this._handleTimeout(), options.timeout);\n      }\n      if (options.signal) {\n        options.signal.addEventListener(\"abort\", () => this._abort());\n      }\n    }\n\n    this._callurl = callurl;\n    this._fetchoptions = fetchoptions;\n\n    const fetchpromise = fetch(this._callurl, this._fetchoptions);\n    this.promise = this._completeCall(method, stack, id, fetchpromise) as Promise<unknown>;\n  }\n  _handleTimeout() {\n    this.timedout = true;\n    this.abortcontroller.abort();\n  }\n  _abort() {\n    this.aborted = true;\n    this.abortcontroller.abort();\n  }\n\n  async _completeCall(method: string, requestStack: StackTrace | null, id: number, fetchpromise: Promise<Response>) {\n    let response;\n    try {\n      for (; ;) { //loop to handle \"429 Conflict\"s\n        response = await fetchpromise;\n        if (response.status === 429 && !(\"retry429\" in this.options && !this.options.retry429) && response.headers.get(\"Retry-After\")) {\n          const retryafter = parseInt(response.headers.get(\"Retry-After\") || \"\");\n          if (this.client.debug)\n            console.warn(`[rpc] We are being throttled (429 Too Many Requests) - retrying after ${retryafter} seconds`);\n\n          await new Promise(resolve => setTimeout(resolve, retryafter * 1000));\n          fetchpromise = fetch(this._callurl, this._fetchoptions);\n          continue;\n        }\n        break;\n      }\n    } catch (exception) {\n      if (this.client.debug)\n        console.log(`[rpc] #${id} Exception invoking '${method}'`, exception);\n\n      if (this.aborted)\n        throw new Error(`RPC Aborted`);\n      else if (this.timedout)\n        throw new Error(`RPC Timeout: timeout was set to ${this.timeout} milliseconds`);\n      else\n        throw new Error(`RPC Failed: exception: ` + exception);\n    }\n\n    let jsonresponse;\n    try {\n      jsonresponse = await response.json() as JSONRPCResponse;\n      if (jsonresponse?.debug) {\n        if (jsonresponse.debug.consoleLog) {\n          for (const logitem of jsonresponse.debug.consoleLog) {\n            //should we log 'when'? it's getting more and more noisy then though....\n            //TODO should we match the remote's method (after validating) or just keep eveyrthing at 'log' ?\n            console.log(`[remote:${logitem.method}] ${logitem.location ? `${logitem.location.filename.split(\"/\").at(-1)}:${logitem.location.line}: ` : ''}${logitem.data}`);\n          }\n        }\n\n        delete jsonresponse.debug; //reduce noise in later logs\n      }\n\n      if (this.client.debug)\n        console.log(`[rpc] #${id} Received response to '${method}'`, jsonresponse);\n    } catch (exception) {\n      if (this.client.debug)\n        console.warn(`[rpc] #${id} Response was not valid JSON`, exception);\n    }\n\n    if (!jsonresponse)\n      throw new Error(\"RPC Failed: Invalid JSON/RPC response received\");\n\n    if (jsonresponse?.error) {\n      const err = new Error(\"RPC Error: \" + (jsonresponse.error.message || \"Unknown error\"));\n      if (jsonresponse.error.data?.trace) {\n        try {\n          prependStackTrace(err, jsonresponse.error.data.trace);\n        } catch (err2) {\n          //ignore stacktrace manipulation error\n        }\n      }\n\n      if (!this.options.silent)\n        this.client._tryLogError(requestStack, err);\n      throw err;\n    }\n\n    if (response.status === 200 && jsonresponse && jsonresponse.id !== id)\n      throw new Error(\"RPC Failed: Invalid JSON/RPC response received\");\n\n    if (this.options.wrapresult) {\n      return {\n        status: response.status,\n        result: jsonresponse.result || null,\n        error: jsonresponse.error || null,\n        retryafter: response.headers.get(\"Retry-After\") ? parseInt(response.headers.get(\"Retry-After\") || \"\") : null\n      };\n    }\n\n    return jsonresponse.result;\n  }\n}\n\n/** Invokes (WebHare) JSON/RPC\n    @param url - URL to invoke (leave empty or pass no parameters at all to callback to the current page)\n    */\nclass RPCClient {\n  url: string;\n  addfunctionname: boolean;\n  urlappend: string;\n  options: RPCCallOptions;\n  whservicematch: RegExpMatchArray | null;\n\n  constructor(url: string, options?: RPCCallOptions) {\n    this.options = {\n      timeout: 0,\n      debug: false,\n      ...options\n    };\n\n    if (!url)\n      throw new Error(`You must specify either a WebHare service name or a full URL`);\n\n    this.url = url;\n    this.whservicematch = this.url.match(/^([a-z0-9_]+):([a-z0-9_]+)$/);\n    //if shorthand syntax is used, we know we're talking to our local webhare. add function names and the profiling flag if needed\n    this.addfunctionname = this.options.addfunctionname !== undefined ? this.options.addfunctionname : Boolean(this.whservicematch);\n    this.urlappend = this.options.urlappend !== undefined ? this.options.urlappend : this.whservicematch ? getDebugAppend() : \"\";\n  }\n\n  get debug() {\n    return this.options.debug || debugFlags.rpc;\n  }\n\n  _tryLogError(requestStack: StackTrace | null, error: Error) {\n    console.group();\n    console.warn(\"RPC failed:\", error);\n    if (requestStack) {\n      console.warn(\"Stack at calling point\");\n      console.log(requestStack);\n    }\n    console.groupEnd();\n  }\n\n  //calculate the final URL. delayed here so services can be created on import (getDefaultRPCBase may require waiting for service.ready)\n  private getURL() {\n    //wh_services are always in the root (and soon inside /.wh)\n    const url = this.whservicematch ? `/wh_services/${this.whservicematch[1]}/${this.whservicematch[2]}` : this.url;\n    if (url.match(/^https?:\\/\\//))\n      return url;\n\n    if (this.options.baseUrl)\n      return new URL(url, this.options.baseUrl).toString();\n    else if (backendBase)\n      return backendBase + (backendBase.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);\n    else\n      throw new Error(`You must set the baseUrl option when using the JSONRPC Client without a full URL outside Webhare`);\n  }\n\n  invoke(method: string, params: unknown[]) {\n    //build the URL, add profiling and function parameters where needed\n    let callurl = this.getURL();\n    if (this.addfunctionname) //simplifies log analysis, ignored by the server\n      callurl += `/${method}`;\n    callurl += this.urlappend;\n\n    const id = ++globalseqnr;\n    let requestStack: StackTrace | null = null;\n\n    if (this.debug) {\n      requestStack = parseTrace(new Error);\n      console.log(`[rpc] #${id} Invoking '${method}'`, params, callurl);\n    }\n\n    const fetchoptions: RequestInit = {\n      method: \"POST\",\n      credentials: this.options.credentials || 'same-origin', //this is the default since 2017-08-25, but Edge pre-18 is still around and will fail here\n      headers: {\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        ...this.options.headers\n      },\n      body: JSON.stringify(\n        {\n          id: id,\n          method: method,\n          params: params || []\n        }),\n      keepalive: Boolean(this.options.keepalive)\n    };\n\n    return new ControlledCall(this, method, requestStack, id, this.options, callurl, fetchoptions).promise;\n  }\n}\n\ntype ServiceBase<T> = {\n  withOptions(options: RPCCallOptions): T & ServiceBase<T>;\n};\n\nclass ServiceProxy<T> {\n  client: RPCClient;\n\n  constructor(client: RPCClient) {\n    this.client = client;\n  }\n\n  get(target: object, prop: string, receiver: unknown) {\n    if (prop === 'withOptions') { //create a withOptions function\n      return (options: RPCCallOptions) => {\n        const newoptions = {\n          ...this.client.options,\n          ...options,\n          headers: { ...this.client.options.headers, ...options.headers }\n        };\n        return createClient<T>(this.client.url, newoptions);\n      };\n    }\n\n    return (...args: unknown[]) => this.client.invoke(prop, args);\n  }\n}\n\n\n/** Creates an async version of the functions in a class\n * @typeParam ServiceType - Type definition of the service class that implements this service.\n*/\ntype ConvertToRPCInterface<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- using any is needed for this type definition\n  [K in Exclude<keyof ServiceType, `_${string}` | \"close\" | \"emit\"> as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? PromisifyFunctionReturnType<ServiceType[K]> : never;\n};\n\n/** Get the client interface type as would be returned by createClient */\nexport type GetClientInterface<Client> = ConvertToRPCInterface<Client> & ServiceBase<ConvertToRPCInterface<Client>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- If you don't care to type the service, just assume it can do anything\nexport function createClient<Client = any>(servicename: string, options?: RPCCallOptions): GetClientInterface<Client> {\n  const rpcclient = new RPCClient(servicename, options);\n  return new Proxy({}, new ServiceProxy<Client>(rpcclient)) as GetClientInterface<Client>;\n}\n","var UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n  var lines = stackString.split('\\n');\n  return lines.reduce(function (stack, line) {\n    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n    if (parseResult) {\n      stack.push(parseResult);\n    }\n\n    return stack;\n  }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n  var parts = chromeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n  var submatch = chromeEvalRe.exec(parts[2]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1]; // url\n\n    parts[3] = submatch[2]; // line\n\n    parts[4] = submatch[3]; // column\n  }\n\n  return {\n    file: !isNative ? parts[2] : null,\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: isNative ? [parts[2]] : [],\n    lineNumber: parts[3] ? +parts[3] : null,\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n  var parts = winjsRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n  var parts = geckoRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n  var submatch = geckoEvalRe.exec(parts[3]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1];\n    parts[4] = submatch[2];\n    parts[5] = null; // no column when eval\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: parts[2] ? parts[2].split(',') : [],\n    lineNumber: parts[4] ? +parts[4] : null,\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n  var parts = javaScriptCoreRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[4],\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n  var parts = nodeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nexport { parse };\n","import * as stacktrace_parser from \"stacktrace-parser\";\n\nexport type StackTraceItem = {\n  filename: string;\n  line: number;\n  col: number;\n  func: string;\n};\n\nexport type StackTrace = StackTraceItem[];\n\nexport function parseTrace(e: Error): StackTrace {\n  if (!e?.stack)\n    return [];\n\n  const trace = stacktrace_parser.parse(e.stack);\n  return trace.map(i => ({ filename: i.file || \"\", line: i.lineNumber || 1, col: i.column || 1, func: (i.methodName || \"\") }));\n}\n\nexport function getStackTrace(): StackTrace {\n  return parseTrace(new Error()).slice(1);\n}\n\nexport function formatTrace(trace: StackTraceItem[]): string {\n  return trace.map(e =>\n    `    at ${e.func} (${e.filename}:${e.line}:${e.col})`).join(\"\\n\");\n}\n\nexport function prependStackTrace(error: Error, trace: StackTrace) {\n  if (!error.stack)\n    return; //no stack to manipulate\n\n  const stacklines = error.stack?.split(\"\\n\") || [];\n  const tracelines = formatTrace(trace);\n  error.stack = (stacklines[0] ? stacklines[0] + \"\\n\" : \"\") + tracelines + '\\n' + (stacklines.slice(1).join(\"\\n\"));\n  return error;\n}\n","import { levenshteinDistance } from \"@webhare/std\";\n\n/** Find the best match for a string fiven a list of alternatives. Defaults to case insensitive match.\n    @param name - Name to search\n    @param alternatives - Alternatives to choose from\n    @param matchCase - Do a case sensitive compare (defaults to FALSE)\n    @returns Best match or null if none found\n*/\nexport function getBestMatch(name: string, alternatives: string[], { matchCase = false } = {}): string | null {\n  if (!matchCase)\n    name = name.toLowerCase();\n\n  const threshold = name.length < 3 ? 1 : 2;\n  const matches = alternatives.\n    map((value) => ({ value, distance: levenshteinDistance(name, matchCase ? value : value.toLowerCase()) })).\n    filter((match) => match.distance <= threshold).\n    sort((a, b) => a.distance - b.distance);\n\n  return matches[0]?.value || null;\n}\n\n/** Return match info as text to append to the end of a message\n    @param name - Name to search\n    @param alternatives - Alternatives to choose from\n    @param matchCase - Do a case sensitive compare (defaults to FALSE)\n    @returns Returns \", did you mean 'XXX'?\" text if a better match was found, otherwise an empty string\n    @example throw new Error(`${libname} does not export '${name}'${addBestMatch(name, Object.keys(lib))}`);\n\n*/\nexport function addBestMatch(name: string, alternatives: string[], { matchCase = false } = {}): string {\n  const match = getBestMatch(name, alternatives, { matchCase });\n  return match ? `, did you mean '${match}'?` : \"\";\n}\n","import { createClient, type GetClientInterface } from \"@webhare/jsonrpc-client\";\nimport type { AddressValidationOptions, AddressValidationStatus } from \"./address\";\nimport type { FormSubmitResult } from \"@mod-publisher/js/forms/formbase\";\nimport type { EmailValidationResult, RPCFormTarget, RPCFormInvokeRPC, RPCFormSubmission, RPCFormMessage } from \"./types\";\nimport type { FormService } from \"@mod-publisher/lib/internal/forms/service\";\nimport type { AddressValue } from \"@webhare/address\";\nimport type { CaptchaProvider } from \"@mod-publisher/js/captcha/api\";\n\n\n/// HareScript uses 'nr_detail' instead of 'houseNumber'\nexport type HareScriptAddressValue = Omit<AddressValue, \"houseNumber\"> & { nr_detail?: string };\n\nexport interface HareScriptAddressValidationResult {\n  status: AddressValidationStatus;\n  errors: Array<{\n    ///Fields affected by the error\n    fields: string[];\n    ///Error message in the requested language\n    message: string;\n  }>;\n  corrections: Partial<Record<keyof HareScriptAddressValue, string>> | null;\n}\n\nexport interface PublisherFormService {\n  /** Validate an email address for validity (including against server configured correction/blacklists)\n   *\n   * @param langcode - Language code for messages\n   * @param emailaddress - Address to validate\n   * @returns Validation result\n   */\n  validateEmail(langcode: string, emailaddress: string): Promise<EmailValidationResult>;\n\n  formValidateEmail(target: RPCFormTarget & { field: string }, emailaddress: string): Promise<EmailValidationResult>;\n\n  /** Get an image from a remote URL */\n  getImgFromRemoteURL(imageurl: string): Promise<string>;\n\n  /** Get the final image URL to use */\n  getUploadedFileFinalURL(uploadurl: string): Promise<string>;\n\n  validateEmbeddedObjects(objrefs: string[]): Promise<{ tokill: string[] }>;\n\n  /** Verify address */\n  verifyAddress(url: string, address: HareScriptAddressValue, options: AddressValidationOptions): Promise<HareScriptAddressValidationResult>;\n\n  formSubmit(submitinfo: RPCFormSubmission): Promise<FormSubmitResult>;\n\n  formInvoke(submitinfo: RPCFormInvokeRPC): Promise<{\n    messages: RPCFormMessage[];\n    result: unknown;\n  }>;\n\n  requestBuiltinForm(submitinfo: RPCFormTarget, filename: string, formname: string): Promise<{ html: string }>;\n\n  /** Get captcha configuration. This is needed when the form will preactivate captchas (if form submission requests a captcha it will transmit provider setting in the error metadata) */\n  getCaptchaConfiguration(submitinfo: RPCFormTarget): Promise<CaptchaProvider | null>;\n}\n\nlet hsformservice: GetClientInterface<PublisherFormService> | undefined;\nlet tsformservice: GetClientInterface<FormService> | undefined;\n\nexport function getFormService(): GetClientInterface<PublisherFormService> {\n  hsformservice ||= createClient<PublisherFormService>(\"publisher:forms\");\n  return hsformservice;\n}\n\nexport function getTSFormService(): GetClientInterface<FormService> {\n  tsformservice ||= createClient<FormService>(\"publisher:formsts\");\n  return tsformservice;\n}\n","import { isValidDate, isValidTime } from '@webhare/std';\n\nexport function formatDate(dateformat: string, year: number, month: number, day: number): string {\n  if (!isValidDate(year, month, day, { minYear: 1 }))\n    return '';\n\n  let output = '';\n\n  for (const c of dateformat.split(\"\")) {\n    switch (c.toUpperCase()) {\n      case \"Y\":\n        output += ('000' + year).slice(-4);\n        break;\n      case \"M\":\n        output += ('0' + month).slice(-2);\n        break;\n      case \"D\":\n        output += ('0' + day).slice(-2);\n        break;\n      default:\n        output += c;\n        break;\n    }\n  }\n  return output;\n}\n\nexport function formatISODate(year: number, month: number, date: number) {\n  return formatDate(\"Y-M-D\", year, month, date);\n}\n\nexport function formatISOTime(hour: number, minute: number, second: number | null, msec: number | null) {\n  if (!isValidTime(hour, minute, second !== null ? second : 0, msec !== null ? msec : 0))\n    return '';\n\n  let time = ('0' + hour).slice(-2) + ':' + ('0' + minute).slice(-2);\n  if (second !== null)\n    time += ':' + ('0' + second).slice(-2);\n  if (msec !== null)\n    time += '.' + ('00' + msec).slice(-3);\n  return time;\n}\n\nexport interface DateParts {\n  day: number;\n  month: number;\n  year: number;\n}\n\nexport function parseDate(format: string, newdate: string, options?: { nofail: boolean }): DateParts | null {\n  if (!newdate) //empty\n    return null;\n\n  //replace . and / with -\n  const setdate = newdate.replace(/[./]/g, '-');\n  const parts = setdate.split('-');\n\n  if (parts.length === 3) { //parseable\n    format = format.toLowerCase();\n    const dayoffset = format.indexOf('d');\n    const monthoffset = format.indexOf('m');\n    const yearoffset = format.indexOf('y');\n\n    const daypos = 0 + (dayoffset > monthoffset ? 1 : 0) + (dayoffset > yearoffset ? 1 : 0);\n    const monthpos = 0 + (monthoffset > dayoffset ? 1 : 0) + (monthoffset > yearoffset ? 1 : 0);\n    const yearpos = 0 + (yearoffset > dayoffset ? 1 : 0) + (yearoffset > monthoffset ? 1 : 0);\n\n    const day = parseInt(parts[daypos], 0);\n    const month = parseInt(parts[monthpos], 0);\n    const year = parseInt(parts[yearpos], 0);\n\n    // The browser will always add 1900 for years 0-99, so handle years < 100\n    // if (year >= 0 && year < 100 && this.options.cutoffyear > 0)\n    // {\n    //   if (year < this.options.cutoffyear)\n    //     year += 2000;\n    //   else\n    //     year += 1900;\n    // }\n    if (isValidDate(year, month, day))\n      return { year, month, day };\n  }\n  if (options && options.nofail)\n    return null;\n\n  throw new Error(`Invalid date value: '${newdate}'`);\n}\n\n//compare two dates. return -1 if lhs<rhs, 0 if lhs==rhs, 1 if lhs>rhs\nexport function compareDate(lhs: DateParts | null, rhs: DateParts | null) {\n  if (!lhs)\n    return rhs ? -1 : 0; //if rhs is set, <null> is before anything. oterhwise equal\n  else if (!rhs)\n    return 1; //lhs must be set, so lhs>rhs\n\n  return lhs.year < rhs.year ? -1\n    : lhs.year > rhs.year ? 1\n      : lhs.month < rhs.month ? -1\n        : lhs.month > rhs.month ? 1\n          : lhs.day < rhs.day ? -1\n            : lhs.day > rhs.day ? 1\n              : 0;\n}\n\nexport function parseISODate(newdate: string, options?: { nofail: boolean }) {\n  return parseDate('y-m-d', newdate, options);\n}\n\nexport function getLocalToday(): DateParts {\n  const today = new Date;\n  return { year: today.getFullYear(), month: 1 + today.getMonth(), day: today.getDate() };\n}\n\nexport function parseISOTime(intime: string, { nofail = false } = {}) {\n  const split = intime.match(/^([0-9]+):([0-9]+)(:([0-9]+))?(\\.([0-9]+))?$/);\n  if (split) {\n    const hour = parseInt(split[1], 10);\n    const minute = parseInt(split[2], 10);\n    const second = parseInt(split[4] || \"0\", 10);\n    const msec = parseInt(split[6] || \"0\", 10);\n    return { hour, minute, second, msec };\n  }\n  if (nofail)\n    return undefined;\n\n  throw new Error(`Invalid time value: '${intime}'`);\n}\n\nexport function getWeekNumber(jsdate: Date) {\n  jsdate = new Date(jsdate); //don't modify the caller's date!\n  jsdate.setHours(0, 0, 0, 0);\n  // Thursday in current week decides the year.\n  jsdate.setDate(jsdate.getDate() + 3 - (jsdate.getDay() + 6) % 7);\n  // January 4 is always in week 1.\n  const week1 = new Date(jsdate.getFullYear(), 0, 4);\n  // Adjust to Thursday in week 1 and count number of weeks from jsdate to week1.\n  return 1 + Math.round(((jsdate.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n}\n\nexport function makeJSUTCDate(dateparts: DateParts) {\n  return new Date(Date.UTC(dateparts.year, dateparts.month - 1, dateparts.day));\n}\n\nexport function formatJSUTCISODate(dateobj: Date) {\n  return dateobj.getUTCFullYear() + '-' + ('0' + (dateobj.getUTCMonth() + 1)).slice(-2) + '-' + ('0' + dateobj.getUTCDate()).slice(-2);\n}\n","import * as dompack from 'dompack';\nimport { qSA } from 'dompack';\nimport * as datetime from 'dompack/types/datetime';\nimport AddressField from '@mod-publisher/js/forms/fields/addressfield';\nimport { setupValidator } from './customvalidation';\n\nimport { getTid } from \"@webhare/gettid\";\nimport { formatDate, parseISODate } from './datehelpers';\nimport { isValidDate } from '@webhare/std';\n\nfunction validateCheckboxGroup(groupnode: HTMLElement) {\n  const nodes = dompack.qSA<HTMLInputElement>(groupnode, \"input[type='checkbox']\");\n  const min = Number(groupnode.dataset.whMin) || 0;\n  const max = Number(groupnode.dataset.whMax) || 0;\n\n  const anyenabled = nodes.some(node => !node.disabled);\n  const numChecked = nodes.filter(node => node.checked).length;\n\n  if (anyenabled) {\n    if (numChecked < min)\n      return getTid(\"publisher:site.forms.commonerrors.mincheck\", min);\n    else if (max > 0 && numChecked > max)\n      return getTid(\"publisher:site.forms.commonerrors.maxcheck\", max);\n  }\n}\n\nfunction validateRadioGroup(groupnode: HTMLElement) {\n  const nodes = dompack.qSA<HTMLInputElement>(groupnode, \"input[type='radio']\");\n  const isrequired = nodes.some(node => node.required);\n\n  if (isrequired) {\n    const isanychecked = nodes.some(node => node.checked && !node.disabled);\n    if (!isanychecked)\n      return getTid(\"publisher:site.forms.commonerrors.required\");\n  }\n}\n\nexport function reformatDate(datestr: string): string {\n  const parsed = parseISODate(datestr);\n  return parsed ? formatDate(\"D-M-Y\", parsed.year, parsed.month, parsed.day) : \"\";\n}\n\nfunction validateDate(date: HTMLInputElement) {\n  if (date.getAttribute('type') !== 'date') //it's no longer a date field\n    return '';\n  if (!date.value) //any required checks should be handled by the HTML5 compat layer, nothing for us to check\n    return '';\n\n  const dateparts = date.value.match(/^([0-9]+)-([0-9]+)-([0-9]+)$/) || [];\n  const year = parseInt(dateparts[1]), month = parseInt(dateparts[2]), day = parseInt(dateparts[3]);\n  if (!isValidDate(year, month, day))\n    return getTid(\"publisher:site.forms.commonerrors.default\");\n\n  const normalizeddate = ('0000' + year).substr(-4) + '-' + ('00' + month).substr(-2) + '-' + ('00' + day).substr(-2);\n  const min = date.getAttribute(\"min\"), max = date.getAttribute(\"max\");\n  if (min && normalizeddate < min)\n    return getTid(\"publisher:site.forms.commonerrors.min\", reformatDate(min));\n  if (max && normalizeddate > max)\n    return getTid(\"publisher:site.forms.commonerrors.max\", reformatDate(max));\n\n  return '';\n}\n\nfunction validateTime(time: HTMLInputElement) {\n  if (time.getAttribute('type') !== 'time') //it's no longer a time field\n    return '';\n  if (!time.value) //any required checks should be handled by the HTML5 compat layer, nothing for us to check\n    return '';\n\n  const timeparts = time.value.match(/^([0-9]+):([0-9]+)(:([0-9]+))?$/) || [];\n  const hours = parseInt(timeparts[1]), minutes = parseInt(timeparts[2]), seconds = parseInt(timeparts[3]);\n  if (isNaN(hours) || isNaN(minutes) || hours < 0 || hours > 23 || minutes < 0 || minutes > 59 || (!isNaN(seconds) && (seconds < 0 || seconds > 59)))\n    return getTid(\"publisher:site.forms.commonerrors.default\");\n\n  return '';\n}\n\nexport function setup(form: HTMLElement) {\n  for (const datecontrol of qSA<HTMLInputElement>(form, 'input[type=date]')) {\n    for (const field of ['whMin', 'whMax', 'whValue'])\n      if (datecontrol.dataset[field]) {\n        //parse 'now' or 'now+5d'. be able to extract '+5d'\n        const datematch = datecontrol.dataset[field]!.match(/^now((\\+|-)\\d+d)?$/);\n\n        if (datematch) {\n          const propname = field.substr(2).toLowerCase();\n          let thedate;\n          if (datematch[1])\n            thedate = new Date(Date.now() + parseInt(datematch[1]) * 86400 * 1000);\n          else\n            thedate = new Date;\n\n          (datecontrol as unknown as Record<string, string>)[propname] = datetime.getISOLocalDate(thedate);\n        }\n      }\n\n    if (datecontrol.type !== 'date' && !datecontrol.whValidationPolyfilled) { //this browser doesn't natively support date fields\n      datecontrol.whValidationPolyfilled = true;\n      //ADDME some sort of global validator would be better so we don't get confused by fields that change their type\n      setupValidator(datecontrol, validateDate);\n    }\n  }\n\n  for (const timecontrol of qSA<HTMLInputElement>(form, 'input[type=time][data-wh-value]')) {\n    //parse 'now'\n    //ADDME: Support for stuff like 'now + 15 minutes' 'next whole hour + 2.5 hours'?\n    const timematch = timecontrol.dataset.whValue!.match(/^now$/);\n\n    if (timematch) {\n      const thedate = new Date;\n\n      let propvalue = ('0' + thedate.getHours()).substr(-2) + '-' + ('0' + thedate.getMinutes()).substr(-2);\n      if (parseInt(timecontrol.getAttribute(\"step\") || '0') % 60) //step not multiple of 60? seconds\n        propvalue += '-' + ('0' + thedate.getSeconds()).substr(-2);\n      timecontrol.value = propvalue;\n    }\n\n    if (timecontrol.type !== 'time' && !timecontrol.whValidationPolyfilled) { //this browser doesn't natively support time fields\n      timecontrol.whValidationPolyfilled = true;\n      //ADDME some sort of global validator would be better so we don't get confused by fields that change their type\n      setupValidator(timecontrol, validateTime);\n    }\n  }\n\n  // Setup checkbox group (min/max checked) validation\n  for (const checkboxgroup of qSA(form, \".wh-form__fieldgroup--checkboxgroup\"))\n    setupValidator(checkboxgroup, validateCheckboxGroup);\n\n  // Setup radio group (hidden/disabled) validation\n  for (const radiogroup of qSA(form, \".wh-form__fieldgroup--radiogroup\")) {\n    setupValidator(radiogroup, validateRadioGroup);\n\n    //we should probably disable by name (or form.elements[name] but validate() and form isn't really tracking name either...\n    dompack.qSA<HTMLInputElement>(radiogroup, `input[type='radio']`).forEach(\n      node => node.dataset.whFormSkipnativevalidation = \"true\"); //don't handle by both RadioGroupField *and* native validation\n\n  }\n\n  // Setup address field validation\n  for (const addresscontrol of qSA(form, \".wh-form__fieldgroup--addressfield\"))\n    new AddressField(addresscontrol);\n}\n","export interface FormFieldLike extends HTMLElement {\n  disabled: boolean;\n  name: string;\n  required: boolean;\n  value: unknown;\n}\n\n/** Base class for customElements that need to act as WebHare (Publisher) form elements */\nexport abstract class JSFormElement<ValueType> extends HTMLElement implements FormFieldLike {\n  static formAssociated = true;\n  static observedAttributes = [\"required\", \"disabled\"];\n\n  // #internals = this.attachInternals();\n\n  constructor() {\n    super();\n  }\n\n  get name() {\n    return this.getAttribute('name') || '';\n  }\n  set name(newname: string) {\n    this.setAttribute('name', newname);\n  }\n  get required(): boolean {\n    return this.hasAttribute('required');\n  }\n  set required(required: boolean) {\n    if (required)\n      this.setAttribute(\"required\", \"\");\n    else\n      this.removeAttribute(\"required\");\n\n    this.refreshState();\n  }\n\n  get disabled(): boolean {\n    return this.hasAttribute('disabled');\n  }\n  set disabled(disable: boolean) {\n    if (disable)\n      this.setAttribute(\"disabled\", \"\");\n    else\n      this.removeAttribute(\"disabled\");\n\n    this.refreshState();\n  }\n\n  abstract value: ValueType;\n\n  /** Invoked whenever disabled/required states change */\n  protected refreshState() {\n  }\n\n  attributeChangedCallback(name: string, oldValue: unknown, newValue: unknown) {\n    if ([\"disabled\", \"required\"].includes(name))\n      this.refreshState();\n  }\n}\n","/* Support APIs to deal with DOM native form elements (eg input, select, textarea) */\n\nimport type FormBase from '@mod-publisher/js/forms/formbase';\nimport { reformatDate } from \"@mod-publisher/js/forms/internal/webharefields\";\nimport { getTid } from \"@webhare/gettid\";\nimport { isFormControl, isHTMLElement, qSA, type FormControlElement } from \"@webhare/dompack\";\nimport type { FormCondition } from \"./types\";\nimport { JSFormElement, type FormFieldLike } from \"./jsformelement\";\nimport { throwError } from '@webhare/std';\n\nexport type ConstrainedRadioNodeList = RadioNodeList & NodeListOf<HTMLInputElement>;\n\n//Query elements that are likely to be formfieldlike. Anything with a [name] but not eg button (and not data-wh-form-name which usually relies on getformvalue events)\nexport const queryFormFieldLike = `[name]:not(button):not(a):not(output)`;\n\nexport function isInputElement(field: Element): field is HTMLInputElement {\n  return isHTMLElement(field) && field.tagName === 'INPUT';\n}\n\n/// Implements required, disabled, ..\nexport function isFormFieldLike(control: HTMLElement): control is FormFieldLike {\n  return isFormControl(control as HTMLElement) || control instanceof JSFormElement;\n}\n\nexport function isRadioOrCheckbox(field: Element): field is HTMLInputElement {\n  return isInputElement(field) && [\"radio\", \"checkbox\"].includes(field.type);\n}\n\n// Constrains the RadioNodeList type to only return HTMLInputElements. reduces number of casts we need\nexport function isRadioNodeList(el: RadioNodeList | Element): el is ConstrainedRadioNodeList {\n  return el instanceof RadioNodeList;\n}\n\nexport function getFieldName(field: HTMLElement): string {\n  return field.dataset.whFormName || (field as HTMLInputElement).name || '';\n}\n\nexport function setFieldName(field: HTMLElement, newname: string) {\n  if (field.dataset.whFormName !== undefined)\n    field.dataset.whFormName = newname;\n  else if ((field as HTMLInputElement).name !== undefined)\n    (field as HTMLInputElement).name = newname;\n  else\n    throw new Error('Cannot set name on field without existing name');\n}\n\nexport function getFieldDisplayName(field: HTMLElement | ConstrainedRadioNodeList): string {\n  if (isRadioNodeList(field))\n    return `radiogroup '${(field.item(0) as HTMLInputElement)?.name || (field.item(0) as HTMLElement)?.id || '<unnamed>'}'`;\n  if (isFormControl(field))\n    return `native field '${field.name || field.id || '<unnamed>'}'`;\n  if (field.dataset.whFormName)\n    return `custom field '${field.dataset.whFormName || field.id || '<unnamed>'}'`;\n  if (field.classList.contains('wh-form__fieldgroup'))\n    return `field group '${field.dataset.whFormGroupFor || field.id || '<unnamed>'}'`;\n  return `${field.tagName} element '${field.id || '<unnamed>'}'`;\n}\n\n/** The WH Form rendering generates wh-fileedit elements. If no handler is detected for them, we downgrade them to input type=file before\n *  the form actually sets up its handler (it's still safe to rewrite top level form elements then)\n*/\nexport function downgradeUploadFields(form: HTMLElement) {\n  for (const uploadfield of qSA(form, \"wh-fileedit\")) {\n    const input = document.createElement(\"input\");\n    input.type = \"file\";\n    for (const attr of uploadfield.attributes)\n      input.setAttribute(attr.name, attr.value);\n\n    uploadfield.replaceWith(input);\n  }\n}\n\nexport function getErrorForValidity(field: FormControlElement): string {\n  const validity = field.validity;\n  if (validity.customError && field.validationMessage)\n    return field.validationMessage;\n\n  if (validity.valueMissing)\n    return getTid(\"publisher:site.forms.commonerrors.required\");\n  if (field instanceof HTMLInputElement) {\n    if (validity.rangeOverflow) {\n      const max = field.type === 'date' ? reformatDate(field.max) : field.max;\n      return getTid(\"publisher:site.forms.commonerrors.max\", max);\n    }\n    if (validity.rangeUnderflow) {\n      const min = field.type === 'date' ? reformatDate(field.min) : field.min;\n      return getTid(\"publisher:site.forms.commonerrors.min\", min);\n    }\n    if (validity.tooShort)\n      return getTid(\"publisher:site.forms.commonerrors.minlength\", field.minLength);\n    if (validity.tooLong)\n      return getTid(\"publisher:site.forms.commonerrors.maxlength\", field.maxLength);\n    if (validity.stepMismatch)\n      if (!field.step || parseInt(field.step) === 1)\n        return getTid(\"publisher:site.forms.commonerrors.step1mismatch\");\n      else\n        return getTid(\"publisher:site.forms.commonerrors.stepmismatch\", field.step);\n  }\n\n  if (validity.badInput)\n    return getTid(\"publisher:site.forms.commonerrors.default\");\n  if (validity.typeMismatch)\n    if ([\"email\", \"url\", \"number\"].includes(field.type))\n      return getTid(\"publisher:site.forms.commonerrors.\" + field.type);\n\n  for (const key of [\"badInput\", \"customError\", \"patternMismatch\", \"rangeOverflow\", \"rangeUnderflow\", \"stepMismatch\", \"typeMismatch\", \"valueMissing\"] as const)\n    if (validity[key])\n      return key;\n\n  return '?';\n}\n\nexport function isFieldNativeErrored(field: HTMLElement): field is FormControlElement {\n  return isFormControl(field) && !field.hasAttribute(\"data-wh-form-skipnativevalidation\") && !field.checkValidity();\n}\n\nexport function getFieldNativeError(field: HTMLElement) {\n  if (isFieldNativeErrored(field))\n    return getErrorForValidity(field);\n\n  return null;\n}\n\n\nexport function parseCondition(conditiontext: string): FormCondition {\n  interface FormConditionWrapper {\n    c: FormCondition;\n  }\n\n  return (JSON.parse(conditiontext) as FormConditionWrapper).c;\n}\n\nexport function getFormElementCandidates(basenode: HTMLElement, namePrefix: string) {\n  const parentForm = basenode.closest('form');\n  if (!parentForm)\n    throw new Error('No form found for element');\n\n  const candidates = qSA<HTMLElement>(basenode, queryFormFieldLike).filter(el => !(\"form\" in el) || el.form === parentForm);\n  if (namePrefix)\n    return candidates.filter(el => getFieldName(el).startsWith(namePrefix + '.'));\n  else\n    return candidates;\n}\n\n/** Get the handler for a form element */\nexport function getFormHandler<FormType extends FormBase<object> = FormBase>(node: HTMLFormElement, options: { allowMissing: true }): FormType | null;\nexport function getFormHandler<FormType extends FormBase<object> = FormBase>(node: HTMLFormElement, options?: { allowMissing?: boolean }): FormType;\n\nexport function getFormHandler<FormType extends FormBase<object> = FormBase>(node: HTMLFormElement, { allowMissing = false } = {}): FormType | null {\n  //FIXME convert to Symbol? but make sure we work cross-realm (ie tests)\n  return (node.propWhFormhandler as FormType) || (allowMissing ? null : throwError('No form handler found for form'));\n}\n\n/** Get the data for a form element. Shorthand for getFormHandler\\<FormBase\\<Shape\\>\\>(xx).data */\nexport function getFormData<DataShape extends object = Record<string, unknown>>(node: HTMLFormElement, options: { allowMissing: true }): DataShape | null;\nexport function getFormData<DataShape extends object = Record<string, unknown>>(node: HTMLFormElement, options?: { allowMissing?: boolean }): DataShape;\n\nexport function getFormData<DataShape extends object = Record<string, unknown>>(node: HTMLFormElement, { allowMissing = false } = {}): DataShape | null {\n  return getFormHandler<FormBase<DataShape>>(node, { allowMissing })?.data;\n}\n","import * as dompack from 'dompack';\nimport { getTid, getTidLanguage } from \"@webhare/gettid\";\nimport { getFormService } from \"@webhare/forms/src/formservice\";\nimport { isValidEmail, sleep } from '@webhare/std';\nimport { setFieldError } from './customvalidation';\nimport type { EmailValidationResult } from '@webhare/forms/src/types';\nimport type FormBase from '../formbase';\nimport type RPCFormBase from '../rpc';\nimport { debugFlags } from '@webhare/env';\n\nconst cache:\n  {\n    [key: string]: Promise<EmailValidationResult>;\n  } = {};\n\nfunction mayValidateField(field: HTMLInputElement) {\n  if (field.disabled || field.readOnly) //FIXME shouldn't we just decide not to validate at a much higher level if something cannot be changed ?\n    return false;\n\n  if (field.autocomplete && field.autocomplete.split(' ').includes(\"username\")) //Well, we shouldn't *force* usernames as a blacklisted domain might still have been explicitly added as login. but suggestions are still useful?\n    return false;\n  return true;\n}\n\nfunction acceptEmailSuggestion<DataShape extends object = Record<string, unknown>>(evt: Event, form: FormBase<DataShape>, field: HTMLInputElement, suggestion: string) {\n  dompack.stop(evt);\n  field.value = suggestion;\n  field.propWhValidationSuggestion = null;\n  form._reportFieldValidity(field);\n}\n\nexport async function validateField<DataShape extends object = Record<string, unknown>>(form: FormBase<DataShape> | RPCFormBase<DataShape>, field: HTMLInputElement) {\n  if (field.dataset.whFormEmailBlocked) {\n    delete field.dataset.whFormEmailBlocked;\n    setFieldError(field, \"\"); //explicitly clear our earlier setFieldError, but only if we set it. FIXME To really cleanly solve this we need better integration with rpc.ts - we want to be in the setupValidation chain and simply return errors instead of being explictly invoked\n  }\n\n  const checkvalue: string = field.value;\n  if (!checkvalue || !mayValidateField(field)) {\n    return true; //not a problem\n  }\n\n  if (!isValidEmail(checkvalue)) {\n    //TODO why aren't we just returning the error like a validator callback? may also help avoid the whFormEamailBlocked hack..\n    field.dataset.whFormEmailBlocked = \"true\";\n    setFieldError(field, getTid(\"publisher:site.forms.commonerrors.email\"));\n    return false;\n  }\n\n  //user is 'done' with email field apparently. remotely validate it\n  const key = \"e_\" + field.name + \".\" + checkvalue; //e_ prefix protects against funny people using 'constructor' etc. TODO just switch to a Map<> or similar. TODO only include field.name if needed, and also bind to the form then\n  if (cache[key] === undefined) {\n    const rpcCall = \"getRPCFormIdentifier\" in form ?\n      //TODO rendering.whlib should add a data attribute if there are form+field-specific checks, perhaps we can even generalize that for all fields instead of just email whenever they need to do direct validation\n      getFormService().formValidateEmail({ ...form.getRPCFormIdentifier(), field: field.name }, checkvalue)\n      : getFormService().validateEmail(getTidLanguage(), checkvalue);\n\n    //wrap in timeout\n    cache[key] = Promise.race([rpcCall, sleep(3000).then(() => { throw new Error(\"Timeout\"); })]);\n  }\n\n  //TODO should we ever clear the cache? only relevant probably if someone is on the frontend testing emails and doesn't want to refresh\n  let result: EmailValidationResult | undefined;\n\n  try {\n    result = await cache[key];\n  } catch (e) { //timeout or other error, or offline form (PWA?)\n    if (debugFlags.fhv)\n      console.log('[fhv] Email validation error or timeout for value', checkvalue, e);\n  }\n\n  if (checkvalue !== field.value || !mayValidateField(field))\n    return true; //the field already changed, don't report about old errors\n\n  if (result?.blocked) {\n    field.dataset.whFormEmailBlocked = \"true\";\n    setFieldError(field, result.blocked);\n    return false;\n  }\n\n  if (result?.force) {\n    field.value = result.force;\n\n    //we should be able to assume we won't have to revalidate a server-provided suggestion\n    cache[\"e_\" + field.name + \".\" + result.force] = Promise.resolve<EmailValidationResult>({});\n\n    return true;\n  } else if (result?.suggestion) {\n    const suggestion = getTid(\"publisher:site.forms.commonerrors.email_suggestion\", \"___SUGGESTION___\").split(\"___SUGGESTION___\");\n\n    //we should be able to assume we won't have to revalidate a server-provided suggestion\n    cache[\"e_\" + field.name + \".\" + result.suggestion] = Promise.resolve<EmailValidationResult>({});\n\n    field.propWhValidationSuggestion =\n      <span class=\"wh-form__emailcorrection\">\n        {suggestion[0]}\n        <a href=\"#\" class=\"wh-form__emailcorrected\" on={{ click: (evt: Event) => acceptEmailSuggestion(evt, form, field, result.suggestion as string) }}>{result.suggestion}</a>\n        {suggestion[1]}\n      </span>;\n    return true;\n  }\n  return true;\n}\n","import { debugFlags } from \"@webhare/env\";\n\n/** @deprecated  Use debugFlags from \\@webhare/env */\nconst debugflags = debugFlags;\nexport { debugflags };\n\n//Add all flags as a dompack-debug-- class\nif (typeof document !== 'undefined')\n  document.documentElement.classList.add(...Object.keys(debugFlags).map(flagname => \"dompack--debug-\" + flagname));\nif (debugFlags.dompack)\n  console.log('[dompack] debugging flags: ' + Object.keys(debugFlags).join(', '));\n","/* @recommendedimport: import * as browser from 'dompack/extra/browser';\n\n   Identify devices for the purpose of analytics/tracing\n   NOT a library for feature detection!\n\n   Based on Mootools.Browser\n*/\n/* eslint no-useless-escape: off */\n\ntype Platform = \"windows\" | \"ios\" | \"webos\" | \"android\" | \"linux\" | \"mac\" | \"other\";\n\nexport type UserAgentInfo =\n  {\n    name: string;\n    version: number;\n    platform: Platform;\n    device: \"desktop\" | \"mobile\" | \"tablet\" | \"\";\n  };\n\nexport function parseUserAgent(ua: string): UserAgentInfo {\n  ua = ua.toLowerCase();\n\n  // chrome is included in the edge UA, so need to check for edge first, before checking if it's chrome.\n  // safari is included in the miuibrowser UA, so need to check for miuibrowser first, before checking if it's safari.\n  let UA: RegExpMatchArray | null = ua.match(/(edge|miuibrowser)[\\s\\/:]([\\w\\d\\.]+)/);\n  if (!UA)\n    UA = ua.match(/(opera|ie|firefox|chrome|trident|crios|version)[\\s\\/:]([\\w\\d\\.]+)?.*?(safari|(?:rv[\\s\\/:]|version[\\s\\/:])([\\w\\d\\.]+)|$)/);\n  if (!UA) { //try ios 11.4.1\n    UA = ua.match(/; cpu os ([\\d]+)/);\n    if (UA)\n      UA = ['', 'safari', UA[1]];\n  }\n  if (!UA)\n    UA = ['', 'unknown', \"0\"];\n\n  if (UA[1] === 'trident') {\n    UA[1] = 'ie';\n    if (UA[4]) UA[2] = UA[4];\n  } else if (UA[1] === 'crios') {\n    UA[1] = 'chrome';\n  }\n\n  let platform = ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || ua.match(/mac|win|linux/) || ['other'])[0];\n  if (platform === 'win') platform = 'windows';\n\n  const ret: UserAgentInfo =\n  {\n    name: (UA[1] === 'version') ? UA[3] : UA[1],\n    version: parseInt((UA[1] === 'opera' && UA[4]) ? UA[4] : UA[2]),\n    platform: platform as Platform,\n    device: ua.match(/ipad/) ? 'tablet' : ['ios', 'webos', 'android'].includes(platform) ? 'mobile' : ['mac', 'windows', 'linux'].includes(platform) ? 'desktop' : ''\n  };\n\n  return ret;\n}\n\n//module.exports =\nconst browser = parseUserAgent(globalThis.navigator?.userAgent || \"\");\n\nexport function getName() {\n  return browser.name;\n}\nexport function getVersion() {\n  return browser.version;\n}\nexport function getPlatform() {\n  return browser.platform;\n}\nexport function getDevice() {\n  return browser.device;\n}\nexport function getTriplet() {\n  return browser.platform + '-' + browser.name + '-' + browser.version;\n}\n","/* All keynames should be mixed-cased, as done here: http://www.w3.org/TR/DOM-Level-3-Events-key/\n\n   Modifiers should be in the ordering Alt+Control+Meta+Shift+key (ie alphabetical)\n\n   To simply prevent keys from propagating up (ie to keep Enter inside its textarea)\n   new KeyboardHandler(this.textarea, {}, { dontpropagate: ['Enter']});\n*/\n\nimport { type NormalizedKeyboardEvent, normalizeKeyboardEventData } from '../src/events';\nimport { debugflags } from '../src/debug';\nimport { getPlatform } from './browser';\nconst IS_MAC_PLATFORM = getPlatform() === \"mac\";\n\nconst propnames = {\n  shiftKey: \"Shift\",\n  ctrlKey: IS_MAC_PLATFORM ? \"Control\" : [\"Accel\", \"Control\"],\n  metaKey: IS_MAC_PLATFORM ? [\"Accel\", \"Meta\"] : \"Meta\",\n  altKey: \"Alt\"\n};\n\nfunction getFinalKey(event: NormalizedKeyboardEvent) { //get the name for the 'final' key, eg the 'D' in 'alt+control+d'\n  if (event.code?.startsWith('Key') && event.code.length === 4)\n    return event.code.substring(3, 4).toUpperCase();\n  if (event.code?.startsWith('Digit') && event.code.length === 6)\n    return event.code.substring(5, 6).toUpperCase();\n  return event.key.length === 1 ? event.key.toUpperCase() : event.key;\n}\n\nfunction getKeyNames(event: NormalizedKeyboardEvent) {\n  let names: string[][] = [[]];\n\n  /*\n    // Firefix under selenium on linux always says 'Unidentified' as key. Backup for some keys.\n    if (basekey === \"Unidentified\")\n      basekey = selenium_backup[event.keyCode];\n  */\n  // Create the modifiers in the names array (omit the basekey, so we can sort on modifier first)\n  (Object.keys(propnames) as Array<keyof typeof propnames>).forEach(propname => {\n    if (event[propname]) {\n      // The key is pressed. Add the modifier name to all current names.\n      const modifier: string | string[] = propnames[propname];\n      if (!Array.isArray(modifier))\n        names.forEach(function (arr) { arr.push(modifier); });\n      else {\n        // Multiple modifiers map to this key, duplicate all result sequences for every modifier\n        const newkeys: string[][] = [];\n        modifier.forEach(function (singlemodifier) {\n          names.forEach(function (arr) {\n            newkeys.push(arr.concat([singlemodifier]));\n          });\n        });\n        names = newkeys;\n      }\n    }\n  });\n\n  return names.map(function (arr) {\n    // Sort the modifier names\n    arr = arr.sort();\n    arr.push(getFinalKey(event));\n    return arr.join(\"+\");\n  });\n}\n\nfunction validateKeyName(key: string) {\n  const modifiers = key.split(\"+\");\n  modifiers.pop();\n\n  // Check for allowed modifiers\n  modifiers.forEach(function (mod) {\n    if (![\"Accel\", \"Alt\", \"Control\", \"Meta\", \"Shift\"].includes(mod))\n      throw new Error(\"Illegal modifier name '\" + mod + \"' in key '\" + key + \"'\");\n  });\n\n  const original_order = modifiers.join('+');\n  modifiers.sort();\n  if (modifiers.join('+') !== original_order)\n    throw new Error(\"Illegal key name \" + key + \", modifiers must be sorted alphabetically\");\n}\n\ntype KeyboardMappingHandler = (event: KeyboardEvent) => boolean | void;\ntype KeyboardMapping = { [key: string]: KeyboardMappingHandler };\ntype KeyPressHandler = (event: KeyboardEvent, key: string) => boolean | void;\ntype KeyboardEventHandler = (event: Event) => void;\ntype KeyboardHandlerOptions =\n  {\n    stopmapped?: boolean;\n    dontpropagate?: string[];\n    onkeypress?: KeyPressHandler;\n    captureunsafekeys?: boolean;\n    listenoptions?: AddEventListenerOptions;\n  };\n\n/**\n     node: The node to attach to\n    keymap: Keymap\n    options.stopmapped - preventDefault and stopPropagation on any key we have in our map\n    options.dontpropagate - string array of keys not to propagate out of this object\n    options.onkeypress - when set, call for all keypresses. signature: function (event, key). Should always return true and preventDefault (and/or stop) the event to cancel its handling\n    options.listenoptions - addEventListener options (eg \\{capture:true\\})\n */\nexport default class KeyboardHandler {\n  node: EventTarget;\n  keymap: KeyboardMapping;\n  stopmapped: boolean;\n  dontpropagate: string[];\n  onkeypress?: KeyPressHandler;\n  captureunsafekeys: boolean;\n  private _listenoptions?: AddEventListenerOptions;\n  private _onkeydown: KeyboardEventHandler;\n  private _onkeypress: KeyboardEventHandler;\n\n  constructor(node: EventTarget, keymap: KeyboardMapping, options?: KeyboardHandlerOptions) {\n    this.node = node;\n    this.keymap = {};\n    this.stopmapped = options?.stopmapped ?? false;\n    this.dontpropagate = options?.dontpropagate ? [...options.dontpropagate].map(name => name.toUpperCase()) : [];\n    this.onkeypress = options?.onkeypress;\n    this.captureunsafekeys = options?.captureunsafekeys ?? false;\n    this._listenoptions = options?.listenoptions;\n\n    Object.keys(keymap).forEach(keyname => {\n      if (debugflags.key)\n        validateKeyName(keyname);\n      this.keymap[keyname.toUpperCase()] = keymap[keyname];\n    });\n\n    this._onkeydown = (event) => this._onKeyDown(event);\n    this._onkeypress = (event) => this._onKeyPress(event);\n    node.addEventListener('keydown', this._onkeydown, this._listenoptions);\n    node.addEventListener('keypress', this._onkeypress, this._listenoptions);\n  }\n\n  destroy() {\n    this.node.removeEventListener('keydown', this._onkeydown, this._listenoptions);\n    this.node.removeEventListener('keypress', this._onkeypress, this._listenoptions);\n  }\n\n  /**\n       Returns thether the current pressed special key should be ignored for the current target node\n      Used to detect input/textarea/rte's\n   *\n      @param target - Current target node for keyboard event\n      @param key - Parsed key\n      @param keynames - Potential names for the keys (as returned by GetKeyNames)\n      @returns Whether the key must be ignored by KeyboardHandler, default browser behaviour should be triggered.\n   */\n  private _mustIgnoreKey(target: EventTarget | null, key: string, keynames: string[]) {\n    if (!(target instanceof Node))\n      return false;\n    const tag = target.nodeName.toLowerCase();\n    if (tag === \"select\") {\n      if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\", \"PageUp\", \"PageDown\"].indexOf(key) !== -1)\n        return true;\n    } else if (tag === \"input\" || tag === \"textarea\" || (target instanceof HTMLElement && target.isContentEditable)) {\n      // These keys we ignore, regardless of the modifier\n      if ([\n        \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", \"ArrowDown\",\n        \"PageUp\", \"PageDown\",\n        \"Home\", \"End\",\n        \"Insert\", \"Delete\", \"Backspace\"\n      ].indexOf(key) !== -1)\n        return true;\n\n      let is_special_combo = false;\n\n      // only input doesn't want exact combo 'Enter', the rest does\n      if (tag !== \"input\" && keynames.indexOf(\"Enter\") !== -1)\n        is_special_combo = true;\n\n      // Only contenteditable wants \"Shift+Enter\"\n      if (target instanceof HTMLElement && target.isContentEditable && keynames.indexOf(\"Shift+Enter\") !== -1)\n        is_special_combo = true;\n\n      // These exact combo's are wanted by all inputs\n      [\"Accel+A\", \"Accel+V\", \"Accel+C\", \"Accel+X\"].forEach(function (name) {\n        is_special_combo = is_special_combo || keynames.indexOf(name) !== -1;\n      });\n      return is_special_combo;\n    }\n    return false;\n  }\n\n  addKey(keybinding: string, handler: KeyboardMappingHandler) {\n    if (debugflags.key) {\n      validateKeyName(keybinding);\n      console.log(\"[key] KeyDown handler registered for \" + keybinding);\n    }\n    this.keymap[keybinding.toUpperCase()] = handler;\n  }\n  removeKey(keybinding: string) {\n    delete this.keymap[keybinding.toUpperCase()];\n  }\n  _onKeyDown(event: Event) { // We're a key event handler, so we know the event is a KeyboardEvent\n    const keydata = normalizeKeyboardEventData(event as KeyboardEvent);\n\n    // Get all possible names for this key\n    const keynames = getKeyNames(keydata);\n    if (!keydata.key || !keynames.length) {\n      if (debugflags.key)\n        console.log(\"[key] KeyDown handler for \", this.node, \" did not recognize key from event\", event);\n      return true;\n    }\n\n    if (debugflags.key)\n      console.log(\"[key] KeyDown handler for \", this.node, \" got key \", keydata.key, \" with target \", event.target, \" keynames:\", keynames);\n\n    /* Some keys we ignore, unless we're explicitly bound to a node, so we don't inadvertly break eg a <input> node inside\n       a listview we're handling or otherwise break a user's expectation. Set the option 'captureunsafekeys' if you explicitly\n       want to be able to capture any key */\n\n    if (!this.captureunsafekeys && this._mustIgnoreKey(event.target, keydata.key, keynames)) {\n      if (debugflags.key)\n        console.log(\"[key] KeyDown event will not be intercepted, it's an unsafe key to intercept\");\n      return true;\n    }\n\n    if (this.dontpropagate) {\n      keynames.forEach(keyname => {\n        if (this.dontpropagate.includes(keyname)) {\n          if (debugflags.key)\n            console.log(\"[key] KeyDown event will not bubbleup because of our dontpropagate option (but may still trigger a default action)\");\n          event.stopPropagation();\n        }\n      });\n    }\n\n    for (let i = 0; i < keynames.length; ++i) {\n      const mapping = this.keymap[keynames[i].toUpperCase()];\n      if (!mapping)\n        continue;\n\n      if (this.stopmapped) {\n        if (debugflags.key)\n          console.log(\"[key] KeyDown event will not bubbleup or trigger default, because we're configured to block any mapped key\");\n        event.stopPropagation();\n        event.preventDefault();\n      }\n\n      const ishandled = mapping.apply(this.node, [event as KeyboardEvent]);\n      if (ishandled && !event.defaultPrevented) {\n        console.warn(`The key handler for '${keynames[i]}' should preventDefault (or dompack.stop) the event to block fruther propagation`);\n        event.stopPropagation();\n        event.preventDefault();\n        if (debugflags.key)\n          console.log(\"[key] KeyDown event will not bubbleup or trigger default, because the keyhandler indicated the key was handled\");\n      }\n\n      if (!event.defaultPrevented && debugflags.key)\n        console.log(\"[key] KeyDown event was not blocked by its explicitly configured handler\");\n    }\n    return true;\n  }\n  _onKeyPress(event: Event) { // We're a key event handler, so we know the event is a KeyboardEvent\n    const keydata = normalizeKeyboardEventData(event as KeyboardEvent);\n\n    if (this.onkeypress) {\n      if (!this.onkeypress.apply(this.node, [event as KeyboardEvent, keydata.key])) {\n        if (!event.defaultPrevented)\n          console.warn(\"The onkeypress handler should preventDefault (or dompack.stop) the event to block fruther propagation\");\n        event.stopPropagation();\n        event.preventDefault();\n      }\n    }\n  }\n}\n\nexport function getEventKeyNames(event: KeyboardEvent) {\n  const keydata = normalizeKeyboardEventData(event);\n  return getKeyNames(keydata);\n}\n","/* Dialogapi offers an API to which dialog providers cannot connect. It does\n   not implement the dialogs themselves\n*/\n\nimport * as dompack from 'dompack';\nimport * as domfocus from 'dompack/browserfix/focus';\nimport KeyboardHandler from \"dompack/extra/keyboard\";\n\nexport type DialogOptions =\n  {\n    /**  Allow the dialog to be cancelled by clicking outside the dialog. Defaults to true if no choices are specified */\n    allowcancel?: boolean;\n    /**  Element to focus on closing the dialog */\n    focusonclose?: HTMLElement;\n    /**  An AbortSignal which if set will close the dialog and resolve it with a null response */\n    signal?: EventTarget;\n    /**  Additional class to set on the dialog */\n    messageboxclassbase?: string;\n\n    borrow?: Element | string;\n  };\ntype DialogConstructor = (options?: DialogOptions) => DialogBase;\n\nconst dialogstack: DialogBase[] = [];\nlet keyhandler: KeyboardHandler | null = null;\nlet dialogconstructor: DialogConstructor | null = null;\nlet dialogoptions: DialogOptions | null = null;\n\nfunction onEscape(event: KeyboardEvent) {\n  if (!dialogstack.length)\n    return;\n\n  dompack.stop(event);\n  if (dialogstack[dialogstack.length - 1].options.allowcancel)\n    dialogstack[dialogstack.length - 1].resolve(null);\n}\n\nfunction onTab(event: KeyboardEvent, direction: number) {\n  if (!dialogstack.length)\n    return;\n\n  dompack.stop(event);\n\n  const focusable = domfocus.getFocusableComponents(dialogstack[dialogstack.length - 1].contentnode, true);\n  const el = domfocus.getCurrentlyFocusedElement();\n  const tofocusidx = el ? focusable.indexOf(el) + direction : -1;\n  const tofocus = tofocusidx < 0 ? focusable[focusable.length - 1] : tofocusidx >= focusable.length ? focusable[0] : focusable[tofocusidx];\n  if (tofocus)\n    dompack.focus(tofocus);\n}\n\nexport class DialogBase {\n  options: DialogOptions;\n  private _borrowedfrom: Element | null = null;\n  private _borrowednext: Element | null = null;\n  contentnode: Element | null; //FIXME a successor to DialogBase should not allow these to be | null. have our child inform us through super() about the contentnode and buttonsnode so we can ensure it's set\n  buttonsnode: Element | null = null;\n  private _deferred: PromiseWithResolvers<string | null>;\n  open: boolean;\n  private _previousfocus: Element | null = null;\n\n  constructor(options?: DialogOptions) {\n    this.options = {\n      allowcancel: true,\n      ...options\n    };\n\n    if (this.options.borrow && typeof this.options.borrow === 'string') {\n      const borrow = document.querySelector(this.options.borrow);\n      if (!borrow)\n        throw new Error(\"Invalid 'borrow' selectior: \" + this.options.borrow);\n      this.options.borrow = borrow;\n    }\n    // At this point, if this.options.borrow was a string, it's been resolved to an Element\n\n    if (this.options.borrow) {\n      this._borrowedfrom = (this.options.borrow as Element).parentElement;\n      this._borrowednext = (this.options.borrow as Element).nextElementSibling;\n    }\n\n    if (this.options.signal)\n      this.options.signal.addEventListener(\"abort\", () => { this.resolve(null); });\n\n    this.contentnode = null;\n    this._deferred = Promise.withResolvers();\n    this.open = false;\n  }\n\n  async runModal() {\n    if (this.open)\n      throw new Error(\"Attempting to re-open already opened dialog\");\n\n    if (!keyhandler)\n      keyhandler = new KeyboardHandler(window, {\n        \"Escape\": (evt: KeyboardEvent) => onEscape(evt),\n        \"Tab\": (evt: KeyboardEvent) => onTab(evt, +1),\n        \"Shift+Tab\": (evt: KeyboardEvent) => onTab(evt, -1)\n      }, { captureunsafekeys: true, listenoptions: { capture: true } });\n\n    this._previousfocus = domfocus.getCurrentlyFocusedElement();\n    this._openDialog();\n\n    this.open = true;\n    dialogstack.push(this);\n\n    try {\n      this.afterShow();\n      this._checkFocus();\n      return await this._deferred.promise;\n    } finally {\n      if (this.open)\n        this.closeDialog();\n    }\n  }\n\n  _openDialog() {\n    throw new Error(\"_openDialog not overridden by dialog class\");\n  }\n\n  _checkFocus() {\n    const focusable = domfocus.getFocusableComponents(this.contentnode, true);\n    if (focusable.length !== 0)\n      dompack.focus(focusable[0]);\n    else\n      dompack.focus(document.body);\n  }\n\n  //close the dialog. this may be invoked even when inside runModal to ensure synchronous dialog cleanup\n  closeDialog() {\n    if (!this.open)\n      return;\n\n    const myoffset = dialogstack.indexOf(this);\n    if (myoffset >= 0)\n      dialogstack.splice(myoffset, 1);\n\n    this.open = false;\n    if (this.options.borrow)\n      if (this._borrowedfrom)\n        this._borrowedfrom.insertBefore(this.options.borrow as Element, this._borrowednext);\n      else\n        this._borrowednext?.remove();\n\n    if (this.options.focusonclose)\n      dompack.focus(this.options.focusonclose);\n    else if (this._previousfocus)\n      dompack.focus(this._previousfocus as HTMLElement);\n\n    if (dialogstack.length === 0 && keyhandler) {\n      keyhandler.destroy();\n      keyhandler = null;\n    }\n  }\n\n  /**\n   * resolve the dialog with the specified answer\n   *\n   * @param response - Response (or choice) to return. null if the dialog was simply cancelled\n   */\n  resolve(response: string | null) {\n    if (this.open)\n      this.closeDialog();\n    this._deferred.resolve(response);\n  }\n\n  afterShow() {\n    // supposed to be empty but extenders can override\n  }\n}\n\nexport function setupDialogs(newdialogconstructor: DialogConstructor, options?: DialogOptions) {\n  if (dialogconstructor) {\n    console.error(\"Duplicate setupDialogs call!\");\n    return;\n  }\n\n  dialogconstructor = newdialogconstructor;\n  dialogoptions = { messageboxclassbase: 'dompack-messagebox__', ...options };\n}\n\n/** Verify whether the dialog api is initialized */\nexport function isCreateDialogAvailable(): boolean {\n  return Boolean(dialogconstructor);\n}\n\n/**\n * Create a dialog\n *\n * @param options - dialog settings\n */\nexport function createDialog(options?: DialogOptions) {\n  if (!dialogconstructor)\n    throw new Error(\"Cannot create dialog, no dialog class defined\");\n\n  const dialog = dialogconstructor(options);\n  if (dialog.options.borrow)\n    dialog.contentnode?.appendChild(dialog.options.borrow as Element);\n  return dialog;\n}\n\ntype DialogChoice =\n  {\n    /** Title for the choice */\n    title: string;\n    /** Override result to return if clicked (otherwise you'll just receive the title) */\n    result?: string;\n    className?: string;\n  };\n\n\n/**\n                     @param question - if a string, will be wrapped as textContent into a <p> and presented as the question\n                    - if a html node, will appear as the question (allowing you to insert html)\n                    - if an array of nodes, all these nodes will be inserted\n    @param choices - Buttons (choices) the message box will offer, eg Ok and Cancel\n    @param options - Dialog options\n */\nexport async function runMessageBox(question: string | HTMLElement | HTMLElement[], choices: DialogChoice[], options?: DialogOptions) {\n  choices = choices || [];\n  options = { allowcancel: choices.length === 0, ...options };\n\n  const dialog = createDialog(options);\n  const choicebuttons = choices.map(choice =>\n    dompack.create(\"button\", {\n      type: \"button\",\n      className: dialogoptions ? dialogoptions.messageboxclassbase + \"button \" + (choice.className || \"\") : \"\",\n      textContent: choice.title,\n      on: { click: () => dialog.resolve(choice.result || choice.title) },\n      dataset: { messageboxResult: choice.result || choice.title }\n    }));\n\n  if (typeof question === 'string')\n    question = dompack.create(\"p\", { textContent: question });\n\n  if (Array.isArray(question))\n    dialog.contentnode?.append(...question);\n  else\n    dialog.contentnode?.append(question);\n\n  if (dialog.buttonsnode) //this dialog has a separte node for the button area\n    dialog.buttonsnode.append(...choicebuttons);\n  else\n    dialog.contentnode?.append(dompack.create(\"div\", {\n      className: dialogoptions ? dialogoptions.messageboxclassbase + \"buttongroup\" : \"\",\n      childNodes: choicebuttons\n    }));\n\n  return dialog.runModal();\n}\n","/* eslint-disable @typescript-eslint/no-floating-promises -- FIXME: needs API rework */\n\nimport * as dompack from '@webhare/dompack';\nimport * as focus from 'dompack/browserfix/focus';\nimport * as merge from './internal/merge';\nimport FormBase, { type FormResultValue, type FormSubmitEmbeddedResult, type FormSubmitMessage, type FormSubmitResult } from './formbase';\nimport { getFormService, getTSFormService, type PublisherFormService } from \"@webhare/forms/src/formservice\";\nimport * as emailvalidation from './internal/emailvalidation';\nimport { runMessageBox } from 'dompack/api/dialog';\nimport { debugFlags, isLive, navigateTo, type NavigateInstruction } from \"@webhare/env\";\nimport { isBlob, pick } from '@webhare/std';\nimport { setFieldError } from './internal/customvalidation';\nimport type { RPCFormTarget, RPCFormInvokeBase, RPCFormSubmission } from '@webhare/forms/src/types';\nimport { SingleFileUploader, type UploadResult } from '@webhare/upload';\nimport { createClient } from '@webhare/jsonrpc-client';\nimport { setupCaptchaFieldGroup } from './fields/captchafield';\nimport { getFormConfiguration } from '@webhare/forms/src/registration';\nimport type { CaptchaProvider } from '../captcha/api';\n\nfunction unpackObject(formvalue: FormResultValue): RPCFormInvokeBase[\"vals\"] {\n  return Object.entries(formvalue).map(_ => ({ name: _[0], value: _[1] }));\n}\n\nexport interface FormSubmitDetails<DataShape extends object = Record<string, unknown>> {\n  form: HTMLElement;\n  rpchandler: RPCFormBase<DataShape>;\n  extrasubmitdata?: unknown;\n  submitted: FormResultValue;\n  result: unknown;\n  errors: FormSubmitMessage[];\n}\n\ntype UploadCache = WeakMap<Blob, UploadResult>;\n\nfunction buildTarget(target: string): RPCFormTarget {\n  return { target, url: location.href.split('/').slice(3).join('/') };\n}\n\nclass FormSubmitter {\n  private readonly target;\n  private readonly cache: UploadCache;\n\n  constructor(target: string, cache: UploadCache | null, private readonly offline: boolean) {\n    this.target = buildTarget(target);\n    this.cache = cache || new WeakMap();\n  }\n\n  private async uploadFile(file: Blob) {\n    if (this.offline)\n      throw new Error(\"Cannot upload files in offline mode\"); //TODO convert to dataurl and test it\n\n    //TODO what if the server discarded the token? we should negotiate with the server which files it (still) wants\n    const completed = this.cache.get(file);\n    if (completed)\n      return completed;\n\n    const uploader = new SingleFileUploader(file);\n    //Ask the server if it's okay to upload these files\n    const uploadinstructions = await getTSFormService().requestUpload(this.target, uploader.manifest);\n    //Run the actual upload. Options: onProgress, signal\n    const uploadedfile: UploadResult = await uploader.upload(uploadinstructions);\n    this.cache.set(file, uploadedfile);\n    return uploadedfile;\n  }\n\n  private async convertSubmittable(formvalue: unknown): Promise<unknown> {\n    //TODO combine multiple uploads into one\n    if (Array.isArray(formvalue))\n      return await Promise.all(formvalue.map(file => this.getSubmittable(file)));\n\n    if (formvalue && typeof formvalue === 'object') {\n      if (isBlob(formvalue))\n        return await this.uploadFile(formvalue as Blob);\n\n      const result: Record<string, unknown> = {};\n      for (const [key, value] of Object.entries(formvalue)) {\n        result[key] = await this.getSubmittable(value);\n        //console.log(key, value, result[key]);\n      }\n      return result;\n    }\n    return formvalue;\n  }\n\n  async getSubmittable(formvalue: object): Promise<FormResultValue> {\n    return await this.convertSubmittable(formvalue) as FormResultValue;\n  }\n}\n\n/** Directly submit a RPC form to WebHare\n *  @param target - Formtarget as obtained from\n * @deprecated Switch to \\@webhare/forms submitForm and buildFormSubmission\n */\nexport async function submitForm(target: string, formvalue: FormResultValue, options?: { extrasubmit: unknown }): Promise<FormSubmitResult> {\n  const submitparameters = await buildRPCFormSubmission(target, formvalue, { extraSubmit: options?.extrasubmit || null, });\n  return await submitRPCForm(submitparameters);\n}\n\n/** Return a value safe for RPC submission or typed serialization */\nexport async function buildRPCFormSubmission<DataShape extends object = Record<string, unknown>>(target: string, formValue: DataShape, options?:\n  {\n    extraSubmit?: unknown;\n    offline?: boolean;\n    uploadCache?: WeakMap<Blob, UploadResult>;\n    __setupEvent?: FormSubmitDetails<DataShape>;\n  }): Promise<RPCFormSubmission> {\n  const submitter = new FormSubmitter(target, options?.uploadCache || null, options?.offline || false);\n\n  const vals = await submitter.getSubmittable(formValue);\n\n  if (options?.__setupEvent) {\n    const eventdetail = options.__setupEvent;\n    eventdetail.extrasubmitdata = options.extraSubmit || null;\n    eventdetail.submitted = vals;\n  }\n\n  const submitparameters: RPCFormSubmission = {\n    ...buildTarget(target),\n    vals: unpackObject(vals),\n    extrasubmit: options?.extraSubmit || null\n  };\n  return submitparameters;\n}\n\nexport async function submitRPCForm(submission: RPCFormSubmission): Promise<FormSubmitResult> {\n  // TODO switch over to typed rpc, allow rpc options that make sense to be specified as options to submitRPCForm\n  const client = createClient<PublisherFormService>(\"publisher:forms\");\n  return await client.formSubmit(submission);\n}\n\nexport default class RPCFormBase<DataShape extends object = Record<string, unknown>> extends FormBase<DataShape> {\n  __formhandler = {\n    errors: [],\n    warnings: [],\n    formid: \"\",\n    url: \"\",\n    target: \"\",\n    submitting: false\n  };\n\n  #hadFocus = false;\n  #completedUploads = new WeakMap<Blob, UploadResult>;\n  #settingUpCaptcha = false;\n\n  pendingrpcs = new Array<Promise<unknown>>;\n\n  constructor(formnode: HTMLFormElement) {\n    super(formnode);\n    this.__formhandler.formid = formnode.dataset.whFormId || ''; //needed for 'old' __formwidget: stuff\n    this.__formhandler.url = location.href.split('/').slice(3).join('/');\n    this.__formhandler.target = formnode.dataset.whFormTarget || '';\n    window.addEventListener(\"wh:form-configure\", () => this.checkCaptcha());\n    this.node.addEventListener(\"focusin\", this.#onFirstFocus, true);\n\n    if (!this.__formhandler.target) {\n      if (this.__formhandler.formid) {\n        console.error(\"This page needs to be republished!\");\n      } else {\n        if (!isLive)\n          console.error(\"Missing data-wh-form-target on form, did your witty apply '[form.formattributes]' to the <form> tag ?\", formnode);\n        throw new Error(\"Form does not appear to be a WebHare form\");\n      }\n    }\n\n    this.checkCaptcha();\n  }\n\n  getRPCFormIdentifier(): RPCFormTarget { //submitinfo as required by some RPCs\n    return buildTarget(this.__formhandler.target);\n  }\n\n  async #getSubmitVals(): Promise<FormResultValue> {\n    const formvalue = await this.getFormValue();\n    const submitter = new FormSubmitter(this.__formhandler.target, this.#completedUploads, false);\n    return await submitter.getSubmittable(formvalue);\n  }\n\n  //Invoke a function on the form on the server\n  async _invokeRPC(background: boolean, methodname: string, args: unknown[]) {\n    const waiter = Promise.withResolvers<void>();\n\n    if (!background)\n      this.onRPC(waiter.promise);\n\n    const lock = dompack.flagUIBusy({ modal: !background });\n    try {\n      const rpc = getFormService().formInvoke({\n        ...this.getRPCFormIdentifier(),\n        vals: unpackObject(await this.#getSubmitVals()),\n        methodname,\n        args\n      });\n      this.pendingrpcs.push(rpc);\n      const result = await rpc;\n      this._processMessages(result.messages);\n      return result.result;\n    } finally {\n      lock.release();\n      waiter.resolve();\n    }\n  }\n\n  /* Override this to implement support for incoming field messages */\n  processFieldMessage(field: string, prop: string, value: unknown) {\n    if (field.startsWith(\"#page.\")) {\n      const matchpage = field === \"#page.thankyou\" ? this.node.querySelector<HTMLElement>(`.wh-form__page[data-wh-form-pagerole=thankyou]`) : null;\n      if (!matchpage) { //we currently don't have anything to edit on other pages than thankyou\n        console.warn(\"Message for non-page field: \" + field + \", prop: \" + prop + \", value: \" + String(value));\n        return;\n      }\n\n      if (prop === 'data') {\n        const dataval = value as { redirect: NavigateInstruction | null; exitbutton: string };\n        matchpage.dataset.whFormNavigateTo = dataval.redirect ? JSON.stringify(dataval.redirect) : undefined;\n        matchpage.dataset.whFormExitButton = dataval.exitbutton;\n      }\n    } else {\n      const fieldnode = this.node.querySelector<HTMLElement>(`*[name=\"${CSS.escape(field)}\"], *[data-wh-form-name=\"${CSS.escape(field)}\"]`);\n      if (!fieldnode) {\n        console.warn(\"Message for non-existent field: \" + field + \", prop: \" + prop + \", value: \" + String(value));\n        return;\n      }\n      if (prop === 'value') {\n        this.setFieldValue(fieldnode, value);\n        return;\n      }\n    }\n    console.warn(\"Unknown field message: field: \" + field + \", prop: \" + prop + \", value: \" + String(value));\n  }\n\n  //Override this function to easily submit extra fields\n  getFormExtraSubmitData(): object | Promise<object> {\n    return {};\n  }\n\n  //Invoked when RPC is occuring. Is passed a promise that will resolve on completion\n  //onRPC is DEPRECATED, switching to event based api\n  onRPC(promise: Promise<void>) {\n  }\n\n  /** Invoke a function on the form on the server\n      @param methodname - Name of the function on the form\n      @param args - Arguments for the function\n      @returns Promise that resolves to the result of the rpc call\n  */\n  invokeRPC(methodname: string, ...args: unknown[]) {\n    return this._invokeRPC(false, methodname, args);\n  }\n\n  /** Invoke a function on the form on the server, doesn't call .onRPC or request modality layers\n      @param methodname - Name of the function on the form\n      @param args - Arguments for the function\n      @returns Promise that resolves to the result of the rpc call\n  */\n  invokeBackgroundRPC(methodname: string, ...args: unknown[]) {\n    return this._invokeRPC(true, methodname, args);\n  }\n\n  _processMessages(messages: Array<{ field: string; prop: string; data: unknown }>) {\n    for (const msg of messages) {\n      this.processFieldMessage(msg.field, msg.prop, msg.data);\n    }\n  }\n\n  async _flushPendingRPCs() {\n    while (this.pendingrpcs.length) {\n      try {\n        await this.pendingrpcs.pop();\n      } catch (ignore) {\n        //*we* can't handle those...\n      }\n    }\n  }\n\n  async buildFormSubmission(extradata?: object, options?: { __setupEvent?: FormSubmitDetails<DataShape> }): Promise<RPCFormSubmission> {\n    //Request extrasubmit first, so that if it returns a promise, it can execute in parallel with getFormValue\n    const extraSubmitAwaitable = this.getFormExtraSubmitData();\n    //FIXME we want getFormValue to be sync (and just use 'this.data' here) - who is still sending promises our way? too much to sort out for a backport\n    const formvalue = await this.getFormValue() as DataShape;\n    const extraSubmit = { ...extradata, ...(await extraSubmitAwaitable as Record<string, unknown>) };\n\n    await this._flushPendingRPCs();\n    dompack.dispatchCustomEvent(this.node, \"wh:form-preparesubmit\", {\n      bubbles: true, cancelable: false, detail: {\n        extrasubmit: extraSubmit\n      }\n    });\n\n    const submitparameters = await buildRPCFormSubmission<DataShape>(this.__formhandler.target, formvalue, {\n      extraSubmit,\n      offline: false,\n      uploadCache: this.#completedUploads,\n      //hack because we need to record the 'vars' value before unpackObject flattens it for safe HareScript RPC\n      __setupEvent: options?.__setupEvent\n    });\n\n    return submitparameters;\n  }\n\n  #onFirstFocus = () => {\n    this.#hadFocus = true;\n    this.checkCaptcha();\n  };\n\n  private checkCaptcha() {\n    //Checks whether to show captcha based on configuration. Note that even if *we* think it's not needed, form submission may still require a captcha\n    const config = getFormConfiguration();\n    const shouldShow = config?.captcha === \"onLoad\" || (config?.captcha === \"onActivate\" && this.#hadFocus);\n    if (shouldShow && this.node.dataset.whFormCaptcha !== undefined && !this.#settingUpCaptcha && !this.getElementByName(\"__form_captcha\")) {\n      this.#settingUpCaptcha = true;\n      void getFormService().getCaptchaConfiguration(this.getRPCFormIdentifier()).then(captchaConfig => {\n        if (captchaConfig) {\n          setupCaptchaFieldGroup(this, captchaConfig);\n        }\n      });\n    }\n  }\n\n  async submitForm(parameters: RPCFormSubmission): Promise<FormSubmitResult> {\n    return await submitRPCForm(parameters);\n  }\n\n  async submit(extradata?: object): Promise<{ result?: FormSubmitEmbeddedResult }> {\n    //ADDME timeout and free the form after some time\n    if (this.__formhandler.submitting) //throwing is the safest solution... having the caller register a second resolve is too dangerous\n      throw new Error(\"The form is already being submitted\");\n\n    const waiter = Promise.withResolvers<void>();\n    let insubmitrpc = false;\n    this.onRPC(waiter.promise);\n\n    const eventdetail: FormSubmitDetails<DataShape> = {\n      form: this.node,\n      rpchandler: this,\n      submitted: {},\n      errors: [],\n      result: null\n    };\n\n    try {\n      this.__formhandler.submitting = true;\n\n      const submitparameters = await this.buildFormSubmission(extradata, { __setupEvent: eventdetail });\n\n      if (debugFlags.fhv)\n        console.log('[fhv] start submission', submitparameters);\n\n      insubmitrpc = true; //so we can easily determine exception source\n      const result = await this.submitForm(submitparameters);\n      insubmitrpc = false;\n\n      if (debugFlags.fhv)\n        console.log('[fhv] received response', result);\n\n      this._processMessages(result.messages);\n\n      if (!dompack.dispatchCustomEvent(this.node, \"wh:form-response\", { bubbles: true, cancelable: true, detail: result }))\n        return result;\n\n      eventdetail.result = result.result;\n      eventdetail.errors = result.errors;\n\n      let didfirstfocus = false;\n      const globalerrors = [];\n      for (const error of result.errors) {\n        if (!error.name) {\n          globalerrors.push(error);\n          continue;\n        }\n\n        let failednode = this.node.querySelector('[name=\"' + error.name + '\"], [data-wh-form-name=\"' + error.name + '\"]');\n        if (!failednode) {\n          if (error.name === \"__form_captcha\") { //created on demand\n            const serverMetadata = error.metadata as { provider: CaptchaProvider };\n            failednode = setupCaptchaFieldGroup(this, serverMetadata.provider);\n          } else {\n            console.error(\"[fhv] Unable to find node '\" + error.name + \"' which caused error:\" + error.message);\n            continue;\n          }\n        }\n        if (!didfirstfocus) {\n          dompack.focus(failednode);\n          didfirstfocus = true;\n        }\n        setFieldError(failednode, error.message, { reportimmediately: true, serverside: true, metadata: error.metadata });\n      }\n\n      if (result.success) {\n        this.sendFormEvent({ event: 'submitted' });\n        if (dompack.dispatchCustomEvent(this.node, \"wh:form-submitted\", { bubbles: true, cancelable: true, detail: eventdetail as FormSubmitDetails<Record<string, unknown>> })) {\n          merge.run(this.node, { form: await this.getFormValue() });\n\n          //FIXME why is going to 'thank you' not in the formbase?\n          this._navigateToThankYou(result.result && result.result.richvalues);\n          this.onSubmitSuccess(result.result);\n        }\n      } else {\n        const failedfields = result.errors.map(error => error.name || \"*\").sort().join(\" \");\n        this.sendFormEvent({ event: 'failed', errorfields: failedfields, errorsource: 'server' });\n\n        if (globalerrors.length) {\n          if (dompack.dispatchCustomEvent(this.node, \"wh:form-globalerrors\", { bubbles: true, cancelable: true, detail: { globalerrors } }))\n            this.displayGlobalErrors(globalerrors);\n        }\n\n        if (dompack.dispatchCustomEvent(this.node, \"wh:form-failed\", { bubbles: true, cancelable: true, detail: eventdetail }))\n          this.onSubmitFailed(result.errors, result.result);\n      }\n      return pick(result, [\"result\"]);\n    } catch (e) {\n      this.sendFormEvent({ event: 'exception', exception: String(e), errorsource: insubmitrpc ? 'server' : 'client' });\n\n      if (dompack.dispatchCustomEvent(this.node, \"wh:form-exception\", { bubbles: true, cancelable: true, detail: eventdetail }))\n        this.onSubmitException(e as Error);\n\n      throw e;\n    } finally {\n      waiter.resolve();\n      this.__formhandler.submitting = false;\n    }\n  }\n\n  displayGlobalErrors(globalerrors: FormSubmitMessage[]) {\n    try {\n      const errors = globalerrors.map(error => dompack.create(\"p\", { textContent: error.message }));\n      runMessageBox(errors, [{ title: \"OK\" }]); //TODO: language?\n    } catch (e) {\n      console.error(\"runMessageBox failed\", e);\n      // eslint-disable-next-line no-alert -- alert is our fallback without message boxes\n      alert(globalerrors.map(error => error.message).join(\"\\n\"));\n    }\n  }\n\n  //Get the first group that failed error handling\n  getFirstFailedGroup() {\n    return this.node.querySelector(\".wh-form__fieldgroup-error\");\n  }\n\n  //override this to deal with succesful submissions\n  onSubmitSuccess(result: FormSubmitEmbeddedResult<unknown>) {\n    const formpos = this.node.getBoundingClientRect();\n    if (formpos.top < 0)\n      this.node.scrollIntoView({ block: 'start', behavior: 'smooth' });\n\n    if (result && result.resultsguid)\n      this.node.dataset.whFormResultguid = result.resultsguid;\n\n    if (result && result.submitinstruction)\n      navigateTo(result.submitinstruction);\n  }\n\n  //override this to deal with failed submissions\n  onSubmitFailed(errors: FormSubmitMessage[], result: unknown) {\n  }\n\n  //override this to deal with form exceptions\n  onSubmitException(e: Error) {\n  }\n\n  async validateSingleFormField(field: HTMLElement): Promise<boolean> {\n    if (field instanceof HTMLInputElement && field.type === \"email\") { //TODO perhaps move this to webharefields.es ?\n      if (focus.getCurrentlyFocusedElement() === field) { //TODO clearing suggestion on change should probably be generalized\n        if (field.propWhValidationSuggestion) {\n          field.propWhValidationSuggestion = null;\n        }\n      }\n\n      //Just because it's focused doesn't mean we shouldn't validate it\n      const validation = emailvalidation.validateField(this, field);\n      this.pendingrpcs.push(validation);\n      if (!(await validation))\n        return false;\n    }\n    return true;\n  }\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/upload\" {\n}\n\nimport * as dompack from \"@webhare/dompack\";\n\n/* Note: you can't really build a FileList yourself, but FileList doesn't satisfy File[] and neither the reverse works. (noone is really happy with that though)\n   So we'll just accept both types */\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"wh:requestfiles\": CustomEvent<{\n      /** Callback to invoke with the list of files to upload */\n      resolve: (files: File[]) => void;\n    } & Required<UploadRequestOptions>>;\n  }\n}\n\nexport interface UploadRequestOptions {\n  ///List of mimetypes to accept, supports wildcards (eg `image/*`)\n  accept?: string[];\n  ///Allow multiple files to be selected. By default determined by whether you use requestFiles or requestFile, but can be set to false to force requestFiles to only accept one file\n  multiple?: boolean;\n}\n\nexport interface UploadProgressStatus {\n  uploadedBytes: number;\n  totalBytes: number;\n  uploadedFiles: number;\n  totalFiles: number;\n  //Upload speed in bytes/sec.\n  uploadSpeed: number;\n}\n\nexport interface UploadOptions {\n  onProgress?: (progress: UploadProgressStatus) => void;\n  signal?: AbortSignal;\n}\n\nexport interface UploadResult {\n  name: string;\n  size: number;\n  type: string;\n  token: string;\n}\n\nexport interface UploadManifest {\n  files: Array<{\n    name: string;\n    size: number;\n    type: string;\n  }>;\n}\n\nexport interface UploadInstructions {\n  baseUrl: string;\n  sessionId: string;\n  chunkSize: number;\n  signal?: AbortSignal;\n}\n\nexport type ResourceDescriptorCompatible = {\n  resource: Blob;\n  mediaType: string;\n  fileName: string | null;\n};\n\nexport interface UploaderBase {\n  readonly manifest: UploadManifest;\n  upload(instructions: UploadInstructions, options?: UploadOptions): Promise<UploadResult | UploadResult[]>;\n}\n\nfunction isRealBlob(data: Blob) { return data instanceof Blob; }\nasync function convertToRealBlob(data: Blob): Promise<Blob> { return new Blob([await data.arrayBuffer()]); }\n\nexport class MultiFileUploader implements UploaderBase {\n  readonly #files: Array<{ name: string; size: number; type: string; data: Blob }>;\n  readonly manifest: UploadManifest;\n\n  constructor(files: Array<File | Blob | ResourceDescriptorCompatible>, signal?: AbortSignal) {\n    if (!files.length)\n      throw new Error(\"No files to upload\");\n\n    this.#files = files.map(item => (\n      \"resource\" in item ? {\n        name: item.fileName ?? \"upload\",\n        size: item.resource.size,\n        type: item.mediaType || \"application/octet-stream\",\n        data: item.resource,\n      } : {\n        name: \"name\" in item ? item.name : \"upload\",\n        size: item.size,\n        type: item.type || \"application/octet-stream\",\n        data: item\n      }));\n    this.manifest = {\n      files: this.#files.map(file => ({ name: file.name, size: file.size, type: file.type }))\n    };\n  }\n\n  async upload(instructions: UploadInstructions, options?: UploadOptions): Promise<UploadResult[]> {\n    const outfiles: UploadResult[] = [];\n    let uploadedBytes = 0, uploadedFiles = 0;\n    const totalBytes = this.#files.reduce((acc, file) => acc + file.size, 0);\n    const totalFiles = this.#files.length;\n    const start = Date.now();\n\n    function fireProgressEvent(partialbytes: number) {\n      const curUploaded = uploadedBytes + partialbytes;\n      const timeElapsed = Date.now() - start;\n      options?.onProgress?.({ uploadedBytes: curUploaded, totalBytes, uploadedFiles, totalFiles, uploadSpeed: timeElapsed ? curUploaded / (timeElapsed / 1000) : 0 });\n    }\n\n    fireProgressEvent(0);\n\n    for (const [idx, file] of this.#files.entries()) {\n      for (let offset = 0; offset < file.size; offset += instructions.chunkSize) {\n        let data = file.data.slice(offset, offset + instructions.chunkSize);\n        // Data needs to be a real Blob for XMLHttpRequest to work\n        if (!isRealBlob(data))\n          data = await convertToRealBlob(data);\n        const uploadurl = `${instructions.baseUrl}&offset=${offset}&file=${idx}`;\n\n\n        /* we can't use fetch as we can't do progress tracking there!\n           there's https://stackoverflow.com/questions/35711724/upload-progress-indicators-for-fetch but it requires duplex: half which requires QUIC/H2\n\n           https://fetch.spec.whatwg.org/#fetch-api says\n           The fetch() method is relatively low-level API for fetching resources. It covers slightly more ground than XMLHttpRequest, although it is currently lacking when it comes to request progression (not response progression).\n\n        let bytesUploaded = 0;\n        const progressTrackingStream = new TransformStream<Uint8Array, Uint8Array>({\n          transform(chunk: Uint8Array, controller: TransformStreamDefaultController<Uint8Array>) {\n            controller.enqueue(chunk);\n            bytesUploaded += chunk.byteLength;\n            console.log(\"upload progress:\", bytesUploaded / data.size);\n            // uploadProgress.value = bytesUploaded / totalBytes;\n          },\n          flush(controller: TransformStreamDefaultController<Uint8Array>) {\n            console.log(\"completed stream\");\n          },\n        });\n           */\n        if (options?.signal?.aborted)\n          throw new Error(\"Upload has been aborted\");\n\n        if (globalThis.XMLHttpRequest) { //let's hope by the time browsers drop XMLHttpRequest, fetch finally has proper progress\n          const defer = Promise.withResolvers<void>();\n          const xmlhttp = new globalThis.XMLHttpRequest;\n          xmlhttp.overrideMimeType(\"application/octet-stream\");\n          xmlhttp.upload.addEventListener('progress', ev => fireProgressEvent(ev.loaded));\n          xmlhttp.addEventListener('abort', (ev: ProgressEvent<XMLHttpRequestEventTarget>) => defer.reject(new Error(\"Upload has been aborted\")));\n          xmlhttp.addEventListener('error', (ev: ProgressEvent<XMLHttpRequestEventTarget>) => defer.reject(new Error(\"Error\")));\n          xmlhttp.addEventListener('load', () => defer.resolve()); //invoked on success\n          xmlhttp.addEventListener('loadend', (ev: ProgressEvent<XMLHttpRequestEventTarget>) => { //invoked after either abort/error/load\n          });\n          xmlhttp.open(\"POST\", uploadurl, true);\n          xmlhttp.send(data);\n\n          const doAbort = () => xmlhttp.abort();\n          options?.signal?.addEventListener(\"abort\", doAbort);\n          await defer.promise;\n          options?.signal?.removeEventListener(\"abort\", doAbort);\n        } else { //fallback to fetch(). needed on Node, but it'll break progress reporting\n          const uploadresult = await fetch(uploadurl, {\n            method: \"POST\",\n            headers: { \"Content-Type\": \"application/octet-stream\" },\n            body: data // At some point... .stream().pipeThrough(progressTrackingStream) - but see above why it won't work yet\n          });\n\n          if (!uploadresult.ok)\n            throw new Error(`Upload failed`);\n        }\n\n        uploadedBytes += data.size;\n      }\n\n      outfiles.push({ ...this.manifest.files[idx], token: instructions.sessionId + '#' + idx });\n      ++uploadedFiles;\n      fireProgressEvent(0);\n    }\n\n    return outfiles;\n  }\n}\n\nexport class SingleFileUploader implements UploaderBase {\n  uploader;\n\n  get manifest() {\n    return this.uploader.manifest;\n  }\n\n  constructor(file: File | Blob | ResourceDescriptorCompatible) {\n    this.uploader = new MultiFileUploader([file]);\n  }\n\n  async upload(instructions: UploadInstructions, options?: UploadOptions): Promise<UploadResult> {\n    return (await this.uploader.upload(instructions, options))[0];\n  }\n}\n\nasync function getFilelistFromUser(multiple: boolean, accept: string[]): Promise<File[]> {\n  const defer = Promise.withResolvers<File[]>();\n  if (dompack.dispatchCustomEvent(window, \"wh:requestfiles\", { bubbles: true, cancelable: true, detail: { resolve: defer.resolve, multiple, accept } })) {\n    const input = document.createElement('input');\n    input.type = \"file\";\n    input.multiple = multiple;\n\n    if (accept.length)\n      input.accept = accept.join(\",\");\n    input.addEventListener(\"change\", () => defer.resolve([...input.files || []]));\n    input.addEventListener(\"cancel\", () => defer.resolve([]));\n    input.showPicker();\n  }\n\n  const list = await defer.promise;\n  if (!multiple && list.length > 1)\n    throw new Error(`wh:requestfiles intercepter selected multiple files, but only one was requested`);\n  return list;\n}\n\nexport async function requestFiles(options?: UploadRequestOptions): Promise<File[] | null> {\n  const files = await getFilelistFromUser(!(options?.multiple === false), options?.accept || []);\n  if (!files.length)\n    return null;\n\n  return files;\n}\n\n// We're adding a separate interface for single-file uploads as it's quite annoying to have to deal with interfaces generalized for multiple files if you really, really know you only ever wanted one file anyway\nexport async function requestFile(options?: UploadRequestOptions): Promise<File | null> {\n  const files = await getFilelistFromUser(false, options?.accept || []);\n  if (files.length !== 1)\n    return null;\n\n  return files[0];\n}\n\n/** Convert a file to a data: URL\n * @param file - The file to convert\n * @returns A promise that resolves to the data: URL\n*/\nexport function getFileAsDataURL(file: File): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader;\n    // MDN: When the read operation is finished… the loadend event is triggered.\n    reader.addEventListener(\"loadend\", () => {\n      //At that time, the result attribute contains the data as a data: URL representing the file's data as a base64 encoded string.\n      resolve(reader.result as string);\n    });\n    reader.addEventListener(\"error\", () => reject(new Error(\"Failed to load file\")));\n    reader.readAsDataURL(file);\n  });\n}\n","// Auto-generated language file from /opt/wh/whtree/modules/publisher/js/captcha/__captcha.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"publisher\",\"nl\",{\"site\":{\"captcha\":{\"explain\":\"Vink het vakje hieronder aan\",\"title\":\"Verificatie\"}}});\nregisterTexts(\"publisher\",\"en\",{\"site\":{\"captcha\":{\"explain\":\"Please check the box below\",\"title\":\"Verification\"}}});\n// Adding dependency: /opt/wh/whtree/modules/publisher/language/nl.xml\n// Adding dependency: /opt/wh/whtree/modules/publisher/language/default.xml\n","import { getTid } from \"@webhare/gettid\";\nimport \"./__captcha.lang.json\";\n\nexport interface CaptchaProvider {\n  name: string;\n  apikey: string;\n}\n\nexport interface CaptchaSettings {\n  title: string;\n  onResponse: (response: string) => void;\n}\n\nexport interface CaptchaProviderRegistration {\n  initialize: (provider: CaptchaProvider, injectInto: HTMLElement, settings: CaptchaSettings) => Promise<void>;\n}\n\nexport const captcharegistry: Record<string, CaptchaProviderRegistration> = {};\n\n\nexport async function initializeCaptcha(provider: CaptchaProvider, injectInto: HTMLElement, settings?: Partial<CaptchaSettings>): Promise<void> {\n  if (!captcharegistry[provider.name])\n    throw new Error(`Captcha provider '${provider.name}' not registered`);\n  if (!settings?.onResponse)\n    throw new Error(\"onResponse callback is required\");\n\n  const finalsettings: CaptchaSettings = {\n    title: settings?.title ?? getTid(\"publisher:site.captcha.title\"),\n    onResponse: settings?.onResponse ?? (() => { }),\n  };\n\n  await captcharegistry[provider.name].initialize(provider, injectInto, finalsettings);\n}\n","// Auto-generated language file from /opt/wh/whtree/modules/publisher/js/forms/internal/form.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"publisher\",\"nl\",{\"site\":{\"forms\":{\"imgedit-explain-upload\":\"Sleep bestanden hier of klik om te uploaden\",\"imgedit-groupelement-replace\":[1,\", Vervang afbeelding\"],\"imgedit-groupelement-upload\":[1,\", Upload afbeelding\"],\"imgedit-remove\":\"Verwijder afbeelding\",\"nextpage\":\"Volgende\",\"previouspage\":\"Vorige\",\"selectfile\":\"Selecteer bestand\",\"splitdatetime-day-arialabel\":\"dag\",\"splitdatetime-hours-arialabel\":\"uur\",\"splitdatetime-minutes-arialabel\":\"minuut\",\"splitdatetime-month-arialabel\":\"maand\",\"splitdatetime-seconds-arialabel\":\"seconde\",\"splitdatetime-year-arialabel\":\"jaar\",\"starsrequired\":\"* betekent dat een veld verplicht is\",\"submit\":\"Versturen\",\"upload-emptytext\":\"Geen bestand geselecteerd\",\"upload-filename\":[\"Geselecteerde bestand is \",1],\"upload-remove\":\"Verwijder bestand\",\"addressfield\":{\"address_not_found\":\"Het adres kon niet worden gevonden.\",\"invalid_nr_detail\":\"Ongeldig huisnummer.\",\"invalid_zip\":\"Ongeldige postcode.\",\"zip_not_found\":\"Combinatie van postcode en huisnummer komt niet voor.\"},\"commonerrors\":{\"alphanum\":\"De waarde moet alfanumeriek zijn.\",\"badfiletype\":\"Dit bestandstype is niet toegestaan\",\"check\":[\"Kies minimaal \",1,\" en maximaal \",2,\" items.\"],\"date\":\"Dit is geen geldige datum.\",\"default\":\"Deze waarde is onjuist.\",\"digits\":\"De waarde moet numeriek zijn.\",\"email\":\"Dit is geen geldig e-mailadres.\",\"email_baddomain\":[\"Vanwege problemen met het e-mailen naar \",1,\" e-mailadressen, willen we je vragen om een alternatief e-mailadres te gebruiken.\"],\"email_suggestion\":[\"Bedoel je \",1,\"?\"],\"equalto\":\"De waardes moeten identiek zijn.\",\"formunavailable\":\"Dit formulier is momenteel niet beschikbaar\",\"integer\":\"De waarde moet een nummer zijn.\",\"length\":[\"De waarde moet tussen \",1,\" en \",2,\" karakters lang zijn.\"],\"max\":[\"De waarde mag niet groter zijn dan \",1,\".\"],\"maxarray\":[\"U kunt maximaal \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 onderdeel\"],\"subselse\":[1,\" onderdelen\"]},\" toevoegen.\"],\"maxcheck\":[\"Kies maximaal \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 item\"],\"subselse\":[1,\" items\"]},\".\"],\"maxheight\":[\"De afbeelding is te groot. Deze mag maximaal \",2,\" pixels hoog zijn.\"],\"maxlength\":[\"De waarde is te lang. Deze mag maximaal \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 karakter\"],\"subselse\":[1,\" karakters\"]},\" lang zijn.\"],\"maxwidth\":[\"De afbeelding is te groot. Deze mag maximaal \",2,\" pixels breed zijn.\"],\"min\":[\"De waarde mag niet lager zijn dan \",1,\".\"],\"minarray\":[\"U moet minimaal \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 onderdeel\"],\"subselse\":[1,\" onderdelen\"]},\" toevoegen.\"],\"mincheck\":[\"Kies minimaal \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 item\"],\"subselse\":[1,\" items\"]},\".\"],\"minheight\":[\"De afbeelding is te klein. Deze moet minimaal \",2,\" pixels hoog zijn.\"],\"minlength\":[\"De tekst is te kort. Deze moet uit minimaal \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 karakter\"],\"subselse\":[1,\" karakters\"]},\" bestaan.\"],\"minwidth\":[\"De afbeelding is te klein. Deze moet minimaal \",2,\" pixels breed zijn.\"],\"notblank\":\"De waarde mag niet leeg zijn.\",\"number\":\"De waarde moet een nummer zijn.\",\"pattern\":\"De waarde is onjuist.\",\"range\":[\"De waarde moet tussen \",1,\" en \",2,\" liggen.\"],\"required\":\"Dit veld is verplicht.\",\"step1mismatch\":\"De waarde moet een geheel getal zijn\",\"stepmismatch\":[\"De waarde moet een meervoud zijn van \",1,\".\"],\"time\":\"Dit is geen geldige tijd.\",\"unacceptableemail\":\"Dit e-mailadres is hier niet toegestaan\",\"upload_cannotcheck\":\"Dit bestand kan niet geüpload worden omdat we het momenteel niet kunnen verifiëren\",\"upload_suspicious\":\"Dit bestand ziet er verdacht uit en kan helaas niet geüpload worden\",\"url\":\"Dit is geen geldige URL.\"}}}});\nregisterTexts(\"publisher\",\"en\",{\"site\":{\"forms\":{\"imgedit-explain-upload\":\"Drag and drop files here or click to upload\",\"imgedit-groupelement-replace\":[1,\", Replace image\"],\"imgedit-groupelement-upload\":[1,\", Upload image\"],\"imgedit-remove\":\"Remove image\",\"nextpage\":\"Next\",\"previouspage\":\"Previous\",\"selectfile\":\"Select file\",\"splitdatetime-day-arialabel\":\"day\",\"splitdatetime-hours-arialabel\":\"hour\",\"splitdatetime-minutes-arialabel\":\"minute\",\"splitdatetime-month-arialabel\":\"month\",\"splitdatetime-seconds-arialabel\":\"second\",\"splitdatetime-year-arialabel\":\"year\",\"starsrequired\":\"* indicates a required field\",\"submit\":\"Submit\",\"upload-emptytext\":\"No file chosen\",\"upload-filename\":[\"Uploaded file is \",1],\"upload-remove\":\"Remove file\",\"addressfield\":{\"address_not_found\":\"The address could not be found.\",\"invalid_nr_detail\":\"Invalid house number.\",\"invalid_zip\":\"Invalid ZIP or postal code.\",\"zip_not_found\":\"Unknown combination of postal code and house number.\"},\"commonerrors\":{\"alphanum\":\"This value should be alphanumeric.\",\"badfiletype\":\"This file type is not allowed\",\"cannotprocessfile\":\"This file looks suspicious and can unfortunately not be uploaded\",\"check\":[\"You must select between \",1,\" and \",2,\" choices.\"],\"date\":\"This is not a valid date\",\"default\":\"This value seems to be invalid.\",\"digits\":\"This value should be digits.\",\"email\":\"This value should be a valid email.\",\"email_baddomain\":[\"Due to difficulties with mailing to \",1,\" email addresses we kindly request you to use an alternative email provider.\"],\"email_suggestion\":[\"Did you mean \",1,\"?\"],\"equalto\":\"This value should be the same.\",\"formunavailable\":\"This form is currently unavailable\",\"integer\":\"This value should be a valid integer.\",\"length\":[\"This value length is invalid. It should be between \",1,\" and \",2,\" characters long.\"],\"max\":[\"This value should be lower than or equal to \",1,\".\"],\"maxarray\":[\"You can add at most \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 item\"],\"subselse\":[1,\" items\"]},\".\"],\"maxcheck\":[\"You must select \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 choice\"],\"subselse\":[1,\" choices\"]},\" or fewer.\"],\"maxheight\":[\"The image is too big. It should be at most \",2,\" pixels high.\"],\"maxlength\":[\"This value is too long. It should have \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 character\"],\"subselse\":[1,\" characters\"]},\" or fewer.\"],\"maxsignupsreached\":\"The maximum number of signups has been reached\",\"maxwidth\":[\"The image is too big. It should be at most \",2,\" pixels wide.\"],\"min\":[\"This value should be greater than or equal to \",1,\".\"],\"minarray\":[\"You must add at least \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 item\"],\"subselse\":[1,\" items\"]},\".\"],\"mincheck\":[\"You must select at least \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 choice\"],\"subselse\":[1,\" choices\"]},\".\"],\"minheight\":[\"The image is too small. It should be at least \",2,\" pixels high.\"],\"minlength\":[\"This value is too short. It should have \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 character\"],\"subselse\":[1,\" characters\"]},\" or more.\"],\"minwidth\":[\"The image is too small. It should be at least \",2,\" pixels wide.\"],\"notblank\":\"This value should not be blank.\",\"number\":\"This value should be a valid number.\",\"pattern\":\"This value seems to be invalid.\",\"range\":[\"This value should be between \",1,\" and \",2,\".\"],\"required\":\"This value is required.\",\"step1mismatch\":\"The value must be a whole number\",\"stepmismatch\":[\"The value should be a multiple of \",1,\".\"],\"time\":\"This is not a valid time\",\"unacceptableemail\":\"This email address is not acceptable here\",\"upload_cannotcheck\":\"This file cannot be uploaded as we are currently unable to verify it\",\"upload_suspicious\":\"This file looks suspicious and can unfortunately not be uploaded\",\"url\":\"This value should be a valid url.\"}}}});\n// Adding dependency: /opt/wh/whtree/modules/publisher/language/nl.xml\n// Adding dependency: /opt/wh/whtree/modules/publisher/language/default.xml\n","/* eslint-disable @typescript-eslint/no-floating-promises -- FIXME: needs API rework */\n\nimport * as dompack from 'dompack';\nimport { requestFile } from \"@webhare/upload\";\n\nimport { getTid } from \"@webhare/gettid\";\nimport { setFieldError } from '@mod-publisher/js/forms/internal/customvalidation';\nimport { getFieldDisplayName } from '@webhare/forms/src/domsupport';\nimport { JSFormElement } from '@webhare/forms/src/jsformelement';\nimport type { FormFileValue } from '@webhare/forms/src/types';\nimport \"@mod-publisher/js/forms/internal/form.lang.json\"; //we need eg publisher:site.forms.selectfile\n\nfunction isAcceptableType(fileType: string, masks: string[]) {\n  if (masks.includes(fileType))\n    return true;\n\n  const basetype = fileType.split('/')[0];\n  if (['image', 'video', 'audio'].includes(basetype) && masks.includes(basetype + '/*'))\n    return true;\n\n  return false;\n}\n\n\nexport abstract class FileEditElement extends JSFormElement<FormFileValue[]> {\n  root;\n  maindiv;\n  readonly group: HTMLElement | null;\n\n  /** The current uploaded files */\n  protected currentFiles = new Array<FormFileValue>;\n  /** Maximum number of files */\n  protected maxFiles;\n\n  constructor() {\n    super();\n    this.root = this.attachShadow({ mode: 'open', delegatesFocus: true });\n    this.maindiv = document.createElement(\"div\");\n    this.maindiv.inert = this.disabled;\n\n    const csslink = document.createElement(\"link\");\n    csslink.rel = \"stylesheet\";\n    csslink.href = \"/.wh/ea/p/forms/controls.css\";\n    this.root.append(csslink, this.maindiv);\n\n    this.group = this.closest<HTMLElement>(\".wh-form__fieldgroup\");\n    this.whFormsApiChecker = async () => { await this._check(); };\n    this.maxFiles = parseInt(this.getAttribute(\"max-files\")!) || 1;\n    if (this.getAttribute(\"value\"))\n      this.#setValue(JSON.parse(this.getAttribute(\"value\")!));\n\n    if (this.group) {\n      this.group.addEventListener(\"dragover\", evt => evt.preventDefault());\n      this.group.addEventListener(\"dragenter\", evt => evt.preventDefault());\n      this.group.addEventListener(\"drop\", evt => this.doDrop(evt));\n    }\n  }\n  abstract refresh(): void;\n  isSet(): boolean {\n    return this.currentFiles.length > 0;\n  }\n  async _check() {\n    const error = this.required && !this.isSet();\n    if (error)\n      setFieldError(this, getTid(\"publisher:site.forms.commonerrors.required\"), { reportimmediately: false });\n    else\n      setFieldError(this, \"\", { reportimmediately: false });\n    return error;\n  }\n\n  protected refreshState() {\n    this.maindiv.inert = this.disabled;\n  }\n\n  get value(): FormFileValue[] {\n    return this.currentFiles;\n  }\n\n  set value(value: FormFileValue[]) {\n    this.#setValue(value);\n    this.refresh();\n  }\n\n  #setValue(value: Array<Partial<FormFileValue>>) { //taking a partial so we can do a better job at fixing missing fields from incorrect callers\n    //updates the value but does not fire events/refresh()\n    const toset: FormFileValue[] = [];\n\n    for (const row of value) {\n      if (row?.file) {\n        if (!this._isAcceptableType(row.file.type))\n          throw new Error(`File type ${row.file.type} is not acceptable for ${getFieldDisplayName(this)}`);\n        toset.push({ fileName: row.fileName || row.file.name, file: row.file, link: null });\n      } else if (row?.link) {\n        toset.push({ fileName: row.fileName || \"\", file: null, link: row.link });\n      } else {\n        throw new Error(`Incorrect value type received for ${getFieldDisplayName(this)} - expect 'file' or 'link' to be set`);\n      }\n\n      if (toset.length >= this.maxFiles)\n        break;\n    }\n    this.currentFiles = toset;\n  }\n\n  _isAcceptableType(mimetype: string) {\n    const accept = this.getAttribute(\"accept\")?.split(',').map(mask => mask.trim()) ?? [];\n    return !accept.length || isAcceptableType(mimetype, accept);\n  }\n\n  private doDrop(evt: DragEvent) {\n    //FIXME check 'accept' - or can the drag handlers do that?\n    evt.preventDefault();\n\n    const files = evt.dataTransfer?.files;\n    if (files)\n      this.processUpload(files[0]);\n  }\n\n  async uploadFile(evt: Event) {\n    evt.preventDefault();\n\n    if (this.disabled || this.currentFiles.length >= this.maxFiles)\n      return; //should not even have been offered?\n\n    const accept = this.getAttribute(\"accept\")?.split(',') ?? [];\n    using lock = dompack.flagUIBusy();\n    void (lock);\n\n    const file = await requestFile({ accept });\n    if (!file)\n      return;\n\n    await this.processUpload(file);\n  }\n\n  private async processUpload(file: File) {\n    if (this.disabled || this.currentFiles.length >= this.maxFiles)\n      return; //should not even have been offered?\n\n    if (!this._isAcceptableType(file.type)) {\n      //TODO tell server it can destroy the file immediately (should have told uploadsession at the start?\n      const msg = this.dataset.whAccepterror || getTid(\"publisher:site.forms.commonerrors.badfiletype\");\n      setFieldError(this, msg, { reportimmediately: true });\n      return;\n    }\n\n    this.currentFiles.push({ fileName: file.name, file: file, link: null });\n    this.refresh();\n    dompack.dispatchCustomEvent(this, 'change', { bubbles: true, cancelable: false });\n  }\n\n  protected deleteFile(evt: Event, idx: number) {\n    if (evt)\n      dompack.stop(evt);\n\n    this.currentFiles.splice(idx, 1);\n    this.refresh();\n    dompack.dispatchCustomEvent(this, 'change', { bubbles: true, cancelable: false });\n  }\n\n  protected setupUploadButton(button: HTMLElement) {\n    button.addEventListener(\"click\", evt => void this.uploadFile(evt));\n  }\n\n  protected setupDeleteButton(button: HTMLElement, idx: number) {\n    button.addEventListener(\"click\", evt => this.deleteFile(evt, idx));\n    button.ariaLabel = getTid(\"publisher:site.forms.imgedit-remove\");\n  }\n}\n","import * as dompack from 'dompack';\nimport { getTid } from \"@webhare/gettid\";\nimport { FileEditElement as FileEditElementBase } from './fileeditbase';\nimport './upload.css';\nimport { isFile } from '@webhare/std';\n\n\n\n//FIXME nicer class name? eg add form or field to these (and imgedit) class names?\nexport class FileUploadFormElement extends FileEditElementBase {\n  constructor() {\n    super();\n    this.refresh();\n  }\n\n  #constructFileHolder() {\n    const fileholder = document.createElement(\"div\");\n    fileholder.classList.add('file');\n    return fileholder;\n  }\n\n  refresh() {\n    const nodes = [];\n\n    for (const [idx, file] of this.currentFiles.entries()) {\n      const fileholder = this.#constructFileHolder();\n\n      // const label = getLabelText(this.node);\n      // aria-label={label}\n      const filename = isFile(file) ? file.name : file.fileName;\n      /* for ease of 'form like' presentation, we're currently using an <input>. but quite hacky, eg. we need readonly to have it not interfere with clicks. */\n      const filenamefield =\n        <input part=\"filename\" class=\"file__name\" type=\"text\" value={filename} readonly />;\n\n      const deletebutton = <button part=\"button deletebutton\" class=\"deletebutton file__deletebutton\" />;\n      this.setupDeleteButton(deletebutton, idx);\n\n      fileholder.append(filenamefield, deletebutton);\n      nodes.push(fileholder);\n    }\n\n    if (this.currentFiles.length < this.maxFiles) {\n      const fileholder = this.#constructFileHolder();\n      fileholder.classList.add('file--placeholder');\n\n      const filenamefield =\n        <input part=\"filename\" class=\"file__name\" type=\"text\" value=\"\" placeholder={getTid(\"publisher:site.forms.upload-emptytext\")} disabled readonly />;\n\n      const uploadbutton = <button part=\"button selectbutton\" type=\"button\" class=\"wh-form__uploadfieldselect wh-form__button\"><span class=\"wh-form__buttonlabel\">{getTid(\"publisher:site.forms.selectfile\")}</span></button>;\n      this.setupUploadButton(fileholder);\n      fileholder.append(filenamefield, uploadbutton);\n      nodes.push(fileholder);\n    }\n\n    this.maindiv.replaceChildren(...nodes);\n  }\n}\n\n//////// Legacy version. We expect existing users to migrate to the version above\n\nexport default class UploadField {\n  constructor(node: HTMLElement) {\n    if (!customElements.get(\"wh-fileedit\"))\n      customElements.define(\"wh-fileedit\", FileUploadFormElement);\n  }\n}\n","/* import ImgEditField from '@mod-publisher/js/forms/fields/imgedit';\n*/\nimport * as dompack from '@webhare/dompack';\nimport { FileEditElement } from './fileeditbase';\nimport { emplace } from '@webhare/std';\nimport { getTid } from '@webhare/gettid';\nimport { getFileAsDataURL } from '@webhare/upload';\nimport { setFieldError } from '@mod-publisher/js/forms/internal/customvalidation';\n\nlet revoker: FinalizationRegistry<string> | undefined;\nconst cachedURLs = new WeakMap<File, string>();\n\nfunction createFileURL(file: File): string {\n  return emplace(cachedURLs, file, {\n    insert: () => {\n      const newurl = URL.createObjectURL(file);\n      //setup a finalizer to revoke object urls\n      revoker ||= new FinalizationRegistry<string>((oldurl) => URL.revokeObjectURL(oldurl));\n      //as soon as file is lost to us\n      revoker.register(file, newurl);\n      return newurl;\n    }\n  });\n}\n\nasync function getImageDimensions(file: File): Promise<{ width: number; height: number }> {\n  const img = await dompack.loadImage(await getFileAsDataURL(file));\n  return { width: img.naturalWidth, height: img.naturalHeight };\n}\n\ninterface ImgEditTexts {\n  explainUpload?: string;\n}\n\nexport class ImgEditElement extends FileEditElement {\n  static observedAttributes = [\"min-width\", \"max-width\", \"min-height\", \"max-height\"];\n\n  private static texts: ImgEditTexts | null = null;\n\n  minWidth: number;\n  maxWidth: number;\n  minHeight: number;\n  maxHeight: number;\n\n  constructor() {\n    super();\n    // this.addEventListener(\"keypress\", evt => this.checkForUploadOrClear(evt)); // handle space+enter to active\n\n    this.maindiv.classList.add(\"images\");\n\n    this.minWidth = parseInt(this.getAttribute(\"min-width\") || \"0\") || 0;\n    this.maxWidth = parseInt(this.getAttribute(\"max-width\") || \"0\") || 0;\n    this.minHeight = parseInt(this.getAttribute(\"min-height\") || \"0\") || 0;\n    this.maxHeight = parseInt(this.getAttribute(\"max-height\") || \"0\") || 0;\n\n    this.refresh();\n  }\n\n  attributeChangedCallback(name: string, _oldValue: string, newValue: string) {\n    const value = parseInt(newValue);\n    if (isNaN(value))\n      return;\n    switch (name) {\n      case \"min-width\": {\n        this.minWidth = value;\n        break;\n      }\n      case \"max-width\": {\n        this.maxWidth = value;\n        break;\n      }\n      case \"min-height\": {\n        this.minHeight = value;\n        break;\n      }\n      case \"max-height\": {\n        this.maxHeight = value;\n        break;\n      }\n    }\n  }\n\n  static setTexts(textupdate: ImgEditTexts) {\n    if (!ImgEditElement.texts)\n      ImgEditElement.texts = {};\n\n    Object.assign(ImgEditElement.texts, textupdate);\n    dompack.qSA<ImgEditElement>(\"wh-imgedit\").forEach(node => node.refresh()); //update any existing nodes\n  }\n\n  async _check() {\n    const error = await super._check();\n    if (!error && this.isSet() && (this.minWidth || this.maxWidth || this.minHeight || this.maxHeight)) {\n      for (const file of this.currentFiles) {\n        if (file.file) {\n          const size = await getImageDimensions(file.file);\n          if (this.minWidth && size.width < this.minWidth)\n            setFieldError(this, getTid(\"publisher:site.forms.commonerrors.minwidth\", size.width, this.minWidth), { reportimmediately: false });\n          else if (this.maxWidth && size.width > this.maxWidth)\n            setFieldError(this, getTid(\"publisher:site.forms.commonerrors.maxwidth\", size.width, this.maxWidth), { reportimmediately: false });\n          else if (this.minHeight && size.height < this.minHeight)\n            setFieldError(this, getTid(\"publisher:site.forms.commonerrors.minheight\", size.height, this.minHeight), { reportimmediately: false });\n          else if (this.maxHeight && size.height > this.maxHeight)\n            setFieldError(this, getTid(\"publisher:site.forms.commonerrors.maxheight\", size.height, this.maxHeight), { reportimmediately: false });\n        }\n      }\n    }\n    return error;\n  }\n\n  refresh() {\n    const nodes = [];\n    for (const [idx, file] of this.currentFiles.entries()) {\n      const imgholder = dompack.create(\"div\", { class: \"image\", part: \"image\" });\n      const img = dompack.create(\"img\", { class: 'image__img', src: file.link ?? createFileURL(file.file) });\n\n      const deletebutton = dompack.create(\"button\", { part: \"button deletebutton\", class: \"deletebutton image__deletebutton\" });\n      this.setupDeleteButton(deletebutton, idx);\n\n      imgholder.append(img, deletebutton);\n      nodes.push(imgholder);\n    }\n\n    if (this.currentFiles.length < this.maxFiles) {\n      //add an extra 'image' which is the placeholder for additional uploads\n      const imgholder = dompack.create(\"div\", { class: \"image image--placeholder\", part: \"image placeholder\" });\n      const contentwrapper = dompack.create(\"div\", { class: \"image__content\" });\n      const uploadicon = dompack.create(\"div\", { class: \"image__uploadicon\", part: \"uploadicon\" });\n      const explain = dompack.create(\"div\", {\n        class: \"image__explain\",\n        textContent: ImgEditElement.texts?.explainUpload || getTid(\"publisher:site.forms.imgedit-explain-upload\")\n      });\n      imgholder.append(contentwrapper);\n      contentwrapper.append(uploadicon, explain);\n      imgholder.tabIndex = 0;\n      this.setupUploadButton(imgholder);\n      nodes.push(imgholder);\n    }\n\n    /* FIXME aria label, currently set at group level, should be per image?\n\n          // Set the aria-label to a combined label of the field together with the action which activating it through click/enter/space will perform\n          this.node.setAttribute(\"aria-label\", getTid(\"publisher:site.forms.imgedit-groupelement-upload\", this.node.dataset.arialabel));\n\n                    // Set the aria-label to a combined label of the field together with the action which activating it through click/enter/space will perform\n          this.node.setAttribute(\"aria-label\", getTid(\"publisher:site.forms.imgedit-groupelement-replace\", this.node.dataset.arialabel));\n*/\n\n    this.maindiv.replaceChildren(...nodes);\n  }\n}\n\n//////// Legacy version. We expect existing users to migrate to the version above\n\nexport default class ImgEditField {\n  constructor(node: HTMLElement) {\n    if (!customElements.get(\"wh-imgedit\"))\n      customElements.define(\"wh-imgedit\", ImgEditElement);\n  }\n}\n","import FormBase from '@mod-publisher/js/forms/rpc';\nimport type { FormConfiguration, FormHandlerFactory } from \"@webhare/forms\";\nimport { dispatchCustomEvent, flagUIBusy, qSA, register } from \"@webhare/dompack\";\nimport { emplace, sleep } from \"@webhare/std\";\nimport { downgradeUploadFields } from \"./domsupport\";\n\nlet formConfiguration: FormConfiguration | undefined;\nlet handlers: Map<string, FormHandlerFactory | PromiseWithResolvers<FormHandlerFactory>> | undefined;\nlet configuredRegistrations: true | undefined;\nconst firstWarningMs = 150, warningIntervalMs = 5000;\n\nasync function scheduleFormSetup(form: HTMLFormElement, factory: FormHandlerFactory) {\n  using lock = flagUIBusy();\n  void (lock);\n\n  //Ensure any custom elements in the form are actually registered or our communication with these elements may fail\n  const customEls = [...new Set(qSA(form, \"[name]\").map(_ => _.tagName.toLowerCase()))].filter(_ => _.includes(\"-\"));\n  if (customEls.length) {\n    const initPromise = Promise.all(customEls.map(_ => customElements.whenDefined(_))).then(() => ({ timeout: false }));\n\n    let nextWarning = Date.now() + firstWarningMs;\n    for (; ;) {\n      const timeoutPromise = sleep(new Date(nextWarning)).then(() => ({ timeout: true }));\n      const result = await Promise.race([initPromise, timeoutPromise]);\n      if (!result.timeout)\n        break;\n\n      const missing = customEls.filter(tag => !customElements.get(tag)).join(\", \");\n      if (missing === 'wh-fileedit') {\n        console.warn(`Developers: we recommend explicitly registering a component for \".wh-form__upload\"`);\n        downgradeUploadFields(form);\n        break;\n      }\n      console.warn(`Still waiting for the following custom elements to be defined in form ${form.id ?? form.dataset.whFormId}:`, missing);\n      nextWarning = Date.now() + warningIntervalMs;\n    }\n  }\n  factory(form);\n}\n\nexport function configureForms(setup: FormConfiguration) {\n  if (!Object.keys(setup).length)\n    return;\n\n  formConfiguration = { ...formConfiguration, ...setup };\n  dispatchCustomEvent(window, \"wh:form-configure\", { bubbles: true, cancelable: false, detail: formConfiguration });\n}\n\nexport function registerHandlers(addHandlers: Record<string, FormHandlerFactory>) {\n  if (!handlers) { //register initial handlers (now that form support is activated)\n    //we want to stop distinguishing between these, not worth the effort/complexity seperating  them\n    const defaultHandler = (form: HTMLFormElement) => new FormBase(form);\n    addHandlers = {\n      \"publisher:form\": defaultHandler,\n      \"publisher:rpc\": defaultHandler,\n      ...addHandlers\n    };\n    handlers = new Map;\n  }\n\n  //Configure the handlers. If there's a resolvable promise waiting for us, resolve it, otherwise directly insert the handler\n  for (const [handlername, handler] of Object.entries(addHandlers))\n    emplace(handlers, handlername, {\n      insert: () => handler,\n      update: current => {\n        if (\"promise\" in current) {\n          current.resolve(handler);\n          return current;\n        } else\n          throw new Error(`Handler '${handlername}' is already registered`);\n      }\n    });\n\n  //Set up a registration for form elements, but ensure they only go through one scheduleFormSetup ever\n  if (!configuredRegistrations) { //register for forms that have yet to appear\n    register<HTMLFormElement>(\"form[data-wh-form-handler]\", form => {\n      //Get the current handler or set up a promise that will receive the handler\n      const handler = emplace(handlers!, form.dataset.whFormHandler!, { insert: () => Promise.withResolvers<FormHandlerFactory>() });\n      if (\"promise\" in handler)\n        void handler.promise.then(factory => scheduleFormSetup(form, factory));\n      else\n        void scheduleFormSetup(form, handler);\n\n    });\n    configuredRegistrations = true;\n  }\n}\n\nexport function registerHandler(handlername: string, handler: FormHandlerFactory) {\n  registerHandlers({ [handlername]: handler });\n}\n\nexport function getFormConfiguration(): FormConfiguration | undefined {\n  return formConfiguration;\n}\n","/* To verify tree shaking viability, try:\n   whcd\n   cd whtree\n   echo 'import \"@webhare/forms\"' | node_modules/.bin/esbuild --loader:.css=empty --tsconfig=tsconfig.json --bundle --minify\n*/\n\n// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/forms\" {\n}\n\nimport FormBase from '@mod-publisher/js/forms/rpc';\nimport { default as LocalFormBase } from \"@mod-publisher/js/forms/formbase\"; //'FormBase', the RPC-ing one, is the one you want 99% of the time. LocalFormBase is for pure local handling (eg a PWA Config screen)\nimport { verifyAddress, type AddressValidationResult, type AddressChecks } from './address';\nimport { FileUploadFormElement as FileEditElement } from \"@mod-publisher/js/forms/fields/upload\";\nimport { ImgEditElement } from \"@mod-publisher/js/forms/fields/imgedit\";\nimport { JSFormElement } from './jsformelement';\nimport type { FormFileValue, FormAnalyticsEvent } from './types';\nimport { getFormHandler, getFormData } from './domsupport';\nimport { configureForms, registerHandlers } from './registration';\n\n/* TODO / NOTES\n  - we cannot move this file into jssdk namespace, the lang.json compiler doesn't accept paths that cannot be translated to a WH resource\n  - lang.json isn't really TS compatible, a nicer followup TS interface would allow something like\n    import myModuleTexts from \"wh:tid/mymodle\";\n    and offer intellisense (after solving the problems like \"what if a module wants to export multiple sets, how to implement HTMLTid and variables, etc\")\n  - so for now we'll hardcode importing form.lang.json so external users don't have to do this, take the treeshaking hit, and plan to move builtin texts\n    to some sort of /.wh/generated/builtin-language-texts system where we load the common builtin texts per language on demand\n*/\nimport \"@mod-publisher/js/forms/internal/form.lang.json\";\nimport { omit } from '@webhare/std';\n\nexport { FormBase, verifyAddress, ImgEditElement, FileEditElement, JSFormElement, getFormHandler, getFormData };\nexport type { FormSubmitResult } from \"@mod-publisher/js/forms/formbase\";\nexport { buildRPCFormSubmission as buildFormSubmission, submitRPCForm as submitForm } from \"@mod-publisher/js/forms/rpc\";\nexport type { RPCFormSubmission as FormSubmission } from \"./types\";\nexport type { AddressValidationResult, AddressChecks, FormFileValue, FormAnalyticsEvent };\nexport { DateField, TimeField } from \"@mod-publisher/js/forms/fields/datetime\";\nexport { registerHandler } from \"./registration\";\nexport { setupGoogleRecaptcha } from \"@mod-publisher/js/captcha/google-recaptcha\";\nexport { setupFriendlyCaptcha } from \"./friendly-captcha\";\nexport { setupValidator } from \"@mod-publisher/js/forms/internal/customvalidation\";\nexport { LocalFormBase };\n\nexport type FormHandlerFactory = (form: HTMLFormElement) => LocalFormBase;\n\nexport type FormConfiguration = {\n  captcha?: \"onLoad\" | \"onActivate\";\n};\n\nexport type FormSetupOptions = FormConfiguration & {\n  handlers: Record<string, FormHandlerFactory>;\n};\n\n/// Initialize all forms we already have the handler for\nexport function setupForms(options?: Partial<FormSetupOptions>) {\n  registerHandlers(options?.handlers ?? {});\n  if (options)\n    configureForms(omit(options, [\"handlers\"]));\n}\n","/* eslint-disable */\n/// @ts-nocheck -- Bulk rename to enable TypeScript validation\n\nimport * as dompack from 'dompack';\nimport KeyboardHandler from \"dompack/extra/keyboard\";\nimport * as datehelpers from \"./datehelpers\";\nimport { getLang } from '@webhare/dompack/src/tree';\n// import \"./datestrings.lang.json\";\n//import { getTid } from \"@webhare/gettid\";\n\n// FIXME work with backend\nconst langcodes =\n{\n  \"nl\": \"am;pm;januari;februari;maart;april;mei;juni;juli;augustus;september;oktober;november;december;maandag;dinsdag;woensdag;donderdag;vrijdag;zaterdag;zondag;jan;feb;mrt;apr;mei;jun;jul;aug;sep;okt;nov;dec;ma;di;wo;do;vr;za;zo\",\n  \"de\": \"am;pm;Januar;Februar;März;April;Mai;Juni;Juli;August;September;Oktober;November;Dezember;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag;Sonntag;Jan.;Febr.;März;Apr.;Mai;Juni;Juli;Aug.;Sept.;Okt.;Nov.;Dez.;Mo;Di;Mi;Do;Fr;Sa;So\",\n  \"en\": \"am;pm;January;February;March;April;May;June;July;August;September;October;November;December;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday;Sunday;Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec;Mon;Tue;Wed;Thu;Fri;Sat;Sun\"\n};\n\n//Load any needed localizations yourself: frameworks.mootools.more.locale.nl-nl.date, frameworks.mootools.more.locale.es-es.date, frameworks.mootools.more.locale.de-de.date, frameworks.mootools.more.locale.fr-fr.date\n\n/*\n\nConverting calendar.js code to calendar2.js\n\n    Changed classes\n      - .-wh-calendar-popup   ->   .wh-datepicker > .value\n      - .-wh-calendar-icon    ->   .wh-datepicker > .arrow\n\n    Changed <input> attributes:\n      - data-formatting -> data-format\n      - data-empty -> placeholder\n\n    Load:\n      LOAD: wh.ui.calendar2\n      LOAD: wh.locale.common.de-de.date\n      LOAD: wh.locale.common.en-us.date\n      LOAD: wh.locale.common.nl-nl.date\n\n    Taal instellen:\n      Locale.use(\"de-DE\");\n      Locale.use(\"en-US\");\n      Locale.use(\"nl-NL\");\n*/\n\n\n/////////////////////\n//\n//\n\n//NOTE preparing to sync this with dompack selectlist.es\n\nclass ComponentOverlay {\n  constructor() {\n    this._boundGlobalEvents = null;\n  }\n  _startOverlayDismissCapture() {\n    //set up capturing handlers to kill our pulldowns asap when something else is clicked\n    if (!this._boundGlobalEvents)\n      this._boundGlobalEvents = evt => this._globalEvents(evt);\n\n    if (!dompack.debugflags.meo) {\n      window.addEventListener(\"keyup\", this._boundGlobalEvents, true);\n      window.addEventListener(\"mousedown\", this._boundGlobalEvents, true);\n      window.addEventListener(\"touchstart\", this._boundGlobalEvents, true);\n    }\n  }\n  _endOverlayDismissCapture() {\n    window.removeEventListener(\"keyup\", this._boundGlobalEvents, true);\n    window.removeEventListener(\"mousedown\", this._boundGlobalEvents, true);\n    window.removeEventListener(\"touchstart\", this._boundGlobalEvents, true);\n  }\n  _globalEvents(evt) {\n    if (evt && evt.type === \"keyup\") {\n      if (evt.keyCode === 27)\n        this._dismissOverlay();\n      return;\n    }\n\n    if (!dompack.contains(this._anchornode, evt.target) && !dompack.contains(this._items, evt.target))\n      this._dismissOverlay();\n  }\n}\n\n\n\n//\n//\n////////////////////\n\n\n\n/*\n * $wh.CalendarTable\n * Builds a plain calendar table based on mootools locale settings\n *\n */\n\nclass CalendarTable extends ComponentOverlay {\n  constructor() {\n    super();\n    this.options = {\n      weeknumbers: false,\n      header_weeknr: '', //weeknr.\n      min: null, //minimal date\n      max: null //maximal date (out of range gets disabled class\n    };\n    this.cdate = null;\n    this.showdate = null;\n  }\n\n  _onDayClick(evt) {\n    const clickedday = evt.target.closest(`.${this.options.baseclass}__day--selectable`);\n    // console.error(clickedday, clickedday.dataset.whDatepickerDate);\n    if (!clickedday)\n      return;\n\n    dompack.stop(evt);\n    this._dismissOverlay();\n\n    dompack.changeValue(this._datenode, clickedday.dataset.whDatepickerDate);\n  }\n\n  getTable(showdate, options) {\n    this.options = { ...this.options, options };\n\n    const caltable = dompack.create('table', {\n      className: this.options.baseclass + '__days',\n      on: { click: evt => this._onDayClick(evt) }\n    });\n    const calbody = dompack.create('tbody');\n    caltable.appendChild(calbody);\n\n    //Build week rows\n    const rownode = <tr class={this.options.baseclass + '__weekdays'}></tr>;\n    if (this.options.weeknumbers)\n      rownode.appendChild(<td></td>); //placeholder for upperleft corner\n\n    for (let w = 0; w < 7; ++w) {\n      rownode.appendChild(<th scope=\"column\" class={this.options.baseclass + '__weekday'}><span>{this._languagetexts[w + 33]}</span></th>);\n    }\n    calbody.appendChild(rownode);\n\n    const mindate = this.options.min ? {\n      day: this.options.min.getUTCDay(),\n      month: this.options.min.getUTCMonth(),\n      year: this.options.min.getUTCFullYear()\n    } : null;\n\n    const maxdate = this.options.max ? {\n      day: this.options.max.getUTCDay(),\n      month: this.options.max.getUTCMonth(),\n      year: this.options.max.getUTCFullYear()\n    } : null;\n\n    //What is the weekday for the first day of the selected month ?\n    const startofmonth = datehelpers.makeJSUTCDate({ ...showdate, day: 1 });\n    const showmonth = startofmonth.getUTCMonth();\n    const showyear = startofmonth.getUTCFullYear();\n\n    //    console.log(startofmonth);\n    const startofmonth_weekday = startofmonth.getUTCDay(); //0-6 where 0=Sunday\n\n    //Work backwards to a monday (start of the week)\n    const backwardsdays = startofmonth_weekday === 0 ? 6 : startofmonth_weekday - 1;\n    let currentgriddate = startofmonth.getTime() - (backwardsdays * 86400 * 1000);\n\n    //Build the grid!\n    for (let week = 0; week < 6; ++week) {\n      const rownode = dompack.create('tr', { className: this.options.baseclass + '__week' });\n\n      for (let day = 0; day < 7; ++day) {\n        const date = new Date(currentgriddate);\n        if (this.options.weeknumbers && day === 0)\n          rownode.appendChild(<th class={this.options.baseclass + '__weeknr'} scope=\"row\"><span>{datehelpers.getWeekNumber(date)}</span></th>);\n\n        const dateY = date.getUTCFullYear();\n        const dateM = date.getUTCMonth();\n        const dateD = date.getUTCDate();\n\n        const celldate = { year: dateY, month: dateM + 1, day: dateD };\n\n        const dayclass = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'][day];\n        const daynode = dompack.create('td', {\n          className: `${this.options.baseclass}__day ${this.options.baseclass}__day--${dayclass}`,\n          childNodes: [dompack.create(\"span\", { textContent: date.getUTCDate() })],\n          dataset: { whDatepickerDate: datehelpers.formatJSUTCISODate(date) }\n        });\n\n        if (dateM !== showmonth || dateY !== showyear)\n          daynode.classList.add(this.options.baseclass + '__day--othermonth');\n\n        if ((mindate && dateY < mindate.year && dateM < mindate.month && dateD < mindate.day)\n          || (maxdate && dateY > maxdate.year && dateM > maxdate.month && dateD > maxdate.day)) {\n          daynode.classList.add(this.options.baseclass + '__day--disabled');\n        } else {\n          daynode.setAttribute(\"tabindex\", \"0\");\n          daynode.classList.add(this.options.baseclass + '__day--selectable');\n        }\n\n        if (datehelpers.compareDate(this.today, celldate) === 0)\n          daynode.classList.add(this.options.baseclass + '__day--today');\n\n        if (this.date && datehelpers.compareDate(this.date, celldate) === 0)\n          daynode.classList.add(this.options.baseclass + '__day--selected');\n\n        rownode.appendChild(daynode);\n        currentgriddate += 86400 * 1000;\n      }\n      calbody.appendChild(rownode);\n    }\n\n    return caltable;\n  }\n}\n\nclass Calendar2 extends CalendarTable {\n  constructor(options) {\n    super();\n    this.options = {\n      weeknumbers: false,\n      date: null,   // initial value\n      min: null,\n      max: null,\n      ...options\n    };\n    this.node = null;\n    this.tablenode = null;\n    this.yearspinner = null;\n    this.monthselectnode = null;\n    this.date = null; //selected date\n    this.keys = null;\n    this.focusednode = null;\n  }\n\n  _onYearMonthChange(evt) {\n    this.options.date = {\n      year: this.yearspinner.value,\n      month: this.monthselectnode.value,\n      day: this._currentdate ? this._currentdate.day : 1\n    };\n\n    this._currentdate.month = parseInt(this.monthselectnode.value);\n    this._currentdate.year = parseInt(this.yearspinner.value);\n\n    this.setMonthTable(this.options.date);\n  }\n\n  readDateNode() {\n    this.mindate = datehelpers.parseISODate(this._datenode.min, { nofail: true });\n    this.maxdate = datehelpers.parseISODate(this._datenode.max, { nofail: true });\n    this.date = datehelpers.parseISODate(this._datenode.value, { nofail: true });\n    const suggestion = datehelpers.parseISODate(this._datenode.dataset.suggestion, { nofail: true });\n    const max = datehelpers.parseISODate(this._datenode.max);\n    this.today = datehelpers.getLocalToday();\n\n    this.yearspinner.min = this.mindate ? this.mindate.year : 1901;\n    this.yearspinner.max = this.maxdate ? this.maxdate.year : 2099;\n\n    let showdate = this.date ?? suggestion ?? this.today;\n    if (this.mindate && datehelpers.makeJSUTCDate(showdate) < datehelpers.makeJSUTCDate(this.mindate))\n      showdate = this.mindate;\n    if (this.maxdate && datehelpers.makeJSUTCDate(showdate) > datehelpers.makeJSUTCDate(this.maxdate))\n      showdate = this.maxdate;\n\n    if (!this._currentdate)\n      this._currentdate = showdate;\n\n    this.setMonthTable(showdate);\n  }\n\n  _addMeToNode(container) {\n    this.node = container;\n\n    this.yearspinner = <input type=\"number\" class={`${this.options.baseclass}__yearselect`} step=\"1\" on={{ change: evt => this._onYearMonthChange(evt) }} />;\n    this.monthselectnode = <select class={`${this.options.baseclass}__monthselect`} on={{ change: evt => this._onYearMonthChange(evt) }} />;\n\n    this.readDateNode();\n\n    //build calendar interface:\n    const headernode = <div class={this.options.baseclass + \"__header\"}>\n      <div class={this.options.baseclass + \"__previous\"} onClick={evt => this.changeMonth(evt, -1)} />\n      {this.monthselectnode}\n      {this.yearspinner}\n      <div class={this.options.baseclass + \"__next\"} onClick={evt => this.changeMonth(evt, +1)} />\n    </div>;\n\n    //month pulldown\n    const selectedmonth = this._currentdate.month;\n    for (let m = 0; m < 12; ++m)\n      this.monthselectnode.appendChild(<option value={m + 1} selected={m === selectedmonth - 1}>{this._languagetexts[m + 2]}</option>);\n\n    this.node.append(headernode, this.tablenode);//, btnbarnode);\n\n    //looks like we're visible ! install a capturing\n    new KeyboardHandler(this.node, {\n      \"Enter\": ev => this.onKeyEnter(ev)\n    }\n      , { captureunsafekeys: true }\n    );\n\n    // Locale.addEvent(\"change\", this.onLanguageChange.bind(this));\n    this._startOverlayDismissCapture();\n    this._onYearMonthChange();\n  }\n\n  setMonthTable(showdate) {\n    this.yearspinner.value = showdate.year;\n    this.monthselectnode.value = showdate.month;\n\n    const newtable = this.getTable(showdate);\n\n    if (this.tablenode)\n      this.tablenode.replaceWith(newtable);\n    this.tablenode = newtable;\n\n    this.setFocus();\n  }\n\n  setFocus() {\n    if (!this.tablenode.clientWidth)\n      return;//Not (yet) visible\n\n    //Set focus on showdate or else first selectable date\n    let fnode;\n    if (this.date)\n      fnode = this.tablenode.querySelector(\"td[data-wh-datepicker-date='\" + datehelpers.formatISODate(this.date.year, this.date.month, this.date.day) + \"']\");\n    if (!fnode) //else pick first selectable day\n      fnode = this.tablenode.querySelector(\".\" + this.options.baseclass + '__day--selectable');\n    if (fnode)\n      fnode.focus();\n  }\n\n  onKeyEnter(ev) {\n    const daynode = ev.target.closest(\".\" + this.options.baseclass + '__day--selectable');\n    if (!daynode)\n      return;\n\n    this._onDayClick(ev);\n  }\n\n  _dismissOverlay() {\n    this.node.remove();\n    this._endOverlayDismissCapture();\n    this._owner.__closedDatepicker();\n  }\n\n  changeMonth(evt, direction) {\n    dompack.stop(evt);\n\n    let newyear = parseInt(this.yearspinner.value);\n    let newmonth = parseInt(this.monthselectnode.value) + direction;\n\n    if (newmonth > 12 || newmonth < 1) //wrap it\n    {\n      newyear += direction;\n      newmonth = direction > 0 ? 1 : 12;\n    }\n    this.setMonthTable({ year: newyear, month: newmonth });\n  }\n}\n\nclass DatePicker extends Calendar2 {\n  /** options.baseclass Base class to use for the elements in the date picker. Defaults to 'datepicker' */\n  constructor(owner) {\n    super({ ...owner.options, baseclass: owner._baseclass + '__picker' });\n    this._owner = owner;\n    this._datenode = owner._replacednode;\n    this.options = {\n      ...this.options,\n      language: null\n    };\n    //TODO limit by supportedlanguages and use gettid(\"~locale.datetimestrings\")\n    if (!this.options.language)\n      this.options.language = getLang().language;\n\n    this._languagetexts = (langcodes[this.options.language] || langcodes.en).split(';');\n\n    //we use the node to store our result, so verify it\n    //FIXME maybe this should be optional and you be allowed to create a datepicker without a corresponding node if you just manage getvalue/setvalue yourself, or maybe this glue code belongs outside us\n    //     if(node.nodeName !== 'INPUT' || node.getAttribute('type') !== 'date')\n    //       throw new Error(\"The DatePicker expects to be associated with a input[type=date]\");\n\n    //     this._node = node;\n    //     this._class = (options ? options.baseclass : '') || 'datepicker';\n    //     this._node.classList.add(this._class + \"--attached\");\n    // //\n    // this._node.addEventListener(\"wh:datepicker-request\");\n\n    this._anchornode = this._datenode.nextSibling;\n\n    this._calendarnode = dompack.create('div', { className: this.options.baseclass }); //tabindex:0 ?\n    this._addMeToNode(this._calendarnode);\n\n    this._items = this._calendarnode; //TODO bit ugly but keeps us compatible with selectlist.es\n\n    this._calendarnode.addEventListener(\"change\", ev => {\n      console.log(ev);\n    });\n\n    //Allow users to hook into the datepicker\n    dompack.dispatchCustomEvent(this._datenode, \"wh:datepicker-built\", { bubbles: true, cancelable: false, detail: { input: this._datenode, datepicker: this._calendarnode } });\n\n    //ADDME can we borrow positioning code from the dompack pulldown?\n    //for now, attach to bottom\n    document.body.appendChild(this._calendarnode);\n    const calendarnodesize = this._calendarnode.getBoundingClientRect();\n    const anchornode = this._anchornode.getBoundingClientRect();\n\n    //fits left aligned?\n    if (anchornode.left + calendarnodesize.width > window.innerWidth) { //doesn't fit left aligned, we must right align\n      this._calendarnode.style.right = '0px';\n    } else //left align\n    {\n      this._calendarnode.style.left = Math.ceil(anchornode.left) + 'px';\n    }\n\n    //fits top aligned?\n    if (anchornode.top + calendarnodesize.height > window.innerHeight) { //doesn't fit below, send above\n      let y = (window.innerHeight - anchornode.top);\n      if ((window.innerHeight - y) - calendarnodesize.height < 0) //Prevent calendar hiding behind top of window\n        y = window.innerHeight - calendarnodesize.height;\n      this._calendarnode.style.bottom = y + 'px';\n    } else //left align\n    {\n      this._calendarnode.style.top = Math.ceil(anchornode.bottom) + 'px';\n    }\n\n    this.setFocus();\n  }\n}\n\nexport default DatePicker;\n","/* eslint-disable */\n/// @ts-nocheck -- These property hacks aren't simple to convert TS (and we may need an even more modern approach) so split them off for now\n\n///////////////////////////////////////\n//\n// new 'value' property\n//\nfunction mySelectGetValue() {\n  const origgetter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this), 'value')!.get;\n  //console.error(\"mySelectGetValue\", origgetter, origgetter.apply(this));\n  return origgetter.apply(this);\n}\nexport function __setUnderlyingValue(comp, newvalue) {\n  const origsetter = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(comp), 'value')!.set;\n  if (origsetter) //this works on chrome, firefox and IE\n  {\n    origsetter.apply(comp, [newvalue]);\n  } else {\n    //safari doesn't let us call the original setter. but we _can_ remove the value property and it will be restored\n    delete comp.value;\n    comp.value = newvalue;\n    setupMyValueProperty(comp); //reset our custom property\n  }\n}\nfunction mySelectSetValue(newvalue) //this is invoked on external sets, and updates the replaced fields\n{\n  __setUnderlyingValue(this, newvalue);\n  this._split_doupdate();\n}\n\nexport function setupMyValueProperty(select) {\n  Object.defineProperty(select, 'value', { configurable: true, get: mySelectGetValue, set: mySelectSetValue }); //FIXME why intercept get?\n}\n\n","/// @ts-nocheck -- Bulk rename to enable TypeScript validation\n\nimport * as dompack from \"dompack\";\nimport * as datehelpers from \"../internal/datehelpers\";\nimport Keyboard from 'dompack/extra/keyboard';\nimport DatePicker from '@mod-publisher/js/forms/internal/datepicker';\n\nimport { __setUnderlyingValue, setupMyValueProperty } from \"../internal/datetime-valueprops\";\nimport { getTid } from \"@webhare/gettid\";\nimport { getLang } from \"@webhare/dompack\";\nexport { __setUnderlyingValue } from \"../internal/datetime-valueprops\";\n\n/*\nReplaces date/time inputs into separate number type inputs\nField ordering can be set by data attribute data-dateformat\n\nnice to have:\n - placeholder translations\n - Field ordering by localization\n*/\n\ninterface MultiInputSubstitionOptions {\n  baseclass: string;\n}\n\nabstract class MultiInputSubstition {\n  protected _replacednode: HTMLInputElement;\n  protected placeholders: Record<string, string> = {};\n  options: MultiInputSubstitionOptions;\n\n  constructor(inpnode: HTMLInputElement, options: Partial<MultiInputSubstitionOptions>) {\n    this.options = {\n      baseclass: 'datetime',\n      ...options\n    };\n\n    this._baseclass = this.options.baseclass;\n    this._replacednode = inpnode;\n    this._replacednode._split_doupdate = () => this._split_doupdate();\n    this._replacednode.classList.add(this._baseclass + '--replaced');\n    this._replacednode.setAttribute(\"tabindex\", \"-1\"); //disable focus by tabbing replaced field\n    this._replacednode.addEventListener('change', () => this._onOriginalChange());\n\n    if (window.MutationObserver) {\n      const _observer = new MutationObserver(() => this._onObserve());\n      _observer.observe(this._replacednode, { attributes: true, attributeFilter: ['disabled', 'required', 'class'], subtree: false, childList: false });\n    }\n\n    this._nodes = {};\n    setupMyValueProperty(this._replacednode);\n  }\n  _onOriginalChange() { //capture browser initiated changes (they don't go through our value property)\n    if (this._replacednode.value === this._lastsetvalue)\n      return;\n\n    this._lastsetvalue = this._replacednode.value;\n    this._refreshReplacingFields();\n  }\n  _onBlur(field) {\n    if (!isNaN(parseInt(field.value)))\n      field.value = ('000' + parseInt(field.value)).slice(-this._getFieldTextLength(field));\n  }\n  _onReset(evt) {\n    dompack.stop(evt);\n    if (this._replacednode.disabled)\n      return;\n\n    this._replacednode.value = '';\n    dompack.dispatchDomEvent(this._replacednode, 'input');\n    dompack.dispatchDomEvent(this._replacednode, 'change');\n  }\n  _handlePastedValue(inval) {\n    return false;\n  }\n  protected _onInput(field: HTMLInputElement | null) {\n    //now with EARLY focus\n    //FIXME cleanup field first?\n    //FIXME determine whether to use NUMBER of TEL.\n    // if(field && field.input.length === )\n    if (!field)\n      return false;\n\n    if (this._handlePastedValue(field.value)) {\n      this._refreshReplacingFields();\n      return true;\n    }\n\n    const maxlength = this._getFieldTextLength(field);\n    if (field.value.length >= maxlength) {\n      const nextfield = this._getNextField(field);\n      if (nextfield) {\n        dompack.focus(nextfield);\n\n        if (field.value.length > maxlength) { //copy over remaining contents\n          nextfield.value = field.value.substr(maxlength);\n          field.value = field.value.substr(0, maxlength);\n          dompack.dispatchDomEvent(nextfield, 'input');\n          return true; //the next field's _onInput will deal with all the normal validations\n        }\n      }\n    }\n    return false;\n  }\n  protected getLanguageCode() {\n    return getLang(this._replacednode).language;\n  }\n\n  _finalize() {\n    this._refreshAttributes();\n    this._refreshReplacingFields();\n\n    this._controlsnode = <span class={`${this._baseclass}__controls`}></span>;\n    this._inputgroup.appendChild(this._controlsnode);\n    dompack.after(this._replacednode, this._inputgroup);\n\n    this._inputgroup.addEventListener(\"input\", ev => this._onInput(ev.target), true);\n    this._inputgroup.addEventListener(\"focus\", ev => this._onFocus(ev.target), true);\n    this._inputgroup.addEventListener('blur', evt => this._onBlur(evt.target), true);\n\n    new Keyboard(this._inputgroup, {\n      \"ArrowDown\": (evt) => this._trySpin(evt, -1),\n      \"ArrowUp\": (evt) => this._trySpin(evt, +1),\n      \"ArrowLeft\": (evt) => this._arrowHorizontal(evt, -1),\n      \"ArrowRight\": (evt) => this._arrowHorizontal(evt, +1),\n      \"Backspace\": (evt) => this._handleBackspace(evt)\n    }, {\n      captureunsafekeys: true,\n      onkeypress: (evt, key) => this._onKeyPress(evt, key)\n    });\n\n  }\n  _constructPart(partname, options) {\n    return dompack.create(\"input\", {\n      className: `${this._baseclass}__part ${this._baseclass}__${partname}`,\n      pattern: \"[0-9]*\",\n      inputmode: \"numeric\",\n      autocomplete: \"off\",\n      placeholder: this.placeholders[partname],\n      type: \"tel\", //we need 'tel' for fine selection control, we can't control selectionStart/End of a type=number\n      ...options\n    });\n  }\n  _onObserve() {\n    this._refreshAttributes();\n  }\n\n  _split_doupdate() {\n    this._refreshReplacingFields();\n    if (this._currentdatepicker)\n      this._currentdatepicker.readDateNode();\n  }\n\n  _refreshAttributes() {\n    const isdisabled = this._replacednode.disabled;\n    const isrequired = this._replacednode.required;\n\n    dompack.toggleClass(this._inputgroup, this._baseclass + '--disabled', isdisabled);\n    dompack.toggleClass(this._inputgroup, this._baseclass + '--required', isrequired);\n    this._getSubInputs().forEach(node => { node.disabled = isdisabled; node.required = isrequired; });\n  }\n\n  _getSubInputs() {\n    throw new Error(\"Override!\");\n  }\n\n  _setReplacedValue(setvalue) {\n    if (setvalue !== this._lastsetvalue) {\n      __setUnderlyingValue(this._replacednode, setvalue); //direct update to prevent it from rewriting our fields\n      this._lastsetvalue = setvalue;\n\n      //TODO would be more correct to fire 'input' on any value change, but 'change' only on calendar pick OR blur\n      dompack.dispatchDomEvent(this._replacednode, 'input');\n      dompack.dispatchDomEvent(this._replacednode, 'change');\n    }\n  }\n\n  _onFocus(field) {\n    if (this._getSubInputs().indexOf(field) >= 0) //one of our handled fields\n      field.select(); //select contents fully on focus, makes it easier to start typing new values\n  }\n\n  _trySpin(evt, change) {\n    const field = evt.target;\n    const nodeidx = this._getSubInputs().indexOf(field);\n    if (nodeidx < 0) //not one of our inputs\n      return; //not handling!\n\n    dompack.stop(evt);\n    if (this._spinNode(field, nodeidx, change))\n      this._onInput(null);\n    return true;\n  }\n\n  _arrowHorizontal(evt, dir) {\n    const field = evt.target;\n\n    if ((field.selectionStart !== field.selectionEnd) //theres a selection, let the browser deal with that\n      || (dir < 0 && field.selectionStart > 0) //not at the left edge\n      || (dir > 0 && field.selectionEnd < field.value.length)) // not at the right edge\n      return;\n\n    dompack.stop(evt);\n\n    const subinputs = this._getSubInputs();\n    const gotofield = subinputs[subinputs.indexOf(field) + dir];\n    if (gotofield) {\n      dompack.focus(gotofield);\n      gotofield.selectionEnd = gotofield.selectionStart = dir > 0 ? 0 : gotofield.value.length;\n    }\n  }\n\n  _onKeyPress(evt, key) {\n    if ((key >= '0' && key <= '9') || key.length > 1) //digit or special key\n      return true;\n    dompack.stop(evt);\n  }\n\n  _handleBackspace(evt) {\n    const field = evt.target;\n    const nodeidx = this._getSubInputs().indexOf(field);\n    if (nodeidx <= 0) //not one of our fields, or the first (where we can't go back anywhere)\n      return false; //not handling\n\n    if (field.selectionEnd > 0) //selection does not include the left side of the field\n      return false;\n\n    //remove selection, if any (we're a \"backspace\" after all)\n    dompack.stop(evt);\n    field.value = field.value.substr(0, field.selectionStart) + field.value.substr(field.selectionEnd);\n\n    const prevfield = this._getSubInputs()[nodeidx - 1];\n    dompack.focus(prevfield);\n    if (prevfield.value.length > 0) //do a backspace in the previous field as if we were one\n      prevfield.value = prevfield.value.substr(0, prevfield.value.length - 1);\n\n    prevfield.selectionEnd = prevfield.selectionStart = prevfield.value.length;\n    return true;\n  }\n}\n\nexport interface DateFieldOptions extends MultiInputSubstitionOptions {\n  placeholders: {\n    year: string;\n    month: string;\n    day: string;\n  };\n  datepicker: boolean;\n  resetcontrol: boolean;\n  weeknumbers: boolean;\n}\n\nexport class DateField extends MultiInputSubstition {\n  declare options: DateFieldOptions;\n\n  constructor(inpnode: HTMLInputElement, options?: Partial<DateFieldOptions>);\n  /** @deprecated You should ensure the inputnode is a HTMLInputElement */\n  constructor(inpnode: HTMLElement, options?: Partial<DateFieldOptions>);\n\n  constructor(inpnode: HTMLInputElement, options?: Partial<DateFieldOptions>) {\n    options = {\n      datepicker: true,\n      resetcontrol: true,\n      weeknumbers: false,\n      ...options\n    };\n\n    super(inpnode, options);\n    if (!this._replacednode)\n      return;\n\n    this.placeholders = this.options.placeholders ?? (this.getLanguageCode()?.startsWith('nl') ? { year: \"jjjj\", month: \"mm\", day: \"dd\" } : { year: \"yyyy\", month: \"mm\", day: \"dd\" });\n    this.previous = { value: '' };\n\n    const dateformat = inpnode.dataset.format || \"d-m-y\";\n    const parseddate = dateformat.match(/^([dmy])([^dmy]*)([dmy])([^dmy]*)([dmy])$/);\n    if (!parseddate)\n      throw new Error(`Unrecognized date format '${dateformat}'`);\n\n    this._inputgroup = <span class={`${this._baseclass} ${this._baseclass}__date`}>\n      {this._constructDatePart(parseddate[1])}\n      <span class={`${this._baseclass}__sep`}>{parseddate[2]}</span>\n      {this._constructDatePart(parseddate[3])}\n      <span class={`${this._baseclass}__sep`}>{parseddate[4]}</span>\n      {this._constructDatePart(parseddate[5])}\n    </span>;\n\n    this._nodes.day.min = 1;\n    this._nodes.day.max = 31;\n    this._nodes.month.min = 1;\n    this._nodes.month.max = 12;\n\n    if (this._replacednode.min !== \"\") { //Should be iso date\n      const minyear = this._replacednode.min.split(/[^0-9]+/)[0];\n      if (minyear !== \"\")\n        this._nodes.year.min = minyear;\n    }\n\n    if (this._replacednode.max !== \"\") { //Should be iso date\n      const maxyear = this._replacednode.max.split(/[^0-9]+/)[0];\n      if (maxyear !== \"\")\n        this._nodes.year.max = maxyear;\n    }\n\n    this._finalize();\n\n    if (this.options.datepicker) {\n      this._datepickercontrol = <span class={`${this._baseclass}__togglepicker`}></span>;\n      this._datepickercontrol.addEventListener(\"click\", evt => this._onDatePickerClick(evt));\n      this._controlsnode.appendChild(this._datepickercontrol);\n    }\n    if (this.options.resetcontrol) {\n      this._resetcontrol = <span class={`${this._baseclass}__reset`}></span>;\n      this._resetcontrol.addEventListener(\"click\", evt => this._onReset(evt));\n      this._controlsnode.appendChild(this._resetcontrol);\n    }\n  }\n\n  _onDatePickerClick(evt) {\n    dompack.stop(evt);\n\n    if (this._currentdatepicker || this._replacednode.disabled)\n      return;\n    this._currentdatepicker = new DatePicker(this);\n  }\n  __closedDatepicker() {\n    this._currentdatepicker = null;\n\n    //return focus to last replacement input (so if using tab you go to next field)\n    const inplst = this._inputgroup.querySelectorAll(\"input\");\n    if (inplst.length)\n      inplst[inplst.length - 1].focus();\n  }\n\n  _constructDatePart(which) {\n    const partname = { d: \"day\", m: \"month\", y: \"year\" }[which];\n    if (this._nodes[partname])\n      throw new Error(`Duplicate '${partname}' node`);\n\n    this._nodes[partname] = this._constructPart(partname, { maxlength: partname === \"year\" ? 4 : 2 });\n    return this._nodes[partname];\n  }\n\n  _getSubInputs() {\n    return [this._nodes.day, this._nodes.month, this._nodes.year];\n  }\n\n  _setDateByParts(parts) {\n    this._nodes.day.value = ('0' + parts.day).substr(-2);\n    this._nodes.month.value = ('0' + parts.month).substr(-2);\n    this._nodes.year.value = ('000' + parts.year).substr(-4);\n  }\n\n  _refreshReplacingFields() {\n    this._lastsetvalue = this._replacednode.value;\n\n    if (this._replacednode.value) { //Should be iso date\n      this._currentdate = datehelpers.parseISODate(this._replacednode.value, { nofail: true });\n      if (this._currentdate) {\n        this._setDateByParts(this._currentdate);\n        return;\n      }\n    }\n    this._nodes.day.value = \"\";\n    this._nodes.month.value = \"\";\n    this._nodes.year.value = \"\";\n  }\n\n  _getFieldTextLength(field) {\n    return field === this._nodes.year ? 4 : 2;\n  }\n  _getNextField(field) {\n    return field === this._nodes.day ? this._nodes.month\n      : field === this._nodes.month ? this._nodes.year\n        : null;\n\n  }\n\n  _getCurrentAsISODate() {\n    let year = parseInt(this._nodes.year.value, 0);\n    const month = parseInt(this._nodes.month.value, 0);\n    const day = parseInt(this._nodes.day.value, 0);\n\n    if (year >= 0 && year <= 99 && this._replacednode.dataset.shortyearcutoff !== \"\") {\n      const cutoff = parseInt(this._replacednode.dataset.shortyearcutoff);\n      if (year < cutoff) //to do someday.. current century might not be 2000 anymore\n        year += 2000;\n      else\n        year += 1900;\n    }\n\n    return datehelpers.formatISODate(year, month, day);\n  }\n\n  _spinNode(node, nodeidx, change) {\n    const isodate = this._getCurrentAsISODate();\n    if (!isodate)\n      return; //not sure what to do with a corrupt\n\n    let newdate = new Date(isodate);\n    if (node === this._nodes.day) {\n      newdate = new Date(Number(newdate) + (change * 86400000));\n    } else if (node === this._nodes.month) {\n      newdate.setUTCMonth(newdate.getUTCMonth() + change);\n    } else if (node === this._nodes.year) {\n      newdate.setUTCFullYear(newdate.getUTCFullYear() + change);\n    } else {\n      return;\n    }\n\n    this._setReplacedValue(datehelpers.formatJSUTCISODate(newdate));\n    this._split_doupdate();\n    return true;\n  }\n\n  _handlePastedValue(inval) {\n    //if we're spotting a xx-xx-xx or xx/xx/xx pattern, assume a paste\n    const is_dashed = inval.match(/.+-.+-.+/);\n    const is_slashed = inval.match(/.+\\/.+\\/.+/);\n    if (is_dashed || is_slashed) {\n      const parseddate = datehelpers.parseDate('d-m-y', inval, { nofail: true });\n      if (parseddate) {\n        this._setReplacedValue(datehelpers.formatISODate(parseddate.year, parseddate.month, parseddate.day));\n        this._refreshReplacingFields();\n        return true;\n      }\n    }\n    return false;\n  }\n\n  private getInputValues() {\n    return {\n      year: this._nodes.year.value,\n      month: this._nodes.month.value,\n      day: this._nodes.day.value\n    };\n  }\n\n  _onInput(field: HTMLInputElement | null) {\n    if (super._onInput(field))\n      return true;\n\n    const fields = this.getInputValues();\n    if (!fields.year && !fields.month && !fields.day) { //full field clear\n      this._replacednode.setCustomValidity('');\n      this._setReplacedValue(\"\");\n      return;\n    }\n\n    let year = parseInt(fields.year, 0);\n    const month = parseInt(fields.month, 0);\n    const day = parseInt(fields.day, 0);\n\n    if (year >= 0 && year <= 99 && this._replacednode.dataset.shortyearcutoff !== \"\") {\n      const cutoff = parseInt(this._replacednode.dataset.shortyearcutoff);\n      if (year < cutoff) //TODO current century might not be 2000 anymore\n        year += 2000;\n      else\n        year += 1900;\n    }\n\n    const finaldate = datehelpers.formatISODate(year, month, day);\n    this._replacednode.setCustomValidity(finaldate ? \"\" : getTid(\"publisher:site.forms.commonerrors.date\"));\n    this._setReplacedValue(finaldate);\n    return true;\n  }\n\n  _onKeyPress(evt, key) {\n    if (key === '-' || key === '/') {\n      const nextfield = this._getNextField(evt.target);\n      if (nextfield)\n        dompack.focus(nextfield);\n      return false;\n    }\n    return super._onKeyPress(evt, key);\n  }\n\n  /*\n    onKeyUp( ev, node )\n    {\n      ev.preventDefault();\n      ev.stopPropagation();\n\n      let prevval = this.previous.value;\n      this.previous.value = node.value;\n\n      if( ev.keyCode === 8 && node.value === \"\" && prevval === \"\" )//backspace\n      {\n        //Try to set focus on previous input\n        let prevnode = node.parentNode.previousSibling;\n        if( prevnode )\n        {\n          let previnp = prevnode.querySelector(\"input\");\n          if( previnp )\n            previnp.focus();\n        }\n\n        return;\n      }\n\n      //First some basic validation\n      let value = node.value.replace(/[^0-9]+/g,'');\n\n      if( value === \"\" || value !== node.value || 1*value < 1*node.min || 1*value > 1*node.max )\n        return;\n\n      //Is field value minimal length\n      if( (node === this.yearnode && value.length < 4) || (node !== this.yearnode && value.length < 2) )\n        return;\n\n      if( prevval === node.value )\n          return;//Only go to next input if value changed\n\n      //Try to set focus on next input\n      let nextnode = node.parentNode.nextSibling;\n      if( !nextnode )\n        return;\n\n      let nextinp = nextnode.querySelector(\"input\");\n      if( nextinp )\n        nextinp.focus();\n    }\n  */\n\n  _onReset(evt) {\n    this.closePicker();\n    super._onReset(evt);\n  }\n\n  //-------- PUBLIC API ---------------\n  closePicker() { //close any open date picker\n    if (this._currentdatepicker)\n      this._currentdatepicker._dismissOverlay();\n  }\n}\n\nexport interface TimeFieldOptions extends MultiInputSubstitionOptions {\n  placeholders: {\n    hour: string;\n    minute: string;\n    second: string;\n    msec: string;\n  };\n  resetcontrol: boolean;\n}\n\nexport class TimeField extends MultiInputSubstition {\n\n  constructor(inpnode: HTMLInputElement, options?: Partial<TimeFieldOptions>);\n  /** @deprecated You should ensure the inputnode is a HTMLInputElement */\n  constructor(inpnode: HTMLElement, options?: Partial<TimeFieldOptions>);\n\n  constructor(inpnode: HTMLInputElement, options?: Partial<TimeFieldOptions>) {\n    options = {\n      resetcontrol: true,\n      ...options\n    };\n\n    super(inpnode, options);\n    if (!this._replacednode)\n      return;\n\n    this.placeholders = this.options.placeholders ?? (this.getLanguageCode() === 'nl' ? { hour: \"hh\", minute: \"mm\", second: \"ss\", msec: \"mmm\" } : { hour: \"uu\", minute: \"mm\", second: \"ss\", msec: \"mmm\" });\n    const step = parseFloat(this._replacednode.getAttribute(\"step\") || '0');\n    this.previous = { value: '' };\n    this._showmsec = step !== Math.floor(step); //fraction\n    this._showsecond = this._showmsec || (step % 60 !== 0); //unable to round to minute... so seconds\n\n    this._inputgroup = <span class={`${this._baseclass} ${this._baseclass}__time`}>\n      {this._constructTimePart(\"hour\")}\n      <span class={`${this._baseclass}__sep`}>:</span>\n      {this._constructTimePart(\"minute\")}\n    </span>;\n\n    this._nodes.hour.max = 23;\n    this._nodes.minute.max = 59;\n\n    if (this._showsecond) {\n      this._inputgroup.appendChild(<span class={`${this._baseclass}__sep`}>:</span>);\n      this._inputgroup.appendChild(this._constructTimePart(\"second\"));\n      this._nodes.second.max = 59;\n    }\n    if (this._showmsec) {\n      this._inputgroup.appendChild(<span class={`${this._baseclass}__sep`}>.</span>);\n      this._inputgroup.appendChild(this._constructTimePart(\"msec\"));\n      this._nodes.msec.max = 999;\n    }\n\n    this._finalize();\n\n    if (this.options.resetcontrol) {\n      this._resetcontrol = <span class={`${this._baseclass}__reset`}></span>;\n      this._resetcontrol.addEventListener(\"click\", evt => this._onReset(evt));\n      this._controlsnode.appendChild(this._resetcontrol);\n    }\n  }\n\n  _spinNode(node, nodeidx, change) {\n    let newval = (parseInt(node.value) || 0) + change;\n    const max = parseInt(node.getAttribute(\"max\"));\n\n    if (newval < 0 || newval > max) {\n      if (nodeidx === 0) //already at top level, no wrapping..\n        return false;\n\n      newval = change < 0 ? max : 0; //wrap it!\n      if (nodeidx > 0) //spin higher node too\n        if (!this._spinNode(this._getSubInputs()[nodeidx - 1], nodeidx - 1, change))\n          return false;\n    }\n\n    //Cannot use dompack.changeValue here as we need to explicitly tell onInput not to move the next field\n    node.value = ('000' + newval).slice(nodeidx === 3 ? -3 : -2);\n    return true;\n  }\n\n  _constructTimePart(partname) {\n    if (this._nodes[partname])\n      throw new Error(`Duplicate '${partname}' node`);\n\n    this._nodes[partname] = this._constructPart(partname, {\n      maxlength: partname === 'msec' ? 3 : 2,\n      min: \"0\"\n    });\n\n    return this._nodes[partname];\n  }\n\n  _refreshReplacingFields() {\n    this._lastsetvalue = this._replacednode.value;\n\n    const time = datehelpers.parseISOTime(this._replacednode.value, { nofail: true });\n    if (time) {\n      this._currenttime = time;\n      this._nodes.hour.value = (\"0\" + this._currenttime.hour).slice(-2);\n      this._nodes.minute.value = (\"0\" + this._currenttime.minute).slice(-2);\n      if (this._nodes.second)\n        this._nodes.second.value = (\"0\" + this._currenttime.second).slice(-2);\n      if (this._nodes.msec)\n        this._nodes.msec.value = (\"00\" + this._currenttime.msec).slice(-3);\n      return;\n    }\n\n    this._nodes.hour.value = \"\";\n    this._nodes.minute.value = \"\";\n    if (this._nodes.second)\n      this._nodes.second.value = \"\";\n    if (this._nodes.msec)\n      this._nodes.msec.value = \"\";\n  }\n\n  _getFieldTextLength(field) {\n    return field === this._nodes.msec ? 3 : 2;\n  }\n  _getSubInputs() {\n    return [\n      this._nodes.hour,\n      this._nodes.minute,\n      ...(this._nodes.second ? [this._nodes.second] : []),\n      ...(this._nodes.msec ? [this._nodes.msec] : [])\n    ];\n  }\n\n  private getInputValues() {\n    return {\n      hour: this._nodes.hour.value,\n      minute: this._nodes.minute.value,\n      second: this._nodes.second?.value ?? \"\",\n      msec: this._nodes.msec?.value ?? \"\"\n    };\n  }\n\n  _onInput(field: HTMLInputElement | null) {\n    if (super._onInput(field))\n      return true;\n\n    const fields = this.getInputValues();\n    if (!fields.hour && !fields.minute && !fields.second && !fields.msec) { //full field clear\n      this._replacednode.setCustomValidity('');\n      this._setReplacedValue(\"\");\n      return;\n    }\n\n    const hour = parseInt(fields.hour, 0);\n    const minute = parseInt(fields.minute, 0);\n    const second = parseInt(fields.second, 0);\n    const msec = parseInt(fields.msec, 0);\n\n    const finaltime = datehelpers.formatISOTime(hour, minute, this._showsecond ? second : null, this._showmsec ? msec : null);\n    this._replacednode.setCustomValidity(finaltime ? \"\" : getTid(\"publisher:site.forms.commonerrors.time\"));\n    this._setReplacedValue(finaltime);\n    return true;\n  }\n\n  _onKeyPress(evt, key) {\n    if (key === ':' || key === '.') {\n      const nextfield = this._getNextField(evt.target);\n      if (nextfield)\n        dompack.focus(nextfield);\n      return false;\n    }\n    return super._onKeyPress(evt, key);\n  }\n\n  _getNextField(field) {\n    return field === this._nodes.hour ? this._nodes.minute\n      : field === this._nodes.minute ? this._nodes.second\n        : null;\n\n  }\n\n\n  /*\n    onKeyUp( ev, node )\n    {\n      ev.preventDefault();\n      ev.stopPropagation();\n\n      let prevval = this.previous.value;\n      this.previous.value = node.value;\n\n      if( ev.keyCode === 8 && node.value === \"\" && prevval === \"\" )//backspace\n      {\n        //Try to set focus on previous input\n        let prevnode = node.parentNode.previousSibling;\n        if( prevnode )\n        {\n          let previnp = prevnode.querySelector(\"input\");\n          if( previnp )\n            previnp.focus();\n        }\n\n        return;\n      }\n\n      //First some basic validation\n      let value = node.value.replace(/[^0-9]+/g,'');\n      if( value === \"\" || value !== node.value || 1*value < 1*node.min || 1*value > 1*node.max )\n        return;\n\n      //Is field value minimal length\n      if( value.length < 2 )\n        return;\n\n      if( prevval === node.value )\n          return;//Only go to next input if value changed\n\n      //Try to set focus on next input\n      let nextnode = node.parentNode.nextSibling;\n      if( !nextnode )\n        return;\n\n      let nextinp = nextnode.querySelector(\"input\");\n      if( nextinp )\n        nextinp.focus();\n    }\n  */\n}\n","import * as dompack from '@webhare/dompack';\nimport { type CaptchaProvider, type CaptchaSettings, captcharegistry } from \"@mod-publisher/js/captcha/api\";\n\n//recaptcha API: https://developers.google.com/recaptcha/docs/display\nlet recaptchaload: PromiseWithResolvers<void> | undefined;\n\ndeclare global {\n  interface Window {\n    $wh__ongooglerecaptchaloaded: () => void;\n    grecaptcha: {\n      render: (node: HTMLElement, options: { sitekey: string; callback: () => void }) => string;\n      getResponse: (id: string) => string;\n    };\n  }\n}\n\nwindow.$wh__ongooglerecaptchaloaded = function () {\n  recaptchaload!.resolve();\n};\n\nfunction makeRecaptchaLoadPromise() {\n  recaptchaload = Promise.withResolvers<void>();\n  document.querySelector<HTMLElement>(\"head,body\")!.append(<script src=\"https://www.google.com/recaptcha/api.js?onload=$wh__ongooglerecaptchaloaded&amp;render=explicit\" />);\n  return recaptchaload.promise;\n}\n\nexport async function runRecaptcha(provider: CaptchaProvider, injectInto: HTMLElement, settings: CaptchaSettings) {\n  const lock = dompack.flagUIBusy({ modal: true });\n  try {\n    await (recaptchaload ? recaptchaload.promise : makeRecaptchaLoadPromise());\n\n    const captchanode = <div class=\"wh-captcha__googlerecaptchaholder\"></div>;\n    injectInto.append(captchanode);\n\n    if (provider.apikey === 'mock') {\n      captchanode.appendChild(<label class=\"wh-captcha__mock\"><input type=\"checkbox\" on={{ click: () => settings.onResponse('mock') }} />I am a human, beep-bop</label>);\n    } else {\n      const recaptchaid = window.grecaptcha.render(captchanode, {\n        sitekey: provider.apikey, callback: () => {\n          const response = window.grecaptcha ? window.grecaptcha.getResponse(recaptchaid) : '';\n          settings.onResponse(response);\n        }\n      });\n    }\n  } finally {\n    lock.release();\n  }\n}\n\n\nexport function setupGoogleRecaptcha() {\n  if (captcharegistry[\"google-recaptcha\"])\n    throw new Error(\"Duplicate google recaptcha initialization\");\n\n  captcharegistry[\"google-recaptcha\"] = { initialize: runRecaptcha };\n}\n","import * as dompack from '@webhare/dompack';\nimport { initializeCaptcha, type CaptchaProvider } from \"@mod-publisher/js/captcha/api\";\nimport { setFieldError, type SetFieldErrorData } from '../internal/customvalidation';\n\nimport \"../../captcha/__captcha.lang.json\"; //TODO or have forms send this tid (so it can also be overridden there)\nimport { JSFormElement } from '@webhare/forms';\nimport { getTid } from '@webhare/gettid';\nimport type RPCFormBase from '../rpc';\n\ndeclare global {\n  interface HTMLElementTagNameMap {\n    \"wh-captcha\": CaptchaField;\n  }\n}\n\nexport default class CaptchaField extends JSFormElement<string> {\n  value = '';\n  provider: CaptchaProvider | null = null;\n\n  constructor() {\n    super();\n    this.addEventListener('wh:form-setfielderror', evt => void this._setFieldError(evt));\n    this.whFormsApiChecker = () => this.check();\n\n    const form = this.closest('form');\n    if (form)\n      form.addEventListener('reset', () => this.onReset());\n  }\n\n  check(): void {\n    if (!this.value)\n      setFieldError(this, getTid(\"publisher:site.forms.commonerrors.required\"), { reportimmediately: false });\n    else\n      setFieldError(this, \"\", { reportimmediately: false });\n  }\n\n  setup(provider: CaptchaProvider) {\n    if (this.provider)\n      throw new Error(\"CaptchaField is already setup\");\n\n    this.provider = provider;\n    this.initialize();\n  }\n\n  private initialize() {\n    this.value = '';\n    this.replaceChildren();\n    void initializeCaptcha(this.provider!, this, {\n      onResponse: (result: string) => { this.value = result; }\n    });\n  }\n\n  private onReset() {\n    void this.initialize();\n  }\n\n  async _setFieldError(evt: CustomEvent<SetFieldErrorData>) {\n    dompack.stop(evt);\n    if (!evt.detail.error) //error cleared\n      return;\n\n    if (this.value) { //we were already sending a response!\n      console.log(\"Captcha response was rejected, resetting\");\n      this.onReset(); //better restart the control, timeout or duplicate submission\n    }\n  }\n}\n\nexport function setupCaptchaFieldGroup(form: RPCFormBase<object>, provider: CaptchaProvider): CaptchaField {\n  /* Setup a page-less holder for the captcha field\n\n    <div class=\"wh-form__page wh-form__page--visible\">\n      <div class=\"wh-form__fieldgroup\" data-wh-form-group-for=\"__form_captcha\">\n        ...\n    */\n\n  const captchaControl = dompack.create(\"wh-captcha\", { class: \"wh-form__captcha\", dataset: { whFormName: \"__form_captcha\", whFormRequired: \"true\" } });\n\n  const virtualCaptchaPage = dompack.create(\"div\", { class: \"wh-form__captchapage\" }, [\n    dompack.create(\"div\", { class: \"wh-form__fieldgroup\", dataset: { whFormGroupFor: \"__form_captcha\" } }, [\n      dompack.create(\"label\", { class: \"wh-form__label\" }, [getTid(\"publisher:site.captcha.title\")]),\n      dompack.create(\"div\", { class: \"wh-form__fields\" },\n        [dompack.create(\"div\", { class: \"wh-form__fieldline\" }, [captchaControl])]\n      )\n    ])\n  ]);\n\n  //Position it before the navbuttons, but if they are missing for whatever reason, just add to the end of the form\n  const buttonarea = dompack.qS(form.node, \".wh-form__navbuttons\");\n  if (buttonarea)\n    buttonarea.before(virtualCaptchaPage);\n  else\n    form.node.appendChild(virtualCaptchaPage);\n\n  void captchaControl.setup(provider);\n\n  return captchaControl;\n}\n\n\ncustomElements.define(\"wh-captcha\", CaptchaField);\n","/* PLEASE NOTE - including @mod-publisher/js/forms is considered including the 'legacy form api'. It comes\n   without tree shaking support and autoregisters forms\n\n   @webhare/forms provides a tree-shakable implementation (but requires more setup). To switch please see dev module forms.ts\n  setupForms();\n*/\n\nimport './internal/requiredstyles.css';\nimport * as merge from './internal/merge';\nimport { setFieldError, setupValidator } from './internal/customvalidation';\nimport FormBase, { type FormSubmitEmbeddedResult } from './formbase';\nimport RPCFormBase from './rpc';\nimport { setupForms, registerHandler } from '@webhare/forms';\nimport { isLive } from '@webhare/env';\nimport { setupFormAnalytics } from '@webhare/frontend/src/pxl';\n\nexport { FormBase, RPCFormBase, setFieldError, setupValidator, type FormSubmitEmbeddedResult };\n\nexport const registerMergeFormatter = merge.registerFormatter;\n\ntype LegacyFormHandlerFactory = (form: HTMLFormElement) => FormBase;\n\nfunction legacyRegisterFormHandler(handlername: string, handler: LegacyFormHandlerFactory) {\n  registerHandler(handlername, (form: HTMLFormElement) => {\n    const createdForm = handler(form);\n    if (!isLive && createdForm instanceof FormBase && !(createdForm instanceof RPCFormBase)) {\n      console.warn(`Form handler for '${handlername}' is deriving from @mod-publisher/js/forms#FormBase - it should derive from RPCFormBase (In WH5.7+, the FormBase exported by @webhare/forms will *be* the RPCFormBase)`);\n    }\n    return createdForm as RPCFormBase;\n  });\n}\n\n/** @deprecated setup() is no longer needed */\nexport function setup(options: unknown) {\n}\n\n// We explicitly bind the 'publisher:form' forms to FormBase. The modern version doesn't distinguish between these anymore (and we want to move away from that difference anyawy, RPCBase isn't that much different)\nsetupForms({\n  handlers: { \"publisher:form\": form => new FormBase(form) as RPCFormBase }\n});\n\n// We assume if you're importing @mod-publisher/js/forms you don't know about having to do setupFormAnalytics to keep analytics in WH 5.7+\nsetupFormAnalytics();\n\nexport { legacyRegisterFormHandler as registerHandler };\n","import { getBrowser } from \"@webhare/dompack\";\nimport { generateRandomId } from \"@webhare/std\";\nimport { debugFlags, isLive } from \"@webhare/env\";\n\ninterface PxlEventDetails {\n  event: string;\n  data: PxlEventData;\n  options: PxlOptions;\n  isAlt: boolean;\n}\n\nexport type PxlEvent = CustomEvent<PxlEventDetails>;\n\nexport type PxlEventData = {\n  [K in `ds_${string}` | `db_${string}` | `dn_${string}`]: (K extends `ds_${string}` ? string :\n    (K extends `db_${string}` ? boolean :\n      (K extends `dn_${string}` ? number : never)))\n};\n\nexport interface PxlOptions {\n  /** Override pi (pxlId) to control or anonymize user ids*/\n  pi?: string | undefined;\n  /**  Base url to which to send PXL events. Defaults to \"/.wh/ea/pxl/\". */\n  url: string;\n  /**  Sample rate for the alternative record url as a fraction of the number of events, for example, setting it to 1/100 sends 1 in 100 events to the alternative record url. Defaults to 0 (no sampling). */\n  altSampleRate: number;\n  /**  Alternative record url. Defaults to \"/.wh/ea/pxl/alt/\". */\n  altUrl: string;\n  /** The number of days the user id is valid. Defaults to 30. */\n  sessionExpiration: number; //TODO if we ever camel this, also add 'Days' to the name\n  /** Set to true to omit some browser context fields (\"bu\", \"bs\" and \"bp\"). This option can\n      be used to reduce the length of the pxl url. Defaults to false. */\n  noBrowser: boolean;\n  /** Node responsible for generating this event (if not set, 'window' is assumed). Used for the event handlers */\n  node?: HTMLElement;\n  /** Send pixels as beacons */\n  beacon: boolean;\n  /** Callback to execute once pixel is sent */\n  onComplete?: () => void;\n}\n\n//event names must match isValidModuleScopedName, but we won't do the module name checks here. also isValidModuleScopedName lives in @webhare/services so..\nconst eventname_regex = /^([a-z0-9][-a-z0-9_]*[a-z0-9]):([a-z0-9][-.a-z0-9_]*[a-z0-9])$/;\nconst datakey_regex = /^(ds_[0-9a-z_]+)|(dn_[0-9a-z_]+)|(db_[0-9a-z_]+)$/;\n/*TODO: Not sure yet what the new maximum URL length will be\nconst max_data_length = 600; // The maximum number of bytes stored for the request*/\nconst max_sessionid_age = 30;\n\nlet globalOptions: Partial<PxlOptions> | undefined;\n\nlet pagesession: string | undefined; //current page session id (used to track multiple events from single page)\nlet useAltRecordURL = false; //send events for this page to the altrecordurl\nlet seqnr = 0;\n\nlet pxlUserId: string | undefined, pxlSessionId: string | undefined;\n\nfunction buildOptions(options: Partial<PxlOptions> | undefined): PxlOptions {\n  return {\n    url: \"/.wh/ea/pxl/\",\n    altSampleRate: 0,\n    altUrl: \"/.wh/ea/pxl/alt/\",\n    sessionExpiration: max_sessionid_age,\n    noBrowser: false,\n    beacon: false,\n    ...globalOptions,\n    ...options\n  };\n}\n\n/** Set global pxl options\n    @param options - Option updates\n*/\nexport function setPxlOptions(options: Partial<PxlOptions> | null) {\n  globalOptions = { ...globalOptions, ...options };\n\n  if (globalOptions.altUrl && globalOptions.altSampleRate) {\n    useAltRecordURL = Math.random() < globalOptions.altSampleRate;\n    if (debugFlags.pxl)\n      console.log(`[pxl] using altrecordurl for ${100 * globalOptions.altSampleRate}% of pageloads, this session is sent to the ${useAltRecordURL ? \"alternative\" : \"normal\"} url`);\n  } else\n    useAltRecordURL = false;\n}\n\nfunction pxlFailed(errormessage: string, ...params: unknown[]) {\n  console.error('[pxl] ' + errormessage, ...params);\n  if (!isLive)\n    throw new Error(errormessage); //big errors on test servers\n  return null;\n}\n\nexport function makePxlURL(baseurl: string, eventname: string, data?: PxlEventData | null, options?: Partial<PxlOptions>) {\n  options = { ...globalOptions, ...options };\n\n  if (typeof eventname !== \"string\")\n    return pxlFailed(`Invalid eventname name '${eventname}', expected string, got ${typeof eventname}`);\n  if (!eventname_regex.test(eventname))\n    return pxlFailed(`Invalid eventname name '${eventname}', must be a valid module:event name`);\n  if (data && typeof data !== \"object\")\n    return pxlFailed(`Invalid data, expected object, got ${typeof data}`);\n\n  if (!pagesession)\n    pagesession = generateRandomId();\n\n  //not using URL object, simplifies support of relative URLs\n  const url = typeof document !== \"undefined\" ? new URL(baseurl, document.baseURI) : new URL(baseurl);\n  url.searchParams.set(\"pe\", eventname);\n  url.searchParams.set(\"pp\", pagesession);\n  url.searchParams.set(\"pc\", String(++seqnr));\n  url.searchParams.set(\"ps\", getPxlSessionId());\n  url.searchParams.set(\"pi\", options?.pi ?? getPxlId());\n\n  if (options.altSampleRate)\n    url.searchParams.set(\"pr\", String(options.altSampleRate));\n\n  const browser = getBrowser();\n  url.searchParams.set(\"bt\", browser.triplet);\n  if (browser.device)\n    url.searchParams.set(\"bd\", browser.device);\n\n  if (typeof document !== \"undefined\") {\n    if (document.documentElement.dataset.whOb)\n      url.searchParams.set(\"ob\", document.documentElement.dataset.whOb.substring(0, 20));\n    if (document.location)\n      url.searchParams.set(\"bl\", document.location.href.substring(0, 1000));\n    if (document.referrer)\n      url.searchParams.set(\"br\", document.referrer.substring(0, 1000));\n\n    if (!options.noBrowser) {\n      url.searchParams.set(\"bu\", window.navigator.userAgent.substring(0, 300));\n      if (window.screen.width && window.screen.height)\n        url.searchParams.set(\"bs\", `${window.screen.width}x${window.screen.height}`);\n      if (window.devicePixelRatio)\n        url.searchParams.set(\"bp\", String(window.devicePixelRatio));\n    }\n  }\n\n  if (data) {\n    for (const [name, value] of Object.entries(data)) {\n      const test = datakey_regex.exec(name);\n      if (!test)\n        return pxlFailed(`Invalid data field name '${name}', should be ds_XXX, dn_XXX or db_XXX with X consisting of characters in the range 0 - 9, a - z or an underscore`);\n\n      const type = typeof value;\n\n      if (test[1]) { // String\n        if (value && type !== \"string\")\n          return pxlFailed(`Invalid value type '${type}', expected 'string' for field '${name}'`);\n\n        url.searchParams.set(name, value as string || '');\n      } else if (test[2]) { // Number\n        if (value && type !== \"number\")\n          return pxlFailed(`Invalid value type '${type}', expected 'number' for field '${name}'`);\n\n        url.searchParams.set(name, String(value) || '0');\n      } else if (test[3]) { // Boolean\n        if (value && type !== \"boolean\")\n          return pxlFailed(`Invalid value type '${type}', expected 'boolean' for field '${name}'`);\n\n        url.searchParams.set(name, value ? \"true\" : \"false\");\n      }\n    }\n  }\n  return url;\n}\n\nexport function getPxlId(): string {\n  if (!pxlUserId) {\n    try {\n      const timestampvar = localStorage.getItem(\"_wh.ti\");\n      if (timestampvar && new Date(timestampvar) > new Date) { //not expired yet\n        pxlUserId = localStorage.getItem(\"_wh.pi\") || undefined;\n        if (pxlUserId && debugFlags.pxl)\n          console.log(`[pxl] Using id ${pxlUserId} from localStorage`);\n      }\n      pxlUserId ||= generateRandomId();\n      const sessionExpireDays = (globalOptions?.sessionExpiration ?? max_sessionid_age);\n      const expiration = new Date(Date.now() + sessionExpireDays * 24 * 60 * 60 * 1000);\n      localStorage.setItem(\"_wh.pi\", pxlUserId);\n      localStorage.setItem(\"_wh.ti\", expiration.toISOString());\n    } catch {\n      pxlUserId ||= generateRandomId();\n    }\n  }\n  return pxlUserId;\n}\n\nexport function getPxlSessionId() {\n  if (!pxlSessionId) {\n    try {\n      pxlSessionId = sessionStorage[\"_wh.ps\"];\n      pxlSessionId ||= generateRandomId();\n      sessionStorage[\"_wh.ps\"] = pxlSessionId;\n    } catch { //privacy mode? just (re)try to generate an id\n      pxlSessionId ||= generateRandomId();\n    }\n  }\n  return pxlSessionId;\n}\n\n/** Send a pxl event\n    @param event - Event type, preferably in the format 'module:event'\n    @param data - Event data. A map whose keys must start with either ds_ (string), db_ (boolean) or dn_ (number)\n*/\nexport function sendPxlEvent(event: string, data?: PxlEventData | null, options?: Partial<PxlOptions>) {\n  const finaloptions = buildOptions(options);\n  const baseurl = useAltRecordURL ? finaloptions.altUrl : finaloptions.url;\n\n  if (debugFlags.pxl)\n    console.log(`[pxl] Event '${event}'`, data);\n\n  // Add the pxl event to the url. We wrap it in async() for simpler code but we won't force our callers to await us, they rarely want to\n  (async () => {\n    const url = makePxlURL(baseurl, event, data, finaloptions);\n    if (!url)\n      return;\n\n    if (finaloptions.beacon && typeof navigator !== \"undefined\" && navigator.sendBeacon) {\n      navigator.sendBeacon(url);\n      return; //as beacons don't return anything per definition, we can stop here\n    }\n\n    if (debugFlags.pxl)\n      console.log(`[pxl] Pinging pxl '${url}'`);\n\n    // Load the pxl file using fetch\n    const fetchRes = await fetch(url, { mode: \"no-cors\", method: \"HEAD\", credentials: \"same-origin\", cache: \"no-store\", keepalive: true });\n    if (fetchRes.type === \"opaque\") { //we can't verify cross-server requests\n      if (debugFlags.pxl)\n        console.log(`[pxl] Assuming succesful pxl event '${event}'`);\n      return;\n    }\n    if (!fetchRes.ok) {\n      console.error(`[pxl] Failed to send pxl event '${event}'`, fetchRes);\n      return;\n    }\n\n    if (finaloptions.onComplete) //if we care about completion, we'll explicitly wait for the body to come in\n      await fetchRes.text(); //this will throw if the request failed, so we can skip the next check\n\n    if (debugFlags.pxl)\n      console.log(`[pxl] Successfully sent pxl event '${event}'`);\n  })().catch((error: Error) => {\n    console.error(`[pxl] Error while sending pxl event '${event}'`, error);\n  }).finally(() => {\n    finaloptions.onComplete?.(); //any exception here we'll keep uncaught\n  });\n}\n","/* TODO Move consilio pxl here eventually, but limit how much we actually want to export */\nimport { sendPxlEvent, type PxlEventData, type PxlOptions } from \"@mod-consilio/js/pxl\";\nimport { dtapStage } from \"@webhare/env\";\nimport type { FormAnalyticsEvent } from \"@webhare/forms\";\nimport type { PxlDataTypes } from \"@webhare/frontend\";\nexport { setPxlOptions, getPxlId as getPxlUserId, getPxlSessionId } from \"@mod-consilio/js/pxl\";\n\nexport type PxlData = Record<string, string | number | boolean>;\n\n// Track listener installation. Especially needed during the transition from @mod-publisher/js/forms to @webhare/frontend. After the transition we might not need stack traces anymore\nconst activeListenPrefixes = new Map<string, Error>;\n\n// Combine with `string & {}` to prevent TypeScript from eliminating `keyof PxlDataTypes`\ntype AllowedKeys = keyof PxlDataTypes | (string & {});\n\n// Filters out invalid types from the PXL data type\ntype FilterValidTypes<T extends object | void> = T extends object ? {\n  [K in keyof T]: T[K] extends undefined | string | number | boolean ?\n  T[K] :\n  { __error: \"Invalid property type used in PXL event declaration, allowed: boolean, number, string\"; __type: T[K] };\n} : T;\n\n/// Helper type to allow making the data parameter optional when the datatype is void\ntype ParamTuples<DataType, Key extends AllowedKeys> = Key extends keyof PxlDataTypes ?\n  [data: FilterValidTypes<PxlDataTypes[Key]>, options?: Partial<PxlOptions>] :\n  (DataType extends void ?\n    [data?: void, options?: Partial<PxlOptions>] :\n    [data: DataType, options?: Partial<PxlOptions>]);\n\n// Error type for when an event is not declared in PxlDataTypes and no data type override is provided\ntype NeedTypeParamError = { __error: \"Event not declared in PxlDataTypes and no data type override provided\" } & symbol;\n\nexport function sendPxl<DataType extends (Event extends keyof PxlDataTypes ? NeedTypeParamError : void | PxlData | NeedTypeParamError) = NeedTypeParamError, Event extends AllowedKeys = AllowedKeys>(eventKey: Event, ...params: ParamTuples<NoInfer<DataType>, Event>): void {\n  const [data, options] = params;\n  const pxldata: PxlEventData = {};\n  for (const [k, v] of Object.entries(data ?? {})) {\n    if (v === undefined)\n      continue;\n    if (typeof v === \"string\")\n      pxldata[`ds_${k}`] = v;\n    else if (typeof v === \"number\")\n      pxldata[`dn_${k}`] = v;\n    else if (typeof v === \"boolean\")\n      pxldata[`db_${k}`] = v;\n    else\n      throw new Error(`Invalid type '${typeof v}' for PXL data key '${k}'`);\n  }\n\n  sendPxlEvent(eventKey, pxldata, options);\n}\n\n/** Setup pxl events for form analytics events\n * @param options - Options for the form analytics setup\n     - `eventPrefix`. Prefix to use. Default is `platform:form_` but existing integrations may (also) require `publisher:form`\n*/\nexport function setupFormAnalytics(options?: { eventPrefix: string }): void {\n  const prefix = options?.eventPrefix || \"platform:form_\";\n  const registered = activeListenPrefixes.get(prefix);\n  if (registered)\n    if (dtapStage !== \"production\")\n      return console.error(`Duplicate setupFormAnalytics for prefix '${prefix}', earlier registration: `, registered);\n\n  activeListenPrefixes.set(prefix, new Error); //getStackTrace() would have been nicer, but doesn't get sourcemapped in the console\n\n  addEventListener(\"wh:form-analytics\", (e: FormAnalyticsEvent) => {\n    const formeventdata: { [K in `formmeta_${string}`]: string | number | boolean } = {};\n    for (const [key, val] of Object.entries(e.detail))\n      if (key !== \"event\" && [\"string\", \"number\", \"boolean\"].includes(typeof val))\n        formeventdata[`formmeta_${key}`] = val;\n\n    sendPxl<PxlData>(`${prefix}${e.detail.event}`, formeventdata, e.detail.event === \"abandoned\" ? { beacon: true } : undefined);\n  });\n}\n","import * as dompack from \"@webhare/dompack\";\nimport * as forms from \"@mod-publisher/js/forms\";\nimport UploadField from \"@mod-publisher/js/forms/fields/upload\";\nimport { DateField, TimeField } from \"@mod-publisher/js/forms/fields/datetime\";\n\nimport \"./buttons.css\";\nimport \"./buttons-v2.css\";\nimport \"./textual-input.scss\";\nimport \"./checkradio-native.scss\";\nimport \"./slider.css\";\nimport \"./pulldown.scss\";\n\n//import * as googleRecaptcha from \"@mod-publisher/js/captcha/google-recaptcha\";\n\n//Load neutral styling (optional, but you'll need to supply your own styling for some of the fields below if you skip this)\nimport '@mod-publisher/js/forms/themes/neutral';\n\nimport './forms.scss';\n\n//Enable forms and our builtin validation (starting with WebHare 4.23, validate:true will be the default)\nforms.setup({ validate: true });\n\n//Replaces upload fields with a nicer and edit-supporting version\ndompack.register(\".wh-form__upload\", node => new UploadField(node));\n\n//Replaces date/time fields\ndompack.register(\".wh-form__date\", node => new DateField(node));\ndompack.register(\".wh-form__time\", node => new TimeField(node));\n\n//enable the line below AND the googleRecaptcha import if you want to use this recaptcha. you'll also need to enable it in the site profile\n//googleRecaptcha.setupGoogleRecaptcha();\n","// Auto-generated language file from /opt/wh/whtree/modules/publisher/js/internal/rtd.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"publisher\",\"nl\",{\"site\":{\"rtd\":{\"embedvideo\":{\"playbutton-aria\":\"Speel video af\",\"unrecognized\":\"De URL is niet herkend als een ondersteunde video URL\",\"videourl\":\"Video URL\"}}}});\nregisterTexts(\"publisher\",\"en\",{\"site\":{\"rtd\":{\"embedvideo\":{\"playbutton-aria\":\"Play video\",\"unrecognized\":\"The URL is not recognized as a supported video URL\",\"videourl\":\"Video URL\"}}}});\n// Adding dependency: /opt/wh/whtree/modules/publisher/language/nl.xml\n// Adding dependency: /opt/wh/whtree/modules/publisher/language/default.xml\n","import * as dompack from '@webhare/dompack';\nimport { navigateTo } from '@webhare/env';\nimport { debugFlags } from '@webhare/env/src/envbackend';\n\ndeclare global {\n  interface Window {\n    whResetConsent: () => void;\n  }\n  interface GlobalEventHandlersEventMap {\n    \"wh:consent-changed\": CustomEvent<ConsentSettings>;\n  }\n}\n\nexport interface SetupConsentOptions {\n  /** Domain to which to bind the cookie, can be at most one level higher (eg '.example.net' for 'www.example.net') */\n  cookiedomain?: string;\n  /** Duration to store or extend the consent, in days. Defaults to 365 */\n  cookieduration?: number;\n  /** The consent tags which are active by default (only use this for anonymous tracking and functional cookies) */\n  defaultconsent?: string[];\n}\n\ninterface ConsentStatus {\n  /** Version (2) */\n  v: 2;\n  //** Consent options */\n  c?: string[];\n  /** Last consent change (ISO8601 date) */\n  lc?: string;\n}\n\nlet consentstatus: ConsentStatus | null;\nlet cookiename: string | undefined;\nlet consentoptions: SetupConsentOptions | undefined;\n\nexport type ConsentSettings = {\n  isdefault: true;\n  consent: string[];\n} | {\n  isdefault: false;\n  consent: string[] | undefined; //we've explicitly defined no consent-yet-given as 'undefined' (TODO was this a good idea?)\n};\n\n/** Setup the consent handler\n    @param usecookiename - Name of the cookie. Should be identical for all sites sharing this consent, set to empty string if you store consent externally\n    @param consentrequester - Function to invoke if consent is unknown to eg trigger a cookie bar. This function will be immediately registered for invocation through dompack.onDomReady\n*/\nexport function setup(usecookiename: string, consentrequester?: () => void, options?: SetupConsentOptions) {\n  if (typeof usecookiename !== 'string')\n    throw new Error(\"Cookiename must be of type 'string'\");\n  if (debugFlags.cst)\n    console.log(`[cst] consenthandler initialized. cookiename: '${usecookiename}'`);\n\n  cookiename = usecookiename;\n  consentoptions = {\n    cookieduration: 365,\n    defaultconsent: [],\n    ...options\n  };\n\n  if (consentrequester)\n    try {\n      consentstatus = JSON.parse(dompack.getCookie(cookiename)!);\n      if (debugFlags.cst)\n        console.log(`[cst] initial consent state:`, consentstatus);\n    } catch (ignore) {\n    }\n\n  if (!consentstatus || typeof consentstatus !== \"object\" || consentstatus.v !== 2 || typeof consentstatus.c !== \"object\")\n    consentstatus = { v: 2 };\n\n  if (!(\"c\" in consentstatus)) { //simple consent flag\n    if (consentrequester)\n      dompack.onDomReady(consentrequester); //run the request function, but only on domready! it's a safe assumption it should be delayed...\n  } else {\n    storeConsent(); //renew the status\n  }\n  updateConsent();\n}\n\n//Test for consent\nexport function hasConsent(consentsetting: string) {\n  if (consentsetting === undefined) //generic consent check\n    throw new Error(\"hasConsent required a string argument\");\n\n  const details = getConsentDetail();\n  if (!details // setup() not called yet?\n    || !details.consent) // no consent has been given and no defaults are available consent will be undefined?\n    return undefined;\n\n  return details.consent.includes(consentsetting);\n}\n\n//Set simple consent\nexport function setConsent(newsetting: string[]) {\n  if (cookiename === undefined)\n    throw new Error(\"Invoke consenthandler.setup before modifying consent state!\");\n  if (typeof newsetting !== \"object\" || !Array.isArray(newsetting))\n    throw new Error(\"Expecting an array in call to setConsent\");\n\n  // Check if there are some consents being revoked\n  const details = getConsentDetail(); // get current list of consent tags, including implicit (default) consent\n  let consent_revoked = false;\n  if (details?.consent) { // if no explicit or default consent, the consent field is undefined\n    for (const tag of details.consent) {\n      if (!newsetting.includes(tag))\n        consent_revoked = true;\n    }\n  }\n\n  if (!consentstatus)\n    throw new Error(`Attempting to change consent status before invoking consenthandler.setup`);\n\n  consentstatus.c = newsetting.sort();//ensure stable order\n  consentstatus.lc = (new Date()).toISOString();\n\n  storeConsent();\n\n  // Revoked consent may need a reload to take effect.\n  // This is because it's not worth the effort for most websites to implement on-the-fly disabling\n  // of functionality. It might even be impossible if 3rd party scripts are already loaded.\n  if (consent_revoked) {\n    console.log(\"[cst] Reloading to handle revoked consent\");\n    navigateTo({ type: \"reload\" });\n  }\n\n  updateConsent();\n}\n\n/** Get a list of consents and whether they are defaults (or explicitly set)\n    @returns consent: list all consents\n            isdefault: if true then the consents are implicit/defaults (not consent explicitly given by the user)\n*/\nfunction getConsentDetail(): ConsentSettings | null {\n  if (!consentstatus) // setup() did not run yet\n    return null;\n\n  if (!(\"c\" in consentstatus)) { // consent not set yet\n    if (consentoptions?.defaultconsent && consentoptions?.defaultconsent.length > 0)\n      return { consent: consentoptions!.defaultconsent!, isdefault: true }; // use fallback consent\n    else\n      return { consent: undefined, isdefault: false }; // no consent given yet (expected to return undefined for consent)\n  }\n\n  return {\n    consent: consentstatus.c,\n    isdefault: false\n  };\n}\n\nexport function onConsent(type: string, callback: (cs: ConsentSettings) => void) {\n  window.addEventListener(\"wh:consent-changed\", evt => {\n    if (evt.detail.consent?.includes(type))\n      callback(evt.detail);\n  });\n\n  const details = getConsentDetail();\n\n  if (details && details.consent && details.consent.includes(type)) {//already missed it, so invoke\n    if (debugFlags.cst)\n      console.log(\"[anl] Invoking callback\", details);\n    callback(details);\n  }\n}\n\n//Register callback for content changes\nexport function onConsentChange(callback: (cs: ConsentSettings) => void): void {\n  window.addEventListener(\"wh:consent-changed\", evt => callback(evt.detail));\n\n  const details = getConsentDetail();\n\n  if (details) { //already missed it, so invoke\n    if (debugFlags.cst)\n      console.log(\"[cst] Invoking callback\", details);\n    callback(details);\n  }\n}\n\nfunction updateConsentOverlays() {\n  const overlays = dompack.qSA(\".wh-requireconsent__overlay\");\n  const consent = getConsentDetail()!.consent; //we are only scheduled when details are set (but we reread them as they may change)\n\n  if (debugFlags.cst)\n    console.log(`[cst] update ${overlays.length} consent overlay(s). ${consent ? `consent: ${consent.length ? consent.join(', ') : \"<none>\"}` : \"<undefined>\"}`);\n\n  overlays.forEach(overlay => {\n    const parent = overlay.closest<HTMLElement>(\".wh-requireconsent\");\n    if (parent && parent.dataset.whConsentRequired)\n      overlay.hidden = consent?.includes(parent.dataset.whConsentRequired) || false;\n  });\n}\n\nfunction updateConsent() { //update in DOM, GTM, etc\n  const details = getConsentDetail();\n\n  if (!details // setup() not called yet?\n    || !details.consent) { // no consent has been given and no defaults are available consent will be undefined?\n    document.documentElement.dataset.whConsent = \"unknown\"; // unknown - no explicit or explicit (options.defaultconsent) consent\n    return;\n  }\n\n  document.documentElement.dataset.whConsent = details.consent.length ? details.consent.join(\" \") : \"denied\";\n\n  if (debugFlags.cst)\n    console.log(\"[cst] Firing wh:consent-changed with\", details);\n\n  dompack.dispatchCustomEvent(window, \"wh:consent-changed\", { bubbles: false, cancelable: false, detail: details });\n  dompack.onDomReady(updateConsentOverlays);\n}\n\nfunction storeConsent() {\n  if (cookiename)\n    dompack.setCookie(cookiename, JSON.stringify(consentstatus), { duration: consentoptions!.cookieduration, domain: consentoptions!.cookiedomain });\n}\n\nwindow.whResetConsent = function () {\n  if (cookiename === undefined)\n    throw new Error(\"Consent handler not setup\");\n  else if (!cookiename)\n    throw new Error(\"Consent handler is not handling storage\");\n\n  dompack.deleteCookie(cookiename);\n  console.log(\"Reloading for whResetConsent\");\n  navigateTo({ type: \"reload\" });\n};\n","/// @ts-nocheck -- Bulk rename to enable TypeScript validation\n\nimport * as dompack from 'dompack';\nimport { getTid } from \"@webhare/gettid\";\nimport \"./video.css\";\nimport \"../internal/rtd.lang.json\";\nimport * as consenthandler from '@mod-publisher/js/analytics/consenthandler';\n\n\nfunction createMyFrame() {\n  const ifrm = document.createElement(\"iframe\");\n  ifrm.style.width = \"100%\";\n  ifrm.style.height = \"100%\";\n  ifrm.setAttribute(\"frameborder\", 0);\n  ifrm.setAttribute(\"allowfullscreen\", \"\");\n\n  /*\n  Most browsers default to \"strict-origin-when-cross-origin\", but let's explicitly request it.\n  (so video providers can only see from which website you view the video, not which specific page)\n  Note that YouTube won't accept \"no-referrer\", it'll give an \"YouTube Error 153\" message.\n  (this probably was enforced since july 2025, error 153 appeared in the IFrame Player API documentation somewhere between 2 and 9 july 2025)\n\n  Also see:\n  - https://developers.google.com/youtube/iframe_api_reference\n  - https://developers.google.com/youtube/terms/required-minimum-functionality#embedded-player-api-client-identity\n  */\n  ifrm.setAttribute(\"referrerpolicy\", \"strict-origin-when-cross-origin\");\n\n  // delegate autoplay (for Chrome) and fullscreen permission to the video player iframe\n  // see: https://developer.chrome.com/blog/autoplay/#iframe_delegation\n  ifrm.setAttribute(\"allow\", \"autoplay; fullscreen\");\n\n  return ifrm;\n}\n\nfunction initYouTube(node, video, playback) {\n  const ifrm = createMyFrame();\n\n  // List of embed parameters YouTube supports:\n  // https://developers.google.com/youtube/player_parameters\n\n  const youtubeUrl = new URL(`https://www.youtube.com/embed/${encodeURIComponent(video.id)}`);\n\n  if (playback.autoplay)\n    youtubeUrl.searchParams.set(\"autoplay\", \"1\");\n\n  if (video.mute || playback.mute)\n    youtubeUrl.searchParams.set(\"mute\", \"1\");\n\n  if (video.starttime)\n    youtubeUrl.searchParams.set(\"start\", String(Math.floor(video.starttime))); // seconds, whole integer (YouTube also uses t= in the shorturl??)\n\n  if (video.endtime)\n    youtubeUrl.searchParams.set(\"end\", String(Math.floor(video.endtime)));\n\n  if (typeof playback.controls !== \"undefined\" && !playback.controls)\n    youtubeUrl.searchParams.set(\"controls\", \"0\");\n\n  if (video.loop || playback.loop) {\n    /* from the documentation: https://developers.google.com/youtube/player_parameters\n       Note: This parameter has limited support in IFrame embeds. To loop a single video,\n       set the loop parameter value to 1 and set the playlist parameter value to the\n       same video ID already specified in the Player API URL:\n       https://www.youtube.com/embed/VIDEO_ID?playlist=VIDEO_ID&loop=1\n    */\n    youtubeUrl.searchParams.set(\"loop\", \"1\");\n    youtubeUrl.searchParams.set(\"playlist\", video.id);//To enable loop, set same video as playlist\n  }\n\n  youtubeUrl.searchParams.set(\"rel\", \"0\"); // disable 'related video's'\n  youtubeUrl.searchParams.set(\"enablejsapi\", \"1\");\n  youtubeUrl.searchParams.set(\"origin\", location.origin);\n\n  ifrm.src = youtubeUrl.toString();\n  ifrm.title = video.title ? \"YouTube video: \" + video.title : \"YouTube video\";\n  node.appendChild(ifrm);\n}\n\nfunction initVimeo(node, video, playback) {\n  const ifrm = createMyFrame();\n\n  // List of embed parameters Vimeo supports:\n  // https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Player-parameters-overview\n\n  const vimeoUrl = new URL(`https://player.vimeo.com/video/${encodeURIComponent(video.id)}`);\n\n  if (playback.autoplay)\n    vimeoUrl.searchParams.set(\"autoplay\", \"1\");\n\n  if (video.mute || playback.mute)\n    vimeoUrl.searchParams.set(\"muted\", \"1\");\n\n  if (video.endtime)\n    console.warn(\"setting an endtime doesn't work for Vimeo video's\");\n\n  // NOTE: actually disabling controls is possible, but ONLY if the video is hosted by a Plus account or higher\n  if (typeof playback.controls !== \"undefined\" && !playback.controls)\n    console.warn(\"disabling video controls not possible for Vimeo video's\");\n\n  if (video.loop || playback.loop)\n    vimeoUrl.searchParams.set(\"loop\", \"1\");\n\n  if (playback.background)\n    vimeoUrl.searchParams.set(\"background\", \"1\");\n\n  if (playback.api) {\n    vimeoUrl.searchParams.set(\"api\", playback.api);\n\n    // we need a player_id to distinguish from which iframe a message came.\n    // (in cross domain situations we cannot lookup/compare the event source with iframe.contentWindow)\n    if (playback.player_id)\n      vimeoUrl.searchParams.set(\"player_id\", playback.player_id);\n  }\n\n  if (video.starttime) {\n    // #t=3m28s\n    const t = video.starttime;\n    const minutes = Math.floor(t / 60);\n    const seconds = t % 60;\n    vimeoUrl.hash = \"#t=\" + minutes + \"m\" + seconds + \"s\";\n  }\n\n  ifrm.src = vimeoUrl.toString();\n  ifrm.title = video.title ? \"Vimeo video: \" + video.title : \"Vimeo video\";\n  node.appendChild(ifrm);\n}\n\nfunction launchVideo(node, video, opts) {\n  switch (video.network) {\n    case 'youtube':\n      initYouTube(node, video, opts || {});\n      break;\n    case 'vimeo':\n      initVimeo(node, video, opts || {});\n      break;\n  }\n}\n\nfunction initializeVideoElementV1(node) {\n  const video = JSON.parse(node.dataset.video);\n  const opts = node.dataset.videoOptions ? JSON.parse(node.dataset.videoOptions) : {};\n  node.innerHTML = '';\n  launchVideo(node, video, opts);\n}\n\nfunction initializeVideoElementV2(node) {\n  const video = JSON.parse(node.dataset.whVideo);\n\n  const videonodes = dompack.qSA(node, \".wh-video--activate\");\n\n  for (const videonode of videonodes) {\n    videonode.addEventListener(\"click\", function () {\n      activateVideo(videonode, video);\n    });\n\n    const playbutton = videonode.querySelector(\".wh-video__playbutton\");\n    playbutton.setAttribute(\"tabindex\", \"0\");\n    playbutton.setAttribute(\"role\", \"button\");\n    playbutton.setAttribute(\"aria-label\", getTid(\"publisher:site.rtd.embedvideo.playbutton-aria\"));\n\n    playbutton.addEventListener(\"click\", function () {\n      activateVideo(videonode, video, { autoplay: true });\n    });\n\n    // Because we don't use <button> we must implement it's keyboard interaction\n    playbutton.addEventListener(\"keypress\", function (evt) {\n      // we are only interested in enter and space keypressed\n      if (evt.keyCode !== 13 && evt.keyCode !== 32)\n        return;\n\n      // prevent other code getting the event or the space both triggering the video AND scrolling the page\n      evt.preventDefault();\n\n      activateVideo(videonode, video, { autoplay: true });\n    });\n\n    if (video.autoplay) //activate immediately\n      if (node.dataset.whConsentRequired)\n        consenthandler.onConsent(node.dataset.whConsentRequired, () => activateVideo(videonode, { ...video, mute: true }, { autoplay: true }));\n      else\n        activateVideo(videonode, { ...video, mute: true }, { autoplay: true });\n  }\n}\n\nfunction activateVideo(videonode, video, opts) {\n  if (videonode.__initialized)\n    return;\n\n  videonode.querySelector(\".wh-video__innerframe__preview\").hidden = true;\n  videonode.__initialized = true;\n  launchVideo(videonode, video, opts);\n}\n\ndompack.register('.wh-video', node => node.dataset.video ? initializeVideoElementV1(node) : initializeVideoElementV2(node));\n","import { options as _options } from 'preact';\n\n/** @type {number} */\nlet currentIndex;\n\n/** @type {import('./internal').Component} */\nlet currentComponent;\n\n/** @type {import('./internal').Component} */\nlet previousComponent;\n\n/** @type {number} */\nlet currentHook = 0;\n\n/** @type {Array<import('./internal').Component>} */\nlet afterPaintEffects = [];\n\nlet EMPTY = [];\n\n// Cast to use internal Options type\nconst options = /** @type {import('./internal').Options} */ (_options);\n\nlet oldBeforeDiff = options._diff;\nlet oldBeforeRender = options._render;\nlet oldAfterDiff = options.diffed;\nlet oldCommit = options._commit;\nlet oldBeforeUnmount = options.unmount;\nlet oldRoot = options._root;\n\nconst RAF_TIMEOUT = 100;\nlet prevRaf;\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions._diff = vnode => {\n\tcurrentComponent = null;\n\tif (oldBeforeDiff) oldBeforeDiff(vnode);\n};\n\noptions._root = (vnode, parentDom) => {\n\tif (vnode && parentDom._children && parentDom._children._mask) {\n\t\tvnode._mask = parentDom._children._mask;\n\t}\n\n\tif (oldRoot) oldRoot(vnode, parentDom);\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions._render = vnode => {\n\tif (oldBeforeRender) oldBeforeRender(vnode);\n\n\tcurrentComponent = vnode._component;\n\tcurrentIndex = 0;\n\n\tconst hooks = currentComponent.__hooks;\n\tif (hooks) {\n\t\tif (previousComponent === currentComponent) {\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentComponent._renderCallbacks = [];\n\t\t\thooks._list.forEach(hookItem => {\n\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t}\n\t\t\t\thookItem._pendingValue = EMPTY;\n\t\t\t\thookItem._nextValue = hookItem._pendingArgs = undefined;\n\t\t\t});\n\t\t} else {\n\t\t\thooks._pendingEffects.forEach(invokeCleanup);\n\t\t\thooks._pendingEffects.forEach(invokeEffect);\n\t\t\thooks._pendingEffects = [];\n\t\t\tcurrentIndex = 0;\n\t\t}\n\t}\n\tpreviousComponent = currentComponent;\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.diffed = vnode => {\n\tif (oldAfterDiff) oldAfterDiff(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tif (c.__hooks._pendingEffects.length) afterPaint(afterPaintEffects.push(c));\n\t\tc.__hooks._list.forEach(hookItem => {\n\t\t\tif (hookItem._pendingArgs) {\n\t\t\t\thookItem._args = hookItem._pendingArgs;\n\t\t\t}\n\t\t\tif (hookItem._pendingValue !== EMPTY) {\n\t\t\t\thookItem._value = hookItem._pendingValue;\n\t\t\t}\n\t\t\thookItem._pendingArgs = undefined;\n\t\t\thookItem._pendingValue = EMPTY;\n\t\t});\n\t}\n\tpreviousComponent = currentComponent = null;\n};\n\n// TODO: Improve typing of commitQueue parameter\n/** @type {(vnode: import('./internal').VNode, commitQueue: any) => void} */\noptions._commit = (vnode, commitQueue) => {\n\tcommitQueue.some(component => {\n\t\ttry {\n\t\t\tcomponent._renderCallbacks.forEach(invokeCleanup);\n\t\t\tcomponent._renderCallbacks = component._renderCallbacks.filter(cb =>\n\t\t\t\tcb._value ? invokeEffect(cb) : true\n\t\t\t);\n\t\t} catch (e) {\n\t\t\tcommitQueue.some(c => {\n\t\t\t\tif (c._renderCallbacks) c._renderCallbacks = [];\n\t\t\t});\n\t\t\tcommitQueue = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t});\n\n\tif (oldCommit) oldCommit(vnode, commitQueue);\n};\n\n/** @type {(vnode: import('./internal').VNode) => void} */\noptions.unmount = vnode => {\n\tif (oldBeforeUnmount) oldBeforeUnmount(vnode);\n\n\tconst c = vnode._component;\n\tif (c && c.__hooks) {\n\t\tlet hasErrored;\n\t\tc.__hooks._list.forEach(s => {\n\t\t\ttry {\n\t\t\t\tinvokeCleanup(s);\n\t\t\t} catch (e) {\n\t\t\t\thasErrored = e;\n\t\t\t}\n\t\t});\n\t\tc.__hooks = undefined;\n\t\tif (hasErrored) options._catchError(hasErrored, c._vnode);\n\t}\n};\n\n/**\n * Get a hook's state from the currentComponent\n * @param {number} index The index of the hook to get\n * @param {number} type The index of the hook to get\n * @returns {any}\n */\nfunction getHookState(index, type) {\n\tif (options._hook) {\n\t\toptions._hook(currentComponent, index, currentHook || type);\n\t}\n\tcurrentHook = 0;\n\n\t// Largely inspired by:\n\t// * https://github.com/michael-klein/funcy.js/blob/f6be73468e6ec46b0ff5aa3cc4c9baf72a29025a/src/hooks/core_hooks.mjs\n\t// * https://github.com/michael-klein/funcy.js/blob/650beaa58c43c33a74820a3c98b3c7079cf2e333/src/renderer.mjs\n\t// Other implementations to look at:\n\t// * https://codesandbox.io/s/mnox05qp8\n\tconst hooks =\n\t\tcurrentComponent.__hooks ||\n\t\t(currentComponent.__hooks = {\n\t\t\t_list: [],\n\t\t\t_pendingEffects: []\n\t\t});\n\n\tif (index >= hooks._list.length) {\n\t\thooks._list.push({ _pendingValue: EMPTY });\n\t}\n\n\treturn hooks._list[index];\n}\n\n/**\n * @template {unknown} S\n * @param {import('./index').Dispatch<import('./index').StateUpdater<S>>} [initialState]\n * @returns {[S, (state: S) => void]}\n */\nexport function useState(initialState) {\n\tcurrentHook = 1;\n\treturn useReducer(invokeOrReturn, initialState);\n}\n\n/**\n * @template {unknown} S\n * @template {unknown} A\n * @param {import('./index').Reducer<S, A>} reducer\n * @param {import('./index').Dispatch<import('./index').StateUpdater<S>>} initialState\n * @param {(initialState: any) => void} [init]\n * @returns {[ S, (state: S) => void ]}\n */\nexport function useReducer(reducer, initialState, init) {\n\t/** @type {import('./internal').ReducerHookState} */\n\tconst hookState = getHookState(currentIndex++, 2);\n\thookState._reducer = reducer;\n\tif (!hookState._component) {\n\t\thookState._value = [\n\t\t\t!init ? invokeOrReturn(undefined, initialState) : init(initialState),\n\n\t\t\taction => {\n\t\t\t\tconst currentValue = hookState._nextValue\n\t\t\t\t\t? hookState._nextValue[0]\n\t\t\t\t\t: hookState._value[0];\n\t\t\t\tconst nextValue = hookState._reducer(currentValue, action);\n\n\t\t\t\tif (currentValue !== nextValue) {\n\t\t\t\t\thookState._nextValue = [nextValue, hookState._value[1]];\n\t\t\t\t\thookState._component.setState({});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\n\t\thookState._component = currentComponent;\n\n\t\tif (!currentComponent._hasScuFromHooks) {\n\t\t\tcurrentComponent._hasScuFromHooks = true;\n\t\t\tlet prevScu = currentComponent.shouldComponentUpdate;\n\t\t\tconst prevCWU = currentComponent.componentWillUpdate;\n\n\t\t\t// If we're dealing with a forced update `shouldComponentUpdate` will\n\t\t\t// not be called. But we use that to update the hook values, so we\n\t\t\t// need to call it.\n\t\t\tcurrentComponent.componentWillUpdate = function (p, s, c) {\n\t\t\t\tif (this._force) {\n\t\t\t\t\tlet tmp = prevScu;\n\t\t\t\t\t// Clear to avoid other sCU hooks from being called\n\t\t\t\t\tprevScu = undefined;\n\t\t\t\t\tupdateHookState(p, s, c);\n\t\t\t\t\tprevScu = tmp;\n\t\t\t\t}\n\n\t\t\t\tif (prevCWU) prevCWU.call(this, p, s, c);\n\t\t\t};\n\n\t\t\t// This SCU has the purpose of bailing out after repeated updates\n\t\t\t// to stateful hooks.\n\t\t\t// we store the next value in _nextValue[0] and keep doing that for all\n\t\t\t// state setters, if we have next states and\n\t\t\t// all next states within a component end up being equal to their original state\n\t\t\t// we are safe to bail out for this specific component.\n\t\t\t/**\n\t\t\t *\n\t\t\t * @type {import('./internal').Component[\"shouldComponentUpdate\"]}\n\t\t\t */\n\t\t\t// @ts-ignore - We don't use TS to downtranspile\n\t\t\t// eslint-disable-next-line no-inner-declarations\n\t\t\tfunction updateHookState(p, s, c) {\n\t\t\t\tif (!hookState._component.__hooks) return true;\n\n\t\t\t\t/** @type {(x: import('./internal').HookState) => x is import('./internal').ReducerHookState} */\n\t\t\t\tconst isStateHook = x => !!x._component;\n\t\t\t\tconst stateHooks =\n\t\t\t\t\thookState._component.__hooks._list.filter(isStateHook);\n\n\t\t\t\tconst allHooksEmpty = stateHooks.every(x => !x._nextValue);\n\t\t\t\t// When we have no updated hooks in the component we invoke the previous SCU or\n\t\t\t\t// traverse the VDOM tree further.\n\t\t\t\tif (allHooksEmpty) {\n\t\t\t\t\treturn prevScu ? prevScu.call(this, p, s, c) : true;\n\t\t\t\t}\n\n\t\t\t\t// We check whether we have components with a nextValue set that\n\t\t\t\t// have values that aren't equal to one another this pushes\n\t\t\t\t// us to update further down the tree\n\t\t\t\tlet shouldUpdate = false;\n\t\t\t\tstateHooks.forEach(hookItem => {\n\t\t\t\t\tif (hookItem._nextValue) {\n\t\t\t\t\t\tconst currentValue = hookItem._value[0];\n\t\t\t\t\t\thookItem._value = hookItem._nextValue;\n\t\t\t\t\t\thookItem._nextValue = undefined;\n\t\t\t\t\t\tif (currentValue !== hookItem._value[0]) shouldUpdate = true;\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\treturn shouldUpdate || hookState._component.props !== p\n\t\t\t\t\t? prevScu\n\t\t\t\t\t\t? prevScu.call(this, p, s, c)\n\t\t\t\t\t\t: true\n\t\t\t\t\t: false;\n\t\t\t}\n\n\t\t\tcurrentComponent.shouldComponentUpdate = updateHookState;\n\t\t}\n\t}\n\n\treturn hookState._nextValue || hookState._value;\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 3);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent.__hooks._pendingEffects.push(state);\n\t}\n}\n\n/**\n * @param {import('./internal').Effect} callback\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useLayoutEffect(callback, args) {\n\t/** @type {import('./internal').EffectHookState} */\n\tconst state = getHookState(currentIndex++, 4);\n\tif (!options._skipEffects && argsChanged(state._args, args)) {\n\t\tstate._value = callback;\n\t\tstate._pendingArgs = args;\n\n\t\tcurrentComponent._renderCallbacks.push(state);\n\t}\n}\n\n/** @type {(initialValue: unknown) => unknown} */\nexport function useRef(initialValue) {\n\tcurrentHook = 5;\n\treturn useMemo(() => ({ current: initialValue }), []);\n}\n\n/**\n * @param {object} ref\n * @param {() => object} createHandle\n * @param {unknown[]} args\n * @returns {void}\n */\nexport function useImperativeHandle(ref, createHandle, args) {\n\tcurrentHook = 6;\n\tuseLayoutEffect(\n\t\t() => {\n\t\t\tif (typeof ref == 'function') {\n\t\t\t\tref(createHandle());\n\t\t\t\treturn () => ref(null);\n\t\t\t} else if (ref) {\n\t\t\t\tref.current = createHandle();\n\t\t\t\treturn () => (ref.current = null);\n\t\t\t}\n\t\t},\n\t\targs == null ? args : args.concat(ref)\n\t);\n}\n\n/**\n * @template {unknown} T\n * @param {() => T} factory\n * @param {unknown[]} args\n * @returns {T}\n */\nexport function useMemo(factory, args) {\n\t/** @type {import('./internal').MemoHookState<T>} */\n\tconst state = getHookState(currentIndex++, 7);\n\tif (argsChanged(state._args, args)) {\n\t\tstate._pendingValue = factory();\n\t\tstate._pendingArgs = args;\n\t\tstate._factory = factory;\n\t\treturn state._pendingValue;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * @param {() => void} callback\n * @param {unknown[]} args\n * @returns {() => void}\n */\nexport function useCallback(callback, args) {\n\tcurrentHook = 8;\n\treturn useMemo(() => callback, args);\n}\n\n/**\n * @param {import('./internal').PreactContext} context\n */\nexport function useContext(context) {\n\tconst provider = currentComponent.context[context._id];\n\t// We could skip this call here, but than we'd not call\n\t// `options._hook`. We need to do that in order to make\n\t// the devtools aware of this hook.\n\t/** @type {import('./internal').ContextHookState} */\n\tconst state = getHookState(currentIndex++, 9);\n\t// The devtools needs access to the context object to\n\t// be able to pull of the default value when no provider\n\t// is present in the tree.\n\tstate._context = context;\n\tif (!provider) return context._defaultValue;\n\t// This is probably not safe to convert to \"!\"\n\tif (state._value == null) {\n\t\tstate._value = true;\n\t\tprovider.sub(currentComponent);\n\t}\n\treturn provider.props.value;\n}\n\n/**\n * Display a custom label for a custom hook for the devtools panel\n * @type {<T>(value: T, cb?: (value: T) => string | number) => void}\n */\nexport function useDebugValue(value, formatter) {\n\tif (options.useDebugValue) {\n\t\toptions.useDebugValue(\n\t\t\tformatter ? formatter(value) : /** @type {any}*/ (value)\n\t\t);\n\t}\n}\n\n/**\n * @param {(error: unknown, errorInfo: import('preact').ErrorInfo) => void} cb\n * @returns {[unknown, () => void]}\n */\nexport function useErrorBoundary(cb) {\n\t/** @type {import('./internal').ErrorBoundaryHookState} */\n\tconst state = getHookState(currentIndex++, 10);\n\tconst errState = useState();\n\tstate._value = cb;\n\tif (!currentComponent.componentDidCatch) {\n\t\tcurrentComponent.componentDidCatch = (err, errorInfo) => {\n\t\t\tif (state._value) state._value(err, errorInfo);\n\t\t\terrState[1](err);\n\t\t};\n\t}\n\treturn [\n\t\terrState[0],\n\t\t() => {\n\t\t\terrState[1](undefined);\n\t\t}\n\t];\n}\n\n/** @type {() => string} */\nexport function useId() {\n\t/** @type {import('./internal').IdHookState} */\n\tconst state = getHookState(currentIndex++, 11);\n\tif (!state._value) {\n\t\t// Grab either the root node or the nearest async boundary node.\n\t\t/** @type {import('./internal.d').VNode} */\n\t\tlet root = currentComponent._vnode;\n\t\twhile (root !== null && !root._mask && root._parent !== null) {\n\t\t\troot = root._parent;\n\t\t}\n\n\t\tlet mask = root._mask || (root._mask = [0, 0]);\n\t\tstate._value = 'P' + mask[0] + '-' + mask[1]++;\n\t}\n\n\treturn state._value;\n}\n\n/**\n * After paint effects consumer.\n */\nfunction flushAfterPaintEffects() {\n\tlet component;\n\twhile ((component = afterPaintEffects.shift())) {\n\t\tif (!component._parentDom || !component.__hooks) continue;\n\t\ttry {\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeCleanup);\n\t\t\tcomponent.__hooks._pendingEffects.forEach(invokeEffect);\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t} catch (e) {\n\t\t\tcomponent.__hooks._pendingEffects = [];\n\t\t\toptions._catchError(e, component._vnode);\n\t\t}\n\t}\n}\n\nlet HAS_RAF = typeof requestAnimationFrame == 'function';\n\n/**\n * Schedule a callback to be invoked after the browser has a chance to paint a new frame.\n * Do this by combining requestAnimationFrame (rAF) + setTimeout to invoke a callback after\n * the next browser frame.\n *\n * Also, schedule a timeout in parallel to the the rAF to ensure the callback is invoked\n * even if RAF doesn't fire (for example if the browser tab is not visible)\n *\n * @param {() => void} callback\n */\nfunction afterNextFrame(callback) {\n\tconst done = () => {\n\t\tclearTimeout(timeout);\n\t\tif (HAS_RAF) cancelAnimationFrame(raf);\n\t\tsetTimeout(callback);\n\t};\n\tconst timeout = setTimeout(done, RAF_TIMEOUT);\n\n\tlet raf;\n\tif (HAS_RAF) {\n\t\traf = requestAnimationFrame(done);\n\t}\n}\n\n// Note: if someone used options.debounceRendering = requestAnimationFrame,\n// then effects will ALWAYS run on the NEXT frame instead of the current one, incurring a ~16ms delay.\n// Perhaps this is not such a big deal.\n/**\n * Schedule afterPaintEffects flush after the browser paints\n * @param {number} newQueueLength\n * @returns {void}\n */\nfunction afterPaint(newQueueLength) {\n\tif (newQueueLength === 1 || prevRaf !== options.requestAnimationFrame) {\n\t\tprevRaf = options.requestAnimationFrame;\n\t\t(prevRaf || afterNextFrame)(flushAfterPaintEffects);\n\t}\n}\n\n/**\n * @param {import('./internal').HookState} hook\n * @returns {void}\n */\nfunction invokeCleanup(hook) {\n\t// A hook cleanup can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\tlet cleanup = hook._cleanup;\n\tif (typeof cleanup == 'function') {\n\t\thook._cleanup = undefined;\n\t\tcleanup();\n\t}\n\n\tcurrentComponent = comp;\n}\n\n/**\n * Invoke a Hook's effect\n * @param {import('./internal').EffectHookState} hook\n * @returns {void}\n */\nfunction invokeEffect(hook) {\n\t// A hook call can introduce a call to render which creates a new root, this will call options.vnode\n\t// and move the currentComponent away.\n\tconst comp = currentComponent;\n\thook._cleanup = hook._value();\n\tcurrentComponent = comp;\n}\n\n/**\n * @param {unknown[]} oldArgs\n * @param {unknown[]} newArgs\n * @returns {boolean}\n */\nfunction argsChanged(oldArgs, newArgs) {\n\treturn (\n\t\t!oldArgs ||\n\t\toldArgs.length !== newArgs.length ||\n\t\tnewArgs.some((arg, index) => arg !== oldArgs[index])\n\t);\n}\n\n/**\n * @template Arg\n * @param {Arg} arg\n * @param {(arg: Arg) => any} f\n * @returns {any}\n */\nfunction invokeOrReturn(arg, f) {\n\treturn typeof f == 'function' ? f(arg) : f;\n}\n","export type ClassNames = string | number | boolean | null | undefined | ClassNames[] | { [key: string]: unknown };\n\n// Inspired by npm classnames\nexport function classNames(...args: ClassNames[]): string | undefined {\n  return args\n    .filter((arg): arg is NonNullable<ClassNames> => Boolean(arg) && arg !== true) // filters out boolean, null and undefined\n    .map(arg => typeof arg === \"object\" ?\n      (Array.isArray(arg) ?\n        classNames(...arg) :\n        Object.entries(arg).filter(([, v]) => v).map(([k]) => k)) :\n      arg.toString().trim()) // convert number to string\n    .flat()\n    .join(\" \") || undefined; // return undefined if empty\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h } from \"preact\";\nimport \"./spinner.scss\";\nimport { classNames, type ClassNames } from \"@mod-ceremonymedia/js/util\";\n\nexport function SpinnerIcon(props: { class?: ClassNames }) {\n  // props.class?.push(\"lds-roller\");\n\n  return (\n    <div class=\"cm-spinner\">\n      <div class={classNames(\"lds-roller\", props.class)}>\n        <div></div>\n        <div></div>\n        <div></div>\n        <div></div>\n        <div></div>\n        <div></div>\n        {/* <div></div> */}\n        {/* <div></div> */}\n      </div>\n    </div>\n  );\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Fragment, type FunctionComponent, type ComponentChild, type ComponentChildren } from \"preact\";\nimport { useRef, useLayoutEffect } from \"preact/hooks\";\n\nimport \"./dialogs.scss\";\nimport \"./dialog-chooseceremony.scss\";\nimport { getTid } from \"@webhare/gettid\";\n\nimport { SpinnerIcon } from \"../../frontend/components/spinner\";\n\n\nwindow.addEventListener(\"click\", doCheckCanCloseDialog);\n\n// Handle closing the dialog when clicking outside the dialog\n// (for dialogs which have opted into the \"clickOutsideCanClose\" behaviour)\nfunction doCheckCanCloseDialog(evt: MouseEvent) {\n  const target = (evt.target as HTMLElement);\n\n  const dialog = target.closest(\"dialog\");\n  if (!dialog)\n    return;\n\n  if (!dialog.classList.contains(\"cm-dialog-clickoutsidecanclose\"))\n    return;\n\n  // The <dialog>::backdrop fills the whole viewport.\n  // But since it is a child of <dialog> in the DOM, any click on the ::backdrop wil also\n  // be seen as a click in the <dialog>. However the bounding box of the <dialog> is\n  // the actual content (without ::backdrop), so we can use this to check if we clicked\n  // outside the dialog content (with the assumed intent to close the dialog).\n  const rect = target.getBoundingClientRect();\n\n  const clickedInDialog = (\n    rect.top <= evt.clientY &&\n    evt.clientY <= rect.top + rect.height &&\n    rect.left <= evt.clientX &&\n    evt.clientX <= rect.left + rect.width\n  );\n\n  // console.log(\"Clicked in dialog\", clickedInDialog);\n\n  if (clickedInDialog === false)\n    dialog?.close();\n}\n\n\n// FIXME: rendering of footer buttons is stuck in the form.tsx::FormDialog so isn't reuseable outside form dialogs yet\n\nexport function renderDialog(options: { title?: string; titleicon?: string; bodycontent?: ComponentChildren; footercontent?: ComponentChild }) {\n  return <Fragment>\n    <div class=\"cm-dialog__header\">\n      <h2>{options.titleicon !== \"\" ? <span class={`icon fas fa-${options.titleicon}`} role=\"presentation\"></span> : null}{options.title}</h2>\n\n      {/* {closeButton === true ? <button class=\"rawmodaldialog__closebutton\" type=\"button\" onClick={() => handleClose()} aria-label=\"Sluiten\"><span class=\"icon far fa-times\"></span></button> : closeButton} */}\n    </div>\n\n    <div class=\"cm-dialog__body\">\n      {options.bodycontent}\n    </div>\n\n    {options.footercontent ?\n      <div class=\"cm-dialog__footer cm-buttonbar\">\n        {options.footercontent}\n      </div> : null}\n  </Fragment>;\n}\n\nlet showModalCounter = 0;\n\nexport function showDialog(dialog: HTMLDialogElement | undefined | null, modal: boolean) {\n  if (dialog) {\n    dialog.dataset.modalOrder = `${++showModalCounter}`;\n    if (modal)\n      dialog.showModal();\n    else\n      dialog.show();\n  }\n}\n\nexport const RawModalDialog: FunctionComponent<{\n  class?: string;\n  dialogname?: string;\n  isOpen: boolean;\n  isModal?: boolean;\n  closeButton?: boolean | ComponentChild;\n  clickOutsideCanClose?: boolean; // allow closing with a single click outside the dialog (only use for dialogs which don't require any interaction - such as a image enlargement popup)\n  subDialogs?: ComponentChildren;\n  onClose: (() => void) | undefined;\n}> = ({ class: className, dialogname, isOpen, clickOutsideCanClose, isModal, closeButton, onClose, children, subDialogs }) => {\n  const dialogRef = useRef<HTMLDialogElement | null>(null);\n\n  // Make sure the dialog is opened/closed when the state changes\n  useLayoutEffect(() => {\n    const modalElement = dialogRef.current;\n\n    // NOTE: We check whether the element has been inserted into the page,\n    //       because when we render a dialog outside the main tree\n    //       it'll probaby won't be inserted yet!\n    if (modalElement && document.documentElement.contains(modalElement)) { // is the <dialog> inserted in the HTML ?\n      if (isOpen) {\n        showDialog(modalElement, isModal ?? true);\n      } else {\n        modalElement.close();\n      }\n    }\n  }, [isOpen, isModal]);\n\n  const handleClose = () => {\n    onClose?.();\n  };\n\n  const classes = [];\n\n  if (className !== \"\")\n    classes.push(className);\n\n  if (clickOutsideCanClose === true)\n    classes.push(\"cm-dialog-clickoutsidecanclose\");\n\n  if (!isModal)\n    classes.push(\"cm-dialog--nonmodal\");\n\n  return (\n    <div class=\"rawmodaldialog__dialog__holder\">\n      <dialog ref={dialogRef}\n        // onKeyDown={onClose ? handleKeyDown : () => void 0}\n        class={`rawmodaldialog__dialog cm-dialog ${classes.join(\" \")}`}\n        data-dialogname={dialogname}\n        onClose={() => handleClose()}\n      >\n        {children}\n      </dialog >\n      {subDialogs}\n    </div>\n  );\n};\n\nexport function ModalDialog(props: {\n  class?: string;\n  dialogname?: string;\n  isOpen: boolean;\n  isModal?: boolean;\n  onClose?: () => void;\n  title?: string;\n  closeButton?: boolean;\n  clickOutsideCanClose?: boolean; // allow closing with a single click outside the dialog (only use for dialogs which don't require any interaction - such as a image enlargement popup)\n  titleicon?: string;\n  children: ComponentChildren;\n  footerContent?: ComponentChild;\n  subDialogs?: ComponentChildren;\n  showSpinner?: boolean;\n}) {\n\n  return (\n    <RawModalDialog isOpen={props.isOpen} isModal={props.isModal} dialogname={props.dialogname} class={props.class} onClose={props.onClose} closeButton={props.closeButton} clickOutsideCanClose={props.clickOutsideCanClose} subDialogs={props.subDialogs}>\n      {/* {renderDialog({ title: props.title, titleicon: props.titleicon, bodycontent: props.children, footercontent: props.footerContent })} */}\n\n      {props.title || props.closeButton ?\n        <div class=\"cm-dialog__header\">\n          <div class=\"cm-dialog__header__content\">\n            {props.titleicon ? <span class={`icon fas fa-${props.titleicon}`} role=\"presentation\"></span> : null}\n            <h2>{props.title}</h2>\n          </div>\n          {props.closeButton === true ? <button class=\"rawmodaldialog__closebutton iconbutton\" type=\"button\" onClick={() => props.onClose?.()} aria-label={getTid(\"ceremonymedia:webdesigns.site.js.buttons.close\")}><span class=\"icon far fa-times\"></span></button> : props.closeButton}\n        </div> :\n        null}\n\n      <div class=\"cm-dialog__body\">\n        {props.children}\n      </div>\n\n      {props.footerContent ?\n        <div class=\"cm-dialog__footer cm-buttonbar\">\n          {props.footerContent}\n        </div> : null}\n\n      {props.showSpinner\n        ? <div class=\"cm-dialog__busy-overlay\">\n          <SpinnerIcon />\n        </div> : null\n      }\n\n    </RawModalDialog >\n  );\n}\n","import { createClient } from \"@webhare/jsonrpc-client\";\nimport { type NavigateInstruction, navigateTo } from \"@webhare/env\";\nimport * as dompack from '@webhare/dompack';\nimport type { LoginOptions } from \"@webhare/auth/src/identity\";\nimport { rpc } from \"@webhare/rpc/src/rpc\";\n\n//NOTE: Do *NOT* load @webhare/frontend or we enforce the new CSS reset!\nimport { getFrontendData } from '@webhare/frontend/src/init';\nimport { PublicCookieSuffix, type LoginErrorCode, type LoginResult, type LoginTweaks } from \"@webhare/auth/src/shared\";\nimport { parseTyped } from \"@webhare/std\";\nimport type WRDAuthenticationProvider from \"@mod-wrd/js/auth\";\n\n/** WRDAuth configuration */\nexport interface WRDAuthOptions {\n  /** Callback that is invoked after a succesful login. If not set the page will be reloaded. */\n  onLogin?: () => Promise<void> | void;\n}\n\nexport interface PublicAuthData {\n  expiresMs: number;\n  userInfo?: object | null;\n  persistent?: boolean;\n}\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"wrd:auth\": {\n      /** WRDAuth cookiename (used to store userinfo and expiry) */\n      cookiename: string;\n    };\n  }\n}\n\ndeclare global {\n  interface Window {\n    $wh$legacyAuthProvider: WRDAuthenticationProvider;\n    triggerWebHareSSO?: (tag: string, options?: SSOLoginOptions) => Promise<void>;\n  }\n}\n\n/** Current authoptions. undefined if setupWRDAuth hasn't been invoked yet */\nlet authOptions: WRDAuthOptions | undefined;\n\n/** Get current login cookie. If empty, wrdauth is not initialized here */\nfunction getCookieName(): string | null {\n  const settings = getFrontendData(\"wrd:auth\", { allowMissing: true });\n  return settings?.cookiename || null;\n}\n\nfunction getAuthLocalData(): PublicAuthData | null {\n  const c = getCookieName();\n  if (!c)\n    return null;\n\n  try {\n    return parseTyped(dompack.getCookie(c + PublicCookieSuffix)!) as PublicAuthData;\n  } catch {\n    return null;\n  }\n}\n\nasync function submitLoginForm(node: HTMLFormElement, event: SubmitEvent) {\n  if (node.propWhFormhandler)\n    return; //already handled by publisher forms so we'll defer to that\n  dompack.stop(event);\n\n  const username = (node.elements.namedItem(\"login\") as HTMLInputElement)?.value;\n  const password = (node.elements.namedItem(\"password\") as HTMLInputElement)?.value;\n  const site = (node.elements.namedItem(\"site\") as HTMLInputElement)?.value || undefined;\n  const returnto = (node.elements.namedItem(\"returnto\") as HTMLInputElement)?.value || undefined;\n  const persistentlogin = (node.elements.namedItem(\"persistent\") as HTMLInputElement)?.checked;\n  if (!login || !password)\n    throw new Error(`submitLoginForm: required elements login/password not set or missing`);\n\n  using lock = dompack.flagUIBusy({ modal: true });\n  void (lock);\n\n  const loginresult = await login(username, password, {\n    persistent: persistentlogin,\n    site,\n    returnTo: returnto ? new URL(returnto, location.href).toString() : location.href.split('#')[0]\n  });\n  if (loginresult.loggedIn) {\n    refreshLoginStatus();\n    if (loginresult.navigateTo.type === \"redirect\" && loginresult.navigateTo.url.split('#')[0] === location.href.split('#')[0]  //stay on same page\n      && authOptions?.onLogin) {\n\n      if (loginresult.navigateTo.url.includes('#')) //execute any #hash instruction\n        history.replaceState(null, \"\", loginresult.navigateTo.url.substring(loginresult.navigateTo.url.indexOf('#')));\n\n      await authOptions.onLogin();\n    } else {\n      //Reload the page to get the new login status - TODO put this behind a 'login state change' event and allow users to cancel it if they can deal with login/logout on-page\n      console.log(\"Post login redirect\", loginresult.navigateTo);\n      navigateTo(loginresult.navigateTo);\n    }\n  } else if (\"navigateTo\" in loginresult) {\n    console.log(\"Login incomplete, redirecting to\", loginresult.navigateTo);\n    navigateTo(loginresult.navigateTo);\n  } else\n    failLogin(loginresult.error ?? loginresult.code, { code: loginresult.code, data: \"\" }, node); //FIXME restore the code & data members from old wrdauth\n}\n\nfunction refreshLoginStatus() {\n  const loggedIn = isLoggedIn();\n  document.documentElement.classList.toggle(\"wh-wrdauth--isloggedin\", loggedIn);\n\n  window.$wh$legacyAuthProvider?.refresh();\n}\n\n/** Return whether a user's currently logged in */\nexport function isLoggedIn(): boolean {\n  return (getAuthLocalData()?.expiresMs || 0) > Date.now();\n}\n\n/** Setup WRDAuth frontend integration */\nexport function setupWRDAuth(options?: WRDAuthOptions) {\n  if (authOptions)\n    throw new Error(`Duplicate setupWRDAuth call`);\n\n  authOptions = { ...options };\n\n  dompack.register<HTMLFormElement>('form.wh-wrdauth__loginform,form.wh-wrdauth-login__form', node => {\n    node.setAttribute(\"data-wh-wrdauth-attached\", \"\");\n    dompack.addDocEventListener(node, \"submit\", evt => submitLoginForm(node, evt));\n  });\n  dompack.register('.wh-wrdauth__logout', node => {\n    function handleLogoutClick(event: Event) {\n      dompack.stop(event);\n\n      //letting rejections escape - our trigger is generally setup in HTML so there's nothing to catch but uncaught rejection handlers anyway\n      if (node instanceof HTMLAnchorElement && node.href && node.href.split('#')[0] !== location.href.split('#')[0]) { //logout link sending you elsewhere\n        void doLogout().then(() => {\n          console.log(\"Logout complete, redirecting to\", node.href);\n          navigateTo({ type: \"redirect\", url: node.href });\n        });\n      } else {\n        void logout(); //TODO what if the logout only changed the anchor? but what's the usecase for that?\n      }\n    }\n\n    dompack.addDocEventListener(node, \"click\", event => handleLogoutClick(event));\n  });\n\n  dompack.onDomReady(() => {\n    if (\"$wh$wrdauth\" in window) {\n      console.error(\"Both setupWRDAuth from @webhare/frontend and @mod-wrd/js/auth are present in this page. Mixing these is not supported!\");\n    }\n  });\n\n  refreshLoginStatus();\n}\n\nfunction failLogin(message: string, response: { code: LoginErrorCode; data: string }, form: HTMLFormElement) {\n  const evtdetail = {\n    message: message,\n    code: response.code,\n    data: response.data\n  };\n\n  const cancelled = !dompack.dispatchCustomEvent(form || document.documentElement, \"wh:wrdauth-loginfailed\", { bubbles: true, cancelable: true, detail: evtdetail });\n  if (!cancelled) {\n    //TODO depending on error we may need to change a different field?\n    const loginfield = dompack.qR<HTMLInputElement>(form, \"input[name=password]\");\n    loginfield.setCustomValidity(message);\n    // loginfield.reportValidity(); //this actually blocks wh-form error handling from showing the error in-page when so desired\n    loginfield.focus();\n  }\n}\n\n/** Retrieve userinfo if set by onFrontendUserInfo in your WRDAuth customizer */\nexport function getUserInfo<T extends object = object>(): T | null {\n  return isLoggedIn() ? getAuthLocalData()?.userInfo as T | null : null;\n}\n\nfunction getLoginTweaks(): LoginTweaks {\n  const tweaks: LoginTweaks = {\n    lang: dompack.getLang().tag\n  };\n\n  const urlvars = new URL(location.href);\n  if (urlvars.searchParams.has(\"wrdauth_limit_expiry\"))\n    tweaks.limitExpiry = parseInt(urlvars.searchParams.get(\"wrdauth_limit_expiry\") || '0') || undefined;\n\n  return tweaks;\n}\n\n/** Implements the common username/password flows */\nexport async function login(username: string, password: string, options: LoginOptions = {}): Promise<LoginResult> {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  const result = await rpc(\"platform:authservice\").login(username, password, cookieName, dompack.getBrowser().triplet, { ...options, ...getLoginTweaks() });\n  if (result.loggedIn && !getAuthLocalData())\n    throw new Error(\"Login succeeded but no auth data was set in the cookie\");\n\n  return result;\n}\n\n/** Execute and verify cookie clearance to prepare for logging out */\nasync function doLogout() {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  await rpc(\"platform:authservice\").logout(cookieName, dompack.getBrowser().triplet);\n\n  if (getAuthLocalData())\n    throw new Error(\"Logged out but we still have auth data in the cookie\");\n}\n\n/** Logout the current user */\nexport async function logout() {\n  await doLogout();\n  console.log(\"Reloading to process the new logged out status\");\n  navigateTo({ type: \"reload\" }); //TODO put this behind a 'login state change' event\n}\n\nexport interface MyService {\n  startLogin2(urlpath: string, tag: string, options: { passive?: boolean }): Promise<NavigateInstruction>;\n}\n\ninterface SSOLoginOptions {\n  passive?: boolean;\n}\n\nexport async function startSSOLogin(tag: string, options?: SSOLoginOptions): Promise<void> {\n  const client = createClient<MyService>(\"wrd:auth\");\n\n  //Launch SSO login for the current page.\n  //TODO also pass getLoginTweaks() at least to OIDC logins as soon as we've ported this to authservice\n  navigateTo(await client.startLogin2(location.pathname + location.search + location.hash, tag, { passive: options?.passive }));\n}\n\n/** Configure WebHare external auth buttons (even hidden ones) to listen for bookmarklet login requests */\nexport function setupWebHareSSOTrigger(): void {\n  window.triggerWebHareSSO = startSSOLogin;\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/rpc\" {\n  export interface KnownRPCServices {\n    /* Filled by generated services.ts files */\n  }\n}\n\nimport { debugFlags, backendBase } from \"@webhare/env\";\nimport { type StackTrace, parseTrace, prependStackTrace, type PromisifyFunctionReturnType } from \"@webhare/js-api-tools\";\nimport { omit, parseTyped, stringify } from \"@webhare/std\";\n\n//Preload interface definitions. To solve this cleaner we would have to do some sort of auto-inject but how to robustly do that accross IDEs/Tscs ?\n\n//@ts-ignore Ignore if it doesn't exist\nimport type { } from \"@mod-platform/generated/ts/services.ts\";\n//@ts-ignore Ignore if it doesn't exist\nimport type { } from \"wh:ts/services.ts\";\n\nfunction isAbsolute(url: string) {\n  return url.startsWith(\"http:\") || url.startsWith(\"https:\");\n}\n\nfunction getBaseURL() {\n  if (!backendBase)\n    throw new Error(`You must set the baseUrl option when using the RPC Client outside Webhare`);\n  return isAbsolute(backendBase) ? backendBase : new URL(backendBase, location.origin);\n}\n\nexport interface RPCClientOptions {\n  /** Custom request update. Use to eg. set keepalive or add debug variables to the URL */\n  onBeforeRequest?: (url: URL, requestInit: RequestInit & { headers: Headers }) => void;\n  /** Response callback. Use this if you need to capture details on the incoming respones. May be invoked multiple times per request, eg due to 429 errors! */\n  onResponse?: (response: Response) => void;\n  /** Call timeout */\n  timeout?: number;\n  /** Abort signal to cancel the RPC */\n  signal?: AbortSignal;\n  /** Retry on 429 */\n  retry429?: boolean;\n  /** Silent - do not log errors */\n  silent?: boolean;\n  /** Debug (Follows 'rpc' debugflag if not explicity specified) */\n  debug?: boolean;\n  /** Headers to submit (Eg Authorization) */\n  headers?: Record<string, string>;\n  /** Base URL for service paths */\n  baseUrl?: string;\n}\n\n/** RPC Response format */\nexport type RPCResponse = ({\n  /** Result. Not present if the function didn't return anything */\n  result?: unknown;\n} | {\n  /** Error message */\n  error: string;\n  /** Captured stack trace (if 'etr' debugFlag is set) */\n  trace?: StackTrace;\n}) & {\n  /** Captured console log entries (if 'etr' debugFlag is set) */\n  consoleLog?: Array<{\n    //TODO this is Serialized<ConsoleLogItem[]> - should probably rename it to SerializedToJSON and move to std or env ?\n    /** Date when console function was called */\n    when: string;\n    /** `console` method that was called (eg 'log') */\n    method: string;\n    /** Logged data */\n    data: string;\n    /** Location of caller */\n    location?: {\n      filename: string;\n      line: number;\n      col: number;\n      func: string;\n    };\n    /** Codecontext */\n    codeContextId?: string;\n  }>;\n};\n\nclass ControlledCall {\n  client: RPCClient;\n  options: RPCClientOptions;\n  abortcontroller?: AbortController;\n  timeout?: number;\n  _callurl: string;\n  _fetchoptions: RequestInit;\n  promise: Promise<unknown>;\n  timedout?: boolean;\n  aborted?: boolean;\n\n  constructor(client: RPCClient, method: string, stack: StackTrace | null, options: RPCClientOptions, callurl: URL, fetchoptions: RequestInit) {\n    this.client = client;\n    this.options = options;\n\n    if (options.timeout || options.signal) {\n      this.abortcontroller = new AbortController;\n      fetchoptions.signal = this.abortcontroller.signal;\n\n      if (options.timeout && options.timeout > 0) {\n        this.timeout = options.timeout;\n        setTimeout(() => this._handleTimeout(), options.timeout);\n      }\n      if (options.signal) {\n        options.signal.addEventListener(\"abort\", () => this._abort());\n      }\n    }\n\n    this._callurl = callurl.toString();\n    this._fetchoptions = fetchoptions;\n\n    const fetchpromise = fetch(this._callurl, this._fetchoptions);\n    this.promise = this._completeCall(method, stack, fetchpromise) as Promise<unknown>;\n  }\n  _handleTimeout() {\n    this.timedout = true;\n    this.abortcontroller?.abort();\n  }\n  _abort() {\n    this.aborted = true;\n    this.abortcontroller?.abort();\n  }\n\n  async _completeCall(method: string, requestStack: StackTrace | null, fetchpromise: Promise<Response>) {\n    let response;\n    for (; ;) { //loop to handle \"429 Conflict\"s\n      try { //we should only guard the fetch call and specifically *not* the onResponse callback\n        response = await fetchpromise;\n      } catch (exception) {\n        if (this.client.debug)\n          console.log(`[rpc] Exception invoking '${method}'`, exception);\n\n        if (this.aborted)\n          throw new Error(`RPC Aborted`);\n        else if (this.timedout)\n          throw new Error(`RPC Timeout: timeout was set to ${this.timeout} milliseconds`);\n        else\n          throw new Error(`RPC Failed: exception: ` + exception);\n      }\n\n      this.options.onResponse?.(response); //allow hooks to capture headers\n\n      if (response.status === 429 && !(\"retry429\" in this.options && !this.options.retry429) && response.headers.get(\"Retry-After\")) {\n        const retryafter = parseInt(response.headers.get(\"Retry-After\") || \"\");\n        if (this.client.debug)\n          console.warn(`[rpc] We are being throttled (429 Too Many Requests) - retrying after ${retryafter} seconds`);\n\n        await new Promise(resolve => setTimeout(resolve, retryafter * 1000));\n        fetchpromise = fetch(this._callurl, this._fetchoptions);\n        continue;\n      }\n      break;\n    }\n\n    let jsonresponse: RPCResponse;\n    try {\n      jsonresponse = parseTyped(await response.text());\n      if (jsonresponse.consoleLog) {\n        for (const logitem of jsonresponse.consoleLog) {\n          //should we log 'when'? it's getting more and more noisy then though....\n          //TODO should we match the remote's method (after validating) or just keep everything at 'log' ?\n          console.log(`[remote:${logitem.method}] ${logitem.location ? `${logitem.location.filename.split(\"/\").at(-1)}:${logitem.location.line}: ` : ''}${logitem.data}`);\n        }\n      }\n\n      if (this.client.debug)\n        console.log(`[rpc] Received response to '${method}'`, omit(jsonresponse, [\"consoleLog\", \"trace\"]));\n    } catch (exception) {\n      if (this.client.debug)\n        console.warn(`[rpc] Response was not valid JSON`, exception);\n      throw new Error(\"RPC Failed: Invalid response received\", { cause: exception });\n    }\n\n    if (\"error\" in jsonresponse) {\n      const err = new Error(`RPC Error: ${jsonresponse.error}`);\n      if (jsonresponse.trace) {\n        try {\n          prependStackTrace(err, jsonresponse.trace);\n        } catch (err2) {\n          //ignore stacktrace manipulation error\n        }\n      }\n\n      if (this.options.debug) {\n        console.group();\n        console.warn(\"RPC failed:\", err);\n        if (requestStack) {\n          console.warn(\"Stack at calling point\");\n          console.log(requestStack);\n        }\n        console.groupEnd();\n      }\n\n      throw err;\n    }\n\n    return jsonresponse.result;\n  }\n}\n\nclass RPCClient {\n  readonly url: string;\n  options: RPCClientOptions;\n\n  constructor(url: string, options?: RPCClientOptions) {\n    this.url = url;\n    this.options = {\n      timeout: 0,\n      debug: false,\n      ...options\n    };\n  }\n\n  get debug() {\n    return this.options.debug || debugFlags.rpc;\n  }\n\n  _tryLogError(requestStack: StackTrace | null, error: Error) {\n  }\n\n  invoke(method: string, params: unknown[]) {\n    //build the URL, add profiling and function parameters where needed\n    //We'll delay the baseurl calculation until the first call to allow for the backendBase to be set up\n    const callurl = isAbsolute(this.url) ? new URL(this.url + method) : new URL(this.url + method, this.options.baseUrl || getBaseURL());\n\n    let requestStack: StackTrace | null = null;\n\n    const fetchoptions: RequestInit & { headers: Headers } = {\n      method: \"POST\",\n      headers: new Headers({\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        ...this.options.headers\n      }),\n      body: stringify(params, { typed: true }),\n    };\n\n    if (typeof location !== \"undefined\")\n      callurl.searchParams.set(\"pathname\", location.pathname);\n\n    if (this.debug) {\n      requestStack = parseTrace(new Error);\n      console.log(`[rpc] Invoking '${method}'`, params);\n    }\n\n    this.options.onBeforeRequest?.(callurl, fetchoptions);\n    return new ControlledCall(this, method, requestStack, this.options, callurl, fetchoptions).promise;\n  }\n}\n\ntype ServiceBase<T> = {\n  withOptions(options: RPCClientOptions): T & ServiceBase<T>;\n};\n\nclass ServiceProxy<Service extends keyof KnownRPCServices | object> {\n  client: RPCClient;\n\n  constructor(client: RPCClient) {\n    this.client = client;\n  }\n\n  get(target: object, prop: string, receiver: unknown) {\n    if ([\"then\", \"catch\", \"finally\"].includes(prop)) //do not appear like our object is a promise\n      return undefined;\n\n    if (prop === 'withOptions') { //create a withOptions function\n      return (options: RPCClientOptions) => {\n        const newoptions = {\n          ...this.client.options,\n          ...options,\n          headers: { ...this.client.options.headers, ...options.headers }\n        };\n        return rpc(this.client.url as (Service extends keyof KnownRPCServices ? Service : string), newoptions);\n      };\n    }\n\n    return (...args: unknown[]) => this.client.invoke(prop, args);\n  }\n}\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never;\n\nexport type OmitRPCContextArgs<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? OmitFirstArg<ServiceType[K]> : never;\n};\n\n/** Creates an async version of the functions in a class, removes context parameters\n * @typeParam ServiceType - Type definition of the service class that implements this service.\n*/\ntype ConvertToRPCInterface<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- using any is needed for this type definition\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? PromisifyFunctionReturnType<ServiceType[K]> : never;\n};\n\ntype ExtractInterface<Service extends object> = ConvertToRPCInterface<Service> & ServiceBase<ConvertToRPCInterface<Service>>;\n\n/** Get the client interface type as would be returned by createClient\n * @typeParam Service - either the `module:service` name or the interface to implement. If you want to pass the implementation's type you should wrap it into `OmitRPCContextArgs`.\n*/\nexport type GetRPCClientInterface<Service extends (keyof KnownRPCServices) | object> = Service extends keyof KnownRPCServices ? ExtractInterface<OmitRPCContextArgs<KnownRPCServices[Service]>> : Service extends object ? ExtractInterface<Service> : never;\n\n/** Create a WebHare RPC client\n  @param service - URL (https://<ORIGIN>/.wh/rpc/module/service/) or service name (module:service) to invoke\n*/\nexport function rpc<Service extends keyof KnownRPCServices>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\nexport function rpc<Service extends object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\n\nexport function rpc<Service extends keyof KnownRPCServices | object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service> {\n  //NOTE: needed the separate overloads to get Intellisense to list the known services for createRPClient's first argument\n\n  if (!service)\n    throw new Error(`You must specify either a WebHare rpcService name or a full URL`);\n\n  const servicematch = service.match(/^([a-z0-9_]+):([a-z0-9_]+)$/);\n  if (servicematch)\n    service = `/.wh/rpc/${servicematch[1]}/${servicematch[2]}/` as (Service extends keyof KnownRPCServices ? Service : string);\n  else if (!service.endsWith('/'))\n    throw new Error(`Service URL must end in a slash`);\n\n  const rpcclient = new RPCClient(service, options);\n  return new Proxy({}, new ServiceProxy<GetRPCClientInterface<Service>>(rpcclient)) as GetRPCClientInterface<Service>;\n}\n","import type { NavigateInstruction } from \"@webhare/env\";\n\n/** Login failure reasons that can also be used by custom isLoginDenied checks */\nexport type LoginErrorCode = \"internal-error\" | \"incorrect-login-password\" | \"incorrect-email-password\" | \"account-disabled\" | \"unknown-account\" | \"require-external-login\";\n\n/** Login reasons that require further client side work but are not errors per-se */\nexport type LoginIncompleteCode = \"totp\" | \"incomplete-account\";\n\nexport type LoginTweaks = {\n  /** Limit session duration (development servers only) */\n  limitExpiry?: number;\n  /** Language code */\n  lang?: string;\n};\n\nexport type LoginResult = {\n  loggedIn: boolean;\n  navigateTo: NavigateInstruction;\n} | {\n  loggedIn: false;\n  code: LoginErrorCode;\n  error?: string;\n};\n\nexport type LogoutResult = { success: true } | {\n  error: string;\n  code: LoginErrorCode | LoginIncompleteCode;\n};\n\nexport const PublicCookieSuffix = \"_publicauthdata\";\n\n/* APIs and types shared between the client and server */\nexport function getCompleteAccountNavigation(token: string, pathname: string): NavigateInstruction {\n  return {\n    type: \"redirect\", //TODO or use a \"form\" too? went for a session now as an excursion to followup GET pages is much more likely in this procedure than with totp\n    url: \"/.wh/common/authpages/?wrd_pwdaction=completeaccount&token=\" + encodeURIComponent(token || '') + \"&pathname=\" + encodeURIComponent(pathname)\n  };\n}\n","import { qSA } from \"@webhare/dompack\";\nimport { debugFlags } from \"@webhare/env\";\nimport type { FormAnalyticsEvent } from \"@webhare/forms\";\nimport type { DataLayerEntry } from \"./gtm-types\";\n\ndeclare global {\n  interface Window {\n    dataLayer: DataLayerEntry[];\n  }\n}\n\n//ADDME if we ever figure out a bundler trick to flush this command to the top of all imports/loads, that would be great (we could consider *ALWAYS* putting this in the generated startup code, or we'd need to do a tree pre-walk to see if gtm.es is loaded anywhere)\nwindow.dataLayer ||= [];\nlet lastSeen: DataLayerEntry | undefined;\n\nfunction showDataLayerUpdates() {\n  if (typeof window.dataLayer === 'undefined')\n    return; //not set up (yet?)\n\n  if (debugFlags.anl)\n    window.dataLayer.slice(window.dataLayer.indexOf(lastSeen!) + 1).forEach(entry => console.log(\"[anl] dataLayer.push:\", entry));\n\n  lastSeen = window.dataLayer[window.dataLayer.length - 1];\n}\n\n/** Push to the dataLayer\n * @param vars - The variables to push\n * @param options - Options for the push\n *   timeout Time before any eventCallback is forcibly called (default 200ms)\n*/\nexport function pushToDataLayer(vars: DataLayerEntry, options?: { timeout?: number }) {\n  if (vars.eventCallback) { //we'll wrap the callback into a promise to ensure it's only invoked once\n    const savecallback = vars.eventCallback;\n    let newcallback: () => void;\n    void (new Promise<void>(resolve => newcallback = resolve)).then(() => savecallback());\n    setTimeout(() => newcallback, options?.timeout || 200);\n  }\n\n  window.dataLayer.push(vars);\n  showDataLayerUpdates();\n}\n\nfunction collectFormValues(formnode: HTMLFormElement): Record<string, unknown> {\n  const donefields: Record<string, boolean> = {};\n  const outdata: Record<string, unknown> = {};\n\n  const multifields = qSA<HTMLInputElement>(formnode, 'input[type=radio], input[type=checkbox]');\n  for (const multifield of multifields) {\n    if (!multifield.name || donefields[multifield.name])\n      continue; //we did this one\n\n    donefields[multifield.name] = true;\n\n    let idx = 0;\n    const values = [];\n    const labels = [];\n    const checkboxes = multifields.filter(node => node.name === multifield.name);\n\n    for (const node of checkboxes.filter(cbox => cbox.checked)) {\n      const keyname = 'form_' + multifield.name + (idx ? '_' + idx : '');\n      let labelsfornode = node.dataset.gtmTag || qSA(`label[for=\"${CSS.escape(node.id)}\"]`).map(labelnode => labelnode.textContent).filter(labelnode => Boolean(labelnode)).join(' ');\n      labelsfornode = labelsfornode.trim(); //TODO normalize whitespace\n      outdata[keyname] = node.value;\n      outdata[keyname + '_label'] = labelsfornode;\n\n      ++idx;\n      values.push(node.value);\n      labels.push(labelsfornode);\n    }\n\n    if (values.length) {\n      const allkeyname = 'form_' + multifield.name + '_all';\n      outdata[allkeyname] = values.join(';');\n      outdata[allkeyname + '_label'] = labels.join(';');\n    }\n  }\n\n  for (const field of formnode.querySelectorAll<HTMLSelectElement | HTMLInputElement>('input:not([type=radio]):not([type=checkbox]),select,textarea')) {\n    if (!field.name || donefields[field.name])\n      continue;\n\n    donefields[field.name] = true;\n\n    const val = field.value;\n    outdata['form_' + field.name] = val;\n    if (field.matches('select')) {\n      const opt = (field as HTMLSelectElement).options[(field as HTMLSelectElement).selectedIndex];\n      if (opt)\n        outdata['form_' + field.name + '_label'] = opt.dataset.gtmTag || opt.textContent;\n    }\n  }\n  return outdata;\n}\n\n/** Setup the dataLayer */\nlet didinit: boolean | undefined;\nexport function setupGTM() {\n  if (!didinit) {\n    didinit = true;\n    if (debugFlags.anl)\n      setInterval(showDataLayerUpdates, 100);\n  }\n}\n\n/** Setup dataLayer events for form analytics events\n * @param options - Options for the form analytics setup\n     - `eventPrefix`. Prefix to use. Default is `wh-platform:form_` but existing integrations may (also) require `publisher:form`\n*/\nexport function setupFormAnalyticsForGTM(options?: { eventPrefix: string }): void {\n  setupGTM(); //ensurse the GTM basics are installed\n\n  addEventListener(\"wh:form-analytics\", (e: FormAnalyticsEvent) => {\n    //we use the same prefixing as pxl events would\n    const entry: DataLayerEntry = {\n      event: `${options?.eventPrefix || \"platform:form_\"}${e.detail.event}`\n    };\n\n    for (const [key, val] of Object.entries(e.detail))\n      if (key !== \"event\" && [\"string\", \"number\", \"boolean\"].includes(typeof val))\n        entry[`formmeta_${key}`] = val;\n\n    const form = e.target as HTMLFormElement | undefined;\n    if (form?.dataset.gtmSubmit) {\n      //When set, we push both the form: variable in gtmSubmit and the current form field avlues\n      Object.assign(entry, JSON.parse(form.dataset.gtmSubmit));\n      Object.assign(entry, collectFormValues(form));\n    }\n\n    pushToDataLayer(entry);\n  });\n}\n\nfunction processClickDataLayerTags(event: MouseEvent) {\n  const entry: Record<string, unknown> = {};\n\n  for (let node = event.target as HTMLElement | undefined | null; node; node = node?.parentElement)\n    for (const attr of node.attributes)\n      if (attr.nodeName.startsWith(\"data-wh-datalayer-onclick-\")) {\n        const key = attr.nodeName.substring(26);\n        if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n          entry[key] = attr.nodeValue || \"\";\n      } else if (attr.nodeName === \"data-wh-datalayer-onclick\") { //JSON setter\n        const data = JSON.parse(attr.nodeValue!);\n        for (const [key, value] of Object.entries(data))\n          if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n            entry[key] = value;\n      }\n\n  if (Object.keys(entry).length)\n    pushToDataLayer(entry as DataLayerEntry);\n}\n\n/** Setup support for data-wh-datalayer-onclick-xxx=\"yyy\" attributes. When clicking an element with these attributes the JSON from the attribute and all parents are merged together and pushed to the dataLayer  */\nexport function setupDataLayerTags() {\n  //we capture so we can also simply set variables for any existing GTM handlers\n  window.addEventListener(\"click\", processClickDataLayerTags, { capture: true });\n}\n","/* To verify tree shaking viability, try:\n   whcd\n   cd whtree\n   echo 'import \"@webhare/frontend\"' | node_modules/.bin/esbuild --loader:.css=empty --tsconfig=tsconfig.json --bundle --minify\n*/\n\n// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/frontend\" {\n}\n\nimport { onDomReady } from \"@webhare/dompack\";\nimport \"../styling/reset.css\"; // Reset CSS - this will be dropped somewhere post WH5.6!\nexport { frontendConfig, getFrontendData, getSiteRoot } from \"./init\";\nexport { startSSOLogin, login, setupWRDAuth, isLoggedIn, logout, getUserInfo, setupWebHareSSOTrigger } from \"./auth\";\nexport { loadAssetPack, setupAuthorMode, type AuthorModeOptions } from \"./authormode\";\nexport { setPxlOptions, sendPxl, getPxlUserId, getPxlSessionId, setupFormAnalytics, type PxlData } from \"./pxl\";\nexport { getRemoteIPAddress, getGeoIPInfo, type GetIPInfoOptions, type GeoIPInfoResult } from \"./analytics\";\nexport { setupGTM, setupFormAnalyticsForGTM, pushToDataLayer, setupDataLayerTags } from \"./gtm\";\nexport { setupLinksInNewWindow, type LinkOpenOptions } from \"./linkhandler\";\n\nexport type * from \"./gtm-types\";\n\n// we shouldn't deprecate navigateTo exported from frontend. in fact it makes more sense to export it from frontend than env as it's browser-only\nexport { navigateTo } from \"@webhare/env\";\n\n/** Registry for data we receive from the backend */\nexport interface FrontendDataTypes {\n}\n\n/** Registry for expected PXL formats */\nexport interface PxlDataTypes {\n}\n\n/** Test whether the current page is being iframed in the WebHare test framework */\nexport function isInTestFramework(): boolean {\n  if (window.top !== window) { //in a frame\n    try {\n      if ((window.top as { __testframework?: unknown })?.__testframework)\n        return true;//we're inside a testframe, pretend to be the parent\n    } catch (ignore) {\n    }\n  }\n  return false;\n}\n\nfunction postRenderChecks() {\n  const log = document.getElementById(\"wh-console-log\");\n  if (log) {\n    const logtext = atob(log.textContent || \"\");\n    console.group(\"[etr] Server-side console output\");\n    console.log(logtext);\n    console.groupEnd();\n  }\n}\n\nonDomReady(postRenderChecks);\n","import { escapeRegExp, sleep, wrapSerialized } from \"@webhare/std\";\nimport { isLoggedIn, login, logout } from \"@webhare/frontend\";\n\nimport type { CeremonyMomentAudio, CeremonyMomentSlideSetting, CeremonyUpload, updateMomentFields } from \"@mod-ceremonymedia/js/api\";\nimport type { CeremonyMomentType, EditorAppData, EditorAppState } from \"./state\";\nimport type { CeremonyMediaCache, CeremonyMediaItem } from \"@mod-ceremonymedia/js/types\";\nimport { navigateTo } from \"@webhare/env\";\nimport { type UploadManifest } from \"@webhare/upload\";\nimport { getCeremonyLocation } from \"../../frontend/settings/ceremony-location\";\nimport { SharedCMClient, apiClient } from \"../shared-client\";\nimport { prepareUpload, type supportedMimetypes } from \"../shared-upload\";\n\nimport { type CeremonyTexts } from \"@mod-ceremonymedia/webdesigns/ceremonysite/frontend/frontend\";\n\n\n// FIXME: handle in shared code\nconst accessToken = new URL(location.href).searchParams.get(\"access_token\");\n\n// Directly remove the accessToken from the URL - so it won't be accidently shared\nif (accessToken && !location.href.includes(\"keeptoken\")) {\n  console.info(location.href); // log including token before removing the token\n\n  const urlParams = new URLSearchParams(window.location.search);\n  urlParams.delete(\"access_token\");\n\n  let newUrl = window.location.pathname;\n  const paramslist = urlParams.toString();\n  if (paramslist !== \"\")\n    newUrl += \"?\" + paramslist;\n\n  history.replaceState({}, '', newUrl);\n}\n\nexport type LoginResult = { success: true } | { success: false; error: string };\n\n\n/*\n\nHow data about locations/organizations end up on our page:\n\n- editor.renderpage.ts defines the type CeremonyLocationData\n- editor.renderpage.ts passes the location and organization titles and info using:\n  outputpage.setPluginConfig(\"editor\", editorfields satisfies CeremonyLocationData);\n- All of the plugin data is Published in the page\n  (in the <script type=\"application/json\" id=\"wh-config\">.\n   The plugin name is used as property name in the root of the JSON encoded object))\n- @webhare/frontend exposes #wh-config content in frontendConfig if we use:\n  import { frontendConfig, isLoggedIn, login, logout } from \"@webhare/frontend\";\n- model.ts uses the data for it's EditorBackend EditorState\n\n*/\n\nexport class EditorBackend extends SharedCMClient {\n  private renderCallback?: (state: EditorAppState) => void;\n  private app: EditorAppData = {\n    isLoggedIn: false,\n\n    gotMedia: false,\n    mediaLibraryTracks: [],\n    mediaLibraryImages: [],\n\n    ceremony: undefined,\n    user: undefined,\n    /*\n    {\n      id: 0,\n      firstName: \"\",\n      lastName: \"\",\n      email: \"\"\n    }\n  */\n  };\n  private mediaIndex: Promise<CeremonyMediaCache> | null = null;\n\n  selectedCeremony = 0;\n\n  start(renderCallback: (state: EditorAppState) => void, streamCode: string | null): EditorAppState {\n    this.renderCallback = renderCallback;\n    this.continueStart(streamCode);\n    return {\n      ...this.getCMState(), ... this.app\n    };\n  }\n  private async continueStart(streamCode: string | null) {\n    if (streamCode) {\n      this.updateStreamState(streamCode);\n    }\n\n    if (!accessToken && !isLoggedIn())\n      return;\n\n    this.getUserInformation();\n  }\n\n  async updateStreamState(streamCode: string) {\n    for (; ;) {\n      try {\n        if (!this.getStreamState(streamCode))\n          break;\n      } catch (e) {\n        console.error(`getStreamState threw an error:`, e);\n      }\n      // retry in 30 secs\n      await sleep(30000);\n    }\n  }\n\n  getUserInfo() {\n    return this.app.user;\n  }\n\n  getCeremony() {\n    return this.app.ceremony;\n  }\n\n  // poll the server for the current state\n  // (to detect when someone has marked the ceremony as completed)\n  async updateCeremonyState() {\n    if (!this.app.ceremony)\n      return;\n\n    console.log(\"model.ts/EditorBackend::updateCeremonyState\");\n\n    const ceremonyState = await apiClient.getCeremonyState(this.app.ceremony?.id);\n\n    this.app.ceremony.contentDeadline = ceremonyState.contentDeadline;\n    this.app.ceremony.contentDeadlineTimeRemaining = ceremonyState.contentDeadlineTimeRemaining;\n    this.app.ceremony.contentCompleted = ceremonyState.contentCompleted;\n    // void this.updatedAppState(); // tell the editor there has been an update\n  }\n\n\n  getText(tid: keyof CeremonyTexts) {\n    const texts = this.getTexts();\n\n    if (!(tid in texts)) {\n      console.error(`No such text \"${tid}\".`);\n      return \"\";\n    }\n\n    let infoText = texts[tid];\n    //console.info(`Text for \"%s\" is %s`, tid, infoText);\n\n    if (this.app.ceremony) {\n      const isDutch = this.getLanguage() === \"nl\";\n      const deadlineText = isDutch ? this.app.ceremony.contentDeadlineTextNL : this.app.ceremony.contentDeadlineTextEN;\n      // infoText = infoText.replace(\"[contentdeadline]\", ceremony!.contentDeadlineText);\n      infoText = infoText.replace(\"[contentdeadline]\", deadlineText);\n    }\n\n    return infoText;\n  }\n\n  getTexts(): CeremonyTexts {\n    const locationData = getCeremonyLocation();\n    const isDutch = this.getLanguage() === \"nl\";\n    const texts = isDutch ? locationData.texts_ceremony_nl : locationData.texts_ceremony_en;\n    // console.info(\"Texts in current language\", texts);\n    return texts;\n  }\n\n  async getCondolenceInfo(condolenceCode: string, password: string) {\n  }\n\n  private async getUserInformation() {\n    const userinfo = await apiClient.getUserInformation();\n    if (!userinfo || userinfo.user.locationGuid !== getCeremonyLocation().locationGuid) {\n      // The server refused to return ceremonies because the user isn't logged in anymore\n      // or the user is logged in at the wrong location\n      return;\n    }\n    this.app.isLoggedIn = true;\n\n    this.app.user = userinfo.user;\n    this.app.chooseCeremony = undefined;\n    console.log(\"USERINFO\", userinfo);\n    const ceremonies = userinfo.ceremonies;\n\n    if (ceremonies.length !== 1) {\n      this.app.chooseCeremony = ceremonies;\n      this.app.ceremony = undefined;\n      void this.updatedAppState();\n      return;\n    }\n\n    this.selectedCeremony = ceremonies[0].id;\n    await this.updateCeremony();\n  }\n\n  private async getMedia() {\n    if (this.app.gotMedia)\n      return;\n\n    // Also send the popular tracks available for this ceremony\n    // so we can open the music library selection dialog without delay.\n    this.app.mediaLibraryTracks = await this.mediaLibraryGetTracks();\n\n    // the same for images\n    this.app.mediaLibraryImages = await this.mediaLibraryGetImages();\n    this.app.gotMedia = true;\n  }\n\n  updatedAppState = wrapSerialized(async () => {\n    //never give out a writable state copy\n    this.renderCallback?.(structuredClone({ ...this.getCMState(), ...this.app }));\n  }, { coalesce: true });\n\n  searchMediaLibraryTracks = wrapSerialized(async (query: string): Promise<CeremonyMomentAudio[]> => {\n    return await apiClient.searchTracks(this.selectedCeremony, query);\n  });\n\n\n  async chooseCeremony(ceremonyId: number) {\n    if (this.app.chooseCeremony?.some(_ => _.id === ceremonyId)) {\n      this.app.chooseCeremony = undefined;\n      this.selectedCeremony = ceremonyId;\n      await this.updateCeremony();\n      console.log(`ceremony updated`);\n    } else\n      console.log(`chosen ceremony not found`);\n  }\n\n  async login(username: string, password: string): Promise<LoginResult> {\n    const result = await login(username, password, { site: getCeremonyLocation().locationGuid });\n    if (result.loggedIn) {\n      location.reload();\n      return { success: true };\n    } else if (\"navigateTo\" in result) {\n      //@ts-ignore -- WH5.7 doesn't like this:\n      navigateTo(result.navigateTo);\n      return { success: true };\n    } else\n      return { success: false, error: result.error ?? \"\" };\n  }\n\n  async logout() {\n    await logout();\n    if (new URL(location.href).searchParams.get(\"access_token\")) {\n      window.close();\n    }\n    location.reload();\n  }\n\n  async requestPasswordReset(email: string) {\n    await apiClient.requestPasswordReset(email); //it'll derive the site from the request metadata\n    return { requested: true };\n  }\n  async doPasswordReset(ed: string, verifier: string, password: string) {\n    return await apiClient.doPasswordReset(ed, verifier, password);\n  }\n\n  async markCeremonyAsCompleted() {\n    if (!this.app.ceremony)\n      return;\n\n    await apiClient.markCeremonyAsCompleted(this.app.ceremony.id);\n  }\n\n  async addMoment(type: CeremonyMomentType, options?: {\n    files?: CeremonyUpload[];\n    audioMedia?: string | number;\n  }): Promise<number> {\n    const added = await apiClient.addMoment(this.selectedCeremony, type, options);\n    await this.updateCeremony();\n    return added.momentId;\n  }\n\n  async duplicateMoment(momentId: number) {\n    return await apiClient.duplicateMoment(momentId);\n  }\n\n  // async updateMoment(momentId: number, fields: Partial<CeremonyMoment>) {\n  async updateMoment(momentId: number, fields: updateMomentFields) {\n    await apiClient.updateMoment(momentId, fields);\n    await this.updateCeremony();\n  }\n\n  async requestUpload(manifest: UploadManifest) {\n    return apiClient.requestUpload(this.selectedCeremony, manifest);\n  }\n\n  async updateMedia(mediaId: number, upload: CeremonyUpload) {\n    await apiClient.updateMedia(mediaId, upload);\n    await this.updateCeremony();\n  }\n\n  async setMomentAudio(momentId: number, audioFileToken: CeremonyUpload) {\n    const res = await apiClient.setMomentAudio(momentId, audioFileToken);\n    await this.updateCeremony();\n    return res;\n  }\n\n  async setMomentAudioFromLibrary(momentId: number, mediaId: string | number) {\n    const res = await apiClient.setMomentAudioFromLibrary(momentId, mediaId);\n    await this.updateCeremony();\n    return res;\n  }\n\n  async removeMomentAudio(momentId: number) {\n    const res = await apiClient.removeMomentAudio(momentId);\n    await this.updateCeremony();\n    return res;\n  }\n\n\n  async setMomentPresentation(momentId: number, fileToken: CeremonyUpload) {\n    const res = await apiClient.setMomentPresentation(momentId, fileToken);\n    await this.updateCeremony();\n    return res;\n  }\n\n  async removeMomentPresentation(momentId: number) {\n    const res = await apiClient.removeMomentPresentation(momentId);\n    await this.updateCeremony();\n    return res;\n  }\n\n\n  async getMomentSlides(momentId: number) {\n    return await apiClient.getMomentSlides(momentId);\n  }\n\n  async addMomentSlides(momentId: number, images: CeremonyUpload[]) {\n    await apiClient.addMomentSlides(momentId, images);\n    await this.updateCeremony();\n  }\n\n  async updateMomentSlides(momentId: number, fields: CeremonyMomentSlideSetting[]) {\n    await apiClient.updateMomentSlides(momentId, fields);\n    await this.updateCeremony();\n  }\n\n  async addMomentLibrarySlides(momentId: number, imageIds: number[]) {\n    await apiClient.addMomentLibrarySlides(momentId, imageIds);\n    await this.updateCeremony();\n  }\n\n  async removeMoment(momentId: number) {\n    await apiClient.removeMoment(momentId);\n    await this.updateCeremony();\n  }\n\n  async removeSlideFromMoment(momentId: number, mediaId: number) {\n    await apiClient.removeSlideFromMoment(momentId, mediaId);\n    await this.updateCeremony();\n  }\n\n  async removeAllSlidesFromMoment(momentId: number) {\n    await apiClient.removeAllSlidesFromMoment(momentId);\n    await this.updateCeremony();\n  }\n\n  /// Get updated information on the ceremony\n  async updateCeremony() {\n    const ceremonyinfo = await apiClient.getCeremony(this.selectedCeremony);\n\n    // Map the data received from the RPC to the internal data of this application\n    this.app.ceremony = {\n      id: ceremonyinfo.id,\n      name: ceremonyinfo.title,\n      auditorium: ceremonyinfo.auditorium,\n      contentDeadline: ceremonyinfo.contentDeadline,\n      contentDeadlineTextEN: ceremonyinfo.contentDeadlineTextEN,\n      contentDeadlineTextNL: ceremonyinfo.contentDeadlineTextNL,\n      contentDeadlineTimeRemaining: ceremonyinfo.contentDeadlineTimeRemaining,\n      contentCompleted: ceremonyinfo.contentCompleted,\n      // time: ceremonyinfo.time || '', //FIXME formatdate\n      whenTextEN: ceremonyinfo.whenTextEN,\n      whenTextNL: ceremonyinfo.whenTextNL,\n      moments: ceremonyinfo.moments,\n      accessLevel: ceremonyinfo.accessLevel,\n      collaborators: ceremonyinfo.collaborators,\n      downloadScriptURL: ceremonyinfo.downloadScriptURL,\n      condolencePageURL: ceremonyinfo.condolencePageURL,\n      allowPresentations: ceremonyinfo.allowPresentations\n    };\n\n    await this.getMedia();\n\n    void this.updatedAppState();\n  }\n\n  async setMomentsOrdering(momentOrderingList: number[]) {\n    await apiClient.setMomentsOrdering(momentOrderingList);\n  }\n\n  async lookupAudio(text: string): Promise<CeremonyMediaItem[]> {\n    if (!this.mediaIndex)\n      this.mediaIndex = apiClient.getMediaIndex(this.selectedCeremony);\n\n    //TODO Rank matches\n    if (text.length < 3)\n      return []; //too little to search\n\n    const index = (await this.mediaIndex)?.items;\n    if (!index)\n      return [];\n\n    const match = new RegExp(escapeRegExp(text), 'i');\n    return index.filter(_ => _.metadata?.title?.match(match) || _.metadata?.artist?.match(match));\n  }\n\n  async getAudioPreview(token: string | number) {\n    return await apiClient.getPreview(this.selectedCeremony, token);\n  }\n\n\n  async prepareUpload(type: keyof typeof supportedMimetypes, maxFiles: number): Promise<{ upload: () => Promise<CeremonyUpload[]> } | null> {\n    return prepareUpload(getCeremonyLocation().filestackApiKey, type, maxFiles);\n  }\n\n  getCachedMediaLibraryTracks() {\n    // return await apiClient.mediaLibraryTracks(this.selectedCeremony);\n    return this.app.mediaLibraryTracks;\n  }\n\n  getCachedMediaLibraryImages() {\n    // return await apiClient.mediaLibraryTracks(this.selectedCeremony);\n    return this.app.mediaLibraryImages;\n  }\n\n  async mediaLibraryGetTracks() {\n    return await apiClient.mediaLibraryGetTracks(this.selectedCeremony);\n  }\n\n  async mediaLibraryGetImages() {\n    return await apiClient.mediaLibraryGetImages(this.selectedCeremony);\n  }\n\n  async listCollaborators() {\n    return await apiClient.listCollaborators(this.selectedCeremony);\n  }\n\n  async inviteCollaborator(props: { email: string; firstName: string; lastName: string }) {\n    return await apiClient.inviteCollaborator({\n      ceremonyId: this.selectedCeremony,\n      ...props,\n      link: location.href,\n    });\n  }\n\n  async removeCollaboratorAccess(email: string) {\n    return await apiClient.removeCollaboratorAccess(this.selectedCeremony, email);\n  }\n\n  /*\n  async getScriptUrl() {\n    return await apiClient.getScriptUrl(this.selectedCeremony);\n  }\n  */\n\n  async getStreamState(streamCode: string) {\n    const res = await apiClient.getStreamState(streamCode, location.href);\n    if (res) {\n      this.app.stream = {\n        ceremony: res.ceremony,\n        title: res.title,\n        start: res.startTime ? new Date(Date.parse(res.startTime)) : null,\n        playbackUrl: res.playbackUrl,\n        haveRecording: res.haveRecording,\n        auditorium: res.auditorium,\n        localStart: res.timeUntilStart === null ? null : new Date(Date.now() + res.timeUntilStart),\n        localEnd: res.timeUntilEnd === null ? null : new Date(Date.now() + res.timeUntilEnd),\n        isPreview: res.isPreview\n      };\n      void this.updatedAppState();\n      return true;\n    }\n    return false;\n  }\n\n  async getLiveLink() {\n    return await apiClient.getLiveLink(this.selectedCeremony);\n  }\n\n  async handleStreamCode(code: string) {\n    return await apiClient.handleStreamCode(code);\n  }\n}\n","import { getFrontendData } from \"@webhare/frontend\";\n\nexport function getCeremonyLocation() {\n  return getFrontendData(\"ceremonymedia:location\");\n}\n\nexport function applyCeremonyLocation() {\n  const editorconfig = getCeremonyLocation();\n  const htmlnode = document.documentElement;\n  htmlnode.style.setProperty(\"--color-theme\", editorconfig.colorTheme);\n  htmlnode.style.setProperty(\"--color-theme-dark\", editorconfig.colorThemeDark);\n  htmlnode.style.setProperty(\"--color-system-dark\", editorconfig.colorThemeSecondary);\n  htmlnode.style.setProperty(\"--color-system-darker\", editorconfig.colorThemeSecondaryDarker);\n}\n","import { setTidLanguage } from \"@webhare/gettid\";\n\nexport const CMLanguages = [\"en\", \"nl\"] as const;\nexport type CMLanguage = typeof CMLanguages[number];\n\nexport type SharedCMAppState = {\n  language: CMLanguage;\n};\n\n\nimport { rpc } from \"@webhare/rpc\";\n\nconst apiClientHeaders: Record<string, string> = { \"X-Pathname\": location.pathname };\nconst accessToken = new URL(location.href).searchParams.get(\"access_token\");\nif (accessToken)\n  apiClientHeaders[\"X-Access-Token\"] = accessToken;\n\nexport const apiClient = rpc(\"ceremonymedia:api\", { headers: apiClientHeaders });\n\n\nexport abstract class SharedCMClient {\n  language: CMLanguage = \"nl\";\n  // apiClient: globalApiClient;\n\n  constructor() {\n    const lang = localStorage.getItem(\"language\");\n    if (typeof lang === \"string\" && CMLanguages.includes(lang as CMLanguage)) {\n      this.language = lang as CMLanguage;\n    }\n    setTidLanguage(this.language);\n  }\n\n  protected getCMState(): SharedCMAppState {\n    return { language: this.language };\n  }\n\n  getLanguage(): CMLanguage {\n    return this.language;\n  }\n\n  setLanguage(lang: CMLanguage) {\n    this.language = lang;\n    setTidLanguage(lang);\n    localStorage.setItem(\"language\", lang);\n    void this.updatedAppState();\n  }\n\n  abstract updatedAppState(): Promise<void>;\n}\n","// The filetypes we support - FIXME: be more specific so we can assume they are actually supported for ceremonies\n\nimport type { CeremonyUpload } from \"@mod-ceremonymedia/js/api\";\nimport type { Filestack as FilestackType } from \"filestack-js\";\nimport { debugFlags } from \"@webhare/env\";\nimport { MultiFileUploader, requestFiles } from \"@webhare/upload\";\nimport { apiClient } from \"./shared-client\";\nimport { pick } from \"@webhare/std\";\n\n// For a list of common mimetypes see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\nexport const supportedMimetypes =\n{\n  audio: [\"audio/mpeg\", \"audio/wav\"], // audio/mpeg (.mp3), audio/wav, audio/webm, audio/ogg, audio/aac\n  image: [\"image/jpeg\", \"image/heic\", \"image/png\"], // image/webp, image/png, image/jpg, image/gif\n  video: [\"video/mp4\"], // requested to only accept MP4 videos, see ceremony-media/issues/82\n  presentation:\n    [\n      \"application/vnd.ms-powerpoint\",\n      \"application/vnd.openxmlformats-officedocument.presentationml.presentation\" // .pptx\n      // \"application/msword\" // .doc (Microsoft Word)\n    ]\n};\n\n// Ensure the Filestack picker is wrapped in a <dialog>,\n// so it'll stay in the top-layer over any other dialog which was\n// used to open the filepicker.\nfunction wrapFileStackWithDialogElement() {\n  // Filestack uses the onOpen callback right before it is actually inserted into the DOM,\n  // so we queue the wrapping function so it'll be called when Filestack is done inserting it's dialog.\n  setTimeout(__wrapFileStackWithDialogElement, 1);\n}\n\nfunction __wrapFileStackWithDialogElement() {\n  const externaldialog = document.getElementById(\"__filestack-picker\");\n  if (!externaldialog) {\n    console.error(\"Filestack picker not available yet.\");\n    return;\n  }\n  // console.info(\"Filestack dialog\", externaldialog);\n\n  const dialogcontainer = document.createElement(\"dialog\");\n  dialogcontainer.className = \"external-dialog external-dialog--filestack\";\n  dialogcontainer.appendChild(externaldialog);\n  document.body.appendChild(dialogcontainer);\n  dialogcontainer.showModal();\n}\n\nfunction unwrapFileStack() {\n  const externaldialog = document.getElementById(\"__filestack-picker\");\n  if (externaldialog)\n    console.warn(\"Expected Filestack picker to have been removed from the DOM.\");\n\n  const wrapperdialog = document.querySelector(\".external-dialog--filestack\");\n  // wrapperdialog?.replaceWith();\n  wrapperdialog?.remove();\n}\n\n// FIXME: share with the Ceremony Editor ? (this is a copy from /editor/model.ts)\nexport async function prepareUpload(filestackApiKey: string, type: keyof typeof supportedMimetypes, maxFiles: number): Promise<{ upload: () => Promise<CeremonyUpload[]> } | null> {\n\n  console.info(\"Accepting %s mimetypes:\", type, supportedMimetypes[type]);\n\n  // NOTE: for the Ceremony Editor we use getCeremonyLocation() which reads the wh-config.\n\n  if (filestackApiKey && !debugFlags[\"ceremonymedia-nofilestack\"]) {\n    const Filestack = (await import(\"filestack-js\")).Filestack as typeof FilestackType;\n    const filestack = Filestack(filestackApiKey);\n    const files = await new Promise<CeremonyUpload[]>((resolve, reject) => {\n      const picker = filestack.picker({\n        accept: supportedMimetypes[type],\n        maxFiles,\n        uploadInBackground: false,\n        disableTransformer: true,\n        lang: 'nl',\n        disableAltText: true,\n        // onOpen: () => console.log('opened!'),\n        onOpen: () => {\n          console.log(\"filestack opened\");\n          wrapFileStackWithDialogElement();\n        },\n        onClose: () => {\n          console.log(\"filestack closed\");\n          unwrapFileStack();\n        },\n        onFileUploadFailed: (res) => {\n          console.log(\"file upload failed\", res);\n        },\n        onFileUploadStarted: (res) => {\n          console.log(\"file upload started\", res);\n        },\n        onFileUploadProgress: (res) => {\n          console.log(\"file upload progress\", res);\n        },\n        onFileUploadFinished: (res) => {\n          console.log(\"file upload finished\", res);\n        },\n        onUploadStarted: (res) => {\n          console.log(\"upload started\", res);\n        },\n        onFileSelected: (res) => {\n          console.log(\"file selected\", res);\n        },\n        onUploadDone: (res) => {\n\n          /*\n  filename: \"spellcoder-beagle-biking-happy-in-the-rain.jpg\"\n  handle: \"giQi28QCQZOoZwq2ZEbv\"\n  mimetype: \"image/jpeg\"\n  originalFile: {name: 'spellcoder-beagle-biking-happy-in-the-rain.jpg', type: 'image/jpeg', size: 1932332}\n  originalPath : \"spellcoder-beagle-biking-happy-in-the-rain.jpg\"\n  size: 1932332\n  source: \"local_file_system\"\n  status: \"Stored\"\n  uploadId: \"DR3238Z4NSOm5DSP\"\n  url: \"https://cdn.filestackcontent.com/giQi28QCQZOoZwq2ZEbv\"\n          */\n          void apiClient.recordFileStackUpload(res.filesUploaded);\n          resolve(pick(res.filesUploaded, [\"filename\", \"handle\", \"url\", \"mimetype\"]));\n        }\n      });\n      void picker.open();\n    });\n\n    return { upload: async () => files };\n  }\n\n  const requestFilesResult = await requestFiles({ accept: supportedMimetypes[type], multiple: maxFiles > 1 });\n  if (!requestFilesResult)\n    return null;\n  const files: File[] = Array.isArray(requestFilesResult) ? requestFilesResult : (requestFilesResult as MultiFileUploader & { files: File[] }).files;\n\n  const uploader = new MultiFileUploader(files);\n  return { //actual uploader returned separately so caller can fire up a busy spinner\n    upload: async (): Promise<CeremonyUpload[]> => {\n      // const ceremonyId = backend.getCeremonyData()!.id;\n      const uploadinstructions = await apiClient.requestUploadForPost(uploader.manifest);\n\n      const uploadedFiles = await uploader.upload(uploadinstructions);\n      return uploadedFiles.map((file, index) => ({\n        filename: file.name,\n        mimetype: file.type,\n        url: URL.createObjectURL(files[index]),\n        token: file.token\n      }));\n    }\n  };\n}\n","//Preact hiaat: geen addDocEventListener achtig iets om de types al eerder goed te zetten. dan maar asserten\nexport function assertHTMLElement(el: EventTarget | null): asserts el is HTMLElement {\n  if (!el || (!(el instanceof HTMLElement) && !(el instanceof SVGGraphicsElement))) {\n    console.error(el);\n    throw new Error(\"Element is not a HTML Element\");\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Fragment, type ComponentChildren } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { getTid } from \"@webhare/gettid\";\n\n\nexport type SimpleScreenReturnValue = \"ok\" | \"close\" | \"yes\" | \"no\" | null;\n\ntype SimpleScreenProps = {\n  isOpen: boolean;\n  type: \"error\" | \"info\" | \"question\" | \"confirm\";\n  message: string | ComponentChildren;\n  title?: string;\n  buttons?: Array<\"ok\" | \"cancel\" | \"close\" | \"yes\" | \"no\">;\n  onClick: ((result: SimpleScreenReturnValue) => Promise<void> | void);\n  subDialogs?: ComponentChildren;\n};\n\nfunction SimpleScreenDialog(props: SimpleScreenProps) {\n  let buttons = props.buttons;\n  let title = props.title;\n  switch (props.type) {\n    case \"error\": buttons ??= [\"ok\"]; title ??= getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.error\"); break;\n    case \"info\": buttons ??= [\"close\"]; title ??= getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.info\"); break;\n    case \"question\":\n    case \"confirm\": buttons ??= [\"yes\", \"no\"]; title ??= getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.question\"); break;\n  }\n\n  const canEscape = buttons.every(b => [\"close\", \"ok\"].includes(b));\n\n  const footerContent =\n    <>\n      {buttons.map(button => {\n        switch (button) {\n          case \"ok\": return <button class=\"wh-button-solid\" onClick={() => props.onClick(\"ok\")}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.ok\")}</button>;\n          case \"cancel\": return <button class=\"wh-button-solid\" onClick={() => props.onClick(null)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>;\n          case \"close\": return <button class=\"wh-button-solid\" onClick={() => props.onClick(\"close\")}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.close\")}</button>;\n          case \"yes\": return <button class=\"wh-button-solid\" onClick={() => props.onClick(\"yes\")}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.yes\")}</button>;\n          case \"no\": return <button class=\"wh-button-solid\" onClick={() => props.onClick(\"no\")}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.no\")}</button>;\n        }\n      })}\n    </>;\n\n  return (\n    <ModalDialog isOpen={props.isOpen}\n      onClose={canEscape ? () => props.onClick(null) : undefined}\n      class={`cm-simplescreen cm-simplescreen--${props.type}`}\n      title={title}\n      footerContent={footerContent}\n      subDialogs={props.subDialogs}\n    >\n      <div class=\"cm-simplescreen__message\">{props.message}</div>\n    </ModalDialog>\n  );\n}\n\nexport type SimpleScreenState = Omit<SimpleScreenProps, \"isOpen\" | \"onClick\"> & {\n  onClose: (result: SimpleScreenReturnValue) => void;\n} | undefined;\n\n/** Render a simple screen, wait for the result. Can only be used for functional components, use simpleScreenState for class components.\n * Usage:\n * ```typescript\n * function MyComponent(props: object) {\n *   const { runSimpleScreen, SimpleScreen } = useSimpleScreen();\n *   function doSomething() {\n *     const result = await runSimpleScreen(\"info\", \"This is an info message\", { title: \"Info\", buttons: [\"ok\", \"cancel\"] });\n *     // do something with the result\n *   }\n *   return <div><button onClick={doSomething}>click me</button><SimpleScreen /></div>;\n * }\n * ```\n */\nexport function useSimpleScreen() {\n  const [feedback, setFeedback] = useState<SimpleScreenState>(undefined);\n\n  return getSimpleScreenProps(feedback, setFeedback);\n}\n\nfunction getSimpleScreenProps(feedback: SimpleScreenState, setFeedback: (feedback: SimpleScreenState) => void) {\n  return {\n    runSimpleScreen: (type: SimpleScreenProps[\"type\"], message: string | ComponentChildren, options?: { title?: string; buttons?: Array<\"ok\" | \"cancel\" | \"close\" | \"yes\" | \"no\">; onClick?: (result: SimpleScreenReturnValue) => Promise<void> | void }) => {\n      return new Promise<SimpleScreenReturnValue>(resolve => {\n        setFeedback({\n          type, message, ...options, onClose: async (result) => {\n            const curFeedback = feedback;\n            await options?.onClick?.(result);\n            resolve(result);\n            // Don't close if other feedback is being displayed\n            if (feedback === curFeedback)\n              setFeedback(undefined);\n          }\n        });\n      });\n    },\n    SimpleScreen: () => {\n      return <SimpleScreenDialog isOpen={Boolean(feedback)} {...feedback || { type: \"info\", message: \"\" }} onClick={feedback ? feedback.onClose : () => void 0} />;\n    }\n  };\n}\n\ntype StateWithSimpleScreen<P extends string> = { [K in P]?: SimpleScreenState };\n\n/** Render a simples screen, wait for the result. Can only be used for class components, use useSimpleScreen for functional components.\n * Usage:\n * ```typescript\n * class MyComponent extends Component<Props, State & { simpleScreen: SimpleScreenState }> {\n *   render() {\n *     const { runSimpleScreen, SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n *     function doSomething() {\n *       const result = await runSimpleScreen(\"info\", \"This is an info message\", { title: \"Info\", buttons: [\"ok\", \"cancel\"] });\n *       // do something with the result\n *     }\n *     return <div><button onClick={doSomething}>click me</button><SimpleScreen /></div>;\n *   }\n * ```\n */\nexport function simpleScreenState<P extends string, C extends { state: StateWithSimpleScreen<P>; setState: (arg: (state: C[\"state\"]) => C[\"state\"]) => void }>(component: C, p: P) {\n  return getSimpleScreenProps(component.state[p], (feedback: SimpleScreenState) => {\n    component.setState((state: C[\"state\"]) => ({ ...state, [p]: feedback }));\n  });\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, render, Fragment, type ComponentChild } from \"preact\";\nimport { backend } from \"../../pages/editor/editor\";\nimport { CeremonyMomentSlide } from \"../../pages/editor/state\";\nimport { createDeferred } from \"@webhare/std\";\nimport { assertHTMLElement } from \"../../pages/editor/support\";\n\nimport { ModalDialog } from \"../components/dialogs\";\nimport { EditSlideDialog } from \"./imagecropper\";\n\nimport { getTid } from \"@webhare/gettid\";\n//import { getTid } from \"@mod-tollium/js/gettid\";\nimport \"../frontend.lang.json\";\n\nimport \"./medialisteditor.scss\";\nimport \"./medialisteditor-list.scss\";\n\nimport type { CeremonyMomentSlideSetting } from \"@mod-ceremonymedia/js/api\";\nimport { simpleScreenState, type SimpleScreenState } from \"./simplescreen\";\nimport { TimeIndicator } from \"./timeindicator\";\nimport { FormDialog, type FormFormat } from \"./form\";\nimport { Spinner } from \"../../pages/editor/components\";\nimport { ImageLibraryImageChooser } from \"./selectimagefromlibrary\";\n\n\n/*\ninterface SlidesListItem extends CeremonyMomentSlide {\n  selected: boolean;\n}\n*/\n\n/* The AddMoment card represents a wizard to append additional contenet. As long as the AddMoment is active and no new card has been added, the content has not been committed */\nexport class MediaListDialog extends Component\n  <{ // Properties\n    momentId: number;\n    durationMsecs: number;\n    items: CeremonyMomentSlide[];\n    fixedDuration: boolean;\n    onResult: (slides: CeremonyMomentSlide[] | null) => void;\n  }, // State\n    {\n      selectednode: HTMLElement | null;\n      selectedIdx: number;\n      simpleScreen: SimpleScreenState;\n      editing?: \"slideDuration\" | \"duration\" | \"selectImageFromLibrary\";\n      showSpinner: boolean;\n    }\n  > {\n  constructor(props: {\n    momentId: number;\n    items: CeremonyMomentSlide[];\n    onResult: (momentId: number | null) => void;\n  }) {\n    super();\n    /*\n    const newlist: SlidesListItem[] = [];\n    for (const item of this.props.items)\n        this.props.items.push({ ...item, selected: false });\n\n        this.props.items = newlist;\n    */\n\n    // console.info(\"MediaListEditor props\", props);\n  }\n\n  doCheckForRowSelection(evt: MouseEvent) {\n    assertHTMLElement(evt.target);\n\n    const row = evt.target.closest(\".cm-medialist__item\") as HTMLElement;\n    if (!row)\n      return;\n\n    if (!row.parentNode) // this won't ever happen, but let's make TypeScript happy\n      return;\n\n    const rows = row.parentNode.children;\n    // console.log(\"rows\", rows);\n    const rowidx = Array.from(rows).indexOf(row);\n\n    /*\n    // Remove previous selection\n    let currentidx = 0;\n    for (const item of this.props.items) {\n      if (item.selected) {\n        item.selected = false;\n        rows[currentidx].classList.remove(\"selecteditem\");\n      }\n      currentidx++;\n    }\n    */\n\n    for (const currentrow of rows)\n      currentrow.classList.remove(\"selecteditem\");\n\n    // const newSelectedItem = this.props.items[rowidx];\n    // newSelectedItem.selected = true;\n\n    // console.log(this.props.items);\n\n    row.classList.add(\"selecteditem\");\n\n    this.setState({\n      selectednode: row,\n      selectedIdx: rowidx\n    });\n  }\n\n  setSelectedRow(idx: number) {\n\n  }\n\n  doCheckKey(evt: KeyboardEvent) {\n    assertHTMLElement(evt.target);\n\n    // console.log(evt.type, evt.key);\n\n    switch (evt.key) {\n      case \"ArrowDown\":\n        {\n          (evt.target.nextElementSibling as HTMLElement)?.focus();\n          evt.preventDefault();\n          break;\n        }\n      case \"ArrowUp\":\n        {\n          (evt.target.previousElementSibling as HTMLElement)?.focus();\n          evt.preventDefault();\n          break;\n        }\n      case \"Esq\":\n        {\n          break;\n        }\n      case \"Backspace\":\n        {\n          // ADDME: remove the selected item ?\n          break;\n        }\n    }\n  }\n\n  async clearAll() {\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n    if (await runSimpleScreen(\"question\", getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.sureclearall\"), { title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.warning\"), buttons: [\"yes\", \"no\"] }) !== \"yes\")\n      return;\n    backend.removeAllSlidesFromMoment(this.props.momentId);\n    this.setState({ selectedIdx: 0, selectednode: null });\n  }\n\n  doRemoveSelectedItem() {\n    const slide = this.props.items[this.state.selectedIdx];\n    backend.removeSlideFromMoment(this.props.momentId, slide.id); // Remove the item server-side\n    this.props.items.splice(this.state.selectedIdx, 1); // Remove the item client-side\n    // this.state.selectednode?.remove(); // Remove visual representation\n    this.setState({ selectednode: null });\n  }\n\n  doMoveSelectedItemUp() {\n    if (this.state.selectedIdx === 0)\n      return;\n\n    const items = this.props.items.splice(this.state.selectedIdx, 1); // Get the item\n    this.props.items.splice(this.state.selectedIdx - 1, 0, items[0]); // Push it into it's new location\n    this.setState({ selectedIdx: this.state.selectedIdx - 1 }); // Move the selectionIdx to match the new position\n\n    this.updateItemsOnServer();\n  }\n\n  doMoveSelectedItemDown() {\n    if (this.state.selectedIdx >= this.props.items.length - 1)\n      return;\n\n    const items = this.props.items.splice(this.state.selectedIdx, 1); // Get the item\n    this.props.items.splice(this.state.selectedIdx + 1, 0, items[0]); // Push it into it's new location\n    this.setState({ selectedIdx: this.state.selectedIdx + 1 }); // Move the selectionIdx to match the new position\n\n    this.updateItemsOnServer();\n  }\n\n  updateItemsOnServer() {\n    // Send (a subset of the fields for) the items for the server to update\n    const itemUpdates: CeremonyMomentSlideSetting[] = this.props.items.map(item => { return { id: item.id, durationMsecs: item.durationMsecs }; });\n    backend.updateMomentSlides(this.props.momentId, itemUpdates);\n  }\n\n  // adding media by uploading\n  async doAddMedia() {\n    const uploader = await backend.prepareUpload(\"image\", 100);\n    if (!uploader)\n      return;\n\n    this.setState({ showSpinner: true });\n    await backend.addMomentSlides(this.props.momentId, await uploader.upload());\n    this.setState({ showSpinner: false });\n\n    // Reload list of items (so we include our new slides with their preview image)\n    this.props.items = await backend.getMomentSlides(this.props.momentId);\n    this.setState({}); // rerender\n  }\n\n  async doAddMediaFromLibrary() {\n    this.setState(() => ({ editing: \"selectImageFromLibrary\" }));\n  }\n\n  async doEditItem() {\n    const result = runEditMediaDialog(this.props.items[this.state.selectedIdx]);\n    console.log(\"RESULT\", result);\n  }\n\n  async doEditItemDuration() {\n    if (this.state.selectedIdx !== undefined && this.state.selectedIdx >= 0)\n      this.setState(() => ({ editing: \"slideDuration\" }));\n  }\n\n  render() {\n    if (this.state.selectedIdx >= this.props.items.length)\n      this.setState({ selectedIdx: -1 });\n\n    const haveSelection = this.state.selectedIdx !== undefined && this.state.selectedIdx >= 0;\n\n    // const minutes = ((this.props.durationMsecs / 1000) / 60) | 0;\n    // const seconds = ((this.props.durationMsecs / 1000) % 60) | 0;\n\n    function formatDuration(secs: number) {\n      return `${(secs / 1000 / 60) | 0}:${`${((secs / 1000) % 60) | 0}`.padStart(2, \"0\")} ${secs < 60 ? \"sec.\" : \"min.\"}`;\n    }\n\n    let footerMessage = \"\";\n    const slidesDuration = (this.props.items.reduce((acc, item) => acc + item.durationMsecs, 0)) | 0;\n    if (this.props.items.length) {\n      if (slidesDuration < this.props.durationMsecs) {\n        footerMessage = getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.repeatmessage\", formatDuration(slidesDuration), formatDuration(this.props.durationMsecs));\n        //`De totale duur van de slides is ${formatDuration(slidesDuration)}, ze zullen worden herhaald tot de totale duur van ${formatDuration(this.props.duration)} is bereikt.`;\n      } else if (slidesDuration > this.props.durationMsecs) {\n        footerMessage = getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.cutoffmessage\", formatDuration(slidesDuration), formatDuration(this.props.durationMsecs));\n        //`De totale duur van de slides is ${formatDuration(slidesDuration)}, ze zullen worden afgekapt als de totale duur van ${formatDuration(this.props.duration)} is bereikt.`;\n      }\n    }\n\n    // NOTE: Using event delegation for rows (onClick on .cm-medialisteditor),\n    // it's overkill to need to manage event handlers for each row.\n    const editor =\n      <div class=\"cm-medialisteditor\"\n        onClick={evt => this.doCheckForRowSelection(evt)}\n      >\n        {/* list */}\n        <div class=\"cm-medialisteditor__list\"\n          onKeyDown={evt => this.doCheckKey(evt)}>\n          <div class=\"cm-medialist__header\">\n            <div class=\"cm-medialist__col-image\">{getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.image\")}</div>\n            <div class=\"cm-medialist__col-duration\">{getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.duration\")}</div>\n          </div>\n\n          <div class=\"cm-medialist__items\">\n            {this.props.items.map((item, idx) => <div class={this.state.selectedIdx === idx ? \"cm-medialist__item selecteditem\" : \"cm-medialist__item\"} tabindex={0}>\n              {item.preview ? <img class=\"cm-medialist__item__preview\" src={item.preview} /> : null}\n              < div class=\"cm-medialist__item__filename\" > {item.filename}</div>\n              {/* <div class=\"cm-medialist__item__filesize\">{item.filesize / 1024} KB</div> */}\n\n              <div class=\"cm-medialist__item__duration\">{(item.durationMsecs / 1000) | 0} sec</div>\n            </div>)\n            }\n          </div>\n          {footerMessage && <div class=\"cm-medialist__footer\">{footerMessage}</div>}\n        </div>\n\n        {/* button bar */}\n        <div class=\"cm-medialisteditor__buttonbar\">\n          <div class=\"cm-buttonbar__group cm-buttonbar__group--edititems\">\n            <button class=\"cm-medialisteditor__add-button wh-button-outline\"\n              onClick={evt => this.doAddMedia()}\n              type=\"button\">\n              <span class=\"icon far fa-plus-circle\"></span>\n              {getTid(\"ceremonymedia:webdesigns.site.js.buttons.add\")}\n            </button>\n\n            {backend.getCachedMediaLibraryImages().length > 0 &&\n              <button class=\"cm-medialisteditor__add__fromlibrary-button wh-button-outline\"\n                onClick={evt => this.doAddMediaFromLibrary()}\n                type=\"button\">\n                <span class=\"icon far fa-plus-circle\"></span>\n                {getTid(\"ceremonymedia:webdesigns.site.js.buttons.library\")}\n              </button>\n            }\n\n            <button class=\"cm-medialisteditor__edit-button wh-button-outline\"\n              disabled={!haveSelection}\n              onClick={evt => this.doEditItem()}\n              type=\"button\">\n              <span class=\"icon far fa-pen\"></span>\n              {getTid(\"ceremonymedia:webdesigns.site.js.buttons.edit\")}\n            </button>\n\n            {!this.props.fixedDuration &&\n              <button class=\"cm-medialisteditor__editduration-button wh-button-outline\"\n                disabled={!haveSelection}\n                onClick={evt => this.doEditItemDuration()}\n                type=\"button\">\n                <span class=\"icon far fa-stopwatch\"></span>\n                {getTid(\"ceremonymedia:webdesigns.site.js.buttons.duration\")}\n              </button>\n            }\n\n            <button class=\"cm-medialisteditor__delete-button wh-button-outline\"\n              disabled={!haveSelection}\n              onClick={evt => this.doRemoveSelectedItem()}\n              type=\"button\">\n              <span class=\"icon far fa-trash\"></span>\n              {getTid(\"ceremonymedia:webdesigns.site.js.buttons.delete\")}\n            </button>\n          </div>\n\n          <div class=\"cm-buttonbar__group cm-buttonbar__group--ordering\">\n            <button class=\"cm-medialisteditor__moveup-button wh-button-outline\"\n              disabled={!haveSelection}\n              onClick={evt => this.doMoveSelectedItemUp()}\n              type=\"button\">\n              <span class=\"icon fa fa-arrow-to-top\"></span>\n              {getTid(\"ceremonymedia:webdesigns.site.js.buttons.up\")}\n            </button>\n\n            <button class=\"cm-medialisteditor__movedown-button wh-button-outline\"\n              disabled={!haveSelection}\n              onClick={evt => this.doMoveSelectedItemDown()}\n              type=\"button\">\n              <span class=\"icon fa fa-arrow-to-bottom\"></span>\n              {getTid(\"ceremonymedia:webdesigns.site.js.buttons.down\")}\n            </button>\n          </div>\n\n          <div class=\"cm-buttonbar__group cm-buttonbar__group--duration\">\n\n            <div class=\"cm-medialisteditor__duration__header\">{getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.duration\")}</div>\n\n            {/* NOTE: nest the message and edit icon so on mobile they stay grouped together when moved */}\n            <div class=\"cm-medialisteditor__duration\">\n              {this.props.fixedDuration ?\n                <div class=\"cm-medialisteditor__durationfixedmessage\"><span class=\"icon fal fa-lock\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.duration-linked-to-audio\")}</div> : null\n              }\n\n              <TimeIndicator durationMs={this.props.durationMsecs} />\n\n              {!this.props.fixedDuration ?\n                <button class=\"cm-medialisteditor__duration__editbutton iconbutton\" type=\"button\" title=\"Aanpassen\" onClick={() => this.setState(state => ({ ...state, editing: \"duration\" }))}>\n                  <span class=\"icon far fa-pen\"></span>\n                </button>\n                : null}\n            </div>\n\n            <span class=\"cm-medialisteditor__itemcount\">{this.props.items.length} {this.props.items.length === 1 ? getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.image-lc\") : getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.images-lc\")}</span>\n\n          </div>\n\n        </div>\n\n      </div>;\n\n    const footercontent =\n      <Fragment>\n        <button class=\"cm-medialisteditor__clear-button wh-button-outline\"\n          type=\"button\"\n          onClick={() => this.clearAll()}\n        >{getTid(\"ceremonymedia:webdesigns.site.js.buttons.deleteall\")}</button>\n\n        <div class=\"cm-buttonbar__group\">\n          { /*\n          <button class=\"cm-dialog__cancel-button wh-button-outline\" type=\"button\"\n            onClick={() => this.props.onResult(null)}>Annuleren</button>\n\n          <button class=\"cm-dialog__submit-button wh-form__button wh-form__button--solid wh-form__button--default\"\n            type=\"button\"\n            onClick={() => this.props.onResult(this.props.items)}>Bewaren</button>\n          */ }\n          <button class=\"cm-dialog__cancel-button wh-button-solid wh-button-default\" type=\"button\"\n            onClick={() => this.props.onResult(this.props.items)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.close\")}</button>\n        </div>\n      </Fragment>;\n\n    const { SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n    const subDialogs: ComponentChild[] = [<SimpleScreen />];\n    switch (this.state.editing) {\n      case \"duration\": {\n        subDialogs.push(<EditMomentDurationForm\n          momentId={this.props.momentId}\n          durationMsecs={this.props.durationMsecs}\n          onClose={() => this.setState({ editing: undefined })} />);\n      } break;\n      case \"slideDuration\": {\n        if (this.state.selectedIdx >= 0) {\n          const idxs = [this.state.selectedIdx]; // array of selected indexes\n          const ids = idxs.map(idx => this.props.items[idx].id); // convert indexes to the list of moment id's\n\n          const all_slide_ids = this.props.items.map(item => item.id);\n          console.log(\"ALL SLIDE IDS\", all_slide_ids);\n\n          const value = this.props.items[this.state.selectedIdx].durationMsecs / 1000;\n          subDialogs.push(\n            <EditSlideDurationForm\n              isOpen={true}\n              momentId={this.props.momentId}\n              ids={ids}\n              allSlideIds={all_slide_ids}\n              value={value}\n              onClose={() => this.setState({ editing: undefined })} />\n          );\n        }\n      } break;\n      case \"selectImageFromLibrary\": {\n        subDialogs.push(<ImageLibraryImageChooser\n          onSelect={images => {\n            this.setState({ editing: undefined });\n            backend.addMomentLibrarySlides(this.props.momentId, images);\n          }}\n          onClose={() => this.setState({ editing: undefined })} />);\n      }\n    }\n\n    return (\n      <ModalDialog class=\"cm-dialog cm-dialog--medialisteditor\"\n        dialogname=\"medialisteditor\"\n        isOpen={true}\n        title={getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.dialogtitle\")}\n        closeButton={true}\n        onClose={() => this.props.onResult(null)}\n        footerContent={footercontent}\n        subDialogs={subDialogs}\n        showSpinner={this.state.showSpinner}>\n        {editor}\n      </ModalDialog>);\n  }\n}\n\nexport async function runEditMediaDialog(slide: CeremonyMomentSlide) {\n  if (!slide)\n    throw new Error(\"No slide provided\");\n\n  /*\n    const dialog = document.createElement('dialog');\n    dialog.className = \"cm-dialog cm-dialog--editmediadialog\";\n    const defer = createDeferred();\n    dialog.addEventListener(\"close\", evt => { defer.resolve(false); }); // handle closing the dialog itself (for example using Esq)\n    render(<EditSlide slide={slide} onResult={result => defer.resolve(result)} />, dialog);\n    document.body.append(dialog);\n    showDialogModal(dialog);\n  */\n\n  const defer = createDeferred();\n  const fragment = document.createDocumentFragment();\n  render(<EditSlideDialog slide={slide} onResult={result => defer.resolve(result)} />, fragment);\n  const dialog = fragment.querySelector(\"dialog\");\n\n  if (!dialog)\n    return null; // should never happen though\n\n  document.body.append(fragment);\n  dialog.showModal();\n\n  const result = await defer.promise;\n\n  console.log(\"runEditMediaDialog result\", result);\n\n  dialog.remove();\n\n  if (result === null)\n    return null; // no change\n\n  return result;\n}\n\nconst editSlideDurationForm = {\n  title: getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.slideduration.title\"),\n  fields: [{ prop: \"seconds\", type: \"seconds\", label: getTid(\"ceremonymedia:webdesigns.site.js.medialisteditor.slideduration.seconds\") }] as const,\n  buttons: [\n    { tid: \"cancel\", tag: \"cancel\", display: \"textual\", validate: false },\n    { tid: \"apply\", tag: \"ok\", display: \"solid\" },\n    { tag: \"apply-all\", display: \"solid\", xtitle: getTid(\"ceremonymedia:webdesigns.site.js.buttons.applytoall\") }\n  ],\n  defaultbuttontag: \"ok\"\n} as const satisfies FormFormat;\n\nexport function EditSlideDurationForm({ isOpen, momentId, ids, allSlideIds, value, onClose }: { isOpen?: boolean; momentId: number; ids: number[]; allSlideIds: number[]; value: number; onClose: () => void }) {\n  return <FormDialog isOpen={isOpen ?? true} dialogname=\"slideduration\" form={editSlideDurationForm} value={{ seconds: value }} onButton={async (result) => {\n    if (result.button === \"cancel\")\n      onClose();\n    else {\n      using spinner = new Spinner;\n      void (spinner); //we're not using the name but you can't use using without a varname..\n\n      const ids_to_apply = result.button === \"apply-all\" ? allSlideIds : ids;\n\n      const itemUpdates: CeremonyMomentSlideSetting[] = ids_to_apply.map(id => ({ id, durationMsecs: result.fields.seconds * 1000 }));\n\n      await backend.updateMomentSlides(momentId, itemUpdates);\n      onClose();\n    }\n  }} onCancel={onClose} />;\n}\n\nconst editMomentDurationForm = {\n  title: getTid(\"ceremonymedia:webdesigns.site.js.dialog-duration.momentduration-title\"), //getTid(\"ceremonymedia:webdesigns.site.js.dialog-duration.momentduration-title\"),\n  fields: [{ prop: \"seconds\", type: \"minutesSeconds\", label: \"\" /*getTid(\"ceremonymedia:webdesigns.site.js.dialog-duration.time\")*/ }] as const,\n  buttons: [\n    { tid: \"cancel\", tag: \"cancel\", display: \"textual\", validate: false },\n    { tid: \"apply\", tag: \"ok\", display: \"solid\" }\n  ],\n  defaultbuttontag: \"ok\"\n} as const satisfies FormFormat;\n\nexport function EditMomentDurationForm(props: { momentId: number; durationMsecs: number; onClose: () => void }) {\n  return <FormDialog isOpen={true} dialogname=\"momentduration\" form={editMomentDurationForm} value={{ seconds: (props.durationMsecs / 1000) | 0 }} onButton={async (result) => {\n    if (result.button === \"ok\") {\n      using spinner = new Spinner;\n      void (spinner); //we're not using the name but you can't use using without a varname..\n\n      await backend.updateMoment(props.momentId, { durationMsecs: result.fields.seconds * 1000 });\n    }\n    props.onClose();\n  }} onCancel={props.onClose} />;\n}\n","/* eslint-disable */\n/// @ts-nocheck -- Bulk rename to enable TypeScript validation\n\nimport type { TolliumToddService } from \"@mod-tollium/web/ui/js/types\";\nimport { debugFlags } from \"@webhare/env\";\nimport { createClient } from \"@webhare/jsonrpc-client\";\nimport * as dompack from \"dompack\";\n\nconst toddrpc = createClient<TolliumToddService>(\"tollium:todd\");\n\n// Canvas pixel ratio\nconst canvasRatio = (function () {\n  const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n  const devicePixelRatio = window.devicePixelRatio || 1,\n    backingStoreRatio = ctx.webkitBackingStorePixelRatio ||\n      ctx.mozBackingStorePixelRatio ||\n      ctx.msBackingStorePixelRatio ||\n      ctx.oBackingStorePixelRatio ||\n      ctx.backingStorePixelRatio || 1;\n  return devicePixelRatio / backingStoreRatio;\n})();\n\n// The images to load\nconst imagequeue = new Map();\n\n// The images that are already loaded\nconst imagecache = new Map();\n\n// Used to coalesce image loading\nlet loadimgtimeout = null, loadimglock = null;\n\n// Load the image(s) and apply to an <img> node src\nexport function updateCompositeImage(imgnode, imgnames, width, height, color) {\n  // If a white image is requested, fallback to (inverted) black if white not directly available\n  if (color === \"w\")\n    color = \"w,b\";\n  // If a color image is requested, fallback to black if color not directly available\n  else if (color === \"c\")\n    color = \"c,b\";\n\n  const data = { imgnames, width, height, color: color || \"\" };\n  imgnames = imgnames.join(\"+\");\n  const key = `${imgnames}|${data.width}|${data.height}|${data.color}`;\n  const cached = imagecache.get(key);\n\n  // The data-toddimg attribute is used to reload the image after the cache is cleared\n  if (imgnode.dataset.toddimg === key)\n    return; //already set or being loaded\n\n  // Update the node to explain which image is coming on. Tests that just want to check this name shouldn't need to wait for the image load itself\n  imgnode.dataset.toddimg = key;\n\n  // Check if the image isn't already on the queue\n  for (const [, value] of imagecache) {\n    if (value.imgs.includes(imgnode)) {\n      value.imgs.splice(value.imgs.indexOf(imgnode), 1);\n      break;\n    }\n  }\n\n  // Check if this image src is already loaded\n  if (cached && cached.result) {\n    if (debugFlags.ild)\n      console.log(\"Applying cached \" + key);\n    applyLoadedResultToImage(cached, imgnode);\n    return imgnode;\n  }\n\n  // Add the image to the list of images to load\n  if (!cached)\n    imagecache.set(key, { key, data, imgs: [] });\n  if (imgnode)\n    imagecache.get(key).imgs.push(imgnode);\n\n  if (!imagequeue.has(key)) {\n    imagequeue.set(key, data);\n    if (debugFlags.ild)\n      console.log(\"Loading image \" + key + \", image queue size: \" + imagequeue.size);\n  }\n\n  // Try to coalesce multiple loadImages calls into one\n  if (!loadimgtimeout) {\n    if (debugFlags.ild)\n      console.log(\"Setting image loading timeout\");\n    loadimglock = dompack.flagUIBusy();\n    loadimgtimeout = window.setTimeout(loadImages, 1);\n  }\n}\n\nasync function loadImages() {\n  loadimgtimeout = null;\n  loadimglock.release();\n  loadimglock = null;\n\n  const lock = dompack.flagUIBusy();\n\n  // Make a list of images to load\n  const toload = [];\n  if (debugFlags.ild)\n    console.warn(\"Image queue size: \" + imagequeue.size);\n  for (const [key, data] of imagequeue) {\n    const cached = imagecache.get(key);\n    if (debugFlags.ild)\n      console.log(key, cached);\n    // If nobody is waiting for this image, or if it's already loaded, skip it\n    if (!cached.imgs.length || cached.result) {\n      applyLoadedResult(cached);\n      continue;\n    }\n    toload.push({ key, data });\n  }\n  imagequeue.clear();\n\n  // Load the images\n  if (debugFlags.ild)\n    console.info(\"Loading \" + toload.length + \" images\");\n\n  try {\n    const result = await toddrpc.retrieveImages(toload, Boolean(debugFlags.ild));\n\n    if (debugFlags.ild)\n      console.info(\"Received \" + result.images.length + \" images\", result);\n\n    // Store the loaded images\n    const loaded = await Promise.all(result.images.map(res => {\n      // Get the cache entry\n      const cached = imagecache.get(res.key);\n\n      // Process the image (invert, apply overlays)\n      return processImage(res.key, res.images, cached.data);\n    }));\n\n    // loaded holds all resolved promise results\n    if (debugFlags.ild)\n      console.info(\"Applying images\");\n\n    loaded.forEach((loadedimg) => {\n      if (!loadedimg)\n        return;\n      // Get the cache entry\n      const cached = imagecache.get(loadedimg.key);\n\n      if (!cached.imgs.length)\n        return;\n\n      cached.result = loadedimg.result;\n\n      // If no src was returned, the image is broken\n      if (!cached.result)\n        cached.result = \"/.tollium/ui/img/broken.svg\";\n\n      // Store the loaded image\n      applyLoadedResult(cached);\n    });\n  } catch (e) {\n    console.error(e);\n  } finally {\n    lock.release();\n  }\n}\n\nfunction applyLoadedResult(cached) {\n  if (cached.imgs.length && debugFlags.ild)\n    console.log(\"Applying \" + cached.key + \" to \" + cached.imgs.length + \" images\");\n\n  // Set the src attribute of the img nodes waiting for this image and clear the list\n  cached.imgs.forEach(img => applyLoadedResultToImage(cached, img));\n  cached.imgs = [];\n}\n\nfunction applyLoadedResultToImage(cached, img) {\n  img.width = cached.data.width;\n  img.height = cached.data.height;\n  img.src = cached.result;\n}\n\nasync function processImage(key, images, data) {\n  // Check if the base image was found (a default record is returned for broken images)\n  if (!images.length || !images[0]) {\n    console.error(\"Broken \" + (images.length > 1 ? \"base \" : \"\") + \"image \" + key);\n    // Return an empty src, so the 'broken' image is shown\n    return { key };\n  }\n  const baseimg = images[0];\n  const basetype = baseimg.type;\n  if (debugFlags.ild)\n    console.log(\"Received image \" + key + \" of type \" + basetype);\n\n\n  // basedata is the base64-encoded base image data\n  let basedata = baseimg.data;\n\n  // If the image is black and a white image is wanted, invert the image\n  if (baseimg.invertable && basetype === \"image/svg+xml\" && baseimg.color === \"b\" && data.color === \"w,b\") {\n    if (debugFlags.ild)\n      console.log(\"Inverting image\");\n    basedata = invertImage(basedata);\n  }\n\n  // Apply overlays, if any\n  if (images.length === 1) {\n    // No extra processing has to be done; return the current image data as data URI\n    return { key, result: \"data:\" + basetype + \";base64,\" + basedata };\n  }\n\n  // Base image and overlays are drawn on a canvas, taking pixel ratio into account\n  const canvaswidth = data.width * canvasRatio, canvasheight = data.height * canvasRatio;\n\n  // imgnodes is the list of img nodes that are drawn on the composite canvas\n  // imgloads is the list of promises that resolve for each loaded img node (or rejected for broken overlays)\n  const imgnodes = [], imgloads = [];\n  images.forEach((overlayimg, idx) => {\n    // Check if the overlay image (idx > 0) was found (a default record is returned for broken imagesw)\n    if (idx && !overlayimg) {\n      // Add a rejected promise\n      imgloads.push(Promise.reject(new Error(\"Broken overlay \" + idx + \" for \" + key)));\n      return;\n    }\n    // The image data is either the base image data or the overlay image data\n    let imgdata = idx ? overlayimg.data : basedata;\n    // If this is a black overlay and a white image is wanted, invert the overlay\n    if (idx && overlayimg.invertable && overlayimg.type === \"image/svg+xml\" && overlayimg.color === \"b\" && data.color === \"w,b\") {\n      if (debugFlags.ild)\n        console.log(\"Inverting overlay \" + idx);\n      imgdata = invertImage(imgdata);\n    }\n\n    const imgsrc = \"data:\" + overlayimg.type + \";base64,\" + imgdata;\n    const imgnode = new Image(canvaswidth, canvasheight);\n    imgnode.knockout = overlayimg.knockout;\n    imgnode.translatex = overlayimg.translatex;\n    imgnode.translatey = overlayimg.translatey;\n\n    //ADDME: In Safari, icons are sometimes rendered smaller than they actually are, don't know what causes this...\n\n    // Load the images into drawable img nodes\n    imgloads.push(new Promise((resolve, reject) => {\n      if (debugFlags.ild)\n        console.log(\"Reading image \" + idx);\n      imgnode.onload = function () {\n        if (debugFlags.ild)\n          console.log(\"Read image \" + idx);\n        resolve(idx);\n      };\n      imgnode.onerror = function (e) {\n        reject(\"Error reading image \" + idx + \" for \" + key + \" (\" + imgsrc + \")\");\n      };\n      imgnode.src = imgsrc;\n    }));\n    imgnodes.push(imgnode);\n  });\n\n  try {\n    // Wait for all images to be loaded\n    await Promise.all(imgloads);\n\n    if (debugFlags.ild)\n      console.info(\"Combining layers\");\n\n    let canvas = document.createElement(\"canvas\");\n    canvas.width = canvaswidth;\n    canvas.height = canvasheight;\n    let ctx = canvas.getContext(\"2d\");\n    let layercanvas, layerctx;\n    const canvasstack = [canvas];\n\n    // Draw the layers\n    let idx = 0;\n    for (const imgnode of imgnodes) {\n      // If the layercanvas exists, it is the current backgrondlayer, don't knockout this layer\n      const knockout = !layercanvas;\n      if (knockout) {\n        layercanvas = document.createElement(\"canvas\");\n        layercanvas.width = canvaswidth;\n        layercanvas.height = canvasheight;\n        layerctx = layercanvas.getContext(\"2d\");\n      }\n\n      try {\n        layerctx.drawImage(imgnode, imgnode.translatex, imgnode.translatey, canvaswidth, canvasheight);\n      } catch (e) {\n        // IE 11 sometimes doesn't want to render SVG on load event, wait a millisecond sometimes fixes it\n        await new Promise(resolve => setTimeout(resolve, 1));\n        layerctx.drawImage(imgnode, imgnode.translatex, imgnode.translatey, canvaswidth, canvasheight);\n      }\n\n      if (idx && knockout) // Knockout overlay\n      {\n        if (debugFlags.ild)\n          console.info(\"Knockout overlay \" + idx);\n\n        // Draw a knockout shape by drawing the overlay with a \"destination-out\" composite operation at positions 1\n        // logical pixel to the top, left, right and bottom\n        ctx.save();\n        ctx.globalCompositeOperation = \"destination-out\";\n        ctx.imageSmoothingEnabled = false;\n\n        // For very large images (> 192 pixels), widen the knockout outline\n        const range = Math.max(Math.round(canvaswidth / canvasRatio) / 128, Number(canvasRatio));\n        for (let x = -range; x <= range; ++x)\n          for (let y = -range; y <= range; ++y)\n            ctx.drawImage(layercanvas, x, y);\n\n        ctx.restore();\n      }\n\n      // Draw the image\n      ctx.drawImage(layercanvas, 0, 0);\n\n      if (imgnode.knockout) {\n        // Next layer can knockout this layer\n        layercanvas = null;\n        layerctx = null;\n      } else {\n        if (debugFlags.ild)\n          console.info(\"Adding stack layer for non-knockout layer \" + idx);\n\n        // Create a new canvas\n        canvas = document.createElement(\"canvas\");\n        canvas.width = canvaswidth;\n        canvas.height = canvasheight;\n        ctx = canvas.getContext(\"2d\");\n        canvasstack.push(canvas);\n      }\n\n      ++idx;\n    }\n\n    // Get and return the image data url\n    if (debugFlags.ild)\n      console.log(\"Setting cached src \" + key);\n\n    // Combine the layers into a single image\n    canvas = document.createElement(\"canvas\");\n    canvas.width = canvaswidth;\n    canvas.height = canvasheight;\n    ctx = canvas.getContext(\"2d\");\n    for (layercanvas of canvasstack)\n      ctx.drawImage(layercanvas, 0, 0);\n\n    return { key, result: canvas.toDataURL() };\n  } catch (e) {\n    // An overlay could not be loaded, return an empty src, so the 'broken' image is shown\n    console.error(e);\n    return { key };\n  }\n}\n\nfunction invertImage(svgdata) {\n  svgdata = window.atob(svgdata);\n  //console.log(svgdata);\n  // Switch '#4a4a4a' and '#f3f3f3', adding a space to prevent double substitution\n  // And using doublespaces now, as the CSS rewriter for IE (RewriteImgStyles) will already add the first space\n  svgdata = svgdata.replace(/(stroke|fill): ?#4a4a4a;/gi, \"$1:  #f3f3f3;\");\n  svgdata = svgdata.replace(/(stroke|fill): ?#f3f3f3;/gi, \"$1:  #4a4a4a;\");\n  svgdata = svgdata.replace(/(stroke|fill): ?rgb\\(74,74,74\\);/gi, \"$1:  #f3f3f3;\");\n  svgdata = svgdata.replace(/(stroke|fill): ?rgb\\(243,243,243\\);/gi, \"$1:  #4a4a4a;\");\n  svgdata = svgdata.replace(/(stroke|fill)=\"#4a4a4a/gi, \"$1=\\\" #f3f3f3\");\n  svgdata = svgdata.replace(/(stroke|fill)=\"#f3f3f3/gi, \"$1=\\\" #4a4a4a\");\n  svgdata = svgdata.replace(/(stroke|fill)=\"rgb\\(74,74,74\\)/gi, \"$1=\\\" #f3f3f3\");\n  svgdata = svgdata.replace(/(stroke|fill)=\"rgb\\(243,243,243\\)/gi, \"$1=\\\" #4a4a4a\");\n  //console.log(svgdata);\n  return window.btoa(svgdata);\n}\n\nexport function resetImageCache() {\n  if (debugFlags.ild)\n    console.warn(\"Clearing image cache\");\n\n  imagequeue.clear();\n  imagecache.clear();\n  loadimgtimeout = window.clearTimeout(loadimgtimeout);\n  if (loadimglock) {\n    loadimglock.release();\n    loadimglock = null;\n  }\n\n  loadMissingImages({ force: true });\n}\n\nexport function loadMissingImages({ force, node }) {\n  for (const img of (node || document).querySelectorAll(\"[data-toddimg]\")) {\n    if ((!img.src || force) && img.dataset.toddimg) {\n      const data = img.dataset.toddimg.split(\"|\");\n      img.dataset.toddimg = data.slice(0, 4).join(\"|\") + \"|reloading\";\n      updateCompositeImage(img, data[0].split(\"+\"), parseInt(data[1]), parseInt(data[2]), data[3]);\n    }\n  }\n}\n\nexport function createImage(imgname, width, height, color, eloptions?) {\n  return createCompositeImage(imgname.split(\"+\"), width, height, color, eloptions);\n}\n\nexport function createCompositeImage(imgnames, width, height, color, eloptions?) {\n  const imgnode = dompack.create('img', { width, height, ...eloptions });\n  updateCompositeImage(imgnode, imgnames, width, height, color);\n  return imgnode;\n}\n\nexport function updateImage(imgnode, imgname, width, height, color) {\n  return updateCompositeImage(imgnode, imgname.split(\"+\"), width, height, color);\n}\n","import * as dompack from \"dompack\";\n\nimport \"./toolbars.css\";\n\nexport type ToolbarButtonOptions = {\n  label?: string;\n  classNames?: string[];\n  hint?: string;\n  icon?: HTMLImageElement;\n  enabled?: boolean;\n  pressed?: boolean;\n  onExecute?: EventListenerOrEventListenerObject;\n};\n\nexport class ToolbarButton {\n  node: HTMLElement;\n  options: ToolbarButtonOptions;\n\n  constructor(options?: ToolbarButtonOptions) {\n    this.options = {\n      enabled: true,\n      pressed: false,\n      ...options\n    };\n\n    this.node = <div class={[\"wh-toolbar-button\", ...(this.options.classNames || [])].join(\" \")} title={this.options.hint}></div>;\n    this.node.addEventListener(\"click\", () => this.executeAction());\n    if (this.options.icon) {\n      this.options.icon.classList.add(\"wh-toolbar-button-img\");\n      this.node.appendChild(this.options.icon);\n    }\n    if (this.options.label)\n      this.node.appendChild(<span>{this.options.label}</span>);\n    if (!this.options.enabled)\n      this.node.classList.add(\"disabled\");\n    if (this.options.pressed)\n      this.node.classList.add(\"pressed\");\n    if (this.options.onExecute)\n      this.node.addEventListener(\"execute\", this.options.onExecute);\n  }\n\n  executeAction() {\n    if (this.options.enabled)\n      dompack.dispatchCustomEvent(this.node, \"execute\", { bubbles: false, cancelable: false });\n  }\n\n  setEnabled(enabled: boolean) {\n    enabled = Boolean(enabled);\n    if (enabled !== this.options.enabled) {\n      this.options.enabled = enabled;\n      this.node.classList.toggle(\"disabled\", !this.options.enabled);\n    }\n  }\n\n  setPressed(pressed: boolean) {\n    pressed = Boolean(pressed);\n    if (pressed !== this.options.pressed) {\n      this.options.pressed = pressed;\n      this.node.classList.toggle(\"pressed\", this.options.pressed);\n    }\n  }\n}\n\nexport class ToolbarSeparator extends ToolbarButton {\n  constructor(options?: ToolbarButtonOptions) {\n    super(options);\n    this.node = dompack.create(\"div\", { \"className\": [\"wh-toolbar-separator\"].concat(this.options.classNames || []).join(\" \") });\n  }\n}\n\nclass ToolbarContainer {\n  addButton(_button: ToolbarButton) {\n    throw new Error(\"addButton not implemented\");\n  }\n\n  addComponent(_comp: ToolbarButton) {\n    throw new Error(\"addComponent not implemented\");\n  }\n}\n\nexport type { ToolbarContainer };\n\nexport type ToolbarPanelOptions = {\n  onClose?: EventListenerOrEventListenerObject;\n  onApply?: EventListenerOrEventListenerObject;\n};\n\nexport class ToolbarPanel extends ToolbarContainer {\n  node: HTMLElement;\n  options?: ToolbarPanelOptions;\n\n  constructor(options?: ToolbarPanelOptions) {\n    super();\n\n    this.options = options;\n    this.node = <div class=\"wh-toolbar-panel open\"></div>;\n\n    if (this.options?.onClose)\n      this.node.addEventListener(\"close\", this.options.onClose);\n    if (this.options?.onApply)\n      this.node.addEventListener(\"apply\", this.options.onApply);\n  }\n\n  addButton(button: ToolbarButton) {\n    this.addComponent(button);\n  }\n\n  addComponent(comp: ToolbarButton) {\n    this.node.appendChild(comp.node);\n  }\n}\n\ntype ToolbarOptions = {\n  applyIcon?: HTMLImageElement;\n  applyLabel?: string;\n  closeIcon?: HTMLImageElement;\n  closeLabel?: string;\n  classNames?: string[];\n};\n\nexport class Toolbar extends ToolbarContainer {\n  options: ToolbarOptions;\n  node: HTMLElement;\n  mainPanel: ToolbarPanel;\n  modalPanel: ToolbarPanel | null;\n  modalHolder: HTMLElement;\n\n  constructor(options: ToolbarOptions) {\n    super();\n\n    this.options = {\n      applyLabel: \"Apply\",\n      closeLabel: \"Close\",\n      ...options\n    };\n\n    this.node = <div class={[\"wh-toolbar\", ...(this.options.classNames || [])].join(\" \")}></div>;\n\n    this.mainPanel = new ToolbarPanel();\n    this.node.appendChild(this.mainPanel.node);\n\n    this.modalPanel = null;\n    this.modalHolder = <div class=\"wh-toolbar-modalholder\"></div>;\n    this.node.appendChild(this.modalHolder);\n\n    const modalbuttons = <div class=\"wh-toolbar-modalbuttons\"></div>;\n    this.modalHolder.append(modalbuttons);\n\n    let button = <div class=\"wh-toolbar-button wh-toolbar-button-applymodal\"></div>;\n    button.addEventListener(\"click\", () => this.onModalApply());\n    modalbuttons.append(button);\n    if (this.options.applyIcon) {\n      this.options.applyIcon.classList.add(\"wh-toolbar-button-img\");\n      button.appendChild(this.options.applyIcon);\n    }\n    if (this.options.applyLabel)\n      button.appendChild(<span>{this.options.applyLabel}</span>);\n\n    button = <div class=\"wh-toolbar-button wh-toolbar-button-revertmodal\"></div>;\n    button.addEventListener(\"click\", () => this.onModalCancel());\n    modalbuttons.append(button);\n    if (this.options.closeIcon) {\n      this.options.closeIcon.classList.add(\"wh-toolbar-button-img\");\n      button.appendChild(this.options.closeIcon);\n    }\n    if (this.options.closeLabel)\n      button.appendChild(<span>{this.options.closeLabel}</span>);\n  }\n\n  setSize(width: number, height: number) {\n    this.node.style.width = width + \"px\";\n    this.node.style.height = height + \"px\";\n  }\n\n  addButton(button: ToolbarButton) {\n    this.mainPanel.addButton(button);\n  }\n\n  addComponent(comp: ToolbarButton) {\n    this.mainPanel.addComponent(comp);\n  }\n\n  activateModalPanel(subPanel: ToolbarPanel) {\n    if (this.modalPanel)\n      this.closeModalPanel();\n\n    this.mainPanel.node.classList.remove(\"open\");\n    this.modalPanel = subPanel;\n    this.modalHolder.appendChild(this.modalPanel.node);\n    this.modalHolder.classList.add(\"open\");\n    dompack.dispatchCustomEvent(\n      this.node,\n      \"modal-opened\",\n      {\n        bubbles: false,\n        cancelable: false,\n        detail:\n        {\n          apply: () => this.onModalApply(),\n          cancel: () => this.onModalCancel(),\n          panel: subPanel\n        }\n      });\n  }\n\n  closeModalPanel() {\n    if (!this.modalPanel)\n      return;\n\n    dompack.dispatchCustomEvent(this.modalPanel.node, \"close\", { bubbles: false, cancelable: false });\n    this.mainPanel.node.classList.add(\"open\");\n    this.modalHolder.classList.remove(\"open\");\n    this.modalHolder.removeChild(this.modalPanel.node);\n    this.modalPanel = null;\n    dompack.dispatchCustomEvent(this.node, \"modal-closed\", { bubbles: false, cancelable: false });\n  }\n\n  onModalApply() {\n    if (this.modalPanel)\n      dompack.dispatchCustomEvent(this.modalPanel.node, \"apply\", { bubbles: false, cancelable: false });\n    this.closeModalPanel();\n  }\n\n  onModalCancel() {\n    if (this.modalPanel)\n      dompack.dispatchCustomEvent(this.modalPanel.node, \"cancel\", { bubbles: false, cancelable: false });\n    this.closeModalPanel();\n  }\n}\n","import { dispatchCustomEvent, stop } from '../src/events';\n\nexport type DompackMoveEvent = CustomEvent<{\n  movedX: number;\n  movedY: number;\n  pageX: number;\n  pageY: number;\n  clientX: number;\n  clientY: number;\n  screenX: number;\n  screenY: number;\n  listener: EventTarget | null;\n  currentTarget: EventTarget | null;\n}>;\n\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:movestart\": DompackMoveEvent;\n    \"dompack:move\": DompackMoveEvent;\n    \"dompack:moveend\": DompackMoveEvent;\n  }\n}\n\nconst HAS_TOUCHEVENT = typeof TouchEvent !== \"undefined\"; // Desktop Safari doesn't have TouchEvent\n\ntype EventCoordinates =\n  {\n    pageX: number;\n    pageY: number;\n    clientX: number;\n    clientY: number;\n    screenX: number;\n    screenY: number;\n  };\n// Store data about the current move\nlet moveeventdata: { target: EventTarget | null; startX: number; startY: number } | null = null;\nlet lastcoordinates: EventCoordinates | null = null;\n\n// Fire a move event and return the resulting event\nfunction fireMoveEvent(eventtype: \"dompack:movestart\" | \"dompack:move\" | \"dompack:moveend\", listener: EventTarget | null, event: MouseEvent | TouchEvent, cancelable: boolean) {\n  //FIXME properly wait for 'last' touch when multitouchmoving ?\n\n  listener = moveeventdata?.target ?? listener;\n  const originaltarget = moveeventdata?.target ?? event.target;\n  if (!originaltarget)\n    return;\n\n  let coordinatesource;\n  if (\"touches\" in event && event.touches.length)\n    coordinatesource = event.touches[0];\n  else if (event.type === \"touchend\")\n    coordinatesource = lastcoordinates;\n  else\n    coordinatesource = event as MouseEvent;\n  if (!coordinatesource)\n    return;\n\n  if (event.type === \"touchmove\")\n    lastcoordinates = cloneCoordinates(coordinatesource);\n\n  const movedX = moveeventdata ? coordinatesource.clientX - moveeventdata.startX : 0;\n  const movedY = moveeventdata ? coordinatesource.clientY - moveeventdata.startY : 0;\n\n  const eventdata = {\n    movedX: movedX, movedY: movedY,\n    pageX: coordinatesource.pageX, pageY: coordinatesource.pageY,\n    clientX: coordinatesource.clientX, clientY: coordinatesource.clientY,\n    screenX: coordinatesource.screenX, screenY: coordinatesource.screenY,\n    listener: listener,\n    currentTarget: event.target\n  };\n\n  return dispatchCustomEvent(originaltarget, eventtype, { detail: eventdata, cancelable: cancelable, bubbles: true });\n}\n\n// Activate the global mouse handlers and store the original event target (the 'movable' element) and start position to\n// calculate mouse movement\nfunction startMove(target: EventTarget | null, startX: number, startY: number) {\n  moveeventdata = { target, startX, startY };\n  window.addEventListener(\"mousemove\", moveMouseMove, true);\n  window.addEventListener(\"mouseup\", moveMouseUp, true);\n  window.addEventListener(\"touchmove\", moveMouseMove, true);\n  window.addEventListener(\"touchend\", moveMouseUp, true);\n}\n\n// Deactivate the global mouse handlers and remove stored move data\nfunction stopMove() {\n  moveeventdata = null;\n  window.removeEventListener(\"mousemove\", moveMouseMove, true);\n  window.removeEventListener(\"mouseup\", moveMouseUp, true);\n  window.removeEventListener(\"touchmove\", moveMouseMove, true);\n  window.removeEventListener(\"touchend\", moveMouseUp, true);\n}\n\nfunction cloneCoordinates(coordinatesource: MouseEvent | Touch | EventCoordinates): EventCoordinates {\n  return {\n    pageX: coordinatesource.pageX,\n    pageY: coordinatesource.pageY,\n    clientX: coordinatesource.clientX,\n    clientY: coordinatesource.clientY,\n    screenX: coordinatesource.screenX,\n    screenY: coordinatesource.screenY\n  };\n}\n\n// Handle a mousedown event on a movable element\nfunction moveMouseDown(event: Event) { // We're a mouse/touch event handler, so we know the event is a MouseEvent or TouchEvent\n  if (event instanceof MouseEvent && event.button) //not the main button\n    return;\n\n  // Start the move by firing the movestart event\n  if (!fireMoveEvent(\"dompack:movestart\", event.target, event as MouseEvent | TouchEvent, true))\n    return;\n\n  // Start the move action\n  const coordinatesource = HAS_TOUCHEVENT && event instanceof TouchEvent ? event.touches[0] : event as MouseEvent;\n  lastcoordinates = cloneCoordinates(coordinatesource);\n  startMove(event.target, coordinatesource.clientX, coordinatesource.clientY);\n\n  // Prevent default to prevent selecting text or click\n  stop(event);\n}\n\n// Handle a (global) mousemove event\nfunction moveMouseMove(event: Event) { // We're a mouse/touch event handler, so we know the event is a MouseEvent or TouchEvent\n  // Check if we have data (we should have, but check just in case)\n  if (moveeventdata) {\n    stop(event);\n    // Fire the move event on the original target, use the current event target as relatedTarget\n    fireMoveEvent(\"dompack:move\", null, event as MouseEvent | TouchEvent, false);\n  }\n\n}\n\n// Handle a (global) mouseup event\nfunction moveMouseUp(event: Event) { // We're a mouse/touch event handler, so we know the event is a MouseEvent or TouchEvent\n  // Check if we have data (we should have, but check just in case)\n  if (moveeventdata) {\n    stop(event);\n    fireMoveEvent(\"dompack:moveend\", null, event as MouseEvent | TouchEvent, false);\n  }\n  // We're done, stop the move action\n  stopMove();\n}\n\nexport function enable(el: EventTarget) {\n  el.addEventListener(\"mousedown\", moveMouseDown);\n  el.addEventListener(\"touchstart\", moveMouseDown);\n}\nexport function disable(el: EventTarget) {\n  el.removeEventListener(\"mousedown\", moveMouseDown);\n  el.removeEventListener(\"touchstart\", moveMouseDown);\n}\n\nexport function cancelMove() {\n  if (moveeventdata)\n    stopMove();\n}\n","import * as dompack from \"dompack\";\nimport * as movable from \"dompack/browserfix/movable\";\n//@ts-ignore we only have this one as a .js\nimport SmartCrop from \"./smartcrop\";\n\nimport { debugFlags } from \"@webhare/env\";\nimport { getTid } from \"@webhare/gettid\";\nimport * as toddImages from \"@mod-tollium/js/icons\";\nimport { type Toolbar, ToolbarButton } from \"@mod-tollium/web/ui/components/toolbar/toolbars\";\n\nimport type { Rect, RectSize, SetStatusCallback, Size } from \"./imageeditor\";\nimport type { ImageSurface } from \"./surface\";\nimport { SurfaceTool } from \"./surfacetool\";\nimport { ImageToolbarPanel } from \"./toolbarpanel\";\n\nconst DraggerPos = Symbol(\"DraggerPos\");\ninterface DraggerElement extends HTMLDivElement {\n  [DraggerPos]: Size;\n}\n\nexport type PhotoCropProps = {\n  crop: number[];\n};\n\ntype PhotoCropOptions = {\n  fixedSize?: RectSize;\n  ratioSize?: RectSize;\n  setStatus?: SetStatusCallback;\n};\n\nclass PhotoCrop extends SurfaceTool {\n  crop: number[] | null = null;\n  aspect = 0;\n  fixedSize?: RectSize;\n  draggers: DraggerElement[] = [];\n  masks: HTMLDivElement[] = [];\n  maskSize: DOMRect | null = null;\n  reference: Size | null = null;\n  cropBox: HTMLDivElement | null = null;\n  gridHolder: HTMLDivElement | null = null;\n  gridAnchor: Rect | null = null;\n  active = false;\n\n  options: PhotoCropOptions;\n  cropPanel: ImageToolbarPanel;\n  autoButton: ToolbarButton;\n\n  constructor(surface: ImageSurface, options?: PhotoCropOptions) {\n    super(surface);\n\n    this.options = {\n      ...options\n    };\n\n    this.cropPanel = new ImageToolbarPanel(\"crop\", {\n      onClose: () => this.stop(),\n      onApply: () => this.apply()\n    });\n    this.autoButton = new ToolbarButton({\n      label: getTid(\"tollium:components.imgedit.editor.smartcrop\"),\n      icon: toddImages.createImage(\"tollium:actions/resetcrop\", 24, 24, \"b\"),\n      onExecute: () => this.smartCrop()\n    });\n    this.cropPanel.addButton(this.autoButton);\n  }\n\n  startCropping(toolbar: Toolbar) {\n    toolbar.activateModalPanel(this.cropPanel);\n    this.surface.hidePreviewCanvas(true);\n    this.start();\n  }\n\n  start() {\n    this.active = false;\n    this.fixedSize = this.options.fixedSize || { width: 0, height: 0 };\n\n    const styles = this.surface.canvas.style.cssText;\n\n    this.cropBox = <div class=\"wh-cropbox\" style={styles} />;\n    this.surface.node.append(this.cropBox!);\n\n    const canvaspos = this.surface.canvas.getBoundingClientRect();\n    this.reference = { x: canvaspos.left, y: canvaspos.top };\n\n    //viewport (used to display 33% grid)\n    this.gridHolder = <div class=\"wh-cropbox-viewport\" />;\n    this.cropBox!.append(this.gridHolder!);\n    movable.enable(this.gridHolder!);\n    this.gridHolder!.addEventListener(\"dompack:move\", evt => this.onDragMove(this.gridHolder!, evt));\n    this.gridHolder!.addEventListener(\"dompack:end\", () => this.gridAnchor = null);\n\n    this.gridHolder!.append(<div class=\"vline1\" />,\n      <div class=\"vline2\" />,\n      <div class=\"hline1\" />,\n      <div class=\"hline2\" />);\n\n    this.maskSize = this.surface.node.getBoundingClientRect();\n\n    //set draggers:\n    this.draggers = [];\n    this.masks = [];\n    for (let c = 0; c < 4; c++) {\n      const dragger: DraggerElement = <div class=\"wh-cropbox-dragger\" />;\n      dragger.classList.add([\"wh-cropbox-dragger-nw\", \"wh-cropbox-dragger-sw\", \"wh-cropbox-dragger-ne\", \"wh-cropbox-dragger-se\"][c]);\n      this.surface.node.parentNode!.append(dragger);\n      this.draggers.push(dragger);\n\n      let pos = { x: 0, y: 0 };\n      if (c === 1)\n        pos = { x: 0, y: this.surface.canvasData!.cssSize.y };\n      else if (c === 2)\n        pos = { x: this.surface.canvasData!.cssSize.x, y: 0 };\n      else if (c === 3)\n        pos = { x: this.surface.canvasData!.cssSize.x, y: this.surface.canvasData!.cssSize.y };\n\n      this.draggers[c][DraggerPos] = pos;\n      Object.assign(this.draggers[c].style, { top: pos.y + 'px', left: pos.x + 'px' });\n\n      movable.enable(this.draggers[c]);\n      this.draggers[c].addEventListener(\"dompack:move\", evt => this.onDragMove(dragger, evt));\n\n      const mask = <div class=\"wh-cropbox-mask\" style={`width: ${this.maskSize.width}px; height: ${this.maskSize.height}px`} />;\n      this.cropBox!.append(mask);\n      this.masks.push(mask);\n    }\n\n    //initial crop values\n    this.crop = [0, 1, 1, 0];\n\n    this.setAspectratio(this.options.ratioSize || 0, () => {\n      this.active = true;\n    });\n  }\n\n  onDragMove(movedNode: DraggerElement | HTMLDivElement, ev: CustomEvent) {\n    let dragNode: DraggerElement | undefined;\n    const moveGrid = !(DraggerPos in movedNode);// dragnode.classList.contains('wh-cropbox-viewport');\n    if (moveGrid) {//get upperleft dragger as reference for grid movement\n      dragNode = this.draggers[0];\n      for (let c = 1; c < this.draggers.length; c++) {\n        if (this.draggers[c][DraggerPos].x < dragNode[DraggerPos].x)\n          dragNode = this.draggers[c];\n        else if (this.draggers[c][DraggerPos].y < dragNode[DraggerPos].y)\n          dragNode = this.draggers[c];\n      }\n\n      if (!this.gridAnchor)//mouse snap position relative to upperleft dragger\n        this.gridAnchor = {\n          left: dragNode[DraggerPos].x - (ev.detail.pageX - this.reference!.x),\n          top: dragNode[DraggerPos].y - (ev.detail.pageY - this.reference!.y),\n          width: this.crop![1] - this.crop![3],\n          height: this.crop![2] - this.crop![0]\n        };\n    } else {\n      this.gridAnchor = null;\n      dragNode = movedNode;\n    }\n\n    //css w/h canvas\n    let width = this.crop![1] * this.surface.canvasData!.cssSize.x - this.crop![3] * this.surface.canvasData!.cssSize.x;\n    let height = this.crop![2] * this.surface.canvasData!.cssSize.y - this.crop![0] * this.surface.canvasData!.cssSize.y;\n\n    //mouse position relative to upperleft viewport\n    let dx = ev.detail.pageX - this.reference!.x;\n    let dy = ev.detail.pageY - this.reference!.y;\n\n    if (this.gridAnchor) {//if moving whole clipbox, compensate mouse position with (start) grab position\n      dx += this.gridAnchor.left;\n      dy += this.gridAnchor.top;\n    }\n\n    //some bounds checks:\n    if (dx < 0)\n      dx = 0;\n    else if (dx > this.surface.canvasData!.cssSize.x)\n      dx = this.surface.canvasData!.cssSize.x;\n\n    if (dy < 0)\n      dy = 0;\n    else if (dy > this.surface.canvasData!.cssSize.y)\n      dy = this.surface.canvasData!.cssSize.y;\n\n    //sortout dragnodes in respect to current dragnode\n    let hPairedNode = null;\n    let vPairedNode = null;\n    let diagonalNode = null;\n    for (let c = 0; c < this.draggers.length; c++) {\n      if (this.draggers[c] !== dragNode) {\n        if (!hPairedNode && this.draggers[c][DraggerPos].y === dragNode[DraggerPos].y && this.draggers[c][DraggerPos].x !== dragNode[DraggerPos].x) {\n          hPairedNode = this.draggers[c];\n        } else if (!vPairedNode && this.draggers[c][DraggerPos].x === dragNode[DraggerPos].x && this.draggers[c][DraggerPos].y !== dragNode[DraggerPos].y) {\n          vPairedNode = this.draggers[c];\n        } else if (!diagonalNode) {\n          diagonalNode = this.draggers[c];\n        }\n      }\n    }\n\n    if (!hPairedNode || !vPairedNode) {//draggers have all the same position\n      hPairedNode = null;//reset\n      vPairedNode = null;\n      diagonalNode = null;\n      //assign directly:\n      for (let c = 0; c < this.draggers.length; c++) {\n        if (this.draggers[c] !== dragNode) {\n          if (!hPairedNode)\n            hPairedNode = this.draggers[c];\n          else if (!vPairedNode)\n            vPairedNode = this.draggers[c];\n          else if (!diagonalNode)\n            diagonalNode = this.draggers[c];\n        }\n      }\n    }\n\n\n    if (!moveGrid && this.aspect > 0 && !(this.fixedSize!.width > 0 || this.fixedSize!.height > 0)) {\n      //use smallest displacement voor ratio correction\n      if (Math.abs(dx - dragNode[DraggerPos].x) < Math.abs(dy - dragNode[DraggerPos].y)) {\n        width = Math.abs(dx - hPairedNode![DraggerPos].x);\n        height = width / this.aspect;\n\n        if (dy < vPairedNode![DraggerPos].y)\n          dy = vPairedNode![DraggerPos].y - height;\n        else if (dy > vPairedNode![DraggerPos].y)\n          dy = vPairedNode![DraggerPos].y + height;\n\n        if (dy < 0)\n          dy = 0;\n        else if (dy > this.surface.canvasData!.cssSize.y)\n          dy = this.surface.canvasData!.cssSize.y;\n      } else {\n        height = Math.abs(dy - vPairedNode![DraggerPos].y);\n        width = height * this.aspect;\n\n        if (dx < hPairedNode![DraggerPos].x)\n          dx = hPairedNode![DraggerPos].x - width;\n        else if (dx > hPairedNode![DraggerPos].x)\n          dx = hPairedNode![DraggerPos].x + width;\n\n        if (dx < 0)\n          dx = 0;\n        else if (dx > this.surface.canvasData!.cssSize.x)\n          dx = this.surface.canvasData!.cssSize.x;\n      }\n    }\n\n    dragNode[DraggerPos] = { x: Math.round(dx), y: Math.round(dy) };\n    hPairedNode![DraggerPos].y = Math.round(dy);\n    vPairedNode![DraggerPos].x = Math.round(dx);\n\n    if (moveGrid) {//moveing clipbox, then keep orginal width/height\n      hPairedNode![DraggerPos].x = Math.round(width + dx);\n      vPairedNode![DraggerPos].y = Math.round(height + dy);\n    }\n\n    //handling of dragnodes if fixed width or height is given\n    if (!moveGrid && (this.fixedSize!.width > 0 || this.fixedSize!.height > 0)) {\n      let fixedWidth = this.fixedSize!.width;\n      let fixedHeight = this.fixedSize!.height;\n      if (this.aspect > 0) {\n        if (fixedWidth <= 0)\n          fixedWidth = fixedHeight * this.aspect;\n        else if (fixedHeight <= 0)\n          fixedHeight = fixedWidth / this.aspect;\n      }\n\n      if (fixedWidth > 0) {\n        width = fixedWidth / (this.surface.canvasData!.scale.x * this.surface.imgData!.scale.x);\n\n        if (hPairedNode![DraggerPos].x < dragNode[DraggerPos].x) {\n          //check bounds\n          if (dragNode[DraggerPos].x - width < 0) {\n            dragNode[DraggerPos].x = Math.round(width);\n            vPairedNode![DraggerPos].x = dragNode[DraggerPos].x;\n          }\n          hPairedNode![DraggerPos].x = Math.round(dragNode[DraggerPos].x - width);\n        } else {\n          hPairedNode![DraggerPos].x = Math.round(dragNode[DraggerPos].x + width);\n        }\n\n      }\n\n      if (fixedHeight > 0) {\n        height = fixedHeight / (this.surface.canvasData!.scale.y * this.surface.imgData!.scale.y);\n        if (vPairedNode![DraggerPos].y < dragNode[DraggerPos].y) {\n          //check bounds\n          if (dragNode[DraggerPos].y - height < 0) {\n            dragNode[DraggerPos].y = Math.round(height);\n            hPairedNode![DraggerPos].y = dragNode[DraggerPos].y;\n          }\n          vPairedNode![DraggerPos].y = Math.round(dragNode[DraggerPos].y - height);\n        } else {\n          vPairedNode![DraggerPos].y = Math.round(dragNode[DraggerPos].y + height);\n        }\n      }\n\n    }\n\n    diagonalNode![DraggerPos] = { x: hPairedNode![DraggerPos].x, y: vPairedNode![DraggerPos].y };\n\n    //sortout positions:\n    let topPx = this.draggers[0][DraggerPos].y;\n    let rightPx = this.draggers[0][DraggerPos].x;\n    let bottomPx = this.draggers[0][DraggerPos].y;\n    let leftPx = this.draggers[0][DraggerPos].x;\n    for (let c = 1; c < this.draggers.length; c++) {\n      if (this.draggers[c][DraggerPos].x > rightPx)\n        rightPx = this.draggers[c][DraggerPos].x;\n\n      if (this.draggers[c][DraggerPos].x < leftPx)\n        leftPx = this.draggers[c][DraggerPos].x;\n\n      if (this.draggers[c][DraggerPos].y < topPx)\n        topPx = this.draggers[c][DraggerPos].y;\n\n      if (this.draggers[c][DraggerPos].y > bottomPx)\n        bottomPx = this.draggers[c][DraggerPos].y;\n    }\n\n    let d;\n    //check if grid is within bounds else correct positions\n    if (rightPx > this.surface.canvasData!.cssSize.x) {\n      d = this.surface.canvasData!.cssSize.x - rightPx;\n      rightPx += d;\n      leftPx += d;\n\n      for (let c = 0; c < this.draggers.length; c++)\n        this.draggers[c][DraggerPos].x += d;\n    }\n    if (bottomPx > this.surface.canvasData!.cssSize.y) {\n      d = this.surface.canvasData!.cssSize.y - bottomPx;\n      bottomPx += d;\n      topPx += d;\n\n      for (let c = 0; c < this.draggers.length; c++)\n        this.draggers[c][DraggerPos].y += d;\n    }\n\n    if (rightPx > this.surface.canvasData!.cssSize.x)\n      rightPx = this.surface.canvasData!.cssSize.x;\n    if (leftPx < 0)\n      leftPx = 0;\n\n    if (bottomPx > this.surface.canvasData!.cssSize.y)\n      bottomPx = this.surface.canvasData!.cssSize.y;\n    if (topPx < 0)\n      topPx = 0;\n\n    this.crop![0] = topPx / this.surface.canvasData!.cssSize.y;\n    this.crop![1] = rightPx / this.surface.canvasData!.cssSize.x;\n    this.crop![2] = bottomPx / this.surface.canvasData!.cssSize.y;\n    this.crop![3] = leftPx / this.surface.canvasData!.cssSize.x;\n\n    //reduce rounding errors of crop size:\n    if (this.fixedSize!.width > 0)\n      this.crop![1] = this.crop![3] + (this.fixedSize!.width / this.surface.canvasData!.realSize.x);\n    if (this.fixedSize!.height > 0)\n      this.crop![2] = this.crop![0] + (this.fixedSize!.height / this.surface.canvasData!.realSize.y);\n    if (moveGrid) {//moving whole grid\n      this.crop![1] = this.crop![3] + this.gridAnchor!.width;\n      this.crop![2] = this.crop![0] + this.gridAnchor!.height;\n    } else if (this.aspect > 0) {\n      if (this.fixedSize!.width === 0) {\n        this.crop![1] = this.crop![3] + ((bottomPx - topPx) * this.aspect) / this.surface.canvasData!.cssSize.x;\n      } else\n        this.crop![2] = this.crop![0] + (rightPx - leftPx) / (this.aspect * this.surface.canvasData!.cssSize.y);\n    }\n\n    this.showCrop();\n  }\n\n  setAspectratio(aspect: number | RectSize, callback?: (size: RectSize) => void) {\n    let crop = null;\n    if (typeof aspect === \"object\") {\n      crop = aspect;\n      if (!crop || !crop.width || !crop.height)\n        aspect = 0;\n      else\n        aspect = crop.width / crop.height;\n    }\n\n    this.aspect = aspect > 0 ? aspect : 0;\n\n    const maxWidth = this.fixedSize!.width > 0 ? this.fixedSize!.width : crop ? crop.width : this.surface.canvasData!.realSize.x;\n    const maxHeight = this.fixedSize!.height > 0 ? this.fixedSize!.height : crop ? crop.height : this.surface.canvasData!.realSize.y;\n    let width = maxWidth;\n    let height = maxHeight;\n\n    if (this.aspect > 0) {//set crop to optimal fit\n      height = Math.round(width / this.aspect);\n      if (height > maxHeight) {\n        height = maxHeight;\n        width = Math.round(height * this.aspect);\n      }\n\n      if (this.fixedSize!.width > 0 || this.fixedSize!.height > 0)\n        this.fixedSize = { 'width': width, 'height': height };\n    }\n\n    if (!this.surface.setBusy(true))\n      return;\n\n    const options = {\n      width: width || this.surface.canvasData!.realSize.x,\n      height: height || this.surface.canvasData!.realSize.y,\n      debug: debugFlags.isc\n    };\n    SmartCrop.crop(this.surface.canvas, options, (result: { topCrop: { x: number; y: number; width: number; height: number } }) => {\n      //ADDME:      if (options.debug && result.debugCanvas)\n      //        this.tmpcanvas.getContext(\"2d\").drawImage(result.debugCanvas, 0, 0, this.tmpcanvas.width, this.tmpcanvas.height);\n      this.setClipValues(result.topCrop.x, result.topCrop.y, result.topCrop.y + result.topCrop.height, result.topCrop.x + result.topCrop.width);\n      this.showCrop();\n      this.surface.setBusy(false);\n      if (callback)\n        callback({ 'width': result.topCrop.width, 'height': result.topCrop.height });\n    });\n  }\n\n  smartCrop(callback?: (size: RectSize) => void) {\n    this.setAspectratio(this.options.ratioSize || 0, callback);\n  }\n\n  setClipValues(leftPx: number, topPx: number, bottomPx: number, rightPx: number) {\n    this.crop![0] = topPx / this.surface.canvasData!.realSize.y;\n    this.crop![1] = rightPx / this.surface.canvasData!.realSize.x;\n    this.crop![2] = bottomPx / this.surface.canvasData!.realSize.y;\n    this.crop![3] = leftPx / this.surface.canvasData!.realSize.x;\n\n    //covert to css positions current canvas\n    topPx = Math.round(topPx / (this.surface.imgData!.scale.y * this.surface.canvasData!.scale.y));\n    rightPx = Math.round(rightPx / (this.surface.imgData!.scale.x * this.surface.canvasData!.scale.x));\n    bottomPx = Math.round(bottomPx / (this.surface.imgData!.scale.y * this.surface.canvasData!.scale.y));\n    leftPx = Math.round(leftPx / (this.surface.imgData!.scale.x * this.surface.canvasData!.scale.x));\n\n    this.draggers[0][DraggerPos] = { x: leftPx, y: topPx };\n    this.draggers[1][DraggerPos] = { x: leftPx, y: bottomPx };\n    this.draggers[2][DraggerPos] = { x: rightPx, y: topPx };\n    this.draggers[3][DraggerPos] = { x: rightPx, y: bottomPx };\n  }\n\n  setClipCenterValues(w: number, h: number) {\n    const leftPx = 0.5 * (this.surface.canvasData!.realSize.x - w);\n    const topPx = 0.5 * (this.surface.canvasData!.realSize.y - h);\n    const bottomPx = topPx + h;\n    const rightPx = leftPx + w;\n    this.setClipValues(leftPx, topPx, bottomPx, rightPx);\n  }\n\n  setWidth(width: number, fixed: boolean) {\n    const inputWidth = Math.round(width);\n\n    if (width > this.surface.canvasData!.realSize.x)\n      width = this.surface.canvasData!.realSize.x;\n    let height = Math.round(this.crop![2] * this.surface.canvasData!.realSize.y - this.crop![0] * this.surface.canvasData!.realSize.y);\n\n    if (this.aspect > 0 && width > 0) {\n      //calc maximal width by given aspectratio\n      let aw = this.surface.canvasData!.realSize.x;\n      let ah = aw / this.aspect;\n      if (ah > this.surface.canvasData!.realSize.y) {\n        ah = this.surface.canvasData!.realSize.y;\n        aw = ah * this.aspect;\n      }\n      if (width > aw)\n        width = aw;\n\n      height = width / this.aspect;\n    }\n\n    if (width < 0)\n      width = 0;\n\n    width = Math.round(width);\n    height = Math.round(height);\n\n    const isValid = inputWidth === width;\n    if (isValid) {\n      if (fixed) {\n        if (this.fixedSize!.height > 0 && this.fixedSize!.height !== height)\n          this.fixedSize!.height = height;\n        this.fixedSize!.width = width;\n      }\n\n      if (width > 0) {//resize clip area\n        this.setClipCenterValues(width, height);\n        this.showCrop();\n      }\n    }\n\n    return isValid;\n  }\n\n  setHeight(height: number, fixed: boolean) {\n    const inputHeight = Math.round(height);\n\n    if (height > this.surface.canvasData!.realSize.y)\n      height = this.surface.canvasData!.realSize.y;\n    let width = Math.round(this.crop![1] * this.surface.canvasData!.realSize.x - this.crop![3] * this.surface.canvasData!.realSize.x);\n\n    if (this.aspect > 0 && height > 0) {\n      //calc maximal height by given aspectratio\n      let aw = this.surface.canvasData!.realSize.x;\n      let ah = aw / this.aspect;\n      if (ah > this.surface.canvasData!.realSize.y) {\n        ah = this.surface.canvasData!.realSize.y;\n        aw = ah * this.aspect;\n      }\n      if (height > ah)\n        height = ah;\n\n      width = height * this.aspect;\n    }\n\n    if (height < 0)\n      height = 0;\n\n    width = Math.round(width);\n    height = Math.round(height);\n\n    const isValid = inputHeight === height;\n    if (isValid) {\n      if (fixed) {\n        if (this.fixedSize!.width > 0 && this.surface.canvasData!.realSize.x !== width)\n          this.fixedSize!.width = width;\n        this.fixedSize!.height = height;\n      }\n      if (height > 0) {//resize clip area\n        this.setClipCenterValues(width, height);\n        this.showCrop();\n      }\n    }\n\n    return isValid;\n  }\n\n  showCrop() {\n    let x1 = this.draggers[0][DraggerPos].x;\n    let y1 = this.draggers[0][DraggerPos].y;\n    let x2 = x1;\n    let y2 = y1;\n\n    const cropboxOffset = dompack.getRelativeBounds(this.cropBox!, this.draggers[0].offsetParent!);\n    for (let c = 0; c < this.draggers.length; c++) {\n      this.draggers[c].style.top = this.draggers[c][DraggerPos].y + cropboxOffset.top + 'px';\n      this.draggers[c].style.left = this.draggers[c][DraggerPos].x + cropboxOffset.left + 'px';\n\n      if (c > 0) {\n        if (this.draggers[c][DraggerPos].x > x2)\n          x2 = this.draggers[c][DraggerPos].x;\n\n        if (this.draggers[c][DraggerPos].x < x1)\n          x1 = this.draggers[c][DraggerPos].x;\n\n        if (this.draggers[c][DraggerPos].y < y1)\n          y1 = this.draggers[c][DraggerPos].y;\n\n        if (this.draggers[c][DraggerPos].y > y2)\n          y2 = this.draggers[c][DraggerPos].y;\n      }\n    }\n\n    Object.assign(this.gridHolder!.style, {\n      top: y1 + 'px',\n      right: x2 + 'px',\n      bottom: y2 + 'px',\n      left: x1 + 'px',\n      width: (x2 - x1) + 'px',\n      height: (y2 - y1) + 'px'\n    });\n\n    const canvasScale = Math.max(0, this.surface.canvasData!.realSize.x / this.surface.viewPort!.x, this.surface.canvasData!.realSize.y / this.surface.viewPort!.y);\n    if (this.options.setStatus)\n      this.options.setStatus(Math.round((x2 - x1) * canvasScale), Math.round((y2 - y1) * canvasScale), this.surface.canvasData!.realSize.x, this.surface.canvasData!.realSize.y);\n\n    this.masks[0].style.top = (y2 - this.maskSize!.height) + \"px\";\n    this.masks[0].style.left = (x1 - this.maskSize!.width) + \"px\";\n    this.masks[1].style.top = (y1 - this.maskSize!.height) + \"px\";\n    this.masks[1].style.left = x1 + \"px\";\n    this.masks[2].style.top = y1 + \"px\";\n    this.masks[2].style.left = x2 + \"px\";\n    this.masks[3].style.top = y2 + \"px\";\n    this.masks[3].style.left = (x2 - this.maskSize!.width) + \"px\";\n  }\n\n  stop() {\n    this.surface.showPreviewCanvas();\n    this.cropBox!.remove();\n    this.refreshSurface();\n  }\n\n  apply() {\n    this.surface.showPreviewCanvas();\n    if (this.crop![0] === 0 && this.crop![1] === 1 && this.crop![2] === 1 && this.crop![3] === 0)\n      return; //no changes\n\n    this.applyCanvas({ crop: this.crop! });\n    this.surface.pushUndo({ action: \"crop\", comp: this, props: { crop: this.crop! }/* , width: this.surface.canvas.width, height: this.surface.canvas.height */, meta: false });\n    this.refreshSurface();\n  }\n\n  applyCanvas(props: PhotoCropProps) { //props is an array with top,right,bottom,left fractions (0..1)\n    const newWidth = Math.round(props.crop[1] * this.surface.canvas.width - props.crop[3] * this.surface.canvas.width);\n    const newHeight = Math.round(props.crop[2] * this.surface.canvas.height - props.crop[0] * this.surface.canvas.height);\n\n    //crop image\n    const imgData = this.surface.ctx!.getImageData(Math.round(props.crop[3] * this.surface.canvas.width), Math.round(props.crop[0] * this.surface.canvas.height), newWidth, newHeight);\n    this.surface.canvas.width = newWidth;\n    this.surface.canvas.height = newHeight;\n    this.surface.ctx!.putImageData(imgData, 0, 0);\n\n    //correct css styling:\n    const canvasScaleX = newWidth / this.surface.viewPort!.x;\n    const canvasScaleY = newHeight / this.surface.viewPort!.y;\n    let canvasscale = canvasScaleX > canvasScaleY ? canvasScaleX : canvasScaleY;\n    if (canvasscale < 1)\n      canvasscale = 1;//don't scale up\n    this.surface.canvasScale = 1 / canvasscale;\n\n    const cssWidth = Math.round(newWidth / canvasscale);\n    const cssHeight = Math.round(newHeight / canvasscale);\n    this.surface.canvasData!.cssSize = { 'x': cssWidth, 'y': cssHeight };\n    this.surface.canvasData!.scale = { 'x': (newWidth / cssWidth), 'y': (newHeight / cssHeight) };\n    //this.surface.canvasData!.realSize = {'x' : Math.round(props.crop[1]*imgedit.canvasdata.realSize.x - props.crop[3]*imgedit.canvasdata.realSize.x), 'y' : Math.round(props.crop[2]*imgedit.canvasdata.realSize.y - props.crop[0]*imgedit.canvasdata.realSize.y)};\n\n    Object.assign(this.surface.canvas.style, {\n      width: this.surface.canvasData!.cssSize.x + 'px',\n      height: this.surface.canvasData!.cssSize.y + 'px',\n      marginLeft: Math.floor(this.surface.canvasData!.cssSize.x * -0.5) + 'px',\n      marginTop: Math.floor(this.surface.canvasData!.cssSize.y * -0.5) + 'px'\n    });\n    this.surface.showScale();\n  }\n}\n\nexport type { PhotoCrop };\n\nexport function addImageCropButton(toolbar: Toolbar, surface: ImageSurface, options?: PhotoCropOptions) {\n  const cropper = new PhotoCrop(surface, options);\n\n  const button = new ToolbarButton({\n    label: getTid(\"tollium:components.imgedit.editor.crop\"),\n    icon: toddImages.createImage(\"tollium:actions/crop\", 24, 24, \"b\"),\n    onExecute: () => cropper.startCropping(toolbar)\n  });\n  toolbar.addButton(button);\n\n  return { button, comp: cropper };\n}\n","import type { ImageSurface } from \"./surface\";\n\nexport class SurfaceTool {\n  surface: ImageSurface;\n\n  constructor(surface: ImageSurface) {\n    this.surface = surface;\n  }\n\n  refreshSurface() {\n    this.surface.fireEvent(\"refresh\");\n  }\n}\n","import { ToolbarPanel, type ToolbarPanelOptions } from \"@mod-tollium/web/ui/components/toolbar/toolbars\";\n\nexport class ImageToolbarPanel extends ToolbarPanel {\n  imageEditTool: string;\n\n  constructor(tool: string, options?: ToolbarPanelOptions) {\n    super(options);\n    this.imageEditTool = tool;\n  }\n}\n","import * as dompack from \"dompack\";\nimport * as movable from \"dompack/browserfix/movable\";\nimport Keyboard from \"dompack/extra/keyboard\";\n\nimport { getTid } from \"@webhare/gettid\";\nimport * as toddImages from \"@mod-tollium/js/icons\";\nimport { ToolbarButton, type Toolbar } from \"@mod-tollium/web/ui/components/toolbar/toolbars\";\nimport type { RefPoint } from \"@mod-tollium/web/ui/js/dialogs/imgeditcontroller\";\n\nimport type { ImageSurface } from \"./surface\";\nimport { SurfaceTool } from \"./surfacetool\";\nimport type { Size } from \"./imageeditor\";\nimport { ImageToolbarPanel } from \"./toolbarpanel\";\n\n// Set to true to activate 'inline' mode, without the modal toolbar\nconst tool_inline = false;\n\nlet buttonicon: HTMLImageElement;\n\nexport type PhotoPointProps = {\n  refPoint: Size | null;\n};\n\ntype PhotoPointOptions = object; // no options yet\n\nclass PhotoPoint extends SurfaceTool {\n  refPoint: RefPoint | null = null;\n  reference: {\n    abspos: Size;\n    relpos: Size;\n    imgsize: Size;\n    canvasscale: number;\n  } | null = null;\n  isActive = false;\n  activated = false;\n  options: PhotoPointOptions;\n  refPointPanel: ImageToolbarPanel;\n  deleteButton: ToolbarButton;\n  keyboard: Keyboard;\n  _setPoint: (event: MouseEvent) => void;\n  refPointer: HTMLDivElement | null = null;\n\n  constructor(surface: ImageSurface, options?: PhotoPointOptions) {\n    super(surface);\n\n    this.options = { ...options };\n\n    this.refPointPanel = new ImageToolbarPanel(\"refpoint\", {\n      onClose: () => this.stop(),\n      onApply: () => this.apply()\n    });\n\n    this.deleteButton = new ToolbarButton({\n      label: getTid(\"tollium:components.imgedit.editor.delrefpoint\"),\n      icon: toddImages.createImage(\"tollium:actions/delete\", 24, 24, \"b\"),\n      onExecute: () => this.clearPoint()\n    });\n    this.refPointPanel.addButton(this.deleteButton);\n\n    this._setPoint = (event: MouseEvent) => this.setPoint(event);\n    this.keyboard = new Keyboard(this.surface.node, { Delete: () => this.clearPoint() });\n    if (tool_inline) {\n      this.surface.eventTarget.addEventListener(\"tollium-imageeditor:reset\", () => this.resetPoint());\n      this.surface.eventTarget.addEventListener(\"tollium-imageeditor:showpreview\", () => this.activate(true));\n      this.surface.eventTarget.addEventListener(\"tollium-imageeditor:hidepreview\", () => this.activate(false));\n    } else {\n      this.surface.eventTarget.addEventListener(\"tollium-imageeditor:updatepreview\", (evt: Event) => this.previewCanvasChanged(evt as CustomEvent));\n    }\n  }\n\n  togglePointing(button: ToolbarButton) {\n    if (!this.isActive) {\n      this.start();\n      toddImages.updateImage(buttonicon, \"tollium:actions/reference\", 24, 24, \"w\");\n    } else {\n      this.stop();\n      toddImages.updateImage(buttonicon, \"tollium:actions/reference\", 24, 24, \"b\");\n    }\n    button.setPressed(this.isActive);\n  }\n\n  start(toolbar?: Toolbar) {\n    if (!tool_inline)\n      toolbar!.activateModalPanel(this.refPointPanel); // toolbar is only undefined when tool_inline = true\n    this.refPoint = this.surface.refPoint;\n    this.isActive = true;\n\n    this.updateRefs();\n\n    this.refPointer = <div class=\"wh-refbox-pointer\" />;\n    movable.enable(this.refPointer!);\n    this.refPointer!.addEventListener(\"dompack:movestart\", (evt: movable.DompackMoveEvent) => this.moveStart(evt));\n    this.refPointer!.addEventListener(\"dompack:move\", (evt: movable.DompackMoveEvent) => this.move(evt));\n    this.refPointer!.addEventListener(\"dompack:moveend\", (evt: movable.DompackMoveEvent) => this.moveEnd(evt));\n\n    this.activate(true);\n  }\n\n  stop() {\n    this.activate(false);\n    this.isActive = false;\n\n    if (this.refPointer)\n      this.refPointer.remove();\n    this.refPointer = null;\n    this.refreshSurface();\n  }\n\n  apply(fireApply?: boolean) {\n    this.applyCanvas({ refPoint: this.refPoint });\n    if (fireApply !== false) {\n      this.surface.pushUndo({ action: \"refpoint\", comp: this, props: { refPoint: this.refPoint }, meta: true }, tool_inline);\n    }\n  }\n\n  applyCanvas(props: PhotoPointProps) {\n    this.refPoint = props.refPoint;\n    this.surface.refPoint = this.refPoint;\n    this.refreshSurface();\n    this.updatePoint();\n  }\n\n  activate(active: boolean) {\n    if (!this.isActive)\n      return;\n\n    if (active !== this.activated) {\n      const canvas = this.surface.previewCanvas || this.surface.canvas;\n      this.activated = active;\n      if (active) {\n        canvas.addEventListener(\"click\", this._setPoint);\n        this.surface.node.classList.add(\"wh-refbox\");\n        this.updatePoint();\n      } else {\n        canvas.removeEventListener(\"click\", this._setPoint);\n        this.surface.node.classList.remove(\"wh-refbox\");\n        this.updatePoint(true);\n      }\n    }\n  }\n\n  previewCanvasChanged(event: CustomEvent) {\n    if (this.activated && event.detail.oldcanvas) {\n      event.detail.oldcanvas.removeEventListener(\"click\", this._setPoint);\n      const canvas = this.surface.previewCanvas || this.surface.canvas;\n      canvas.addEventListener(\"click\", this._setPoint);\n    }\n  }\n\n  moveStart(event: movable.DompackMoveEvent) {\n    event.stopPropagation();\n    this.updateRefs();\n  }\n\n  move(event: movable.DompackMoveEvent) {\n    event.stopPropagation();\n    const x = Math.max(this.reference!.relpos.x, Math.min(this.reference!.imgsize.x + this.reference!.relpos.x, Math.round(this.refPoint!.x * this.reference!.canvasscale) + event.detail.movedX + this.reference!.relpos.x));\n    const y = Math.max(this.reference!.relpos.y, Math.min(this.reference!.imgsize.y + this.reference!.relpos.y, Math.round(this.refPoint!.y * this.reference!.canvasscale) + event.detail.movedY + this.reference!.relpos.y));\n    Object.assign(this.refPointer!.style, { left: x + \"px\", top: y + \"px\" });\n  }\n\n  moveEnd(event: movable.DompackMoveEvent) {\n    event.stopPropagation();\n    this.refPoint = {\n      x: (parseInt(getComputedStyle(this.refPointer!).left) - this.reference!.relpos.x) / this.reference!.canvasscale,\n      y: (parseInt(getComputedStyle(this.refPointer!).top) - this.reference!.relpos.y) / this.reference!.canvasscale\n    };\n    this.apply(tool_inline);\n  }\n\n  updateRefs() {\n    const canvas = this.surface.previewCanvas || this.surface.canvas;\n    const canvaspos = canvas.getBoundingClientRect();\n    const surfacepos = this.surface.node.getBoundingClientRect();\n    this.reference = {\n      abspos: { x: canvaspos.left, y: canvaspos.top },\n      relpos: { x: canvaspos.left - surfacepos.left, y: canvaspos.top - surfacepos.top },\n      imgsize: { x: canvaspos.width, y: canvaspos.height },\n      canvasscale: 1\n    };\n    this.reference.canvasscale = this.reference.imgsize.x / this.surface.canvasData!.realSize.x;\n  }\n\n  updatePoint(hide?: boolean) {\n    if (!this.refPointer)\n      return;\n    this.updateRefs();\n    if (!hide && this.refPoint) {\n      Object.assign(this.refPointer.style, {\n        left: Math.round(this.refPoint.x * this.reference!.canvasscale + this.reference!.relpos.x) + \"px\",\n        top: Math.round(this.refPoint.y * this.reference!.canvasscale + this.reference!.relpos.y) + \"px\"\n      });\n      this.surface.node.append(this.refPointer);\n    } else {\n      this.refPointer.remove();\n    }\n  }\n\n  setPoint(event: MouseEvent) {\n    this.refPoint = {\n      x: (event.clientX - this.reference!.abspos.x) / this.reference!.canvasscale,\n      y: (event.clientY - this.reference!.abspos.y) / this.reference!.canvasscale\n    };\n    this.apply(tool_inline);\n  }\n\n  clearPoint() {\n    if (!this.isActive)\n      return;\n    this.refPoint = null;\n    this.apply(tool_inline);\n  }\n\n  resetPoint() {\n    this.refPoint = this.surface.refPoint;\n    if (this.isActive)\n      this.updatePoint();\n  }\n}\n\nexport type { PhotoPoint };\n\nexport function addRefPointButton(toolbar: Toolbar, surface: ImageSurface, options?: PhotoPointOptions) {\n  const pointer = new PhotoPoint(surface, options);\n\n  buttonicon = toddImages.createImage(\"tollium:actions/reference\", 24, 24, \"b\");\n  const button = new ToolbarButton({\n    label: getTid(\"tollium:components.imgedit.editor.refpoint\"),\n    icon: buttonicon\n  });\n\n  if (tool_inline)\n    button.node.addEventListener(\"execute\", () => pointer.togglePointing(button));\n  else\n    button.node.addEventListener(\"execute\", () => pointer.start(toolbar));\n  toolbar.addButton(button);\n\n  return { button: button, comp: pointer };\n}\n","import { getTid } from \"@webhare/gettid\";\nimport * as toddImages from \"@mod-tollium/js/icons\";\nimport { ToolbarButton, ToolbarSeparator, type Toolbar } from \"@mod-tollium/web/ui/components/toolbar/toolbars\";\n\nimport type { SetStatusCallback, Size } from \"./imageeditor\";\nimport type { ImageSurface } from \"./surface\";\nimport { SurfaceTool } from \"./surfacetool\";\nimport { ImageToolbarPanel } from \"./toolbarpanel\";\n\ntype PhotoRotateOptions = {\n  setStatus?: SetStatusCallback;\n};\n\nexport type PhotoRotateProps = {\n  angle: number;\n  scale: Size;\n};\n\nclass PhotoRotate extends SurfaceTool {\n  options: PhotoRotateOptions;\n  angle = 0;\n  scale = { x: 1, y: 1 };\n  active = false;\n  canvasScale = 1;\n  scalePanel: ImageToolbarPanel;\n  toolbar?: Toolbar;\n\n  constructor(surface: ImageSurface, options?: PhotoRotateOptions) {\n    super(surface);\n\n    console.log(`new rotator`, surface, options);\n\n    this.options = {\n      ...options\n    };\n\n    this.scalePanel = new ImageToolbarPanel(\"rotate\", {\n      onClose: () => this.stop(),\n      onApply: () => this.apply()\n    });\n    this.scalePanel.addButton(new ToolbarButton({\n      label: getTid(\"tollium:components.imgedit.editor.rotateleft\"),\n      icon: toddImages.createImage(\"tollium:actions/rotateleft\", 24, 24, \"b\"),\n      onExecute: () => this.rotate(-90)\n    }));\n    this.scalePanel.addButton(new ToolbarButton({\n      label: getTid(\"tollium:components.imgedit.editor.rotateright\"),\n      icon: toddImages.createImage(\"tollium:actions/rotateright\", 24, 24, \"b\"),\n      onExecute: () => this.rotate(90)\n    }));\n    this.scalePanel.addButton(new ToolbarSeparator);\n    this.scalePanel.addButton(new ToolbarButton({\n      label: getTid(\"tollium:components.imgedit.editor.fliphorizontal\"),\n      icon: toddImages.createImage(\"tollium:actions/fliphorizontal\", 24, 24, \"b\"),\n      onExecute: () => this.fliphorizontal()\n    }));\n    this.scalePanel.addButton(new ToolbarButton({\n      label: getTid(\"tollium:components.imgedit.editor.flipvertical\"),\n      icon: toddImages.createImage(\"tollium:actions/flipvertical\", 24, 24, \"b\"),\n      onExecute: () => this.flipvertical()\n    }));\n  }\n\n  startScaling(toolbar: Toolbar) {\n    this.toolbar = toolbar;\n    toolbar.activateModalPanel(this.scalePanel);\n    this.surface.hidePreviewCanvas();\n    this.start();\n  }\n\n  start() {\n\n    //initial values\n    this.angle = 0;\n    this.scale = { x: 1, y: 1 };\n\n    //what scale to use to fit image on canvas in current position\n    const canvasscalex = this.surface.canvas.width / this.surface.viewPort!.x;\n    const canvasscaley = this.surface.canvas.height / this.surface.viewPort!.y;\n    this.canvasScale = canvasscalex > canvasscaley ? canvasscalex : canvasscaley;\n\n    //what scale if rotated 90deg.:\n    const canvasscalexr = this.surface.canvas.width / this.surface.viewPort!.y;\n    const canvasscaleyr = this.surface.canvas.height / this.surface.viewPort!.x;\n    this.canvasScale = canvasscalexr > this.canvasScale ? canvasscalexr : this.canvasScale;\n    this.canvasScale = canvasscaleyr > this.canvasScale ? canvasscaleyr : this.canvasScale;\n    if (this.canvasScale < 1)\n      this.canvasScale = 1;//don't scale up\n    this.surface.showScale(1 / this.canvasScale);\n\n    this.active = true;\n\n    //resize canvas so it fits if rotated\n    const cssw = Math.round(this.surface.canvas.width / this.canvasScale);\n    const cssh = Math.round(this.surface.canvas.height / this.canvasScale);\n    this.surface.canvasData!.cssSize = { 'x': cssw, 'y': cssh };\n    this.surface.canvasData!.scale = { 'x': (this.surface.canvas.width / cssw), 'y': (this.surface.canvas.height / cssh) };\n\n    Object.assign(this.surface.canvas.style, {\n      width: this.surface.canvasData!.cssSize.x + 'px',\n      height: this.surface.canvasData!.cssSize.y + 'px',\n      marginLeft: Math.ceil(this.surface.canvasData!.cssSize.x * -0.5) + 'px',\n      marginTop: Math.ceil(this.surface.canvasData!.cssSize.y * -0.5) + 'px'\n    });\n    this.surface.updateMaskCanvas();\n\n    this.setStatus();\n  }\n\n  stop() {\n    this.surface.showPreviewCanvas();\n\n    this.scale = { x: 1, y: 1 };\n    this.angle = 0;\n    this.rotate(0);\n\n    //what scale to use to fit image on canvas in current position\n    const canvasscalex = this.surface.canvas.width / this.surface.viewPort!.x;\n    const canvasscaley = this.surface.canvas.height / this.surface.viewPort!.y;\n    this.canvasScale = canvasscalex > canvasscaley ? canvasscalex : canvasscaley;\n    if (this.canvasScale < 1)\n      this.canvasScale = 1;//don't scale up\n\n    this.active = false;\n    //resize canvas so it fits if rotated\n\n    const cssw = Math.round(this.surface.canvas.width / this.canvasScale);\n    const cssh = Math.round(this.surface.canvas.height / this.canvasScale);\n    this.surface.canvasData!.cssSize = { 'x': cssw, 'y': cssh };\n    this.surface.canvasData!.scale = { 'x': (this.surface.canvas.width / cssw), 'y': (this.surface.canvas.height / cssh) };\n\n    Object.assign(this.surface.canvas.style, {\n      width: this.surface.canvasData!.cssSize.x + 'px',\n      height: this.surface.canvasData!.cssSize.y + 'px',\n      marginLeft: Math.ceil(this.surface.canvasData!.cssSize.x * -0.5) + 'px',\n      marginTop: Math.ceil(this.surface.canvasData!.cssSize.y * -0.5) + 'px'\n    });\n    this.surface.updateMaskCanvas();\n    this.refreshSurface();\n  }\n\n  apply() {\n    this.surface.showPreviewCanvas();\n    this.active = false;\n\n    if (this.angle === 0 && this.scale.x === 1 && this.scale.y === 1)\n      return;//no changes\n\n    const newprops = { angle: this.angle, scale: this.scale };\n    this.applyCanvas(newprops);\n\n    this.surface.pushUndo({ action: \"rotate\", comp: this, props: newprops, meta: false });\n\n    //and setback initial values:\n    this.scale = { x: 1, y: 1 };\n    this.angle = 0;\n    this.rotate(0);\n  }\n\n  applyCanvas(props: PhotoRotateProps) {\n    let newWidth = this.surface.canvas.width;\n    let newHeight = this.surface.canvas.height;\n    if (Math.round(Math.cos(props.angle * Math.PI / 180) * 100) === 0) {//rotated 90 or 270 deg.\n      newWidth = this.surface.canvas.height;\n      newHeight = this.surface.canvas.width;\n\n      //switch scalefactors\n      const scaleX = this.surface.imgData!.scale.x;\n      this.surface.imgData!.scale.x = this.surface.imgData!.scale.y;\n      this.surface.imgData!.scale.y = scaleX;\n\n      const rx = this.surface.canvasData!.realSize.x;\n      this.surface.canvasData!.realSize.x = this.surface.canvasData!.realSize.y;\n      this.surface.canvasData!.realSize.y = rx;\n    } else if (Math.round(Math.sin(props.angle * Math.PI / 180) * 100) === 0) {//rotated 0 or 360 deg.\n      //no change in dimensions\n    } else {//arbitrary angle\n      //FIXME?\n    }\n\n    let copy;\n    if (newWidth !== this.surface.canvas.width) {//resize canvas to fit image\n      //Copy image\n\n      let imgData = this.surface.ctx!.getImageData(0, 0, this.surface.canvas.width, this.surface.canvas.height);\n      this.surface.ctx!.clearRect(0, 0, this.surface.canvas.width, this.surface.canvas.height);\n\n      const prevWidth = this.surface.canvas.width;\n      const prevHeight = this.surface.canvas.height;\n\n      //set needed canvas size to fit rotation\n      const max = newHeight > newWidth ? newHeight : newWidth;\n      this.surface.canvas.width = max;\n      this.surface.canvas.height = max;\n      this.surface.ctx!.putImageData(imgData, Math.floor(0.5 * (max - prevWidth)), Math.floor(0.5 * (max - prevHeight)), 0, 0, prevWidth, prevHeight);\n\n      copy = this.surface.cloneCanvas({ clearOriginal: true })!;\n\n      //Rotate and or flip canvas\n      this.surface.ctx!.save();\n      this.surface.ctx!.setTransform(1, 0, 0, 1, 0, 0);\n      this.surface.ctx!.translate(this.surface.canvas.width / 2, this.surface.canvas.height / 2);\n      this.surface.ctx!.scale(props.scale.x, props.scale.y);//scaling is -1 or 1 (flip vertical/horizontal)\n      this.surface.ctx!.rotate(props.angle * Math.PI / 180);\n\n      //        this.surface.ctx!.globalCompositeOperation = 'copy';//disabled because of bug in webkit\n      // as far we use steps of 90deg. this is no problem because we crop the image after rotation\n      // will be an issue if we use free rotation\n      this.surface.ctx!.drawImage(copy.canvas, -this.surface.canvas.width / 2, -this.surface.canvas.height / 2);\n      this.surface.ctx!.restore();\n\n      //crop the transparent parts\n      imgData = this.surface.ctx!.getImageData(Math.floor(0.5 * (max - newWidth)), Math.floor(0.5 * (max - newHeight)), newWidth, newHeight);\n      this.surface.ctx!.clearRect(0, 0, this.surface.canvas.width, this.surface.canvas.height);\n\n      this.surface.canvas.width = newWidth;\n      this.surface.canvas.height = newHeight;\n      this.surface.ctx!.putImageData(imgData, 0, 0);\n    } else {\n      copy = this.surface.cloneCanvas({ clearOriginal: true })!;\n\n      this.surface.ctx!.save();\n      this.surface.ctx!.setTransform(1, 0, 0, 1, 0, 0);\n      this.surface.ctx!.translate(this.surface.canvas.width / 2, this.surface.canvas.height / 2);\n      this.surface.ctx!.scale(props.scale.x, props.scale.y);//scaling is -1 or 1 (flip vertical/horizontal)\n      this.surface.ctx!.rotate(props.angle * props.scale.x * props.scale.y * Math.PI / 180);//to rotate correct direction, multiply with scaling which is -1 or 1 (flip vertical/horizontal)\n\n      this.surface.ctx!.drawImage(copy.canvas, -this.surface.canvas.width / 2, -this.surface.canvas.height / 2);\n      this.surface.ctx!.restore();\n    }\n\n    if (!this.active) {//used if direct call from history\n      //what scale to use to fit image on canvas in current position\n      const canvasscalex = this.surface.canvas.width / this.surface.viewPort!.x;\n      const canvasscaley = this.surface.canvas.height / this.surface.viewPort!.y;\n      this.canvasScale = canvasscalex > canvasscaley ? canvasscalex : canvasscaley;\n      if (this.canvasScale < 1)\n        this.canvasScale = 1;//don't scale up\n    }\n    this.surface.canvasScale = 1 / this.canvasScale;\n\n    //correct css position/dimensions\n    const cssWidth = Math.round(this.surface.canvas.width / this.canvasScale);\n    const cssHeight = Math.round(this.surface.canvas.height / this.canvasScale);\n\n    this.surface.canvasData!.cssSize = { 'x': cssWidth, 'y': cssHeight };\n    this.surface.canvasData!.scale = { 'x': (this.surface.canvas.width / cssWidth), 'y': (this.surface.canvas.height / cssHeight) };\n\n    Object.assign(this.surface.canvas.style, {\n      width: this.surface.canvasData!.cssSize.x + 'px',\n      height: this.surface.canvasData!.cssSize.y + 'px',\n      marginLeft: Math.ceil(this.surface.canvasData!.cssSize.x * -0.5) + 'px',\n      marginTop: Math.ceil(this.surface.canvasData!.cssSize.y * -0.5) + 'px'\n    });\n    this.surface.updateMaskCanvas();\n    this.surface.showScale();\n    this.refreshSurface();\n  }\n\n  fliphorizontal() {\n    this.scale.x *= -1;\n    this.rotate(0);\n    this.setStatus();\n  }\n\n  flipvertical() {\n    this.scale.y *= -1;\n    this.rotate(0);\n    this.setStatus();\n  }\n\n  rotate(degrees: number) {\n    this.angle += degrees;\n    this.angle -= Math.floor(this.angle / 360) * 360;//keep range between 0 and 360\n\n    this.surface.canvas.style.transform = 'scale(' + this.scale.x + ',' + this.scale.y + ') rotate(' + this.angle + 'deg)';\n\n    this.setStatus();\n  }\n\n  setStatus() {\n    if (!this.active)\n      return;\n    let newWidth = this.surface.canvas.width;\n    let newHeight = this.surface.canvas.height;\n    if (Math.round(Math.cos(this.angle * Math.PI / 180) * 100) === 0) {//rotated 90 or 270 deg.\n      newWidth = this.surface.canvas.height;\n      newHeight = this.surface.canvas.width;\n      this.surface.updateMaskCanvas({\n        left: Math.floor((this.surface.maskCanvas.width - this.surface.canvasData!.cssSize.y) / 2),\n        top: Math.floor((this.surface.maskCanvas.height - this.surface.canvasData!.cssSize.x) / 2),\n        width: this.surface.canvasData!.cssSize.y,\n        height: this.surface.canvasData!.cssSize.x\n      });\n    } else\n      this.surface.updateMaskCanvas();\n    //ADDME: scaling?\n    if (this.options.setStatus)\n      this.options.setStatus(newWidth, newHeight);\n  }\n}\n\nexport type { PhotoRotate };\n\nexport function addImageRotateButton(toolbar: Toolbar, surface: ImageSurface, options?: PhotoRotateOptions) {\n  const rotator = new PhotoRotate(surface, options);\n\n  const button = new ToolbarButton({\n    label: getTid(\"tollium:components.imgedit.editor.rotate\"),\n    icon: toddImages.createImage(\"tollium:actions/rotate\", 24, 24, \"b\"),\n    onExecute: () => rotator.startScaling(toolbar)\n  });\n  toolbar.addButton(button);\n\n  return { button: button, comp: rotator };\n}\n","import * as dompack from \"dompack\";\n\nimport { getTid } from \"@webhare/gettid\";\nimport * as toddImages from \"@mod-tollium/js/icons\";\nimport { type Toolbar, ToolbarButton } from \"@mod-tollium/web/ui/components/toolbar/toolbars\";\n\nimport type { OffsetRect, Rect, Size } from \"./imageeditor\";\nimport type { PhotoCrop, PhotoCropProps } from \"./crop\";\nimport type { PhotoPoint, PhotoPointProps } from \"./refpoint\";\nimport type { PhotoRotate, PhotoRotateProps } from \"./scaling\";\n\nimport type { ImgTransformSettings, ImgPoint } from \"@webhare/imgtransform\";\n\nexport type ImageSurfaceOptions = {\n  getBusyLock?: (() => Disposable) | null;\n  onMetadataChange?: () => void;\n  editorBackground?: string;\n  maxLength?: number;\n  maxArea?: number;\n};\n\nexport type ImageSurfaceSettings = {\n  refPoint: Size;\n  //TODO support for orientation can probably be removed from imgtransform\n  orientation: number;\n};\n\ntype EditStep = {\n  action: \"crop\";\n  comp: PhotoCrop;\n  props: PhotoCropProps;\n  // width: number;\n  // height: number;\n  meta: boolean;\n} | {\n  action: \"rotate\";\n  comp: PhotoRotate;\n  props: PhotoRotateProps;\n  meta: boolean;\n} | {\n  action: \"refpoint\";\n  comp: PhotoPoint;\n  props: PhotoPointProps;\n  meta: boolean;\n};\n\n//image canvas\nexport class ImageSurface {\n  node: HTMLElement;\n  imgData: {\n    size: Size;\n    scale: Size;\n    orgSize: Size;\n    aspect: number;\n    orientation: number;\n  } | null = null;\n  viewPort: Size | null = null;\n  canvas: HTMLCanvasElement;\n  canvasData: {\n    cssSize: Size;\n    scale: Size;\n    realSize: Size;\n  } | null = null;\n  previewCanvas: HTMLCanvasElement | null = null;\n  canvasScale = 1;\n  previewScale = 1;\n  previewRect: OffsetRect | null = null;\n  previewMask: Rect | null = null;\n  maskCanvas: HTMLCanvasElement;\n  imageLimited = false;\n  ctx: CanvasRenderingContext2D | null = null;\n  refPoint: Size | null = null;\n  orgRefPoint: Size | null = null; // initial reference point, used to reset refpoint on undo\n  undoStack: EditStep[] = []; //contains all steps done\n  redoStack: EditStep[] = []; //contains all steps undone\n  undoButton: ToolbarButton | null = null;\n  redoButton: ToolbarButton | null = null;\n  busyLock: Disposable | null = null;\n  scaleTimeout?: NodeJS.Timeout;\n  options: ImageSurfaceOptions = {};\n  originalImage: HTMLImageElement | ImageBitmap | null = null;\n\n  constructor(public eventTarget: HTMLElement, _toolbar: Toolbar, options?: ImageSurfaceOptions) {\n    this.options = {\n      editorBackground: \"\",\n      maxLength: 0,\n      maxArea: 0,\n      ...options\n    };\n\n\n    this.node = <div class=\"wh-image-surface\" tabindex=\"0\">\n      {this.canvas = <canvas />}\n      {this.maskCanvas = <canvas style=\"position: absolute; left: 0; top: 0; pointer-events: none;\" />}\n    </div>;\n    if (this.options.editorBackground)\n      this.node.style.background = this.options.editorBackground;\n  }\n\n  fireEvent(name: string, detail?: unknown) {\n    dompack.dispatchCustomEvent(this.eventTarget, 'tollium-imageeditor:' + name, { bubbles: true, cancelable: false, detail });\n  }\n\n  setSize(w: number, h: number) {\n    Object.assign(this.node.style, { width: w + \"px\", height: h + \"px\" });\n    if (this.ctx) {\n      this.viewPort = { x: w, y: h };\n      this.setupCanvas();\n      this.fireEvent(\"resized\", {\n        width: w,\n        height: h\n      });\n    }\n  }\n\n  setImgBitmap(img: ImageBitmap, settings: ImgTransformSettings) {\n    this.setupImage(settings.focalPoint, img, 0);\n  }\n\n  setImg(img: HTMLImageElement, settings: ImageSurfaceSettings) {\n    if (\"refpoint\" in settings)\n      throw new Error(\"refpoint? should be refPoint\"); //TODO remove once imageedit typings are complete\n\n    this.setupImage(settings.refPoint, img, settings.orientation);\n  }\n\n  // Are there changes?\n  isDirty() {\n    return this.undoStack.length > 0;\n  }\n\n  // Are there image data modifying changes?\n  isModified() {\n    // Returns true if there is at least one image modifying state on the undo stack\n    return this.undoStack.findIndex(state => {\n      return !state.meta;\n    }) >= 0;\n  }\n\n  setBusy(busy: boolean) {\n    if (!this.options.getBusyLock)\n      return true; // No busy lock available\n    // If busyLock exists, don't accept 'true' as it's already busy, and vice versa\n    if ((this.busyLock !== null) === busy)\n      return false; // Already busy\n\n    if (busy) {\n      this.busyLock = this.options.getBusyLock();\n    } else {\n      if (this.busyLock)\n        this.busyLock[Symbol.dispose]();\n      this.busyLock = null;\n    }\n    return true;\n  }\n\n  stop() {\n  }\n\n  private setupImage(focalPoint: ImgPoint | null, img: HTMLImageElement | ImageBitmap, orientation: number) {\n    let width = img.width;\n    let height = img.height;\n\n    this.orgRefPoint = focalPoint;\n    this.undoStack = [];\n    this.redoStack = [];\n\n    if (this.undoButton)\n      this.undoButton.setEnabled(false);\n    if (this.redoButton)\n      this.redoButton.setEnabled(false);\n\n    const containersize = this.node.getBoundingClientRect();\n    this.viewPort = { x: containersize.width, y: containersize.height };\n\n    // Restrict image width and height\n    if (this.options.maxLength && this.options.maxLength > 0 && (width > this.options.maxLength || height > this.options.maxLength)) {\n      const s = this.options.maxLength / Math.max(width, height);\n      width = Math.floor(width * s);\n      height = Math.floor(height * s);\n      this.imageLimited = true;\n    }\n    // Restrict image area\n    if (this.options.maxArea && width * height > this.options.maxArea) {\n      const s = Math.sqrt(this.options.maxArea / (width * height));\n      width = Math.floor(width * s);\n      height = Math.floor(height * s);\n      this.imageLimited = true;\n    }\n    if (this.imageLimited)\n      console.warn(\"Restricting image dimensions from \" + img.width + \"x\" + img.height + \" to \" + width + \"x\" + height);\n\n    orientation = orientation || 0;\n    const rotated = [5, 6, 7, 8].includes(orientation);\n    const scale = { x: 1, y: 1 };//use separate scale x/y for error reduction rounding\n    const orgSize = { x: rotated ? height : width, y: rotated ? width : height };\n\n    this.imgData = {\n      size: { x: rotated ? height : width, y: rotated ? width : height },\n      scale: scale,\n      orgSize: orgSize,\n      aspect: (orgSize.x / orgSize.y),\n      orientation: orientation\n    };\n\n    this.ctx = this.canvas.getContext(\"2d\");\n    this.originalImage = img;\n    this.setupCanvas();\n    this.fireEvent('ready', this.imgData);\n  }\n\n  private setupCanvas() {\n    this.refPoint = this.orgRefPoint;\n    this.canvas.width = this.imgData!.size.x;\n    this.canvas.height = this.imgData!.size.y;\n    this.maskCanvas!.width = this.viewPort!.x;\n    this.maskCanvas!.height = this.viewPort!.y;\n\n    //what scale to use to fit image on canvas in current position\n    const canvasScaleX = this.canvas.width / this.viewPort!.x;\n    const canvasScaleY = this.canvas.height / this.viewPort!.y;\n    let canvasScale = canvasScaleX > canvasScaleY ? canvasScaleX : canvasScaleY;\n    if (canvasScale < 1)\n      canvasScale = 1;//don't scale up\n    this.canvasScale = 1 / canvasScale;\n\n    const cssw = Math.round(this.canvas.width / canvasScale);\n    const cssh = Math.round(this.canvas.height / canvasScale);\n    this.canvasData = {\n      cssSize: { x: cssw, y: cssh },\n      scale: { x: (this.canvas.width / cssw), y: (this.canvas.height / cssh) },\n      realSize: { x: this.imgData!.orgSize.x, y: this.imgData!.orgSize.y }\n    };\n\n    this.canvas.style.position = \"absolute\";\n    this.canvas.style.top = '50%';\n    this.canvas.style.left = '50%';\n    this.canvas.style.width = this.canvasData.cssSize!.x + 'px';\n    this.canvas.style.height = this.canvasData.cssSize!.y + 'px';\n    this.canvas.style.marginLeft = Math.ceil(this.canvasData.cssSize!.x * -0.5) + 'px';\n    this.canvas.style.marginTop = Math.ceil(this.canvasData.cssSize!.y * -0.5) + 'px';\n\n    let drawWidth = this.imgData!.size.x;\n    let drawHeight = this.imgData!.size.y;\n    if ([5, 6, 7, 8].includes(this.imgData!.orientation)) {\n      const tmp = drawWidth;\n      drawWidth = drawHeight;\n      drawHeight = tmp;\n    }\n    // See: http://stackoverflow.com/a/6010475\n    switch (this.imgData!.orientation) {\n      case 1: // rotated 0°, not mirrored\n        break;\n      case 2: // rotated 0°, mirrored\n        this.ctx!.scale(-1, 1);\n        this.ctx!.translate(-drawWidth, 0);\n        break;\n      case 3: // rotated 180°, not mirrored\n        this.ctx!.translate(drawWidth, drawHeight);\n        this.ctx!.rotate(Math.PI);\n        break;\n      case 4: // rotated 180°, mirrored\n        this.ctx!.scale(1, -1);\n        this.ctx!.translate(0, -drawHeight);\n        break;\n      case 5: // rotated 270°, mirrored\n        this.ctx!.rotate(-Math.PI / 2);\n        this.ctx!.scale(-1, 1);\n        break;\n      case 6: // rotated 270°, not mirrored\n        this.ctx!.translate(drawHeight, 0);\n        this.ctx!.rotate(Math.PI / 2);\n        break;\n      case 7: // rotated 90°, mirrored\n        this.ctx!.scale(-1, 1);\n        this.ctx!.translate(-drawHeight, drawWidth);\n        this.ctx!.rotate(3 * Math.PI / 2);\n        break;\n      case 8: // rotated 90°, not mirrored\n        this.ctx!.translate(0, drawWidth);\n        this.ctx!.rotate(3 * Math.PI / 2);\n        break;\n    }\n    this.ctx!.drawImage(this.originalImage!, 0, 0, drawWidth, drawHeight);\n    this.showScale();\n    this.fireEvent('reset');\n  }\n\n  setPreviewCanvas(canvas: HTMLCanvasElement | null, contentRect?: OffsetRect) {\n    const oldcanvas = this.previewCanvas;\n    if (this.previewCanvas) {\n      this.hidePreviewCanvas();\n      this.previewCanvas.remove();\n      this.previewCanvas = null;\n      this.previewScale = 1;\n    }\n    if (canvas) {\n      this.previewCanvas = canvas;\n      this.previewRect = contentRect || {\n        left: 0,\n        top: 0,\n        width: this.previewCanvas.width,\n        height: this.previewCanvas.height,\n        offsetx: 0,\n        offsety: 0\n      };\n      if (this.previewRect.width > this.viewPort!.x || this.previewRect.height > this.viewPort!.y) {\n        this.previewScale = Math.min(this.viewPort!.x / this.previewRect.width, this.viewPort!.y / this.previewRect.height);\n        this.previewCanvas.style.transform = \"scale(\" + this.previewScale + \")\";\n      } else {\n        this.previewScale = 1;\n        this.previewCanvas.style.transform = \"\";\n      }\n\n      const left = Math.floor((this.viewPort!.x - this.previewCanvas.width) / 2) - Math.floor(this.previewScale * this.previewRect.offsetx);\n      const top = Math.floor((this.viewPort!.y - this.previewCanvas.height) / 2) - Math.floor(this.previewScale * this.previewRect.offsety);\n      this.previewCanvas.style.marginLeft = left + \"px\";\n      this.previewCanvas.style.marginTop = top + \"px\";\n\n      this.previewMask = {\n        left: left + Math.floor(this.previewRect.left * this.previewScale) + Math.floor((this.previewCanvas.width - this.previewScale * this.previewCanvas.width) / 2),\n        top: top + Math.floor(this.previewRect.top * this.previewScale) + Math.floor((this.previewCanvas.height - this.previewScale * this.previewCanvas.height) / 2),\n        width: Math.round(this.previewRect.width * this.previewScale),\n        height: Math.round(this.previewRect.height * this.previewScale)\n      };\n      this.fireEvent(\"updatepreview\", { oldcanvas: oldcanvas });\n      this.showPreviewCanvas();\n    }\n  }\n\n  updateMaskCanvas(contentRect?: Rect) {\n    contentRect = contentRect || {\n      left: Math.floor((this.maskCanvas!.width - this.canvasData!.cssSize.x) / 2),\n      top: Math.floor((this.maskCanvas!.height - this.canvasData!.cssSize.y) / 2),\n      width: Math.round(this.canvasData!.cssSize.x),\n      height: Math.round(this.canvasData!.cssSize.y)\n    };\n    const ctx = this.maskCanvas!.getContext(\"2d\");\n    if (!ctx)\n      return;\n    // Clear the mask\n    ctx.clearRect(0, 0, this.maskCanvas!.width, this.maskCanvas!.height);\n    // Fill with transparent black\n    ctx.fillStyle = \"rgba(0, 0, 0, .6)\";\n    ctx.fillRect(0, 0, this.maskCanvas!.width, this.maskCanvas!.height);\n    // Cut out the image rect, compensate for scaling\n    ctx.clearRect(contentRect.left, contentRect.top, contentRect.width, contentRect.height);\n  }\n\n  showPreviewCanvas() {\n    if (this.previewCanvas) {\n      if (this.canvas?.parentNode)\n        this.node.removeChild(this.canvas);\n      this.node.insertBefore(this.previewCanvas, this.node.firstChild);\n      if (this.maskCanvas && !this.maskCanvas.parentNode)\n        this.node.appendChild(this.maskCanvas);\n      else if (this.previewMask)\n        this.updateMaskCanvas(this.previewMask);\n      this.fireEvent(\"showpreview\");\n    }\n    this.showScale();\n  }\n\n  hidePreviewCanvas(hidemask = false) {\n    if (this.previewCanvas) {\n      this.fireEvent(\"hidepreview\");\n      this.node.removeChild(this.previewCanvas);\n      this.node.insertBefore(this.canvas, this.node.firstChild);\n      if (hidemask)\n        this.node.removeChild(this.maskCanvas!);\n      else\n        this.updateMaskCanvas();\n      this.showScale(this.canvasScale);\n    }\n  }\n\n  showScale(scale?: number) {\n    this.hideScale();\n    if (!scale)\n      scale = this.previewCanvas ? this.previewScale : this.canvasScale;\n    this.node.appendChild(<span class=\"wh-imageeditor-scale\">{Math.round(100 * scale) + \"%\"}</span>);\n    this.scaleTimeout = setTimeout(() => this.hideScale(), 2500);\n\n    this.options.onMetadataChange?.(); //TODO if there's a better place to put this, fine with me. as long as it gets invoked at least once per actual metadata change\n  }\n\n  hideScale() {\n    clearTimeout(this.scaleTimeout);\n    dompack.qSA(this.node, \".wh-imageeditor-scale\").forEach(node => node.remove());\n  }\n\n  apply() {\n\n  }\n\n  pushUndo(state: EditStep, replace_same_action?: boolean) {\n    // If pushing the same action, replace the previous state if the redo stack is empty\n    if (replace_same_action\n      && this.undoStack.length\n      && !this.redoStack.length\n      && this.undoStack[this.undoStack.length - 1].action === state.action)\n      this.undoStack[this.undoStack.length - 1] = state;\n    else\n      this.undoStack.push(state);\n    this.redoStack = [];\n    if (this.undoButton)\n      this.undoButton.setEnabled(true);\n    if (this.redoButton)\n      this.redoButton.setEnabled(false);\n  }\n\n  popUndo() {\n    if (this.undoStack.length === 0)\n      return;\n\n    // Remove last action from undo stack and push it to redo stack\n    this.redoStack.push(this.undoStack.pop()!);\n    if (this.undoButton)\n      this.undoButton.setEnabled(this.undoStack.length > 0);\n    if (this.redoButton)\n      this.redoButton.setEnabled(true);\n\n    // Restore original\n    this.setupCanvas();\n\n    // Reconstruct previous actions with minimum steps\n    this.undoStack.forEach(step => {\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO FIX the requirement for any here. eg store callbacks on the undo stack?\n      step.comp.applyCanvas(step.props as any);\n    });\n\n    this.fireEvent(\"undo\");\n  }\n\n  popRedo() {\n    if (this.redoStack.length === 0)\n      return;\n\n    // Remove last action from redo stack and push it to undo stack\n    this.undoStack.push(this.redoStack.pop()!);\n    if (this.redoButton)\n      this.redoButton.setEnabled(this.redoStack.length > 0);\n    if (this.undoButton)\n      this.undoButton.setEnabled(true);\n\n    // Restore original\n    this.setupCanvas();\n\n    // Reconstruct previous actions with minimum steps\n    this.undoStack.forEach(step => {\n      //eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO FIX the requirement for any here. eg store callbacks on the undo stack?\n      step.comp.applyCanvas(step.props as any);\n    });\n\n    this.fireEvent(\"redo\");\n  }\n\n  cloneCanvas(options?: { clearOriginal: boolean }) {\n    const copy = document.createElement(\"canvas\");\n    copy.width = this.canvas.width;\n    copy.height = this.canvas.height;\n\n    const ctx = copy.getContext('2d');\n    if (!ctx)\n      return;\n    ctx.drawImage(this.canvas, 0, 0);\n\n    if (options?.clearOriginal) {\n      this.ctx!.clearRect(0, 0, this.canvas.width, this.canvas.height);\n    }\n\n    return { canvas: copy, ctx };\n  }\n\n  static addUndoButton(toolbar: Toolbar, surface: ImageSurface) {\n    const button = new ToolbarButton({\n      label: getTid(\"~undo\"),\n      icon: toddImages.createImage(\"tollium:actions/undo\", 24, 24, \"b\"),\n      onExecute: () => surface.popUndo(),\n      enabled: false\n    });\n    toolbar.addButton(button);\n    surface.undoButton = button;\n    return { button: button };\n  }\n\n  static addRedoButton(toolbar: Toolbar, surface: ImageSurface) {\n    const button = new ToolbarButton({\n      label: getTid(\"~redo\"),\n      icon: toddImages.createImage(\"tollium:actions/redo\", 24, 24, \"b\"),\n      onExecute: () => surface.popRedo(),\n      enabled: false\n    });\n    toolbar.addButton(button);\n    surface.redoButton = button;\n    return { button: button };\n  }\n}\n","// Auto-generated language file from /opt/wh/whtree/modules/tollium/web/ui/components/imageeditor/imageeditor.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"tollium\",\"nl\",{\"components\":{\"imgedit\":{\"add_image\":\"Een afbeelding uploaden\",\"clear_image\":\"Afbeelding leegmaken\",\"dominantcolor\":\"Dominante kleur\",\"edit_image\":\"Afbeelding bewerken\",\"filename\":\"Bestandsnaam\",\"imagedimensions\":\"Afmetingen afbeelding\",\"imagesizehint-expectedsize\":[\"De afbeelding wordt weergegeven met de afmetingen \",1,\"x\",2],\"imagesizehint-minsize\":[\"De afbeelding moet minimaal \",1,\"x\",2,\" zijn\"],\"imagesizehint-recommendedsize\":[\"Voor de optimale weergave moet de afbeelding minimaal \",1,\"x\",2,\" zijn\"],\"invalidextension\":[\"De bestandsnaam moet eindigen op '\",1,\"'\"],\"media_library\":\"Een afbeelding selecteren uit de mediabibliotheek\",\"moreinfo\":\"Meer info…\",\"moreinformation\":\"Meer informatie\",\"no_image\":\"Geen afbeelding ingesteld\",\"other_actions\":\"Andere acties\",\"replace-medialibrary\":\"Vanuit mediabibliotheek vervangen\",\"replace-publisher\":\"Vanuit Publisher vervangen\",\"replace-upload\":\"Via upload vervangen\",\"select_image\":\"Een afbeelding selecteren uit de Publisher\",\"sizehint\":[\"Aangeraden afmeting: \",1,\"x\",2],\"editor\":{\"autocontrast\":\"Automatisch contrast\",\"blur\":\"Vager maken\",\"brightnesscontrast\":\"Helderheid en contrast\",\"coloradjust\":\"Kleuren aanpassen\",\"crop\":\"Bijsnijden\",\"delrefpoint\":\"Referentiepunt verwijderen\",\"filters\":\"Filters toepassen\",\"findfaces\":\"Gezichtsherkenning\",\"fliphorizontal\":\"Horizontaal spiegelen\",\"flipvertical\":\"Verticaal spiegelen\",\"grayscale\":\"Grijswaarden\",\"invert\":\"Inverteren\",\"posterize\":\"Kleuren beperken\",\"refpoint\":\"Referentiepunt\",\"rotate\":\"Draaien\",\"rotateleft\":\"90° linksom draaien\",\"rotateright\":\"90° rechtsom draaien\",\"sepia\":\"Sepia\",\"sharpen\":\"Scherper maken\",\"smartcrop\":\"Automatisch bijsnijden\",\"title\":\"Afbeelding bewerken\"},\"hints\":{\"add_image\":\"Een afbeelding uploaden\",\"save_image\":\"Afbeelding opslaan\"},\"messages\":{\"confirmdiscardchanges\":[\"Er zijn nog niet-opgeslagen wijzigingen.\",\"\\n\",\"\\n\",\"Wilt u de bewerkingen toepassen voor u de editor sluit?\"],\"confirmdiscardtool\":[\"De bewerking is nog niet toegepast.\",\"\\n\",\"\\n\",\"Weet u zeker dat u de editor wilt sluiten zonder de bewerking toe te passen?\"],\"corruptimage\":\"De afbeelding kan niet ingeladen worden, het is corrupt of heeft een niet-ondersteund formaat.\",\"maxsizewarning\":\"De afbeelding is verkleind vanwege browserbeperkingen\",\"minsizewarning\":\"De afbeelding wordt vergroot om te voldoen aan de gewenste grootte\",\"unsupportedtype\":\"De afbeelding heeft een niet-ondersteund formaat.\"}}}});\nregisterTexts(\"tollium\",\"en\",{\"components\":{\"imgedit\":{\"add_image\":\"Upload an image\",\"clear_image\":\"Clear the image\",\"dominantcolor\":\"Dominant color\",\"edit_image\":\"Edit the image\",\"filename\":\"File name\",\"imagedimensions\":\"Image dimensions\",\"imagesizehint-expectedsize\":[\"The image will be shown with dimensions \",1,\"x\",2],\"imagesizehint-minsize\":[\"The image must be at least \",1,\"x\",2],\"imagesizehint-recommendedsize\":[\"For an optimal display the image should be at least \",1,\"x\",2],\"invalidextension\":[\"The file name should end in '\",1,\"'\"],\"media_library\":\"Select an image from the media library\",\"moreinfo\":\"More info…\",\"moreinformation\":\"More information\",\"no_image\":\"No image set\",\"other_actions\":\"Other actions\",\"replace-medialibrary\":\"Replace from media library\",\"replace-publisher\":\"Replace from Publisher\",\"replace-upload\":\"Replace by upload\",\"select_image\":\"Select an image from the Publisher\",\"sizehint\":[\"Recommended size: \",1,\"x\",2],\"editor\":{\"autocontrast\":\"Automatic Contrast\",\"blur\":\"Blur\",\"brightnesscontrast\":\"Brightness and Contrast\",\"coloradjust\":\"Adjust Colors\",\"crop\":\"Crop\",\"delrefpoint\":\"Delete Reference Point\",\"filters\":\"Apply Filters\",\"findfaces\":\"Find face\",\"fliphorizontal\":\"Flip Horizontal\",\"flipvertical\":\"Flip Vertical\",\"grayscale\":\"Grayscale\",\"invert\":\"Invert\",\"posterize\":\"Limit colors\",\"refpoint\":\"Reference Point\",\"rotate\":\"Rotate\",\"rotateleft\":\"Rotate 90° Left\",\"rotateright\":\"Rotate 90° Right\",\"sepia\":\"Sepia\",\"sharpen\":\"Sharpen\",\"smartcrop\":\"Automatic Crop\",\"title\":\"Edit image\"},\"hints\":{\"add_image\":\"Upload an image\",\"save_image\":\"Save image\"},\"messages\":{\"confirmdiscardchanges\":[\"There are unsaved changes.\",\"\\n\",\"\\n\",\"Do you want to apply the changes before closing the editor?\"],\"confirmdiscardtool\":[\"The tool is not yet applied.\",\"\\n\",\"\\n\",\"Are you sure you want to close the editor without applying the tool?\"],\"corruptimage\":\"This image cannot be loaded, it is corrupt or has an unsupported format.\",\"maxsizewarning\":\"The image is downscaled because of browser limitations\",\"minsizewarning\":\"The image will be upscaled to meet the requested size requirement\",\"unsupportedtype\":\"The image has an unsupported format.\"}}}});\n// Adding dependency: /opt/wh/whtree/modules/tollium/language/nl.xml\n// Adding dependency: /opt/wh/whtree/modules/tollium/language/default.xml\n// Adding dependency: /opt/wh/whtree/modules/tollium/language/default.xml\n","// Auto-generated language file from /opt/wh/whtree/modules/tollium/web/ui/common.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"tollium\",\"nl\",{\"shell\":{\"appdirty\":\"Deze applicatie bevat niet opgeslagen wijzigingen\",\"editfavorites\":\"Beheren\",\"frontendclose\":\"Applicatiesessies zijn verlopen\",\"frontendclose_description\":\"De verbinding tussen uw browser en WebHare is verbroken. De betreffende applicaties in WebHare zijn gesloten.\",\"isrestoredwebhare\":\"Deze WebHare is uit een backup hersteld\",\"loadingapp\":\"Applicatie starten...\",\"offline\":\"Verbinding verbroken\",\"offline_description\":\"De verbinding met de server is verbroken. Wacht a.u.b. tot deze weer hersteld is.\",\"openedas\":[\"Geopend als '\",1,\"'\"],\"personalmenu\":\"Favorieten\",\"restartapp\":\"Applicatie herstarten\",\"webhareupdated\":\"WebHare bijgewerkt\",\"webhareupdated_description\":\"De webpagina is opnieuw gestart omdat de WebHare server een update ontvangen heeft\",\"checks\":{\"errors\":[{\"t\":\"ifparam\",\"p\":1,\"value\":\"0\",\"subs\":[2],\"subselse\":[\"'\",2,\"' en nog \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"1 fout\"],\"subselse\":[1,\" fouten\"]}]}],\"unresolvedissues\":\"Er zijn nog onopgeloste fouten!\"},\"controller\":{\"neededrights\":[\"De volgende rechten zijn benodigd: \",1],\"rightsproblem\":[\"U heeft geen toegang tot deze applicatie (ingelogd als '\",1,\"')\"],\"sessionexpired\":\"Uw inlogsessie is verlopen. U moet opnieuw inloggen om deze applicatie te herstarten.\",\"untrustedparams\":\"U mag deze applicatie niet openen met URL parameters.\"},\"criticalissues\":{\"dashboard\":\"Er zijn kritieke fouten die  direct aandacht vereisen. Zie het Dashboard\"},\"dashboard\":{\"apptitle\":\"WebHare\",\"logout\":\"Uitloggen\",\"mountwebhare\":\"Server via WebDav mounten\",\"noapps\":[\"Niets gevonden voor '\",1,\"'\"],\"resetimagecache\":\"Afbeeldingscache leegmaken\",\"showallapps\":\"Toon alle applicaties\"},\"errors\":{\"appstartfailed\":\"Het is niet gelukt de applicatie op te starten. Mogelijk is de server onbereikbaar of dient u opnieuw in te loggen\",\"appstartfailed-development\":[\"Het is niet gelukt de applicatie op te starten. Mogelijk is de server onbereikbaar of dient u opnieuw in te loggen\",\"\\n\",\"\\n\",\"Mogelijk moet u ook WebHare softresetten (wh softreset) of de logbestanden controleren op mogelijke problemen (wh watchlog)\"],\"debug\":\"Debuggen\",\"encounterederror\":\"De applicatie is tegen een fout aangelopen en is afgesloten.\",\"errordialogtitle\":\"Applicatie\",\"errortitle\":\"Er heeft een fout plaatsgevonden, neem a.u.b contact op met de systeembeheerder.\",\"restart\":\"Herstarten\"},\"feedback\":{\"button-general\":\"Algemeen\",\"button-specific\":\"Specifiek\",\"message\":\"Wilt u feedback versturen voor een specifiek interface-element of algemene feedback?\",\"title\":\"Feedback\"},\"login\":{\"notloggedin\":\"U lijkt niet meer ingelogd te zijn. Mogelijk moet u deze pagina opnieuw inladen om weer in te loggen.\",\"unexpectedprotocolversion\":[\"Het lijkt erop dat uw browser een verouderde versie van deze webpagina heeft ingeladen. Probeer Shift-F5 (of Shift-Cmd-R op een Mac of Alt-Cmd-R in Safari) om deze pagina opnieuw in te laden.\",\"\\n\",\"\\n\",\"Mocht dit niet werken probeer dan uw browser opnieuw te starten.\"]},\"logout\":{\"surelogout\":\"Weet u zeker dat u wilt uitloggen?\",\"title\":\"Uitloggen\"},\"messagebox\":{\"defaulttitle\":\"Bericht\"},\"oauth\":{\"apptitle\":\"OAuth autorisatie\",\"clientid\":\"Client\",\"errortitle\":\"Er is een fout opgetreden\",\"explanation\":\"De volgende server wil toegang tot deze server verkrijgen:\",\"oauthtitle\":\"Autorisatie\",\"question\":\"De vragende server zal rechten hebben op alles wat uw account op deze server mag. Weet u zeker dat u deze toegang wil verlenen?\",\"scopes\":\"Scopes\",\"messages\":{\"invalid_redirect\":\"Er is een ongeldige redirect-URL opgegeven (deze moet binnen de client-URL vallen.)\",\"missing_client\":\"Er is geen client opgegeven.\",\"missing_redirect\":\"Er is geen redirect-URL opgegeven.\",\"missing_scopes\":\"Er zijn geen scopes opgegeven.\",\"unknownerror\":\"Er is een onbekende fout opgetreden. Probeer het a.u.b. opnieuw. Als deze foutmelding dan weer terugkomt, neem dan a.u.b contact op met de systembeheerder.\"}},\"towl\":{\"gonativedescription\":\"Klik hier om de notificaties weer te geven op uw desktop.\",\"gonativetitle\":\"Desktop notificaties\",\"notificationtitle\":\"WebHare-melding\"},\"upload\":{\"messages\":{\"errortitle\":\"Fout bij uploaden\",\"unknownerror\":\"Er is een fout opgetreden tijdens het uploaden. Probeer het alstublieft opnieuw.\"},\"progress\":{\"calculating\":\"Berekenen...\",\"progress\":\"Voortgang\",\"size\":\"Grootte\",\"speed\":\"Snelheid\",\"title\":\"Uploaden\"}}},\"tilde\":{\"accessibility\":\"Toegankelijkheid\",\"add\":\"Toevoegen\",\"addtostartmenu\":\"Toon in favorieten\",\"advanced\":\"Geavanceerd\",\"apikey\":\"API sleutel\",\"apply\":\"Toepassen\",\"bksp\":\"Backspace\",\"browse\":\"Bladeren\",\"cancel\":\"Annuleren\",\"change\":\"Aanpassen\",\"city\":\"Stad\",\"clear\":\"Leegmaken\",\"close\":\"Sluiten\",\"comments\":\"Opmerkingen\",\"connect\":\"Verbinden\",\"copy\":\"Kopiëren\",\"copyto\":\"Kopiëren naar\",\"country\":\"Land\",\"creationdate\":\"Aanmaakdatum\",\"cut\":\"Knippen\",\"date\":\"Datum\",\"defaultvalue\":\"Standaardwaarde\",\"del\":\"Del\",\"delete\":\"Verwijderen\",\"deleteall\":\"Alle resultaten verwijderen\",\"deletiondate\":\"Verwijderdatum\",\"description\":\"Omschrijving\",\"disable\":\"Uitschakelen\",\"disconnect\":\"Verbreken\",\"down\":\"Omlaag\",\"download\":\"Downloaden\",\"duplicate\":\"Dupliceren\",\"edit\":\"Bewerken\",\"email\":\"E-mailadres\",\"enable\":\"Inschakelen\",\"end\":\"End\",\"enter\":\"Enter\",\"esc\":\"Escape\",\"exit\":\"Afsluiten\",\"export\":\"Exporteren\",\"filename\":\"Bestandsnaam\",\"filesize\":\"Bestandsgrootte\",\"finish\":\"Voltooien\",\"firstname\":\"Voornaam\",\"foldername\":\"Mapnaam\",\"fullname\":\"Volledige naam\",\"help\":\"Help\",\"home\":\"Home\",\"id\":\"ID\",\"import\":\"Importeren\",\"inspect\":\"Inspecteren\",\"invertselection\":\"Selectie omkeren\",\"keywords\":\"Sleutelwoorden\",\"lastname\":\"Achternaam\",\"left\":\"Links\",\"line\":\"Regel\",\"linkto\":\"Koppelen\",\"logoff\":\"Uitloggen\",\"mailbcc\":\"Bcc\",\"mailcc\":\"Cc\",\"mailfrom\":\"Van\",\"mailto\":\"Aan\",\"manage\":\"Beheren\",\"menu\":\"Menu\",\"mimetype\":\"MIME type\",\"modificationdate\":\"Wijzigingsdatum\",\"moveto\":\"Verplaatsen naar\",\"name\":\"Naam\",\"new\":\"Nieuw\",\"next\":\"Volgende\",\"no\":\"Nee\",\"none\":\"Geen\",\"ok\":\"OK\",\"open\":\"Openen\",\"openineditor\":\"Open in editor\",\"ordering\":\"Ordening\",\"password\":\"Wachtwoord\",\"passwordnew\":\"Nieuw wachtwoord\",\"passwordrepeat\":\"Herhaal wachtwoord\",\"paste\":\"Plakken\",\"pgdn\":\"Page Down\",\"pgup\":\"Page Up\",\"preferences\":\"Voorkeuren\",\"preview\":\"Voorbeeld tonen\",\"previous\":\"Vorige\",\"print\":\"Afdrukken\",\"properties\":\"Eigenschappen\",\"redo\":\"Opnieuw\",\"refresh\":\"Verversen\",\"rename\":\"Hernoemen\",\"replace\":\"Vervangen\",\"reset\":\"Herstellen\",\"right\":\"Rechts\",\"save\":\"Opslaan\",\"saveas\":\"Opslaan als\",\"search\":\"Zoeken\",\"select\":\"Selecteren\",\"selectall\":\"Alles selecteren\",\"selectcolumns\":\"Kolommen instellen\",\"setordering\":\"Volgorde instellen\",\"settings\":\"Instellingen\",\"showhistory\":\"Geschiedenis weergeven\",\"showinfavorites\":\"Toon in favorieten\",\"status\":\"Status\",\"subject\":\"Onderwerp\",\"submit\":\"Versturen\",\"synchronize\":\"Synchroniseren\",\"tab\":\"Tab\",\"tag\":\"Tag\",\"title\":\"Titel\",\"tobottom\":\"Onderaan\",\"today\":\"Vandaag\",\"totop\":\"Bovenaan\",\"type\":\"Type\",\"undo\":\"Ongedaan maken\",\"up\":\"Omhoog\",\"upload\":\"Uploaden\",\"url\":\"URL\",\"username\":\"Gebruikersnaam\",\"view\":\"Bekijken\",\"yes\":\"Ja\",\"yesterday\":\"Gisteren\",\"yestoall\":\"Ja op alles\",\"examples\":{\"email\":\"email@voorbeeld.nl\",\"emailcomma\":\"email@example.nl, anders@example.nl, ...\",\"http-url\":\"http://www.example.nl/map/\",\"https-url\":\"https://www.example.nl/map/\"},\"menus\":{\"edit\":\"Bewerken\",\"file\":\"Bestand\",\"help\":\"Help\",\"new\":\"Nieuw\",\"tools\":\"Extra\",\"view\":\"Beeld\"},\"units\":{\"centuries\":\"eeuwen\",\"century\":\"eeuw\",\"day\":\"dag\",\"days\":\"dagen\",\"hour\":\"uur\",\"hours\":\"uur\",\"millisecond\":\"milliseconde\",\"milliseconds\":\"milliseconden\",\"minute\":\"minuut\",\"minutes\":\"minuten\",\"month\":\"maand\",\"months\":\"maanden\",\"second\":\"seconde\",\"seconds\":\"seconden\",\"week\":\"week\",\"weeks\":\"weken\",\"year\":\"jaar\",\"years\":\"jaar\"}}});\nregisterTexts(\"tollium\",\"en\",{\"shell\":{\"appdirty\":\"This application contains unsaved changes\",\"editfavorites\":\"Manage\",\"frontendclose\":\"Application sessions have expired\",\"frontendclose_description\":\"The connection between your browser and WebHare was broken. The impacted applications have been closed.\",\"isrestoredwebhare\":\"This WebHare has been restored from backup\",\"loadingapp\":\"Starting application...\",\"offline\":\"Connection lost\",\"offline_description\":\"The connection to the server has been lost. Please wait for it to recover.\",\"openedas\":[\"Opened as '\",1,\"'\"],\"personalmenu\":\"Favorites\",\"restartapp\":\"Restart application\",\"webhareupdated\":\"WebHare updated\",\"webhareupdated_description\":\"The webpage restarted because the WebHare server received an update\",\"checks\":{\"errors\":[{\"t\":\"ifparam\",\"p\":1,\"value\":\"0\",\"subs\":[2],\"subselse\":[\"'\",2,\"' and \",1,\" more \",{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"error\"],\"subselse\":[\"errors\"]}]}],\"unresolvedissues\":\"There are unresolved issues!\"},\"controller\":{\"neededrights\":[\"The following rights are needed: \",1],\"rightsproblem\":[\"You don't have access to this application (logged in as '\",1,\"')\"],\"sessionexpired\":\"Your login session has expired. Please log in again to restart this application.\",\"untrustedparams\":\"You are not allowed to open this application with additional URL parameters.\"},\"criticalissues\":{\"dashboard\":\"There are critical issues that require immediate attention. Please check the Dashboard\"},\"dashboard\":{\"apptitle\":\"WebHare\",\"logout\":\"Log out\",\"mountwebhare\":\"Mount server over WebDav\",\"noapps\":[\"No match for '\",1,\"'\"],\"resetimagecache\":\"Reset image cache\",\"showallapps\":\"Show all apps\"},\"errors\":{\"appstartfailed\":\"Unable to start the application. The server may be unreachable or you may need to login again\",\"appstartfailed-development\":[\"Unable to start the application. The server may be unreachable or you may need to login again\",\"\\n\",\"\\n\",\"You may also need to softreset WebHare (wh softreset) or inspect the log files for issues (wh watchlog)\"],\"debug\":\"Debug\",\"encounterederror\":\"The application encountered an error and has terminated.\",\"errordialogtitle\":\"Application\",\"errortitle\":\"An error took place, please contact the system operator.\",\"restart\":\"Restart\"},\"feedback\":{\"button-general\":\"General\",\"button-specific\":\"Specific\",\"message\":\"Do you want to submit feedback about a specific interface element or general feedback?\",\"title\":\"Feedback\"},\"login\":{\"notloggedin\":\"You no longer seem to be logged in. You may need to reload this webpage to relogin.\",\"unexpectedprotocolversion\":[\"It looks like your browser is running an outdated version of this webpage. Please try Shift-F5 (or Shift-Cmd-R on a Mac or Alt-Cmd-R in Safari) to reload this page.\",\"\\n\",\"\\n\",\"If that doesn't work please try restarting your browser.\"]},\"logout\":{\"surelogout\":\"Are you sure you want to logout?\",\"title\":\"Log out\"},\"messagebox\":{\"defaulttitle\":\"Message\"},\"oauth\":{\"apptitle\":\"OAuth authorization\",\"clientid\":\"Client\",\"errortitle\":\"An error has occurred\",\"explanation\":\"The following server wants to get access to this server:\",\"oauthtitle\":\"Authorization\",\"question\":\"The requesting server will have access to everything your account has access to on this server. Are you sure you want to grant this access?\",\"scopes\":\"Scopes\",\"messages\":{\"invalid_redirect\":\"An invalid redirect URL has been specified (must lie within the client URL.)\",\"missing_client\":\"No client has been specified.\",\"missing_redirect\":\"No redirect URL has been specified.\",\"missing_scopes\":\"No scopes have been specified.\",\"unknownerror\":\"An unknown error has occurred. Please try again, and if this error keeps occurring please contact the system administrator.\"}},\"towl\":{\"gonativedescription\":\"Click here to show notifications on your desktop.\",\"gonativetitle\":\"Desktop notifications\",\"notificationtitle\":\"WebHare notification\"},\"upload\":{\"messages\":{\"errortitle\":\"An error occurred\",\"unknownerror\":\"Something went wrong during uploading. Please try again.\"},\"progress\":{\"calculating\":\"Calculating...\",\"progress\":\"Progress\",\"size\":\"Size\",\"speed\":\"Speed\",\"title\":\"Uploading\"}}},\"tilde\":{\"accessibility\":\"Accessibility\",\"add\":\"Add\",\"addtostartmenu\":\"Show in favorites\",\"advanced\":\"Advanced\",\"apikey\":\"API key\",\"apply\":\"Apply\",\"bksp\":\"Backspace\",\"browse\":\"Browse\",\"cancel\":\"Cancel\",\"change\":\"Change\",\"city\":\"City\",\"clear\":\"Clear\",\"close\":\"Close\",\"comments\":\"Comments\",\"connect\":\"Connect\",\"copy\":\"Copy\",\"copyto\":\"Copy To\",\"country\":\"Country\",\"creationdate\":\"Creation date\",\"cut\":\"Cut\",\"date\":\"Date\",\"defaultvalue\":\"Default value\",\"del\":\"Del\",\"delete\":\"Delete\",\"deleteall\":\"Delete all results\",\"deletiondate\":\"Deletion date\",\"description\":\"Description\",\"disable\":\"Disable\",\"disconnect\":\"Disconnect\",\"down\":\"Down\",\"download\":\"Download\",\"duplicate\":\"Duplicate\",\"edit\":\"Edit\",\"email\":\"Email\",\"enable\":\"Enable\",\"end\":\"End\",\"enter\":\"Enter\",\"esc\":\"Escape\",\"exit\":\"Exit\",\"export\":\"Export\",\"filename\":\"File name\",\"filesize\":\"File size\",\"finish\":\"Finish\",\"firstname\":\"First name\",\"foldername\":\"Folder name\",\"fullname\":\"Full name\",\"help\":\"Help\",\"home\":\"Home\",\"id\":\"ID\",\"import\":\"Import\",\"inspect\":\"Inspect\",\"invertselection\":\"Invert Selection\",\"keywords\":\"Keywords\",\"lastname\":\"Last name\",\"left\":\"Left\",\"line\":\"Line\",\"linkto\":\"Link to\",\"logoff\":\"Logoff\",\"mailbcc\":\"Bcc\",\"mailcc\":\"Cc\",\"mailfrom\":\"From\",\"mailto\":\"To\",\"manage\":\"Manage\",\"menu\":\"Menu\",\"mimetype\":\"MIME type\",\"modificationdate\":\"Modification date\",\"moveto\":\"Move To\",\"name\":\"Name\",\"new\":\"New\",\"next\":\"Next\",\"no\":\"No\",\"none\":\"None\",\"ok\":\"OK\",\"open\":\"Open\",\"openineditor\":\"Open in editor\",\"ordering\":\"Ordering\",\"password\":\"Password\",\"passwordnew\":\"New password\",\"passwordrepeat\":\"Repeat password\",\"paste\":\"Paste\",\"pgdn\":\"Page down\",\"pgup\":\"Page up\",\"preferences\":\"Preferences\",\"preview\":\"Preview\",\"previous\":\"Previous\",\"print\":\"Print\",\"properties\":\"Properties\",\"redo\":\"Redo\",\"refresh\":\"Refresh\",\"rename\":\"Rename\",\"replace\":\"Replace\",\"reset\":\"Reset\",\"right\":\"Right\",\"save\":\"Save\",\"saveas\":\"Save As\",\"search\":\"Search\",\"select\":\"Select\",\"selectall\":\"Select All\",\"selectcolumns\":\"Select Columns\",\"setordering\":\"Set Ordering\",\"settings\":\"Settings\",\"showhistory\":\"Show history\",\"showinfavorites\":\"Show in Favorites\",\"status\":\"Status\",\"subject\":\"Subject\",\"submit\":\"Submit\",\"synchronize\":\"Synchronize\",\"tab\":\"Tab\",\"tag\":\"Tag\",\"title\":\"Title\",\"tobottom\":\"To bottom\",\"today\":\"Today\",\"totop\":\"To top\",\"type\":\"Type\",\"undo\":\"Undo\",\"up\":\"Up\",\"upload\":\"Upload\",\"url\":\"URL\",\"username\":\"Username\",\"view\":\"View\",\"yes\":\"Yes\",\"yesterday\":\"Yesterday\",\"yestoall\":\"Yes to All\",\"examples\":{\"email\":\"email@example.com\",\"emailcomma\":\"email@example.com, another@example.net, ...\",\"http-url\":\"http://www.example.com/folder/\",\"https-url\":\"https://www.example.com/folder/\"},\"menus\":{\"edit\":\"Edit\",\"file\":\"File\",\"help\":\"Help\",\"new\":\"New\",\"tools\":\"Tools\",\"view\":\"View\"},\"units\":{\"centuries\":\"centuries\",\"century\":\"century\",\"day\":\"day\",\"days\":\"days\",\"hour\":\"hour\",\"hours\":\"hours\",\"millisecond\":\"millisecond\",\"milliseconds\":\"milliseconds\",\"minute\":\"minute\",\"minutes\":\"minutes\",\"month\":\"month\",\"months\":\"months\",\"second\":\"second\",\"seconds\":\"seconds\",\"week\":\"week\",\"weeks\":\"weeks\",\"year\":\"year\",\"years\":\"years\"}}});\n// Adding dependency: /opt/wh/whtree/modules/tollium/language/nl.xml\n// Adding dependency: /opt/wh/whtree/modules/tollium/language/default.xml\n// Adding dependency: /opt/wh/whtree/modules/tollium/language/default.xml\n","import * as dompack from \"dompack\";\n\nimport { getTid } from \"@webhare/gettid\";\nimport * as toddImages from \"@mod-tollium/js/icons\";\nimport { Toolbar, type ToolbarButton, ToolbarSeparator } from \"@mod-tollium/web/ui/components/toolbar/toolbars\";\nimport type * as $todd from \"@mod-tollium/web/ui/js/support\";\nimport type { ObjFrame } from '@mod-tollium/webdesigns/webinterface/components/frame/frame';\n\nimport { type PhotoCrop, addImageCropButton } from \"./crop\";\nimport { type PhotoPoint, addRefPointButton } from \"./refpoint\";\nimport { type PhotoRotate, addImageRotateButton } from \"./scaling\";\nimport { type ImageSurfaceSettings, ImageSurface, type ImageSurfaceOptions } from \"./surface\";\n\nimport \"@mod-tollium/web/ui/components/imageeditor/imageeditor.lang.json\"; //TODO gettid system currently cant read from a JSSDK folder. our caller will have to register texts\nimport \"@mod-tollium/web/ui/common.lang.json\"; //TODO that's a lot of texts from which we only need a small part\nimport type { ImgPoint } from \"./imgtransform\";\nimport type { ResizeMethodName } from \"@webhare/services/src/descriptor\";\n\n// Impose some limits on image sizes\n//ADDME: Should these be different for other platforms, e.g. mobile?\nconst MAX_IMAGE_LENGTH = 32767; // Max length of one size\nconst MAX_IMAGE_AREA = 15000000; // Max number of pixels\n\n/*\nSupported debug flags:\n  isc Set SmartCrop debug flag\n  */\n\nexport type Size = { x: number; y: number };\nexport type RefPoint = Size;\nexport type RectSize = { width: number; height: number };\nexport type Rect = RectSize & { left: number; top: number };\nexport type OffsetRect = Rect & { offsetx: number; offsety: number };\nexport type OffsetRectWithRefpoint = OffsetRect & { refPoint?: RefPoint };\n\nexport type SetStatusCallback = (width: number, height: number, orgwidth?: number, orgheight?: number) => void;\nexport type ExportImageCallback = (blob: Blob | null, settings: { refPoint: RefPoint | null }) => void;\nexport type SetProgressCallback = (value: number, max: number) => void;\nexport type CreateScreenCallback = (components: $todd.ComponentsForMessages) => ObjFrame;\nexport type SetModalLayerOpacityCallback = (opacity: number) => void;\n\ntype ImageAction = \"all\" | \"crop\" | \"rotate\" | \"refpoint\";\n\nexport type LegacyImgSize = {\n  method?: ResizeMethodName;\n  setwidth?: number;\n  setheight?: number;\n  noforce?: boolean;\n  format?: string;\n  bgcolor?: string;\n  allowedactions?: ImageAction[];\n};\n\nexport interface ImageEditorOptions extends ImageSurfaceOptions {\n  width?: number;\n  height?: number;\n  toolbarHeight?: number;\n  imgSize?: LegacyImgSize;\n  setStatus?: (status: string, warning?: string) => void;\n  setModalLayerOpacity?: SetModalLayerOpacityCallback;\n  onMetadataChange?: () => void;\n}\n\nexport class ImageEditor {\n  readonly el: HTMLElement;\n  readonly toolbar: Toolbar;\n  readonly surface: ImageSurface;\n  undoButton: ToolbarButton;\n  redoButton: ToolbarButton;\n  cropper: { button: ToolbarButton; comp: PhotoCrop };\n  rotator: { button: ToolbarButton; comp: PhotoRotate };\n  pointer: { button: ToolbarButton; comp: PhotoPoint };\n  mimeType = \"\";\n  fileName = \"\";\n  orgBlob: Blob | null = null;\n  cropSize: RectSize | null = null;\n  cropRatio: RectSize | null = null;\n  allowedactions: ImageAction[] = [];\n  previewing: boolean = false;\n  dirty: boolean = false;\n  options: ImageEditorOptions;\n\n  constructor(el: HTMLElement, options?: ImageEditorOptions, __shadowroot?: true) {\n    this.el = el;\n    const host = __shadowroot ? this.el.attachShadow({ mode: \"open\" }) : this.el;\n\n    this.options = {\n      width: 640,\n      height: 320, //ADDME default toolbar height!\n      toolbarHeight: 72,\n      editorBackground: \"\",\n      maxLength: MAX_IMAGE_LENGTH,\n      maxArea: MAX_IMAGE_AREA,\n      ...options\n    };\n\n    this.toolbar = new Toolbar({\n      applyIcon: toddImages.createImage(\"tollium:actions/accept\", 24, 24, \"b\"),\n      applyLabel: getTid(\"~apply\"),\n      closeIcon: toddImages.createImage(\"tollium:actions/cancel\", 24, 24, \"b\"),\n      closeLabel: getTid(\"~cancel\")\n    });\n    this.surface = new ImageSurface(this.el, this.toolbar, options);\n    this.el.addEventListener(\"tollium-imageeditor:ready\", evt => this.onLoad(evt as CustomEvent));\n    this.el.addEventListener(\"tollium-imageeditor:refresh\", () => this.previewImgSize());\n    this.el.addEventListener(\"tollium-imageeditor:undo\", () => this.previewImgSize());\n    this.el.addEventListener(\"tollium-imageeditor:redo\", () => this.previewImgSize());\n\n    host.replaceChildren(this.toolbar.node, this.surface.node);\n    this.setSize(this.options.width!, this.options.height!);\n\n    // Add toolbar buttons\n    this.undoButton = ImageSurface.addUndoButton(this.toolbar, this.surface).button;\n    this.redoButton = ImageSurface.addRedoButton(this.toolbar, this.surface).button;\n    this.toolbar.addButton(new ToolbarSeparator);\n\n    this.cropper = addImageCropButton(this.toolbar, this.surface, {\n      fixedSize: this.cropSize || undefined,\n      ratioSize: this.cropRatio || undefined,\n      setStatus: (width: number, height: number, orgwidth?: number, orgheight?: number) => this.setStatus(width, height, orgwidth, orgheight)\n    });\n    this.rotator = addImageRotateButton(this.toolbar, this.surface, {\n      setStatus: (width: number, height: number, orgwidth?: number, orgheight?: number) => this.setStatus(width, height, orgwidth, orgheight),\n    });\n    this.pointer = addRefPointButton(this.toolbar, this.surface, {\n      setStatus: (width: number, height: number, orgwidth?: number, orgheight?: number) => this.setStatus(width, height, orgwidth, orgheight)\n    });\n    if (this.options.imgSize) {\n      this.previewing = true;\n      this.applyImgSize();\n    }\n  }\n\n  onLoad(event: CustomEvent) {\n    this.previewImgSize();\n    this.surface.fireEvent(\"load\", { target: this, width: event.detail.size.x, height: event.detail.size.y }); //who was listening ??\n  }\n  setSize(w: number, h: number) {\n    this.toolbar.setSize(w, this.options.toolbarHeight!);\n    this.surface.setSize(w, h - this.options.toolbarHeight!);\n    this.previewImgSize();\n  }\n  setImg(img: HTMLImageElement, options: ImageSurfaceSettings & {\n    mimetype: string;\n    filename: string;\n    orgblob: null;\n  }) {\n    this.mimeType = options.mimetype;\n    this.fileName = options.filename;\n    this.orgBlob = options.orgblob;\n    this.surface.setImg(img, options);\n  }\n  getFocalPoint(): ImgPoint | null {\n    return this.surface.refPoint ? { //They're integers in HS so we'll keep rounding for now\n      x: Math.round(this.surface.refPoint.x),\n      y: Math.round(this.surface.refPoint.y)\n    } : null;\n  }\n  stop() {\n    this.surface.stop();\n  }\n  isDirty() {\n    return this.dirty || this.surface.isDirty();\n  }\n  applyImgSize() {\n    if (this.options.imgSize) {\n      if (this.options.imgSize.setwidth && this.options.imgSize.setwidth > 0 && this.options.imgSize.setheight && this.options.imgSize.setheight > 0) {\n        this.cropRatio = {\n          width: this.options.imgSize.setwidth,\n          height: this.options.imgSize.setheight\n        };\n        if (this.cropper)\n          this.cropper.comp.options.ratioSize = this.cropRatio;\n      }\n\n      this.allowedactions = this.options.imgSize.allowedactions ?? [];\n    } else {\n      this.allowedactions = [];\n    }\n\n    this.updateActionButtons();\n    this.previewImgSize();\n  }\n  previewImgSize() {\n    if (!this.surface.ctx)\n      return; //not ready yet\n\n    const canvas = this.surface.canvas;\n\n    if (this.previewing && this.options.imgSize) {\n      const resized = resizeCanvasWithMethod(canvas, this.options.imgSize, this.surface.refPoint || this.isRefpointAllowed());\n      if (resized) {\n        this.surface.setPreviewCanvas(resized.canvas, resized.rect);\n        this.setStatus(resized.rect ? resized.rect.width : resized.canvas.width,\n          resized.rect ? resized.rect.height : resized.canvas.height,\n          canvas.width, canvas.height);\n      } else {\n        this.surface.setPreviewCanvas(null);\n        this.setStatus(canvas.width, canvas.height);\n      }\n      this.previewing = true;\n    }\n  }\n  setStatus(width: number, height: number, orgwidth = 0, orgheight = 0) {\n    if (!this.options.setStatus)\n      return;\n    const status = (this.fileName ? this.fileName + \": \" : \"\")\n      + width + \"\\u00d7\" + height\n      + (orgwidth && orgheight ? \" (\" + orgwidth + \"\\u00d7\" + orgheight + \")\" : \"\");\n    const minwarning = (orgwidth > 0 && orgwidth < width) || (orgheight > 0 && orgheight < height);\n    const maxwarning = (orgwidth > 0 || orgheight > 0)\n      && this.surface.imageLimited\n      && !this.surface.undoStack.some(item => item.action === \"crop\");\n    this.options.setStatus(status, minwarning ? \"min\" : maxwarning ? \"max\" : undefined);\n  }\n  updateActionButtons() {\n    const allallowed = this.allowedactions.indexOf(\"all\") >= 0;\n    this.cropper.button.node.style.display = allallowed || this.allowedactions.indexOf(\"crop\") >= 0 ? \"\" : \"none\";\n    this.rotator.button.node.style.display = allallowed || this.allowedactions.indexOf(\"rotate\") >= 0 ? \"\" : \"none\";\n    this.pointer.button.node.style.display = this.isRefpointAllowed() ? \"\" : \"none\";\n  }\n  isRefpointAllowed() {\n    // Setting the reference point only makes sense if the image is not resized (it may be resized in the image cache using\n    // the reference point) or if the resize method is fill (which actually crops the image). It is not enabled when 'all'\n    // actions are allowed; it has to be enabled explicitly.\n    const methodRefPoint = !this.options.imgSize || this.options.imgSize.method === \"none\" || this.options.imgSize.method === \"fill\";\n    return methodRefPoint && this.allowedactions.indexOf(\"refpoint\") >= 0;\n  }\n  cancelModalEdits() {\n    this.toolbar.onModalCancel();\n  }\n  applyModalEdits() {\n    this.toolbar.onModalApply();\n  }\n}\n\nfunction resizeCanvasWithMethod(canvas: HTMLCanvasElement, imgSize: LegacyImgSize, refPoint: RefPoint | boolean, forUpload?: boolean) {\n  let resizeMethod = imgSize.method;\n  if (!resizeMethod)\n    return;\n\n  if (resizeMethod === \"none\") {\n    // Use 'fill' method for previewing refpoint when method is 'none'\n    if (refPoint && !forUpload)\n      resizeMethod = \"fill\";\n    else\n      return;\n  }\n\n  let canvasWidth = imgSize.setwidth ?? 0;\n  let canvasHeight = imgSize.setheight ?? 0;\n  if (canvasWidth || canvasHeight) {\n    let imageWidth = canvas.width;\n    let imageHeight = canvas.height;\n    let imageTop = 0;\n    let imageLeft = 0;\n    if (!canvasWidth) {\n      // If only height is restricted, scale width proportionally\n      canvasWidth = Math.round(canvasHeight * imageWidth / imageHeight);\n    } else if (!canvasHeight) {\n      // If only width is restricted, scale height proportionally\n      canvasHeight = Math.round(canvasWidth * imageHeight / imageWidth);\n    }\n\n    if (resizeMethod.indexOf(\"fit\") === 0 && imageWidth <= canvasWidth && imageHeight <= canvasHeight) {\n      // Don't resize\n      if (resizeMethod === \"fit\") {\n        canvasWidth = imageWidth;\n        canvasHeight = imageHeight;\n      }\n    } else if (canvasWidth / canvasHeight > imageWidth / imageHeight) {\n      // canvas is more wide than image\n      if (resizeMethod.indexOf(\"scale\") === 0\n        || (resizeMethod.indexOf(\"fit\") === 0 && imageHeight > canvasHeight)) {\n        // Scale width proportionally, keep height\n        imageWidth = Math.round(canvasHeight * imageWidth / imageHeight);\n        imageHeight = canvasHeight;\n        // If not scaling to canvas, only keep image width\n        if (resizeMethod.indexOf(\"canvas\") < 0)\n          canvasWidth = imageWidth;\n      } else if (resizeMethod === \"fill\") {\n        // Scale height proportionally, keep width\n        imageHeight = Math.round(canvasWidth * imageHeight / imageWidth);\n        imageWidth = canvasWidth;\n      }\n    } else {\n      // canvas is more tall than image\n      if (resizeMethod.indexOf(\"scale\") === 0\n        || (resizeMethod.indexOf(\"fit\") === 0 && imageWidth > canvasWidth)) {\n        // Scale height proportionally, keep width\n        imageHeight = Math.round(canvasWidth * imageHeight / imageWidth);\n        imageWidth = canvasWidth;\n        // If not scaling to canvas, only keep image height\n        if (resizeMethod.indexOf(\"canvas\") < 0)\n          canvasHeight = imageHeight;\n      } else if (resizeMethod === \"fill\") {\n        // Scale width proportionally, keep height\n        imageWidth = Math.round(canvasHeight * imageWidth / imageHeight);\n        imageHeight = canvasHeight;\n      }\n    }\n\n    // Center image\n    imageTop = Math.round((canvasHeight - imageHeight) / 2);\n    imageLeft = Math.round((canvasWidth - imageWidth) / 2);\n\n    let rect: OffsetRectWithRefpoint | undefined;\n    if (resizeMethod === \"fill\") {\n      // When filling, either top or left is 0, the other is <0\n      rect = {\n        left: Math.abs(imageLeft),\n        top: Math.abs(imageTop),\n        offsetx: 0,\n        offsety: 0,\n        width: canvasWidth,\n        height: canvasHeight,\n      };\n      if (refPoint && refPoint !== true) {\n        if (!rect.left) {\n          const curtop = rect.top;\n          const scalex = imageWidth / canvas.width;\n          rect.top = (refPoint.y * scalex / imageHeight) * (imageHeight - canvasHeight);\n          rect.offsety = rect.top - curtop;\n          rect.refPoint = {\n            x: refPoint.x * scalex,\n            y: refPoint.y * scalex - rect.top\n          };\n        } else if (!rect.top) {\n          const curleft = rect.left;\n          const scaley = imageHeight / canvas.height;\n          rect.left = (refPoint.x * scaley / imageWidth) * (imageWidth - canvasWidth);\n          rect.offsetx = rect.left - curleft;\n          rect.refPoint = {\n            x: refPoint.x * scaley - rect.left,\n            y: refPoint.y * scaley\n          };\n        }\n      }\n\n      if (!forUpload) {\n        canvasWidth = imageWidth;\n        canvasHeight = imageHeight;\n        imageTop = 0;\n        imageLeft = 0;\n      } else {\n        imageTop -= rect.offsety;\n        imageLeft -= rect.offsetx;\n      }\n    }\n\n    // Create the resized canvas\n    const resized: HTMLCanvasElement = <canvas width={canvasWidth} height={canvasHeight} />;\n    const ctx = resized.getContext(\"2d\")!;\n    // Set background color, if specified\n    if (imgSize.bgcolor && imgSize.bgcolor !== \"transparent\") {\n      ctx.fillStyle = imgSize.bgcolor;\n      ctx.fillRect(0, 0, canvasWidth, canvasHeight);\n    }\n    // Draw (and possibly resize) the editor image onto the resized canvas\n    ctx.drawImage(canvas, imageLeft, imageTop, imageWidth, imageHeight);\n    return { canvas: resized, rect: rect };\n  }\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/imgtransform\" {\n}\n\nimport * as dompack from \"@webhare/dompack\";\nimport { ImageEditor } from \"./imageeditor\";\n\nexport type ImgTransformMetadataEvent = CustomEvent<ImgTransformMetadata & ImgTransformSettings>;\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    /** Fired whenever image metadata changes */\n    \"wh-imgtransform:metadata\": ImgTransformMetadataEvent;\n  }\n}\n\n/* we attempt to clean up/define some 'clean' types for images with more common names\n   these types don't really exist in the browser - there was WebkitPoint (https://developer.mozilla.org/en-US/docs/Web/API/WebKitPoint)\n   which never became Point, and there's DOMPoint that works in 3 dimensions */\n\nexport type ImgPoint = {\n  x: number;\n  y: number;\n};\n\nexport type ImgSize = {\n  width: number;\n  height: number;\n};\n\n/** ImageEditorSettings represents the non-destructive settings supported by the image editor.\n    which is currently only the focal point (filename mimetype etc should not be the editor's problem)\n*/\nexport type ImgTransformSettings = {\n  /** Image focal point. null if not yet set*/\n  focalPoint: ImgPoint | null;\n};\n\n/** Current image metadata */\nexport type ImgTransformMetadata = {\n  imgSize: ImgSize;\n};\n\nexport type ImgTransformSaveOptions = {\n  /** Type. Browsers default to image/png (and also pick that if the requested type is unsupported. See also https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob) */\n  type?: string;\n  /** Quality for lossy formats, between 0 and 1. Defaults to 0.85 if not set */\n  quality?: number;\n};\n\n\n//stylesheet for when running in Shadow mode\nconst stylesheet = `\n:host {\n  overflow: hidden;\n  display: inline-block;\n  position: relative;\n}\n\n.wh-toolbar,\n.wh-toolbar-panel\n{\n  height: 72px;\n}\n\n.wh-toolbar-modalholder,\n.wh-toolbar-panel\n{\n  display: flex;\n  flex-wrap: nowrap;\n  flex: 1;\n}\n\n.wh-toolbar-panel\n{\n  order: 1;\n}\n\n.wh-toolbar-modalbuttons\n{\n  display: flex; /* remove to show apply and cancel buttons at the right side of the toolbar */\n  flex: 0;\n  order: 2;\n  text-align: right;\n}\n\n.wh-toolbar .wh-toolbar-button\n{\n  border: none;\n  border-radius: 2px;\n  cursor: pointer;\n  display: inline-block;\n  font-size: 11px;\n  height: 72px;\n  line-height: inherit;\n  margin: 0;\n  min-width: 73px;\n  overflow: hidden;\n  padding: 16px 4px;\n  position: relative;\n  text-align: center;\n  vertical-align: top;\n  white-space: nowrap;\n}\n\n.wh-toolbar .wh-toolbar-button > span\n{\n  display: block;\n  overflow: hidden;\n  pointer-events: none;\n  text-align: center !important;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.wh-toolbar .wh-toolbar-button:active > span\n{\n  left:1px;\n  position:relative;\n  top:1px;\n}\n.wh-toolbar .wh-toolbar-button.disabled:active > span\n{\n  left: 0;\n  top: 0;\n}\n\n.wh-toolbar .wh-toolbar-button img\n{\n  height: 24px;\n  margin: 0;\n  pointer-events: none;\n  width: 24px;\n}\n\n.wh-toolbar .wh-toolbar-button:active img\n{\n  left: 1px;\n  top: 1px;\n  position: relative;\n}\n\n.wh-toolbar .wh-toolbar-button.disabled\n{\n  cursor: default;\n}\n\n.wh-toolbar .wh-toolbar-button.disabled.pressed span,\n.wh-toolbar .wh-toolbar-button.disabled:active span,\n.wh-toolbar .wh-toolbar-button.disabled:active img\n{\n  left: 0;\n  top: 0;\n}\n\n.wh-toolbar .wh-toolbar-button:hover img\n{\n  opacity: 1;\n}\n\n.wh-toolbar .wh-toolbar-button + .wh-toolbar-button\n{\n  margin-left: 4px;\n}\n.wh-toolbar .wh-toolbar-separator\n{\n  display: inline-block;\n  height: 100%;\n  margin: 2px 8px 0 8px;\n  position: relative;\n  vertical-align: top;\n  width: 0;\n}\n.wh-toolbar .wh-toolbar-separator:before\n{\n  border-color: inherit;\n  border-style: solid;\n  border-width: 1px;\n  bottom:18px;\n  content: \"\";\n  position: absolute;\n  top: 12px;\n  width:0;\n}\n\n.wh-holder\n{\n  box-sizing:border-box;\n}\n.wh-toolbar\n{\n}\n.wh-toolbar > *:not(.open)\n{\n  display:none;\n}\n\n/***************\n * this is a straight cop from imageeditor.css\n * */\n.wh-imageeditor-fullscreen\n{\n  position: fixed;\n  z-index: 1000;\n  top:0;\n  left:0;\n  bottom:0;\n  right:0;\n  background:#dddddd;\n}\n\n.wh-image-surface\n{\n  position:relative;\n  overflow:hidden;\n  /*checkerboard*/\n  background: #ccc url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAIUlEQVQ4y2P4jxecwQsYRjWPaiaoGb80fqNHNY9qJqgZAP2BNAVlXUe2AAAAAElFTkSuQmCC) 0 0 repeat;\n}\n\n  .wh-cropbox\n, .wh-refbox\n{\n  position:absolute;\n  margin:0 auto;\n  z-index: 0;\n}\n  .wh-cropbox-mask\n, .wh-cropbox-img\n{\n  position:absolute;\n  top:0;\n  right:0;\n  left:0;\n  bottom:0;\n  width:inherit;\n  height:inherit;\n  overflow: hidden;\n}\n\n.wh-cropbox-mask\n{\n  background-color: #000;\n  opacity:0.6;\n  position: absolute;\n  z-index: 1;\n}\n.wh-cropbox-dragger\n{\n  position:absolute;\n  border:1px solid #fff;\n  background-color: green;\n  width:16px;\n  height:16px;\n  border-radius:8px;\n  margin:-9px;\n  cursor:pointer;\n  z-index: 2;\n}\n.wh-cropbox-viewport\n{\n  position:absolute;\n  border:1px solid #000;\n  cursor:pointer;\n  width:inherit;\n  height:inherit;\n}\n.wh-cropbox-viewport > div\n{\n  position:absolute;\n  background-color: #000;\n}\n  .wh-cropbox-viewport .vline1\n, .wh-cropbox-viewport .vline2\n{\n  height:inherit;\n  width:1px;\n  top:0;\n  bottom:0;\n}\n.wh-cropbox-viewport .vline1\n{\n  left:33%;\n}\n.wh-cropbox-viewport .vline2\n{\n  right:33%;\n}\n\n  .wh-cropbox-viewport .hline1\n, .wh-cropbox-viewport .hline2\n{\n  height:1px;\n  width:inherit;\n  left:0;\n  right:0;\n}\n.wh-cropbox-viewport .hline1\n{\n  top:33%;\n}\n.wh-cropbox-viewport .hline2\n{\n  bottom:33%;\n}\n\n.wh-refbox > canvas\n{\n  cursor: crosshair;\n}\n\n.wh-refbox-pointer\n{\n  background: transparent;\n  border: 5px solid green;\n  border-radius: 100%;\n  cursor: move;\n  height: 16px;\n  margin-left: -8px;\n  margin-top: -8px;\n  position: absolute;\n  width: 16px;\n}\n\n`;\n\nexport class ImgTransformElement extends HTMLElement {\n  #editor!: ImageEditor;\n  static observedAttributes = [\"focalpoint\"];\n\n  constructor() {\n    super();\n\n    /* init the component in the connectedCallback (or when a method is called), sp\n       we can read the attributes and set the initial state\n    */\n  }\n\n  initEditor() {\n    if (this.#editor)\n      return;\n\n    const imgSize = this.hasAttribute(\"imgsize\") ? JSON.parse(this.getAttribute(\"imgsize\")!) : undefined;\n\n    this.#editor = new ImageEditor(this, {\n      onMetadataChange: () => this.#broadcastMetadata(),\n      imgSize,\n    }, true);\n    this.attributeChangedCallback();\n\n    const styleSheet = document.createElement(\"style\");\n    styleSheet.innerText = stylesheet;\n    this.shadowRoot?.prepend(styleSheet);\n  }\n\n  connectedCallback() {\n    this.initEditor();\n  }\n\n  #broadcastMetadata() {\n    dompack.dispatchCustomEvent(this, \"wh-imgtransform:metadata\", {\n      bubbles: true,\n      cancelable: false,\n      detail: {\n        focalPoint: this.#editor.surface.refPoint,\n        imgSize: {\n          width: this.#editor.surface.canvasData!.realSize.x ?? this.#editor.surface.imgData!.size.x,\n          height: this.#editor.surface.canvasData!.realSize.y ?? this.#editor.surface.imgData!.size.y\n        }\n      }\n    });\n  }\n\n  attributeChangedCallback(/*name: string, oldValue: string, newValue: string*/) {\n    this.#editor.pointer.button.node.style.display = this.hasAttribute(\"focalpoint\") ? \"\" : \"none\";\n  }\n\n  /** Load a blob into the canvas  */\n  async loadImage(image: Blob, settings?: Partial<ImgTransformSettings>): Promise<void> {\n    this.initEditor();\n\n    // Cancel current modal edits\n    this.#editor.cancelModalEdits();\n\n    //We use Blob because we're most likely to work and return uploads. Image elements just complicate load/error handling\n    //Not sure if we need to care about EXIF? https://github.com/whatwg/html/issues/7210 suggests al browsers apply EXIF orientation\n    const bitmap = await createImageBitmap(image);\n    this.#editor.surface.setImgBitmap(bitmap, {\n      focalPoint: null,\n      ...settings\n    });\n  }\n\n  async saveImage(options?: ImgTransformSaveOptions): Promise<{\n    blob: Blob;\n    settings: ImgTransformSettings;\n  }> {\n    this.initEditor();\n\n    // Apply current modal edits\n    this.#editor.applyModalEdits();\n\n    //WebHare Harescript can only efficiently ScanBlob JPEG, so avoid WEBP/AVIF for now\n    const type = options?.type === \"image/png\" ? \"image/png\" : \"image/jpeg\";\n    const quality = options?.quality ?? 0.85;\n    if (quality < 0 || quality > 1) //\"is a number in the range 0.0 to 1.0 inclusive\"\n      throw new Error(\"Quality must be between 0 and 1\");\n\n    const blob = await new Promise<Blob | null>(resolve => this.#editor.surface.canvas.toBlob(resolve, type, quality));\n    if (!blob)\n      throw new Error(\"Failed to save image\");\n\n    return {\n      blob,\n      settings: { focalPoint: this.#editor.getFocalPoint() }\n    };\n  }\n}\n","import * as dompack from \"@webhare/dompack\";\nimport { showDialog } from \"../../frontend/components/dialogs\";\n\n// A disposable spinner so we can toggle it without having to try/catch\nexport class Spinner {\n  private dialog: HTMLDialogElement;\n\n  constructor() {\n    this.dialog = dompack.create(\"dialog\", { childNodes: [\"Please wait...\"], class: [\"spinner\"] });\n    document.body.append(this.dialog);\n    showDialog(this.dialog, true);\n  }\n  [Symbol.dispose]() {\n    this.dialog.remove();\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment, createRef } from \"preact\";\n// import { assertHTMLElement } from \"../../pages/editor/support\";\n\n// import { renderDialog } from \"../components/dialogs\";\nimport { ModalDialog } from \"../components/dialogs\";\n\nimport { CeremonyMomentSlide } from \"../../pages/editor/state\";\nimport \"./imagecropper.scss\";\n\nimport { ImgTransformElement, type ImgTransformMetadataEvent } from \"@webhare/imgtransform\";\n\nimport { SingleFileUploader, type UploadInstructions, type UploadResult } from \"@webhare/upload\";\n\nimport { Spinner } from \"../../pages/editor/components\";\nimport { backend } from \"../../pages/editor/editor\";\nimport { getTid } from \"@webhare/gettid\";\nimport type { LegacyImgSize } from \"@webhare/imgtransform/src/imageeditor\";\n\n/////// Setup the WH image editor\n\ndeclare module 'preact' {\n  // eslint-disable-next-line @typescript-eslint/no-namespace\n  namespace JSX {\n    interface IntrinsicElements {\n      'wh-imgtransform': preact.JSX.HTMLAttributes<HTMLElement> & { imgSize: string; onImageEditMetadata?: (event: ImgTransformMetadataEvent) => void };\n    }\n  }\n}\n\ncustomElements.define(\"wh-imgtransform\", ImgTransformElement);\n//////// End WH image editor\n\ninterface EditSlideProps {\n  slide: CeremonyMomentSlide;\n  // onChange: (duration: number) => void;\n  onResult: (item: CeremonyMomentSlide | null) => void;\n}\n\nexport class EditSlideDialog extends Component<EditSlideProps> {\n  imgEditorRef = createRef<ImgTransformElement>();\n\n  constructor(props: EditSlideProps) {\n    super(props);\n  }\n\n  async componentDidMount() {\n\n    //FIXME shouldn't we just get the original straight from WRD instead of a resized version?\n    const fetchresult = await fetch(this.props.slide.previewedit!);\n    if (!fetchresult.ok)\n      throw new Error(`Failed to fetch: ${fetchresult.statusText}`);\n\n    // this.imgEditorRef.current?.cropRatio = { width: 16, height: 9 };\n    this.imgEditorRef.current?.loadImage(await fetchresult.blob());\n\n    // this.imgEditorRef.current?.setSize(300, 200);\n\n    // Force outside CSS access to our custom component (as hack until the image editor has become more styleable)\n    const inside = this.imgEditorRef.current?.shadowRoot;\n    if (inside) {\n      // console.log(\"toolbar\", inside.querySelector(\"wh-toolbar\"));\n      inside.querySelector(\".wh-toolbar\")?.setAttribute(\"part\", \"wh-toolbar\");\n      inside.querySelectorAll(\".wh-toolbar-button\").forEach(node => node.setAttribute(\"part\", \"wh-toolbar-button\"));\n      inside.querySelector(\".wh-image-surface\")?.setAttribute(\"part\", \"wh-image-surface\");\n    }\n\n  }\n\n  onSave = async () => {\n    using spinner = new Spinner;\n    void (spinner); //we're not using the name but you can't use using without a varname..\n\n    const blob = (await this.imgEditorRef.current!.saveImage()).blob;\n    const uploader = new SingleFileUploader(blob);\n    const uploadinstructions: UploadInstructions = await backend.requestUpload(uploader.manifest);\n    const uploadedfile: UploadResult = await uploader.upload(uploadinstructions); //, { onProgress, signal: aborter.signal });\n    await backend.updateMedia(this.props.slide.id, { token: uploadedfile.token, url: \"\", filename: uploadedfile.name, mimetype: uploadedfile.type });\n\n    this.props.onResult(this.props.slide); //FIXME what to return exactly? do we need to wait for the backend to update us?\n  };\n\n  render() {\n    const footercontent =\n      <Fragment>\n        <button class=\"cm-dialog__cancel-button wh-button-outline\"\n          type=\"button\"\n          onClick={() => this.props.onResult(null)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n\n        <button class=\"cm-dialog__submit-button wh-button-solid wh-button-default\"\n          type=\"button\"\n          onClick={this.onSave}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.save\")}</button>\n      </Fragment>;\n\n    // FIXME: imgSize added here to influence the aspect ratio of cropping.\n    // Using a very large size to prevent this from not only forcing an aspect ratio but also causing the image to be scaled down\n    const imgSize: LegacyImgSize = { method: \"fit\", setwidth: 16000, setheight: 9000, allowedactions: [\"all\"] };\n\n    return <ModalDialog title={getTid(\"ceremonymedia:webdesigns.site.js.imagecropper.title\")}\n      dialogname=\"imageeditor\"\n      class=\"cm-dialog--editmediadialog\"\n      isOpen={true}\n      closeButton={true}\n      onClose={() => this.props.onResult(null)}\n      footerContent={footercontent}\n    ><wh-imgtransform ref={this.imgEditorRef} imgSize={JSON.stringify(imgSize)} /></ModalDialog>;\n  }\n}\n","// Auto-generated language file from /opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/webdesigns/ceremonysite/frontend/frontend.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"ceremonymedia\",\"nl\",{\"common\":{\"condolence_banner_image_description\":[\"• de condoleance pagina maakt een uitsnede met 7:2 beeldverhouding\",\"\\n\",\"• beinvloed de uitsnede via de edit knop en referentiepunt\",\"\\n\",\"• gebruik ten minste 1820 x 532 voor een scherpe afbeelding\"],\"condolence_photo_image_description\":[\"• uitsnede met 1:1 beeldverhouding wordt gebruikt\",\"\\n\",\"• beinvloed de uitsnede via de edit knop en referentiepunt\",\"\\n\",\"• minimaal 416 x 416 voor een scherpe afbeelding\"],\"title_en\":\"Titel (EN)\",\"title_nl\":\"Titel (NL)\",\"access_level\":{\"access_level\":\"Toegangsniveau\",\"collaborator\":\"Samenwerker\",\"organizer\":\"Organisator\"},\"actions\":{\"openceremonyeditor\":\"Ceremony editor bekijken\",\"openceremonyeditorkeeptoken\":\"Ceremony editor bekijken (behoud token)\",\"opencondolencepage\":\"Condoleancepagina bekijken\",\"openstreampage\":\"Stream pagina bekijken\",\"openstreampage-asadmin\":\"Stream pagina bekijken (als beheerder)\",\"openstreampage-asuser\":\"Stream pagina bekijken (als bezoeker)\"},\"momenttype\":{\"music\":\"Muziek\",\"presentation\":\"Presentatie\",\"slideshow\":\"Slideshow\",\"speaker\":\"Spreker\",\"video\":\"Video\"}},\"webdesigns\":{\"site\":{\"js\":{\"access\":{\"collaborators\":\"Gebruikers\",\"info\":\"Nodig iemand uit om samen te werken aan het samenstellen van de ceremonie.\",\"invitedcollaborator-p1\":[\"Je hebt \",{\"t\":\"tag\",\"tag\":\"b\",\"subs\":[1,\" \",2]},\" uitgenodigd om samen te werken aan het samen stellen van de ceremonie.\"],\"invitedcollaborator-p2\":[{\"t\":\"tag\",\"tag\":\"b\",\"subs\":[1]},\" ontvangt nu een mail om een account aan te maken.\",\"\\n\",\"Niet ontvangen? Vraag of \",{\"t\":\"tag\",\"tag\":\"b\",\"subs\":[1]},\" ook de spambox heeft gecheckt.\"],\"livestreamcode\":\"Livestream code\",\"liveurl\":\"Livestream URL\",\"organizers\":\"Beheerder(s)\",\"removecollaboratorfailed\":[\"De toegang van gebruiker \",1,\" kon niet worden ingetrokken.\"],\"removedcollaborator\":[\"De toegang van gebruiker \",1,\" is ingetrokken.\"],\"sureremovecollaborator\":[\"Weet u zeker dat u de toegang van gebruiker \",1,\" wilt intrekken?\"],\"title\":\"Beheer gebruikers\"},\"account\":{\"password\":\"Wachtwoord\",\"passwordrepeat\":\"Herhaling van het wachtwoord\",\"passwordsdontmatch\":\"De wachtwoorden komen niet overeen.\",\"passwordsettings\":\"Wachtwoord instellen\",\"setpassword\":\"Stel wachtwoord in\"},\"addcollaborator\":{\"invite\":\"Uitnodigen\",\"title\":\"Iemand uitnodigen\"},\"addmoment\":{\"addamoment\":[\"Voeg een \",\"\\n\",\" moment toe\"],\"choosewhattoadd\":[\"Kies\",\"\\n\",\"wat u toe wilt voegen\"],\"musicintro\":\"U kunt een eigen muziek uploaden (mp3) óf een muziek uit onze media bibliotheek gebruiken. Maak een keuze hieronder.\",\"processing\":\"Bezig met verwerken\",\"slideshowintro\":\"U kan eigen foto’s uploaden óf sfeerfoto’s uit onze media bibliotheek gebruiken. Maak een keuze hieronder.\",\"momenttype\":{\"music\":\"Muziek\",\"presentation\":\"Powerpoint\",\"slideshow\":\"Foto's\",\"speaker\":\"Spreker\",\"video\":\"Video\"}},\"audioplayer\":{\"play\":\"Afspelen\",\"seekbar\":\"Zoekschuifbalk\"},\"buttons\":{\"add\":\"Toevoegen\",\"addcollaborators\":\"Voeg mensen toe\",\"addperson\":\"Persoon toevoegen\",\"adjust\":\"Aanpassen\",\"apply\":\"Toepassen\",\"applytoall\":\"Toepassen op alle\",\"cancel\":\"Annuleren\",\"close\":\"Sluiten\",\"condolencepage\":\"Condoleance pagina\",\"delete\":\"Verwijderen\",\"deleteall\":\"Verwijder alles\",\"down\":\"Omlaag\",\"downloadscript\":[\"Draaiboek\",\"\\n\",\"downloaden\"],\"duration\":\"Tijdsduur\",\"edit\":\"Bewerken\",\"forgotpassword\":\"Wachtwoord vergeten\",\"help\":\"Help\",\"imagesfromlibrary\":\"Foto’s uit media bibliotheek\",\"library\":\"Bibliotheek\",\"login\":\"Inloggen\",\"logout\":\"Uitloggen\",\"markascompleted\":\"Indienen\",\"musicfromlibrary\":\"Muziek uit media bibliotheek\",\"musiclibrary\":\"Muziekbibliotheek\",\"myaccount\":\"Mijn account\",\"no\":\"Nee\",\"ok\":\"Ok\",\"preview\":\"Voorvertoning\",\"save\":\"Bewaren\",\"sendemail\":\"E-mail versturen\",\"submit-post\":\"Plaatsen\",\"up\":\"Omhoog\",\"uploadinprogress-audio\":\"Bezig met verwerken\",\"uploadinprogress-presentation\":\"Bezig met verwerken\",\"uploadinprogress-video\":\"Bezig met verwerken\",\"uploadmusic\":\"Muziek uploaden\",\"uploadownimages\":\"Eigen foto’s uploaden\",\"uploadownmusic\":\"Eigen muziek uploaden\",\"uploadpresentation\":\"Powerpoint presentatie uploaden\",\"uploadvideo\":\"Video uploaden\",\"yes\":\"Ja\"},\"chooselanguage\":{\"language\":\"Taal\",\"title\":\"Kies de taal voor deze website\"},\"condolence\":{\"additem_button_label\":\"Plaats een bericht of brand een kaarsje\",\"condolence-page-for\":\"Condoleance pagina voor\",\"entercode\":\"Condoleance pagina code\",\"enterpassword\":\"Wachtwoord\",\"loading\":\"Condoleance pagina wordt ingeladen...\",\"login\":\"Ga door\",\"manager_message\":[\"Welkom \",1,\" Je kan als beheerder van de ceremony de bijdragen op deze pagina modereren.\"],\"message-addposttoceremony-confirm\":[\"Weet je zeker dat je de bijdrage van \\\"\",1,\"\\\" wil toevoegen aan de ceremonie?\"],\"message-addposttoceremony-done\":[\"De bijdrage van \\\"\",1,\"\\\" is toegevoegd aan de ceremonie.\"],\"message-addposttoceremony-failed\":[\"Toevoegen van de bijdrage van \\\"\",1,\"\\\" aan de ceremonie is niet gelukt.\"],\"message-addtoceremony-button\":\"Voeg toe aan ceremonie\",\"message-edit-panelheader\":\"Kies een actie\",\"message-password-incorrect\":\"Wachtwoord onjuist\",\"message-removepost-button\":\"Verwijder bijdrage\",\"message-removepost-confirm\":[\"Weet je zeker dat je de bijdrage van \\\"\",1,\"\\\" wil verwijderen?\"],\"message-removepost-done\":[\"De bijdrage van \\\"\",1,\"\\\" is verwijderd.\"],\"message-removepost-failed\":[\"Het verwijderen van de bijdrage van \\\"\",1,\"\\\" is niet gelukt.\"],\"msg-code-incoorrect\":[\"Code \\\"\",1,\"\\\" is geen geldige pagina\"],\"no-messages-posted\":\"Er zijn nog geen bijdragen geplaatst.\"},\"dialog-duration\":{\"momentduration-title\":\"Tijdsduur instellen\",\"time\":\"Tijd\"},\"editor\":{\"chooseceremony\":\"Kies een ceremonie\",\"header-preview\":\"Voorvertoning ceremonie:\",\"header-preview-closebutton-arialabel\":\"Sluit preview\",\"loading\":\"Aan het inladen...\",\"message-markascompleted-confirm\":\"Bent u klaar met het samenstellen van de ceremonie? Let op: nadat u de ceremonie heeft ingediend, kunt u deze niet meer wijzigen.\",\"message-markascompleted-confirm-title\":\"Ceremonie indienen\",\"noassociatedceremonies\":\"Er zijn geen ceremonies gekoppeld aan je account.\",\"noassociatedceremoniesinfo\":\"Op het moment zijn er geen actieve ceremonies die aan uw account zijn gekoppeld\",\"stream\":{\"invalidconfiguration\":\"De videostream kan helaas niet worden gestart\",\"loading\":\"Laden...\",\"nostream\":\"Deze livestreamcode is ongeldig of bestaat niet meer\",\"streamended\":\"De livestream is afgelopen, over enkele ogenblikken kunt u hier de stream terugkijken\",\"streamstartsat\":[\"De livestream begint om \",1,\" - \",2]}},\"editorlogin\":{\"emailsent\":\"Er is een e-mail verstuurd met instructies om uw wachtwoord te resetten.\",\"forgotpassword\":\"Wachtwoord vergeten\",\"login\":\"Inloggen\",\"password\":\"Wachtwoord\",\"resetpassword-explanation\":\"Vul uw e-mailadres in en u ontvangt binnen enkele minuten een link waarmee u een nieuw wachtwoord kunt instellen.\",\"youremail\":\"Uw e-mailadres\"},\"formfields\":{\"email\":\"E-mail\",\"firstname\":\"Voornaam\",\"lastname\":\"Achternaam\"},\"forms\":{\"error-invalidemail\":\"Ongeldig e-mailadres\",\"error-required\":\"Dit veld is verplicht\",\"fieldlabel-minutes\":\"min\",\"fieldlabel-seconds\":\"sec\"},\"imagecropper\":{\"title\":\"Afbeelding bewerken\"},\"imagelibrarychooser\":{\"imagecount\":[{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"Er is 1 afbeelding beschikbaar\"],\"subselse\":[\"Er zijn \",1,\" afbeeldingen beschikbaar\"]}],\"title\":\"Afbeeldingen bibliotheek\"},\"medialisteditor\":{\"cutoffmessage\":[\"De totale duur van de slides is \",1,\", ze zullen worden afgekapt als de totale duur van \",2,\" is bereikt.\"],\"dialogtitle\":\"Afbeeldingen\",\"duration\":\"Tijdsduur\",\"duration-linked-to-audio\":\"Gekoppeld aan de muziek\",\"image\":\"Afbeelding\",\"image-lc\":\"afbeelding\",\"images-lc\":\"afbeeldingen\",\"repeatmessage\":[\"De totale duur van de slides is \",1,\", ze zullen worden herhaald tot de totale duur van \",2,\" is bereikt.\"],\"sureclearall\":\"Weet u zeker dat u alle afbeeldingen wilt verwijderen?\",\"slideduration\":{\"seconds\":\"Aantal secondes\",\"title\":\"Tijdsduur van deze afbeelding\"}},\"moments\":{\"preview-nextbutton-arialabel\":\"Toon vorig moment\",\"preview-previewbutton-arialabel\":\"Toon volgende moment\"},\"momenttile\":{\"audio-noname\":\"(geen naam)\",\"duration-locked-to-audio\":\"Als er muziek gekoppeld is wordt de tijdsduur van de muziek aangehouden.\",\"noteshint\":\"Hier kan u notities achterlaten voor uzelf of voor degene die de tijdens de ceremonie de bediening doet.\",\"presentation-previewinfo\":\"Er is helaas geen voorvertoning mogelijk van een Powerpoint.\",\"slideshow-previewinfo\":\"- De slides zullen automatisch worden herhaald -\",\"placeholders\":{\"newtile-title-music\":\"Nieuwe muziek\",\"newtile-title-presentation\":\"Nieuwe presentatie\",\"newtile-title-slideshow\":\"Nieuwe slideshow\",\"newtile-title-speaker\":\"Nieuwe spreker\",\"newtile-title-video\":\"Nieuwe video\"},\"slideshow\":{\"imagenroftotal\":[\"Afbeelding \",1,\" van de \",2],\"images\":\"Slideshow afbeeldingen\",\"noimages\":\"Geen afbeeldingen\",\"oneimage\":\"Eén afbeelding\",\"shownextimage\":\"Toon volgende afbeelding\",\"showpreviousimage\":\"Toon vorige afbeelding\"}},\"musiclibraryviewer\":{\"all\":\"Alles\",\"favorites\":\"Vaak gekozen\",\"noresults\":\"Er zijn geen resultaten voor uw zoekopdracht.\",\"searchfield-description\":\"Zoek op artiest of titel.\",\"title\":\"Muziek bibliotheek\"},\"myaccount\":{\"title\":\"Mijn account\"},\"pagination\":{\"nextpage-arialabel\":\"Volgende\",\"page\":[\"Pagina \",1],\"pagination\":\"Paginatie\",\"previouspage-arialabel\":\"Vorige\"},\"simplescreen\":{\"titles\":{\"error\":\"Foutmelding\",\"info\":\"Informatie\",\"question\":\"Vraag\",\"warning\":\"Waarschuwing\"}},\"streamcode\":{\"entercode\":\"Voer hier uw livestreamcode in\",\"explanation\":\"Middels de verkregen inloggegevens kunt u live meekijken\",\"invalidcode\":\"We kunnen deze livestreamcode niet vinden. Controleer of de code correct is ingevoerd en probeer het opnieuw.\",\"login\":\"Inloggen\",\"unmute\":\"Geluid aanzetten\"}}}}});\nregisterTexts(\"ceremonymedia\",\"en\",{\"common\":{\"condolence_banner_image_description\":[\"• the condolence page will make a cutout with 7:2 aspect ratio\",\"\\n\",\"• influence the cutout using the edit button and reference point\",\"\\n\",\"• use at least of 1820 x 532 for a sharp image\"],\"condolence_photo_image_description\":[\"• a cutout with 1:1 aspect ratio will be used\",\"\\n\",\"• influence the cutout using the edit button and reference point\",\"\\n\",\"• use at least of 416 x 416 for a sharp image\"],\"title_en\":\"Title (EN)\",\"title_nl\":\"Title (NL)\",\"access_level\":{\"access_level\":\"Access level\",\"collaborator\":\"Collaborator\",\"organizer\":\"Organizer\"},\"actions\":{\"openceremonyeditor\":\"View ceremony editor\",\"openceremonyeditorkeeptoken\":\"View ceremony editor (keep token)\",\"opencondolencepage\":\"View condolence page\",\"openstreampage\":\"View stream page\",\"openstreampage-asadmin\":\"View stream page (as admin)\",\"openstreampage-asuser\":\"View stream page (as user)\"},\"momenttype\":{\"music\":\"Music\",\"presentation\":\"Presentation\",\"slideshow\":\"Photos\",\"speaker\":\"Speaker\",\"video\":\"Video\"}},\"webdesigns\":{\"site\":{\"js\":{\"access\":{\"collaborators\":\"Users\",\"info\":\"Invite someone to collaborate on this ceremony\",\"invitedcollaborator-p1\":[\"You have invited \",{\"t\":\"tag\",\"tag\":\"b\",\"subs\":[1,\" \",2]},\" to collaborate on putting together the ceremony.\"],\"invitedcollaborator-p2\":[{\"t\":\"tag\",\"tag\":\"b\",\"subs\":[1]},\" will now receive an email to create an account.\",\"\\n\",\"Not received? Ask if \",{\"t\":\"tag\",\"tag\":\"b\",\"subs\":[1]},\" has also checked the spam box.\"],\"livestreamcode\":\"Livestream code\",\"liveurl\":\"Livestream URL\",\"organizers\":\"Organizer(s)\",\"removecollaboratorfailed\":[\"The access of user \",1,\" to this ceremony could not be revoked.\"],\"removedcollaborator\":[\"The access of user \",1,\" to this ceremony has been revoked.\"],\"sureremovecollaborator\":[\"Are you sure you want to revoke the access of user \",1,\" to this ceremony?\"],\"title\":\"Manage users\"},\"account\":{\"password\":\"Password\",\"passwordrepeat\":\"Repeat of the password\",\"passwordsdontmatch\":\"The passwords do not match.\",\"passwordsettings\":\"Reset your password\",\"setpassword\":\"Set the password\"},\"addcollaborator\":{\"invite\":\"Invite\",\"title\":\"Invite someone\"},\"addmoment\":{\"addamoment\":[\"Add a\",\"\\n\",\"moment\"],\"choosewhattoadd\":[\"Choose\",\"\\n\",\"what to add\"],\"musicintro\":\"You can upload your own music (mp3) or choose a song from the media library. Please choose below.\",\"processing\":\"Busy processing\",\"slideshowintro\":\"You can upload your own images or use images from the media library. Please choose below.\",\"momenttype\":{\"music\":\"Music\",\"presentation\":\"Powerpoint\",\"slideshow\":\"Photo slideshow\",\"speaker\":\"A speaker\",\"video\":\"Video\"}},\"audioplayer\":{\"play\":\"Play\",\"seekbar\":\"Seek bar\"},\"buttons\":{\"add\":\"Add\",\"addcollaborators\":\"Add people\",\"addperson\":\"Add persoon\",\"adjust\":\"Adjust\",\"apply\":\"Apply\",\"applytoall\":\"Apply to all\",\"cancel\":\"Cancel\",\"close\":\"Close\",\"condolencepage\":\"Condolence page\",\"delete\":\"Remove\",\"deleteall\":\"Remove all\",\"down\":\"Down\",\"downloadscript\":[\"Download\",\"\\n\",\"script\"],\"duration\":\"Duration\",\"edit\":\"Edit\",\"forgotpassword\":\"Forgot password\",\"help\":\"Help\",\"imagesfromlibrary\":\"Images from media library\",\"library\":\"Library\",\"login\":\"Login\",\"logout\":\"Logout\",\"markascompleted\":\"Submit\",\"musicfromlibrary\":\"Music from media library\",\"musiclibrary\":\"Music library\",\"myaccount\":\"My account\",\"no\":\"No\",\"ok\":\"Ok\",\"preview\":\"Preview\",\"save\":\"Save\",\"sendemail\":\"Send e-mail\",\"submit-post\":\"Post\",\"up\":\"Up\",\"uploadinprogress-audio\":\"Processing\",\"uploadinprogress-presentation\":\"Processing\",\"uploadinprogress-video\":\"Processing\",\"uploadmusic\":\"Upload music\",\"uploadownimages\":\"Upload own images\",\"uploadownmusic\":\"Upload own music\",\"uploadpresentation\":\"Upload Powerpoint presentation\",\"uploadvideo\":\"Upload video\",\"yes\":\"Yes\"},\"chooselanguage\":{\"language\":\"Language\",\"title\":\"Choose the website language\"},\"condolence\":{\"additem_button_label\":\"Post a message or burn a candle\",\"condolence-page-for\":\"Condolence page for\",\"entercode\":\"Condolence page code\",\"enterpassword\":\"Password\",\"loading\":\"Loading condolence page\",\"login\":\"Continue\",\"manager_message\":[\"Welcome \",1,\". As manager of the ceremony you can manage the posts on this page.\"],\"message-addposttoceremony-confirm\":[\"Are you sure you want to add the post from \\\"\",1,\"\\\" to the ceremony?\"],\"message-addposttoceremony-done\":[\"The post from \\\"\",1,\"\\\" is added to the ceremony.\"],\"message-addposttoceremony-failed\":[\"Failed to add the post from \\\"\",1,\"\\\" to the ceremony.\"],\"message-addtoceremony-button\":\"Add to ceremony\",\"message-edit-panelheader\":\"Select an action\",\"message-password-incorrect\":\"Password incorrect\",\"message-removepost-button\":\"Remove message\",\"message-removepost-confirm\":[\"Are you sure you want to remove the post by \\\"\",1,\"\\\" ?\"],\"message-removepost-done\":[\"The post from \\\"\",1,\"\\\" has been removed.\"],\"message-removepost-failed\":[\"Failed to remove the post of \\\"\",1,\"\\\".\"],\"msg-code-incoorrect\":[\"Code \\\"\",1,\"\\\" is not a valid page\"],\"no-messages-posted\":\"There aren't any posts yet.\"},\"dialog-duration\":{\"momentduration-title\":\"Set duration\",\"time\":\"Duration\"},\"editor\":{\"chooseceremony\":\"Choose a ceremony\",\"header-preview\":\"Preview of ceremony:\",\"header-preview-closebutton-arialabel\":\"Close preview\",\"loading\":\"Loading...\",\"message-markascompleted-confirm\":\"Have you finished preparing the ceremony? Please note: once you have submitted the ceremony, you can no longer make any changes.\",\"message-markascompleted-confirm-title\":\"Submit ceremony\",\"noassociatedceremonies\":\"There are no ceremonies associated with your account.\",\"noassociatedceremoniesinfo\":\"At the moment there are no active ceremonies associated with your account\",\"stream\":{\"invalidconfiguration\":\"Our apologies, the stream cannot be started\",\"loading\":\"Loading...\",\"nostream\":\"This live stream code is invalid or does not exist anymore\",\"streamended\":\"The live stream has ended, in a few moments you can watch the service again here\",\"streamstartsat\":[\"The ceremony starts at \",1,\" - \",2]}},\"editorlogin\":{\"emailsent\":\"An e-mail containing instructions for resetting your password has been sent.\",\"forgotpassword\":\"Forgot password\",\"login\":\"Login\",\"password\":\"Password\",\"resetpassword-explanation\":\"Please fill in your e-mail adress and in a few minites you will receive a link that you can use to to reset your password.\",\"youremail\":\"Your e-mail\"},\"formfields\":{\"email\":\"E-mail\",\"firstname\":\"First name\",\"lastname\":\"Last name\"},\"forms\":{\"error-invalidemail\":\"Invalid e-mail address\",\"error-required\":\"This field is required\",\"fieldlabel-minutes\":\"min\",\"fieldlabel-seconds\":\"sec\"},\"imagecropper\":{\"title\":\"Edit image\"},\"imagelibrarychooser\":{\"imagecount\":[{\"t\":\"ifparam\",\"p\":1,\"value\":\"1\",\"subs\":[\"There is one available image\"],\"subselse\":[\"There are \",1,\" available images\"]}],\"title\":\"Image library\"},\"medialisteditor\":{\"cutoffmessage\":[\"The total duration of the slides is \",1,\", they will be cut off when the total duration of \",2,\" has been reached.\"],\"dialogtitle\":\"Images\",\"duration\":\"Duration\",\"duration-linked-to-audio\":\"Linked to the music\",\"image\":\"Image\",\"image-lc\":\"image\",\"images-lc\":\"images\",\"repeatmessage\":[\"The total duration of the slides is \",1,\", they will be repeated until total duration of \",2,\" has been reached.\"],\"sureclearall\":\"Are you sure you want to remove all images?\",\"slideduration\":{\"seconds\":\"Number of seconds\",\"title\":\"Duration of this slide\"}},\"moments\":{\"preview-nextbutton-arialabel\":\"Show previous moment\",\"preview-previewbutton-arialabel\":\"Show next moment\"},\"momenttile\":{\"audio-noname\":\"(no name)\",\"duration-locked-to-audio\":\"When music is linked, the duration of the music will be used.\",\"noteshint\":\"You can leave notes here for yourself or the one who will administer the ceremony\",\"presentation-previewinfo\":\"Unfortunately there's no preview for a Powerpoint.\",\"slideshow-previewinfo\":\"- The slides will be repeated automatically -\",\"placeholders\":{\"newtile-title-music\":\"New music\",\"newtile-title-presentation\":\"New presentation\",\"newtile-title-slideshow\":\"New slideshow\",\"newtile-title-speaker\":\"New speaker\",\"newtile-title-video\":\"New video\"},\"slideshow\":{\"imagenroftotal\":[\"Image \",1,\" of \",2],\"images\":\"Slideshow images\",\"noimages\":\"No images\",\"oneimage\":\"One image\",\"shownextimage\":\"Show next image\",\"showpreviousimage\":\"Show previous image\"}},\"musiclibraryviewer\":{\"all\":\"All\",\"favorites\":\"Most chosen\",\"noresults\":\"Your search did not result in any matches.\",\"searchfield-description\":\"Search by artist or title.\",\"title\":\"Music library\"},\"myaccount\":{\"title\":\"My account\"},\"pagination\":{\"nextpage-arialabel\":\"Next\",\"page\":[\"Page \",1],\"pagination\":\"Pagination\",\"previouspage-arialabel\":\"Previous\"},\"simplescreen\":{\"titles\":{\"error\":\"Error\",\"info\":\"Information\",\"question\":\"Question\",\"warning\":\"Warning\"}},\"streamcode\":{\"entercode\":\"Enter your live stream code here\",\"explanation\":\"With the provided login details you can watch the farewell service live\",\"invalidcode\":\"We cannot find this live stream code. Check whether the code was entered correctly and try again.\",\"login\":\"Login\",\"unmute\":\"Enable sound\"}}}}});\n// Adding dependency: /opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/language/default.xml\n// Adding dependency: /opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/language/en.xml\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h } from \"preact\";\nimport \"./timeindicator.scss\";\nimport { classNames, type ClassNames } from \"@mod-ceremonymedia/js/util\";\n\nexport function TimeIndicator(props: { durationMs: number; class?: ClassNames }) {\n  return (\n    <div class={classNames(\"cm-timeindicator\", props.class)}>\n      <div class=\"cm-timeindicator__icon\" role=\"presentation\">\n        <span class=\"icon far fa-stopwatch\"></span>\n      </div>\n      <div class=\"cm-timeindicator__minamount\">{((props.durationMs / 1000 / 60) | 0).toString().padStart(2, \"0\")}</div>\n      <div class=\"cm-timeindicator__mintext\">min</div>\n      <div class=\"cm-timeindicator__separator\">:</div>\n      <div class=\"cm-timeindicator__secamount\">{(((props.durationMs / 1000) % 60) | 0).toString().padStart(2, \"0\")}</div>\n      <div class=\"cm-timeindicator__sectext\">sec</div>\n    </div>);\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Fragment, type ComponentChildren } from \"preact\";\nimport { useLayoutEffect, useState } from \"preact/hooks\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport \"./form.scss\";\nimport { isValidEmail } from \"@webhare/std\";\n\nimport { getTid } from \"@mod-tollium/js/gettid\";\nimport { classNames } from \"@mod-ceremonymedia/js/util\";\n\n\ntype FormFieldProps<T> = { label: string; prop: string; error: string; value: T; onChange: (value: T) => void };\n\nfunction StringField(props: FormFieldProps<string> & { inputType: \"email\" | \"text\" }) {\n  return <div class=\"cm-formdialog__item\">\n    <label key={`label-${props.prop}`} class={`cm-formdialog__label cm-formdialog__label__${props.prop}`} for={`cm-formdialog__field__${props.prop}`}>{props.label}</label>\n    {props.error ? <span class={`cm-formdialog__error cm-formdialog__error__${props.prop}`} key={`error`}>* {props.error}</span> : null}\n    <input key={`input-${props.prop}`} id={`cm-formdialog__field__${props.prop}`}\n      class={`cm-formdialog__field cm-formdialog__field__${props.prop}`}\n      name={props.prop}\n      type={props.inputType}\n      value={props.value}\n      onInput={(evt) => {\n        props.onChange((evt.target as HTMLInputElement)?.value ?? \"\");\n      }\n      } />\n  </div>;\n}\n\nfunction SecondsField(props: FormFieldProps<number>) {\n  return <div class=\"cm-formdialog__item\">\n    <label key={`label-${props.prop}`} class={`cm-formdialog__label cm-formdialog__label__${props.prop}`} for={`cm-formdialog__field__${props.prop}`}>{props.label}</label>\n    {props.error ? <span class={`cm-formdialog__error cm-formdialog__error__${props.prop}`} key={`error`}>* {props.error}</span> : null}\n    <input key={`input-${props.prop}`} id={`cm-formdialog__field__${props.prop}`}\n      class={`cm-formdialog__field cm-formdialog__field__${props.prop} cm-formdialog__fieldtype__seconds__seconds`}\n      name={props.prop}\n      type=\"number\"\n      value={(props.value ?? \"\").toString()}\n      min=\"1\"\n      onInput={(evt) => { props.onChange(parseInt((evt.target as HTMLInputElement)?.value ?? \"\")); }}\n      onChange={(evt) => { props.onChange(parseInt((evt.target as HTMLInputElement)?.value ?? \"\")); }} />\n  </div>;\n}\n\nfunction MinutesSecondsField(props: FormFieldProps<number>) {\n  const [state, setState] = useState({ minutes: (props.value / 60) | 0, seconds: (props.value % 60) | 0 });\n\n  function updateState(updates: { minutes?: number; seconds?: number }) {\n    setState(curState => {\n      const newState = { ...curState, ...updates };\n      props.onChange(newState.minutes * 60 + newState.seconds);\n      return newState;\n    });\n  }\n\n  return <div class=\"cm-formdialog__item\">\n    {props.error ? <span class={`cm-formdialog__error cm-formdialog__error__${props.prop}`} key={`error`}>* {props.error}</span> : null}\n    <label key={`label-${props.prop}`} class={`cm-formdialog__label cm-formdialog__label__${props.prop}`} for={`cm-formdialog__field__${props.prop}__minutes`}>{props.label}</label>\n\n    <div class={`cm-formdialog__field cm-formdialog__field__${props.prop} cm-formdialog__fieldtype__minsec`}>\n      <span class=\"cm-formdialog__field__wrapper\">\n        <input key={`input-${props.prop}--minutes`} id={`cm-formdialog__field__${props.prop}__minutes`}\n          class={`cm-formdialog__field cm-formdialog__field__${props.prop}__minutes cm-formdialog__fieldtype__minsec__minutes`}\n          name={props.prop}\n          type=\"number\"\n          value={state.minutes}\n          min=\"0\"\n          placeholder=\"mm\"\n          onInput={(evt) => updateState({ minutes: parseInt((evt.target as HTMLInputElement)?.value ?? \"\") })}\n          onChange={(evt) => updateState({ minutes: parseInt((evt.target as HTMLInputElement)?.value ?? \"\") })}\n        />\n        {getTid(\"ceremonymedia:webdesigns.site.js.forms.fieldlabel-minutes\")}\n      </span>\n      {<span class=\"cm-formdialog__field__seperator\">:</span>}\n      <span class=\"cm-formdialog__field__wrapper\">\n        <input key={`input-${props.prop}--seconds`} id={`cm-formdialog__field__${props.prop}__seconds`}\n          class={`cm-formdialog__field cm-formdialog__field__${props.prop}__seconds cm-formdialog__fieldtype__minsec__seconds`}\n          name={props.prop}\n          type=\"number\"\n          value={state.seconds}\n          min=\"0\"\n          max=\"59\"\n          placeholder=\"ss\"\n          onInput={(evt) => updateState({ seconds: parseInt((evt.target as HTMLInputElement)?.value ?? \"\") })}\n          onChange={(evt) => updateState({ seconds: parseInt((evt.target as HTMLInputElement)?.value ?? \"\") })} />\n        {getTid(\"ceremonymedia:webdesigns.site.js.forms.fieldlabel-seconds\")}\n      </span>\n    </div>\n\n  </div>;\n}\n\nfunction LanguageField(props: FormFieldProps<string>) {\n  return <div class=\"cm-formdialog__item\">\n    {props.error ? <span class={`cm-formdialog__error cm-formdialog__error__${props.prop}`} key={`error`}>* {props.error}</span> : null}\n    <label key={`label-${props.prop}`} class={`cm-formdialog__label cm-formdialog__label__${props.prop}`} for={`cm-formdialog__field__${props.prop}`}>{props.label}</label>\n    <select key={`input-${props.prop}`}\n      id={`cm-formdialog__field__${props.prop}`}\n      onChange={(evt) => props.onChange((evt.target as HTMLSelectElement)?.value ?? \"\")}>\n      <option value=\"nl\" selected={props.value !== \"en\"}>Nederlands</option>\n      <option value=\"en\" selected={props.value === \"en\"}>English</option>\n    </select>\n  </div>;\n}\n\n\ntype DialogButton = {\n  tag?: string;\n  display: \"solid\" | \"outline\" | \"textual\";\n  validate?: boolean; // defaults to `true`\n} & ({\n  xtitle: string;\n} | {\n  tid: \"ok\" | \"apply\" | \"cancel\";\n});\n\n\nexport type FormFormat = {\n  title: string;\n  fields: Array<{\n    prop: string;\n    type: keyof typeof formFieldDefaultTypes;\n    label: string;\n  }>;\n  buttons: DialogButton[]; // Array<{ DialogButton }>;\n  defaultbuttontag?: string;\n};\n\nconst formFieldDefaultTypes = {\n  string: {\n    defaultValue: \"\" as string,\n    renderer: StringField,\n    defaultProps: { inputType: \"text\" },\n    validator: (value: string): string => value ? \"\" : getTid(\"ceremonymedia:webdesigns.site.js.forms.error-required\")\n  },\n  email: {\n    defaultValue: \"\" as string,\n    renderer: StringField,\n    defaultProps: { inputType: \"email\" },\n    validator: (value: string): string => value ? isValidEmail(value) ? \"\" : getTid(\"ceremonymedia:webdesigns.site.js.forms.error-invalidemail\") : getTid(\"ceremonymedia:webdesigns.site.js.forms.error-required\")\n  },\n  seconds: {\n    defaultValue: 0 as number,\n    renderer: SecondsField,\n    defaultProps: {},\n    validator: (value: number): string => value ? \"\" : getTid(\"ceremonymedia:webdesigns.site.js.forms.error-required\")\n  },\n  minutesSeconds: {\n    defaultValue: 0 as number,\n    renderer: MinutesSecondsField,\n    defaultProps: {},\n    validator: (value: number): string => value ? \"\" : getTid(\"ceremonymedia:webdesigns.site.js.forms.error-required\")\n  },\n  language: {\n    defaultValue: \"\" as \"nl\" | \"en\",\n    renderer: LanguageField,\n    defaultProps: {},\n    validator: (value: string) => \"\"\n  }\n};\n\nexport type FormResult<Form extends FormFormat> = {\n  fields: { [Field in (Form[\"fields\"][number]) as Field[\"prop\"]]: typeof formFieldDefaultTypes[Field[\"type\"]][\"defaultValue\"] };\n  button: Form[\"buttons\"][number][\"tag\"];\n  // showResultPage: object;\n};\n\nexport function FormDialog<Form extends FormFormat>({ isOpen, isModal, dialogname, form, value, onButton, onCancel, subDialogs, ...rest }: {\n  isOpen: boolean;\n  isModal?: boolean;\n  dialogname?: string;\n  class?: string;\n  form: Form;\n  value?: Partial<FormResult<Form>[\"fields\"]>;\n  onButton: (result: FormResult<Form>) => void;\n  onCancel: () => void;\n  subDialogs?: ComponentChildren;\n}): h.JSX.Element {\n  type FieldState = {\n    values: FormResult<Form>[\"fields\"];\n    errors: { [Field in keyof FormResult<Form>[\"fields\"]]: string };\n  };\n  const defaultValues: FormResult<Form>[\"fields\"] = form.fields.reduce((acc, field) => ({ ...acc, [field.prop]: formFieldDefaultTypes[field.type].defaultValue }), {} as FormResult<Form>[\"fields\"]);\n  const errors = form.fields.reduce((acc, field) => ({ ...acc, [field.prop]: \"\" }), {} as { [Field in keyof FormResult<Form>[\"fields\"]]: string });\n  const defaultState: FieldState = { values: { ...defaultValues, ...value }, errors };\n\n  const [state, setState] = useState(defaultState);\n\n  useLayoutEffect(() => {\n    if (!isOpen)\n      setState(defaultState);\n  }, [isOpen]);\n  const buttonClick = async (tag: Form[\"buttons\"][number][\"tag\"]) => {\n    let anyError = false;\n    const button = form.buttons.find(btn => btn.tag === tag);\n    if (button?.validate !== false) {\n      setState(orgState => {\n        const stateCopy = structuredClone(orgState);\n        for (const field of form.fields) {\n          const prop = field.prop as keyof FormResult<Form>[\"fields\"];\n          const fieldValue = orgState.values[prop];\n          const error = formFieldDefaultTypes[field.type].validator(fieldValue as never);\n          if (orgState.errors[prop] !== error) {\n            stateCopy.errors[prop] = error;\n            anyError ||= Boolean(error);\n          }\n        }\n        return anyError ? stateCopy : orgState;\n      });\n    }\n    if (!anyError) {\n      onButton({\n        fields: state.values,\n        button: tag\n        // showResultPage: showResultPage\n      });\n    }\n  };\n\n  function fieldProps(prop: keyof FormResult<Form>[\"fields\"]) {\n    return {\n      prop,\n      value: state.values[prop],\n      error: state.errors[prop],\n      onChange: (fieldValue: never) => setState(oldState => {\n        const newFieldState = {\n          values: { ...oldState.values, [prop]: fieldValue },\n          errors: oldState.errors,\n        };\n        return newFieldState;\n      }\n      ),\n    };\n  }\n\n  const footerContent =\n    <>\n      <div class=\"cm-buttonbar__group\">\n        {form.buttons.map(button => renderFooterButton(button, button.tag === form.defaultbuttontag))}\n      </div>\n    </>;\n\n  function renderFooterButton(button: DialogButton, isdefault: boolean) {\n    let title;\n    if (\"tid\" in button) {\n      switch (button.tid) {\n        case \"ok\":\n          title = getTid(\"ceremonymedia:webdesigns.site.js.buttons.ok\");\n          break;\n        case \"apply\":\n          title = getTid(\"ceremonymedia:webdesigns.site.js.buttons.apply\");\n          break;\n        case \"cancel\":\n          title = getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\");\n          break;\n      }\n    } else\n      title = button.xtitle;\n\n    return <button type={isdefault ? \"submit\" : \"button\"} class={\"wh-button-\" + button.display + (isdefault ? \" wh-button--default\" : \"\")} data-buttonvalue={button.tag} onClick={() => buttonClick(button.tag)}>{title}</button>;\n  }\n\n  return (\n    <ModalDialog\n      isOpen={isOpen}\n      isModal={isModal}\n      onClose={onCancel}\n      class={classNames(`cm-formdialog`, rest.class)}\n      dialogname={dialogname}\n      title={form.title}\n      footerContent={footerContent}\n      subDialogs={subDialogs}\n    >\n      <div class=\"cm-formdialog__form\">\n        {form.fields.map(field => {\n          const fieldTypeDef = formFieldDefaultTypes[field.type];\n          const allProps = {\n            label: field.label,\n            ...fieldProps(field.prop as keyof FormResult<Form>[\"fields\"]),\n            ...fieldTypeDef.defaultProps\n          };\n          const FieldRenderer = fieldTypeDef.renderer as unknown as (props: typeof allProps) => h.JSX.Element;\n          return <FieldRenderer {...allProps} />;\n        })}\n      </div>\n    </ModalDialog>\n  );\n}\n","\nimport {\n  getTid as getTidFromJSSDK,\n  getTidLanguage,\n  setTidLanguage,\n  getHTMLTid,\n} from \"@webhare/gettid\";\nimport { registerTexts } from \"@webhare/gettid/src/internal\";\n\n// Fill nodes with a data-texttid attribute with the translated text\nfunction convertElementTids(scope = document.body) {\n  // Only available in a DOM context and if the DOM is ready\n  if (typeof document === \"undefined\" || !scope)\n    return;\n  Array.from(scope.querySelectorAll(\"*[data-texttid]\")).forEach(function (node) {\n    node.textContent = getTid(node.getAttribute(\"data-texttid\") || \"\");\n  });\n}\n\n// If this script is run within a DOM context, convert data-texttid attributes automatically\nif (typeof document !== \"undefined\")\n  document.addEventListener(\"DOMContentLoaded\", () => convertElementTids());\n\nconst getTid = ((...args: Parameters<typeof getTidFromJSSDK>): string => getTidFromJSSDK(...args)) as typeof getTidFromJSSDK & {\n  tidLanguage: string;\n  html: typeof getHTMLTid;\n};\n\n// Define 'tidLanguage' as a property on the main export (so you can use getTid.tidLanguage)\nObject.defineProperty(getTid, \"tidLanguage\", { get: getTidLanguage, set: setTidLanguage });\n// Define 'html' as a method on the main export (so you can use getTid.html)\ngetTid.html = getHTMLTid;\n\n// Export getTid as the default function, explicitly export getTid, getHTMLTid and registerTexts as well\nexport {\n  getTid as default,\n  getTid,\n  getTidLanguage,\n  setTidLanguage,\n  getHTMLTid,\n  convertElementTids,\n  registerTexts\n};\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h } from \"preact\";\nimport { useState } from \"preact/hooks\";\nimport { backend } from \"../../pages/editor/editor\";\nimport { ModalDialog } from \"./dialogs\";\nimport \"./selectimagefromlibrary.scss\";\nimport { getTid } from \"@webhare/gettid\";\n\n\n\nexport function ImageLibraryImageChooser(props: { onSelect: (image: number[]) => void; onClose: () => void }) {\n  const [state, setState] = useState({\n    selected: new Set<number>,\n  });\n\n  const footerContent =\n    <div class=\"cm-buttonbar__group\">\n      <button class=\"wh-button-outline\" onClick={props.onClose}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n      <button class=\"wh-button-solid\" onClick={() => { props.onSelect([...state.selected]); props.onClose(); }} disabled={!state.selected.size}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.add\")}</button>\n    </div>;\n\n  const images = backend.getCachedMediaLibraryImages();\n\n  return <ModalDialog\n    isOpen={true}\n    class=\"cm-imagelibrary__images__dialog\"\n    isModal={true}\n    dialogname=\"selectimagefromlibrary\"\n    title={getTid(\"ceremonymedia:webdesigns.site.js.imagelibrarychooser.title\")}\n    titleicon=\"image\"\n    closeButton={true}\n    onClose={props.onClose}\n    footerContent={footerContent}>\n    <div class=\"cm-imagelibrary__images\">\n      <div class=\"cm-imagelibrary__images__list cm-ui-list cm-ui-list--grid\">\n        <div class=\"cm-ui-list__header\">\n          <span>{getTid(\"ceremonymedia:webdesigns.site.js.imagelibrarychooser.imagecount\", images.length)}</span>\n        </div>\n        <div class=\"cm-ui-list__items\">\n          {\n            images.map(i =>\n              <div\n                class={`cm-ui-list__item${state.selected.has(i.id) ? \" cm-ui-list__item--selected\" : \"\"}`}\n                onClick={() => setState(curState => {\n                  const selected = new Set(curState.selected);\n                  if (selected.has(i.id))\n                    selected.delete(i.id);\n                  else\n                    selected.add(i.id);\n                  return { ...curState, selected };\n                })}\n              >\n                <div class=\"cm-imagelibrary__image__preview\">\n                  <img src={i.preview} />\n                </div>\n                <div class=\"cm-imagelibrary__image__checkboxholder\">\n                  <input type=\"checkbox\" checked={state.selected.has(i.id)} />\n                </div>\n              </div>)\n          }\n        </div>\n      </div>\n    </div>\n  </ModalDialog >;\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, RefObject, createRef } from \"preact\";\nimport \"./audiopreviewbutton.scss\";\nimport { getTid } from \"@webhare/gettid\";\n//import * as dompack from \"dompack\";\n\n/*\nCan be used:\n- as audio player: <AudioPlayer src=\"\" />\n- as audio player with callback to get the link: <AudioPlayer onGetSource={} />\n- as playback controls for another audio or video element: <AudioPlayer playerref={} src=\"\" />\n*/\n\ninterface MediaPreviewButtonProps {\n  src?: string;\n  onGetSource?: () => Promise<string | null>;\n  onPlay?: (playerinstance: MediaPreviewButton) => void;\n  playerref?: RefObject<Node>;\n  durationMsecs?: number; // to specify duration before/without needing to load metadata for the audio\n}\n\n\nexport class MediaPreviewButton extends Component<MediaPreviewButtonProps, {\n  isplaying: boolean;\n}> {\n\n  audioref = createRef();\n  timelineref = createRef();\n  timedisplayref = createRef();\n\n  audionode: Node | null = null;\n\n  constructor(props: MediaPreviewButtonProps) {\n    super(props);\n\n    // console.info(\"ITEM AUDIO\", props.getSourceData);\n  }\n\n\n  componentDidMount(): void {\n    {\n      if (this.props.playerref && this.props.playerref.current) {\n        this.hookToPlayer();\n        this.audioref = this.props.playerref;\n      }\n    }\n  }\n\n  hookToPlayer() {\n    const playernode = this.props.playerref?.current;\n    if (!playernode)\n      return;\n\n    //this.audio = new Audio(audiolink);\n    // this.audio = document.createElement(\"audio\");\n    // playernode.setAttribute(\"preload\", \"none\");\n    // playernode.setAttribute(\"src\", audiolink);\n    playernode.addEventListener(\"timeupdate\", () => this.onTimelinePositionUpdate());\n    playernode.addEventListener(\"loadedmetadata\", () => this.onLoadedMetadata());\n    playernode.addEventListener(\"pause\", evt => this.onOtherEvent(evt));\n    playernode.addEventListener(\"play\", evt => this.onOtherEvent(evt));\n    playernode.addEventListener(\"ended\", evt => this.onOtherEvent(evt));\n    // this.node_timeline.addEventListener(\"change\", evt => this.onTimelineSeek(evt));\n  }\n\n  render() {\n    let cnames = \"mediapreviewbutton\";\n    if (this.state.isplaying)\n      cnames += \" mediapreviewbutton--playing\";\n\n    /*\n      controls=\"true\"\n      style=\"position: absolute; left: 0; width: 100%; top: 50px;\"\n    */\n    // NOTE: preload=\"none\" removed so we know the audio duration\n    // FIXME: detect duration of audio, store it and use that so we don't need to preload the audio for it's metadata\n    //           preload=\"metadata\"\n    return <div class={cnames}>\n      <button class=\"mediapreviewbutton__button\"\n        type=\"button\"\n        onClick={evt => this.togglePlayback()}\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.audioplayer.play\")}>\n        {this.state.isplaying ? <span class=\"icon fa fa-pause\" role=\"presentation\"></span> : <span class=\"icon fas fa-play\" role=\"presentation\"></span>}\n\n        {/* NOTE: When you use viewBox=\"0 0 250 250\" the SVG will only display when\n            using absolute units (not % sizes or stretching due to being in a grid) */}\n        <svg class=\"circular-progress\" xmlns=\"http://www.w3.org/2000/svg\">\n          <circle class=\"bg\"></circle>\n          <circle class=\"fg\"></circle>\n        </svg>\n      </button>\n\n      {this.props.playerref && this.props.playerref.current ? null :\n        <audio ref={this.audioref}\n          preload=\"none\"\n          src={this.props.src}\n          onTimeUpdate={() => this.onTimelinePositionUpdate()}\n          onLoadedMetadata={() => this.onLoadedMetadata()}\n          onPause={evt => this.onOtherEvent(evt)}\n          onPlay={evt => this.onOtherEvent(evt)}\n          onEnded={evt => this.onOtherEvent(evt)}\n          onChange={evt => this.onTimelineSeek(evt)}\n        />}\n    </div>;\n  }\n\n\n  onOtherEvent(evt: Event) {\n    // console.log(evt.type, evt);\n\n    if (evt.type === \"ended\" || evt.type === \"pause\") {\n      this.setState({ isplaying: false });\n    } else if (evt.type === \"play\") {\n      if (this.props.onPlay)\n        this.props.onPlay(this);\n\n      this.setState({ isplaying: true });\n    }\n  }\n\n  play() {\n    this.setState({ isplaying: true });\n  }\n\n  pause() {\n    this.setState({ isplaying: false });\n  }\n\n  async togglePlayback() {\n    const audionode = this.audioref.current as HTMLElement;\n\n    if (this.props.onGetSource && !audionode.hasAttribute(\"src\")) {\n      const source = await this.props.onGetSource();\n      if (!source)\n        throw new Error(\"No source for audio\");\n      console.info(\"New source for audio\", source.substring(0, 120));\n      this.props.src = source;\n\n      // const playernode = this.props.playerref?.current;\n      audionode?.setAttribute(\"src\", this.props.src);\n    }\n\n    // play/pause will be done in componentDidUpdate()\n    this.setState({ isplaying: !this.state.isplaying });\n  }\n\n  componentDidUpdate() {\n    const audionode = this.audioref.current;// as HTMLElement;\n    if (this.state.isplaying)\n      audionode.play();\n    else\n      audionode.pause();\n  }\n\n  onTimelineSeek(evt: Event) {\n    const audionode = this.audioref.current;\n\n    if (audionode.readyState === 0) // != HAVE_NOTHING)\n      return;\n\n    const timelinenode = this.timelineref.current;\n\n    const time = (timelinenode.value * audionode.duration) / 100;\n    audionode.currentTime = time;\n  }\n\n  onLoadedMetadata() {\n    const audionode = this.audioref.current;\n    // const timedisplaynode = this.timedisplayref.current;\n    this.props.durationMsecs = audionode.duration;\n    // timedisplaynode.innerText = this.getTimeText(audionode.duration);\n  }\n\n  onTimelinePositionUpdate() {\n    if (!this.base)\n      return;\n\n    const audionode = this.audioref.current;\n    // const timelinenode = this.timelineref.current;\n\n    // if (timelinenode.matches(\":active\"))\n    // return;\n\n    const percentagePosition = (100 * audionode.currentTime) / audionode.duration;\n    // timelinenode.value = percentagePosition;\n\n    // (this.base as HTMLElement).style.setProperty(\"--progress\", percentagePosition + \"%\");\n    (this.base as HTMLElement).style.setProperty(\"--progress\", percentagePosition.toFixed(2));\n    // (this.base as HTMLElement).style.setProperty(\"--podcast-playback-position-percentage\", percentagePosition + \"%\");\n\n    /*\n    (this.base as HTMLElement).style.setProperty(\"--podcast-playback-position-percentage\", percentagePosition + \"%\");\n\n    const timedisplaynode = this.timedisplayref.current;\n    timedisplaynode.innerText = this.getTimeText(audionode.currentTime);\n    */\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, render, Fragment, createRef } from \"preact\";\nimport { backend } from \"../../pages/editor/editor\";\nimport { assertHTMLElement } from \"../../pages/editor/support\";\n\nimport \"./selectmediafromlibrary.scss\";\nimport { CeremonyMomentAudio } from \"@mod-ceremonymedia/js/api\";\n// import { CeremonyMediaItem } from \"@mod-ceremonymedia/js/types\";\n\n// import { renderDialog, showDialogModal } from \"../components/dialogs\";\nimport { ModalDialog } from \"../components/dialogs\";\nimport { MediaPreviewButton } from \"./audiopreviewbutton\";\nimport { getTid } from \"@webhare/gettid\";\nimport { throwError } from \"@webhare/std\";\n\n/*\nADDME:\n- observe list and listwrapper size\n  - hide bottom fade-out if the list fits (no scrollbar)\n  - display an arrow + \"meer resultaten\" at the bottom of the list of it can be scrolled?\n*/\n\n\n\nexport interface LibraryItem {\n  id: number; // available_media wrdId\n  title: string;\n  artist: string;\n  duration: number;\n}\n\n\n/* The AddMoment card represents a wizard to append additional contenet. As long as the AddMoment is active and no new card has been added, the content has not been committed */\nexport class MediaLibraryViewer extends Component\n  <{ // Properties\n    onResult: (mediaId: number | string | null) => void;\n    popularItems: CeremonyMomentAudio[];\n  }, // State\n    {\n      selectednode: HTMLElement | null;\n      selectedIdx: number;\n      query: string;\n      category: string;\n      results: CeremonyMomentAudio[];\n    }\n  > {\n\n  state = {\n    selectednode: null,\n    selectedIdx: 0,\n    category: \"all\",\n    query: \"\",\n    results: []\n  };\n\n  items: LibraryItem[] = [];\n  lastActivePlayer: MediaPreviewButton | null = null;\n\n  searchform = createRef();\n  searchinput = createRef();\n\n  constructor(props: {\n    // momentId: number;\n    // items: CeremonyMomentSlide[];\n    popularItems: CeremonyMomentAudio[];\n    onResult: (mediaId: number | string | null) => void;\n  }) {\n    super();\n    /*\n    const newlist: SlidesListItem[] = [];\n    for (const item of this.props.items)\n        this.props.items.push({ ...item, selected: false });\n\n        this.props.items = newlist;\n    */\n\n    // const mediaitems = await backend.mediaLibraryTracks();\n  }\n\n  onMediaListClick(evt: MouseEvent) {\n    assertHTMLElement(evt.target);\n\n    const addbutton = evt.target.closest(\".medialist__item__addbutton\");\n    if (addbutton) {\n      const itemcontainer = addbutton.closest(\".medialist__item\");\n      const mediaId = itemcontainer!.getAttribute(\"data-token\") || parseInt(itemcontainer!.getAttribute(\"data-id\") ?? \"\");\n      if (this.props.onResult)\n        this.props.onResult(mediaId);\n    }\n  }\n\n  doClose() {\n    if (this.props.onResult)\n      this.props.onResult(null);\n  }\n\n  render() {\n    return <ModalDialog\n      isOpen={true}\n      dialogname=\"selectmediafromlibrary\"\n      title={getTid(\"ceremonymedia:webdesigns.site.js.musiclibraryviewer.title\")}\n      titleicon=\"music\"\n      closeButton={true}\n      onClose={() => this.doClose()}\n    >\n      {this.renderDialogBody()}\n    </ModalDialog>;\n  }\n\n  async onGetAudioSource(item: Partial<CeremonyMomentAudio>) {\n    const preview = await backend.getAudioPreview(item.token || item.mediaId || throwError(\"No token or mediaId provided\"));\n    return preview?.src || null;\n  }\n\n  onPlaybackStart(playerinstance: MediaPreviewButton) {\n    //console.info(\"onPlaybackStart\", playerinstance);\n\n    this.lastActivePlayer?.pause();\n    this.lastActivePlayer = playerinstance;\n    // FIXME: or request all childelements, check if their of type MediaPreviewButton and pause they are in playback state\n  }\n\n  onSearchInput() {\n    void this.doFilter();\n  }\n\n\n  doSearch(evt: Event) {\n    evt.preventDefault();\n    // this.doFilter();\n  }\n\n  onChangeTab() {\n    void this.doFilter();\n  }\n\n  async doFilter() {\n    const textquery = this.searchinput.current.value;\n    const form = this.searchform.current;\n    const results = new Array<CeremonyMomentAudio>;\n\n    if (textquery)\n      results.push(...await backend.searchMediaLibraryTracks(textquery));\n\n    this.setState({ query: textquery, category: form.category?.value ?? \"all\", results });\n  }\n\n  renderDialogBody() {\n    const onlyFavorites = this.state.category === \"favorites\";\n\n    // const hasActiveTextQuery = this.state.query !== \"\";\n    // let normalizedTextQuery = \"\";\n    // if (this.state.query !== \"\")\n    //   normalizedTextQuery = this.state.query.toLowerCase().normalize(\"NFKC\");\n\n    const haveFavorites = false;//this.props.popularItems.some(item => item.isFavorite);\n\n    const maxitems = 500;\n\n    const items = this.state.query ? this.state.results : this.props.popularItems.filter(item => !onlyFavorites || item.isFavorite);\n\n    let renderMediaTabs = null;\n\n    if (haveFavorites) {\n      // Only show 'favorites' if there are items marked as isFavorite\n      const medialisttabs = [\n        { value: \"all\", title: getTid(\"ceremonymedia:webdesigns.site.js.musiclibraryviewer.all\"), selected: this.state.category === \"all\" },\n        ...haveFavorites ? [{ value: \"favorites\", title: getTid(\"ceremonymedia:webdesigns.site.js.musiclibraryviewer.favorites\"), selected: this.state.category === \"favorites\" }] : []\n      ];\n      // { value: \"search\", title: \"Zoekresultaten\", selected: false }\n      renderMediaTabs = renderTabs({ name: \"category\", ariaControls: \"\", onChange: () => this.onChangeTab() }, medialisttabs);\n    }\n\n    return <Fragment>\n      <form class=\"mediaselector__search\"\n        ref={this.searchform}\n        onSubmit={evt => this.doSearch(evt)}\n      >\n        <div class=\"mediaselector__searchbar cm-searchbar\">\n          <div class=\"cm-searchbar__inputwrapper\">\n            <input class=\"cm-searchbar__input\" type=\"search\" placeholder=\"zoeken\"\n              ref={this.searchinput} onChange={() => this.onSearchInput()}\n              aria-describedby=\"mediaselector__search-description\"\n            />\n            <button class=\"cm-searchbar__searchbutton\"><span class=\"icon fas fa-search\"></span></button>\n          </div>\n        </div>\n        <div class=\"mediaselector__searchbar__info\" id=\"mediaselector__search-description\">\n          {getTid(\"ceremonymedia:webdesigns.site.js.musiclibraryviewer.searchfield-description\")}\n        </div>\n\n        {/* form tabs */}\n        {renderMediaTabs}\n      </form>\n\n      <div class=\"mediaselector__list\">\n        <div class=\"medialist\"\n          onClick={evt => this.onMediaListClick(evt)}>\n          {this.renderItems(items, maxitems)}\n        </div>\n      </div>\n    </Fragment>;\n  }\n\n\n  renderItems(items: CeremonyMomentAudio[], maxitems: number) {\n    if (items.length === 0)\n      return <span>{getTid(\"ceremonymedia:webdesigns.site.js.musiclibraryviewer.noresults\")}</span>;\n\n    console.info(\"Rendering\", items.length, \"items.\");\n\n    let itemcount = 0;\n\n    return <>\n      {items.length > maxitems ? `De eerste ${maxitems} van de ${items.length} matches worden getoond.` : null}\n      {items.map(item => {\n        itemcount++;\n        if (itemcount > maxitems)\n          return null;\n\n        return <div class=\"medialist__item\" data-id={item.mediaId} data-token={item.token}>\n          <MediaPreviewButton\n            onGetSource={() => this.onGetAudioSource(item)}\n            onPlay={instance => this.onPlaybackStart(instance)}\n            durationMsecs={item.durationMsecs} />\n          <h2>\n            <div class=\"medialist__item__artist\">{item.artist}</div>\n            <div class=\"medialist__item__title\">{item.title}</div>\n          </h2>\n          <button class=\"medialist__item__addbutton wh-button-solid\" type=\"button\"><span class=\"wh-button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.add\")}</span><span class=\"icon far fa-arrow-right\"></span></button>\n        </div>;\n      })}\n    </>;\n  }\n}\n\n\n//checked?: boolean | undefined | SignalLike<boolean | undefined>;\nfunction renderTabs(\n  options:\n    { name: string; ariaControls?: string; ariaLabel?: string; onChange: () => void },\n  items: Array<{ value: string; title: string; selected: boolean }>\n) {\n\n  return <div class=\"spc-tabstrip pagetabs__content pagetabs--tabs\"\n    role=\"group\"\n    aria-label={options.ariaLabel}\n  >\n    {\n      items.map(item => <>\n        <input id={item.value + \"-tabradio\"}\n          name={options.name}\n          value={item.value}\n          type=\"radio\"\n          data-tabpanel={item.value}\n          aria-controls={options.ariaControls ? options.ariaControls : undefined}\n          checked={item.selected ? true : undefined}\n          onChange={options.onChange}\n        />\n\n        <label id={item.value + \"-tab\"}\n          class=\"edition-eventtab tabstrip__tab\"\n          for={item.value + \"-tabradio\"}\n          role=\"presentation\">\n          {item.title}\n        </label>\n      </>)\n    }\n  </div>;\n}\n\n\n\n// export async function runSelectMediaFromLibraryDialog({ popularItems: CeremonyMomentAudio[] }) {\nexport async function runSelectMediaFromLibraryDialog() {\n\n  const popularItems = backend.getCachedMediaLibraryTracks();\n\n  const defer = Promise.withResolvers<number | string | null>();\n  const fragment = document.createDocumentFragment();\n  render(<MediaLibraryViewer popularItems={popularItems} onResult={result => defer.resolve(result)} />, fragment);\n  const dialog = fragment.querySelector(\"dialog\");\n\n  if (!dialog)\n    return null; // should never happen though\n\n  document.body.append(fragment);\n\n  const result = await defer.promise;\n  console.log(\"runSelectMediaFromLibraryDialog result\", result);\n  dialog.remove();\n\n  return result;\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, RefObject, createRef } from \"preact\";\nimport \"./audioplayer.scss\";\n//import * as dompack from \"dompack\";\nimport { getTid } from \"@webhare/gettid\";\n\n/*\nCan be used:\n- as audio player: <AudioPlayer src=\"\" />\n- as audio player with callback to get the link: <AudioPlayer onGetSource={} />\n- as playback controls for another audio or video element: <AudioPlayer playerref={} src=\"\" />\n\nNOTE:\n- We need state.isplaying to ensure we know our intended state while the <audio> element hasn't been rendered yet(??)\n- We don't use state.isplaying because\n  1. It'll cause a rerender which will reset the slider value to 0 (unless we write workaround code)\n  2. When we update the time text by .innerText, the next render() can trigger two textnodes\n*/\n\n\ninterface AudioProps {\n  src?: string;\n  onGetSource?: () => Promise<string | null>;\n  playerref?: RefObject<HTMLAudioElement>;\n  durationMsecs?: number; // to specify duration before/without needing to load metadata for the audio\n}\n\n\nexport class AudioPlayer extends Component<AudioProps, {\n  isplaying: boolean;\n}> {\n\n  audioref = createRef<HTMLAudioElement>();\n  containerref = createRef();\n  timelineref = createRef();\n  timedisplayref = createRef();\n\n  audionode: Node | null = null;\n  resolvedAudioLink: string = \"\";\n\n  constructor(props: AudioProps) {\n    super(props);\n\n    // console.info(\"[MediaPlayer] initialize\", props.src, props.playerref);\n  }\n\n  seekTo(time: number) {\n    if (this.audioref)\n      (this.audioref.current as HTMLAudioElement).currentTime = time;\n  }\n\n  async play() {\n    console.info(\"<AudioPlayer> play() called\");\n\n    await this.resolveAudioLink();\n    this.setState({ isplaying: true });\n  }\n\n  stop() {\n    this.setState({ isplaying: false });\n\n    if (this.audioref) {\n      const audionode = this.audioref.current as HTMLAudioElement;\n      if (audionode) {\n        console.log(\"Stopping audio\");\n        audionode.pause();\n      }\n    }\n  }\n\n  async togglePlayback() {\n    console.log(\"<AudioPlayer> togglePlayback()\");\n\n    await this.resolveAudioLink();\n    this.setState({ isplaying: !this.state.isplaying });\n    // play/pause will be done in componentDidUpdate()\n  }\n\n\n  shouldComponentUpdate(props: AudioProps, state: { isplaying: boolean }) {\n\n    console.log(\"<AudioPlayer>\", props, state);\n    /*\n        if (props.src !== this.props.src) {\n          // The component itself might have already updated the source\n          // to the resolved link.\n\n          const audionode = this.audioref.current as HTMLAudioElement;\n          if (audionode && audionode.getAttribute(\"src\") === props.src)\n            return false;\n\n          console.log(\"*** <AudioPlayer> should update ***\", this.props, props);\n\n          return true;\n        }\n    */\n    if (state.isplaying !== this.state.isplaying) {\n      console.log(\"Playback state changed to\", state.isplaying);\n\n      if (this.audioref) {\n        const audionode = this.audioref.current as HTMLAudioElement;\n        if (state.isplaying) { // FIXME: to ensure after rendering the playback will actually start?\n          void audionode.play();\n        } else {\n          audionode.pause();\n        }\n      }\n\n      // FIXME: in preview don't rerender, because the playbutton is part of the moment tile\n      return true;\n    }\n\n    console.log(\"*** <AudioPlayer> DON'T update ***\", this.props, props);\n    return false;\n  }\n\n\n  componentDidMount(): void {\n    {\n      // console.info(this.props.playerref);\n      if (this.props.playerref && this.props.playerref.current) {\n        this.hookToPlayer();\n        this.audioref = this.props.playerref;\n      }\n\n      // Only show duration on initial/first render\n      // (delay using setTimeout so we write this directly after Preact finished rendering)\n      // FIXME: Why did we do this here? We can probably detect initiallayout -\n      //        however if I recall correctly if we initially let  Preact renders the duration textnode\n      //        and then update it upon seek/playback events, Preact will get confused\n      //        when it renders again.\n      const duration = this.props.durationMsecs ?? 0;\n      setTimeout(() => {\n        this.timedisplayref.current.innerText = duration ? this.getTimeText(duration) : \"--:--\";\n      }, 1);\n    }\n  }\n\n  hookToPlayer() {\n    const playernode = this.props.playerref?.current;\n    if (!playernode)\n      return;\n\n    //this.audio = new Audio(audiolink);\n    // this.audio = document.createElement(\"audio\");\n    // playernode.setAttribute(\"preload\", \"none\");\n    // playernode.setAttribute(\"src\", audiolink);\n    playernode.addEventListener(\"timeupdate\", () => this.onTimelinePositionUpdate());\n    playernode.addEventListener(\"loadedmetadata\", () => this.onLoadedMetadata());\n    playernode.addEventListener(\"pause\", evt => this.onOtherEvent(evt));\n    playernode.addEventListener(\"play\", evt => this.onOtherEvent(evt));\n    playernode.addEventListener(\"ended\", evt => this.onOtherEvent(evt));\n    // this.node_timeline.addEventListener(\"change\", evt => this.onTimelineSeek(evt));\n\n    const slidernode = this.timelineref.current as HTMLElement;\n    slidernode.addEventListener(\"touchstart\", evt => this.doHandleTouchStart(evt));\n    slidernode.addEventListener(\"touchmove\", evt => this.doHandleTouchMove(evt));\n  }\n\n  render() {\n    console.log(\"RENDERING AUDIO\");\n\n    const cnames = \"cm-mediaslide__setting__content cm-mediaslide__playback\";\n    // if (this.state.isplaying)\n    // cnames += \" cm-mediaslide--playing\";\n\n    // Prevent rerendering causing the position of the slider knob to reset\n    const audionode = this.audioref.current;\n\n    // console.log(\"!! audioplayer data\", this.props);\n    // console.log(audionode.duration);\n\n    const percentagePosition = audionode && !Number.isNaN(audionode.duration) ? (100 * audionode.currentTime) / audionode.duration : 0;\n    // console.log(\"percentagePosition\", percentagePosition);\n\n    // FIXME: only add preload=\"none\" if the server told us the duration, otherwise use preload=\"metadata\" ?\n    return <div ref={this.containerref} class={cnames}>\n\n      {/* {!this.props.src && !? null : */}\n      {this.props.playerref && this.props.playerref.current ? null :\n        <audio ref={this.audioref}\n          preload=\"none\"\n          src={this.props.src}\n          onTimeUpdate={() => this.onTimelinePositionUpdate()}\n          onLoadedMetadata={() => this.onLoadedMetadata()}\n          onPause={evt => this.onOtherEvent(evt)}\n          onPlay={evt => this.onOtherEvent(evt)}\n          onEnded={evt => this.onOtherEvent(evt)}\n          onChange={evt => this.onTimelineSeek(evt)}\n        />}\n\n      <button class=\"cm-mediaslide__setting__playbutton iconbutton\"\n        type=\"button\"\n        onClick={evt => this.togglePlayback()}\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.audioplayer.play\")}>\n        {this.state.isplaying ? <span class=\"icon fa fa-pause\" role=\"presentation\"></span> : <span class=\"icon fa fa-play\" role=\"presentation\"></span>}\n      </button>\n      {/*\nFIXME: we cannot force iOS passive: false; through this way of adding eventListeners ??\n        onTouchStart={evt => this.doHandleTouchStart(evt)}\n        onTouchMove={evt => this.doHandleTouchMove(evt)}\n*/\n      }\n      <input ref={this.timelineref}\n        onChange={evt => this.onTimelineSeek(evt)}\n        class=\"cm-mediaslide__playback__seekbar podcastwidget__timeline\"\n        type=\"range\"\n        min=\"0\"\n        max=\"100\"\n        value={percentagePosition?.toString()}\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.audioplayer.seekbar\")}\n      />\n\n      {/* IMPORTANT: when .isplaying DON'T set a text - otherwise we can get a race condition in which\n          we set an innerText upon a timeupdate event and afterwards a (delayed) Preact rerendering\n          adds a textnode (because it compares the old and new virtual DOM and so isn't aware of the textnode we created using node.innerText=)\n       */}\n      <div class=\"cm-mediaslide__playback__duration podcastwidget__time\">\n        {/* <div class=\"podcastwidget__time-current\">00:00</div>\n          <div class=\"podcastwidget__time-divider\" role=\"presentation\"></div> */}\n        {/* <div ref={this.timedisplayref}\n          class=\"podcastwidget__time-duration\">{this.state.isplaying ? \"\" : (this.props.duration ? this.getTimeText(this.props.duration) : \"--:--\")}</div>\n          */}\n\n        <div ref={this.timedisplayref}\n          class=\"podcastwidget__time-duration\">\n          {/* {this.props.durationMsecs ? this.getTimeText(this.props.durationMsecs) : \"--:--\"} */}\n        </div>\n\n      </div>\n    </div>;\n  }\n\n  doHandleTouchStart(evt: TouchEvent) {\n    evt.stopPropagation(); // prevents scrolling while dragging the slider\n  }\n\n  doHandleTouchMove(evt: TouchEvent) {\n    evt.stopPropagation(); // prevents scrolling while dragging the slider\n  }\n\n\n  onOtherEvent(evt: Event) {\n    console.log(evt.type, evt);\n\n    if (evt.type === \"ended\" || evt.type === \"pause\") {\n\n      // ensure that when an external factor paused us we know our play state.\n      // (so componentDidUpdate doesn't try to start playback)\n      this.setState({ isplaying: false });\n\n      const container = this.containerref.current as HTMLElement;\n      container.classList.remove(\"cm-mediaslide--playing\");\n\n      // const audionode = this.audioref.current as HTMLElement;\n      // audionode.classList.remove(\"isplaying\");\n\n      // const timedisplaynode = this.timedisplayref.current;\n      // timedisplaynode.innerHTML = \"\";\n\n    } else if (evt.type === \"play\") {\n      // this.setState({ isplaying: true });\n      const container = this.containerref.current as HTMLElement;\n      container.classList.add(\"cm-mediaslide--playing\");\n\n      // const audionode = this.audioref.current as HTMLElement;\n      // audionode.classList.add(\"isplaying\");\n    }\n  }\n\n  async resolveAudioLink() {\n    const audionode = this.audioref.current as HTMLElement;\n\n    // NOTE: Upon updating Preact will set the src from the data in items.\n    //       However we use and apply the temporary link for audio from the library.\n    //       So check whether we have this link instead of of checking hasAttribute(\"src\") because Preact will clear the contents of src.\n    if (this.props.onGetSource && this.props.src === undefined) {\n\n      let source: string | null = \"\";\n      try {\n        source = await this.props.onGetSource();\n      } catch (err) {\n        // This audio might not be available anymore.\n        // (Media item #... not in allowed media)\n        // FIXME: how do we show in the UI that a chosen audio from the media library isn't available anymore?\n      }\n\n      if (!source) {\n        // throw new Error(\"No source returned from onGetSource()\");\n        console.error(\"No source returned from onGetSource()\");\n        return;\n      }\n\n      console.info(\"New source for audio\", source);\n      this.props.src = source;\n      audionode?.setAttribute(\"src\", this.props.src);\n    }\n  }\n\n  componentDidUpdate(prevProps: AudioProps) {\n    // After the component has been updated,\n    // we can check whether the isplaying has been set through setState()\n    // and apply this to our media element (<audio> or <video>)\n\n    const audionode = this.audioref.current as HTMLAudioElement;\n    if (this.state.isplaying) // FIXME: to ensure after rendering the playback will actually start?\n      void audionode.play();\n    else\n      audionode.pause();\n  }\n\n  onTimelineSeek(evt: Event) {\n    const audionode = this.audioref.current as HTMLAudioElement;\n\n    if (audionode.readyState === 0) // != HAVE_NOTHING)\n      return;\n\n    const timelinenode = this.timelineref.current;\n\n    const time = (timelinenode.value * audionode.duration) / 100;\n    console.log(\"Seek to\", time);\n    audionode.currentTime = time;\n  }\n\n  onLoadedMetadata() {\n    const audionode = this.audioref.current as HTMLAudioElement;\n    const timedisplaynode = this.timedisplayref.current;\n    this.props.durationMsecs = audionode.duration * 1000;\n\n    console.info(\"METADATA loaded! duration is\", audionode.duration);\n\n    timedisplaynode.innerText = this.getTimeText(audionode.duration * 1000);\n  }\n\n  onTimelinePositionUpdate() {\n    if (!this.base)\n      return;\n\n    const audionode = this.audioref.current as HTMLAudioElement;\n    const timelinenode = this.timelineref.current;\n\n    // While the slider control is being (actively) used, DON'T override the progress (slider knob position).\n    // (This would confuse the user)\n    void timelinenode.offsetHeight; // TEST workaround - force reflow to possible help Chrome correctly detecting the \":active\" state (pseudo-class)\n    if (timelinenode.matches(\":active\"))\n      return;\n\n    // NOTE: duration returns NaN when the metadata hasn't been loaded yet. (which can happen during playback for some MP3s)\n    const percentagePosition = audionode && !Number.isNaN(audionode.duration) ? (100 * audionode.currentTime) / audionode.duration : 0;\n\n    timelinenode.value = percentagePosition;\n\n    (this.base as HTMLElement).style.setProperty(\"--podcast-playback-position-percentage\", percentagePosition + \"%\");\n\n    const timedisplaynode = this.timedisplayref.current;\n    timedisplaynode.innerText = this.getTimeText(audionode.currentTime * 1000);\n  }\n\n\n  getTimeText(time_msecs: number) {\n    const time_secs = time_msecs / 1000;\n    const hours = Math.floor(time_secs / 3600);\n    const minutes = Math.floor(time_secs % 3600 / 60);\n    const seconds = Math.round(time_secs % 60);\n\n    return (hours > 0 ? (hours > 9 ? hours + \":\" : \"0\" + hours + \":\") : \"\")\n      + (minutes > 9 ? minutes : \"0\" + minutes)\n      + \":\"\n      + (seconds > 9 ? seconds : \"0\" + seconds);\n  }\n}\n","/* eslint-disable no-alert */\n/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment, createRef, type ComponentChild, type VNode } from \"preact\";\nimport { backend } from \"./editor\";\nimport type { Moments } from \"./moments\";\n// import * as compatupload from '@mod-system/js/compat/upload';\nimport { assertHTMLElement } from \"./support\";\n\nimport type { CeremonyMomentSlide } from \"./state\";\n// import { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { simpleScreenState, type SimpleScreenState } from \"../../frontend/components/simplescreen\";\n\nimport type { CeremonyMoment } from \"./state\";\nimport { EditMomentDurationForm, MediaListDialog } from \"../../frontend/components/medialisteditor\";\nimport { MediaLibraryViewer, runSelectMediaFromLibraryDialog } from \"../../frontend/components/selectmediafromlibrary\";\n\nimport { AudioPlayer } from \"../../frontend/components/audioplayer\";\nimport { SpinnerIcon } from \"../../frontend/components/spinner\";\n\nimport \"./moment-tile.scss\";\nimport \"./moment-tile-rows.scss\";\nimport \"./moment-tile-back.scss\";\nimport type { CeremonyMomentAudio, CeremonyMomentPresentation } from \"@mod-ceremonymedia/js/api\";\nimport { showDialog } from \"../../frontend/components/dialogs\";\n\n/*\nDirect HTML upload without Filestack:\nimport { CeremonyMoment, supportedMimetypes } from \"./state\";\nimport { requestFile, type UploadInstructions, type UploadResult } from \"@webhare/upload\";\n*/\n\nimport { getTid } from \"@mod-tollium/js/gettid\";\nimport \"@mod-ceremonymedia/webdesigns/ceremonysite/frontend/frontend.lang.json\";\n\n\nconst playbackInterval = 100;\n\n\ninterface MomentCardProps {\n  moment: CeremonyMoment;\n  parent: Moments;\n  canedit: boolean;\n}\n\n\nexport class CeremonyMediaMomentCard extends Component<MomentCardProps, {\n  // State\n  slides_browseidx: number;\n  isbusy: boolean;\n  isuploadingaudio: boolean;\n  isuploadingpresentation: boolean; //presentation or video\n\n  isplaying: boolean; // preview playback enabled? (meaning all slideshows, music, video of this moment play as soon as they are all available for playback)\n\n  dialog?: \"duration\" | \"music\";\n  editMoment: number | null;\n  simpleScreen?: SimpleScreenState;\n}> {\n\n  containerref = createRef();\n  audioref = createRef();\n  videoref = createRef(); // reference to pass to the player\n  editdialogref = createRef<HTMLDialogElement>();\n\n  playbackTimer = 0;\n  playbackStartOffset = 0; // at what place did we start playing\n  playbackStartTime = 0; // at what time did we start?\n\n  // constructor(props: { parent: Moments; moment: CeremonyMoment; slides_browseidx: 0; isplaying?: boolean }) {\n  constructor(props: MomentCardProps) {\n    super(props);\n\n    // this.props.parent = parent;\n\n    this.state = {\n      slides_browseidx: 0,\n      isbusy: false,\n      isuploadingaudio: false,\n      isuploadingpresentation: false,\n      isplaying: false,\n      editMoment: null\n    };\n  }\n\n  log(msg: string) {\n    console.log(\"<MomentCard>\", msg);\n  }\n\n\n  shouldComponentUpdate(props: MomentCardProps, state: { isplaying: boolean }) {\n\n    // console.log(\"<MomentCard> shouldComponentUpdate\", this.props, props);\n\n    if (state.isplaying !== this.state.isplaying) {\n\n      if (state.isplaying)\n        this.__startPlayback();\n      else\n        this.__stopPlayback();\n\n      console.log(\"<MomentCard> no update (playback handled manually)\");\n\n      // delete state.isplaying; // we handled this field\n      //return false;\n    }\n\n    console.log(\"<MomentCard> update!\");\n\n    const propsChanged = object_equals(this.props, props);\n    const stateChanged = object_equals({ ...this.state, isplaying: state.isplaying }, state);\n    const hasFurtherChanges = propsChanged || stateChanged;\n\n    return hasFurtherChanges;\n  }\n\n  // componentDidMount(): void {\n\n  componentDidUpdate(/*prevProps, prevState, snapshot*/) {\n\n    // console.log(\"<MomentCard> componentDidUpdate\");\n\n    if (this.state.editMoment)\n      showDialog(this.editdialogref.current, true);\n    else\n      this.editdialogref.current?.close();\n\n    /*\n    if (this.state.isplaying)\n      this.startPlayback();\n    else\n      this.stopPlayback();\n    */\n  }\n\n\n  inPreviewMode() {\n    return this.props.parent.props.previewMode;\n  }\n\n  doDuplicateMoment = () => {\n    void this.props.parent.doDuplicateItem(this.props.moment.id);\n    //backend.duplicateMoment(this.props.moment.id);\n  };\n\n  doRemoveMoment(evt: MouseEvent) {\n    assertHTMLElement(evt.target);\n    const momentid = evt.target.closest(\".cm-mediaslide\")?.getAttribute(\"data-momentid\");\n    if (momentid)\n      void backend.removeMoment(parseInt(momentid));\n  }\n\n\n  async preload() {\n    if ([\"slideshow\", \"music\"].includes(this.props.moment.type) && this.props.moment.audio) { //this.audioref) {\n      console.info(\"PRELOADING AUDIO FOR\", this.props.moment);\n      await this.audioref.current.resolveAudioLink();\n    }\n  }\n\n  togglePlayback() {\n    console.info(\"<MomentCard> togglePlayback\");\n    this.setState({ isplaying: !this.state.isplaying });\n  }\n\n  startPlayback() {\n    console.info(\"%c<MomentCard> startPlayback for %s\", \"color:#F40;\", this.props.moment.title);\n    this.setState({ isplaying: true });\n  }\n  stopPlayback() {\n    console.info(\"%c<MomentCard> stopPlayback for %s\", \"color:#F40;\", this.props.moment.title);\n    this.setState({ isplaying: false });\n  }\n\n\n  __startPlayback() {\n    console.info(\"<MomentCard> startPlayback (INTERNAL) - playbackTimer %i\", this.playbackTimer);\n    this.containerref.current.classList.add(\"cm-mediaslide--previewplaying\");\n\n    this.playbackStartOffset = 0;\n    this.playbackStartTime = Date.now();\n\n    if (this.playbackTimer === 0)\n      this.onPlaybackInterval();\n\n    if (this.audioref) {\n      // console.log(\"Audio player instance\", this.audioref.current);\n      // this.audioref.current.setState({ isplaying: true });\n      if (this.audioref.current) {\n        this.audioref.current.seekTo(0);\n        this.audioref.current.togglePlayback(); // this also handles onGetSource (for music from the library)\n      }\n    }\n\n    if (this.videoref && this.videoref.current) {\n      this.videoref.current.currentTime = 0;\n      this.videoref.current.play();\n    }\n\n    // if (this.videoref) {\n    // this.videoref.current.play();\n\n    this.setState({ isplaying: true, slides_browseidx: 0 });\n  }\n\n  __stopPlayback() {\n    console.info(\"<MomentCard> stopPlayback (INTERNAL)\");\n\n    if (this.playbackTimer) {\n      clearTimeout(this.playbackTimer);\n      this.playbackTimer = 0;\n    }\n\n    this.containerref.current.classList.remove(\"cm-mediaslide--previewplaying\");\n\n    if (this.audioref) {\n      console.log(\"STOPPING Audio player instance\", this.audioref.current);\n      // this.audioref.current.setState({ isplaying: true });\n      if (this.audioref.current) {\n        this.audioref.current.stop();\n      }\n    }\n\n    if (this.videoref && this.videoref.current)\n      this.videoref.current.pause();\n  }\n\n  onPlaybackInterval() {\n    const timeOffsetInMoment = Date.now() - this.playbackStartTime + this.playbackStartOffset;\n\n    // Reschedule as long as we have reached the duration of this moment\n    if (timeOffsetInMoment < this.props.moment.durationMsecs)\n      //console.info(\"Moment playback progress %ims\", timeOffsetInMoment);\n      this.playbackTimer = window.setTimeout(() => this.onPlaybackInterval(), playbackInterval);\n\n    // Determine on which slide we should\n    if ([\"slideshow\", \"speaker\"].includes(this.props.moment.type))\n      this.doCheckSlidesProgress(timeOffsetInMoment);\n  }\n\n  doCheckSlidesProgress(timeOffsetInMoment: number) {\n    const amountOfSlides = this.props.moment.slides.length;\n    let slideIdx = 0;\n\n\n    let totalSlideshowDuration = 0;\n    for (slideIdx = 0; slideIdx < amountOfSlides; slideIdx++) {\n      const slide = this.props.moment.slides[slideIdx];\n      totalSlideshowDuration += slide.durationMsecs;\n    }\n\n    // console.info(\"Moment playback progress %ims - slides %ims total - moment %ims\", timeOffsetInMoment, totalSlideshowDuration, this.props.moment.durationMsecs);\n    // console.log(\"Slideshow total duration\", totalSlideshowDuration);\n\n\n    timeOffsetInMoment %= totalSlideshowDuration; // make slides loop\n\n\n    // Calculate the begin and end time of the current moment\n    let slideTimeOffset = 0;\n    for (slideIdx = 0; slideIdx < amountOfSlides; slideIdx++) {\n      const slide = this.props.moment.slides[slideIdx];\n\n      // console.log(slideTimeOffset, slide);\n\n      slideTimeOffset += slide.durationMsecs;\n      if (timeOffsetInMoment < slideTimeOffset)\n        break; // we found our slide\n    }\n\n    if (this.state.slides_browseidx === slideIdx) // current play progress still within the same slide?\n      return;\n\n    // FIXME: for music replay all slides until the music finishes\n\n    if (slideIdx < amountOfSlides)\n      this.setState({ slides_browseidx: slideIdx });\n    else {\n      // console.info(\"SHOWN all slides\");\n      this.stopPlayback();\n      this.setState({ slides_browseidx: 0 });\n    }\n  }\n\n\n  onChangedNote(evt: Event) {\n    this.props.moment.note = (evt.target as HTMLInputElement).value;\n    void backend.updateMoment(this.props.moment.id, { note: this.props.moment.note });\n    this.setState({}); // refresh so we regenerate and this new item will appear\n  }\n\n  async doEditSlideshowMedia() {\n    this.setState({ editMoment: this.props.moment.id });\n  }\n\n  closeEditMedia = () => {\n    this.setState({ editMoment: null });\n  };\n\n  doSwitchToNotepad() {\n    const tile = this.base as HTMLElement;\n    tile.classList.add(\"cm-mediaslide--shownote\");\n\n    const notes = tile.querySelector(\".cm-mediaslide__notes\") as HTMLElement;\n    // FIXME: no focusable until animation is complete??\n    if (notes)\n      setTimeout(function () { notes.focus(); }, 300);\n  }\n\n  doCloseNotepad() {\n    const tile = this.base as HTMLElement;\n    tile.classList.remove(\"cm-mediaslide--shownote\");\n\n    const addnotebutton = tile.querySelector(\".cm-mediaslide__managecomment\") as HTMLElement;\n    addnotebutton?.focus();\n  }\n\n  render() {\n    const moment = this.props.moment;\n\n    /*\n    if (this.inPreviewMode())\n      console.log(\"<MomentCard> #%i render preview\", this.props.moment.id);\n    else\n      console.log(\"<MomentCard> #%i render tile\", this.props.moment.id);\n    */\n\n    let content = <Fragment></Fragment>;\n\n    switch (moment.type) {\n      case \"music\":\n        content = this.renderMusicCard();\n        break;\n\n      case \"presentation\":\n        content = this.renderPresentationCard();\n        break;\n\n      case \"slideshow\":\n        content = this.renderSlideshowCard();\n        break;\n\n      case \"speaker\":\n        content = this.renderSpeakerCard();\n        break;\n\n      case \"video\":\n        content = this.renderVideoCard();\n        break;\n\n      default:\n        content = <div>Onbekend type {moment.type}</div>;\n        break;\n    }\n\n    return this.renderCardWrappers(content, moment.type);\n  }\n\n  async updatedMedia(mediaId: string | number | null) {\n    if (mediaId) {\n      this.setState({ isbusy: true, dialog: undefined });\n\n      await backend.setMomentAudioFromLibrary(this.props.moment.id, mediaId);\n    }\n\n    this.setState({ isbusy: false, dialog: undefined });\n  }\n\n  renderCardWrappers(content: object, type: string) {\n    const classes = [\"cm-mediaslide\", `cm-mediaslide--${type}`];\n\n    if (this.state.isbusy)\n      classes.push(\"isbusy\");\n\n    if (this.props.moment.note !== \"\")\n      classes.push(\"cm-mediaslide--hasnote\");\n\n    if (this.props.moment.slides.length > 0)\n      classes.push(\"cm-mediaslide--withslides\");\n    // this.props.moment.slides\n\n    if (this.state.isplaying)\n      classes.push(\"cm-mediaslide--previewplaying\");\n\n    const subDialogs = new Array<ComponentChild>;\n    if (this.state.dialog === \"duration\") {\n      subDialogs.push(<EditMomentDurationForm\n        momentId={this.props.moment.id}\n        durationMsecs={this.props.moment.durationMsecs}\n        onClose={() => this.setState({ dialog: undefined })} />);\n    } else if (this.state.dialog === \"music\") {\n      const popularItems = backend.getCachedMediaLibraryTracks();\n      console.log(\"popularItems\", popularItems);\n      subDialogs.push(<MediaLibraryViewer popularItems={popularItems} onResult={mediaId => void this.updatedMedia(mediaId)} />);\n    }\n\n    // FIXME: holy hell, messageboxes are complicated\n    const { SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n    subDialogs.push(<SimpleScreen />);\n\n    return <article class={classes.join(\" \")}\n      data-momentid={this.props.moment.id}\n      ref={this.containerref}\n      role=\"group\"\n      tabindex={-1}\n    >\n      {this.inPreviewMode()\n        ? null\n        : <div class=\"cm-mediaslide__topheader\">\n          <div class=\"cm-mediaslide__topheader__icon\" role=\"presentation\"></div>\n        </div>\n      }\n      <div class=\"cm-mediaslide__inner\">\n        <div class=\"cm-mediaslide__front\">\n          {content}\n        </div>\n        <div class=\"cm-mediaslide__back\">\n          {this.renderBackNotepad()}\n        </div>\n      </div>\n      {subDialogs}\n    </article>;\n  }\n\n\n  renderPreviewContentTypeIcons() {\n    if (!this.inPreviewMode())\n      return null;\n\n    const showSlidesIcon = this.props.moment.type === \"slideshow\" || this.props.moment.slides.length > 0;\n    const showPresentationIcon = this.props.moment.type === \"presentation\"; // & this.props.moment.presentation !== null\n    const showAudioIcon = this.props.moment.audio !== null;\n    const showVideoIcon = this.props.moment.type === \"video\"; // & this.props.moment.presentation !== null\n\n    const icons: VNode[] = [];\n\n    if (this.props.moment.type === \"speaker\")\n      icons.push(<span class=\"icon fas fa-user\"></span>);\n\n    const slidesCount = this.props.moment.slides.length;\n    if (showSlidesIcon)\n      if (slidesCount > 1)\n        icons.push(<span class=\"icon fas fa-images\"></span>);\n      else if (slidesCount === 1)\n        icons.push(<span class=\"icon fas fa-image\"></span>);\n\n    if (showPresentationIcon)\n      icons.push(<span class=\"icon far fa-file-powerpoint\"></span>);\n\n    if (showVideoIcon)\n      icons.push(<span class=\"icon fas fa-video\"></span>);\n\n    if (showAudioIcon)\n      icons.push(<span class=\"icon fas fa-music\"></span>);\n\n    const finalIcons: VNode[] = [];\n    let idx = 0;\n    for (const icon of icons) {\n      if (idx > 0)\n        finalIcons.push(<span class=\"spacer\">+</span>);\n\n      finalIcons.push(icon);\n\n      idx++;\n    }\n\n    return <div class=\"cm-mediaslide__previewheader\">\n      {finalIcons.map(icon => { return icon; })}\n    </div>;\n\n    /*\n    {getTid(\"ceremonymedia:common.momenttype.presentation\")}\n    */\n\n    /*\n    return <div class=\"cm-mediaslide__previewheader\">\n      {!showSlidesIcon ? null : <span class=\"icon fas fa-images\"></span>}\n      {!showPresentationIcon ? null : <span class=\"icon far fa-file-powerpoint\"></span>}\n      {!showVideoIcon ? null : <span class=\"icon fas fa-video\"></span>}\n      {!showAudioIcon ? null : <span class=\"icon fas fa-music\"></span>}\n    </div>;\n    */\n  }\n\n\n  // NOTE: When adding slides the type will be changed to \"slideshow\", so we don't actually expect a music + slideshow situation to be shown\n  renderMusicCard() {\n    return <Fragment>\n      {this.renderHeader()}\n      {this.renderDescription()}\n      {this.renderPreviewContentTypeIcons()}\n\n      <div class=\"cm-mediaslide__previewarea\">\n        {/* <span class=\"icon fas fa-music\"></span> */}\n        {this.renderAudioTitle()}\n      </div>\n\n      <div class=\"cm-mediaslide__settingslist\">\n        {this.renderImagesSettingsRow()}\n        {this.renderAudioLine()}\n      </div>\n\n      {!this.inPreviewMode() ? null :\n        <div class=\"cm-mediaslide__previewbottom\">\n          {this.renderPreviewPlaybackButton()}\n          {this.renderAudioTitle()}\n        </div>}\n    </Fragment>;\n  }\n\n  renderPreviewPlaybackButton() {\n    return <button class=\"cm-mediaslide__preview-playback-button\"\n      onClick={() => this.togglePlayback()}>\n      <span class=\"icon-play fas fa-play\"></span>\n      {/*\n      <svg class=\"icon-pause\" xmlns=\"http://www.w3.org/2000/svg\" width=\"19\" height=\"22\" viewBox=\"0 0 19 22\">\n        <path d=\"M12.4479 21.7839V0H18.6719V21.7839H12.4479ZM0 21.7839V0H6.22396V21.7839H0Z\" fill=\"currentColor\" />\n      </svg>*/}\n      <span class=\"icon-stop fas fa-stop\"></span>\n    </button>;\n  }\n\n  renderPresentationCard() {\n    return this.inPreviewMode() ? this._renderPresentationPreviewCard() : this._renderPresentationCard();\n  }\n\n  _renderPresentationPreviewCard() {\n    return <Fragment>\n      {this.renderPreviewContentTypeIcons()}\n      <div class=\"cm-mediaslide__previewarea\">\n      </div>\n      <div class=\"cm-mediaslide__settingslist\">\n        {this.renderFileSettingRow()}\n        {this.renderAudioLine()}\n      </div>\n\n      <div class=\"cm-mediaslide__previewbottom\">\n        {!this.props.moment.audio && this.props.moment.slides.length < 2\n          ? null\n          : this.renderPreviewPlaybackButton()\n        }\n        {this.renderAudioTitle()}\n\n        <div class=\"cm-mediaslide__previewinfo\">\n          {getTid(\"ceremonymedia:webdesigns.site.js.momenttile.presentation-previewinfo\")}\n        </div>\n      </div>\n    </Fragment>;\n  }\n\n  _renderPresentationCard() {\n    return <Fragment>\n      {this.renderHeader()}\n      {this.renderDescription()}\n\n      <div class=\"cm-mediaslide__previewarea\">\n\n        <div class=\"cm-mediaslide__previewarea__info\">\n          <div class=\"cm-mediaslide__previewarea__info__typeindication\">\n            <span class=\"icon far fa-file-powerpoint\"></span>\n            {getTid(\"ceremonymedia:common.momenttype.presentation\")}\n          </div>\n\n          <div class=\"cm-mediaslide__previewarea__info__text\">\n            {getTid(\"ceremonymedia:webdesigns.site.js.momenttile.presentation-previewinfo\")}\n          </div>\n        </div>\n\n        {this.renderAudioTitle()}\n      </div>\n\n      <div class=\"cm-mediaslide__settingslist\">\n        {this.renderFileSettingRow()}\n        {this.renderAudioLine()}\n      </div>\n    </Fragment>;\n  }\n\n  renderSlideshowContent() {\n    return this.props.moment.slides.map((image: CeremonyMomentSlide, idx: number) => {\n      const className = \"slideshow__image\" + (idx === Number(this.state.slides_browseidx) ? \"active\" : \"\");\n      // return <img src={image.preview} class={\"slideshow__image\" + (idx === Number(this.state.slides_browseidx) ? \"active\" : \"\")} />;\n\n      if (image.preview !== null)\n        return <img src={image.preview} class={className} />;\n      else\n        return <div class={className}></div>;\n      /*\n          return this.props.moment.slides.map((image, idx) => {\n            return image.preview ? <img src={image.preview} class={\"slideshow__image\" + (idx === this.state.slides_browseidx ? \"active\" : \"\")} /> : <div class=\"slideshow__image slideshow__image--placeholder\"></div>;\n      */\n    });\n  }\n\n  renderSlideshowCard() {\n    // const imagePreviewURL = this.props.moment.slides[this.state.slides_browseidx]?.preview;\n\n    return <Fragment>\n      {this.renderHeader()}\n      {this.renderDescription()}\n      {this.renderPreviewContentTypeIcons()}\n\n      <div class=\"cm-mediaslide__previewarea\">\n        {/* <span class=\"icon fas fa-images\"></span> */}\n        {/* {imagePreviewURL ? <img src={imagePreviewURL} /> : null} */}\n\n        {this.renderSlideshowContent()}\n        {this.renderAudioTitle()}\n      </div>\n\n      <div class=\"cm-mediaslide__settingslist\">\n        {this.renderImagesSettingsRow()}\n        {this.renderAudioLine()}\n      </div>\n\n      {!this.inPreviewMode() ? null :\n        <div class=\"cm-mediaslide__previewbottom\">\n          {!this.props.moment.audio && this.props.moment.slides.length < 2\n            ? null\n            : this.renderPreviewPlaybackButton()\n          }\n          {this.renderAudioTitle()}\n\n          {/*\n          Zat in design maar is op verzoek weggelaten\n\n            this.props.moment.slides.length > 1\n              ? <div class=\"cm-mediaslide__previewinfo\">\n                {getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow-previewinfo\")}\n              </div>\n              : null\n          */}\n\n        </div>}\n    </Fragment>;\n  }\n\n  renderSpeakerCard() {\n    return <Fragment>\n      {this.renderHeader()}\n      {this.renderDescription()}\n      {this.renderPreviewContentTypeIcons()}\n\n      <div class=\"cm-mediaslide__previewarea\">\n        {/* <span class=\"icon fas fa-user-alt\"></span> */}\n        {this.renderSlideshowContent()}\n        {/* {this.renderAudioTitle()} */}\n      </div>\n\n      <div class=\"cm-mediaslide__settingslist\">\n        {this.renderImagesSettingsRow()}\n      </div>\n\n      {!this.inPreviewMode() ? null :\n        <div class=\"cm-mediaslide__previewbottom\">\n\n          {!this.props.moment.audio && this.props.moment.slides.length < 2\n            ? null\n            : this.renderPreviewPlaybackButton()\n          }\n\n          {/*\n          Stond in design, maar op verzoek niet meer getoond\n          <div class=\"cm-mediaslide__preview-title\">Spreker: <b>{this.props.moment.title}</b></div>\n          */}\n          {/* {this.renderAudioTitle()} */}\n        </div>}\n    </Fragment>;\n  }\n\n  renderVideoCard() {\n    return <Fragment>\n      {this.renderHeader()}\n      {this.renderDescription()}\n      {this.renderPreviewContentTypeIcons()}\n\n      <div class=\"cm-mediaslide__previewarea\">\n        {/* <span class=\"icon fas fa-video\"></span> */}\n        {this.props.moment.presentation ? <video ref={this.videoref} src={this.props.moment.presentation.link} /> : null}\n        {this.renderAudioTitle()}\n      </div>\n\n      <div class=\"cm-mediaslide__settingslist\">\n        {this.renderVideoLine()}\n        {this.renderAudioLine()}\n      </div>\n\n      {!this.inPreviewMode() ? null :\n        <div class=\"cm-mediaslide__previewbottom\">\n          {this.renderPreviewPlaybackButton()}\n          {this.renderAudioTitle()}\n        </div>}\n    </Fragment>;\n  }\n\n\n\n  renderHeader() {\n    const minutes = (this.props.moment.durationMsecs / 1000 / 60) | 0;\n    const seconds = ((this.props.moment.durationMsecs / 1000) % 60) | 0;\n\n    // lock the duration if there's audio/music added\n    const lockDuration = Boolean(this.props.moment.audio && this.props.moment.type !== \"speaker\");\n    /*\n    NOTE: a mousedown on .cm-mediaslide__dragbutton\n          or .cm-mediaslide__header__dragtriggerarea will trigger\n          draggable=\"true\" to be set on .cm-mediaslide\n\n          {`${minutes}`.padStart(2, \"0\")}:{`${seconds}`.padStart(2, \"0\")} min\n          */\n    return <div class=\"cm-mediaslide__header\">\n      {!this.props.canedit ? null :\n        <>\n          <div class=\"cm-mediaslide__header__dragtriggerarea\"></div>\n          <div class=\"cm-mediaslide__header__leftbuttons\">\n            <button class=\"cm-mediaslide__dragbutton iconbutton\"\n              type=\"button\"\n              title=\"Verplaats\"> <span class=\"icon far fa-arrows-alt\"></span></button>\n            <button class=\"cm-mediaslide__clonebutton iconbutton\"\n              onClick={this.doDuplicateMoment}\n              type=\"button\"\n              title=\"Maak kopie\"> <span class=\"icon far fa-copy\" ></span></button>\n          </div>\n        </>\n      }\n\n      {this.props.canedit ?\n        <button class=\"cm-mediaslide__duration\"\n          onClick={lockDuration ? evt => this.doWarnDurationLocked() : evt => this.doEditDuration()}\n          type=\"button\" title=\"Duur aanpassen\">\n          <span class=\"icon far fa-stopwatch\"></span>\n          <span class=\"text\">{minutes}:{`${seconds}`.padStart(2, \"0\")} min</span>\n        </button>\n        :\n        <div class=\"cm-mediaslide__duration\">\n          <span class=\"icon far fa-stopwatch\"></span>\n          <span class=\"text\">{minutes}:{`${seconds}`.padStart(2, \"0\")} min</span>\n        </div>\n      }\n\n      {this.props.canedit ?\n        <div class=\"cm-mediaslide__header__rightbuttons\">\n          <button class=\"cm-mediaslide__removebutton iconbutton\"\n            onClick={evt => this.doRemoveMoment(evt)}\n            title=\"Verwijder\"\n            type=\"button\"><span class=\"icon far fa-times\"></span></button>\n        </div> : null}\n    </div>;\n  }\n\n  renderDescription() {\n    let placeholder = \"\";\n    switch (this.props.moment.type) {\n      case \"music\": placeholder = getTid(\"ceremonymedia:webdesigns.site.js.momenttile.placeholders.newtile-title-music\"); break;\n      case \"presentation\": placeholder = getTid(\"ceremonymedia:webdesigns.site.js.momenttile.placeholders.newtile-title-presentation\"); break;\n      case \"slideshow\": placeholder = getTid(\"ceremonymedia:webdesigns.site.js.momenttile.placeholders.newtile-title-slideshow\"); break;\n      case \"speaker\": placeholder = getTid(\"ceremonymedia:webdesigns.site.js.momenttile.placeholders.newtile-title-speaker\"); break;\n      case \"video\": placeholder = getTid(\"ceremonymedia:webdesigns.site.js.momenttile.placeholders.newtile-title-video\"); break;\n    }\n    return <div class=\"cm-mediaslide__description\">\n      {this.props.canedit ?\n        <input class=\"cm-mediaslide__titleinput\" type=\"text\" value={this.props.moment.title} placeholder={placeholder} onChange={evt => this.doStoreUpdatedTitle(evt)} />\n        :\n        <input class=\"cm-mediaslide__titleinput\" type=\"text\" value={this.props.moment.title} placeholder={placeholder} readonly />\n      }\n      <button class=\"cm-mediaslide__managecomment iconbutton\"\n        onClick={evt => this.doSwitchToNotepad()}\n        type=\"button\"\n      ><span class={this.props.moment.note !== \"\" ? \"icon fas fa-comment-dots\" : \"icon far fa-comment-plus\"}></span></button>\n    </div >;\n  }\n\n  renderBackNotepad() {\n    return <Fragment>\n      <div class=\"cm-mediaslide__header\">\n        <h2>Notities</h2>\n      </div>\n      <div class=\"cm-mediaslide__noteshint\">\n        {getTid(\"ceremonymedia:webdesigns.site.js.momenttile.noteshint\")}\n      </div>\n\n      {this.props.canedit ?\n        <textarea class=\"cm-mediaslide__notes\"\n          onChange={evt => this.onChangedNote(evt)}\n        >{this.props.moment.note}</textarea>\n        :\n        <textarea class=\"cm-mediaslide__notes\" readonly>{this.props.moment.note}</textarea>\n      }\n\n      <button class=\"cm-mediaslide__closenotesbutton wh-button-solid wh-button-default\"\n        onClick={evt => this.doCloseNotepad()}\n        type=\"button\"\n      >Ok</button>\n    </Fragment>;\n  }\n\n  renderAudioTitle() {\n    if (!this.props.moment.audio)\n      return null;\n\n    return <div class=\"cm-mediaslide__audiotitle\">\n      <span class=\"icon far fa-music\" role=\"presentation\"></span>\n      {/* <span class=\"filename\">{this.props.moment.audio.title !== \"\" ? this.props.moment.audio.title : this.props.moment.audio.fileName}</span> */}\n      <span class=\"filename\">{this.getAudioTitle(this.props.moment.audio)}</span>\n    </div>;\n  }\n\n  getAudioTitle(audio: CeremonyMomentAudio) {\n    if (audio.title !== \"\" && audio.artist !== \"\")\n      return `${audio.artist} - ${audio.title}`;\n    else if (audio.title !== \"\")\n      return audio.title;\n    else if (audio.fileName !== \"\")\n      return audio.fileName;\n    else\n      return getTid(\"ceremonymedia:webdesigns.site.js.momenttile.audio-noname\");\n  }\n\n\n  renderFileSettingRow() {\n    if (this.props.moment.presentation)\n      return this.renderCurrentFileRow();\n    else\n      return this.renderPresentationUploadOptions();\n  }\n\n  renderPresentationUploadOptions() {\n    if (!this.props.canedit)\n      return null;\n\n    if (this.state.isuploadingpresentation) {\n      // if (true) {\n      return <div class=\"cm-mediaslide__setting\">\n        <div class=\"cm-mediaslide__processingbar wh-button-solid\">\n          <SpinnerIcon />{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadinprogress-presentation\")}\n        </div>\n      </div>;\n    }\n\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--audiouploadoptions\">\n      <button class=\"cm-mediaslide__uploadaudio wh-button-solid\"\n        onClick={evt => void this.doUploadPresentation()}\n        type=\"button\"\n      ><span class=\"icon fab fa-youtube\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadpresentation\")}\n      </button>\n    </div>;\n  }\n\n  renderCurrentFileRow() {\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--file\"\n      role=\"group\"\n      aria-label=\"Presentatie\"\n    >\n      <div class=\"cm-mediaslide__setting__typeindicator\">\n        <span class=\"icon fas fa-file-powerpoint\" role=\"presentation\"></span>\n        {/* <span class=\"visually-hidden\">Presentatie</span> */}\n      </div>\n\n      <div class=\"cm-mediaslide__setting__content\">\n        {!this.props.moment.presentation ? null\n          : <span class=\"filename\">{this.props.moment.presentation.title !== \"\" ? this.props.moment.presentation.title : this.props.moment.presentation.fileName}</span>\n        }\n      </div>\n\n      {!this.props.canedit ? null :\n        <>\n          <button class=\"cm-mediaslide__setting__editbutton iconbutton\"\n            onClick={evt => this.doEditDuration()}\n            type=\"button\"\n            title=\"Duur aanpassen\">\n            <span class=\"icon far fa-pen\"></span>\n          </button>\n          <button class=\"cm-mediaslide__setting__removebutton iconbutton\"\n            onClick={evt => void this.doRemovePresentation()}\n            type=\"button\"\n            title=\"Verwijder\">\n            <span class=\"icon fa fa-times\"></span>\n          </button>\n        </>\n      }\n    </div>;\n  }\n\n  /*\n  Direct HTML upload\n\n  async doUploadPresentation() {\n    const file = await requestFile({ accept: supportedMimetypes.presentation });\n    if (!file)\n      return;\n\n    this.setState({ isbusy: true });\n\n    const uploader: UploadInstructions = await backend.requestUpload(file.manifest);\n    const uploadresult: UploadResult = await file.upload(uploader);\n    const presentation = await backend.setMomentPresentation(this.props.moment.id, uploadresult);\n\n    this.setState({ isbusy: false });\n\n    if (presentation) {\n      this.props.moment.presentation = presentation;\n      this.setState({}); // refresh\n    }\n  }\n*/\n\n  async doUploadPresentation() {\n    const uploader = await backend.prepareUpload(\"presentation\", 1); // allow one video file to be uploaded\n    if (!uploader)\n      return;\n\n    try {\n      this.setState({ isbusy: true, isuploadingpresentation: true });\n\n      // using spinner = new Spinner;\n      // void (spinner); //we're not using the name but you can't use using without a varname..\n\n      const uploadresult = await uploader.upload();\n      console.info(\"UPLOAD result\", uploadresult);\n\n      // Filestack demo accounts will just return 0 files due to ignoring uploads larger than 10 (?) MB\n      if (uploadresult.length > 0) {\n        const presentation = await backend.setMomentPresentation(this.props.moment.id, uploadresult[0]);\n        if (presentation) {\n          this.props.moment.presentation = presentation;\n        }\n      } else\n        alert(\"Filestack cancelled upload?\");\n    } finally {\n      this.setState({ isbusy: false, isuploadingpresentation: false });\n    }\n  }\n\n\n  async doRemovePresentation() {\n    const success = await backend.removeMomentPresentation(this.props.moment.id);\n    if (success) {\n      this.props.moment.presentation = null;\n      this.setState({}); // refresh\n    }\n  }\n\n  doEditDuration() {\n    this.setState({ dialog: \"duration\" });\n  }\n\n  async doWarnDurationLocked() {\n    // this.setState({ dialog: \"durationLocked\" });\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    await runSimpleScreen(\"question\", getTid(\"ceremonymedia:webdesigns.site.js.momenttile.duration-locked-to-audio\"), {\n      title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.warning\"), buttons: [\"close\"]\n    });\n\n    return;\n  }\n\n  renderVideoLine() {\n    if (this.props.moment.presentation)\n      return this.renderVideoPlaybackRow(this.props.moment.presentation);\n    else\n      return this.renderVideoUploadOptions();\n  }\n\n  renderVideoUploadOptions() {\n    if (!this.props.canedit)\n      return;\n\n    if (this.state.isuploadingpresentation) {\n      // if (true) {\n      return <div class=\"cm-mediaslide__setting\">\n        <div class=\"cm-mediaslide__processingbar wh-button-solid\">\n          <SpinnerIcon />{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadinprogress-video\")}\n        </div>\n      </div>;\n    }\n\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--audiouploadoptions\">\n      <button class=\"cm-mediaslide__uploadaudio wh-button-solid\"\n        onClick={evt => void this.doUploadVideo()}\n        type=\"button\"\n      ><span class=\"icon fab fa-youtube\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadvideo\")}\n      </button>\n    </div>;\n  }\n\n\n  async doUploadVideo() {\n    const uploader = await backend.prepareUpload(\"video\", 1); // allow one video file to be uploaded\n    if (!uploader)\n      return;\n\n    try {\n      this.setState({ isbusy: true, isuploadingpresentation: true });\n\n      // using spinner = new Spinner;\n      // void (spinner); //we're not using the name but you can't use using without a varname..\n\n      const uploadresult = await uploader.upload();\n      // console.info(\"UPLOAD result\", uploadresult);\n      const videoinfo = await backend.setMomentPresentation(this.props.moment.id, uploadresult[0]);\n\n      if (videoinfo) {\n        this.props.moment.presentation = videoinfo;\n      }\n    } finally {\n      this.setState({ isbusy: false, isuploadingpresentation: false });\n    }\n  }\n\n  async doRemoveVideo() {\n    const success = await backend.removeMomentPresentation(this.props.moment.id);\n    if (success) {\n      this.props.moment.presentation = null;\n      this.setState({}); // refresh\n    }\n  }\n\n  renderVideoPlaybackRow(video: CeremonyMomentPresentation) {\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--playablemedia cm-mediaslide__setting--video\"\n      role=\"group\"\n      aria-label=\"Video\"\n    >\n      <div class=\"cm-mediaslide__setting__typeindicator\">\n        <span class=\"icon fab fa-youtube\" role=\"presentation\"></span>\n        {/* <span class=\"visually-hidden\">Slideshow</span> */}\n      </div>\n\n      <AudioPlayer playerref={this.videoref} durationMsecs={video.durationMsecs} />\n\n      {!this.props.canedit ? null :\n        <button class=\"cm-mediaslide__setting__removebutton iconbutton\"\n          onClick={() => void this.doRemovePresentation()}\n          type=\"button\"\n          title={getTid(\"ceremonymedia:webdesigns.site.js.buttons.delete\")}>\n          <span class=\"icon fa fa-times\"></span>\n        </button>\n      }\n    </div>;\n  }\n\n\n\n\n\n  /* NOTE: YouTube noemt het \"Zoekschuifbalk\", dus daar is de aria-label voor de seek-slider van overgenomen */\n  renderAudioLine() {\n    if (this.props.moment.audio)\n      return this.renderAudioPlaybackRow();\n    else\n      return this.renderAudioUploadOptions();\n  }\n\n  renderAudioUploadOptions() {\n    if (!this.props.canedit)\n      return;\n\n    if (this.state.isuploadingaudio) {\n      // if (true) {\n      return <div class=\"cm-mediaslide__setting\">\n        <div class=\"cm-mediaslide__processingbar wh-button-solid\">\n          <SpinnerIcon />{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadinprogress-audio\")}\n        </div>\n      </div>;\n    }\n\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--audiouploadoptions\">\n      <button class=\"cm-mediaslide__uploadaudio wh-button-solid\"\n        onClick={evt => void this.doUploadAudio()}\n        type=\"button\"\n      ><span class=\"icon fas fa-music\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadmusic\")}\n      </button>\n      <button class=\"cm-mediaslide__chooseaudio wh-button-solid\"\n        onClick={evt => this.setState({ dialog: \"music\" })}\n        type=\"button\"\n      >{getTid(\"ceremonymedia:webdesigns.site.js.buttons.musiclibrary\")}</button>\n    </div>;\n  }\n\n  async doUploadAudio() {\n    const uploader = await backend.prepareUpload(\"audio\", 1); // allow one video file to be uploaded\n    if (!uploader)\n      return;\n\n    try {\n      this.setState({ isbusy: true, isuploadingaudio: true });\n\n      // using spinner = new Spinner;\n      // void (spinner); //we're not using the name but you can't use using without a varname..\n\n      const uploadresult = await uploader.upload();\n      // console.info(\"UPLOAD result\", uploadresult);\n      // const videoinfo = await backend.setMomentPresentation(this.props.moment.id, uploadresult[0]);\n      const audioinfo = await backend.setMomentAudio(this.props.moment.id, uploadresult[0]);\n\n      if (audioinfo) {\n        this.props.moment.audio = audioinfo;\n        // this.setState({}); // refresh\n      }\n    } finally {\n      this.setState({ isbusy: false, isuploadingaudio: false });\n    }\n  }\n\n\n  async doSelectAudioFromLibrary() {\n    const mediaId = await runSelectMediaFromLibraryDialog();\n    // alert(mediaId);\n    // console.log(mediaId);\n    if (mediaId === null) // was the selection cancelled?\n      return;\n\n    const audioinfo = await backend.setMomentAudioFromLibrary(this.props.moment.id, mediaId);\n\n    if (audioinfo) {\n      this.props.moment.audio = audioinfo;\n      this.setState({}); // refresh\n    }\n  }\n\n  async doSelectVideoFromLibrary() {\n    alert(\"Video library not implemented yet.\");\n  }\n\n  async doRemoveAudio() {\n    const success = await backend.removeMomentAudio(this.props.moment.id);\n    if (success) {\n      this.props.moment.audio = null;\n      this.setState({}); // refresh\n    }\n  }\n\n  async onGetAudioSource(): Promise<string | null> {\n    const preview = await backend.getAudioPreview(this.props.moment.audio!.mediaId);\n    return preview?.src || null;\n  }\n\n  renderAudioPlaybackRow() {\n    const audio = this.props.moment.audio;\n\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--playablemedia cm-mediaslide__setting--music\"\n      role=\"group\"\n      aria-label=\"Muziek\"\n    >\n      <div class=\"cm-mediaslide__setting__typeindicator\">\n        <span class=\"icon fa fa-music\" role=\"presentation\"></span>\n        {/* <span class=\"visually-hidden\">Slideshow</span> */}\n      </div>\n\n      {!audio ? null\n        : audio.mediaId > 0\n          ? <><AudioPlayer ref={this.audioref} onGetSource={() => this.onGetAudioSource()} durationMsecs={audio.durationMsecs} /></>\n          : <><AudioPlayer ref={this.audioref} src={this.props.moment.audio?.link ?? \"\"} durationMsecs={audio.durationMsecs} /></>\n      }\n\n      {/*\n      <button class=\"cm-mediaslide__setting__editbutton iconbutton\"\n        type=\"button\"\n        title=\"Aanpassen\">\n        <span class=\"icon far fa-pen\"></span>\n      </button>\n */}\n      {!this.props.canedit ? null :\n        <button class=\"cm-mediaslide__setting__removebutton iconbutton\"\n          onClick={() => void this.doRemoveAudio()}\n          type=\"button\"\n          title={getTid(\"ceremonymedia:webdesigns.site.js.buttons.delete\")}>\n          <span class=\"icon fa fa-times\"></span>\n        </button>\n      }\n    </div>;\n  }\n\n\n\n\n  previousSlide() {\n    if (this.state.slides_browseidx > 0)\n      this.setState({ slides_browseidx: this.state.slides_browseidx - 1 });\n  }\n\n  nextSlide() {\n    if (this.state.slides_browseidx < this.props.moment.slides.length - 1)\n      this.setState({ slides_browseidx: this.state.slides_browseidx + 1 });\n    else\n      this.setState({ slides_browseidx: 0 });\n  }\n\n  doRemoveCurrentSlide() {\n    const currentslide = this.props.moment.slides[this.state.slides_browseidx];\n    console.log(\"Removing slide\", currentslide);\n    void backend.removeSlideFromMoment(this.props.moment.id, currentslide.id);\n\n    // NOTE: We directly remove the slide locally to make removal feel snappier.\n    // In the rare case that the RPC call to remove the slide failed (no internet) this may mean the user sees/thinks it's removed while it's still there.\n    this.props.moment.slides.splice(this.state.slides_browseidx, 1);\n\n    if (this.state.slides_browseidx > 0 && this.state.slides_browseidx > this.props.moment.slides.length - 1)\n      this.setState({ slides_browseidx: this.state.slides_browseidx - 1 });\n  }\n\n\n  doStoreUpdatedTitle(evt: Event) {\n    if (!evt.target)\n      return;\n    const target = evt.target as HTMLInputElement;\n\n    // this.props.moment.title = this.base?.querySelector(\".cm-mediaslide__titleinput\").value;\n    this.props.moment.title = target.value;\n    void backend.updateMoment(this.props.moment.id, { title: target.value });\n  }\n\n  renderImagesSettingsRow() {\n    const slidescount = this.props.moment.slides.length;\n\n    return <div class=\"cm-mediaslide__setting cm-mediaslide__setting--images\"\n      role=\"group\"\n      aria-label={getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow.images\")}\n    >\n      <div class=\"cm-mediaslide__setting__typeindicator\">\n        <span class=\"fa fa-images\" role=\"presentation\"></span>\n        {/* <span class=\"visually-hidden\">Slideshow</span> */}\n      </div>\n\n      <div class=\"cm-mediaslide__setting__content\">\n        <button class=\"cm-mediaslide__setting__prevbutton iconbutton\"\n          aria-label={getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow.showpreviousimage\")}\n          type=\"button\"\n          onClick={evt => this.previousSlide()}\n          disabled={this.state.slides_browseidx === 0}>\n          <span class=\"icon fa fa-chevron-left\"></span>\n        </button>\n\n        <div class=\"cm-mediaslide__setting__itemtitle\">\n          {slidescount === 0 ? getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow.noimages\")\n            : slidescount === 1 ? getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow.oneimage\")\n              : getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow.imagenroftotal\", String(this.state.slides_browseidx + 1), String(slidescount))\n          }\n        </div>\n\n        <button class=\"cm-mediaslide__setting__nextbutton iconbutton\"\n          aria-label={getTid(\"ceremonymedia:webdesigns.site.js.momenttile.slideshow.shownextimage\")}\n          type=\"button\"\n          onClick={evt => this.nextSlide()}\n        >\n          <span class=\"icon fa fa-chevron-right\"></span>\n        </button>\n      </div>\n\n      {!this.props.canedit ? null :\n        <>\n          <button class=\"cm-mediaslide__setting__editbutton iconbutton\"\n            onClick={evt => void this.doEditSlideshowMedia()}\n            type=\"button\"\n            title={getTid(\"ceremonymedia:webdesigns.site.js.buttons.adjust\")}>\n            <span class=\"icon far fa-pen\"></span>\n          </button>\n\n          {this.state.editMoment === this.props.moment.id ?\n            <MediaListDialog\n              momentId={this.props.moment.id}\n              durationMsecs={this.props.moment.durationMsecs}\n              fixedDuration={Boolean(this.props.moment.audio && this.props.moment.type !== \"speaker\")}\n              items={this.props.moment.slides}\n              onResult={this.closeEditMedia}\n            /> :\n            null\n          }\n\n          <button class=\"cm-mediaslide__setting__removebutton iconbutton\"\n            onClick={evt => this.doRemoveCurrentSlide()}\n            type=\"button\"\n            title={getTid(\"ceremonymedia:webdesigns.site.js.buttons.delete\")}>\n            <span class=\"icon fa fa-times\"></span>\n          </button>\n        </>\n      }\n    </div>;\n  }\n}\n\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction object_equals(x: any, y: any) {\n  if (x === y) return true;\n  // if both x and y are null or undefined and exactly the same\n\n  if (!(x instanceof Object) || !(y instanceof Object)) return false;\n  // if they are not strictly equal, they both need to be Objects\n\n  if (x.constructor !== y.constructor) return false;\n  // they must have the exact same prototype chain, the closest we can do is\n  // test there constructor.\n\n  for (const p in x) {\n    // if (!x.hasOwnProperty(p)) continue;\n    if (!Object.hasOwn(x, p)) continue;\n    // other properties were tested using x.constructor === y.constructor\n\n    // if (!y.hasOwnProperty(p)) return false;\n    if (!Object.hasOwn(y, p)) return false;\n    // allows to compare x[ p ] and y[ p ] when set to undefined\n\n    if (x[p] === y[p]) continue;\n    // if they have the same strict value or identity then they are equal\n\n    if (typeof (x[p]) !== \"object\") return false;\n    // Numbers, Strings, Functions, Booleans must be strictly equal\n\n    // !!! disabled\n    // if (!object_equals(x[p], y[p])) return false;\n    // Objects and Arrays must be tested recursively\n  }\n\n  for (const p in y)\n    // if (y.hasOwnProperty(p) && !x.hasOwnProperty(p))\n    if (Object.hasOwn(y, p) && !Object.hasOwn(x, p))\n      return false;\n  // allows x[ p ] to be set to undefined\n\n  return true;\n}\n","/* eslint-disable no-alert */\n/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment } from \"preact\";\nimport { type CeremonyMomentType } from \"./state\";\n\n// Dialogs\nimport { MediaLibraryViewer, runSelectMediaFromLibraryDialog } from \"../../frontend/components/selectmediafromlibrary\";\nimport { ImageLibraryImageChooser } from \"../../frontend/components/selectimagefromlibrary\";\n\n// Components\nimport { Moments } from \"./moments\";\nimport { SpinnerIcon } from \"../../frontend/components/spinner\";\n\nimport { backend } from \"./editor\";\nimport { getTid } from \"@webhare/gettid\";\n\nimport \"./addmoment.scss\";\nimport type { supportedMimetypes } from \"../shared-upload\";\n\n\n/* The AddMoment card represents a wizard to append additional contenet. As long as the AddMoment is active and no new card has been added, the content has not been committed */\nexport class AddMomentCard extends Component<{\n  parent: Moments;\n  allowAddingPresentations: boolean;\n}, {\n  wizardState: \"start\" | \"select\" | \"music\" | \"presentation\" | \"slideshow\" | \"video\";\n  isbusy: boolean;\n}> {\n  constructor(props: { parent: Moments }) {\n    super();\n\n    console.info(\"AddMomentCard props\", props);\n\n    this.state = { wizardState: \"start\", isbusy: false };\n  }\n\n  addMoment = (type: \"music\" | \"presentation\" | \"slideshow\" | \"speaker\" | \"video\") => {\n\n    if (type === \"slideshow\") {\n      if (backend.getCachedMediaLibraryImages().length === 0)\n        this.runUpload(\"slideshow\");\n      else\n        this.setState({ wizardState: \"slideshow\" });\n      return;\n    }\n\n    if (type === \"music\") {\n      if (backend.getCachedMediaLibraryTracks().length === 0)\n        this.runUpload(\"music\");\n      else\n        this.setState({ wizardState: \"music\" });\n      return;\n    }\n\n    if (type === \"presentation\") {\n      this.runUpload(\"presentation\");\n      return;\n    }\n\n    if (type === \"speaker\") {\n      backend.addMoment(\"speaker\");\n    }\n\n    if (type === \"video\") {\n      this.runUpload(\"video\");\n      return;\n    }\n\n    this.reset();\n  };\n\n  reset() {\n    this.setState({ wizardState: \"start\" });\n  }\n\n  async runUpload(type: \"music\" | \"presentation\" | \"slideshow\" | \"video\") {\n    switch (type) {\n      case \"music\": await this.uploadNewMoment(\"audio\", \"music\"); break;\n      case \"presentation\": await this.uploadNewMoment(\"presentation\", \"presentation\"); break;\n      case \"slideshow\": await this.uploadNewMoment(\"image\", \"slideshow\"); break;\n      case \"video\": await this.uploadNewMoment(\"video\", \"video\"); break;\n    }\n  }\n\n  async uploadNewMoment(uploadType: keyof typeof supportedMimetypes, momentType: CeremonyMomentType) {\n    const uploader = await backend.prepareUpload(uploadType, uploadType === \"image\" ? 100 : 1);\n    if (!uploader)\n      return;\n\n    try {\n      this.setState({ isbusy: true });\n\n      //TODO is there any error handling we need to do?\n      const momentId = await backend.addMoment(momentType, {\n        files: await uploader.upload()\n      });\n      console.log(`New moment added: ${momentId}`);\n      this.setState({ wizardState: momentId ? \"start\" : \"select\" });\n      return momentId;\n    } finally {\n      this.setState({ isbusy: false });\n    }\n  }\n\n  render() {\n    if (this.state.isbusy) {\n      const content = <Fragment>\n        <div class=\"cm-moment__processingmessage\">{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.processing\", { render: h })}</div>\n        <SpinnerIcon />\n      </Fragment>;\n      return this.renderCardWrappers(content, [\"addmoment--busy\"]);\n    }\n\n    switch (this.state.wizardState) {\n      case \"start\":\n        {\n          // this.setState({ busy: false });\n          const content = <Fragment>\n            <button class=\"addmoment__addbutton\"\n              onClick={evt => this.setState({ wizardState: \"select\" })}\n            >{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.addamoment\", { render: h })} <span class=\"icon fal fa-plus\" role=\"presentation\"></span></button>\n          </Fragment>;\n          return this.renderCardWrappers(content, [\"addmoment--start\"]);\n          break;\n        }\n      case \"select\":\n        {\n          const content = <Fragment>\n            <div class=\"cm-mediaslide--additem__header\">\n              <h2>{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.choosewhattoadd\", { render: h })}</h2>\n            </div>\n\n            {this.state.wizardState === \"select\" ? <MomentTypeSelector parent={this} allowAddingPresentations={this.props.allowAddingPresentations} /> : null}\n\n            <div class=\"addmoment__buttonbar\">\n              <div class=\"addmoment__buttonbar__content\">\n                <button class=\"addmoment__resetbutton wh-button-textual\"\n                  onClick={() => this.reset()}\n                >{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n              </div>\n            </div>\n          </Fragment>;\n\n          return this.renderCardWrappers(content, [\"addmoment--typeselection\"]);\n          break;\n        }\n\n      case \"music\":\n        {\n          const content = <AddMusic parent={this} onUpload={() => this.runUpload(\"music\")} onResult={(momentId) => this.setState({ wizardState: momentId ? \"start\" : \"select\" })} />;\n          return this.renderCardWrappers(content, [\"addmoment--addmusic\"]);\n          break;\n        }\n\n      case \"slideshow\":\n        {\n          const content = <AddSlideShow parent={this} onUpload={() => this.runUpload(\"slideshow\")} onResult={(momentId) => this.setState({ wizardState: momentId ? \"start\" : \"select\" })} />;\n          return this.renderCardWrappers(content, [\"addmoment--addslideshow\"]);\n          break;\n        }\n    }\n  }\n\n\n  renderCardWrappers(content: object, classes: string[]) {\n\n    classes = classes.concat([\"cm-mediaslide\", \"cm-mediaslide--additem\"]);\n\n    if (this.state.isbusy)\n      classes.push(\"isbusy\");\n\n    return <article class={classes.join(\" \")}\n      role=\"group\"\n    >\n      <div class=\"cm-mediaslide__inner\">\n        <div class=\"cm-mediaslide__front\">\n          {content}\n        </div>\n      </div>\n    </article>;\n  }\n}\n\nexport class MomentTypeSelector extends Component<{\n  parent: AddMomentCard;\n  allowAddingPresentations: boolean;\n}\n> {\n  constructor(props: { parent: AddMomentCard; allowAddingPresentations: boolean }) {\n    super(props);\n  }\n\n  render() {\n    return <div class=\"cm-momenttypeselector\">\n      <div class=\"cm-momenttypeselector__options\">\n        <button class=\"cm-momenttypeselector__option\"\n          onClick={evt => this.doAddSlideshowMoment()}\n          type=\"button\">\n          <span class=\"cm-momenttypeselector__option__type\">\n            <span class=\"icon far fa-plus\" role=\"presentation\"></span>\n            <span class=\"icon fas fa-images\" role=\"presentation\"></span>\n          </span>\n          <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.momenttype.slideshow\")}</span>\n        </button>\n\n        <button class=\"cm-momenttypeselector__option\"\n          onClick={evt => this.doAddVideoMoment()}\n          type=\"button\"        >\n          <span class=\"cm-momenttypeselector__option__type\">\n            <span class=\"icon far fa-plus\" role=\"presentation\"></span>\n            <span class=\"icon fab fa-youtube\" role=\"presentation\"></span>\n          </span>\n          <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.momenttype.video\")}</span>\n        </button>\n\n        <button class=\"cm-momenttypeselector__option\"\n          onClick={evt => this.doAddMusicMoment()}\n          type=\"button\">\n          <span class=\"cm-momenttypeselector__option__type\">\n            <span class=\"icon far fa-plus\" role=\"presentation\"></span>\n            <span class=\"icon fas fa-music\" role=\"presentation\"></span>\n          </span>\n          <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.momenttype.music\")}</span>\n        </button>\n\n        { //backend.ceremony.allowPresentations\n          this.props.allowAddingPresentations ?\n            <button class=\"cm-momenttypeselector__option\"\n              onClick={evt => this.doAddPresentationMoment()}\n              type=\"button\">\n              <span class=\"cm-momenttypeselector__option__type\">\n                <span class=\"icon far fa-plus\" role=\"presentation\"></span>\n                <span class=\"icon fas fa-file-powerpoint\" role=\"presentation\"></span>\n              </span>\n              <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.momenttype.presentation\")}</span>\n            </button> : null\n        }\n\n        <button class=\"cm-momenttypeselector__option\"\n          onClick={evt => this.doAddSpeakerMoment()}\n          type=\"button\">\n          <span class=\"cm-momenttypeselector__option__type\">\n            <span class=\"icon far fa-plus\" role=\"presentation\"></span>\n            <span class=\"icon fas fa-user\" role=\"presentation\"></span>\n          </span>\n          <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.addmoment.momenttype.speaker\")}</span>\n        </button>\n      </div>\n    </div>;\n  }\n\n  doAddMusicMoment() {\n    this.props.parent.addMoment(\"music\");\n  }\n\n  doAddPresentationMoment() {\n    this.props.parent.addMoment(\"presentation\");\n  }\n\n  doAddSlideshowMoment() {\n    this.props.parent.addMoment(\"slideshow\");\n  }\n\n  doAddSpeakerMoment() {\n    this.props.parent.addMoment(\"speaker\");\n  }\n\n  doAddVideoMoment() {\n    this.props.parent.addMoment(\"video\");\n  }\n}\n\nabstract class AddMomentBase<Props extends object, State extends object = object> extends Component<{ parent: AddMomentCard; onResult: (momentId: number | null) => void } & Props, State> {\n\n\n  async createNewMomentUsingMediaFromLibrary(uploadType: keyof typeof supportedMimetypes, momentType: CeremonyMomentType) {\n\n    const mediaId = await runSelectMediaFromLibraryDialog();\n    if (mediaId === null) // was the selection cancelled?\n      return;\n\n    /*\n    try {\n      this.props.parent.setState({ isbusy: true });\n\n      using spinner = new Spinner;\n      void (spinner); //we're not using the name but you can't use using without a varname..\n\n      const momentid = await backend.addMoment(momentType, {\n        audioMedia: mediaId\n      });\n\n      console.log(`New moment added: ${momentid}`);\n      this.props.onResult(momentid);\n    } finally {\n      this.props.parent.setState({ isbusy: false });\n    }\n    */\n\n    const momentid = await backend.addMoment(momentType, {\n      audioMedia: mediaId\n    });\n\n    console.log(`New moment added: ${momentid}`);\n    this.props.onResult(momentid);\n  }\n\n}\n\n\nexport class AddSlideShow extends AddMomentBase<{ onUpload: () => void }, { dialog?: \"selectImageFromLibrary\" }> {\n\n  selectImageFromLibrary = () => {\n    this.setState({ dialog: \"selectImageFromLibrary\" });\n  };\n\n  render() {\n    {\n      return <Fragment>\n        <div class=\"cm-mediaslide--additem__header\">\n          <span class=\"icon fas fa-images\" role=\"presentation\"></span>\n          {/* <h2>Kies<br />wat u toe wilt voegen</h2> */}\n        </div>\n\n        <div class=\"addmoment__intro\">\n          {getTid(\"ceremonymedia:webdesigns.site.js.addmoment.slideshowintro\")}\n        </div>\n\n        <div class=\"addmoment__optionbuttons\">\n          {/* Upload your own images */}\n          <button class=\"wh-button-solid wh-button-default addmoment__uploadimagesbutton\"\n            onClick={this.props.onUpload}\n            type=\"button\"\n          ><span class=\"icon far fa-images\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadownimages\")}</button>\n\n          {/* Use library of images the organization provides */}\n          {backend.getCachedMediaLibraryImages().length > 0 &&\n            <button class=\"wh-button-solid addmoment__addfromcloudbutton\"\n              onClick={this.selectImageFromLibrary}\n              type=\"button\"\n            ><span class=\"icon fa fa-cloud-download\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.imagesfromlibrary\")}</button>\n          }\n          {this.state.dialog === \"selectImageFromLibrary\" &&\n            <ImageLibraryImageChooser\n              onSelect={async images => {\n                this.setState({ dialog: undefined });\n                const momentid = await backend.addMoment(\"slideshow\", {});\n                await backend.addMomentLibrarySlides(momentid, images);\n                this.props.onResult(momentid);\n              }}\n              onClose={() => this.setState({ dialog: undefined })} />}\n        </div>\n\n        <div class=\"addmoment__buttonbar\">\n          <div class=\"addmoment__buttonbar__content\">\n            <button class=\"addmoment__resetbutton wh-button-textual\" onClick={() => this.props.onResult(null)} >{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n          </div>\n        </div>\n      </Fragment>;\n    }\n  }\n}\n\nexport class AddMusic extends AddMomentBase<{ onUpload: () => void }, { dialog?: \"selectAudioFromLibrary\" }> {\n\n  constructor(props: { parent: AddMomentCard }) {\n    super();\n  }\n\n  warnNotImplemented = () => {\n    alert(\"ADDME: Not implemented yet.\");\n  };\n\n  render() {\n    {\n      const popularItems = backend.getCachedMediaLibraryTracks();\n\n      const gotMedia = async (mediaId: number | string | null) => {\n        if (!mediaId)\n          this.props.onResult(null);\n        else {\n          let momentId: number | null = null;\n          try {\n            momentId = await backend.addMoment(\"music\", {\n              audioMedia: mediaId\n            });\n          } finally {\n            this.props.onResult(momentId);\n          }\n        }\n      };\n\n      return <Fragment>\n        <div class=\"cm-mediaslide--additem__header\">\n          <span class=\"icon fas fa-music\" role=\"presentation\"></span>\n          {/* <h2>Kies<br />wat u toe wilt voegen</h2> */}\n        </div>\n\n        <div class=\"addmoment__intro\">\n          {getTid(\"ceremonymedia:webdesigns.site.js.addmoment.musicintro\")}\n        </div>\n\n        <div class=\"addmoment__optionbuttons\">\n          {/* Upload your own audio/music */}\n          <button class=\"wh-button-solid wh-button-default addmoment__uploadimagesbutton\"\n            onClick={this.props.onUpload}\n            type=\"button\"\n          ><span class=\"icon fas fa-music\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.uploadownmusic\")}</button>\n\n          {/* Use library of music the organization provides */}\n          <button class=\"wh-button-solid addmoment__addfromcloudbutton\"\n            onClick={() => this.setState({ dialog: \"selectAudioFromLibrary\" })}\n            type=\"button\"\n          ><span class=\"icon far fa-cloud-download\"></span>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.musicfromlibrary\")}</button>\n          {this.state.dialog === \"selectAudioFromLibrary\" &&\n            <MediaLibraryViewer popularItems={popularItems} onResult={gotMedia} />\n          }\n        </div>\n        {/* <Circular color=\"red\" /> */}\n        <div class=\"addmoment__buttonbar\">\n          <div class=\"addmoment__buttonbar__content\">\n            <button class=\"addmoment__resetbutton wh-button-textual\" onClick={() => this.props.onResult(null)} >{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n          </div>\n        </div>\n      </Fragment>;\n    }\n  }\n}\n","/*\n\nCM < utwente_ppp < SKW\n\nCM version:\n- converted to Typescript\n\n!! FIXME: port updates (such as function doc) back to ZVI version of spc-pagination\n*/\n\nimport * as dompack from \"dompack\";\nimport { getTid } from \"@mod-tollium/js/gettid\";\n\nimport \"./pagination.css\";\n// import { assertHTMLElement } from \"./support\";\n\n// import \"@mod-ceremonymedia/webdesigns/site/site.lang.json\";\n\n\nconst paginationNodeInstances = new WeakMap();\n\n\n//Preact hiaat: geen addDocEventListener achtig iets om de types al eerder goed te zetten. dan maar asserten\nexport function assertHTMLElement(el: EventTarget | null): asserts el is HTMLElement {\n  if (!el || !(el instanceof HTMLElement)) {\n    console.error(el);\n    throw new Error(\"Element is not a HTML Element\");\n  }\n}\n\n/*\n- using event delegation to keep the amount of eventlisteners down\n  and prevent breakage due to DOM rewriting (maybe helps tools such as readSpeaker ?)\n*/\n\nconst observer = new ResizeObserver(relayoutPaginationBars);\n\nfunction relayoutPaginationBars(entries: ResizeObserverEntry[]) {\n  for (const entry of entries) {\n    //entry.target.__paginationBarInstance.refresh();\n    paginationNodeInstances.get(entry.target);\n  }\n}\n\n\ntype paginationBarOptions =\n  {\n    amount_of_pages: number;\n    currentPage: number;\n    gotoPageCallback: CallableFunction | null;\n    controls: HTMLElement | null; // element which we control (aria-controls will be set with this id)\n  };\n\n\nexport class paginationBar {\n\n  container: HTMLElement | null; /// the element we are inserted into\n  node: HTMLElement; /// our pagination bar (.spc-pagination__pages)\n  node_pages: HTMLElement; /// container for the pagination numbers (.spc-pagination__pages)\n  prevButton: HTMLElement | null = null;\n  nextButton: HTMLElement | null = null;\n\n  options: paginationBarOptions;\n\n  state_amountofpagesbuttonsdrawn: number = 0;\n\n  require_dom_update: boolean;\n\n  /**\n * @param insertinto - node in which to insert (null if you want to append the node yourself later - for example when the DOM in which this pagination will be used hasn't rendered yet)\n * @param options - state and behaviour\n */\n\n  constructor(insertinto: HTMLElement | null, options: Partial<paginationBarOptions>) {\n    this.options =\n    {\n      amount_of_pages: 0,\n      currentPage: 0,\n      gotoPageCallback: null,\n      controls: null,\n      ...options\n    };\n\n    console.info(\"[paginationBar]\", options);\n\n    this.container = insertinto;\n\n\n\n    // FIXME: if the results container doesn't have an id we need to generate an ID ?\n    let controls_id = \"\";\n    if (this.options.controls && this.options.controls.hasAttribute(\"id\"))\n      controls_id = this.options.controls.getAttribute(\"id\")!;\n\n    const paginationbar =\n      <nav class=\"spc-pagination\"\n        aria-controls={controls_id}\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.pagination.pagination\")}\n        onClick={this.checkPaginationClick}\n      ></nav>;\n\n    // container.__paginationoptions = options;\n    // paginationbar.addEventListener(\"click\", evt => this.checkPaginationClick(evt));\n\n    // Add a 'previous' link\n    this.prevButton =\n      <button class=\"spc-pagination__previous\"\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.pagination.previouspage-arialabel\")}\n      >\n        {/*{getTid(\"ceremonymedia:webdesigns.site.js.pagination.previouspage\")}*/}\n      </button >;\n\n    // Add a 'next' link\n    this.nextButton =\n      <button class=\"spc-pagination__next\"\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.pagination.nextpage-arialabel\")\n        }\n      >\n        {/*{getTid(\"ceremonymedia:webdesigns.site.js.pagination.nextpage\")}*/}\n      </button>;\n\n    const pagescontainer = <div class=\"spc-pagination__pages\" > </div>;\n\n    this.node = paginationbar;\n    this.node_pages = pagescontainer;\n\n    paginationbar.append(this.prevButton, pagescontainer, this.nextButton);\n\n    console.log({ paginationnode: paginationbar });\n\n    observer.observe(paginationbar);\n\n    // this.node.__paginationBarInstance = this;\n    paginationNodeInstances.set(paginationbar, this);\n\n    if (this.container) // For Preact+Typescript we want to instance the class before the \"componentDidMount\" - so our parent won't be rendered yet\n      this.container.appendChild(this.node); //paginationbar);\n\n\n\n    // States used to determine on refresh whether we need\n    // to regenerate the DOM.\n    this.require_dom_update = true;\n    this.state_amountofpagesbuttonsdrawn = 0;\n\n    if (!options.gotoPageCallback) {\n      console.error(\"missing options.gotoPageCallback\");\n      // return;\n    }\n\n    if (!options.controls) {\n      console.error(\"missing options.controls (ID of the container element which has the paginated content)\");\n      //return;\n    }\n\n\n    if (options.amount_of_pages === 0)\n      return; // no need to generate our pagination DOM yet\n\n\n    // this.refresh();\n  }\n\n  ensureDOM() {\n    // Ensure the pagination DOM exists\n    // if (this.node)\n    // return;\n\n\n  }\n\n\n\n\n  setOptions(options: Partial<paginationBarOptions>) {\n    if (options.amount_of_pages !== this.options.amount_of_pages) {\n      this.require_dom_update = true;\n      //console.info(\"!!! amount of pages has changed\");\n    }\n\n    this.options = { ...this.options, ...options };\n    console.log(\"paginationBar::setOptions()\", this.options);\n\n    this.refresh();\n  }\n\n  checkPaginationClick = (evt: MouseEvent) => {\n    assertHTMLElement(evt.target);\n\n    const prev = evt.target.closest(\".spc-pagination__previous\");\n    if (prev) {\n      if (this.options.currentPage > 0 && this.options.gotoPageCallback)\n        this.options.gotoPageCallback(this.options.currentPage - 1, this);\n\n      evt.preventDefault();\n      return;\n    }\n\n    const next = evt.target.closest(\".spc-pagination__next\");\n    if (next) {\n      if (this.options.gotoPageCallback) // FIXME\n        this.options.gotoPageCallback(this.options.currentPage + 1, this);\n\n      evt.preventDefault();\n      return;\n    }\n\n    const setpagebutton = evt.target.closest(\"[data-setpage]\") as HTMLElement;\n    if (setpagebutton) {\n      const pagenr = parseInt(setpagebutton.getAttribute(\"data-setpage\")!);\n\n      if (this.options.gotoPageCallback)\n        this.options.gotoPageCallback(pagenr, this);\n\n      evt.preventDefault();\n      return;\n    }\n  };\n\n  refresh() {\n    /*\n    if (this.node) {\n      this.container.setAttribute(\"data-currentpage\", this.options.currentPage.toString());\n      this.container.setAttribute(\"data-pagescount\", this.options.amount_of_pages.toString());\n    }\n    */\n\n    if (this.options.amount_of_pages === 0) {\n      if (this.node)\n        this.node.setAttribute(\"hidden\", \"\");\n\n      return;\n    }\n\n    // Store the current state\n    this.node.removeAttribute(\"hidden\");\n\n    const currentPage = this.options.currentPage;\n    const lastPage = this.options.amount_of_pages - 1;\n\n    this.node.querySelector(\".spc-pagination__previous\")?.toggleAttribute(\"disabled\", currentPage === 0);\n    this.node.querySelector(\".spc-pagination__next\")?.toggleAttribute(\"disabled\", currentPage >= lastPage);\n\n\n    const computed = getComputedStyle(this.node_pages);\n\n    const width = this.node_pages.clientWidth;\n    const spacing = parseInt(computed.getPropertyValue(\"--pagination-page-spacing\"));\n    const itemwidth = parseInt(computed.getPropertyValue(\"--pagination-page-size\"));\n\n    const maxbuttons = Math.floor((width + spacing) / (itemwidth + spacing));\n    const extend_left = Math.ceil((maxbuttons - 1) / 2); // subtract one because for the currentpage is in the middle, round up to favor previous pages\n\n    let page_start = Math.max(0, currentPage - extend_left);\n\n    let page_end = page_start + maxbuttons - 1;\n    if (page_end > lastPage) { // if we are nearing the end, don't center around the currentpage but fill up with page numbers at the end\n      page_end = lastPage;\n      page_start = Math.max(lastPage - maxbuttons + 1, 0);\n    }\n\n    /*\n    console.log(\n          { currentPage: currentPage\n          , totalcount:  totalcount\n          , resultsPerPage: resultsPerPage\n          });\n    */\n\n    // Determine whether we actually need to add/remove buttons ///////////////////////////////\n    const amount_of_buttons = page_end - page_start + 1;\n\n    if (!this.require_dom_update // amount of pages changed?\n      && amount_of_buttons === this.state_amountofpagesbuttonsdrawn) {\n      //console.info(\"Skip - no change in buttoncount\");\n      return;\n    }\n\n    //if (relayout)\n    //  console.info(\"Refreshing buttons\");\n\n    this.state_amountofpagesbuttonsdrawn = amount_of_buttons;\n\n    ////////////////////////////////////////////////////////////////////////////////////////////\n\n\n    // /*\n    // Code for debugging\n    // and rendering analysis\n\n    /*\n    let space_usage = maxbuttons * itemwidth + (maxbuttons - 1) * spacing;\n    let space_left = width - space_usage;\n    console.log({ pagesbar_width: width\n                , spacing:     spacing\n                , itemwidth:   itemwidth\n                , maxbuttons:  maxbuttons\n                , extend_left: extend_left\n                , page_start:  page_start\n                , page_end:    page_end\n                , lastPage:    lastPage\n                , space_usage:  space_usage\n                , space_left:   space_left\n                });\n    */\n\n    this.node_pages.innerHTML = \"\";\n\n    for (let page = page_start; page <= page_end; ++page) {\n      if (page === currentPage) {\n        this.node_pages.append(\n          <span class=\"spc-pagination__page current\"\n            aria-current=\"page\"\n            aria-label={getTid(\"ceremonymedia:webdesigns.site.js.pagination.page\", String(page + 1))}\n          > {page + 1} </span >);\n      } else if (page === page_start && page > 0)\n        this.node_pages.append(<span class=\"spc-pagination__ellipsis\" > </span>);\n      else if (page === page_end && page < lastPage - 1) // our last button isn't the last page\n        this.node_pages.append(<span class=\"spc-pagination__ellipsis\" > </span>);\n      else {\n        this.node_pages.append(\n          <button class=\"spc-pagination__page\"\n            aria-label={getTid(\"ceremonymedia:webdesigns.site.js.pagination.page\", String(page + 1))}\n            data-setpage={page}\n          > {page + 1} </button>);\n      }\n    }\n  }\n\n\n\n}\n","var DragDropTouch;\n(function (DragDropTouch_1) {\n    'use strict';\n    /**\n     * Object used to hold the data that is being dragged during drag and drop operations.\n     *\n     * It may hold one or more data items of different types. For more information about\n     * drag and drop operations and data transfer objects, see\n     * <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer\">HTML Drag and Drop API</a>.\n     *\n     * This object is created automatically by the @see:DragDropTouch singleton and is\n     * accessible through the @see:dataTransfer property of all drag events.\n     */\n    var DataTransfer = (function () {\n        function DataTransfer() {\n            this._dropEffect = 'move';\n            this._effectAllowed = 'all';\n            this._data = {};\n        }\n        Object.defineProperty(DataTransfer.prototype, 'dropEffect', {\n            /**\n             * Gets or sets the type of drag-and-drop operation currently selected.\n             * The value must be 'none',  'copy',  'link', or 'move'.\n             */\n            get: function () {\n                return this._dropEffect;\n            },\n            set: function (value) {\n                this._dropEffect = value;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(DataTransfer.prototype, 'effectAllowed', {\n            /**\n             * Gets or sets the types of operations that are possible.\n             * Must be one of 'none', 'copy', 'copyLink', 'copyMove', 'link',\n             * 'linkMove', 'move', 'all' or 'uninitialized'.\n             */\n            get: function () {\n                return this._effectAllowed;\n            },\n            set: function (value) {\n                this._effectAllowed = value;\n            },\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(DataTransfer.prototype, 'types', {\n            /**\n             * Gets an array of strings giving the formats that were set in the @see:dragstart event.\n             */\n            get: function () {\n                return Object.keys(this._data);\n            },\n            enumerable: true,\n            configurable: true\n        });\n        /**\n         * Removes the data associated with a given type.\n         *\n         * The type argument is optional. If the type is empty or not specified, the data\n         * associated with all types is removed. If data for the specified type does not exist,\n         * or the data transfer contains no data, this method will have no effect.\n         *\n         * @param type Type of data to remove.\n         */\n        DataTransfer.prototype.clearData = function (type) {\n            if (type != null) {\n                delete this._data[type];\n            }\n            else {\n                this._data = null;\n            }\n        };\n        /**\n         * Retrieves the data for a given type, or an empty string if data for that type does\n         * not exist or the data transfer contains no data.\n         *\n         * @param type Type of data to retrieve.\n         */\n        DataTransfer.prototype.getData = function (type) {\n            return this._data[type] || '';\n        };\n        /**\n         * Set the data for a given type.\n         *\n         * For a list of recommended drag types, please see\n         * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Recommended_Drag_Types.\n         *\n         * @param type Type of data to add.\n         * @param value Data to add.\n         */\n        DataTransfer.prototype.setData = function (type, value) {\n            this._data[type] = value;\n        };\n        /**\n         * Set the image to be used for dragging if a custom one is desired.\n         *\n         * @param img An image element to use as the drag feedback image.\n         * @param offsetX The horizontal offset within the image.\n         * @param offsetY The vertical offset within the image.\n         */\n        DataTransfer.prototype.setDragImage = function (img, offsetX, offsetY) {\n            var ddt = DragDropTouch._instance;\n            ddt._imgCustom = img;\n            ddt._imgOffset = { x: offsetX, y: offsetY };\n        };\n        return DataTransfer;\n    }());\n    DragDropTouch_1.DataTransfer = DataTransfer;\n    /**\n     * Defines a class that adds support for touch-based HTML5 drag/drop operations.\n     *\n     * The @see:DragDropTouch class listens to touch events and raises the\n     * appropriate HTML5 drag/drop events as if the events had been caused\n     * by mouse actions.\n     *\n     * The purpose of this class is to enable using existing, standard HTML5\n     * drag/drop code on mobile devices running IOS or Android.\n     *\n     * To use, include the DragDropTouch.js file on the page. The class will\n     * automatically start monitoring touch events and will raise the HTML5\n     * drag drop events (dragstart, dragenter, dragleave, drop, dragend) which\n     * should be handled by the application.\n     *\n     * For details and examples on HTML drag and drop, see\n     * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations.\n     */\n    var DragDropTouch = (function () {\n        /**\n         * Initializes the single instance of the @see:DragDropTouch class.\n         */\n        function DragDropTouch() {\n            this._lastClick = 0;\n            // enforce singleton pattern\n            if (DragDropTouch._instance) {\n                throw 'DragDropTouch instance already created.';\n            }\n            // detect passive event support\n            // https://github.com/Modernizr/Modernizr/issues/1894\n            var supportsPassive = false;\n            document.addEventListener('test', function () { }, {\n                get passive() {\n                    supportsPassive = true;\n                    return true;\n                }\n            });\n            // listen to touch events\n            if ('ontouchstart' in document) {\n                var d = document, ts = this._touchstart.bind(this), tm = this._touchmove.bind(this), te = this._touchend.bind(this), opt = supportsPassive ? { passive: false, capture: false } : false;\n                d.addEventListener('touchstart', ts, opt);\n                d.addEventListener('touchmove', tm, opt);\n                d.addEventListener('touchend', te);\n                d.addEventListener('touchcancel', te);\n            }\n        }\n        /**\n         * Gets a reference to the @see:DragDropTouch singleton.\n         */\n        DragDropTouch.getInstance = function () {\n            return DragDropTouch._instance;\n        };\n        // ** event handlers\n        DragDropTouch.prototype._touchstart = function (e) {\n            var _this = this;\n            if (this._shouldHandle(e)) {\n                // raise double-click and prevent zooming\n                if (Date.now() - this._lastClick < DragDropTouch._DBLCLICK) {\n                    if (this._dispatchEvent(e, 'dblclick', e.target)) {\n                        if (e.cancelable) {\n                            e.preventDefault();\n                        }\n                        this._reset();\n                        return;\n                    }\n                }\n                // clear all variables\n                this._reset();\n                // get nearest draggable element\n                var src = this._closestDraggable(e.target);\n                if (src) {\n                    // give caller a chance to handle the hover/move events\n                    if (!this._dispatchEvent(e, 'mousemove', e.target) &&\n                        !this._dispatchEvent(e, 'mousedown', e.target)) {\n                        // get ready to start dragging\n                        this._dragSource = src;\n                        this._ptDown = this._getPoint(e);\n                        this._lastTouch = e;\n                        if (e.cancelable) {\n                            e.preventDefault();\n                        }\n                        // show context menu if the user hasn't started dragging after a while\n                        setTimeout(function () {\n                            if (_this._dragSource == src && _this._img == null) {\n                                if (_this._dispatchEvent(e, 'contextmenu', src)) {\n                                    _this._reset();\n                                }\n                            }\n                        }, DragDropTouch._CTXMENU);\n                        if (DragDropTouch._ISPRESSHOLDMODE) {\n                            this._pressHoldInterval = setTimeout(function () {\n                                _this._isDragEnabled = true;\n                                _this._touchmove(e);\n                            }, DragDropTouch._PRESSHOLDAWAIT);\n                        }\n                    }\n                }\n            }\n        };\n        DragDropTouch.prototype._touchmove = function (e) {\n            if (this._shouldCancelPressHoldMove(e)) {\n              this._reset();\n              return;\n            }\n\n            // FIXME: (Webhare) er gewoon ingegooid (door Mark)\n            // maar geen idee of het volgens specs is\n            // console.log(\"dispatching !! drag !!\");\n            if (this._dispatchEvent(e, 'drag', this._dragSource)) {\n                this._lastTouch = e;\n                if (e.cancelable) {\n                    e.preventDefault();\n                }\n            }            \n\n            if (this._shouldHandleMove(e) || this._shouldHandlePressHoldMove(e)) {\n                // see if target wants to handle move\n                var target = this._getTarget(e);\n                if (this._dispatchEvent(e, 'mousemove', target)) {\n                    this._lastTouch = e;\n                    if (e.cancelable) {\n                        e.preventDefault();\n                    }\n                return;\n                }\n                // start dragging\n                if (this._dragSource && !this._img && this._shouldStartDragging(e)) {\n                    this._dispatchEvent(e, 'dragstart', this._dragSource);\n                    this._createImage(e);\n                    this._dispatchEvent(e, 'dragenter', target);\n                }\n\n                // continue dragging\n                if (this._img) {\n                    this._lastTouch = e;\n                    if (e.cancelable) {\n                        e.preventDefault(); // prevent scrolling\n                    }\n\n// drag event here?\n\n                    if (target != this._lastTarget) {\n                        this._dispatchEvent(this._lastTouch, 'dragleave', this._lastTarget);\n                        this._dispatchEvent(e, 'dragenter', target);\n                        this._lastTarget = target;\n                    }\n                    this._moveImage(e);\n                    this._isDropZone = this._dispatchEvent(e, 'dragover', target);\n                }\n            }\n        };\n        DragDropTouch.prototype._touchend = function (e) {\n            if (this._shouldHandle(e)) {\n                // see if target wants to handle up\n                if (this._dispatchEvent(this._lastTouch, 'mouseup', e.target)) {\n                    if (e.cancelable) {\n                        e.preventDefault();\n                    }\n                    return;\n                }\n                // user clicked the element but didn't drag, so clear the source and simulate a click\n                if (!this._img) {\n                    this._dragSource = null;\n                    this._dispatchEvent(this._lastTouch, 'click', e.target);\n                    this._lastClick = Date.now();\n                }\n                // finish dragging\n                this._destroyImage();\n                if (this._dragSource) {\n                    if (e.type.indexOf('cancel') < 0 && this._isDropZone) {\n                        this._dispatchEvent(this._lastTouch, 'drop', this._lastTarget);\n                    }\n                    this._dispatchEvent(this._lastTouch, 'dragend', this._dragSource);\n                    this._reset();\n                }\n            }\n        };\n        // ** utilities\n        // ignore events that have been handled or that involve more than one touch\n        DragDropTouch.prototype._shouldHandle = function (e) {\n            return e &&\n                !e.defaultPrevented &&\n                e.touches && e.touches.length < 2;\n        };\n\n        // use regular condition outside of press & hold mode\n        DragDropTouch.prototype._shouldHandleMove = function (e) {\n          return !DragDropTouch._ISPRESSHOLDMODE && this._shouldHandle(e);\n        };\n\n        // allow to handle moves that involve many touches for press & hold\n        DragDropTouch.prototype._shouldHandlePressHoldMove = function (e) {\n          return DragDropTouch._ISPRESSHOLDMODE &&\n              this._isDragEnabled && e && e.touches && e.touches.length;\n        };\n\n        // reset data if user drags without pressing & holding\n        DragDropTouch.prototype._shouldCancelPressHoldMove = function (e) {\n          return DragDropTouch._ISPRESSHOLDMODE && !this._isDragEnabled &&\n              this._getDelta(e) > DragDropTouch._PRESSHOLDMARGIN;\n        };\n\n        // start dragging when specified delta is detected\n        DragDropTouch.prototype._shouldStartDragging = function (e) {\n            var delta = this._getDelta(e);\n            return delta > DragDropTouch._THRESHOLD ||\n                (DragDropTouch._ISPRESSHOLDMODE && delta >= DragDropTouch._PRESSHOLDTHRESHOLD);\n        }\n\n        // clear all members\n        DragDropTouch.prototype._reset = function () {\n            this._destroyImage();\n            this._dragSource = null;\n            this._lastTouch = null;\n            this._lastTarget = null;\n            this._ptDown = null;\n            this._isDragEnabled = false;\n            this._isDropZone = false;\n            this._dataTransfer = new DataTransfer();\n            clearInterval(this._pressHoldInterval);\n        };\n        // get point for a touch event\n        DragDropTouch.prototype._getPoint = function (e, page) {\n            if (e && e.touches) {\n                e = e.touches[0];\n            }\n            return { x: page ? e.pageX : e.clientX, y: page ? e.pageY : e.clientY };\n        };\n        // get distance between the current touch event and the first one\n        DragDropTouch.prototype._getDelta = function (e) {\n            if (DragDropTouch._ISPRESSHOLDMODE && !this._ptDown) { return 0; }\n            var p = this._getPoint(e);\n            return Math.abs(p.x - this._ptDown.x) + Math.abs(p.y - this._ptDown.y);\n        };\n        // get the element at a given touch event\n        DragDropTouch.prototype._getTarget = function (e) {\n            var pt = this._getPoint(e), el = document.elementFromPoint(pt.x, pt.y);\n            while (el && getComputedStyle(el).pointerEvents == 'none') {\n                el = el.parentElement;\n            }\n            return el;\n        };\n        // create drag image from source element\n        DragDropTouch.prototype._createImage = function (e) {\n            // just in case...\n            if (this._img) {\n                this._destroyImage();\n            }\n            // create drag image from custom element or drag source\n            var src = this._imgCustom || this._dragSource;\n            this._img = src.cloneNode(true);\n            this._copyStyle(src, this._img);\n            this._img.style.top = this._img.style.left = '-9999px';\n            // if creating from drag source, apply offset and opacity\n            if (!this._imgCustom) {\n                var rc = src.getBoundingClientRect(), pt = this._getPoint(e);\n                this._imgOffset = { x: pt.x - rc.left, y: pt.y - rc.top };\n                this._img.style.opacity = DragDropTouch._OPACITY.toString();\n            }\n            // add image to document\n            this._moveImage(e);\n            document.body.appendChild(this._img);\n        };\n        // dispose of drag image element\n        DragDropTouch.prototype._destroyImage = function () {\n            if (this._img && this._img.parentElement) {\n                this._img.parentElement.removeChild(this._img);\n            }\n            this._img = null;\n            this._imgCustom = null;\n        };\n        // move the drag image element\n        DragDropTouch.prototype._moveImage = function (e) {\n            var _this = this;\n            requestAnimationFrame(function () {\n                if (_this._img) {\n                    var pt = _this._getPoint(e, true), s = _this._img.style;\n                    s.position = 'absolute';\n                    s.pointerEvents = 'none';\n                    s.zIndex = '999999';\n                    s.left = Math.round(pt.x - _this._imgOffset.x) + 'px';\n                    s.top = Math.round(pt.y - _this._imgOffset.y) + 'px';\n                }\n            });\n        };\n        // copy properties from an object to another\n        DragDropTouch.prototype._copyProps = function (dst, src, props) {\n            for (var i = 0; i < props.length; i++) {\n                var p = props[i];\n                dst[p] = src[p];\n            }\n        };\n        DragDropTouch.prototype._copyStyle = function (src, dst) {\n            // remove potentially troublesome attributes\n            DragDropTouch._rmvAtts.forEach(function (att) {\n                dst.removeAttribute(att);\n            });\n            // copy canvas content\n            if (src instanceof HTMLCanvasElement) {\n                var cSrc = src, cDst = dst;\n                cDst.width = cSrc.width;\n                cDst.height = cSrc.height;\n                cDst.getContext('2d').drawImage(cSrc, 0, 0);\n            }\n            // copy style (without transitions)\n            var cs = getComputedStyle(src);\n            for (var i = 0; i < cs.length; i++) {\n                var key = cs[i];\n                if (key.indexOf('transition') < 0) {\n                    dst.style[key] = cs[key];\n                }\n            }\n            dst.style.pointerEvents = 'none';\n            // and repeat for all children\n            for (var i = 0; i < src.children.length; i++) {\n                this._copyStyle(src.children[i], dst.children[i]);\n            }\n        };\n        DragDropTouch.prototype._dispatchEvent = function (e, type, target) {\n            if (e && target) {\n                var evt = document.createEvent('Event'), t = e.touches ? e.touches[0] : e;\n                evt.initEvent(type, true, true);\n                evt.button = 0;\n                evt.which = evt.buttons = 1;\n                this._copyProps(evt, e, DragDropTouch._kbdProps);\n                this._copyProps(evt, t, DragDropTouch._ptProps);\n                evt.dataTransfer = this._dataTransfer;\n                target.dispatchEvent(evt);\n                return evt.defaultPrevented;\n            }\n            return false;\n        };\n        // gets an element's closest draggable ancestor\n        DragDropTouch.prototype._closestDraggable = function (e) {\n            for (; e; e = e.parentElement) {\n                if (e.hasAttribute('draggable') && e.draggable) {\n                    return e;\n                }\n            }\n            return null;\n        };\n        return DragDropTouch;\n    }());\n    /*private*/ DragDropTouch._instance = new DragDropTouch(); // singleton\n    // constants\n    DragDropTouch._THRESHOLD = 5; // pixels to move before drag starts\n    DragDropTouch._OPACITY = 0.5; // drag image opacity\n    DragDropTouch._DBLCLICK = 500; // max ms between clicks in a double click\n    DragDropTouch._CTXMENU = 900; // ms to hold before raising 'contextmenu' event\n    DragDropTouch._ISPRESSHOLDMODE = false; // decides of press & hold mode presence\n    DragDropTouch._PRESSHOLDAWAIT = 400; // ms to wait before press & hold is detected\n    DragDropTouch._PRESSHOLDMARGIN = 25; // pixels that finger might shiver while pressing\n    DragDropTouch._PRESSHOLDTHRESHOLD = 0; // pixels to move before drag starts\n    // copy styles/attributes from drag source to drag image element\n    DragDropTouch._rmvAtts = 'id,class,style,draggable'.split(',');\n    // synthesize and dispatch an event\n    // returns true if the event has been handled (e.preventDefault == true)\n    DragDropTouch._kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(',');\n    DragDropTouch._ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY'.split(',');\n    DragDropTouch_1.DragDropTouch = DragDropTouch;\n})(DragDropTouch || (DragDropTouch = {}));\n","/* eslint-disable no-alert */\n/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment, createRef, type VNode } from \"preact\";\nimport { useRef } from \"preact/hooks\";\nimport { backend } from \"./editor\";\nimport { assertHTMLElement } from \"./support\";\nimport type { CeremonyMoment } from \"./state\";\n\nimport \"./moments.css\"; // import before the tiles for CSS ordering\nimport { CeremonyMediaMomentCard } from \"./moment-tile\";\nimport { AddMomentCard } from \"./addmoment\"; // after normal tile so the special addmoment tile can override\n\nimport * as pagination from \"../../frontend/components/pagination/index\";\nimport { TimeIndicator } from \"../../frontend/components/timeindicator\";\n\nimport { getTid } from \"@mod-tollium/js/gettid\";\n\n// import { getCeremonyLocation } from \"../../frontend/settings/ceremony-location\";\n\n// import \"./styling/timeline.scss\";\nimport \"../../frontend/components/timeline/timeline.scss\";\n\n\n// https://github.com/drag-drop-touch-js/dragdroptouch\n//import { enableDragDropTouch } from \"drag-drop-touch\"; //\"./drag-drop-touch.esm.min.js\";\n// Set up the default full page polyfill:\n// enableDragDropTouch();\nimport \"./drag-drop-touch.js\";\n\n\n\nconst zoomout_footer_whitespace = 20; // amount of whitespace to keep to the footer when zooming out\n\n/*\nNOTE:\nAbout the preview slideshow playback:\nThe parent doesn't really own the slideshow's playback state—it just wants to tell the slideshow \"start now\" when the user navigates to it.\n*/\n\n\ninterface MomentsProps {\n  moments: CeremonyMoment[];\n  allowAddingPresentations: boolean;\n  canedit: boolean;\n  previewMode?: boolean;\n  //footerContent?: ComponentChildren;\n  footerContent: VNode | null;\n}\n\n\nexport class Moments extends Component<MomentsProps, {\n  previewItemIdx: number;\n  hideInfoTile: boolean;\n}> {\n  __cards: { current: CeremonyMediaMomentCard | undefined }[] = [];\n\n  __itemsgrid = createRef(); // The grid container\n\n  __dragtargetindicatornode?: HTMLElement; // overlay element to show where the item will end up\n  __dragelement?: HTMLElement | null;\n  __draghoverelement?: HTMLElement | null; // current element which our drag action hovers over\n  __drag_zoomout_activated: boolean;\n\n  __navigationBar = createRef();\n  __paginationui: pagination.paginationBar;\n\n  __focusedTileIdx = -1; // focused tile or -1 if no tile is focused\n  __focusedTileId = 0; // wrdId of the moment tile\n\n  hideInfoTile = false;\n\n  /// when the visitor has both the \"Ceremony editor\" and \"Condoleance page\" open\n  /// and uses the \"add post to ceremony\" the \"Condoleance page\" broadcasts a message\n  /// to indicate it did an update. (so at least the person doing it can directly see the effect without reloading the page)\n  broadcastChannel: BroadcastChannel;\n\n  constructor() {\n    super();\n\n    this.state = {\n      previewItemIdx: 0,\n      hideInfoTile: false\n    };\n\n    const paginationdata =\n    {\n      amount_of_pages: 0,\n      currentPage: 0, //this.__focusedTileIdx,\n      gotoPageCallback: this.jumpToMoment.bind(this)\n    };\n    this.__paginationui = new pagination.paginationBar(/*dont insert yet*/null, paginationdata);\n\n    this.__drag_zoomout_activated = false;\n\n    this.broadcastChannel = new BroadcastChannel(\"ceremonymedia\");\n    this.broadcastChannel.addEventListener(\"message\", (evt) => this.onMessage(evt));\n  }\n\n  // The Condoleance page can send a \"moment-added\" message\n  // when the \"Add as moment\" button is used on a post.\n  // This way we can ensure wheb someone has both the Ceremony editor\n  // and condoleance page open they can directly see the result.\n  onMessage(evt: MessageEvent) {\n    if (!evt.isTrusted)\n      return;\n\n    if (evt.data.type === \"moment-added\") {\n      void backend.updateCeremony();\n    }\n  }\n\n  async doDuplicateItem(itemId: number) {\n    // NOTE: we need to use result because it'll contain the new moment and slides wrdId's\n    const newitem = await backend.duplicateMoment(itemId);\n\n    // Add the new item directly after the item we duplicated\n    // (this is also what will have been done serverside)\n    const original_idx = this.props.moments.findIndex((moment) => moment.id === itemId);\n    this.props.moments.splice(original_idx + 1, 0, newitem);\n\n    this.setState({}); // refresh so we gerenerate and this new item will appear\n  }\n\n\n  componentDidMount(): void {\n    console.warn(\"<Moments> MOUNTED (new instance)\");\n\n    // Keep track of focus so we can update the pagination to where the user is (supporting both mouse and keyboard interaction)\n    this.base?.addEventListener(\"focusin\", (evt: Event) => this.onFocusInEvent(evt));\n    // this.base?.addEventListener(\"focusout\", (evt: Event) => this.onFocusOutEvent(evt));\n\n    // this.__navigationBar.current.appendChild(this.__paginationui.node);\n    // this.__navigationBar.current.insertBefore(this.__paginationui.node, this.__navigationBar.current.firstNode);\n    //    this.__navigationBar.current.append(this.__paginationui.node);\n\n    // const paginationContainer = this.__navigationBar.current.querySelector(\".cm-ceremonyfooter__content__pagination\");\n    const paginationContainer = document.body.querySelector(\".cm-ceremonyfooter__content__pagination\");\n    console.warn(\"Pagination container\", paginationContainer);\n    paginationContainer?.append(this.__paginationui.node);\n\n    this.refreshPagination();\n  }\n\n\n  shouldComponentUpdate(props: MomentsProps, state: { previewItemIdx: number }) {\n\n    console.warn(\"<shouldComponentUpdate> moments\", this.props.previewMode, props.previewMode);\n\n    if (this.props.previewMode !== props.previewMode) {\n      console.info(\"Preview mode SWITCHES to\", props.previewMode);\n\n      // When we change views (between edit and preview) pause all audio and video.\n      if (props.previewMode) {\n        // If there currently is a tile focused, we start the previous on that item\n        if (this.__focusedTileIdx > -1)\n          this.setState({ previewItemIdx: this.__focusedTileIdx });\n      }\n    }\n\n    return true;\n  }\n\n\n  componentDidUpdate(previousProps: Readonly<MomentsProps>): void {\n\n    console.info(\"<Moments> componentDidUpdate\");\n\n    if (this.props.previewMode === previousProps.previewMode) {\n      this.restoreTileFocus();\n      this.refreshPagination();\n      return;\n    }\n\n    this.pauseAllMediaPlayback();\n\n    this.restoreTileFocus();\n    this.refreshPagination();\n\n    // take the further initialization which is async out of the current event flow\n    setTimeout(() => void this.initializePlayback(), 1);\n  }\n\n  async initializePlayback() {\n    // Ensure audio is preloaded\n    if (this.props.previewMode) {\n      for (const moment of this.__cards) {\n        moment.current?.forceUpdate(); // the card doesn't keep a preview state it uses the moments grid preview state - so it doesn't know it has to rerender, therefore we need to force it to update/render\n        await moment.current?.preload();\n      }\n    }\n\n    if (this.props.previewMode)\n      this.__cards[this.state.previewItemIdx].current?.startPlayback();\n  }\n\n\n  onFocusInEvent(evt: Event) {\n    // evt.target - node receiving focus\n    // evt.relatedTarget - node losing focus\n\n    if (!evt.target)\n      return;\n\n    // console.log(evt.type, evt.target, evt.relatedTarget);\n    const targetelement = evt.target as HTMLElement;\n\n    if (targetelement.closest(\".spc-pagination\"))\n      return; // ignore focus moving to pagination - may have clicked on a page and the focus will move soon\n\n    this.setActiveMomentByNode(targetelement);\n  }\n\n  setActiveMomentByNode(momentTileNode: HTMLElement) {\n    const tileIdx = this.getTileIdxByNode(momentTileNode);\n    if (tileIdx !== this.__focusedTileIdx) {\n      this.__focusedTileIdx = tileIdx;\n\n      const focusedtile = momentTileNode.closest(\".cm-mediaslide\");\n      if (focusedtile)\n        this.__focusedTileId = parseInt(focusedtile.getAttribute(\"data-momentid\")!);\n\n      console.info(\"Setting active tile #\" + this.__focusedTileId, momentTileNode);\n\n      this.refreshPagination();\n    }\n  }\n\n\n  onFocusOutEvent(evt: Event) {\n    /*\n  NOTE: !! we can also lose focus due to Preact rerendering all tiles...\n\n    console.log(evt.target, evt.relatedTarget);\n\n    const relatedTarget = evt.relatedTarget as HTMLElement;\n\n    if (relatedTarget === null || !relatedTarget.closest(\".cm-mediaslide\")) {\n      // No slide will be focussed (anymore)\n      console.info(\"No tile focussed\");\n      this.__focusedTileIdx = -1;\n      this.__focusedTileId = 0;\n    }\n      */\n  }\n\n\n  restoreTileFocus() {\n    // Ensure the correct tile gets the focus.\n    // Especially when we rearrange (due to drag) the tiles we want to make sure the correct tile keeps the focus.\n    if (this.__focusedTileId > 0) {\n      const selector = `.cm-mediaslide:not(.cm-mediaslide--additem)[data-momentid=\"${this.__focusedTileId}\"]`;\n      const tileNeedingFocus = (this.base as HTMLElement).querySelector(selector) as HTMLElement;\n      if (!tileNeedingFocus)\n        return; // the tile was removed, so no need to restore focus\n\n      // console.info(\"Found tile:\", tileNeedingFocus);\n      tileNeedingFocus.focus();\n    }\n  }\n\n\n  getTileIdxByNode(node: HTMLElement): number {\n    // Determine if a tile has focus and what's it's index\n    let focusedtileidx = -1;\n\n    if (node) {\n      const focusedtile = node.closest(\".cm-mediaslide\");\n      if (focusedtile) {\n        const tiles = (this.base as HTMLElement).querySelectorAll(\".cm-mediaslide:not(.cm-mediaslide--additem)\");\n        focusedtileidx = Array.from(tiles).indexOf(focusedtile);\n      }\n    }\n\n    return focusedtileidx;\n  }\n\n  refreshPagination() {\n    if (!this.base) {\n      console.error(\"Don't call refreshPagination() before componentDidMount (which is after the first render call)\");\n      return;\n    }\n\n    this.__focusedTileIdx = this.getTileIdxByNode((document.activeElement as HTMLElement));\n\n    const paginationdata =\n    {\n      amount_of_pages: this.props.moments.length, //+ 1,\n      currentPage: this.__focusedTileIdx\n      // gotoPageCallback: this.jumpToMoment.bind(this)\n    };\n\n    // console.info(\"PAGINATION\", this.__paginationui);\n    if (this.__paginationui)\n      this.__paginationui.setOptions(paginationdata);\n  }\n\n\n  pauseAllMediaPlayback() {\n    if (!this.base)\n      return;\n\n    /*\n    const mediaElements = (this.base as HTMLElement).querySelectorAll(\"audio,video\");\n    // console.info(\"media elements to pause:\", mediaElements);\n\n    for (const mediaElement of mediaElements)\n      (mediaElement as HTMLMediaElement).pause();\n    */\n\n    console.info(\"pauseAllMediaPlayback\");\n\n    for (const moment of this.__cards)\n      moment.current?.stopPlayback();\n  }\n\n\n\n  jumpToMoment(idx: number) {\n    if (!this.base) // before componentDidMount?\n      return;\n\n    // console.info(\"CARDS\", this.__cards);\n\n    const tiles = (this.base as HTMLElement).querySelectorAll(\".cm-mediaslide:not(.cm-mediaslide--additem)\");\n\n    // FIXME: trigger animation as soon as the tile is in view so we don't miss the animation!!\n    const tilenode = (tiles[idx] as HTMLElement);\n    tilenode.focus({ preventScroll: true }); // we want to scroll ourselves (browser doesn't take sticky header and footer into account)\n\n    console.log(\"jumpToMoment\", idx, tilenode);\n\n\n    if (this.props.previewMode) {\n      this.pauseAllMediaPlayback();\n      tilenode.scrollIntoView({ behavior: \"smooth\" });\n\n      // tilenode.focus();\n      // this.setActiveMomentByNode(tilenode);\n\n      const tileIdx = this.getTileIdxByNode(tilenode);\n      if (tileIdx !== this.state.previewItemIdx) {\n        this.setState({ previewItemIdx: tileIdx });\n        this.__cards[idx].current?.startPlayback();\n      }\n      return;\n    }\n\n\n    tilenode.classList.add(\"jumptarget\");\n\n    const margintop = (document.querySelector(\".header__top\") as HTMLElement)?.offsetHeight;\n    // const marginbottom = document.querySelector(\".cm-ceremonyfooter\").offsetHeight;\n    const margin_to_header = 30;\n\n    // Determine y-position of tile relative to the start of the page\n    const tile_y = tiles[idx].getBoundingClientRect().top - document.scrollingElement!.getBoundingClientRect().top;\n\n    const scrollTop = tile_y - margintop - margin_to_header;\n\n    document.documentElement.scrollTo({ top: scrollTop, behavior: \"smooth\" });\n  }\n\n  onAnimationEnd(evt: AnimationEvent) {\n    assertHTMLElement(evt.target);\n\n    const animatedtile = evt.target.closest(\".cm-mediaslide\");\n    if (!animatedtile)\n      return;\n\n    animatedtile.classList.remove(\"jumptarget\");\n  }\n\n\n  ////////////////////////////////////////////////////////////////////////\n  //\n  //  Drag & Drop\n  //\n\n  doHandleKeyDown(evt: KeyboardEvent) {\n    if (!this.props.previewMode)\n      return;\n\n    // console.log(evt.key);\n\n    if (evt.key === \"ArrowLeft\") {\n      evt.preventDefault();\n      this.gotoPreviousItem();\n    } else if (evt.key === \"ArrowRight\") {\n      evt.preventDefault();\n      this.gotoNextItem();\n    }\n  }\n\n  doHandleMouseDown(evt: MouseEvent | TouchEvent) {\n    if (this.props.previewMode)\n      return; // no dragging allowed in previewmode\n\n    assertHTMLElement(evt.target);\n    // console.info(evt.type);\n    // return;\n    const tile = evt.target.closest(\".cm-mediaslide\");\n    if (!tile)\n      return;\n\n    const img = evt.target.closest(\"img\");\n    if (img) {\n      img.setAttribute(\"draggable\", \"false\"); // Prevent Chrome, Firefox and Safari from dragging the image\n      // evt.preventDefault(); // prevent Chrome and Firefox from dragging the image (instead of the full card)\n      return;\n    }\n\n    const focusable_parent = evt.target.closest(\"input\");\n    if (focusable_parent) {\n      return;\n    }\n\n    const dragtrigger = evt.target.closest(\".cm-mediaslide__header__dragtriggerarea, .cm-mediaslide__dragbutton, .cm-mediaslide__previewarea\");\n    if (!dragtrigger)\n      return;\n\n    tile?.setAttribute(\"draggable\", \"true\");\n  }\n\n  doHandleDragStart(evt: DragEvent) {\n    assertHTMLElement(evt.target);\n\n    console.log(evt.type, \"Dragging node\", evt.target);\n    console.log(\"Event\", evt);\n\n    this.__dragelement = evt.target;\n    if (!evt.dataTransfer)\n      return;\n\n    // Hide the currently hidden side\n    // let backshown = evt.target.classNames.contains(\"cm-mediaslide-shownote\");\n\n    // console.log(\"dragelement\", evt.target);\n    this.__itemsgrid.current.classList.add(\"dragging\");\n\n    if ((document.scrollingElement as HTMLElement).offsetWidth < 768) {\n      // Delay transition/animation to prevent layout/position changes (due to mobile 2 column)\n      // causing dragging not triggering because the item isn't under the pointer anymore.\n      setTimeout(() => { this.__itemsgrid.current.classList.add(\"dragging2\"); }, 1);\n\n      this.triggerZoomOut();\n    }\n\n    evt.target.classList.add(\"cm-mediaslide--dragging\");\n\n    /*\n    DRAG ghost bugs:\n    - Chrome en Safari will show the backface -> us --dragging to temporarily hide the __back to prevent this\n    - Safari will clip content outside the container (as if the container had overflow: hidden);\n    - With a custom dragimage:\n        // Safari BUG: it'll use a screenshot of the area before scaling\n        // Chrome won't show images in our own provided drag image\n\n    let container = document.createElement(\"div\");\n    let dragclone = evt.target.querySelector(\".cm-mediaslide__front\").cloneNode(true);\n    dragclone.classList.add(\"cm-mediaslide__dragghost\");\n    dragclone.style.position = \"absolute\";\n    dragclone.style.width = evt.target.offsetWidth + \"px\";\n    dragclone.style.zIndex = \"1000\";\n\n    dragclone.style.transform = \"scale(0.6)\";\n    dragclone.style.transformOrigin = \"top left\";\n    container.appendChild(dragclone);\n    document.body.appendChild(container);\n\n    evt.dataTransfer.setDragImage(dragclone, 0, 0);\n    // setTimeout(function () { dragclone.remove(); }, 1);\n    //    setTimeout(function () { document.querySelector(\".cm-mediaslide__dragghost\")?.remove() }, 1);\n    */\n\n    //evt.dataTransfer.setData(\"application/json\", JSON.stringify({ dummy: \"Test\" }));\n\n    evt.dataTransfer.effectAllowed = \"move\";\n\n    // evt.dataTransfer.setData('text/plain', 'hello'); // test, might be required for dragging to work on iOS 15+ (iPad)\n    // evt.dataTransfer.dropEffect = 'copy'; // test\n  }\n\n  doHandleDrag(evt: DragEvent) {\n    assertHTMLElement(evt.target);\n\n    /*\n    evt.pageY - position in full page height (offsetHeight)\n    evt.clientY - position in viewport\n    evt.screenY - position on screen of user ?????\n    evt.target  - the element (tile) we are dragging (also stored in this.__dragelement)\n    */\n\n    //console.log(evt.clientY, evt.pageY, evt.screenY);\n\n    if (document.scrollingElement === null)\n      return; // never happens, but makes TypeScript happy\n\n    const viewport_height = document.scrollingElement.clientHeight;\n\n    const momentsgrid = this.__itemsgrid.current;\n    const momentsgrid_rect = momentsgrid.getBoundingClientRect();\n\n    // const momentsgrid_top = momentsgrid_rect.top - document.scrollingElement?.getBoundingClientRect().top;\n    // const sticky_header_height = (document.querySelector(\".header__top\") as HTMLElement).offsetHeight;\n    const footer_height = (document.querySelector(\".cm-ceremonyfooter\") as HTMLElement).offsetHeight ?? 0;\n\n\n\n    let zoom_trigger_height = viewport_height * 0.17; // 17%;\n    // console.info(\"zoom_trigger_height\", zoom_trigger_height);\n    if (zoom_trigger_height < 100)\n      zoom_trigger_height = 100;\n\n    if (zoom_trigger_height > 250)\n      zoom_trigger_height = 250; // cap at max of 200px\n\n\n    // NOTE: Keep the scroll trigger height smaller than the zoom trigger height!\n    let scroll_trigger_height = viewport_height * 0.13; // 13%;\n    // console.info(\"zoom_trigger_height\", zoom_trigger_height);\n    if (scroll_trigger_height < 75)\n      scroll_trigger_height = 75;\n\n    if (scroll_trigger_height > 200)\n      scroll_trigger_height = 200; // cap at max of 200px\n\n\n\n    if (this.__drag_zoomout_activated) { // already zoomed-out so no need to check whether we need to zoom out\n      const scrollY = document.scrollingElement.scrollTop;\n\n      // Check whether the bottom of the grid is (still) out of view (even though we zoomed out)\n      const momentgridbottom_viewportY = momentsgrid_rect.bottom;// - document.scrollingElement.scrollTop;\n      // console.log(momentgridbottom_viewportY, viewport_height - footer_height);\n      // console.log(momentsgrid_rect.top, sticky_header_height);\n\n\n      // if (evt.clientY < trigger_height && momentsgrid_rect.top > sticky_header_height) {\n      if (evt.clientY < scroll_trigger_height && scrollY > 0) {\n        console.info(\"scroll up\");\n        document.scrollingElement.scrollTo({ top: scrollY - 30 });\n      }\n\n      //console.log(\"MGB bottom\", momentgridbottom_viewportY, \"vpheight\", viewport_height);\n      if ((viewport_height - evt.clientY < scroll_trigger_height)\n        && momentgridbottom_viewportY > viewport_height - footer_height) { // bottom of grid outside view (or obscured by the sticky footer?)\n        console.info(\"scroll down\");\n        document.scrollingElement.scrollTo({ top: scrollY + 30 });\n      }\n\n      return;\n    }\n\n    /*\n        const sticky_header_height = (document.querySelector(\".header__top\") as HTMLElement).offsetHeight;\n        const grid_focusy = momentsgrid_rect.top + document.scrollingElement.scrollTop * 2 + sticky_header_height + sticky_header_height / 2;\n\n        let pointernode = document.getElementById(\"testline\");\n\n        if (!pointernode) {\n          pointernode = document.createElement(\"div\");\n          pointernode.setAttribute(\"id\", \"testline\");\n          momentsgrid.appendChild(pointernode);\n        }\n\n        pointernode.style.position = \"absolute\";\n        pointernode.style.left = \"0\";\n        pointernode.style.right = \"0\";\n        pointernode.style.top = grid_focusy + \"px\";\n        pointernode.style.borderTop = \"1px solid #000000\";\n    */\n\n    let trigger_zoomout = false;\n\n    if (evt.clientY < zoom_trigger_height)\n      trigger_zoomout = true;\n\n    if (viewport_height - evt.clientY < zoom_trigger_height) // mouse pointer in the last 50px at the bottom of the viewport?\n      trigger_zoomout = true;\n\n    // FIXME: it would be better to calculate the transformOrigin to get the grid to scale around the current scroll position of the page.\n    // FIXME: after moving the item we may want to scroll the page to have the moved item into view again (because due to the zoom-out the new position may be out of view when returning to the normal zoom factor)\n    if (trigger_zoomout)\n      this.triggerZoomOut();\n  }\n\n  doHandleDragOver(evt: DragEvent) {\n    assertHTMLElement(evt.target);\n\n    const slide = evt.target.closest<HTMLElement>(\".cm-mediaslide\");\n    if (!slide || slide.classList.contains(\"cm-mediaslide--additem\"))\n      return;\n\n    evt.preventDefault(); // indicate drop is allowed here\n\n    // If we already showing this tile to be the drop target,\n    // we don't need to do anymore more.\n    if (slide === this.__draghoverelement)\n      return;\n\n    // Remove the \"droptarget\" state/styling from the previous tile we hovered over\n    if (this.__draghoverelement)\n      this.__draghoverelement.classList.remove(\"cm-mediaslide--droptarget\");\n\n    // Mark the tile we hover over as droptarget. (unless whe're hovering over the tile we are dragging)\n    if (slide !== this.__dragelement) {\n      this.__draghoverelement = slide;\n      this.__draghoverelement.classList.add(\"cm-mediaslide--droptarget\");\n\n      this.showDropTargetIndicator();\n    } else {\n      this.__draghoverelement = null;\n      this.removeDropTargetIndicator();\n    }\n  }\n\n  removeDropTargetIndicator() {\n    this.__dragtargetindicatornode?.remove();\n  }\n\n  showDropTargetIndicator() {\n\n    if (!this.__draghoverelement)\n      return; // should not happen, but check to make TypeScript happy\n\n    // Create an indicator node on demand\n    if (!this.__dragtargetindicatornode) {\n      this.__dragtargetindicatornode = document.createElement(\"div\");\n      this.__dragtargetindicatornode.className = \"cm-moments__items__droptargetindicator\";\n\n      const back = document.createElement(\"div\");\n      back.className = \"overlay__bg\";\n\n      const front = document.createElement(\"div\");\n      front.className = \"overlay__front\";\n\n      this.__dragtargetindicatornode.append(back, front);\n    }\n\n    // (re)insert in DOM\n    if (!this.__dragtargetindicatornode.parentNode)\n      this.__itemsgrid.current.appendChild(this.__dragtargetindicatornode);\n\n    /*\n    // Deteremine position of the target tile/grid-position relative to .cm-moments__items\n    const gridrect = this.__itemsgrid.current.getBoundingClientRect();\n    const droptargetrect = this.__draghoverelement.getBoundingClientRect(); // use the current element in that grid cell to calculate the position and size of the cell\n    // console.log(\"Grid\", gridrect);\n    // console.log(\"Droptarget\", droptargetrect);\n\n    const posx = droptargetrect.left - gridrect.left;\n    const posy = droptargetrect.top - gridrect.top;\n\n    this.__dragtargetindicatornode.style.position = \"absolute\";\n    this.__dragtargetindicatornode.style.left = posx + \"px\";\n    this.__dragtargetindicatornode.style.top = posy + \"px\";\n    this.__dragtargetindicatornode.style.width = droptargetrect.width + \"px\";\n    this.__dragtargetindicatornode.style.height = droptargetrect.height + \"px\";\n    */\n\n    // NOTE: We cannot use getBoundingClientRect() because it'll get the transformed sized\n    const posx = this.__draghoverelement.offsetLeft;\n    const posy = this.__draghoverelement.offsetTop;\n    this.__dragtargetindicatornode.style.position = \"absolute\";\n    this.__dragtargetindicatornode.style.left = posx + \"px\";\n    this.__dragtargetindicatornode.style.top = posy + \"px\";\n    this.__dragtargetindicatornode.style.width = this.__draghoverelement.offsetWidth + \"px\";\n    this.__dragtargetindicatornode.style.height = this.__draghoverelement.offsetHeight + \"px\";\n  }\n\n  doHandleDrop(evt: DragEvent) {\n    assertHTMLElement(evt.target);\n    if (!this.__dragelement)\n      return;//not in a drag&drop?\n\n    const targetslide = evt.target.closest<HTMLElement>(\".cm-mediaslide\");\n\n\n    if (!targetslide || targetslide.classList.contains(\"cm-mediaslide--additem\")) {\n      alert(\"shouldnt happen\");\n      this.__dragelement = null;\n      return;\n    }\n\n    //evt.preventDefault(); // FIXME: this might be needed for iOS because of the setData we used\n\n    // Insert the dragged slide before the slide we dropped in on\n    // targetslide.parentNode?.insertBefore(this.__dragelement, targetslide);\n    // this.__dragelement.removeAttribute(\"draggable\");\n    this.removeDropTargetIndicator();\n\n    console.info(\n      {\n        slide_dragging: this.__dragelement,\n        slide_droppingonto: targetslide\n      }\n    );\n\n    this.__dragtargetindicatornode?.remove();\n\n    // Find and remove the slide which is to be moved\n    const id_of_moment_to_move = parseInt(this.__dragelement.dataset.momentid!);\n    const original_idx = this.props.moments.findIndex((moment) => moment.id === id_of_moment_to_move);\n\n    // Now insert at the new location\n    const id_of_moment_to_insertbefore = parseInt(targetslide.dataset.momentid!);\n    const insert_idx = this.props.moments.findIndex((moment) => moment.id === id_of_moment_to_insertbefore);\n\n    const moment_to_move = this.props.moments.splice(original_idx, 1); // remove from old position\n    this.props.moments.splice(insert_idx, 0, moment_to_move[0]); // reinsert the moment at the new position\n\n    const momentOrderingList = this.props.moments.map(moment => moment.id);\n\n    /*\n    // DEBUG /////\n    const titlesInOrder = this.props.moments.map(moment => moment.title);\n\n    console.log(`Moving slide #${moment_to_move[0].id} \"${moment_to_move[0].title}\" from ${original_idx} to ${insert_idx}.`);\n    console.log(\"New ordering (Titles) =\", titlesInOrder);\n    console.log(\"New ordering (wrdid's) =\", momentOrderingList);\n    //////////////\n    */\n\n    this.setState({}); // refresh\n\n    void backend.setMomentsOrdering(momentOrderingList);\n  }\n\n  doHandleDragEnd(evt: DragEvent) {\n    this.__itemsgrid.current.classList.remove(\"dragging\");\n    this.__itemsgrid.current.classList.remove(\"dragging2\");\n\n    // NOTE: this.__dragelement should only be null in case a drag was activated which wasn't a moment item tile\n    if (this.__dragelement) {\n      this.__dragelement.removeAttribute(\"draggable\");\n      this.__dragelement.classList.remove(\"cm-mediaslide--dragging\");\n    }\n\n    if (this.__draghoverelement)\n      this.__draghoverelement.classList.remove(\"cm-mediaslide--droptarget\");\n\n    this.__dragelement = null;\n    this.__draghoverelement = null;\n\n    this.disableZoomOut();\n  }\n\n\n  ////////////////////////////////////////////////////////////////////////\n  //\n  //  Rendering\n  //\n  renderCards() {\n    console.info(\"RENDER CARDS\");\n    console.info(\"previewItemIdx\", this.state.previewItemIdx);\n    this.__cards = [];\n    const localCards = this.__cards;\n\n\n    return this.props.moments.map(moment => {\n      const cardInstance = useRef<CeremonyMediaMomentCard>();\n      const card = <CeremonyMediaMomentCard ref={cardInstance} key={moment.id} parent={this} moment={moment} canedit={this.props.canedit} />;\n      localCards.push(cardInstance);\n      return card;\n    });\n  }\n\n  render() {\n    // console.info(\"rendering - preview idx is\", this.state.previewItemIdx);\n    console.info(\"<Moments> render\");\n\n    const ceremony = backend.getCeremony();\n    const tid = ceremony!.accessLevel === \"organizer\" ? \"info_organizer\" : \"info_collaborator\";\n    const infoText = backend.getText(tid);\n\n    // console.info(\"[Moments] footerContent\", this.props.footerContent);\n\n    const result = <div class=\"cm-moments\">\n\n      {this.props.previewMode ? this.renderNavigation() : null}\n\n      <div class=\"cm-moments__items\"\n        ref={this.__itemsgrid}\n        onMouseDown={evt => this.doHandleMouseDown(evt)}\n        onKeyDown={evt => this.doHandleKeyDown(evt)}\n        onTouchStart={evt => this.doHandleMouseDown(evt)}\n        onDragStart={evt => this.doHandleDragStart(evt)}\n        onDrag={evt => this.doHandleDrag(evt)}\n        onDragOver={evt => this.doHandleDragOver(evt)}\n        onDrop={evt => this.doHandleDrop(evt)}\n        onDragEnd={evt => this.doHandleDragEnd(evt)}\n        onAnimationEnd={evt => this.onAnimationEnd(evt)}>\n\n        {this.renderCards()}\n\n        {!this.props.canedit ? null :\n          <AddMomentCard parent={this} allowAddingPresentations={this.props.allowAddingPresentations} />\n        }\n\n        {!this.props.canedit || this.state.hideInfoTile ? null :\n          <div class=\"cm-moments__info\">\n            <button class=\"cm-moments__info__closebutton iconbutton\"\n              onClick={() => this.setState({ hideInfoTile: true })}\n              aria-close=\"Verberg\"\n              type=\"button\">\n              <span class=\"icon fal fa-times\" role=\"presentation\" />\n            </button>\n            <div class=\"cm-moments__info__body\"\n              dangerouslySetInnerHTML={{ __html: infoText }}>\n            </div>\n          </div>\n        }\n      </div>\n      <div class=\"cm-moments__extraspace\" />\n\n      <div class=\"cm-ceremonyfooter\">\n        <div class=\"cm-ceremonyfooter__content\" ref={this.__navigationBar}>\n          {this.props.previewMode ? this.renderPreviewFooter() : this.renderNormalFooter()}\n          <div class=\"cm-ceremonyfooter__content__pagination\"></div>\n          {this.props.footerContent}\n        </div>\n      </div>\n\n    </div>;\n\n    console.info(\"CARDS ARRAY AFTER RENDERING\", this.__cards);\n\n    // console.groupEnd();\n\n    return result;\n  }\n\n  renderPreviewFooter() {\n    // FIXME: for some reason the pagination won't render if we don't have content\n    return <>&nbsp;\n    </>;\n    /*\n    return <>\n          {this.renderTimeline()}\n          {this.renderCurrentItemTime()}\n          {this.renderTotalTime()}\n        </>;\n        */\n  }\n\n  renderNormalFooter() {\n    return <TimeIndicator durationMs={this.props.moments.reduce((acc, moment) => acc + moment.durationMsecs, 0)} class=\"cm-timeindicator-footer\" />;\n  }\n\n  renderTotalTime() {\n    const durationMs = this.props.moments.reduce((acc, moment) => acc + moment.durationMsecs, 0);\n    return <div class=\"cm-moments__totaltime\">{\"eind \" + getTimeText(durationMs)}</div>;\n  }\n\n  renderCurrentItemTime() {\n    const tileIdx = this.state.previewItemIdx;\n\n    // Calculate the begin and end time of the current moment\n    let timeStart = 0;\n    for (let idx = 0; idx < tileIdx; idx++) {\n      const moment = this.props.moments[idx];\n      console.log(moment);\n      timeStart += moment.durationMsecs;\n    }\n    const timeEnd = timeStart + this.props.moments[tileIdx].durationMsecs;\n\n    console.info(\"Time start:\", getTimeText(timeStart));\n    console.info(\"Time end\", getTimeText(timeEnd));\n\n    return <div class=\"cm-moments__currentitemtime\">{getTimeText(timeStart) + \" / \" + getTimeText(timeEnd)}</div>;\n  }\n\n  renderTimeline() {\n    // console.log(\"MOMENTS FOR TIMELINE\", this.props.moments);\n    // const tileIdx = this.__focusedTileIdx;\n    const tileIdx = this.state.previewItemIdx;\n    // console.log(\"Moment idx\", tileIdx);\n\n\n    /*\n    {this.props.moments.map((moment, idx) => <div class={idx === tileIdx ? \"cm-moments__timeline__item current\" : \"cm-moments__timeline__item\"} data-momentid={moment.id} style={\"--duration:\" + moment.durationMsecs} />)}\n        */\n    return <div class=\"cm-moments__timeline\" onClick={evt => this.doCheckForTimelineItemClick(evt)}>\n      {this.props.moments.map((moment, idx) =>\n        <div class={idx === tileIdx ? \"cm-moments__timeline__item current\" : \"cm-moments__timeline__item\"}\n          data-momentid={moment.id} style={\"--duration:\" + Math.round(moment.durationMsecs / 1000)}\n        />)}\n    </div>;\n  }\n\n  doCheckForTimelineItemClick(evt: MouseEvent) {\n    console.log(evt);\n    console.log(this.props.moments);\n  }\n\n  renderNavigation() {\n    return <>\n      <button class=\"cm-moments--previousbutton\"\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.moments.preview-previewbutton-arialabel\")}\n        type=\"button\"\n        onClick={evt => this.gotoPreviousItem()}\n        disabled={this.state.previewItemIdx === 0}>\n        <span class=\"icon far fa-chevron-left\"></span>\n      </button>\n      <button class=\"cm-moments--nextbutton\"\n        aria-label={getTid(\"ceremonymedia:webdesigns.site.js.moments.preview-nextbutton-arialabel\")}\n        type=\"button\"\n        onClick={evt => this.gotoNextItem()}\n        disabled={this.state.previewItemIdx > this.props.moments.length - 1}>\n        <span class=\"icon far fa-chevron-right\"></span>\n      </button>\n    </>;\n  }\n\n  gotoPreviousItem() {\n    if (this.state.previewItemIdx > 0) {\n      const newItemIdx = this.state.previewItemIdx - 1;\n      this.setState({ previewItemIdx: newItemIdx });\n      this.jumpToMoment(newItemIdx);\n    }\n  }\n\n  gotoNextItem() {\n    let newItemIdx = 0;\n    if (this.state.previewItemIdx < this.props.moments.length - 1)\n      newItemIdx = this.state.previewItemIdx + 1;\n\n    this.setState({ previewItemIdx: newItemIdx });\n    this.jumpToMoment(newItemIdx);\n  }\n\n\n\n\n  ////////////////////////////////////////////////////////////////////////\n  //\n  //  Zoom out effect\n  //\n\n  triggerZoomOut() {\n    const scale_min = 0.5;\n\n    const viewport_height = (document.scrollingElement as HTMLElement).clientHeight;\n\n    const momentsgrid = this.__itemsgrid.current;\n    const momentsgrid_rect = momentsgrid.getBoundingClientRect();\n\n    const momentsgrid_top = momentsgrid_rect.top - (document.scrollingElement as HTMLElement).getBoundingClientRect().top;\n    // const sticky_header_height = (document.querySelector(\".header__top\") as HTMLElement).offsetHeight;\n    const footer_height = (document.querySelector(\".cm-ceremonyfooter\") as HTMLElement).offsetHeight ?? 0;\n\n    // how much is visible of the grid (viewport height minus obscored area)\n    const momentsgrid_visible_height = viewport_height - momentsgrid_top - footer_height;\n\n    // console.info(\"Available height for momentsgrid in viewport:\", momentsgrid_visible_height);\n\n\n    let scale_to_fit = (momentsgrid_visible_height - zoomout_footer_whitespace) / momentsgrid.getBoundingClientRect().height;\n\n    if (scale_to_fit > 1)\n      scale_to_fit = 1; // never enlarge\n\n    if (scale_to_fit < scale_min)\n      scale_to_fit = scale_min;\n\n    // console.log(\"Scale\", scale_to_fit);\n    // console.log(viewport_height, \"-\", evt.clientY, \"=\", viewport_height - evt.clientY);\n\n    this.__drag_zoomout_activated = true;\n    momentsgrid.classList.add(\"cm-moments__items--zoomout\");\n    momentsgrid.style.transform = `scale(${scale_to_fit.toFixed(2)})`;\n    this.setTransformOriginForZoom(momentsgrid, scale_to_fit);\n    // document.scrollingElement.scrollTo({top: 0, behavior: \"smooth\" });\n  }\n\n  disableZoomOut() {\n    this.__drag_zoomout_activated = false;\n\n    const momentsgrid = this.__itemsgrid.current;\n    momentsgrid.classList.remove(\"cm-moments__items--zoomout\");\n    momentsgrid.style.transform = `scale(1)`;\n  }\n\n  setTransformOriginForZoom(gridElement: HTMLElement, scaleFactor: number) {\n    const viewportHeight = window.innerHeight;\n    const scrollTop = window.scrollY || document.documentElement.scrollTop;\n    const viewportCenterY = scrollTop + (viewportHeight / 2);\n\n    /*\n    const viewport_height = document.scrollingElement.clientHeight;\n    const sticky_header_height = (document.querySelector(\".header__top\") as HTMLElement).offsetHeight;\n    const footer_height = (document.querySelector(\".cm-ceremonyfooter\") as HTMLElement).offsetHeight ?? 0;\n    const viewportCenterY = document.scrollingElement.scrollTop + sticky_header_height + (viewport_height - sticky_header_height - footer_height) / 2;\n    */\n\n    const gridRect = gridElement.getBoundingClientRect();\n    const gridOffsetTop = gridRect.top + scrollTop; // convert viewport Y to page Y\n    const gridCenterY = (viewportCenterY - gridOffsetTop);\n\n    // const transformOriginY = (gridCenterY / gridElement.offsetHeight) * 100;\n\n    const gridHeight = gridElement.offsetHeight;\n    const scaledGridHeight = gridHeight * scaleFactor;\n\n    // Calculate where the top and bottom of the grid will be after scaling\n    const visibleTopAfterScale = gridOffsetTop + (gridHeight - scaledGridHeight) / 2;\n    const visibleBottomAfterScale = visibleTopAfterScale + scaledGridHeight;\n\n    // Calculate the transform-origin y-offset dynamically\n    let transformOriginY = (gridCenterY / gridHeight) * 100;\n\n    /*\n    console.log(\"Using transformOriginY\", transformOriginY);\n    console.log(\"gridOffsetTop\", gridOffsetTop);\n    console.log(\"visibleTopAfterScale\", visibleTopAfterScale);\n    console.log(\"scrollTop\", scrollTop);\n    */\n\n    // If zooming out would leave space at the bottom, set transform-origin to 100%\n    if (visibleBottomAfterScale < scrollTop + viewportHeight) {\n      transformOriginY = 100;\n    }\n\n    // If zooming out would leave space at the top, set transform-origin to 0%\n    if (visibleTopAfterScale - scrollTop > 0) {\n      // console.info(\"STICK AT TOP\");\n      transformOriginY = 0;  // Prevents whitespace by making the top visible\n    }\n\n\n    gridElement.style.transformOrigin = `50% ${transformOriginY}%`;\n    gridElement.style.transform = `scale(${scaleFactor})`;\n  }\n\n}\n\n\nfunction getTimeText(time_msecs: number) {\n  const time_secs = time_msecs / 1000;\n  const hours = Math.floor(time_secs / 3600);\n  const minutes = Math.floor(time_secs % 3600 / 60);\n  const seconds = Math.round(time_secs % 60);\n\n  if (hours > 0)\n    return hours + \":\" + (minutes > 9 ? minutes : \"0\" + minutes) + \":\" + (seconds > 9 ? seconds : \"0\" + seconds);\n  else\n    return (minutes > 9 ? minutes : \"0\" + minutes) + \":\" + (seconds > 9 ? seconds : \"0\" + seconds);\n}\n","/* eslint-disable */\n// @ts-nocheck -- Bulk rename done by wh devkit:es2ts\n\n\nimport \"./sidebar-menu.scss\";\n\n/*\n\nBased on (from ACOI):\nSPC-Sidebar - 24-may-2023\n\n*/\n\n\nlet old_focus_element = null;\n\n\n// window.addEventListener(\"click\", evt => doCheckDocumentationClicks(evt));\n// window.addEventListener(\"keyup\", evt => doCheckForEsq(evt));\n\n\n// Ensure no media playback is active in the documentation\n// (use in case the documentation is hidden/closed but kept in the DOM)\nexport function closeDocumentation(container: HTMLElement) {\n  setPlayStateForVideosWithin(container, false);\n}\n\n\nexport function initDocumentation(container: HTMLElement) {\n  // if (document.documentElement.classList.contains(\"wh-widgetpreview\"))\n  // return;\n\n  /*\n  const menus = document.querySelectorAll(\".sidebar__menu\");\n  for (const menucontainer of menus) {\n    menucontainer.addEventListener(\"click\", evt => doToggleSideBarMenuItems(evt));\n    menucontainer.addEventListener(\"keyup\", evt => doToggleSideBarMenuItems(evt));\n  }\n  */\n\n  window.addEventListener(\"click\", evt => doToggleSideBarMenuItems(evt));\n  window.addEventListener(\"keyup\", evt => doToggleSideBarMenuItems(evt));\n\n  container.querySelector(\".docapp__navselect\")?.addEventListener(\"change\", evt => doSetSelectedPage(evt));\n\n\n  // detect dialog closing (so we can update the aria-expanded of the toggle button)\n  // document.getElementById(\"slidemenu-container\").addEventListener(\"close\", onClosingSidebar);\n\n  enrichWithAriaAttributes();\n\n  // setSidebarState(false, false);\n}\n\n\n\n/** @short Add aria attributes to communicate to the screereader that there are subitems which can be expanded\n */\nfunction enrichWithAriaAttributes() {\n  // Add all aria-controls and aria-expanded attributes\n  const items_withsubitems = document.querySelectorAll(\".sidemainmenu__item--hassubitems\");\n  let branchidx = 0;\n\n  for (const branchnode of items_withsubitems) {\n    branchidx++;\n    setBranchState(branchnode, branchnode.classList.contains(\"sidemainmenu__item--expand\"), branchidx);\n  }\n}\n\n\n\n\nfunction setBranchState(node, expanded, branchidx) {\n  const activatedtogglenode = node.querySelector(\".sidemainmenu__item__toggle\");\n\n  const activatedlink = node.classList.contains(\"sidemainmenu__item__link\")\n    ? node\n    : node.querySelector(\".sidemainmenu__item__link\");\n\n  // console.info(\"setBranchState\", node, expanded);\n  // console.log(\"togglenode\", activatedtogglenode);\n  // console.log(\"activatedlink\", activatedlink);\n\n  node.classList.toggle(\"sidemainmenu__item--expand\", expanded);\n  /*\n    if (activatedtogglenode)\n      activatedtogglenode.setAttribute(\"aria-expanded\", expanded ? \"true\" : \"false\");\n  */\n  activatedlink.setAttribute(\"aria-expanded\", expanded ? \"true\" : \"false\");\n\n  if (branchidx) {\n    const panelid = \"spc-sidebar-branch\" + branchidx;\n\n    node.querySelector(\"ul\").setAttribute(\"id\", panelid);\n    /*\n        if (activatedtogglenode)\n          activatedtogglenode.setAttribute(\"aria-controls\", panelid);\n    */\n    activatedlink.setAttribute(\"aria-controls\", panelid);\n  }\n}\n\nfunction toggleBranchState(branchnode) {\n  const expanded = branchnode.classList.contains(\"sidemainmenu__item--expand\");\n  //console.warn(\"!!toggleBranchState - state was\", expanded, \"now state will be\", !expanded, \"for node\", branchnode);\n  setBranchState(branchnode, !expanded);\n}\n\n\n// FIXME: keep in mind there might be multiple documentation dialogs\nfunction setPage(docappContainer: HTMLElement, pageid: string) {\n\n  const activePage = docappContainer.querySelector(\".docapp__page:not([hidden])\");\n  if (activePage) {\n    if (activePage.dataset.id === pageid) // no need to do anything if we stay on the same page\n      return;\n\n    // Ensure videos on the page are paused before we moved to another page\n    setPlayStateForVideosWithin(activePage, false);\n  }\n\n  // Update the hidden state of all pages (and scroll the current page to the top)\n  const pages = docappContainer.querySelectorAll(\".docapp__page\");\n  for (const page of pages) {\n    if (page.getAttribute(\"data-id\") === pageid) {\n      page.removeAttribute(\"hidden\");\n      page.scrollTop = 0; // start at the top of the page\n    }\n    else\n      page.setAttribute(\"hidden\", \"until-found\");\n  }\n\n  // Update the selection in the pulldown and sidebar menu\n  const pulldown = docappContainer.querySelector(\".docapp__navselect\");\n  pulldown.value = pageid;\n  /*\n  for (const option of pulldown.options)\n    if (option.value === pageid) {\n      console.info(\"FOUND OPTION\", option, option.value);\n      option.checked = true;\n    }\n  */\n\n  const links = docappContainer.querySelectorAll(\".sidebar__menu .sidemainmenu__item__link\");\n  for (const link of links) {\n    // console.log(link.dataset.pageid === pageid, link.dataset.id, pageid, link);\n\n    if (link.dataset.pageid === pageid)\n      link.setAttribute(\"aria-current\", \"page\");\n    else\n      link.removeAttribute(\"aria-current\");\n  }\n}\n\n\n\nfunction doSetSelectedPage(evt) {\n  const pageid = evt.target.value;\n  const appContainer = evt.target.closest(\".docapp\");\n  setPage(appContainer, pageid);\n}\n\n\nfunction doToggleSideBarMenuItems(evt) {\n\n  const menu = evt.target.closest(\".sidebar__menu\");\n\n  if (!menu) // we only handle clicks in the sidebar menu\n    return;\n\n  evt.preventDefault();\n\n  // Check for selection of a page in the sidebar menu\n  const link = evt.target.closest(\"a\");\n  if (link && link.hasAttribute(\"data-pageid\")) {\n    const appContainer = menu.closest(\".docapp\");\n    const pageid = link.dataset.pageid;\n    setPage(appContainer, pageid);\n    return;\n  }\n\n  // Check whether a menu branch is being toggled\n  const branchnode = evt.target.closest(\".sidemainmenu__item\");\n  if (!branchnode || !branchnode.classList.contains(\"sidemainmenu__item--hassubitems\")) {\n    console.log(\"Not within a sidemainmenu item or no subitems to expand.\", evt);\n    return;\n  }\n\n  const activatedtogglenode = evt.target.closest(\".sidemainmenu__item__toggle\");\n\n  const activatedlink = evt.target.classList.contains(\"sidemainmenu__item__link\")\n    ? evt.target\n    : evt.target.closest(\".sidemainmenu__item__link\");\n\n  // console.log(\"togglenode\", activatedtogglenode);\n  // console.log(\"activatedlink\", activatedlink);\n\n\n  if (evt.type == \"click\" && (activatedtogglenode || (activatedlink && !activatedlink.hasAttribute(\"href\")))) {\n    evt.preventDefault();\n    toggleBranchState(branchnode);\n  }\n\n  if (evt.type == \"keyup\") {\n    switch (evt.key) {\n      case \"ArrowRight\":\n        {\n          evt.preventDefault();\n          setBranchState(branchnode, true); // expand to show subitems\n          break;\n        }\n      case \"ArrowLeft\":\n        {\n          evt.preventDefault();\n          setBranchState(branchnode, false); // collapse to hide subitems\n          break;\n        }\n      case \" \":\n        {\n          evt.preventDefault();\n          toggleBranchState(branchnode);\n          break;\n        }\n    }\n  }\n\n  // ignore, let the browser pick up this link\n}\n\n\n/** @short pause any YouTube or Vimeo movie within the specified DOM\n    @long (usecases: a popup for which you need to stop all video's when closed, slides in a slideshow which may contain one or more videos, ...)\n\n    NOTE: YouTube will only react if ?enablejsapi=1 was specified\n    NOTE: Vimeo will react, even if ?api=1 wasn't specified (it does need api=1 for two-way communication)\n\n    Also see: http://stackoverflow.com/questions/7443578/youtube-iframe-api-how-do-i-control-a-iframe-player-thats-already-in-the-html\n*/\n//function pauseVideosWithin(node)\nfunction setPlayStateForVideosWithin(node, play) {\n  const iframes = node.querySelectorAll(\"iframe\");\n  for (let idx = 0; idx < iframes.length; idx++) {\n    const iframe = iframes[idx];\n\n    const parser = document.createElement(\"a\");\n    parser.href = iframe.src;\n\n    if (parser.hostname.substr(parser.hostname.length - 11) === \"youtube.com\") {\n      // Officially the YouTube iframe API must be used\n      // But it requires you to dynamically create a video and we have to wait for the API to have been loaded/ready.\n      //\n      //http://stackoverflow.com/questions/7443578/youtube-iframe-api-how-do-i-control-a-iframe-player-thats-already-in-the-html\n      //iframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"stopVideo\",\"args\":\"\"}', '*')\n      if (play)\n        iframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n      else\n        iframe.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}', '*');\n    }\n    else if (parser.hostname.substr(parser.hostname.length - 9) === \"vimeo.com\") {\n      // Chrome may throw an exception saying the message was blocked,\n      // (on localhost usage?) but the message probably still reached the destination, which it should since we used \"*\")\n      //var val = JSON.stringify({ method: \"pause\" });\n      if (play)\n        iframe.contentWindow.postMessage('{\"method\":\"play\"}', \"*\");\n      else\n        iframe.contentWindow.postMessage('{\"method\":\"pause\"}', \"*\");\n    }\n  }\n}\n","import * as dompack from \"dompack\";\nimport { getTid } from \"@webhare/gettid\";\nimport { initDocumentation, closeDocumentation } from \"@mod-ceremonymedia/webdesigns/documentation/embed\";\n\n\n//@ts-ignore for debugging\nwindow.showDocumentation = showDocumentation;\n\n\n/*\nNOTE:\n- The CSS & JS for the documentation is included in our assetpack\n- The content of the documentation is fetched from the index of the documentation site (which is a Single Page Application)\n*/\nexport async function showDocumentation(documentationURL: string) {\n\n  // Check whether we already have a dialog with this documentation\n  let dialog = document.querySelector(`[data-source=\"${documentationURL}\"]`) as HTMLDialogElement;\n  if (dialog) {\n    console.info(\"We already have this documentation loaded.\");\n    dialog.showModal();\n    return;\n  }\n\n  console.info(`Fetching ${documentationURL}.`);\n\n  const spaData = await fetch(documentationURL);\n\n  const newhtml = document.createElement('div');\n  newhtml.innerHTML = await spaData.text();\n\n  console.info(\"Documentation loaded\");\n  // console.info(newhtml.innerHTML);\n\n  dialog =\n    <dialog class=\"cm-dialog\"\n      data-dialogname=\"documentation\"\n      data-source={documentationURL}\n      onclose={(evt: Event) => closeMyDocumentation(evt)}>\n      <button class=\"cm-dialog__closebutton\" type=\"button\" onClick={(evt: Event) => ((evt.target as HTMLElement).closest(\".cm-dialog\") as HTMLDialogElement).close()} aria-label={getTid(\"ceremonymedia:webdesigns.site.js.buttons.close\")}><span class=\"icon far fa-times\"></span></button>\n      <div class=\"docapp-container\">\n      </div>\n    </dialog>;\n\n  const spaAppContainer = newhtml.querySelector(\".docapp\") as HTMLElement;\n  dialog.querySelector(\".docapp-container\")!.append(spaAppContainer);\n  /*\n  // Grab the content of the SPA (Single Page Application) and place it into a dialog\n  const spaSourceContainer = newhtml.querySelector('body');\n  if (!spaSourceContainer)\n    return;\n\n  while (spaSourceContainer.firstChild) // move the content of <main> into our own page\n    dialog.appendChild(spaSourceContainer.firstChild);\n  */\n\n  document.body.append(dialog);\n  dialog.showModal();\n\n  initDocumentation(dialog);\n  dompack.registerMissed(dialog);\n}\n\nfunction closeMyDocumentation(evt: Event) {\n  closeDocumentation(evt.target as HTMLElement);\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h } from \"preact\";\nimport type { ComponentChildren } from \"preact\";\nimport \"./editor-header.scss\";\nimport { getCeremonyLocation } from \"../../frontend/settings/ceremony-location\";\n\n\nfunction isFilledComponentChildren(children: ComponentChildren): boolean {\n  return children ? !Array.isArray(children) || children.length !== 0 : false;\n}\n\nexport function EditorHeader(props: { buttons?: ComponentChildren; pageHeader?: ComponentChildren }) {\n\n  const titleParts = getCeremonyLocation().organizationTitle.split(\"*\").map((part, idx) => !(idx % 2) ? <span key={idx}>{part}</span> : <strong key={idx}>{part}</strong>);\n\n  return (\n    <header class=\"header--editceremony\">\n      <div class=\"header__top\">\n        <div class=\"header__top__content\">\n\n          <h1 class=\"header__organization-identity\">\n            {titleParts}\n          </h1>\n\n          {isFilledComponentChildren(props.buttons) ?\n            <div class=\"header__top__buttonbar\">\n              {props.buttons}\n            </div> : null\n          }\n        </div>\n      </div>\n      {props.pageHeader}\n    </header>\n  );\n}\n\nexport function LoginHeader(props: { buttons?: ComponentChildren; pageHeader?: ComponentChildren }) {\n\n  const titleParts = getCeremonyLocation().organizationTitle.split(\"*\").map((part, idx) => !(idx % 2) ? <span key={idx}>{part}</span> : <strong key={idx}>{part}</strong>);\n\n  return (\n    <header class=\"header--login\">\n      <div class=\"header__top\">\n        <div class=\"header__top__content\">\n\n          <h1 class=\"header__organization-identity\">\n            {getCeremonyLocation().organizationLogo\n              ? <img class=\"header__top__logo\" src={getCeremonyLocation().organizationLogo} alt={getCeremonyLocation().organizationTitle.replaceAll(/\\*/g, \"\")} />\n              : titleParts\n            }\n          </h1>\n\n          {isFilledComponentChildren(props.buttons) ?\n            <div class=\"header__top__buttonbar\">\n              {props.buttons}\n            </div> : null\n          }\n        </div>\n      </div>\n      {props.pageHeader}\n    </header >\n  );\n}\n\nexport function PlayerHeader(props: { buttons?: ComponentChildren; pageHeader?: ComponentChildren }) {\n\n  const titleParts = getCeremonyLocation().organizationTitle.split(\"*\").map((part, idx) => !(idx % 2) ? <span key={idx}>{part}</span> : <strong key={idx}>{part}</strong>);\n\n  return (\n    <header class=\"header--player\">\n      <div class=\"header__top\">\n        <div class=\"header__top__content\">\n\n          <h1 class=\"header__organization-identity\">\n            {getCeremonyLocation().organizationLogo\n              ? <img class=\"header__top__logo\" src={getCeremonyLocation().organizationLogo} alt={getCeremonyLocation().organizationTitle.replaceAll(/\\*/g, \"\")} />\n              : titleParts\n            }\n          </h1>\n\n          {isFilledComponentChildren(props.buttons) ?\n            <div class=\"header__top__buttonbar\">\n              {props.buttons}\n            </div> : null\n          }\n        </div>\n      </div>\n      {props.pageHeader}\n    </header >\n  );\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h } from \"preact\";\nimport { FormDialog } from \"../../frontend/components/form\";\nimport { getTid } from \"@webhare/gettid\";\nimport { backend } from \"./editor\";\n\nexport function ChooseLanguage(props: { language: \"en\" | \"nl\"; onClose: (setlang: \"en\" | \"nl\" | null) => void }) {\n  return (\n    <FormDialog form={{\n      title: getTid(\"ceremonymedia:webdesigns.site.js.chooselanguage.title\"),\n      dialogname: \"selectlanguage\",\n      fields: [{ prop: \"language\", type: \"language\", label: getTid(\"ceremonymedia:webdesigns.site.js.chooselanguage.language\") }],\n      buttons: [{ tid: \"ok\", tag: \"ok\", display: \"solid\" }, { tid: \"cancel\", tag: \"cancel\", display: \"textual\", validate: false }],\n      defaultbuttontag: \"ok\"\n    }}\n      value={{ language: backend.getLanguage() }}\n      isOpen={true}\n      onButton={(result) => {\n        if (result.button === \"ok\") {\n          props.onClose(result.fields.language);\n          console.log(\"Selected language\", result.fields.language);\n          // backend.setLanguage(result.fields.language);\n        } else {\n          props.onClose(null);\n        }\n      }}\n      onCancel={() => props.onClose(null)}\n    />);\n}\n","/* eslint-disable no-alert */\n/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment } from \"preact\";\nimport { Spinner } from \"./components\";\nimport { backend } from \"./editor\";\nimport { simpleScreenState, type SimpleScreenState } from \"../../frontend/components/simplescreen\";\nimport { LoginHeader } from \"./editor-header\";\nimport { getTid } from \"@webhare/gettid\";\nimport { ChooseLanguage } from \"./language\";\nimport type { CMLanguage } from \"../shared-client\";\n\n\n/* .. extends Component<Props interface, STate interface>\n      Props = communicatie tussen elementen\n      State = interne state van het element\n      */\n\nexport class LoginScreen extends Component<{\n  language: \"en\" | \"nl\";\n}, {\n  username: string;\n  password: string;\n  forgotPassword: boolean;\n  error?: string;\n  editLanguage?: boolean;\n  simpleScreen?: SimpleScreenState;\n}> {\n  constructor() {\n    super();\n    this.state = { username: \"\", password: \"\", forgotPassword: false };\n  }\n\n  //hmm. door op deze manier handlers te definieren zijn ze gelijk gebind aan de class..\n  onLogin = async (e: Event) => {\n    e.preventDefault();\n\n    using spinner = new Spinner;\n    void (spinner); //we're not using the name but you can't use using without a varname..\n\n    const loginresult = await backend.login(this.state.username, this.state.password);\n    if (loginresult.success) //we don't need to exit this screen, the login event is global\n      this.setState({ error: undefined });\n    else\n      this.setState({ error: loginresult.error });\n  };\n\n  render() {\n    if (this.state.forgotPassword)\n      return this.renderResetPasswordForm();\n    else\n      return this.renderLoginForm();\n  }\n\n  renderStartScreenHeader() {\n    console.log(`renderStartScreenHeader`);\n    const buttons =\n      <>\n        <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => {\n          console.log(`click editlanguage`);\n          this.setState({ editLanguage: true });\n        }\n        }>\n          <span class=\"icon far fa-flag\" role=\"presentation\"></span>\n          <span class=\"button__label\">{this.props.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n        </button>\n        {this.state.editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: CMLanguage | null) => {\n          if (lang)\n            backend.setLanguage(lang);\n          this.setState(state => ({ editLanguage: false }));\n        }} /> : null}\n      </>;\n    return <LoginHeader buttons={buttons} />;\n  }\n\n  setForgotPassword(forgotPassword: boolean, evt: Event) {\n    // prevent the form from submitting - the submit will be executed by the forgot password form!\n    evt.preventDefault();\n    this.setState({ forgotPassword });\n  }\n\n  renderLoginForm() {\n    console.log(`render login form`, JSON.stringify(this.state));\n    return <Fragment>\n      {this.renderStartScreenHeader()}\n      <div class=\"cm-ceremonybody cm-ceremonybody--login\">\n        <h2>{getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.login\")}</h2>\n\n        <form class=\"cm-form cm-loginform\"\n          aria-label={getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.login\")}\n          onSubmit={this.onLogin}>\n\n          {this.state.error ? <div class=\"cm-loginform__error\" aria-live=\"assertive\"><span class=\"icon fa fa-exclamation-triangle\" role=\"presentation\"></span>{this.state.error}</div> : null}\n\n          <div class=\"cm-form__itemlist\">\n            <div class=\"cm-form__item\">\n              <label for=\"cm-loginform-email\">{getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.youremail\")}</label>\n              <input id=\"cm-loginform-email\" type=\"email\" value={this.state.username} onInput={e => this.setState({ username: e.currentTarget.value })} required autocomplete=\"username\" />\n            </div>\n\n            <div class=\"cm-form__item\">\n              <label for=\"cm-loginform-password\">{getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.password\")}</label>\n              <input id=\"cm-loginform-password\" type=\"password\" value={this.state.password} onInput={e => this.setState({ password: e.currentTarget.value })} required autocomplete=\"current-password\" />\n            </div>\n          </div>\n\n          <div class=\"cm-form__buttonbar\">\n            <button id=\"cm-loginform__loginbutton\"\n              class=\"cm-loginform__loginbutton wh-button-solid\"\n              type=\"submit\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.login\")}</button>\n\n            <button class=\"cm-loginform__resetpasswordbutton wh-button-textual\"\n              onClick={(evt) => this.setForgotPassword(true, evt)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.forgotpassword\")}</button>\n          </div>\n\n        </form>\n      </div>\n    </Fragment >;\n  }\n\n  renderResetPasswordForm() {\n    const { runSimpleScreen, SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    const onForgot = async (e: Event) => {\n      e.preventDefault();\n      e.stopPropagation();\n      backend.requestPasswordReset(this.state.username);\n      await runSimpleScreen(\"info\", getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.emailsent\"));\n      this.setState({ forgotPassword: false });\n    };\n\n    return <Fragment>\n      {this.renderStartScreenHeader()}\n      <div class=\"cm-ceremonybody cm-ceremonybody--resetpassword\">\n        <h2>{getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.forgotpassword\")}</h2>\n\n        <form class=\"cm-form cm-resetpasswordform\">\n          <div class=\"cm-form__text\">\n            {getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.resetpassword-explanation\")}\n          </div>\n\n          <div class=\"cm-form__itemlist\">\n            <div class=\"cm-form__item\">\n              <label for=\"cm-resetpasswordform-email\">{getTid(\"ceremonymedia:webdesigns.site.js.editorlogin.youremail\")}</label>\n              <input type=\"email\" value={this.state.username} onInput={e => { this.setState({ username: e.currentTarget.value }); }} required autocomplete=\"username\" />\n            </div>\n          </div>\n\n          <div class=\"cm-form__buttonbar\">\n            <button class=\"cm-resetpasswordform__submitbutton wh-button-solid\"\n              type=\"submit\" onClick={(evt) => onForgot(evt)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.sendemail\")}</button>\n\n            <button class=\"cm-resetpasswordform__cancelbutton wh-button-textual\"\n              onClick={(evt) => this.setForgotPassword(false, evt)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n          </div >\n        </form >\n        <SimpleScreen />\n      </div >\n    </Fragment >;\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Fragment, Component } from \"preact\";\nimport { Spinner } from \"./components\";\nimport { backend } from \"./editor\";\nimport { getTid } from \"@webhare/gettid\";\nimport { useState } from \"preact/hooks\";\nimport { LoginHeader } from \"./editor-header\";\nimport { ChooseLanguage } from \"./language\";\nimport type { CMLanguage } from \"../shared-client\";\n\nexport function ResetPasswordScreen(props: { ed: string; verifier: string; language: string }) {\n  const [editLanguage, setEditLanguage] = useState(false);\n\n  function renderStartScreenHeader() {\n    console.log(`renderStartScreenHeader`);\n    const buttons =\n      <>\n        <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => {\n          console.log(`click editlanguage`);\n          setEditLanguage(true);\n        }\n        }>\n          <span class=\"icon far fa-flag\" role=\"presentation\"></span>\n          <span class=\"button__label\">{props.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n        </button >\n        {editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: CMLanguage | null) => {\n          if (lang)\n            backend.setLanguage(lang);\n          setEditLanguage(false);\n        }} /> : null}\n      </>;\n    return <LoginHeader buttons={buttons} />;\n  }\n\n  return <Fragment>\n    {renderStartScreenHeader()}\n    <div class=\"cm-ceremonybody cm-ceremonybody--resetpassword\">\n      <h2>{getTid(\"ceremonymedia:webdesigns.site.js.account.passwordsettings\")}</h2>\n      <ResetPassword ed={props.ed} verifier={props.verifier} />;\n    </div>\n  </Fragment>;\n}\n\nexport class ResetPassword extends Component<{\n  ed: string;\n  verifier: string;\n}, {\n  password: string;\n  passwordRepeat: string;\n  error: string;\n}> {\n  constructor() {\n    super();\n    this.state = { password: \"\", passwordRepeat: \"\", error: \"\" };\n  }\n\n  onResetPassword = async (e: Event) => {\n    e.preventDefault();\n\n    using spinner = new Spinner;\n    void (spinner); //we're not using the name but you can't use using without a varname..\n\n    // FIXME: toont \"The link you followed has expired\" melding direct in plaats van dat de \"doPasswordReset\" dit teruggeeft als error\n\n    if (this.state.password !== this.state.passwordRepeat) {\n      this.setState({ error: getTid(\"ceremonymedia:webdesigns.site.js.account.passwordsdontmatch\") });\n      return;\n    }\n\n    this.setState({ error: \"\" });\n\n    const result = await backend.doPasswordReset(this.props.ed, this.props.verifier, this.state.password);\n    if (result.success) {\n      const url = new URL(location.href);\n      url.searchParams.delete(\"wrd_pwdaction\");\n      url.searchParams.delete(\"_ed\");\n      url.searchParams.delete(\"verifier\");\n      location.href = url.toString();\n    } else {\n      // FIXME: toon de error in de huidige taal\n      this.setState({ error: result.message });\n    }\n  };\n\n  render() {\n    return <form class=\"cm-form cm-loginform\"\n      aria-label={getTid(\"ceremonymedia:webdesigns.site.js.account.passwordsettings\")}\n      onSubmit={this.onResetPassword}>\n\n      {this.state.error ? <div class=\"cm-loginform__error\" aria-live=\"assertive\"><span class=\"icon fa fa-exclamation-triangle\" role=\"presentation\"></span>{this.state.error}</div> : null}\n\n      <div class=\"cm-form__itemlist\">\n        <div class=\"cm-form__item\">\n          <label for=\"cm-loginform-password\">{getTid(\"ceremonymedia:webdesigns.site.js.account.password\")}</label>\n          <input id=\"cm-loginform-password\" type=\"password\" value={this.state.password} onInput={e => this.setState({ password: e.currentTarget.value })} autocomplete=\"new-password\" required />\n        </div>\n        <div class=\"cm-form__item\">\n          <label for=\"cm-loginform-password-repeat\">{getTid(\"ceremonymedia:webdesigns.site.js.account.passwordrepeat\")}</label>\n          <input id=\"cm-loginform-password-repeat\" type=\"password\" value={this.state.passwordRepeat} onInput={e => this.setState({ passwordRepeat: e.currentTarget.value })} autocomplete=\"new-password\" required />\n        </div>\n      </div>\n\n      <div class=\"cm-form__buttonbar\">\n        <button id=\"cm-resetform__resetbutton\" class=\"cm-resetform__resetbutton wh-button-solid\"\n          type=\"submit\">{getTid(\"ceremonymedia:webdesigns.site.js.account.setpassword\")}</button>\n      </div>\n\n    </form>;\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Fragment } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { backend } from \"./editor\";\nimport { Spinner } from \"./components\";\nimport { useSimpleScreen } from \"../../frontend/components/simplescreen\";\nimport { FormDialog, type FormFormat, type FormResult } from \"../../frontend/components/form\";\n\nimport \"./access.scss\";\nimport { getTid } from \"@webhare/gettid\";\n\n\ntype collaboratortype =\n  {\n    firstName: string;\n    lastName: string;\n    email: string;\n    accessLevel: string;\n  };\n\n\nexport function AccessDialog({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {\n  const [addCollaborator, setAddCollaborator] = useState(false);\n  const [collaborators, setCollaborators] = useState(new Array<{ firstName: string; lastName: string; email: string; accessLevel: string }>());\n  const [liveLink, setliveLink] = useState<{ link: string; code: string } | null>(null);\n\n  async function updateCollaborators() {\n    if (isOpen) {\n      backend.listCollaborators().then(res => {\n        console.log(`listed collaborators:`, res);\n        setCollaborators(res);\n      });\n      backend.getLiveLink().then(res => setliveLink(res));\n    }\n  }\n\n  // auto-update the collaborators when the dialog is opened or the addCollaborator dialog opens or closes\n  useEffect(() => void updateCollaborators(), [isOpen, addCollaborator]);\n\n  const { runSimpleScreen, SimpleScreen } = useSimpleScreen();\n\n  //const [feedback, setFeedback] = useState<{ message: string; type: SimpleScreenProps[\"type\"]; onClose?: SimpleScreenProps[\"onClose\"] } | null>(null);\n\n\n  function renderPersons(collaboratoritems: collaboratortype[]) {\n    return <>\n      {collaboratoritems.map(collaborator => [\n        <div class=\"accesslist__item\">\n\n          <a href={\"mailto:\" + collaborator.email} target=\"_blank\" rel=\"noreferrer\">\n            <span class=\"icon far fa-envelope\" role=\"presentation\"></span>\n            <span class=\"accesslist__item__name\">\n              {(collaborator.firstName !== \"\" && collaborator.lastName !== \"\")\n                ? collaborator.firstName + \" \" + collaborator.lastName\n                : collaborator.email}\n            </span>\n          </a>\n\n          {collaborator.accessLevel !== \"organizer\" ?\n            <button type=\"button\" class=\"collaborator__removebutton\"\n              aria-label={getTid(\"ceremonymedia:webdesigns.site.js.buttons.delete\")}\n              onClick={evt => removeCollaborator(collaborator.email, evt)}>\n              <span class=\"icon far fa-trash-alt\"></span>\n            </button>\n            : <span></span>}\n\n        </div>\n\n      ]).flat()\n      }\n    </>;\n  }\n\n  async function removeCollaborator(email: string, evt: Event) {\n    evt.stopPropagation();\n    evt.preventDefault();\n\n    await runSimpleScreen(\"question\", getTid(\"ceremonymedia:webdesigns.site.js.access.sureremovecollaborator\", email), {\n      async onClick(answer) {\n        // Keep the simple screen open while processing\n        if (answer === \"yes\") {\n          let result: boolean;\n          {\n            using spinner = new Spinner;\n            void (spinner); //we're not using the name but you can't use using without a varname..\n            result = await backend.removeCollaboratorAccess(email);\n            if (result)\n              await updateCollaborators();\n          }\n          // the following overwrite the previous simple screen\n          if (result)\n            await runSimpleScreen(\"info\", getTid(\"ceremonymedia:webdesigns.site.js.access.removedcollaborator\", email));\n          else\n            await runSimpleScreen(\"error\", getTid(\"ceremonymedia:webdesigns.site.js.access.removecollaboratorfailed\", email));\n        }\n      },\n    });\n  }\n\n  const collaborators_normal = collaborators.filter(collaboration => collaboration.accessLevel !== \"organizer\");\n  /*\n    function renderResultPage(formresult: { }}) {\n      return <><div class=\"accesslist-info\">Dit is een test</div></>;\n\n      return <>\n        <div class=\"accesslist-info\">\n          <p>Je hebt {formresult.firstName} {formresult.lastName} uitgenodigd om samen te werken aan het samen stellen van de ceremonie.</p>\n          <p><b>{formresult.firstName}</b> ontvang nu een mail om een account aan te maken.\n            Niet ontvangen? Vraag of <b>{formresult.firstName}</b> ook de spambox heeft gecheckt.</p>\n        </div>\n      </>;\n    }\n  */\n  return (\n    <ModalDialog\n      isOpen={isOpen}\n      onClose={onClose}\n      class=\"cm-accessdialog\"\n      title={getTid(\"ceremonymedia:webdesigns.site.js.access.title\")}\n      footerContent={\n        <div class=\"cm-buttonbar__group access__list__buttons\">\n          <button class=\"wh-button-textual\" onClick={onClose}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n          <button class=\"wh-button-solid wh-button-default\" onClick={() => setAddCollaborator(true)}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.addperson\")}</button>\n        </div>}\n      subDialogs={\n        <>\n          <AddCollaboratorDialog isOpen={addCollaborator} onClose={() => setAddCollaborator(false)} />\n          <SimpleScreen />\n        </>}>\n\n      <div class=\"cm-accessdialog__panel\">\n        <h3>{getTid(\"ceremonymedia:webdesigns.site.js.access.organizers\")}:</h3>\n\n        <div class=\"accesslist\">\n          {renderPersons(collaborators.filter(collaboration => collaboration.accessLevel === \"organizer\"))}\n        </div>\n      </div>\n      {liveLink &&\n        <>\n          <div class=\"cm-accessdialog__panel\">\n            <h3>{getTid(\"ceremonymedia:webdesigns.site.js.access.liveurl\")}:</h3>\n            <a href={liveLink.link} target=\"_blank\" rel=\"noreferrer\">{liveLink.link}</a>\n          </div>\n          <div class=\"cm-accessdialog__panel\">\n            <h3>{getTid(\"ceremonymedia:webdesigns.site.js.access.livestreamcode\")}:</h3>\n            <span>{liveLink.code}</span>\n          </div>\n        </>\n      }\n      <div class=\"cm-accessdialog__panel\">\n        <h3>{getTid(\"ceremonymedia:webdesigns.site.js.access.collaborators\")}</h3>\n\n        {collaborators_normal.length === 0\n          ?\n          <div class=\"accesslist-info\">\n            {getTid(\"ceremonymedia:webdesigns.site.js.access.info\")}\n          </div>\n          :\n          <div class=\"accesslist\">\n            {renderPersons(collaborators_normal)}\n          </div>\n        }\n      </div>\n    </ModalDialog>\n  );\n}\n\n\n\n\n\nconst addCollaboratorForm = {\n  title: getTid(\"ceremonymedia:webdesigns.site.js.addcollaborator.title\"),\n  fields: [\n    { prop: \"firstName\", type: \"string\", label: getTid(\"ceremonymedia:webdesigns.site.js.formfields.firstname\") },\n    { prop: \"lastName\", type: \"string\", label: getTid(\"ceremonymedia:webdesigns.site.js.formfields.lastname\") },\n    { prop: \"email\", type: \"email\", label: getTid(\"ceremonymedia:webdesigns.site.js.formfields.email\") },\n  ] as const,\n  buttons: [{ tid: \"cancel\", tag: \"cancel\", display: \"textual\", validate: false }, { xtitle: getTid(\"ceremonymedia:webdesigns.site.js.addcollaborator.invite\"), tag: \"add\", display: \"solid\" }]\n} as const satisfies FormFormat;\n\nexport function AddCollaboratorDialog({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {\n\n  const { runSimpleScreen, SimpleScreen } = useSimpleScreen();\n\n  // renderResultPage={renderResultPage}\n  return <FormDialog isOpen={isOpen} dialogname=\"addcollaborator\" form={addCollaboratorForm} onButton={handleDialogResult} onCancel={onClose}\n    subDialogs={<><SimpleScreen /></>} />;\n\n  async function handleDialogResult(result: FormResult<typeof addCollaboratorForm>) {\n\n    if (result.button === \"cancel\")\n      onClose();\n    else { // \"add\"\n      // using spinner = new Spinner;\n      // void (spinner); //we're not using the name but you can't use using without a varname..\n\n      await backend.inviteCollaborator({ firstName: result.fields.firstName, lastName: result.fields.lastName, email: result.fields.email });\n\n      const successpage =\n        <>\n          <div class=\"accesslist-info\">\n            <p>{getTid(\"ceremonymedia:webdesigns.site.js.access.invitedcollaborator-p1\", [result.fields.firstName, result.fields.lastName], { render: h })}</p>\n            <p>{getTid(\"ceremonymedia:webdesigns.site.js.access.invitedcollaborator-p2\", [result.fields.firstName, result.fields.lastName], { render: h })}</p>\n          </div>\n        </>;\n\n      // result.showResultPage(renderResultPage(result));\n      await runSimpleScreen(\"info\", successpage, {\n        async onClick(answer) {\n          onClose();\n        },\n      });\n    }\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Fragment } from \"preact\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { backend } from \"./editor\";\nimport { getTid } from \"@webhare/gettid/src/internal\";\n\n\n\nexport function AccountDialog({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) {\n\n  // const { runSimpleScreen, SimpleScreen } = useSimpleScreen();\n\n  const user = backend.getUserInfo();\n  console.info(\"USERDATA\", user);\n\n  if (!user)\n    return <></>;\n\n  return <ModalDialog\n    isOpen={isOpen}\n    onClose={onClose}\n    class=\"cm-accountdialog\"\n    title={getTid(\"ceremonymedia:webdesigns.site.js.myaccount.title\")}\n    footerContent={\n      <div class=\"cm-buttonbar__group access__list__buttons\">\n        <button class=\"wh-button-textual\" onClick={onClose}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.close\")}</button>\n        <button class=\"wh-button-solid\" id=\"logoutbutton\" onClick={() => backend.logout()}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.logout\")}<span class=\"icon fas fa-sign-out-alt\" role=\"presentation\"></span></button>\n      </div>}\n    subDialogs={\n      <>\n        {/* <SimpleScreen /> */}\n      </>}>\n\n\n    <div class=\"cm-accessdialog__panel\">\n      {/* <h3>Gebruikers</h3> */}\n\n      <div class=\"accesslist-info\">\n        <h4>{user.firstName} {user.lastName}</h4>\n        {user.email}\n        {/*\n        <button type=\"button\" class=\"wh-button-textual cm-accountdialog__editaccountbutton\">\n          <span class=\"icon far fa-user-edit\" role=\"presentation\"></span>\n          Wijzig mijn gegevens</button>\n */}\n      </div>\n\n    </div>\n  </ModalDialog>;\n}\n","// An named symbol/brand for detecting Signal instances even when they weren't\n// created using the same signals library version.\nconst BRAND_SYMBOL = Symbol.for(\"preact-signals\");\n\n// Flags for Computed and Effect.\nconst RUNNING = 1 << 0;\nconst NOTIFIED = 1 << 1;\nconst OUTDATED = 1 << 2;\nconst DISPOSED = 1 << 3;\nconst HAS_ERROR = 1 << 4;\nconst TRACKING = 1 << 5;\n\n// A linked list node used to track dependencies (sources) and dependents (targets).\n// Also used to remember the source's last version number that the target saw.\ntype Node = {\n\t// A source whose value the target depends on.\n\t_source: Signal;\n\t_prevSource?: Node;\n\t_nextSource?: Node;\n\n\t// A target that depends on the source and should be notified when the source changes.\n\t_target: Computed | Effect;\n\t_prevTarget?: Node;\n\t_nextTarget?: Node;\n\n\t// The version number of the source that target has last seen. We use version numbers\n\t// instead of storing the source value, because source values can take arbitrary amount\n\t// of memory, and computeds could hang on to them forever because they're lazily evaluated.\n\t// Use the special value -1 to mark potentially unused but recyclable nodes.\n\t_version: number;\n\n\t// Used to remember & roll back the source's previous `._node` value when entering &\n\t// exiting a new evaluation context.\n\t_rollbackNode?: Node;\n};\n\nfunction startBatch() {\n\tbatchDepth++;\n}\n\nfunction endBatch() {\n\tif (batchDepth > 1) {\n\t\tbatchDepth--;\n\t\treturn;\n\t}\n\n\tlet error: unknown;\n\tlet hasError = false;\n\n\twhile (batchedEffect !== undefined) {\n\t\tlet effect: Effect | undefined = batchedEffect;\n\t\tbatchedEffect = undefined;\n\n\t\tbatchIteration++;\n\n\t\twhile (effect !== undefined) {\n\t\t\tconst next: Effect | undefined = effect._nextBatchedEffect;\n\t\t\teffect._nextBatchedEffect = undefined;\n\t\t\teffect._flags &= ~NOTIFIED;\n\n\t\t\tif (!(effect._flags & DISPOSED) && needsToRecompute(effect)) {\n\t\t\t\ttry {\n\t\t\t\t\teffect._callback();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tif (!hasError) {\n\t\t\t\t\t\terror = err;\n\t\t\t\t\t\thasError = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\teffect = next;\n\t\t}\n\t}\n\tbatchIteration = 0;\n\tbatchDepth--;\n\n\tif (hasError) {\n\t\tthrow error;\n\t}\n}\n\n/**\n * Combine multiple value updates into one \"commit\" at the end of the provided callback.\n *\n * Batches can be nested and changes are only flushed once the outermost batch callback\n * completes.\n *\n * Accessing a signal that has been modified within a batch will reflect its updated\n * value.\n *\n * @param fn The callback function.\n * @returns The value returned by the callback.\n */\nfunction batch<T>(fn: () => T): T {\n\tif (batchDepth > 0) {\n\t\treturn fn();\n\t}\n\t/*@__INLINE__**/ startBatch();\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tendBatch();\n\t}\n}\n\n// Currently evaluated computed or effect.\nlet evalContext: Computed | Effect | undefined = undefined;\n\n/**\n * Run a callback function that can access signal values without\n * subscribing to the signal updates.\n *\n * @param fn The callback function.\n * @returns The value returned by the callback.\n */\nfunction untracked<T>(fn: () => T): T {\n\tconst prevContext = evalContext;\n\tevalContext = undefined;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tevalContext = prevContext;\n\t}\n}\n\n// Effects collected into a batch.\nlet batchedEffect: Effect | undefined = undefined;\nlet batchDepth = 0;\nlet batchIteration = 0;\n\n// A global version number for signals, used for fast-pathing repeated\n// computed.peek()/computed.value calls when nothing has changed globally.\nlet globalVersion = 0;\n\nfunction addDependency(signal: Signal): Node | undefined {\n\tif (evalContext === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet node = signal._node;\n\tif (node === undefined || node._target !== evalContext) {\n\t\t/**\n\t\t * `signal` is a new dependency. Create a new dependency node, and set it\n\t\t * as the tail of the current context's dependency list. e.g:\n\t\t *\n\t\t * { A <-> B       }\n\t\t *         ↑     ↑\n\t\t *        tail  node (new)\n\t\t *               ↓\n\t\t * { A <-> B <-> C }\n\t\t *               ↑\n\t\t *              tail (evalContext._sources)\n\t\t */\n\t\tnode = {\n\t\t\t_version: 0,\n\t\t\t_source: signal,\n\t\t\t_prevSource: evalContext._sources,\n\t\t\t_nextSource: undefined,\n\t\t\t_target: evalContext,\n\t\t\t_prevTarget: undefined,\n\t\t\t_nextTarget: undefined,\n\t\t\t_rollbackNode: node,\n\t\t};\n\n\t\tif (evalContext._sources !== undefined) {\n\t\t\tevalContext._sources._nextSource = node;\n\t\t}\n\t\tevalContext._sources = node;\n\t\tsignal._node = node;\n\n\t\t// Subscribe to change notifications from this dependency if we're in an effect\n\t\t// OR evaluating a computed signal that in turn has subscribers.\n\t\tif (evalContext._flags & TRACKING) {\n\t\t\tsignal._subscribe(node);\n\t\t}\n\t\treturn node;\n\t} else if (node._version === -1) {\n\t\t// `signal` is an existing dependency from a previous evaluation. Reuse it.\n\t\tnode._version = 0;\n\n\t\t/**\n\t\t * If `node` is not already the current tail of the dependency list (i.e.\n\t\t * there is a next node in the list), then make the `node` the new tail. e.g:\n\t\t *\n\t\t * { A <-> B <-> C <-> D }\n\t\t *         ↑           ↑\n\t\t *        node   ┌─── tail (evalContext._sources)\n\t\t *         └─────│─────┐\n\t\t *               ↓     ↓\n\t\t * { A <-> C <-> D <-> B }\n\t\t *                     ↑\n\t\t *                    tail (evalContext._sources)\n\t\t */\n\t\tif (node._nextSource !== undefined) {\n\t\t\tnode._nextSource._prevSource = node._prevSource;\n\n\t\t\tif (node._prevSource !== undefined) {\n\t\t\t\tnode._prevSource._nextSource = node._nextSource;\n\t\t\t}\n\n\t\t\tnode._prevSource = evalContext._sources;\n\t\t\tnode._nextSource = undefined;\n\n\t\t\tevalContext._sources!._nextSource = node;\n\t\t\tevalContext._sources = node;\n\t\t}\n\n\t\t// We can assume that the currently evaluated effect / computed signal is already\n\t\t// subscribed to change notifications from `signal` if needed.\n\t\treturn node;\n\t}\n\treturn undefined;\n}\n\n/**\n * The base class for plain and computed signals.\n */\n// @ts-ignore: \"Cannot redeclare exported variable 'Signal'.\"\n//\n// A function with the same name is defined later, so we need to ignore TypeScript's\n// warning about a redeclared variable.\n//\n// The class is declared here, but later implemented with ES5-style prototypes.\n// This enables better control of the transpiled output size.\ndeclare class Signal<T = any> {\n\t/** @internal */\n\t_value: unknown;\n\n\t/**\n\t * @internal\n\t * Version numbers should always be >= 0, because the special value -1 is used\n\t * by Nodes to signify potentially unused but recyclable nodes.\n\t */\n\t_version: number;\n\n\t/** @internal */\n\t_node?: Node;\n\n\t/** @internal */\n\t_targets?: Node;\n\n\tconstructor(value?: T);\n\n\t/** @internal */\n\t_refresh(): boolean;\n\n\t/** @internal */\n\t_subscribe(node: Node): void;\n\n\t/** @internal */\n\t_unsubscribe(node: Node): void;\n\n\tsubscribe(fn: (value: T) => void): () => void;\n\n\tvalueOf(): T;\n\n\ttoString(): string;\n\n\ttoJSON(): T;\n\n\tpeek(): T;\n\n\tbrand: typeof BRAND_SYMBOL;\n\n\tget value(): T;\n\tset value(value: T);\n}\n\n/** @internal */\n// @ts-ignore: \"Cannot redeclare exported variable 'Signal'.\"\n//\n// A class with the same name has already been declared, so we need to ignore\n// TypeScript's warning about a redeclared variable.\n//\n// The previously declared class is implemented here with ES5-style prototypes.\n// This enables better control of the transpiled output size.\nfunction Signal(this: Signal, value?: unknown) {\n\tthis._value = value;\n\tthis._version = 0;\n\tthis._node = undefined;\n\tthis._targets = undefined;\n}\n\nSignal.prototype.brand = BRAND_SYMBOL;\n\nSignal.prototype._refresh = function () {\n\treturn true;\n};\n\nSignal.prototype._subscribe = function (node) {\n\tif (this._targets !== node && node._prevTarget === undefined) {\n\t\tnode._nextTarget = this._targets;\n\t\tif (this._targets !== undefined) {\n\t\t\tthis._targets._prevTarget = node;\n\t\t}\n\t\tthis._targets = node;\n\t}\n};\n\nSignal.prototype._unsubscribe = function (node) {\n\t// Only run the unsubscribe step if the signal has any subscribers to begin with.\n\tif (this._targets !== undefined) {\n\t\tconst prev = node._prevTarget;\n\t\tconst next = node._nextTarget;\n\t\tif (prev !== undefined) {\n\t\t\tprev._nextTarget = next;\n\t\t\tnode._prevTarget = undefined;\n\t\t}\n\t\tif (next !== undefined) {\n\t\t\tnext._prevTarget = prev;\n\t\t\tnode._nextTarget = undefined;\n\t\t}\n\t\tif (node === this._targets) {\n\t\t\tthis._targets = next;\n\t\t}\n\t}\n};\n\nSignal.prototype.subscribe = function (fn) {\n\treturn effect(() => {\n\t\tconst value = this.value;\n\n\t\tconst prevContext = evalContext;\n\t\tevalContext = undefined;\n\t\ttry {\n\t\t\tfn(value);\n\t\t} finally {\n\t\t\tevalContext = prevContext;\n\t\t}\n\t});\n};\n\nSignal.prototype.valueOf = function () {\n\treturn this.value;\n};\n\nSignal.prototype.toString = function () {\n\treturn this.value + \"\";\n};\n\nSignal.prototype.toJSON = function () {\n\treturn this.value;\n};\n\nSignal.prototype.peek = function () {\n\tconst prevContext = evalContext;\n\tevalContext = undefined;\n\ttry {\n\t\treturn this.value;\n\t} finally {\n\t\tevalContext = prevContext;\n\t}\n};\n\nObject.defineProperty(Signal.prototype, \"value\", {\n\tget(this: Signal) {\n\t\tconst node = addDependency(this);\n\t\tif (node !== undefined) {\n\t\t\tnode._version = this._version;\n\t\t}\n\t\treturn this._value;\n\t},\n\tset(this: Signal, value) {\n\t\tif (value !== this._value) {\n\t\t\tif (batchIteration > 100) {\n\t\t\t\tthrow new Error(\"Cycle detected\");\n\t\t\t}\n\n\t\t\tthis._value = value;\n\t\t\tthis._version++;\n\t\t\tglobalVersion++;\n\n\t\t\t/**@__INLINE__*/ startBatch();\n\t\t\ttry {\n\t\t\t\tfor (\n\t\t\t\t\tlet node = this._targets;\n\t\t\t\t\tnode !== undefined;\n\t\t\t\t\tnode = node._nextTarget\n\t\t\t\t) {\n\t\t\t\t\tnode._target._notify();\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tendBatch();\n\t\t\t}\n\t\t}\n\t},\n});\n\n/**\n * Create a new plain signal.\n *\n * @param value The initial value for the signal.\n * @returns A new signal.\n */\nexport function signal<T>(value: T): Signal<T>;\nexport function signal<T = undefined>(): Signal<T | undefined>;\nexport function signal<T>(value?: T): Signal<T> {\n\treturn new Signal(value);\n}\n\nfunction needsToRecompute(target: Computed | Effect): boolean {\n\t// Check the dependencies for changed values. The dependency list is already\n\t// in order of use. Therefore if multiple dependencies have changed values, only\n\t// the first used dependency is re-evaluated at this point.\n\tfor (\n\t\tlet node = target._sources;\n\t\tnode !== undefined;\n\t\tnode = node._nextSource\n\t) {\n\t\t// If there's a new version of the dependency before or after refreshing,\n\t\t// or the dependency has something blocking it from refreshing at all (e.g. a\n\t\t// dependency cycle), then we need to recompute.\n\t\tif (\n\t\t\tnode._source._version !== node._version ||\n\t\t\t!node._source._refresh() ||\n\t\t\tnode._source._version !== node._version\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t}\n\t// If none of the dependencies have changed values since last recompute then\n\t// there's no need to recompute.\n\treturn false;\n}\n\nfunction prepareSources(target: Computed | Effect) {\n\t/**\n\t * 1. Mark all current sources as re-usable nodes (version: -1)\n\t * 2. Set a rollback node if the current node is being used in a different context\n\t * 3. Point 'target._sources' to the tail of the doubly-linked list, e.g:\n\t *\n\t *    { undefined <- A <-> B <-> C -> undefined }\n\t *                   ↑           ↑\n\t *                   │           └──────┐\n\t * target._sources = A; (node is head)  │\n\t *                   ↓                  │\n\t * target._sources = C; (node is tail) ─┘\n\t */\n\tfor (\n\t\tlet node = target._sources;\n\t\tnode !== undefined;\n\t\tnode = node._nextSource\n\t) {\n\t\tconst rollbackNode = node._source._node;\n\t\tif (rollbackNode !== undefined) {\n\t\t\tnode._rollbackNode = rollbackNode;\n\t\t}\n\t\tnode._source._node = node;\n\t\tnode._version = -1;\n\n\t\tif (node._nextSource === undefined) {\n\t\t\ttarget._sources = node;\n\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction cleanupSources(target: Computed | Effect) {\n\tlet node = target._sources;\n\tlet head = undefined;\n\n\t/**\n\t * At this point 'target._sources' points to the tail of the doubly-linked list.\n\t * It contains all existing sources + new sources in order of use.\n\t * Iterate backwards until we find the head node while dropping old dependencies.\n\t */\n\twhile (node !== undefined) {\n\t\tconst prev = node._prevSource;\n\n\t\t/**\n\t\t * The node was not re-used, unsubscribe from its change notifications and remove itself\n\t\t * from the doubly-linked list. e.g:\n\t\t *\n\t\t * { A <-> B <-> C }\n\t\t *         ↓\n\t\t *    { A <-> C }\n\t\t */\n\t\tif (node._version === -1) {\n\t\t\tnode._source._unsubscribe(node);\n\n\t\t\tif (prev !== undefined) {\n\t\t\t\tprev._nextSource = node._nextSource;\n\t\t\t}\n\t\t\tif (node._nextSource !== undefined) {\n\t\t\t\tnode._nextSource._prevSource = prev;\n\t\t\t}\n\t\t} else {\n\t\t\t/**\n\t\t\t * The new head is the last node seen which wasn't removed/unsubscribed\n\t\t\t * from the doubly-linked list. e.g:\n\t\t\t *\n\t\t\t * { A <-> B <-> C }\n\t\t\t *   ↑     ↑     ↑\n\t\t\t *   │     │     └ head = node\n\t\t\t *   │     └ head = node\n\t\t\t *   └ head = node\n\t\t\t */\n\t\t\thead = node;\n\t\t}\n\n\t\tnode._source._node = node._rollbackNode;\n\t\tif (node._rollbackNode !== undefined) {\n\t\t\tnode._rollbackNode = undefined;\n\t\t}\n\n\t\tnode = prev;\n\t}\n\n\ttarget._sources = head;\n}\n\ndeclare class Computed<T = any> extends Signal<T> {\n\t_fn: () => T;\n\t_sources?: Node;\n\t_globalVersion: number;\n\t_flags: number;\n\n\tconstructor(fn: () => T);\n\n\t_notify(): void;\n\tget value(): T;\n}\n\nfunction Computed(this: Computed, fn: () => unknown) {\n\tSignal.call(this, undefined);\n\n\tthis._fn = fn;\n\tthis._sources = undefined;\n\tthis._globalVersion = globalVersion - 1;\n\tthis._flags = OUTDATED;\n}\n\nComputed.prototype = new Signal() as Computed;\n\nComputed.prototype._refresh = function () {\n\tthis._flags &= ~NOTIFIED;\n\n\tif (this._flags & RUNNING) {\n\t\treturn false;\n\t}\n\n\t// If this computed signal has subscribed to updates from its dependencies\n\t// (TRACKING flag set) and none of them have notified about changes (OUTDATED\n\t// flag not set), then the computed value can't have changed.\n\tif ((this._flags & (OUTDATED | TRACKING)) === TRACKING) {\n\t\treturn true;\n\t}\n\tthis._flags &= ~OUTDATED;\n\n\tif (this._globalVersion === globalVersion) {\n\t\treturn true;\n\t}\n\tthis._globalVersion = globalVersion;\n\n\t// Mark this computed signal running before checking the dependencies for value\n\t// changes, so that the RUNNING flag can be used to notice cyclical dependencies.\n\tthis._flags |= RUNNING;\n\tif (this._version > 0 && !needsToRecompute(this)) {\n\t\tthis._flags &= ~RUNNING;\n\t\treturn true;\n\t}\n\n\tconst prevContext = evalContext;\n\ttry {\n\t\tprepareSources(this);\n\t\tevalContext = this;\n\t\tconst value = this._fn();\n\t\tif (\n\t\t\tthis._flags & HAS_ERROR ||\n\t\t\tthis._value !== value ||\n\t\t\tthis._version === 0\n\t\t) {\n\t\t\tthis._value = value;\n\t\t\tthis._flags &= ~HAS_ERROR;\n\t\t\tthis._version++;\n\t\t}\n\t} catch (err) {\n\t\tthis._value = err;\n\t\tthis._flags |= HAS_ERROR;\n\t\tthis._version++;\n\t}\n\tevalContext = prevContext;\n\tcleanupSources(this);\n\tthis._flags &= ~RUNNING;\n\treturn true;\n};\n\nComputed.prototype._subscribe = function (node) {\n\tif (this._targets === undefined) {\n\t\tthis._flags |= OUTDATED | TRACKING;\n\n\t\t// A computed signal subscribes lazily to its dependencies when it\n\t\t// gets its first subscriber.\n\t\tfor (\n\t\t\tlet node = this._sources;\n\t\t\tnode !== undefined;\n\t\t\tnode = node._nextSource\n\t\t) {\n\t\t\tnode._source._subscribe(node);\n\t\t}\n\t}\n\tSignal.prototype._subscribe.call(this, node);\n};\n\nComputed.prototype._unsubscribe = function (node) {\n\t// Only run the unsubscribe step if the computed signal has any subscribers.\n\tif (this._targets !== undefined) {\n\t\tSignal.prototype._unsubscribe.call(this, node);\n\n\t\t// Computed signal unsubscribes from its dependencies when it loses its last subscriber.\n\t\t// This makes it possible for unreferences subgraphs of computed signals to get garbage collected.\n\t\tif (this._targets === undefined) {\n\t\t\tthis._flags &= ~TRACKING;\n\n\t\t\tfor (\n\t\t\t\tlet node = this._sources;\n\t\t\t\tnode !== undefined;\n\t\t\t\tnode = node._nextSource\n\t\t\t) {\n\t\t\t\tnode._source._unsubscribe(node);\n\t\t\t}\n\t\t}\n\t}\n};\n\nComputed.prototype._notify = function () {\n\tif (!(this._flags & NOTIFIED)) {\n\t\tthis._flags |= OUTDATED | NOTIFIED;\n\n\t\tfor (\n\t\t\tlet node = this._targets;\n\t\t\tnode !== undefined;\n\t\t\tnode = node._nextTarget\n\t\t) {\n\t\t\tnode._target._notify();\n\t\t}\n\t}\n};\n\nObject.defineProperty(Computed.prototype, \"value\", {\n\tget(this: Computed) {\n\t\tif (this._flags & RUNNING) {\n\t\t\tthrow new Error(\"Cycle detected\");\n\t\t}\n\t\tconst node = addDependency(this);\n\t\tthis._refresh();\n\t\tif (node !== undefined) {\n\t\t\tnode._version = this._version;\n\t\t}\n\t\tif (this._flags & HAS_ERROR) {\n\t\t\tthrow this._value;\n\t\t}\n\t\treturn this._value;\n\t},\n});\n\n/**\n * An interface for read-only signals.\n */\ninterface ReadonlySignal<T = any> {\n\treadonly value: T;\n\tpeek(): T;\n\n\tsubscribe(fn: (value: T) => void): () => void;\n\tvalueOf(): T;\n\ttoString(): string;\n\ttoJSON(): T;\n\tbrand: typeof BRAND_SYMBOL;\n}\n\n/**\n * Create a new signal that is computed based on the values of other signals.\n *\n * The returned computed signal is read-only, and its value is automatically\n * updated when any signals accessed from within the callback function change.\n *\n * @param fn The effect callback.\n * @returns A new read-only signal.\n */\nfunction computed<T>(fn: () => T): ReadonlySignal<T> {\n\treturn new Computed(fn);\n}\n\nfunction cleanupEffect(effect: Effect) {\n\tconst cleanup = effect._cleanup;\n\teffect._cleanup = undefined;\n\n\tif (typeof cleanup === \"function\") {\n\t\t/*@__INLINE__**/ startBatch();\n\n\t\t// Run cleanup functions always outside of any context.\n\t\tconst prevContext = evalContext;\n\t\tevalContext = undefined;\n\t\ttry {\n\t\t\tcleanup();\n\t\t} catch (err) {\n\t\t\teffect._flags &= ~RUNNING;\n\t\t\teffect._flags |= DISPOSED;\n\t\t\tdisposeEffect(effect);\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tevalContext = prevContext;\n\t\t\tendBatch();\n\t\t}\n\t}\n}\n\nfunction disposeEffect(effect: Effect) {\n\tfor (\n\t\tlet node = effect._sources;\n\t\tnode !== undefined;\n\t\tnode = node._nextSource\n\t) {\n\t\tnode._source._unsubscribe(node);\n\t}\n\teffect._fn = undefined;\n\teffect._sources = undefined;\n\n\tcleanupEffect(effect);\n}\n\nfunction endEffect(this: Effect, prevContext?: Computed | Effect) {\n\tif (evalContext !== this) {\n\t\tthrow new Error(\"Out-of-order effect\");\n\t}\n\tcleanupSources(this);\n\tevalContext = prevContext;\n\n\tthis._flags &= ~RUNNING;\n\tif (this._flags & DISPOSED) {\n\t\tdisposeEffect(this);\n\t}\n\tendBatch();\n}\n\ntype EffectFn = () => void | (() => void);\n\ndeclare class Effect {\n\t_fn?: EffectFn;\n\t_cleanup?: () => void;\n\t_sources?: Node;\n\t_nextBatchedEffect?: Effect;\n\t_flags: number;\n\n\tconstructor(fn: EffectFn);\n\n\t_callback(): void;\n\t_start(): () => void;\n\t_notify(): void;\n\t_dispose(): void;\n}\n\nfunction Effect(this: Effect, fn: EffectFn) {\n\tthis._fn = fn;\n\tthis._cleanup = undefined;\n\tthis._sources = undefined;\n\tthis._nextBatchedEffect = undefined;\n\tthis._flags = TRACKING;\n}\n\nEffect.prototype._callback = function () {\n\tconst finish = this._start();\n\ttry {\n\t\tif (this._flags & DISPOSED) return;\n\t\tif (this._fn === undefined) return;\n\n\t\tconst cleanup = this._fn();\n\t\tif (typeof cleanup === \"function\") {\n\t\t\tthis._cleanup = cleanup;\n\t\t}\n\t} finally {\n\t\tfinish();\n\t}\n};\n\nEffect.prototype._start = function () {\n\tif (this._flags & RUNNING) {\n\t\tthrow new Error(\"Cycle detected\");\n\t}\n\tthis._flags |= RUNNING;\n\tthis._flags &= ~DISPOSED;\n\tcleanupEffect(this);\n\tprepareSources(this);\n\n\t/*@__INLINE__**/ startBatch();\n\tconst prevContext = evalContext;\n\tevalContext = this;\n\treturn endEffect.bind(this, prevContext);\n};\n\nEffect.prototype._notify = function () {\n\tif (!(this._flags & NOTIFIED)) {\n\t\tthis._flags |= NOTIFIED;\n\t\tthis._nextBatchedEffect = batchedEffect;\n\t\tbatchedEffect = this;\n\t}\n};\n\nEffect.prototype._dispose = function () {\n\tthis._flags |= DISPOSED;\n\n\tif (!(this._flags & RUNNING)) {\n\t\tdisposeEffect(this);\n\t}\n};\n\n/**\n * Create an effect to run arbitrary code in response to signal changes.\n *\n * An effect tracks which signals are accessed within the given callback\n * function `fn`, and re-runs the callback when those signals change.\n *\n * The callback may return a cleanup function. The cleanup function gets\n * run once, either when the callback is next called or when the effect\n * gets disposed, whichever happens first.\n *\n * @param fn The effect callback.\n * @returns A function for disposing the effect.\n */\nfunction effect(fn: EffectFn): () => void {\n\tconst effect = new Effect(fn);\n\ttry {\n\t\teffect._callback();\n\t} catch (err) {\n\t\teffect._dispose();\n\t\tthrow err;\n\t}\n\t// Return a bound function instead of a wrapper like `() => effect._dispose()`,\n\t// because bound functions seem to be just as fast and take up a lot less memory.\n\treturn effect._dispose.bind(effect);\n}\n\nexport { computed, effect, batch, untracked, Signal, ReadonlySignal };\n","import { options, Component, isValidElement } from \"preact\";\nimport { useRef, useMemo, useEffect } from \"preact/hooks\";\nimport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n\tuntracked,\n} from \"@preact/signals-core\";\nimport {\n\tVNode,\n\tOptionsTypes,\n\tHookFn,\n\tEffect,\n\tPropertyUpdater,\n\tAugmentedComponent,\n\tAugmentedElement as Element,\n} from \"./internal\";\n\nexport {\n\tsignal,\n\tcomputed,\n\tbatch,\n\teffect,\n\tSignal,\n\ttype ReadonlySignal,\n\tuntracked,\n};\n\nconst HAS_PENDING_UPDATE = 1 << 0;\nconst HAS_HOOK_STATE = 1 << 1;\nconst HAS_COMPUTEDS = 1 << 2;\n\n// Install a Preact options hook\nfunction hook<T extends OptionsTypes>(hookName: T, hookFn: HookFn<T>) {\n\t// @ts-ignore-next-line private options hooks usage\n\toptions[hookName] = hookFn.bind(null, options[hookName] || (() => {}));\n}\n\nlet currentComponent: AugmentedComponent | undefined;\nlet finishUpdate: (() => void) | undefined;\n\nfunction setCurrentUpdater(updater?: Effect) {\n\t// end tracking for the current update:\n\tif (finishUpdate) finishUpdate();\n\t// start tracking the new update:\n\tfinishUpdate = updater && updater._start();\n}\n\nfunction createUpdater(update: () => void) {\n\tlet updater!: Effect;\n\teffect(function (this: Effect) {\n\t\tupdater = this;\n\t});\n\tupdater._callback = update;\n\treturn updater;\n}\n\n/** @todo This may be needed for complex prop value detection. */\n// function isSignalValue(value: any): value is Signal {\n// \tif (typeof value !== \"object\" || value == null) return false;\n// \tif (value instanceof Signal) return true;\n// \t// @TODO: uncomment this when we land Reactive (ideally behind a brand check)\n// \t// for (let i in value) if (value[i] instanceof Signal) return true;\n// \treturn false;\n// }\n\n/**\n * A wrapper component that renders a Signal directly as a Text node.\n * @todo: in Preact 11, just decorate Signal with `type:null`\n */\nfunction SignalValue(this: AugmentedComponent, { data }: { data: Signal }) {\n\t// hasComputeds.add(this);\n\n\t// Store the props.data signal in another signal so that\n\t// passing a new signal reference re-runs the text computed:\n\tconst currentSignal = useSignal(data);\n\tcurrentSignal.value = data;\n\n\tconst s = useMemo(() => {\n\t\t// mark the parent component as having computeds so it gets optimized\n\t\tlet v = this.__v;\n\t\twhile ((v = v.__!)) {\n\t\t\tif (v.__c) {\n\t\t\t\tv.__c._updateFlags |= HAS_COMPUTEDS;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tthis._updater!._callback = () => {\n\t\t\tif (isValidElement(s.peek()) || this.base?.nodeType !== 3) {\n\t\t\t\tthis._updateFlags |= HAS_PENDING_UPDATE;\n\t\t\t\tthis.setState({});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t(this.base as Text).data = s.peek();\n\t\t};\n\n\t\treturn computed(() => {\n\t\t\tlet data = currentSignal.value;\n\t\t\tlet s = data.value;\n\t\t\treturn s === 0 ? 0 : s === true ? \"\" : s || \"\";\n\t\t});\n\t}, []);\n\n\treturn s.value;\n}\nSignalValue.displayName = \"_st\";\n\nObject.defineProperties(Signal.prototype, {\n\tconstructor: { configurable: true, value: undefined },\n\ttype: { configurable: true, value: SignalValue },\n\tprops: {\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn { data: this };\n\t\t},\n\t},\n\t// Setting a VNode's _depth to 1 forces Preact to clone it before modifying:\n\t// https://github.com/preactjs/preact/blob/d7a433ee8463a7dc23a05111bb47de9ec729ad4d/src/diff/children.js#L77\n\t// @todo remove this for Preact 11\n\t__b: { configurable: true, value: 1 },\n});\n\n/** Inject low-level property/attribute bindings for Signals into Preact's diff */\nhook(OptionsTypes.DIFF, (old, vnode) => {\n\tif (typeof vnode.type === \"string\") {\n\t\tlet signalProps: Record<string, any> | undefined;\n\n\t\tlet props = vnode.props;\n\t\tfor (let i in props) {\n\t\t\tif (i === \"children\") continue;\n\n\t\t\tlet value = props[i];\n\t\t\tif (value instanceof Signal) {\n\t\t\t\tif (!signalProps) vnode.__np = signalProps = {};\n\t\t\t\tsignalProps[i] = value;\n\t\t\t\tprops[i] = value.peek();\n\t\t\t}\n\t\t}\n\t}\n\n\told(vnode);\n});\n\n/** Set up Updater before rendering a component */\nhook(OptionsTypes.RENDER, (old, vnode) => {\n\tsetCurrentUpdater();\n\n\tlet updater;\n\n\tlet component = vnode.__c;\n\tif (component) {\n\t\tcomponent._updateFlags &= ~HAS_PENDING_UPDATE;\n\n\t\tupdater = component._updater;\n\t\tif (updater === undefined) {\n\t\t\tcomponent._updater = updater = createUpdater(() => {\n\t\t\t\tcomponent._updateFlags |= HAS_PENDING_UPDATE;\n\t\t\t\tcomponent.setState({});\n\t\t\t});\n\t\t}\n\t}\n\n\tcurrentComponent = component;\n\tsetCurrentUpdater(updater);\n\told(vnode);\n});\n\n/** Finish current updater if a component errors */\nhook(OptionsTypes.CATCH_ERROR, (old, error, vnode, oldVNode) => {\n\tsetCurrentUpdater();\n\tcurrentComponent = undefined;\n\told(error, vnode, oldVNode);\n});\n\n/** Finish current updater after rendering any VNode */\nhook(OptionsTypes.DIFFED, (old, vnode) => {\n\tsetCurrentUpdater();\n\tcurrentComponent = undefined;\n\n\tlet dom: Element;\n\n\t// vnode._dom is undefined during string rendering,\n\t// so we use this to skip prop subscriptions during SSR.\n\tif (typeof vnode.type === \"string\" && (dom = vnode.__e as Element)) {\n\t\tlet props = vnode.__np;\n\t\tlet renderedProps = vnode.props;\n\t\tif (props) {\n\t\t\tlet updaters = dom._updaters;\n\t\t\tif (updaters) {\n\t\t\t\tfor (let prop in updaters) {\n\t\t\t\t\tlet updater = updaters[prop];\n\t\t\t\t\tif (updater !== undefined && !(prop in props)) {\n\t\t\t\t\t\tupdater._dispose();\n\t\t\t\t\t\t// @todo we could just always invoke _dispose() here\n\t\t\t\t\t\tupdaters[prop] = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tupdaters = {};\n\t\t\t\tdom._updaters = updaters;\n\t\t\t}\n\t\t\tfor (let prop in props) {\n\t\t\t\tlet updater = updaters[prop];\n\t\t\t\tlet signal = props[prop];\n\t\t\t\tif (updater === undefined) {\n\t\t\t\t\tupdater = createPropUpdater(dom, prop, signal, renderedProps);\n\t\t\t\t\tupdaters[prop] = updater;\n\t\t\t\t} else {\n\t\t\t\t\tupdater._update(signal, renderedProps);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\told(vnode);\n});\n\nfunction createPropUpdater(\n\tdom: Element,\n\tprop: string,\n\tpropSignal: Signal,\n\tprops: Record<string, any>\n): PropertyUpdater {\n\tconst setAsProperty =\n\t\tprop in dom &&\n\t\t// SVG elements need to go through `setAttribute` because they\n\t\t// expect things like SVGAnimatedTransformList instead of strings.\n\t\t// @ts-ignore\n\t\tdom.ownerSVGElement === undefined;\n\n\tconst changeSignal = signal(propSignal);\n\treturn {\n\t\t_update: (newSignal: Signal, newProps: typeof props) => {\n\t\t\tchangeSignal.value = newSignal;\n\t\t\tprops = newProps;\n\t\t},\n\t\t_dispose: effect(() => {\n\t\t\tconst value = changeSignal.value.value;\n\t\t\t// If Preact just rendered this value, don't render it again:\n\t\t\tif (props[prop] === value) return;\n\t\t\tprops[prop] = value;\n\t\t\tif (setAsProperty) {\n\t\t\t\t// @ts-ignore-next-line silly\n\t\t\t\tdom[prop] = value;\n\t\t\t} else if (value) {\n\t\t\t\tdom.setAttribute(prop, value);\n\t\t\t} else {\n\t\t\t\tdom.removeAttribute(prop);\n\t\t\t}\n\t\t}),\n\t};\n}\n\n/** Unsubscribe from Signals when unmounting components/vnodes */\nhook(OptionsTypes.UNMOUNT, (old, vnode: VNode) => {\n\tif (typeof vnode.type === \"string\") {\n\t\tlet dom = vnode.__e as Element | undefined;\n\t\t// vnode._dom is undefined during string rendering\n\t\tif (dom) {\n\t\t\tconst updaters = dom._updaters;\n\t\t\tif (updaters) {\n\t\t\t\tdom._updaters = undefined;\n\t\t\t\tfor (let prop in updaters) {\n\t\t\t\t\tlet updater = updaters[prop];\n\t\t\t\t\tif (updater) updater._dispose();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tlet component = vnode.__c;\n\t\tif (component) {\n\t\t\tconst updater = component._updater;\n\t\t\tif (updater) {\n\t\t\t\tcomponent._updater = undefined;\n\t\t\t\tupdater._dispose();\n\t\t\t}\n\t\t}\n\t}\n\told(vnode);\n});\n\n/** Mark components that use hook state so we can skip sCU optimization. */\nhook(OptionsTypes.HOOK, (old, component, index, type) => {\n\tif (type < 3 || type === 9)\n\t\t(component as AugmentedComponent)._updateFlags |= HAS_HOOK_STATE;\n\told(component, index, type);\n});\n\n/**\n * Auto-memoize components that use Signals/Computeds.\n * Note: Does _not_ optimize components that use hook/class state.\n */\nComponent.prototype.shouldComponentUpdate = function (\n\tthis: AugmentedComponent,\n\tprops,\n\tstate\n) {\n\t// @todo: Once preactjs/preact#3671 lands, this could just use `currentUpdater`:\n\tconst updater = this._updater;\n\tconst hasSignals = updater && updater._sources !== undefined;\n\n\t// let reason;\n\t// if (!hasSignals && !hasComputeds.has(this)) {\n\t// \treason = \"no signals or computeds\";\n\t// } else if (hasPendingUpdate.has(this)) {\n\t// \treason = \"has pending update\";\n\t// } else if (hasHookState.has(this)) {\n\t// \treason = \"has hook state\";\n\t// }\n\t// if (reason) {\n\t// \tif (!this) reason += \" (`this` bug)\";\n\t// \tconsole.log(\"not optimizing\", this?.constructor?.name, \": \", reason, {\n\t// \t\tdetails: {\n\t// \t\t\thasSignals,\n\t// \t\t\thasComputeds: hasComputeds.has(this),\n\t// \t\t\thasPendingUpdate: hasPendingUpdate.has(this),\n\t// \t\t\thasHookState: hasHookState.has(this),\n\t// \t\t\tdeps: Array.from(updater._deps),\n\t// \t\t\tupdater,\n\t// \t\t},\n\t// \t});\n\t// }\n\n\t// if this component used no signals or computeds, update:\n\tif (!hasSignals && !(this._updateFlags & HAS_COMPUTEDS)) return true;\n\n\t// if there is a pending re-render triggered from Signals,\n\t// or if there is hook or class state, update:\n\tif (this._updateFlags & (HAS_PENDING_UPDATE | HAS_HOOK_STATE)) return true;\n\n\t// @ts-ignore\n\tfor (let i in state) return true;\n\n\t// if any non-Signal props changed, update:\n\tfor (let i in props) {\n\t\tif (i !== \"__source\" && props[i] !== this.props[i]) return true;\n\t}\n\tfor (let i in this.props) if (!(i in props)) return true;\n\n\t// this is a purely Signal-driven component, don't update:\n\treturn false;\n};\n\nexport function useSignal<T>(value: T): Signal<T>;\nexport function useSignal<T = undefined>(): Signal<T | undefined>;\nexport function useSignal<T>(value?: T) {\n\treturn useMemo(() => signal<T | undefined>(value), []);\n}\n\nexport function useComputed<T>(compute: () => T) {\n\tconst $compute = useRef(compute);\n\t$compute.current = compute;\n\t(currentComponent as AugmentedComponent)._updateFlags |= HAS_COMPUTEDS;\n\treturn useMemo(() => computed<T>(() => $compute.current()), []);\n}\n\nexport function useSignalEffect(cb: () => void | (() => void)) {\n\tconst callback = useRef(cb);\n\tcallback.current = cb;\n\n\tuseEffect(() => {\n\t\treturn effect(() => callback.current());\n\t}, []);\n}\n\n/**\n * @todo Determine which Reactive implementation we'll be using.\n * @internal\n */\n// export function useReactive<T extends object>(value: T): Reactive<T> {\n// \treturn useMemo(() => reactive<T>(value), []);\n// }\n\n/**\n * @internal\n * Update a Reactive's using the properties of an object or other Reactive.\n * Also works for Signals.\n * @example\n *   // Update a Reactive with Object.assign()-like syntax:\n *   const r = reactive({ name: \"Alice\" });\n *   update(r, { name: \"Bob\" });\n *   update(r, { age: 42 }); // property 'age' does not exist in type '{ name?: string }'\n *   update(r, 2); // '2' has no properties in common with '{ name?: string }'\n *   console.log(r.name.value); // \"Bob\"\n *\n * @example\n *   // Update a Reactive with the properties of another Reactive:\n *   const A = reactive({ name: \"Alice\" });\n *   const B = reactive({ name: \"Bob\", age: 42 });\n *   update(A, B);\n *   console.log(`${A.name} is ${A.age}`); // \"Bob is 42\"\n *\n * @example\n *   // Update a signal with assign()-like syntax:\n *   const s = signal(42);\n *   update(s, \"hi\"); // Argument type 'string' not assignable to type 'number'\n *   update(s, {}); // Argument type '{}' not assignable to type 'number'\n *   update(s, 43);\n *   console.log(s.value); // 43\n *\n * @param obj The Reactive or Signal to be updated\n * @param update The value, Signal, object or Reactive to update `obj` to match\n * @param overwrite If `true`, any properties `obj` missing from `update` are set to `undefined`\n */\n/*\nexport function update<T extends SignalOrReactive>(\n\tobj: T,\n\tupdate: Partial<Unwrap<T>>,\n\toverwrite = false\n) {\n\tif (obj instanceof Signal) {\n\t\tobj.value = peekValue(update);\n\t} else {\n\t\tfor (let i in update) {\n\t\t\tif (i in obj) {\n\t\t\t\tobj[i].value = peekValue(update[i]);\n\t\t\t} else {\n\t\t\t\tlet sig = signal(peekValue(update[i]));\n\t\t\t\tsig[KEY] = i;\n\t\t\t\tobj[i] = sig;\n\t\t\t}\n\t\t}\n\t\tif (overwrite) {\n\t\t\tfor (let i in obj) {\n\t\t\t\tif (!(i in update)) {\n\t\t\t\t\tobj[i].value = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n*/\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\n/* FIXME take care of issues in https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/web-issues.html ?\n                         and https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/web-content-security-policy.html\n                         and https://docs.aws.amazon.com/ivs/latest/LowLatencyUserGuide/web-getting-started.html\n\n  USED https://github.com/aws-samples/amazon-ivs-player-web-sample/blob/master/samples/npm-sdk/npm-sdk.ts to get started\n*/\n\nimport { h, Fragment, createRef, type RefObject } from \"preact\";\nimport { signal, Signal } from \"@preact/signals\";\nimport { LoginHeader } from \"./editor-header\";\nimport type { EditorAppData } from \"./state\";\nimport { getTid } from \"@webhare/gettid\";\nimport { useEffect, useState } from \"preact/hooks\";\nimport \"./stream.scss\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { backend } from \"./editor\";\nimport { useSimpleScreen } from \"../../frontend/components/simplescreen\";\nimport { ChooseLanguage } from \"./language\";\nimport { getCeremonyLocation } from \"../../frontend/settings/ceremony-location\";\nimport { dtapStage } from \"@webhare/env\";\nimport \"@webhare/deps/temporal-polyfill\"; // Safari and iOS lack support for temporal\n\nimport {\n  create,\n  ErrorType,\n  MediaPlayer,\n  PlayerError,\n  PlayerEventType,\n  PlayerState,\n  Quality,\n} from 'amazon-ivs-player';\n\n/**\n * These imports are loaded via the file-loader, and return the path to the asset.\n * We use the TypeScript compiler (TSC) to check types; it doesn't know what this WASM module is, so let's ignore the error it throws (TS2307).\n */\n\n// @ts-ignore -- not processable for tsconfig. our loader.ts will handle these:\nimport wasmBinaryPath from 'amazon-ivs-player/dist/assets/amazon-ivs-wasmworker.min.wasm';\n// @ts-ignore -- not processable for tsconfig. our loader.ts will handle these:\nimport wasmWorkerPath from 'amazon-ivs-player/dist/assets/amazon-ivs-wasmworker.min.js';\nimport { sendPxl } from \"@webhare/frontend\";\nimport { flagUIBusy } from \"@webhare/dompack\";\n\ndeclare module \"@webhare/frontend\" {\n  interface PxlDataTypes {\n    \"ceremonymedia:play\": {\n      stream: string;\n      live: boolean;\n      ceremony: string;\n    };\n  }\n}\n\ntype CeremonyMediaTextCue = {\n  type: \"cm-announce\"; //periodic announcement\n  now: number; //timestamp\n  viewerCount: number;\n};\n\nclass PlayerController {\n  reloadCB: NodeJS.Timeout | null = null;\n  counterTimer: NodeJS.Timeout | null = null;\n\n  constructor(public player: MediaPlayer, public src: string, public watchrecording: boolean, public ceremony: string, public endedCallback: (ended: boolean) => void) {\n    player.addEventListener(PlayerEventType.ERROR, (error: PlayerError) => {\n      if (error.type === ErrorType.NOT_AVAILABLE && error.code === 429) { //429 = Too many requets\n        console.error('Concurrent-viewer limit reached', error);\n      } else if (error.type === ErrorType.NOT_AVAILABLE && error.code === 404) { //not found\n        console.log('Stream not yet available', error);\n        setTimeout(() => player.load(src), 5000); //retry in 5 seconds\n      } else {\n        console.error('ERROR', error);\n      }\n    });\n\n    player.addEventListener(PlayerState.PLAYING, () => {\n      this.endedCallback(false);\n      if (!this.counterTimer) {\n        this.counterTimer = setInterval(() => this.countMe(), 60 * 1000);\n        this.countMe();\n      }\n    });\n\n    player.addEventListener(PlayerState.ENDED, () => {\n      this.endedCallback(true);\n      if (this.counterTimer) {\n        clearInterval(this.counterTimer);\n        this.counterTimer = null;\n      }\n    });\n\n    player.addEventListener(\n      PlayerEventType.QUALITY_CHANGED,\n      (quality: Quality) => {\n        console.log('QUALITY_CHANGED', quality);\n      }\n    );\n\n    player.addEventListener(\n      PlayerEventType.TEXT_METADATA_CUE,\n      (cue) => {\n        const data = JSON.parse(cue.text) as CeremonyMediaTextCue;\n        if (data.type === \"cm-announce\") {\n          console.log(`Viewer count: ${data.viewerCount}, latency estimation: ${((Date.now() - data.now) / 1000).toFixed(2)}s`);\n        } else\n          console.log('Unrecognized TEXT_METADATA_CUE', cue);\n      }\n    );\n\n    player.setAutoplay(true);\n    player.load(src);\n  }\n\n  countMe() {\n    sendPxl(\"ceremonymedia:play\", { stream: this.src, live: !this.watchrecording, ceremony: this.ceremony });\n  }\n}\n\ntype FlowPlayerState = {\n  innerVideo: ReturnType<typeof h>;\n  innerVideoRef: RefObject<HTMLVideoElement>;\n  controller?: PlayerController;\n  showUnmuteButton?: boolean;\n};\n\nfunction getNewPlayerState(): FlowPlayerState {\n  const innerDivRef = createRef<HTMLVideoElement>();\n  return { innerVideo: <video controls ref={innerDivRef} />, innerVideoRef: innerDivRef };\n}\n\nfunction FlowPlayer(props: { class?: string; playbackUrl: string; watchrecording: boolean; ceremony: string; unmuteCallback: Signal<(() => void) | undefined>; endedCallback: (ended: boolean) => void }) {\n  const [state, setState] = useState<FlowPlayerState>(getNewPlayerState);\n\n  useEffect(() => {\n    if (!state.innerVideoRef.current)\n      return;\n\n    let controller = state.controller;\n    if (!controller) {\n      const player = create({\n        wasmWorker: new URL(wasmWorkerPath, location.href).href,\n        wasmBinary: new URL(wasmBinaryPath, location.href).href,\n      });\n\n      player.attachHTMLVideoElement(state.innerVideoRef.current);\n\n      controller = new PlayerController(player, props.playbackUrl, props.watchrecording, props.ceremony, props.endedCallback);\n      setState(curState => ({ ...curState, controller }));\n\n      player.addEventListener(PlayerEventType.MUTED_CHANGED, () => {\n        setState(curState => ({ ...curState, showUnmuteButton: curState.showUnmuteButton ?? player.isMuted() }));\n      });\n    }\n  }, [props.playbackUrl]);\n\n  if (Boolean(props.unmuteCallback.value) !== Boolean(state.showUnmuteButton && state.controller)) {\n    props.unmuteCallback.value = state.showUnmuteButton && state.controller ? () => {\n      if (state.controller) {\n        state.controller.player.setMuted(false);\n        setState(curState => ({ ...curState, showUnmuteButton: false }));\n      }\n    } : undefined;\n  }\n\n  return <div class={`cm-stream-flowplayer ${props.class}`}>{state.innerVideo}</div>;\n}\n\nexport function StreamScreen(props: { language: \"en\" | \"nl\"; stream: EditorAppData[\"stream\"] }) {\n  const cetStart = props.stream?.start && props.stream.start.toTemporalInstant().toZonedDateTimeISO('Europe/Amsterdam') || undefined;\n  const cetDate = cetStart?.toString().split(\"T\")[0] || \"\";\n  const cetTime = cetStart?.toString().split(\"T\")[1]?.substring(0, 5) || \"\";\n  const [unmuteCallback] = useState<Signal<(() => void) | undefined>>(() => signal(undefined));\n  const [playbackUrl, setPlaybackUrl] = useState(\"\");\n  const [counter, setCounter] = useState(0);\n  const [editLanguage, setEditLanguage] = useState(false);\n  const [hasEnded, setHasEnded] = useState(false);\n\n  // For debugging styling of the stream player without starting a stream\n  if (dtapStage !== \"production\" && location.href.indexOf(\"testhtml\") > -1) {\n    // let now = new Date();\n    // const later = new Date();\n    // later.setTime(later.getTime() + 60*60*1000);\n    const later = new Date(2024, 12, 12);\n\n    props.stream = {\n      title: \"Mark was here\",\n      playbackUrl: \"https://57b3f997f6c0.eu-central-1.playback.live-video.net/api/video/v1/eu-central-1.314146329176.channel.EwM6XK0X9nGj.m3u8\",\n      auditorium: \"Kantoor\",\n      haveRecording: true,\n      ceremony: \"mark-was-here\",\n      start: new Date(),\n      localStart: new Date(),\n      localEnd: later,\n      isPreview: true\n    };\n    // alert(props.stream.localEnd.getTime() <= Date.now());\n  }\n\n  if (props.stream?.playbackUrl && props.stream.playbackUrl !== playbackUrl) {\n    setPlaybackUrl(props.stream.playbackUrl);\n  }\n\n  let error = \"\";\n  if (props.stream === null)\n    error = getTid(\"ceremonymedia:webdesigns.site.js.editor.stream.nostream\");\n  else if (props.stream) {\n    if (!props.stream.isPreview && props.stream.localStart && props.stream.localStart.getTime() > Date.now())\n      error = getTid(\"ceremonymedia:webdesigns.site.js.editor.stream.streamstartsat\", cetDate, cetTime);\n    //if localEnd expired *but* we still have a playbackurl, we joined during the session\n    else if (!props.stream.isPreview && !props.stream.haveRecording && (props.stream.localEnd && props.stream.localEnd.getTime() <= Date.now() && (hasEnded || !playbackUrl)))\n      error = getTid(\"ceremonymedia:webdesigns.site.js.editor.stream.streamended\", cetTime);\n    else if (!playbackUrl)\n      error = getTid(\"ceremonymedia:webdesigns.site.js.editor.stream.invalidconfiguration\", cetTime);\n  }\n  const message = error || getTid(\"ceremonymedia:webdesigns.site.js.editor.stream.loading\");\n\n  // ensure rerender when the stream starts\n  useEffect(() => {\n    let timeoutMsecs: number | undefined;\n    const now = Date.now();\n    if (props.stream?.localStart && props.stream.localStart.getTime() > now) {\n      timeoutMsecs = props.stream.localStart.getTime() - now;\n    } else if (props.stream?.localEnd && props.stream.localEnd.getTime() > now) {\n      timeoutMsecs = props.stream.localEnd.getTime() - now;\n    }\n    if (timeoutMsecs !== undefined) {\n      // Increasing the counter causes the effect to run again\n      let timeout: NodeJS.Timeout | null = setTimeout(() => {\n        timeout = null;\n        setCounter(c => ++c);\n      }, Math.min(30000, timeoutMsecs));\n      return () => { if (timeout) clearTimeout(timeout); };\n    }\n  }, [props.stream?.localStart?.getTime(), props.stream?.localEnd?.getTime(), counter]);\n\n  const buttons =\n    <>\n      <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => setEditLanguage(true)\n      }>\n        <span class=\"icon far fa-flag\" role=\"presentation\"></span>\n        <span class=\"button__label\">{props.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n      </button >\n    </>;\n\n  const titleParts = getCeremonyLocation().organizationTitle.split(\"*\").map((part, idx) => !(idx % 2) ? <span key={idx}>{part}</span> : <strong key={idx}>{part}</strong>);\n\n  return <Fragment>\n    <LoginHeader buttons={buttons} />\n    <div class=\"cm-playerbody\">\n      <div class=\"cm-stream__header\">\n        {props.stream?.isPreview ? <span class=\"cm-stream__header__previewnotice\">PREVIEW</span> : null}\n        {props.stream?.title || \"\"}\n      </div>\n\n      <div class=\"cm-stream__content\">\n        <div class=\"cm-stream__content__message\"><span>{message}</span></div>\n        {playbackUrl ?\n          <FlowPlayer\n            class={`cm-stream__content__player ${error ? \"cm-stream__content__player--hidden\" : \"\"}`}\n            playbackUrl={playbackUrl}\n            unmuteCallback={unmuteCallback}\n            endedCallback={setHasEnded}\n            watchrecording={props.stream?.haveRecording ?? false}\n            ceremony={props.stream?.ceremony ?? \"\"}\n          /> :\n          null}\n        {unmuteCallback.value && !error &&\n          <div class=\"cm-stream__content__unmutebutton\" onClick={unmuteCallback.value}>\n            <div class=\"cm-stream__content__unmutebutton__background\"></div>\n            <span class=\"icon far fa-volume-slash\"></span>\n            {getTid(\"ceremonymedia:webdesigns.site.js.streamcode.unmute\")}\n          </div>\n        }\n      </div>\n\n      <div class=\"cm-stream__footer\">\n        <span class=\"cm-stream__location\">{titleParts}</span>\n        <span class=\"cm-stream__auditorium\">, {props.stream?.auditorium ?? \"\"}</span>\n        <span class=\"cm-stream__time\">, {cetDate} - {cetTime}</span>\n      </div>\n    </div>\n    {editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: \"en\" | \"nl\" | null) => {\n      if (lang)\n        backend.setLanguage(lang);\n      setEditLanguage(false);\n    }} /> : null}\n  </Fragment>;\n}\n\nexport function StreamCodeScreen(props: { language: \"en\" | \"nl\" }) {\n  const [code, setCode] = useState(\"\");\n  const { runSimpleScreen, SimpleScreen } = useSimpleScreen();\n  let submitting = false;\n\n  const submit = async (evt: Event) => {\n    evt?.preventDefault();\n\n    if (submitting)\n      return false;\n\n    try {\n      submitting = true; //as a crude double submit prevention\n\n      using lock = flagUIBusy({ modal: true });\n      void (lock);\n\n      const link = await backend.handleStreamCode(code);\n      if (link)\n        location.href = link;\n      else\n        //await runSimpleScreen(\"error\", getTid(\"ceremonymedia:webdesigns.site.js.streamcode.invalidcode\"));\n        await runSimpleScreen(\"error\", \"\", { title: getTid(\"ceremonymedia:webdesigns.site.js.streamcode.invalidcode\") });\n    } finally {\n      submitting = false;\n    }\n  };\n\n  const [editLanguage, setEditLanguage] = useState(false);\n\n  const buttons =\n    <>\n      <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => setEditLanguage(true)\n      }>\n        <span class=\"icon far fa-flag\" role=\"presentation\"></span>\n        <span class=\"button__label\">{props.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n      </button >\n    </>;\n\n  return (\n    <Fragment>\n      <LoginHeader buttons={buttons} />\n\n      <ModalDialog\n        isOpen={true}\n        isModal={false}\n        class=\"cm-entercodeform cm-form\"\n        subDialogs={<SimpleScreen />}>\n\n        <form class=\"cm-entercodeform-body\" onSubmit={submit}>\n          <div class=\"cm-form__itemlist\">\n            <div class=\"cm-form__item\">\n              <label for=\"cm-entercodeform-code\">{getTid(\"ceremonymedia:webdesigns.site.js.streamcode.entercode\")}</label>\n              <input id=\"cm-entercodeform-code\" type=\"text\" value={code} onInput={e => setCode(e.currentTarget.value)} required />\n            </div>\n          </div>\n\n          <div class=\"cm-buttonbar\">\n            <button type=\"submit\" class=\"wh-button-solid wh-button--default\">{getTid(\"ceremonymedia:webdesigns.site.js.streamcode.login\")}</button>\n          </div>\n\n          <div class=\"cm-entercodeform-text\">\n            {getTid(\"ceremonymedia:webdesigns.site.js.streamcode.explanation\")}\n          </div>\n        </form>\n\n      </ModalDialog>\n      {editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: \"en\" | \"nl\" | null) => {\n        if (lang)\n          backend.setLanguage(lang);\n        setEditLanguage(false);\n      }} /> : null}\n    </Fragment >);\n}\n","function clampProp(e, n, t, o, r) {\n  return clampEntity(n, ((e, n) => {\n    const t = e[n];\n    if (void 0 === t) {\n      throw new TypeError(missingField(n));\n    }\n    return t;\n  })(e, n), t, o, r);\n}\n\nfunction clampEntity(e, n, t, o, r, i) {\n  const a = clampNumber(n, t, o);\n  if (r && n !== a) {\n    throw new RangeError(numberOutOfRange(e, n, t, o, i));\n  }\n  return a;\n}\n\nfunction s(e) {\n  return null !== e && /object|function/.test(typeof e);\n}\n\nfunction on(e, n = Map) {\n  const t = new n;\n  return (n, ...o) => {\n    if (t.has(n)) {\n      return t.get(n);\n    }\n    const r = e(n, ...o);\n    return t.set(n, r), r;\n  };\n}\n\nfunction r(e) {\n  return n({\n    name: e\n  }, 1);\n}\n\nfunction n(n, t) {\n  return e((e => ({\n    value: e,\n    configurable: 1,\n    writable: !t\n  })), n);\n}\n\nfunction t(n) {\n  return e((e => ({\n    get: e,\n    configurable: 1\n  })), n);\n}\n\nfunction o(e) {\n  return {\n    [Symbol.toStringTag]: {\n      value: e,\n      configurable: 1\n    }\n  };\n}\n\nfunction zipProps(e, n) {\n  const t = {};\n  let o = e.length;\n  for (const r of n) {\n    t[e[--o]] = r;\n  }\n  return t;\n}\n\nfunction e(e, n, t) {\n  const o = {};\n  for (const r in n) {\n    o[r] = e(n[r], r, t);\n  }\n  return o;\n}\n\nfunction g(e, n, t) {\n  const o = {};\n  for (let r = 0; r < n.length; r++) {\n    const i = n[r];\n    o[i] = e(i, r, t);\n  }\n  return o;\n}\n\nfunction remapProps(e, n, t) {\n  const o = {};\n  for (let r = 0; r < e.length; r++) {\n    o[n[r]] = t[e[r]];\n  }\n  return o;\n}\n\nfunction nn(e, n) {\n  const t = Object.create(null);\n  for (const o of e) {\n    t[o] = n[o];\n  }\n  return t;\n}\n\nfunction hasAnyPropsByName(e, n) {\n  for (const t of n) {\n    if (t in e) {\n      return 1;\n    }\n  }\n  return 0;\n}\n\nfunction allPropsEqual(e, n, t) {\n  for (const o of e) {\n    if (n[o] !== t[o]) {\n      return 0;\n    }\n  }\n  return 1;\n}\n\nfunction zeroOutProps(e, n, t) {\n  const o = {\n    ...t\n  };\n  for (let t = 0; t < n; t++) {\n    o[e[t]] = 0;\n  }\n  return o;\n}\n\nfunction Pt(e, ...n) {\n  return (...t) => e(...n, ...t);\n}\n\nfunction capitalize(e) {\n  return e[0].toUpperCase() + e.substring(1);\n}\n\nfunction sortStrings(e) {\n  return e.slice().sort();\n}\n\nfunction padNumber(e, n) {\n  return String(n).padStart(e, \"0\");\n}\n\nfunction compareNumbers(e, n) {\n  return Math.sign(e - n);\n}\n\nfunction clampNumber(e, n, t) {\n  return Math.min(Math.max(e, n), t);\n}\n\nfunction divModFloor(e, n) {\n  return [ Math.floor(e / n), modFloor(e, n) ];\n}\n\nfunction modFloor(e, n) {\n  return (e % n + n) % n;\n}\n\nfunction divModTrunc(e, n) {\n  return [ divTrunc(e, n), modTrunc(e, n) ];\n}\n\nfunction divTrunc(e, n) {\n  return Math.trunc(e / n) || 0;\n}\n\nfunction modTrunc(e, n) {\n  return e % n || 0;\n}\n\nfunction hasHalf(e) {\n  return .5 === Math.abs(e % 1);\n}\n\nfunction givenFieldsToBigNano(e, n, t) {\n  let o = 0, r = 0;\n  for (let i = 0; i <= n; i++) {\n    const n = e[t[i]], a = Ao[i], s = Uo / a, [c, u] = divModTrunc(n, s);\n    o += u * a, r += c;\n  }\n  const [i, a] = divModTrunc(o, Uo);\n  return [ r + i, a ];\n}\n\nfunction nanoToGivenFields(e, n, t) {\n  const o = {};\n  for (let r = n; r >= 0; r--) {\n    const n = Ao[r];\n    o[t[r]] = divTrunc(e, n), e = modTrunc(e, n);\n  }\n  return o;\n}\n\nfunction d(e) {\n  if (void 0 !== e) {\n    return m(e);\n  }\n}\n\nfunction P(e) {\n  if (void 0 !== e) {\n    return h(e);\n  }\n}\n\nfunction S(e) {\n  if (void 0 !== e) {\n    return T(e);\n  }\n}\n\nfunction h(e) {\n  return requireNumberIsPositive(T(e));\n}\n\nfunction T(e) {\n  return ze(cr(e));\n}\n\nfunction requirePropDefined(e, n) {\n  if (null == n) {\n    throw new RangeError(missingField(e));\n  }\n  return n;\n}\n\nfunction requireObjectLike(e) {\n  if (!s(e)) {\n    throw new TypeError(oo);\n  }\n  return e;\n}\n\nfunction requireType(e, n, t = e) {\n  if (typeof n !== e) {\n    throw new TypeError(invalidEntity(t, n));\n  }\n  return n;\n}\n\nfunction ze(e, n = \"number\") {\n  if (!Number.isInteger(e)) {\n    throw new RangeError(expectedInteger(n, e));\n  }\n  return e || 0;\n}\n\nfunction requireNumberIsPositive(e, n = \"number\") {\n  if (e <= 0) {\n    throw new RangeError(expectedPositive(n, e));\n  }\n  return e;\n}\n\nfunction toString(e) {\n  if (\"symbol\" == typeof e) {\n    throw new TypeError(no);\n  }\n  return String(e);\n}\n\nfunction toStringViaPrimitive(e, n) {\n  return s(e) ? String(e) : m(e, n);\n}\n\nfunction toBigInt(e) {\n  if (\"string\" == typeof e) {\n    return BigInt(e);\n  }\n  if (\"bigint\" != typeof e) {\n    throw new TypeError(invalidBigInt(e));\n  }\n  return e;\n}\n\nfunction toNumber(e, n = \"number\") {\n  if (\"bigint\" == typeof e) {\n    throw new TypeError(forbiddenBigIntToNumber(n));\n  }\n  if (e = Number(e), !Number.isFinite(e)) {\n    throw new RangeError(expectedFinite(n, e));\n  }\n  return e;\n}\n\nfunction toInteger(e, n) {\n  return Math.trunc(toNumber(e, n)) || 0;\n}\n\nfunction toStrictInteger(e, n) {\n  return ze(toNumber(e, n), n);\n}\n\nfunction toPositiveInteger(e, n) {\n  return requireNumberIsPositive(toInteger(e, n), n);\n}\n\nfunction createBigNano(e, n) {\n  let [t, o] = divModTrunc(n, Uo), r = e + t;\n  const i = Math.sign(r);\n  return i && i === -Math.sign(o) && (r -= i, o += i * Uo), [ r, o ];\n}\n\nfunction addBigNanos(e, n, t = 1) {\n  return createBigNano(e[0] + n[0] * t, e[1] + n[1] * t);\n}\n\nfunction moveBigNano(e, n) {\n  return createBigNano(e[0], e[1] + n);\n}\n\nfunction diffBigNanos(e, n) {\n  return addBigNanos(n, e, -1);\n}\n\nfunction compareBigNanos(e, n) {\n  return compareNumbers(e[0], n[0]) || compareNumbers(e[1], n[1]);\n}\n\nfunction bigNanoOutside(e, n, t) {\n  return -1 === compareBigNanos(e, n) || 1 === compareBigNanos(e, t);\n}\n\nfunction bigIntToBigNano(e, n = 1) {\n  const t = BigInt(Uo / n);\n  return [ Number(e / t), Number(e % t) * n ];\n}\n\nfunction Ge(e, n = 1) {\n  const t = Uo / n, [o, r] = divModTrunc(e, t);\n  return [ o, r * n ];\n}\n\nfunction bigNanoToNumber(e, n = 1, t) {\n  const [o, r] = e, [i, a] = divModTrunc(r, n);\n  return o * (Uo / n) + (i + (t ? a / n : 0));\n}\n\nfunction divModBigNano(e, n, t = divModFloor) {\n  const [o, r] = e, [i, a] = t(r, n);\n  return [ o * (Uo / n) + i, a ];\n}\n\nfunction checkIsoYearMonthInBounds(e) {\n  return clampProp(e, \"isoYear\", wr, Fr, 1), e.isoYear === wr ? clampProp(e, \"isoMonth\", 4, 12, 1) : e.isoYear === Fr && clampProp(e, \"isoMonth\", 1, 9, 1), \n  e;\n}\n\nfunction checkIsoDateInBounds(e) {\n  return checkIsoDateTimeInBounds({\n    ...e,\n    ...Nt,\n    isoHour: 12\n  }), e;\n}\n\nfunction checkIsoDateTimeInBounds(e) {\n  const n = clampProp(e, \"isoYear\", wr, Fr, 1), t = n === wr ? 1 : n === Fr ? -1 : 0;\n  return t && checkEpochNanoInBounds(isoToEpochNano({\n    ...e,\n    isoDay: e.isoDay + t,\n    isoNanosecond: e.isoNanosecond - t\n  })), e;\n}\n\nfunction checkEpochNanoInBounds(e) {\n  if (!e || bigNanoOutside(e, Sr, Er)) {\n    throw new RangeError(Io);\n  }\n  return e;\n}\n\nfunction isoTimeFieldsToNano(e) {\n  return givenFieldsToBigNano(e, 5, w)[1];\n}\n\nfunction nanoToIsoTimeAndDay(e) {\n  const [n, t] = divModFloor(e, Uo);\n  return [ nanoToGivenFields(t, 5, w), n ];\n}\n\nfunction epochNanoToSecMod(e) {\n  return divModBigNano(e, Ro);\n}\n\nfunction isoToEpochMilli(e) {\n  return isoArgsToEpochMilli(e.isoYear, e.isoMonth, e.isoDay, e.isoHour, e.isoMinute, e.isoSecond, e.isoMillisecond);\n}\n\nfunction isoToEpochNano(e) {\n  const n = isoToEpochMilli(e);\n  if (void 0 !== n) {\n    const [t, o] = divModTrunc(n, ko);\n    return [ t, o * Qe + (e.isoMicrosecond || 0) * Yo + (e.isoNanosecond || 0) ];\n  }\n}\n\nfunction isoToEpochNanoWithOffset(e, n) {\n  const [t, o] = nanoToIsoTimeAndDay(isoTimeFieldsToNano(e) - n);\n  return checkEpochNanoInBounds(isoToEpochNano({\n    ...e,\n    isoDay: e.isoDay + o,\n    ...t\n  }));\n}\n\nfunction isoArgsToEpochSec(...e) {\n  return isoArgsToEpochMilli(...e) / Co;\n}\n\nfunction isoArgsToEpochMilli(...e) {\n  const [n, t] = isoToLegacyDate(...e), o = n.valueOf();\n  if (!isNaN(o)) {\n    return o - t * ko;\n  }\n}\n\nfunction isoToLegacyDate(e, n = 1, t = 1, o = 0, r = 0, i = 0, a = 0) {\n  const s = e === wr ? 1 : e === Fr ? -1 : 0, c = new Date;\n  return c.setUTCHours(o, r, i, a), c.setUTCFullYear(e, n - 1, t + s), [ c, s ];\n}\n\nfunction epochNanoToIso(e, n) {\n  let [t, o] = moveBigNano(e, n);\n  o < 0 && (o += Uo, t -= 1);\n  const [r, i] = divModFloor(o, Qe), [a, s] = divModFloor(i, Yo);\n  return epochMilliToIso(t * ko + r, a, s);\n}\n\nfunction epochMilliToIso(e, n = 0, t = 0) {\n  const o = Math.ceil(Math.max(0, Math.abs(e) - Pr) / ko) * Math.sign(e), r = new Date(e - o * ko);\n  return zipProps(Tr, [ r.getUTCFullYear(), r.getUTCMonth() + 1, r.getUTCDate() + o, r.getUTCHours(), r.getUTCMinutes(), r.getUTCSeconds(), r.getUTCMilliseconds(), n, t ]);\n}\n\nfunction hashIntlFormatParts(e, n) {\n  if (n < -Pr) {\n    throw new RangeError(Io);\n  }\n  const t = e.formatToParts(n), o = {};\n  for (const e of t) {\n    o[e.type] = e.value;\n  }\n  return o;\n}\n\nfunction computeIsoDateParts(e) {\n  return [ e.isoYear, e.isoMonth, e.isoDay ];\n}\n\nfunction computeIsoMonthCodeParts(e, n) {\n  return [ n, 0 ];\n}\n\nfunction computeIsoMonthsInYear() {\n  return kr;\n}\n\nfunction computeIsoDaysInMonth(e, n) {\n  switch (n) {\n   case 2:\n    return computeIsoInLeapYear(e) ? 29 : 28;\n\n   case 4:\n   case 6:\n   case 9:\n   case 11:\n    return 30;\n  }\n  return 31;\n}\n\nfunction computeIsoDaysInYear(e) {\n  return computeIsoInLeapYear(e) ? 366 : 365;\n}\n\nfunction computeIsoInLeapYear(e) {\n  return e % 4 == 0 && (e % 100 != 0 || e % 400 == 0);\n}\n\nfunction computeIsoDayOfWeek(e) {\n  const [n, t] = isoToLegacyDate(e.isoYear, e.isoMonth, e.isoDay);\n  return modFloor(n.getUTCDay() - t, 7) || 7;\n}\n\nfunction computeIsoEraParts(e) {\n  return this.id === or ? (({isoYear: e}) => e < 1 ? [ \"gregory-inverse\", 1 - e ] : [ \"gregory\", e ])(e) : this.id === rr ? Yr(e) : [];\n}\n\nfunction computeJapaneseEraParts(e) {\n  const n = isoToEpochMilli(e);\n  if (n < Cr) {\n    const {isoYear: n} = e;\n    return n < 1 ? [ \"japanese-inverse\", 1 - n ] : [ \"japanese\", n ];\n  }\n  const t = hashIntlFormatParts(Ci(rr), n), {era: o, eraYear: r} = parseIntlYear(t, rr);\n  return [ o, r ];\n}\n\nfunction checkIsoDateTimeFields(e) {\n  return checkIsoDateFields(e), constrainIsoTimeFields(e, 1), e;\n}\n\nfunction checkIsoDateFields(e) {\n  return constrainIsoDateFields(e, 1), e;\n}\n\nfunction isIsoDateFieldsValid(e) {\n  return allPropsEqual(Dr, e, constrainIsoDateFields(e));\n}\n\nfunction constrainIsoDateFields(e, n) {\n  const {isoYear: t} = e, o = clampProp(e, \"isoMonth\", 1, computeIsoMonthsInYear(), n);\n  return {\n    isoYear: t,\n    isoMonth: o,\n    isoDay: clampProp(e, \"isoDay\", 1, computeIsoDaysInMonth(t, o), n)\n  };\n}\n\nfunction constrainIsoTimeFields(e, n) {\n  return zipProps(w, [ clampProp(e, \"isoHour\", 0, 23, n), clampProp(e, \"isoMinute\", 0, 59, n), clampProp(e, \"isoSecond\", 0, 59, n), clampProp(e, \"isoMillisecond\", 0, 999, n), clampProp(e, \"isoMicrosecond\", 0, 999, n), clampProp(e, \"isoNanosecond\", 0, 999, n) ]);\n}\n\nfunction mt(e) {\n  return void 0 === e ? 0 : Xr(requireObjectLike(e));\n}\n\nfunction je(e, n = 0) {\n  e = normalizeOptions(e);\n  const t = ei(e), o = ni(e, n);\n  return [ Xr(e), o, t ];\n}\n\nfunction refineDiffOptions(e, n, t, o = 9, r = 0, i = 4) {\n  n = normalizeOptions(n);\n  let a = Kr(n, o, r), s = parseRoundingIncInteger(n), c = ii(n, i);\n  const u = Jr(n, o, r, 1);\n  return null == a ? a = Math.max(t, u) : checkLargestSmallestUnit(a, u), s = refineRoundingInc(s, u, 1), \n  e && (c = (e => e < 4 ? (e + 2) % 4 : e)(c)), [ a, u, s, c ];\n}\n\nfunction refineRoundingOptions(e, n = 6, t) {\n  let o = parseRoundingIncInteger(e = normalizeOptionsOrString(e, Rr));\n  const r = ii(e, 7);\n  let i = Jr(e, n);\n  return i = requirePropDefined(Rr, i), o = refineRoundingInc(o, i, void 0, t), [ i, o, r ];\n}\n\nfunction refineDateDisplayOptions(e) {\n  return ti(normalizeOptions(e));\n}\n\nfunction refineTimeDisplayOptions(e, n) {\n  return refineTimeDisplayTuple(normalizeOptions(e), n);\n}\n\nfunction Me(e) {\n  const n = normalizeOptionsOrString(e, qr), t = refineChoiceOption(qr, _r, n, 0);\n  if (!t) {\n    throw new RangeError(invalidEntity(qr, t));\n  }\n  return t;\n}\n\nfunction refineTimeDisplayTuple(e, n = 4) {\n  const t = refineSubsecDigits(e);\n  return [ ii(e, 4), ...refineSmallestUnitAndSubsecDigits(Jr(e, n), t) ];\n}\n\nfunction refineSmallestUnitAndSubsecDigits(e, n) {\n  return null != e ? [ Ao[e], e < 4 ? 9 - 3 * e : -1 ] : [ void 0 === n ? 1 : 10 ** (9 - n), n ];\n}\n\nfunction parseRoundingIncInteger(e) {\n  const n = e[zr];\n  return void 0 === n ? 1 : toInteger(n, zr);\n}\n\nfunction refineRoundingInc(e, n, t, o) {\n  const r = o ? Uo : Ao[n + 1];\n  if (r) {\n    const t = Ao[n];\n    if (r % ((e = clampEntity(zr, e, 1, r / t - (o ? 0 : 1), 1)) * t)) {\n      throw new RangeError(invalidEntity(zr, e));\n    }\n  } else {\n    e = clampEntity(zr, e, 1, t ? 10 ** 9 : 1, 1);\n  }\n  return e;\n}\n\nfunction refineSubsecDigits(e) {\n  let n = e[Ur];\n  if (void 0 !== n) {\n    if (\"number\" != typeof n) {\n      if (\"auto\" === toString(n)) {\n        return;\n      }\n      throw new RangeError(invalidEntity(Ur, n));\n    }\n    n = clampEntity(Ur, Math.floor(n), 0, 9, 1);\n  }\n  return n;\n}\n\nfunction normalizeOptions(e) {\n  return void 0 === e ? {} : requireObjectLike(e);\n}\n\nfunction normalizeOptionsOrString(e, n) {\n  return \"string\" == typeof e ? {\n    [n]: e\n  } : requireObjectLike(e);\n}\n\nfunction fabricateOverflowOptions(e) {\n  return {\n    overflow: jr[e]\n  };\n}\n\nfunction refineUnitOption(e, n, t = 9, o = 0, r) {\n  let i = n[e];\n  if (void 0 === i) {\n    return r ? o : void 0;\n  }\n  if (i = toString(i), \"auto\" === i) {\n    return r ? o : null;\n  }\n  let a = Oo[i];\n  if (void 0 === a && (a = mr[i]), void 0 === a) {\n    throw new RangeError(invalidChoice(e, i, Oo));\n  }\n  return clampEntity(e, a, o, t, 1, Bo), a;\n}\n\nfunction refineChoiceOption(e, n, t, o = 0) {\n  const r = t[e];\n  if (void 0 === r) {\n    return o;\n  }\n  const i = toString(r), a = n[i];\n  if (void 0 === a) {\n    throw new RangeError(invalidChoice(e, i, n));\n  }\n  return a;\n}\n\nfunction checkLargestSmallestUnit(e, n) {\n  if (n > e) {\n    throw new RangeError(Eo);\n  }\n}\n\nfunction xe(e) {\n  return {\n    branding: Re,\n    epochNanoseconds: e\n  };\n}\n\nfunction _e(e, n, t) {\n  return {\n    branding: z,\n    calendar: t,\n    timeZone: n,\n    epochNanoseconds: e\n  };\n}\n\nfunction jt(e, n = e.calendar) {\n  return {\n    branding: x,\n    calendar: n,\n    ...nn(Nr, e)\n  };\n}\n\nfunction W(e, n = e.calendar) {\n  return {\n    branding: G,\n    calendar: n,\n    ...nn(Ir, e)\n  };\n}\n\nfunction createPlainYearMonthSlots(e, n = e.calendar) {\n  return {\n    branding: Ut,\n    calendar: n,\n    ...nn(Ir, e)\n  };\n}\n\nfunction createPlainMonthDaySlots(e, n = e.calendar) {\n  return {\n    branding: qt,\n    calendar: n,\n    ...nn(Ir, e)\n  };\n}\n\nfunction St(e) {\n  return {\n    branding: ft,\n    ...nn(Mr, e)\n  };\n}\n\nfunction Oe(e) {\n  return {\n    branding: N,\n    sign: computeDurationSign(e),\n    ...nn(ur, e)\n  };\n}\n\nfunction I(e) {\n  return divModBigNano(e.epochNanoseconds, Qe)[0];\n}\n\nfunction v(e) {\n  return ((e, n = 1) => {\n    const [t, o] = e, r = Math.floor(o / n), i = Uo / n;\n    return BigInt(t) * BigInt(i) + BigInt(r);\n  })(e.epochNanoseconds);\n}\n\nfunction extractEpochNano(e) {\n  return e.epochNanoseconds;\n}\n\nfunction J(e, n, t, o, r) {\n  const i = getMaxDurationUnit(o), [a, s] = ((e, n) => {\n    const t = n((e = normalizeOptionsOrString(e, Zr))[Ar]);\n    let o = Qr(e);\n    return o = requirePropDefined(Zr, o), [ o, t ];\n  })(r, e), c = Math.max(a, i);\n  if (!s && isUniformUnit(c, s)) {\n    return totalDayTimeDuration(o, a);\n  }\n  if (!s) {\n    throw new RangeError(yo);\n  }\n  if (!o.sign) {\n    return 0;\n  }\n  const [u, f, l] = createMarkerSystem(n, t, s), d = createMarkerToEpochNano(l), m = createMoveMarker(l), h = createDiffMarkers(l), g = m(f, u, o);\n  isZonedEpochSlots(s) || (checkIsoDateTimeInBounds(u), checkIsoDateTimeInBounds(g));\n  const D = h(f, u, g, a);\n  return isUniformUnit(a, s) ? totalDayTimeDuration(D, a) : ((e, n, t, o, r, i, a) => {\n    const s = computeDurationSign(e), [c, u] = clampRelativeDuration(o, gr(t, e), t, s, r, i, a), f = computeEpochNanoFrac(n, c, u);\n    return e[p[t]] + f * s;\n  })(D, d(g), a, f, u, d, m);\n}\n\nfunction totalDayTimeDuration(e, n) {\n  return bigNanoToNumber(durationFieldsToBigNano(e), Ao[n], 1);\n}\n\nfunction clampRelativeDuration(e, n, t, o, r, i, a) {\n  const s = p[t], c = {\n    ...n,\n    [s]: n[s] + o\n  }, u = a(e, r, n), f = a(e, r, c);\n  return [ i(u), i(f) ];\n}\n\nfunction computeEpochNanoFrac(e, n, t) {\n  const o = bigNanoToNumber(diffBigNanos(n, t));\n  if (!o) {\n    throw new RangeError(fo);\n  }\n  return bigNanoToNumber(diffBigNanos(n, e)) / o;\n}\n\nfunction Le(e, n) {\n  const [t, o, r] = refineRoundingOptions(n, 5, 1);\n  return xe(roundBigNano(e.epochNanoseconds, t, o, r, 1));\n}\n\nfunction Ie(e, n, t) {\n  let {epochNanoseconds: o, timeZone: r, calendar: i} = n;\n  const [a, s, c] = refineRoundingOptions(t);\n  if (0 === a && 1 === s) {\n    return n;\n  }\n  const u = e(r);\n  if (6 === a) {\n    o = ((e, n, t, o) => {\n      const r = he(t, n), [i, a] = e(r), s = t.epochNanoseconds, c = getStartOfDayInstantFor(n, i), u = getStartOfDayInstantFor(n, a);\n      if (bigNanoOutside(s, c, u)) {\n        throw new RangeError(fo);\n      }\n      return roundWithMode(computeEpochNanoFrac(s, c, u), o) ? u : c;\n    })(computeDayInterval, u, n, c);\n  } else {\n    const e = u.R(o);\n    o = getMatchingInstantFor(u, roundDateTime(epochNanoToIso(o, e), a, s, c), e, 2, 0, 1);\n  }\n  return _e(o, r, i);\n}\n\nfunction vt(e, n) {\n  return jt(roundDateTime(e, ...refineRoundingOptions(n)), e.calendar);\n}\n\nfunction lt(e, n) {\n  const [t, o, r] = refineRoundingOptions(n, 5);\n  var i;\n  return St((i = r, roundTimeToNano(e, computeNanoInc(t, o), i)[0]));\n}\n\nfunction Te(e, n) {\n  const t = e(n.timeZone), o = he(n, t), [r, i] = computeDayInterval(o), a = bigNanoToNumber(diffBigNanos(getStartOfDayInstantFor(t, r), getStartOfDayInstantFor(t, i)), zo, 1);\n  if (a <= 0) {\n    throw new RangeError(fo);\n  }\n  return a;\n}\n\nfunction ve(e, n) {\n  const {timeZone: t, calendar: o} = n, r = ((e, n, t) => getStartOfDayInstantFor(n, e(he(t, n))))(computeDayFloor, e(t), n);\n  return _e(r, t, o);\n}\n\nfunction roundDateTime(e, n, t, o) {\n  return roundDateTimeToNano(e, computeNanoInc(n, t), o);\n}\n\nfunction roundDateTimeToNano(e, n, t) {\n  const [o, r] = roundTimeToNano(e, n, t);\n  return checkIsoDateTimeInBounds({\n    ...moveByDays(e, r),\n    ...o\n  });\n}\n\nfunction roundTimeToNano(e, n, t) {\n  return nanoToIsoTimeAndDay(roundByInc(isoTimeFieldsToNano(e), n, t));\n}\n\nfunction roundToMinute(e) {\n  return roundByInc(e, Zo, 7);\n}\n\nfunction computeNanoInc(e, n) {\n  return Ao[e] * n;\n}\n\nfunction computeDayInterval(e) {\n  const n = computeDayFloor(e);\n  return [ n, moveByDays(n, 1) ];\n}\n\nfunction computeDayFloor(e) {\n  return yr(6, e);\n}\n\nfunction roundDayTimeDurationByInc(e, n, t) {\n  const o = Math.min(getMaxDurationUnit(e), 6);\n  return nanoToDurationDayTimeFields(roundBigNanoByInc(durationFieldsToBigNano(e, o), n, t), o);\n}\n\nfunction roundRelativeDuration(e, n, t, o, r, i, a, s, c, u) {\n  if (0 === o && 1 === r) {\n    return e;\n  }\n  const f = isUniformUnit(o, s) ? isZonedEpochSlots(s) && o < 6 && t >= 6 ? nudgeZonedTimeDuration : nudgeDayTimeDuration : nudgeRelativeDuration;\n  let [l, d, m] = f(e, n, t, o, r, i, a, s, c, u);\n  return m && 7 !== o && (l = ((e, n, t, o, r, i, a, s) => {\n    const c = computeDurationSign(e);\n    for (let u = o + 1; u <= t; u++) {\n      if (7 === u && 7 !== t) {\n        continue;\n      }\n      const o = gr(u, e);\n      o[p[u]] += c;\n      const f = bigNanoToNumber(diffBigNanos(a(s(r, i, o)), n));\n      if (f && Math.sign(f) !== c) {\n        break;\n      }\n      e = o;\n    }\n    return e;\n  })(l, d, t, Math.max(6, o), a, s, c, u)), l;\n}\n\nfunction roundBigNano(e, n, t, o, r) {\n  if (6 === n) {\n    const n = (e => e[0] + e[1] / Uo)(e);\n    return [ roundByInc(n, t, o), 0 ];\n  }\n  return roundBigNanoByInc(e, computeNanoInc(n, t), o, r);\n}\n\nfunction roundBigNanoByInc(e, n, t, o) {\n  let [r, i] = e;\n  o && i < 0 && (i += Uo, r -= 1);\n  const [a, s] = divModFloor(roundByInc(i, n, t), Uo);\n  return createBigNano(r + a, s);\n}\n\nfunction roundByInc(e, n, t) {\n  return roundWithMode(e / n, t) * n;\n}\n\nfunction roundWithMode(e, n) {\n  return ai[n](e);\n}\n\nfunction nudgeDayTimeDuration(e, n, t, o, r, i) {\n  const a = computeDurationSign(e), s = durationFieldsToBigNano(e), c = roundBigNano(s, o, r, i), u = diffBigNanos(s, c), f = Math.sign(c[0] - s[0]) === a, l = nanoToDurationDayTimeFields(c, Math.min(t, 6));\n  return [ {\n    ...e,\n    ...l\n  }, addBigNanos(n, u), f ];\n}\n\nfunction nudgeZonedTimeDuration(e, n, t, o, r, i, a, s, c, u) {\n  const f = computeDurationSign(e) || 1, l = bigNanoToNumber(durationFieldsToBigNano(e, 5)), d = computeNanoInc(o, r);\n  let m = roundByInc(l, d, i);\n  const [p, h] = clampRelativeDuration(a, {\n    ...e,\n    ...hr\n  }, 6, f, s, c, u), g = m - bigNanoToNumber(diffBigNanos(p, h));\n  let D = 0;\n  g && Math.sign(g) !== f ? n = moveBigNano(p, m) : (D += f, m = roundByInc(g, d, i), \n  n = moveBigNano(h, m));\n  const T = nanoToDurationTimeFields(m);\n  return [ {\n    ...e,\n    ...T,\n    days: e.days + D\n  }, n, Boolean(D) ];\n}\n\nfunction nudgeRelativeDuration(e, n, t, o, r, i, a, s, c, u) {\n  const f = computeDurationSign(e), l = p[o], d = gr(o, e);\n  7 === o && (e = {\n    ...e,\n    weeks: e.weeks + Math.trunc(e.days / 7)\n  });\n  const m = divTrunc(e[l], r) * r;\n  d[l] = m;\n  const [h, g] = clampRelativeDuration(a, d, o, r * f, s, c, u), D = m + computeEpochNanoFrac(n, h, g) * f * r, T = roundByInc(D, r, i), I = Math.sign(T - D) === f;\n  return d[l] = T, [ d, I ? g : h, I ];\n}\n\nfunction ke(e, n, t, o) {\n  const [r, i, a, s] = (e => {\n    const n = refineTimeDisplayTuple(e = normalizeOptions(e));\n    return [ e.timeZone, ...n ];\n  })(o), c = void 0 !== r;\n  return ((e, n, t, o, r, i) => {\n    t = roundBigNanoByInc(t, r, o, 1);\n    const a = n.R(t);\n    return formatIsoDateTimeFields(epochNanoToIso(t, a), i) + (e ? Se(roundToMinute(a)) : \"Z\");\n  })(c, n(c ? e(r) : si), t.epochNanoseconds, i, a, s);\n}\n\nfunction Fe(e, n, t) {\n  const [o, r, i, a, s, c] = (e => {\n    e = normalizeOptions(e);\n    const n = ti(e), t = refineSubsecDigits(e), o = ri(e), r = ii(e, 4), i = Jr(e, 4);\n    return [ n, oi(e), o, r, ...refineSmallestUnitAndSubsecDigits(i, t) ];\n  })(t);\n  return ((e, n, t, o, r, i, a, s, c, u) => {\n    o = roundBigNanoByInc(o, c, s, 1);\n    const f = e(t).R(o);\n    return formatIsoDateTimeFields(epochNanoToIso(o, f), u) + Se(roundToMinute(f), a) + ((e, n) => 1 !== n ? \"[\" + (2 === n ? \"!\" : \"\") + e + \"]\" : \"\")(t, i) + formatCalendar(n, r);\n  })(e, n.calendar, n.timeZone, n.epochNanoseconds, o, r, i, a, s, c);\n}\n\nfunction Ft(e, n) {\n  const [t, o, r, i] = (e => (e = normalizeOptions(e), [ ti(e), ...refineTimeDisplayTuple(e) ]))(n);\n  return a = e.calendar, s = t, c = i, formatIsoDateTimeFields(roundDateTimeToNano(e, r, o), c) + formatCalendar(a, s);\n  var a, s, c;\n}\n\nfunction ce(e, n) {\n  return t = e.calendar, o = e, r = refineDateDisplayOptions(n), formatIsoDateFields(o) + formatCalendar(t, r);\n  var t, o, r;\n}\n\nfunction Kt(e, n) {\n  return formatDateLikeIso(e.calendar, formatIsoYearMonthFields, e, refineDateDisplayOptions(n));\n}\n\nfunction Jt(e, n) {\n  return formatDateLikeIso(e.calendar, formatIsoMonthDayFields, e, refineDateDisplayOptions(n));\n}\n\nfunction ct(e, n) {\n  const [t, o, r] = refineTimeDisplayOptions(n);\n  return i = r, formatIsoTimeFields(roundTimeToNano(e, o, t)[0], i);\n  var i;\n}\n\nfunction k(e, n) {\n  const [t, o, r] = refineTimeDisplayOptions(n, 3);\n  return o > 1 && checkDurationUnits(e = {\n    ...e,\n    ...roundDayTimeDurationByInc(e, o, t)\n  }), ((e, n) => {\n    const {sign: t} = e, o = -1 === t ? negateDurationFields(e) : e, {hours: r, minutes: i} = o, [a, s] = divModBigNano(durationFieldsToBigNano(o, 3), Ro, divModTrunc);\n    checkDurationTimeUnit(a);\n    const c = formatSubsecNano(s, n), u = n >= 0 || !t || c;\n    return (t < 0 ? \"-\" : \"\") + \"P\" + formatDurationFragments({\n      Y: formatDurationNumber(o.years),\n      M: formatDurationNumber(o.months),\n      W: formatDurationNumber(o.weeks),\n      D: formatDurationNumber(o.days)\n    }) + (r || i || a || u ? \"T\" + formatDurationFragments({\n      H: formatDurationNumber(r),\n      M: formatDurationNumber(i),\n      S: formatDurationNumber(a, u) + c\n    }) : \"\");\n  })(e, r);\n}\n\nfunction formatDateLikeIso(e, n, t, o) {\n  const r = o > 1 || 0 === o && e !== l;\n  return 1 === o ? e === l ? n(t) : formatIsoDateFields(t) : r ? formatIsoDateFields(t) + formatCalendarId(e, 2 === o) : n(t);\n}\n\nfunction formatDurationFragments(e) {\n  const n = [];\n  for (const t in e) {\n    const o = e[t];\n    o && n.push(o, t);\n  }\n  return n.join(\"\");\n}\n\nfunction formatIsoDateTimeFields(e, n) {\n  return formatIsoDateFields(e) + \"T\" + formatIsoTimeFields(e, n);\n}\n\nfunction formatIsoDateFields(e) {\n  return formatIsoYearMonthFields(e) + \"-\" + bo(e.isoDay);\n}\n\nfunction formatIsoYearMonthFields(e) {\n  const {isoYear: n} = e;\n  return (n < 0 || n > 9999 ? getSignStr(n) + padNumber(6, Math.abs(n)) : padNumber(4, n)) + \"-\" + bo(e.isoMonth);\n}\n\nfunction formatIsoMonthDayFields(e) {\n  return bo(e.isoMonth) + \"-\" + bo(e.isoDay);\n}\n\nfunction formatIsoTimeFields(e, n) {\n  const t = [ bo(e.isoHour), bo(e.isoMinute) ];\n  return -1 !== n && t.push(bo(e.isoSecond) + ((e, n, t, o) => formatSubsecNano(e * Qe + n * Yo + t, o))(e.isoMillisecond, e.isoMicrosecond, e.isoNanosecond, n)), \n  t.join(\":\");\n}\n\nfunction Se(e, n = 0) {\n  if (1 === n) {\n    return \"\";\n  }\n  const [t, o] = divModFloor(Math.abs(e), zo), [r, i] = divModFloor(o, Zo), [a, s] = divModFloor(i, Ro);\n  return getSignStr(e) + bo(t) + \":\" + bo(r) + (a || s ? \":\" + bo(a) + formatSubsecNano(s) : \"\");\n}\n\nfunction formatCalendar(e, n) {\n  return 1 !== n && (n > 1 || 0 === n && e !== l) ? formatCalendarId(e, 2 === n) : \"\";\n}\n\nfunction formatCalendarId(e, n) {\n  return \"[\" + (n ? \"!\" : \"\") + \"u-ca=\" + e + \"]\";\n}\n\nfunction formatSubsecNano(e, n) {\n  let t = padNumber(9, e);\n  return t = void 0 === n ? t.replace(li, \"\") : t.slice(0, n), t ? \".\" + t : \"\";\n}\n\nfunction getSignStr(e) {\n  return e < 0 ? \"-\" : \"+\";\n}\n\nfunction formatDurationNumber(e, n) {\n  return e || n ? e.toLocaleString(\"fullwide\", {\n    useGrouping: 0\n  }) : \"\";\n}\n\nfunction _zonedEpochSlotsToIso(e, n) {\n  const {epochNanoseconds: t} = e, o = (n.R ? n : n(e.timeZone)).R(t), r = epochNanoToIso(t, o);\n  return {\n    calendar: e.calendar,\n    ...r,\n    offsetNanoseconds: o\n  };\n}\n\nfunction getMatchingInstantFor(e, n, t, o = 0, r = 0, i, a) {\n  if (void 0 !== t && 1 === o && (1 === o || a)) {\n    return isoToEpochNanoWithOffset(n, t);\n  }\n  const s = e.I(n);\n  if (void 0 !== t && 3 !== o) {\n    const e = ((e, n, t, o) => {\n      const r = isoToEpochNano(n);\n      o && (t = roundToMinute(t));\n      for (const n of e) {\n        let e = bigNanoToNumber(diffBigNanos(n, r));\n        if (o && (e = roundToMinute(e)), e === t) {\n          return n;\n        }\n      }\n    })(s, n, t, i);\n    if (void 0 !== e) {\n      return e;\n    }\n    if (0 === o) {\n      throw new RangeError(Do);\n    }\n  }\n  return a ? isoToEpochNano(n) : getSingleInstantFor(e, n, r, s);\n}\n\nfunction getSingleInstantFor(e, n, t = 0, o = e.I(n)) {\n  if (1 === o.length) {\n    return o[0];\n  }\n  if (1 === t) {\n    throw new RangeError(To);\n  }\n  if (o.length) {\n    return o[3 === t ? 1 : 0];\n  }\n  const r = isoToEpochNano(n), i = ((e, n) => {\n    const t = e.R(moveBigNano(n, -Uo));\n    return (e => {\n      if (e > Uo) {\n        throw new RangeError(go);\n      }\n      return e;\n    })(e.R(moveBigNano(n, Uo)) - t);\n  })(e, r), a = i * (2 === t ? -1 : 1);\n  return (o = e.I(epochNanoToIso(r, a)))[2 === t ? 0 : o.length - 1];\n}\n\nfunction getStartOfDayInstantFor(e, n) {\n  const t = e.I(n);\n  if (t.length) {\n    return t[0];\n  }\n  const o = moveBigNano(isoToEpochNano(n), -Uo);\n  return e.O(o, 1);\n}\n\nfunction Ye(e, n, t) {\n  return xe(checkEpochNanoInBounds(addBigNanos(n.epochNanoseconds, (e => {\n    if (durationHasDateParts(e)) {\n      throw new RangeError(vo);\n    }\n    return durationFieldsToBigNano(e, 5);\n  })(e ? negateDurationFields(t) : t))));\n}\n\nfunction pe(e, n, t, o, r, i = Object.create(null)) {\n  const a = n(o.timeZone), s = e(o.calendar);\n  return {\n    ...o,\n    ...moveZonedEpochs(a, s, o, t ? negateDurationFields(r) : r, i)\n  };\n}\n\nfunction wt(e, n, t, o, r = Object.create(null)) {\n  const {calendar: i} = t;\n  return jt(moveDateTime(e(i), t, n ? negateDurationFields(o) : o, r), i);\n}\n\nfunction ne(e, n, t, o, r) {\n  const {calendar: i} = t;\n  return W(moveDate(e(i), t, n ? negateDurationFields(o) : o, r), i);\n}\n\nfunction Gt(e, n, t, o, r) {\n  const i = t.calendar, a = e(i);\n  let s = checkIsoDateInBounds(moveToDayOfMonthUnsafe(a, t));\n  n && (o = B(o)), o.sign < 0 && (s = a.P(s, {\n    ...pr,\n    months: 1\n  }), s = moveByDays(s, -1));\n  const c = a.P(s, o, r);\n  return createPlainYearMonthSlots(moveToDayOfMonthUnsafe(a, c), i);\n}\n\nfunction at(e, n, t) {\n  return St(moveTime(n, e ? negateDurationFields(t) : t)[0]);\n}\n\nfunction moveZonedEpochs(e, n, t, o, r) {\n  const i = durationFieldsToBigNano(o, 5);\n  let a = t.epochNanoseconds;\n  if (durationHasDateParts(o)) {\n    const s = he(t, e);\n    a = addBigNanos(getSingleInstantFor(e, {\n      ...moveDate(n, s, {\n        ...o,\n        ...hr\n      }, r),\n      ...nn(w, s)\n    }), i);\n  } else {\n    a = addBigNanos(a, i), mt(r);\n  }\n  return {\n    epochNanoseconds: checkEpochNanoInBounds(a)\n  };\n}\n\nfunction moveDateTime(e, n, t, o) {\n  const [r, i] = moveTime(n, t);\n  return checkIsoDateTimeInBounds({\n    ...moveDate(e, n, {\n      ...t,\n      ...hr,\n      days: t.days + i\n    }, o),\n    ...r\n  });\n}\n\nfunction moveDate(e, n, t, o) {\n  if (t.years || t.months || t.weeks) {\n    return e.P(n, t, o);\n  }\n  mt(o);\n  const r = t.days + durationFieldsToBigNano(t, 5)[0];\n  return r ? checkIsoDateInBounds(moveByDays(n, r)) : n;\n}\n\nfunction moveToDayOfMonthUnsafe(e, n, t = 1) {\n  return moveByDays(n, t - e.day(n));\n}\n\nfunction moveTime(e, n) {\n  const [t, o] = durationFieldsToBigNano(n, 5), [r, i] = nanoToIsoTimeAndDay(isoTimeFieldsToNano(e) + o);\n  return [ r, t + i ];\n}\n\nfunction moveByDays(e, n) {\n  return n ? {\n    ...e,\n    ...epochMilliToIso(isoToEpochMilli(e) + n * ko)\n  } : e;\n}\n\nfunction createMarkerSystem(e, n, t) {\n  const o = e(t.calendar);\n  return isZonedEpochSlots(t) ? [ t, o, n(t.timeZone) ] : [ {\n    ...t,\n    ...Nt\n  }, o ];\n}\n\nfunction createMarkerToEpochNano(e) {\n  return e ? extractEpochNano : isoToEpochNano;\n}\n\nfunction createMoveMarker(e) {\n  return e ? Pt(moveZonedEpochs, e) : moveDateTime;\n}\n\nfunction createDiffMarkers(e) {\n  return e ? Pt(diffZonedEpochsExact, e) : diffDateTimesExact;\n}\n\nfunction isZonedEpochSlots(e) {\n  return e && e.epochNanoseconds;\n}\n\nfunction isUniformUnit(e, n) {\n  return e <= 6 - (isZonedEpochSlots(n) ? 1 : 0);\n}\n\nfunction E(e, n, t, o, r, i, a) {\n  const s = e(normalizeOptions(a).relativeTo), c = Math.max(getMaxDurationUnit(r), getMaxDurationUnit(i));\n  if (isUniformUnit(c, s)) {\n    return Oe(checkDurationUnits(((e, n, t, o) => {\n      const r = addBigNanos(durationFieldsToBigNano(e), durationFieldsToBigNano(n), o ? -1 : 1);\n      if (!Number.isFinite(r[0])) {\n        throw new RangeError(Io);\n      }\n      return {\n        ...pr,\n        ...nanoToDurationDayTimeFields(r, t)\n      };\n    })(r, i, c, o)));\n  }\n  if (!s) {\n    throw new RangeError(yo);\n  }\n  o && (i = negateDurationFields(i));\n  const [u, f, l] = createMarkerSystem(n, t, s), d = createMoveMarker(l), m = createDiffMarkers(l), p = d(f, u, r);\n  return Oe(m(f, u, d(f, p, i), c));\n}\n\nfunction V(e, n, t, o, r) {\n  const i = getMaxDurationUnit(o), [a, s, c, u, f] = ((e, n, t) => {\n    e = normalizeOptionsOrString(e, Rr);\n    let o = Kr(e);\n    const r = t(e[Ar]);\n    let i = parseRoundingIncInteger(e);\n    const a = ii(e, 7);\n    let s = Jr(e);\n    if (void 0 === o && void 0 === s) {\n      throw new RangeError(Po);\n    }\n    if (null == s && (s = 0), null == o && (o = Math.max(s, n)), checkLargestSmallestUnit(o, s), \n    i = refineRoundingInc(i, s, 1), i > 1 && s > 5 && o !== s) {\n      throw new RangeError(\"For calendar units with roundingIncrement > 1, use largestUnit = smallestUnit\");\n    }\n    return [ o, s, i, a, r ];\n  })(r, i, e), l = Math.max(i, a);\n  if (!f && l <= 6) {\n    return Oe(checkDurationUnits(((e, n, t, o, r) => {\n      const i = roundBigNano(durationFieldsToBigNano(e), t, o, r);\n      return {\n        ...pr,\n        ...nanoToDurationDayTimeFields(i, n)\n      };\n    })(o, a, s, c, u)));\n  }\n  if (!isZonedEpochSlots(f) && !o.sign) {\n    return o;\n  }\n  if (!f) {\n    throw new RangeError(yo);\n  }\n  const [d, m, p] = createMarkerSystem(n, t, f), h = createMarkerToEpochNano(p), g = createMoveMarker(p), D = createDiffMarkers(p), T = g(m, d, o);\n  isZonedEpochSlots(f) || (checkIsoDateTimeInBounds(d), checkIsoDateTimeInBounds(T));\n  let I = D(m, d, T, a);\n  const M = o.sign, N = computeDurationSign(I);\n  if (M && N && M !== N) {\n    throw new RangeError(fo);\n  }\n  return I = roundRelativeDuration(I, h(T), a, s, c, u, m, d, h, g), Oe(I);\n}\n\nfunction Y(e) {\n  return -1 === e.sign ? B(e) : e;\n}\n\nfunction B(e) {\n  return Oe(negateDurationFields(e));\n}\n\nfunction negateDurationFields(e) {\n  const n = {};\n  for (const t of p) {\n    n[t] = -1 * e[t] || 0;\n  }\n  return n;\n}\n\nfunction y(e) {\n  return !e.sign;\n}\n\nfunction computeDurationSign(e, n = p) {\n  let t = 0;\n  for (const o of n) {\n    const n = Math.sign(e[o]);\n    if (n) {\n      if (t && t !== n) {\n        throw new RangeError(No);\n      }\n      t = n;\n    }\n  }\n  return t;\n}\n\nfunction checkDurationUnits(e) {\n  for (const n of dr) {\n    clampEntity(n, e[n], -di, di, 1);\n  }\n  return checkDurationTimeUnit(bigNanoToNumber(durationFieldsToBigNano(e), Ro)), e;\n}\n\nfunction checkDurationTimeUnit(e) {\n  if (!Number.isSafeInteger(e)) {\n    throw new RangeError(Mo);\n  }\n}\n\nfunction durationFieldsToBigNano(e, n = 6) {\n  return givenFieldsToBigNano(e, n, p);\n}\n\nfunction nanoToDurationDayTimeFields(e, n = 6) {\n  const [t, o] = e, r = nanoToGivenFields(o, n, p);\n  if (r[p[n]] += t * (Uo / Ao[n]), !Number.isFinite(r[p[n]])) {\n    throw new RangeError(Io);\n  }\n  return r;\n}\n\nfunction nanoToDurationTimeFields(e, n = 5) {\n  return nanoToGivenFields(e, n, p);\n}\n\nfunction durationHasDateParts(e) {\n  return Boolean(computeDurationSign(e, lr));\n}\n\nfunction getMaxDurationUnit(e) {\n  let n = 9;\n  for (;n > 0 && !e[p[n]]; n--) {}\n  return n;\n}\n\nfunction createSplitTuple(e, n) {\n  return [ e, n ];\n}\n\nfunction computePeriod(e) {\n  const n = Math.floor(e / ci) * ci;\n  return [ n, n + ci ];\n}\n\nfunction We(e) {\n  const n = parseDateTimeLike(e = toStringViaPrimitive(e));\n  if (!n) {\n    throw new RangeError(failedParse(e));\n  }\n  let t;\n  if (n.j) {\n    t = 0;\n  } else {\n    if (!n.offset) {\n      throw new RangeError(failedParse(e));\n    }\n    t = parseOffsetNano(n.offset);\n  }\n  return n.timeZone && parseOffsetNanoMaybe(n.timeZone, 1), xe(isoToEpochNanoWithOffset(checkIsoDateTimeFields(n), t));\n}\n\nfunction H(e) {\n  const n = parseDateTimeLike(m(e));\n  if (!n) {\n    throw new RangeError(failedParse(e));\n  }\n  if (n.timeZone) {\n    return finalizeZonedDateTime(n, n.offset ? parseOffsetNano(n.offset) : void 0);\n  }\n  if (n.j) {\n    throw new RangeError(failedParse(e));\n  }\n  return finalizeDate(n);\n}\n\nfunction Ae(e, n) {\n  const t = parseDateTimeLike(m(e));\n  if (!t || !t.timeZone) {\n    throw new RangeError(failedParse(e));\n  }\n  const {offset: o} = t, r = o ? parseOffsetNano(o) : void 0, [, i, a] = je(n);\n  return finalizeZonedDateTime(t, r, i, a);\n}\n\nfunction parseOffsetNano(e) {\n  const n = parseOffsetNanoMaybe(e);\n  if (void 0 === n) {\n    throw new RangeError(failedParse(e));\n  }\n  return n;\n}\n\nfunction Bt(e) {\n  const n = parseDateTimeLike(m(e));\n  if (!n || n.j) {\n    throw new RangeError(failedParse(e));\n  }\n  return jt(finalizeDateTime(n));\n}\n\nfunction de(e, n, t) {\n  let o = parseDateTimeLike(m(e));\n  if (!o || o.j) {\n    throw new RangeError(failedParse(e));\n  }\n  return n ? o.calendar === l && (o = -271821 === o.isoYear && 4 === o.isoMonth ? {\n    ...o,\n    isoDay: 20,\n    ...Nt\n  } : {\n    ...o,\n    isoDay: 1,\n    ...Nt\n  }) : t && o.calendar === l && (o = {\n    ...o,\n    isoYear: Br\n  }), W(o.C ? finalizeDateTime(o) : finalizeDate(o));\n}\n\nfunction _t(e, n) {\n  const t = parseYearMonthOnly(m(n));\n  if (t) {\n    return requireIsoCalendar(t), createPlainYearMonthSlots(checkIsoYearMonthInBounds(checkIsoDateFields(t)));\n  }\n  const o = de(n, 1);\n  return createPlainYearMonthSlots(moveToDayOfMonthUnsafe(e(o.calendar), o));\n}\n\nfunction requireIsoCalendar(e) {\n  if (e.calendar !== l) {\n    throw new RangeError(invalidSubstring(e.calendar));\n  }\n}\n\nfunction xt(e, n) {\n  const t = parseMonthDayOnly(m(n));\n  if (t) {\n    return requireIsoCalendar(t), createPlainMonthDaySlots(checkIsoDateFields(t));\n  }\n  const o = de(n, 0, 1), {calendar: r} = o, i = e(r), [a, s, c] = i.v(o), [u, f] = i.q(a, s), [l, d] = i.G(u, f, c);\n  return createPlainMonthDaySlots(checkIsoDateInBounds(i.V(l, d, c)), r);\n}\n\nfunction ht(e) {\n  let n, t = (e => {\n    const n = Pi.exec(e);\n    return n ? (organizeAnnotationParts(n[10]), organizeTimeParts(n)) : void 0;\n  })(m(e));\n  if (!t) {\n    if (t = parseDateTimeLike(e), !t) {\n      throw new RangeError(failedParse(e));\n    }\n    if (!t.C) {\n      throw new RangeError(failedParse(e));\n    }\n    if (t.j) {\n      throw new RangeError(invalidSubstring(\"Z\"));\n    }\n    requireIsoCalendar(t);\n  }\n  if ((n = parseYearMonthOnly(e)) && isIsoDateFieldsValid(n)) {\n    throw new RangeError(failedParse(e));\n  }\n  if ((n = parseMonthDayOnly(e)) && isIsoDateFieldsValid(n)) {\n    throw new RangeError(failedParse(e));\n  }\n  return St(constrainIsoTimeFields(t, 1));\n}\n\nfunction R(e) {\n  const n = (e => {\n    const n = Fi.exec(e);\n    return n ? (e => {\n      function parseUnit(e, r, i) {\n        let a = 0, s = 0;\n        if (i && ([a, o] = divModFloor(o, Ao[i])), void 0 !== e) {\n          if (t) {\n            throw new RangeError(invalidSubstring(e));\n          }\n          s = (e => {\n            const n = parseInt(e);\n            if (!Number.isFinite(n)) {\n              throw new RangeError(invalidSubstring(e));\n            }\n            return n;\n          })(e), n = 1, r && (o = parseSubsecNano(r) * (Ao[i] / Ro), t = 1);\n        }\n        return a + s;\n      }\n      let n = 0, t = 0, o = 0, r = {\n        ...zipProps(p, [ parseUnit(e[2]), parseUnit(e[3]), parseUnit(e[4]), parseUnit(e[5]), parseUnit(e[6], e[7], 5), parseUnit(e[8], e[9], 4), parseUnit(e[10], e[11], 3) ]),\n        ...nanoToGivenFields(o, 2, p)\n      };\n      if (!n) {\n        throw new RangeError(noValidFields(p));\n      }\n      return parseSign(e[1]) < 0 && (r = negateDurationFields(r)), r;\n    })(n) : void 0;\n  })(m(e));\n  if (!n) {\n    throw new RangeError(failedParse(e));\n  }\n  return Oe(checkDurationUnits(n));\n}\n\nfunction f(e) {\n  const n = parseDateTimeLike(e) || parseYearMonthOnly(e) || parseMonthDayOnly(e);\n  return n ? n.calendar : e;\n}\n\nfunction Z(e) {\n  const n = parseDateTimeLike(e);\n  return n && (n.timeZone || n.j && si || n.offset) || e;\n}\n\nfunction finalizeZonedDateTime(e, n, t = 0, o = 0) {\n  const r = M(e.timeZone), i = L(r);\n  let a;\n  return checkIsoDateTimeFields(e), a = e.C ? getMatchingInstantFor(i, e, n, t, o, !i.$, e.j) : getStartOfDayInstantFor(i, e), \n  _e(a, r, u(e.calendar));\n}\n\nfunction finalizeDateTime(e) {\n  return resolveSlotsCalendar(checkIsoDateTimeInBounds(checkIsoDateTimeFields(e)));\n}\n\nfunction finalizeDate(e) {\n  return resolveSlotsCalendar(checkIsoDateInBounds(checkIsoDateFields(e)));\n}\n\nfunction resolveSlotsCalendar(e) {\n  return {\n    ...e,\n    calendar: u(e.calendar)\n  };\n}\n\nfunction parseDateTimeLike(e) {\n  const n = vi.exec(e);\n  return n ? (e => {\n    const n = e[10], t = \"Z\" === (n || \"\").toUpperCase();\n    return {\n      isoYear: organizeIsoYearParts(e),\n      isoMonth: parseInt(e[4]),\n      isoDay: parseInt(e[5]),\n      ...organizeTimeParts(e.slice(5)),\n      ...organizeAnnotationParts(e[16]),\n      C: Boolean(e[6]),\n      j: t,\n      offset: t ? void 0 : n\n    };\n  })(n) : void 0;\n}\n\nfunction parseYearMonthOnly(e) {\n  const n = Ni.exec(e);\n  return n ? (e => ({\n    isoYear: organizeIsoYearParts(e),\n    isoMonth: parseInt(e[4]),\n    isoDay: 1,\n    ...organizeAnnotationParts(e[5])\n  }))(n) : void 0;\n}\n\nfunction parseMonthDayOnly(e) {\n  const n = yi.exec(e);\n  return n ? (e => ({\n    isoYear: Br,\n    isoMonth: parseInt(e[1]),\n    isoDay: parseInt(e[2]),\n    ...organizeAnnotationParts(e[3])\n  }))(n) : void 0;\n}\n\nfunction parseOffsetNanoMaybe(e, n) {\n  const t = Ei.exec(e);\n  return t ? ((e, n) => {\n    const t = e[4] || e[5];\n    if (n && t) {\n      throw new RangeError(invalidSubstring(t));\n    }\n    return (e => {\n      if (Math.abs(e) >= Uo) {\n        throw new RangeError(ho);\n      }\n      return e;\n    })((parseInt0(e[2]) * zo + parseInt0(e[3]) * Zo + parseInt0(e[4]) * Ro + parseSubsecNano(e[5] || \"\")) * parseSign(e[1]));\n  })(t, n) : void 0;\n}\n\nfunction organizeIsoYearParts(e) {\n  const n = parseSign(e[1]), t = parseInt(e[2] || e[3]);\n  if (n < 0 && !t) {\n    throw new RangeError(invalidSubstring(-0));\n  }\n  return n * t;\n}\n\nfunction organizeTimeParts(e) {\n  const n = parseInt0(e[3]);\n  return {\n    ...nanoToIsoTimeAndDay(parseSubsecNano(e[4] || \"\"))[0],\n    isoHour: parseInt0(e[1]),\n    isoMinute: parseInt0(e[2]),\n    isoSecond: 60 === n ? 59 : n\n  };\n}\n\nfunction organizeAnnotationParts(e) {\n  let n, t;\n  const o = [];\n  if (e.replace(Si, ((e, r, i) => {\n    const a = Boolean(r), [s, c] = i.split(\"=\").reverse();\n    if (c) {\n      if (\"u-ca\" === c) {\n        o.push(s), n || (n = a);\n      } else if (a || /[A-Z]/.test(c)) {\n        throw new RangeError(invalidSubstring(e));\n      }\n    } else {\n      if (t) {\n        throw new RangeError(invalidSubstring(e));\n      }\n      t = s;\n    }\n    return \"\";\n  })), o.length > 1 && n) {\n    throw new RangeError(invalidSubstring(e));\n  }\n  return {\n    timeZone: t,\n    calendar: o[0] || l\n  };\n}\n\nfunction parseSubsecNano(e) {\n  return parseInt(e.padEnd(9, \"0\"));\n}\n\nfunction createRegExp(e) {\n  return new RegExp(`^${e}$`, \"i\");\n}\n\nfunction parseSign(e) {\n  return e && \"+\" !== e ? -1 : 1;\n}\n\nfunction parseInt0(e) {\n  return void 0 === e ? 0 : parseInt(e);\n}\n\nfunction Ze(e) {\n  return M(m(e));\n}\n\nfunction M(e) {\n  const n = getTimeZoneEssence(e);\n  return \"number\" == typeof n ? Se(n) : n ? (e => {\n    if (Oi.test(e)) {\n      throw new RangeError(F(e));\n    }\n    if (bi.test(e)) {\n      throw new RangeError(po);\n    }\n    return e.toLowerCase().split(\"/\").map(((e, n) => (e.length <= 3 || /\\d/.test(e)) && !/etc|yap/.test(e) ? e.toUpperCase() : e.replace(/baja|dumont|[a-z]+/g, ((e, t) => e.length <= 2 && !n || \"in\" === e || \"chat\" === e ? e.toUpperCase() : e.length > 2 || !t ? capitalize(e).replace(/island|noronha|murdo|rivadavia|urville/, capitalize) : e)))).join(\"/\");\n  })(e) : si;\n}\n\nfunction getTimeZoneAtomic(e) {\n  const n = getTimeZoneEssence(e);\n  return \"number\" == typeof n ? n : n ? n.resolvedOptions().timeZone : si;\n}\n\nfunction getTimeZoneEssence(e) {\n  const n = parseOffsetNanoMaybe(e = e.toUpperCase(), 1);\n  return void 0 !== n ? n : e !== si ? wi(e) : void 0;\n}\n\nfunction Ke(e, n) {\n  return compareBigNanos(e.epochNanoseconds, n.epochNanoseconds);\n}\n\nfunction Be(e, n) {\n  return compareBigNanos(e.epochNanoseconds, n.epochNanoseconds);\n}\n\nfunction K(e, n, t, o, r, i) {\n  const a = e(normalizeOptions(i).relativeTo), s = Math.max(getMaxDurationUnit(o), getMaxDurationUnit(r));\n  if (allPropsEqual(p, o, r)) {\n    return 0;\n  }\n  if (isUniformUnit(s, a)) {\n    return compareBigNanos(durationFieldsToBigNano(o), durationFieldsToBigNano(r));\n  }\n  if (!a) {\n    throw new RangeError(yo);\n  }\n  const [c, u, f] = createMarkerSystem(n, t, a), l = createMarkerToEpochNano(f), d = createMoveMarker(f);\n  return compareBigNanos(l(d(u, c, o)), l(d(u, c, r)));\n}\n\nfunction Yt(e, n) {\n  return te(e, n) || Dt(e, n);\n}\n\nfunction te(e, n) {\n  return compareNumbers(isoToEpochMilli(e), isoToEpochMilli(n));\n}\n\nfunction Dt(e, n) {\n  return compareNumbers(isoTimeFieldsToNano(e), isoTimeFieldsToNano(n));\n}\n\nfunction Ve(e, n) {\n  return !Ke(e, n);\n}\n\nfunction Ce(e, n) {\n  return !Be(e, n) && !!isTimeZoneIdsEqual(e.timeZone, n.timeZone) && e.calendar === n.calendar;\n}\n\nfunction Ct(e, n) {\n  return !Yt(e, n) && e.calendar === n.calendar;\n}\n\nfunction re(e, n) {\n  return !te(e, n) && e.calendar === n.calendar;\n}\n\nfunction $t(e, n) {\n  return !te(e, n) && e.calendar === n.calendar;\n}\n\nfunction Lt(e, n) {\n  return !te(e, n) && e.calendar === n.calendar;\n}\n\nfunction st(e, n) {\n  return !Dt(e, n);\n}\n\nfunction isTimeZoneIdsEqual(e, n) {\n  if (e === n) {\n    return 1;\n  }\n  try {\n    return getTimeZoneAtomic(e) === getTimeZoneAtomic(n);\n  } catch (e) {}\n}\n\nfunction Ee(e, n, t, o) {\n  const r = refineDiffOptions(e, o, 3, 5), i = diffEpochNanos(n.epochNanoseconds, t.epochNanoseconds, ...r);\n  return Oe(e ? negateDurationFields(i) : i);\n}\n\nfunction we(e, n, t, o, r, i) {\n  const a = getCommonCalendarId(o.calendar, r.calendar), [s, c, u, f] = refineDiffOptions(t, i, 5), l = o.epochNanoseconds, d = r.epochNanoseconds, m = compareBigNanos(d, l);\n  let p;\n  if (m) {\n    if (s < 6) {\n      p = diffEpochNanos(l, d, s, c, u, f);\n    } else {\n      const t = n(((e, n) => {\n        if (!isTimeZoneIdsEqual(e, n)) {\n          throw new RangeError(mo);\n        }\n        return e;\n      })(o.timeZone, r.timeZone)), l = e(a);\n      p = diffZonedEpochsBig(l, t, o, r, m, s, i), p = roundRelativeDuration(p, d, s, c, u, f, l, o, extractEpochNano, Pt(moveZonedEpochs, t));\n    }\n  } else {\n    p = pr;\n  }\n  return Oe(t ? negateDurationFields(p) : p);\n}\n\nfunction It(e, n, t, o, r) {\n  const i = getCommonCalendarId(t.calendar, o.calendar), [a, s, c, u] = refineDiffOptions(n, r, 6), f = isoToEpochNano(t), l = isoToEpochNano(o), d = compareBigNanos(l, f);\n  let m;\n  if (d) {\n    if (a <= 6) {\n      m = diffEpochNanos(f, l, a, s, c, u);\n    } else {\n      const n = e(i);\n      m = diffDateTimesBig(n, t, o, d, a, r), m = roundRelativeDuration(m, l, a, s, c, u, n, t, isoToEpochNano, moveDateTime);\n    }\n  } else {\n    m = pr;\n  }\n  return Oe(n ? negateDurationFields(m) : m);\n}\n\nfunction oe(e, n, t, o, r) {\n  const i = getCommonCalendarId(t.calendar, o.calendar);\n  return diffDateLike(n, (() => e(i)), t, o, ...refineDiffOptions(n, r, 6, 9, 6));\n}\n\nfunction zt(e, n, t, o, r) {\n  const i = getCommonCalendarId(t.calendar, o.calendar), a = refineDiffOptions(n, r, 9, 9, 8), s = e(i), c = moveToDayOfMonthUnsafe(s, t), u = moveToDayOfMonthUnsafe(s, o);\n  return c.isoYear === u.isoYear && c.isoMonth === u.isoMonth && c.isoDay === u.isoDay ? Oe(pr) : diffDateLike(n, (() => s), checkIsoDateInBounds(c), checkIsoDateInBounds(u), ...a, 8);\n}\n\nfunction diffDateLike(e, n, t, o, r, i, a, s, c = 6) {\n  const u = isoToEpochNano(t), f = isoToEpochNano(o);\n  if (void 0 === u || void 0 === f) {\n    throw new RangeError(Io);\n  }\n  let l;\n  if (compareBigNanos(f, u)) {\n    if (6 === r) {\n      l = diffEpochNanos(u, f, r, i, a, s);\n    } else {\n      const e = n();\n      l = e.N(t, o, r), i === c && 1 === a || (l = roundRelativeDuration(l, f, r, i, a, s, e, t, isoToEpochNano, moveDate));\n    }\n  } else {\n    l = pr;\n  }\n  return Oe(e ? negateDurationFields(l) : l);\n}\n\nfunction it(e, n, t, o) {\n  const [r, i, a, s] = refineDiffOptions(e, o, 5, 5), c = roundByInc(diffTimes(n, t), computeNanoInc(i, a), s), u = {\n    ...pr,\n    ...nanoToDurationTimeFields(c, r)\n  };\n  return Oe(e ? negateDurationFields(u) : u);\n}\n\nfunction diffZonedEpochsExact(e, n, t, o, r, i) {\n  const a = compareBigNanos(o.epochNanoseconds, t.epochNanoseconds);\n  return a ? r < 6 ? diffEpochNanosExact(t.epochNanoseconds, o.epochNanoseconds, r) : diffZonedEpochsBig(n, e, t, o, a, r, i) : pr;\n}\n\nfunction diffDateTimesExact(e, n, t, o, r) {\n  const i = isoToEpochNano(n), a = isoToEpochNano(t), s = compareBigNanos(a, i);\n  return s ? o <= 6 ? diffEpochNanosExact(i, a, o) : diffDateTimesBig(e, n, t, s, o, r) : pr;\n}\n\nfunction diffZonedEpochsBig(e, n, t, o, r, i, a) {\n  const [s, c, u] = ((e, n, t, o) => {\n    function updateMid() {\n      return f = {\n        ...moveByDays(a, c++ * -o),\n        ...i\n      }, l = getSingleInstantFor(e, f), compareBigNanos(s, l) === -o;\n    }\n    const r = he(n, e), i = nn(w, r), a = he(t, e), s = t.epochNanoseconds;\n    let c = 0;\n    const u = diffTimes(r, a);\n    let f, l;\n    if (Math.sign(u) === -o && c++, updateMid() && (-1 === o || updateMid())) {\n      throw new RangeError(fo);\n    }\n    const d = bigNanoToNumber(diffBigNanos(l, s));\n    return [ r, f, d ];\n  })(n, t, o, r);\n  var f, l;\n  return {\n    ...6 === i ? (f = s, l = c, {\n      ...pr,\n      days: diffDays(f, l)\n    }) : e.N(s, c, i, a),\n    ...nanoToDurationTimeFields(u)\n  };\n}\n\nfunction diffDateTimesBig(e, n, t, o, r, i) {\n  const [a, s, c] = ((e, n, t) => {\n    let o = n, r = diffTimes(e, n);\n    return Math.sign(r) === -t && (o = moveByDays(n, -t), r += Uo * t), [ e, o, r ];\n  })(n, t, o);\n  return {\n    ...e.N(a, s, r, i),\n    ...nanoToDurationTimeFields(c)\n  };\n}\n\nfunction diffEpochNanos(e, n, t, o, r, i) {\n  return {\n    ...pr,\n    ...nanoToDurationDayTimeFields(roundBigNano(diffBigNanos(e, n), o, r, i), t)\n  };\n}\n\nfunction diffEpochNanosExact(e, n, t) {\n  return {\n    ...pr,\n    ...nanoToDurationDayTimeFields(diffBigNanos(e, n), t)\n  };\n}\n\nfunction diffDays(e, n) {\n  return diffEpochMilliByDay(isoToEpochMilli(e), isoToEpochMilli(n));\n}\n\nfunction diffEpochMilliByDay(e, n) {\n  return Math.trunc((n - e) / ko);\n}\n\nfunction diffTimes(e, n) {\n  return isoTimeFieldsToNano(n) - isoTimeFieldsToNano(e);\n}\n\nfunction getCommonCalendarId(e, n) {\n  if (e !== n) {\n    throw new RangeError(lo);\n  }\n  return e;\n}\n\nfunction computeNativeWeekOfYear(e) {\n  return this.m(e)[0];\n}\n\nfunction computeNativeYearOfWeek(e) {\n  return this.m(e)[1];\n}\n\nfunction computeNativeDayOfYear(e) {\n  const [n] = this.v(e);\n  return diffEpochMilliByDay(this.p(n), isoToEpochMilli(e)) + 1;\n}\n\nfunction parseMonthCode(e) {\n  const n = Bi.exec(e);\n  if (!n) {\n    throw new RangeError(invalidMonthCode(e));\n  }\n  return [ parseInt(n[1]), Boolean(n[2]) ];\n}\n\nfunction formatMonthCode(e, n) {\n  return \"M\" + bo(e) + (n ? \"L\" : \"\");\n}\n\nfunction monthCodeNumberToMonth(e, n, t) {\n  return e + (n || t && e >= t ? 1 : 0);\n}\n\nfunction monthToMonthCodeNumber(e, n) {\n  return e - (n && e >= n ? 1 : 0);\n}\n\nfunction eraYearToYear(e, n) {\n  return (n + e) * (Math.sign(n) || 1) || 0;\n}\n\nfunction getCalendarEraOrigins(e) {\n  return ir[getCalendarIdBase(e)];\n}\n\nfunction getCalendarLeapMonthMeta(e) {\n  return sr[getCalendarIdBase(e)];\n}\n\nfunction getCalendarIdBase(e) {\n  return computeCalendarIdBase(e.id || l);\n}\n\nfunction createIntlCalendar(e) {\n  function epochMilliToIntlFields(e) {\n    return ((e, n) => ({\n      ...parseIntlYear(e, n),\n      o: e.month,\n      day: parseInt(e.day)\n    }))(hashIntlFormatParts(n, e), t);\n  }\n  const n = Ci(e), t = computeCalendarIdBase(e);\n  return {\n    id: e,\n    h: createIntlFieldCache(epochMilliToIntlFields),\n    l: createIntlYearDataCache(epochMilliToIntlFields)\n  };\n}\n\nfunction createIntlFieldCache(e) {\n  return on((n => {\n    const t = isoToEpochMilli(n);\n    return e(t);\n  }), WeakMap);\n}\n\nfunction createIntlYearDataCache(e) {\n  const n = e(0).year - Or;\n  return on((t => {\n    let o, r = isoArgsToEpochMilli(t - n), i = 0;\n    const a = [], s = [];\n    do {\n      r += 400 * ko;\n    } while ((o = e(r)).year <= t);\n    do {\n      if (r += (1 - o.day) * ko, o.year === t && (a.push(r), s.push(o.o)), r -= ko, ++i > 100 || r < -Pr) {\n        throw new RangeError(fo);\n      }\n    } while ((o = e(r)).year >= t);\n    return {\n      i: a.reverse(),\n      u: Fo(s.reverse())\n    };\n  }));\n}\n\nfunction parseIntlYear(e, n) {\n  let t, o, r = parseIntlPartsYear(e);\n  if (e.era) {\n    const i = ir[n], a = ar[n] || {};\n    void 0 !== i && (t = \"islamic\" === n ? \"ah\" : e.era.normalize(\"NFD\").toLowerCase().replace(/[^a-z0-9]/g, \"\"), \n    \"bc\" === t || \"b\" === t ? t = \"bce\" : \"ad\" === t || \"a\" === t ? t = \"ce\" : \"beforeroc\" === t && (t = \"broc\"), \n    t = a[t] || t, o = r, r = eraYearToYear(o, i[t] || 0));\n  }\n  return {\n    era: t,\n    eraYear: o,\n    year: r\n  };\n}\n\nfunction parseIntlPartsYear(e) {\n  return parseInt(e.relatedYear || e.year);\n}\n\nfunction computeIntlDateParts(e) {\n  const {year: n, o: t, day: o} = this.h(e), {u: r} = this.l(n);\n  return [ n, r[t] + 1, o ];\n}\n\nfunction computeIntlEpochMilli(e, n = 1, t = 1) {\n  return this.l(e).i[n - 1] + (t - 1) * ko;\n}\n\nfunction computeIntlMonthCodeParts(e, n) {\n  const t = computeIntlLeapMonth.call(this, e);\n  return [ monthToMonthCodeNumber(n, t), t === n ];\n}\n\nfunction computeIntlLeapMonth(e) {\n  const n = queryMonthStrings(this, e), t = queryMonthStrings(this, e - 1), o = n.length;\n  if (o > t.length) {\n    const e = getCalendarLeapMonthMeta(this);\n    if (e < 0) {\n      return -e;\n    }\n    for (let e = 0; e < o; e++) {\n      if (n[e] !== t[e]) {\n        return e + 1;\n      }\n    }\n  }\n}\n\nfunction computeIntlDaysInYear(e) {\n  return diffEpochMilliByDay(computeIntlEpochMilli.call(this, e), computeIntlEpochMilli.call(this, e + 1));\n}\n\nfunction computeIntlDaysInMonth(e, n) {\n  const {i: t} = this.l(e);\n  let o = n + 1, r = t;\n  return o > t.length && (o = 1, r = this.l(e + 1).i), diffEpochMilliByDay(t[n - 1], r[o - 1]);\n}\n\nfunction computeIntlMonthsInYear(e) {\n  return this.l(e).i.length;\n}\n\nfunction computeIntlEraParts(e) {\n  const n = this.h(e);\n  return [ n.era, n.eraYear ];\n}\n\nfunction queryMonthStrings(e, n) {\n  return Object.keys(e.l(n).u);\n}\n\nfunction Mt(e) {\n  return u(m(e));\n}\n\nfunction u(e) {\n  if ((e = e.toLowerCase()) !== l && e !== or) {\n    const n = Ci(e).resolvedOptions().calendar;\n    if (computeCalendarIdBase(e) !== computeCalendarIdBase(n)) {\n      throw new RangeError(c(e));\n    }\n    return n;\n  }\n  return e;\n}\n\nfunction computeCalendarIdBase(e) {\n  return \"islamicc\" === e && (e = \"islamic\"), e.split(\"-\")[0];\n}\n\nfunction createNativeOpsCreator(e, n) {\n  return t => t === l ? e : t === or || t === rr ? Object.assign(Object.create(e), {\n    id: t\n  }) : Object.assign(Object.create(n), ki(t));\n}\n\nfunction $(e, n, t, o) {\n  const r = refineCalendarFields(t, o, Xo, [], xo);\n  if (void 0 !== r.timeZone) {\n    const o = t.F(r), i = refineTimeBag(r), a = e(r.timeZone);\n    return {\n      epochNanoseconds: getMatchingInstantFor(n(a), {\n        ...o,\n        ...i\n      }, void 0 !== r.offset ? parseOffsetNano(r.offset) : void 0),\n      timeZone: a\n    };\n  }\n  return {\n    ...t.F(r),\n    ...Nt\n  };\n}\n\nfunction Ne(e, n, t, o, r, i) {\n  const a = refineCalendarFields(t, r, Xo, jo, xo), s = e(a.timeZone), [c, u, f] = je(i), l = t.F(a, fabricateOverflowOptions(c)), d = refineTimeBag(a, c);\n  return _e(getMatchingInstantFor(n(s), {\n    ...l,\n    ...d\n  }, void 0 !== a.offset ? parseOffsetNano(a.offset) : void 0, u, f), s, o);\n}\n\nfunction At(e, n, t) {\n  const o = refineCalendarFields(e, n, Xo, [], O), r = mt(t);\n  return jt(checkIsoDateTimeInBounds({\n    ...e.F(o, fabricateOverflowOptions(r)),\n    ...refineTimeBag(o, r)\n  }));\n}\n\nfunction me(e, n, t, o = []) {\n  const r = refineCalendarFields(e, n, Xo, o);\n  return e.F(r, t);\n}\n\nfunction Xt(e, n, t, o) {\n  const r = refineCalendarFields(e, n, Ko, o);\n  return e.K(r, t);\n}\n\nfunction Rt(e, n, t, o) {\n  const r = refineCalendarFields(e, t, Xo, Jo);\n  return n && void 0 !== r.month && void 0 === r.monthCode && void 0 === r.year && (r.year = Br), \n  e._(r, o);\n}\n\nfunction Tt(e, n) {\n  return St(refineTimeBag(refineFields(e, qo, [], 1), mt(n)));\n}\n\nfunction q(e) {\n  const n = refineFields(e, ur);\n  return Oe(checkDurationUnits({\n    ...pr,\n    ...n\n  }));\n}\n\nfunction refineCalendarFields(e, n, t, o = [], r = []) {\n  return refineFields(n, [ ...e.fields(t), ...r ].sort(), o);\n}\n\nfunction refineFields(e, n, t, o = !t) {\n  const r = {};\n  let i, a = 0;\n  for (const o of n) {\n    if (o === i) {\n      throw new RangeError(duplicateFields(o));\n    }\n    if (\"constructor\" === o || \"__proto__\" === o) {\n      throw new RangeError(forbiddenField(o));\n    }\n    let n = e[o];\n    if (void 0 !== n) {\n      a = 1, Li[o] && (n = Li[o](n, o)), r[o] = n;\n    } else if (t) {\n      if (t.includes(o)) {\n        throw new TypeError(missingField(o));\n      }\n      r[o] = tr[o];\n    }\n    i = o;\n  }\n  if (o && !a) {\n    throw new TypeError(noValidFields(n));\n  }\n  return r;\n}\n\nfunction refineTimeBag(e, n) {\n  return constrainIsoTimeFields(xi({\n    ...tr,\n    ...e\n  }), n);\n}\n\nfunction De(e, n, t, o, r) {\n  const {calendar: i, timeZone: a} = t, s = e(i), c = n(a), u = [ ...s.fields(Xo), ...Lo ].sort(), f = (e => {\n    const n = he(e, L), t = Se(n.offsetNanoseconds), o = ji(e.calendar), [r, i, a] = o.v(n), [s, c] = o.q(r, i), u = formatMonthCode(s, c);\n    return {\n      ...$i(n),\n      year: r,\n      monthCode: u,\n      day: a,\n      offset: t\n    };\n  })(t), l = refineFields(o, u), d = s.k(f, l), m = {\n    ...f,\n    ...l\n  }, [p, h, g] = je(r, 2);\n  return _e(getMatchingInstantFor(c, {\n    ...s.F(d, fabricateOverflowOptions(p)),\n    ...constrainIsoTimeFields(xi(m), p)\n  }, parseOffsetNano(m.offset), h, g), a, i);\n}\n\nfunction gt(e, n, t, o) {\n  const r = e(n.calendar), i = [ ...r.fields(Xo), ...O ].sort(), a = {\n    ...computeDateEssentials(s = n),\n    hour: s.isoHour,\n    minute: s.isoMinute,\n    second: s.isoSecond,\n    millisecond: s.isoMillisecond,\n    microsecond: s.isoMicrosecond,\n    nanosecond: s.isoNanosecond\n  };\n  var s;\n  const c = refineFields(t, i), u = mt(o), f = r.k(a, c), l = {\n    ...a,\n    ...c\n  };\n  return jt(checkIsoDateTimeInBounds({\n    ...r.F(f, fabricateOverflowOptions(u)),\n    ...constrainIsoTimeFields(xi(l), u)\n  }));\n}\n\nfunction ee(e, n, t, o) {\n  const r = e(n.calendar), i = r.fields(Xo).sort(), a = computeDateEssentials(n), s = refineFields(t, i), c = r.k(a, s);\n  return r.F(c, o);\n}\n\nfunction Wt(e, n, t, o) {\n  const r = e(n.calendar), i = r.fields(Ko).sort(), a = (e => {\n    const n = ji(e.calendar), [t, o] = n.v(e), [r, i] = n.q(t, o);\n    return {\n      year: t,\n      monthCode: formatMonthCode(r, i)\n    };\n  })(n), s = refineFields(t, i), c = r.k(a, s);\n  return r.K(c, o);\n}\n\nfunction Et(e, n, t, o) {\n  const r = e(n.calendar), i = r.fields(Xo).sort(), a = (e => {\n    const n = ji(e.calendar), [t, o, r] = n.v(e), [i, a] = n.q(t, o);\n    return {\n      monthCode: formatMonthCode(i, a),\n      day: r\n    };\n  })(n), s = refineFields(t, i), c = r.k(a, s);\n  return r._(c, o);\n}\n\nfunction rt(e, n, t) {\n  return St(((e, n, t) => refineTimeBag({\n    ...nn(qo, e),\n    ...refineFields(n, qo)\n  }, mt(t)))(e, n, t));\n}\n\nfunction A(e, n) {\n  return Oe((t = e, o = n, checkDurationUnits({\n    ...t,\n    ...refineFields(o, ur)\n  })));\n  var t, o;\n}\n\nfunction convertToIso(e, n, t, o, r) {\n  n = nn(t = e.fields(t), n), o = refineFields(o, r = e.fields(r), []);\n  let i = e.k(n, o);\n  return i = refineFields(i, [ ...t, ...r ].sort(), []), e.F(i);\n}\n\nfunction refineYear(e, n) {\n  const t = getCalendarEraOrigins(e), o = ar[e.id || \"\"] || {};\n  let {era: r, eraYear: i, year: a} = n;\n  if (void 0 !== r || void 0 !== i) {\n    if (void 0 === r || void 0 === i) {\n      throw new TypeError(io);\n    }\n    if (!t) {\n      throw new RangeError(ro);\n    }\n    const e = t[o[r] || r];\n    if (void 0 === e) {\n      throw new RangeError(invalidEra(r));\n    }\n    const n = eraYearToYear(i, e);\n    if (void 0 !== a && a !== n) {\n      throw new RangeError(ao);\n    }\n    a = n;\n  } else if (void 0 === a) {\n    throw new TypeError(missingYear(t));\n  }\n  return a;\n}\n\nfunction refineMonth(e, n, t, o) {\n  let {month: r, monthCode: i} = n;\n  if (void 0 !== i) {\n    const n = ((e, n, t, o) => {\n      const r = e.L(t), [i, a] = parseMonthCode(n);\n      let s = monthCodeNumberToMonth(i, a, r);\n      if (a) {\n        const n = getCalendarLeapMonthMeta(e);\n        if (void 0 === n) {\n          throw new RangeError(uo);\n        }\n        if (n > 0) {\n          if (s > n) {\n            throw new RangeError(uo);\n          }\n          if (void 0 === r) {\n            if (1 === o) {\n              throw new RangeError(uo);\n            }\n            s--;\n          }\n        } else {\n          if (s !== -n) {\n            throw new RangeError(uo);\n          }\n          if (void 0 === r && 1 === o) {\n            throw new RangeError(uo);\n          }\n        }\n      }\n      return s;\n    })(e, i, t, o);\n    if (void 0 !== r && r !== n) {\n      throw new RangeError(so);\n    }\n    r = n, o = 1;\n  } else if (void 0 === r) {\n    throw new TypeError(co);\n  }\n  return clampEntity(\"month\", r, 1, e.B(t), o);\n}\n\nfunction refineDay(e, n, t, o, r) {\n  return clampProp(n, \"day\", 1, e.U(o, t), r);\n}\n\nfunction spliceFields(e, n, t, o) {\n  let r = 0;\n  const i = [];\n  for (const e of t) {\n    void 0 !== n[e] ? r = 1 : i.push(e);\n  }\n  if (Object.assign(e, n), r) {\n    for (const n of o || i) {\n      delete e[n];\n    }\n  }\n}\n\nfunction computeDateEssentials(e) {\n  const n = ji(e.calendar), [t, o, r] = n.v(e), [i, a] = n.q(t, o);\n  return {\n    year: t,\n    monthCode: formatMonthCode(i, a),\n    day: r\n  };\n}\n\nfunction qe(e) {\n  return xe(checkEpochNanoInBounds(bigIntToBigNano(toBigInt(e))));\n}\n\nfunction ye(e, n, t, o, r = l) {\n  return _e(checkEpochNanoInBounds(bigIntToBigNano(toBigInt(t))), n(o), e(r));\n}\n\nfunction Zt(n, t, o, r, i = 0, a = 0, s = 0, c = 0, u = 0, f = 0, d = l) {\n  return jt(checkIsoDateTimeInBounds(checkIsoDateTimeFields(e(toInteger, zipProps(Tr, [ t, o, r, i, a, s, c, u, f ])))), n(d));\n}\n\nfunction ue(n, t, o, r, i = l) {\n  return W(checkIsoDateInBounds(checkIsoDateFields(e(toInteger, {\n    isoYear: t,\n    isoMonth: o,\n    isoDay: r\n  }))), n(i));\n}\n\nfunction Qt(e, n, t, o = l, r = 1) {\n  const i = toInteger(n), a = toInteger(t), s = e(o);\n  return createPlainYearMonthSlots(checkIsoYearMonthInBounds(checkIsoDateFields({\n    isoYear: i,\n    isoMonth: a,\n    isoDay: toInteger(r)\n  })), s);\n}\n\nfunction kt(e, n, t, o = l, r = Br) {\n  const i = toInteger(n), a = toInteger(t), s = e(o);\n  return createPlainMonthDaySlots(checkIsoDateInBounds(checkIsoDateFields({\n    isoYear: toInteger(r),\n    isoMonth: i,\n    isoDay: a\n  })), s);\n}\n\nfunction ut(n = 0, t = 0, o = 0, r = 0, i = 0, a = 0) {\n  return St(constrainIsoTimeFields(e(toInteger, zipProps(w, [ n, t, o, r, i, a ])), 1));\n}\n\nfunction j(n = 0, t = 0, o = 0, r = 0, i = 0, a = 0, s = 0, c = 0, u = 0, f = 0) {\n  return Oe(checkDurationUnits(e(toStrictInteger, zipProps(p, [ n, t, o, r, i, a, s, c, u, f ]))));\n}\n\nfunction Je(e, n, t = l) {\n  return _e(e.epochNanoseconds, n, t);\n}\n\nfunction be(e) {\n  return xe(e.epochNanoseconds);\n}\n\nfunction yt(e, n) {\n  return jt(he(n, e));\n}\n\nfunction fe(e, n) {\n  return W(he(n, e));\n}\n\nfunction dt(e, n) {\n  return St(he(n, e));\n}\n\nfunction bt(e, n, t, o) {\n  const r = ((e, n, t, o) => {\n    const r = (e => ei(normalizeOptions(e)))(o);\n    return getSingleInstantFor(e(n), t, r);\n  })(e, t, n, o);\n  return _e(checkEpochNanoInBounds(r), t, n.calendar);\n}\n\nfunction ae(e, n, t, o, r) {\n  const i = e(r.timeZone), a = r.plainTime, s = void 0 !== a ? n(a) : void 0, c = t(i);\n  let u;\n  return u = s ? getSingleInstantFor(c, {\n    ...o,\n    ...s\n  }) : getStartOfDayInstantFor(c, {\n    ...o,\n    ...Nt\n  }), _e(u, i, o.calendar);\n}\n\nfunction ie(e, n = Nt) {\n  return jt(checkIsoDateTimeInBounds({\n    ...e,\n    ...n\n  }));\n}\n\nfunction le(e, n, t) {\n  return ((e, n) => {\n    const t = refineCalendarFields(e, n, Qo);\n    return e.K(t, void 0);\n  })(e(n.calendar), t);\n}\n\nfunction se(e, n, t) {\n  return ((e, n) => {\n    const t = refineCalendarFields(e, n, nr);\n    return e._(t);\n  })(e(n.calendar), t);\n}\n\nfunction Ht(e, n, t, o) {\n  return ((e, n, t) => convertToIso(e, n, Qo, requireObjectLike(t), Jo))(e(n.calendar), t, o);\n}\n\nfunction Vt(e, n, t, o) {\n  return ((e, n, t) => convertToIso(e, n, nr, requireObjectLike(t), Go))(e(n.calendar), t, o);\n}\n\nfunction $e(e) {\n  return xe(checkEpochNanoInBounds(Ge(toStrictInteger(e), Qe)));\n}\n\nfunction He(e) {\n  return xe(checkEpochNanoInBounds(bigIntToBigNano(toBigInt(e))));\n}\n\nfunction createOptionsTransformer(e, n, t) {\n  const o = new Set(t);\n  return (r, i) => {\n    const a = t && hasAnyPropsByName(r, t);\n    if (!hasAnyPropsByName(r = ((e, n) => {\n      const t = {};\n      for (const o in n) {\n        e.has(o) || (t[o] = n[o]);\n      }\n      return t;\n    })(o, r), e)) {\n      if (i && a) {\n        throw new TypeError(\"Invalid formatting options\");\n      }\n      r = {\n        ...n,\n        ...r\n      };\n    }\n    return t && (r.timeZone = si, [ \"full\", \"long\" ].includes(r.J) && (r.J = \"medium\")), \n    r;\n  };\n}\n\nfunction Q(e, n = an, t = 0) {\n  const [o, , , r] = e;\n  return (i, a = Na, ...s) => {\n    const c = n(r && r(...s), i, a, o, t), u = c.resolvedOptions();\n    return [ c, ...toEpochMillis(e, u, s) ];\n  };\n}\n\nfunction an(e, n, t, o, r) {\n  if (t = o(t, r), e) {\n    if (void 0 !== t.timeZone) {\n      throw new TypeError(So);\n    }\n    t.timeZone = e;\n  }\n  return new en(n, t);\n}\n\nfunction toEpochMillis(e, n, t) {\n  const [, o, r] = e;\n  return t.map((e => (e.calendar && ((e, n, t) => {\n    if ((t || e !== l) && e !== n) {\n      throw new RangeError(lo);\n    }\n  })(e.calendar, n.calendar, r), o(e, n))));\n}\n\nfunction ge(e, n, t) {\n  const o = n.timeZone, r = e(o), i = {\n    ...he(n, r),\n    ...t || Nt\n  };\n  let a;\n  return a = t ? getMatchingInstantFor(r, i, i.offsetNanoseconds, 2) : getStartOfDayInstantFor(r, i), \n  _e(a, o, n.calendar);\n}\n\nfunction Ot(e, n = Nt) {\n  return jt(checkIsoDateTimeInBounds({\n    ...e,\n    ...n\n  }));\n}\n\nfunction pt(e, n) {\n  return {\n    ...e,\n    calendar: n\n  };\n}\n\nfunction Pe(e, n) {\n  return {\n    ...e,\n    timeZone: n\n  };\n}\n\nfunction tn(e) {\n  const n = Xe();\n  return epochNanoToIso(n, e.R(n));\n}\n\nfunction Xe() {\n  return Ge(Date.now(), Qe);\n}\n\nfunction Ue() {\n  return va || (va = (new en).resolvedOptions().timeZone);\n}\n\nconst expectedInteger = (e, n) => `Non-integer ${e}: ${n}`, expectedPositive = (e, n) => `Non-positive ${e}: ${n}`, expectedFinite = (e, n) => `Non-finite ${e}: ${n}`, forbiddenBigIntToNumber = e => `Cannot convert bigint to ${e}`, invalidBigInt = e => `Invalid bigint: ${e}`, no = \"Cannot convert Symbol to string\", oo = \"Invalid object\", numberOutOfRange = (e, n, t, o, r) => r ? numberOutOfRange(e, r[n], r[t], r[o]) : invalidEntity(e, n) + `; must be between ${t}-${o}`, invalidEntity = (e, n) => `Invalid ${e}: ${n}`, missingField = e => `Missing ${e}`, forbiddenField = e => `Invalid field ${e}`, duplicateFields = e => `Duplicate field ${e}`, noValidFields = e => \"No valid fields: \" + e.join(), i = \"Invalid bag\", invalidChoice = (e, n, t) => invalidEntity(e, n) + \"; must be \" + Object.keys(t).join(), b = \"Cannot use valueOf\", a = \"Invalid calling context\", ro = \"Forbidden era/eraYear\", io = \"Mismatching era/eraYear\", ao = \"Mismatching year/eraYear\", invalidEra = e => `Invalid era: ${e}`, missingYear = e => \"Missing year\" + (e ? \"/era/eraYear\" : \"\"), invalidMonthCode = e => `Invalid monthCode: ${e}`, so = \"Mismatching month/monthCode\", co = \"Missing month/monthCode\", uo = \"Invalid leap month\", fo = \"Invalid protocol results\", c = e => invalidEntity(\"Calendar\", e), lo = \"Mismatching Calendars\", F = e => invalidEntity(\"TimeZone\", e), mo = \"Mismatching TimeZones\", po = \"Forbidden ICU TimeZone\", ho = \"Out-of-bounds offset\", go = \"Out-of-bounds TimeZone gap\", Do = \"Invalid TimeZone offset\", To = \"Ambiguous offset\", Io = \"Out-of-bounds date\", Mo = \"Out-of-bounds duration\", No = \"Cannot mix duration signs\", yo = \"Missing relativeTo\", vo = \"Cannot use large units\", Po = \"Required smallestUnit or largestUnit\", Eo = \"smallestUnit > largestUnit\", failedParse = e => `Cannot parse: ${e}`, invalidSubstring = e => `Invalid substring: ${e}`, rn = e => `Cannot format ${e}`, ln = \"Mismatching types for formatting\", So = \"Cannot specify TimeZone\", Fo = /*@__PURE__*/ Pt(g, ((e, n) => n)), wo = /*@__PURE__*/ Pt(g, ((e, n, t) => t)), bo = /*@__PURE__*/ Pt(padNumber, 2), Oo = {\n  nanosecond: 0,\n  microsecond: 1,\n  millisecond: 2,\n  second: 3,\n  minute: 4,\n  hour: 5,\n  day: 6,\n  week: 7,\n  month: 8,\n  year: 9\n}, Bo = /*@__PURE__*/ Object.keys(Oo), ko = 864e5, Co = 1e3, Yo = 1e3, Qe = 1e6, Ro = 1e9, Zo = 6e10, zo = 36e11, Uo = 864e11, Ao = [ 1, Yo, Qe, Ro, Zo, zo, Uo ], O = /*@__PURE__*/ Bo.slice(0, 6), qo = /*@__PURE__*/ sortStrings(O), Wo = [ \"offset\" ], jo = [ \"timeZone\" ], Lo = /*@__PURE__*/ O.concat(Wo), xo = /*@__PURE__*/ Lo.concat(jo), $o = [ \"era\", \"eraYear\" ], Ho = /*@__PURE__*/ $o.concat([ \"year\" ]), Go = [ \"year\" ], Vo = [ \"monthCode\" ], _o = /*@__PURE__*/ [ \"month\" ].concat(Vo), Jo = [ \"day\" ], Ko = /*@__PURE__*/ _o.concat(Go), Qo = /*@__PURE__*/ Vo.concat(Go), Xo = /*@__PURE__*/ Jo.concat(Ko), er = /*@__PURE__*/ Jo.concat(_o), nr = /*@__PURE__*/ Jo.concat(Vo), tr = /*@__PURE__*/ wo(O, 0), l = \"iso8601\", or = \"gregory\", rr = \"japanese\", ir = {\n  [or]: {\n    \"gregory-inverse\": -1,\n    gregory: 0\n  },\n  [rr]: {\n    \"japanese-inverse\": -1,\n    japanese: 0,\n    meiji: 1867,\n    taisho: 1911,\n    showa: 1925,\n    heisei: 1988,\n    reiwa: 2018\n  },\n  ethiopic: {\n    ethioaa: 0,\n    ethiopic: 5500\n  },\n  coptic: {\n    \"coptic-inverse\": -1,\n    coptic: 0\n  },\n  roc: {\n    \"roc-inverse\": -1,\n    roc: 0\n  },\n  buddhist: {\n    be: 0\n  },\n  islamic: {\n    ah: 0\n  },\n  indian: {\n    saka: 0\n  },\n  persian: {\n    ap: 0\n  }\n}, ar = {\n  [or]: {\n    bce: \"gregory-inverse\",\n    ce: \"gregory\"\n  },\n  [rr]: {\n    bce: \"japanese-inverse\",\n    ce: \"japanese\"\n  },\n  ethiopic: {\n    era0: \"ethioaa\",\n    era1: \"ethiopic\"\n  },\n  coptic: {\n    era0: \"coptic-inverse\",\n    era1: \"coptic\"\n  },\n  roc: {\n    broc: \"roc-inverse\",\n    minguo: \"roc\"\n  }\n}, sr = {\n  chinese: 13,\n  dangi: 13,\n  hebrew: -6\n}, m = /*@__PURE__*/ Pt(requireType, \"string\"), D = /*@__PURE__*/ Pt(requireType, \"boolean\"), cr = /*@__PURE__*/ Pt(requireType, \"number\"), p = /*@__PURE__*/ Bo.map((e => e + \"s\")), ur = /*@__PURE__*/ sortStrings(p), fr = /*@__PURE__*/ p.slice(0, 6), lr = /*@__PURE__*/ p.slice(6), dr = /*@__PURE__*/ lr.slice(1), mr = /*@__PURE__*/ Fo(p), pr = /*@__PURE__*/ wo(p, 0), hr = /*@__PURE__*/ wo(fr, 0), gr = /*@__PURE__*/ Pt(zeroOutProps, p), w = [ \"isoNanosecond\", \"isoMicrosecond\", \"isoMillisecond\", \"isoSecond\", \"isoMinute\", \"isoHour\" ], Dr = [ \"isoDay\", \"isoMonth\", \"isoYear\" ], Tr = /*@__PURE__*/ w.concat(Dr), Ir = /*@__PURE__*/ sortStrings(Dr), Mr = /*@__PURE__*/ sortStrings(w), Nr = /*@__PURE__*/ sortStrings(Tr), Nt = /*@__PURE__*/ wo(Mr, 0), yr = /*@__PURE__*/ Pt(zeroOutProps, Tr), vr = 1e8, Pr = vr * ko, Er = [ vr, 0 ], Sr = [ -vr, 0 ], Fr = 275760, wr = -271821, en = Intl.DateTimeFormat, br = \"en-GB\", Or = 1970, Br = 1972, kr = 12, Cr = /*@__PURE__*/ isoArgsToEpochMilli(1868, 9, 8), Yr = /*@__PURE__*/ on(computeJapaneseEraParts, WeakMap), Rr = \"smallestUnit\", Zr = \"unit\", zr = \"roundingIncrement\", Ur = \"fractionalSecondDigits\", Ar = \"relativeTo\", qr = \"direction\", Wr = {\n  constrain: 0,\n  reject: 1\n}, jr = /*@__PURE__*/ Object.keys(Wr), Lr = {\n  compatible: 0,\n  reject: 1,\n  earlier: 2,\n  later: 3\n}, xr = {\n  reject: 0,\n  use: 1,\n  prefer: 2,\n  ignore: 3\n}, $r = {\n  auto: 0,\n  never: 1,\n  critical: 2,\n  always: 3\n}, Hr = {\n  auto: 0,\n  never: 1,\n  critical: 2\n}, Gr = {\n  auto: 0,\n  never: 1\n}, Vr = {\n  floor: 0,\n  halfFloor: 1,\n  ceil: 2,\n  halfCeil: 3,\n  trunc: 4,\n  halfTrunc: 5,\n  expand: 6,\n  halfExpand: 7,\n  halfEven: 8\n}, _r = {\n  previous: -1,\n  next: 1\n}, Jr = /*@__PURE__*/ Pt(refineUnitOption, Rr), Kr = /*@__PURE__*/ Pt(refineUnitOption, \"largestUnit\"), Qr = /*@__PURE__*/ Pt(refineUnitOption, Zr), Xr = /*@__PURE__*/ Pt(refineChoiceOption, \"overflow\", Wr), ei = /*@__PURE__*/ Pt(refineChoiceOption, \"disambiguation\", Lr), ni = /*@__PURE__*/ Pt(refineChoiceOption, \"offset\", xr), ti = /*@__PURE__*/ Pt(refineChoiceOption, \"calendarName\", $r), oi = /*@__PURE__*/ Pt(refineChoiceOption, \"timeZoneName\", Hr), ri = /*@__PURE__*/ Pt(refineChoiceOption, \"offset\", Gr), ii = /*@__PURE__*/ Pt(refineChoiceOption, \"roundingMode\", Vr), Ut = \"PlainYearMonth\", qt = \"PlainMonthDay\", G = \"PlainDate\", x = \"PlainDateTime\", ft = \"PlainTime\", z = \"ZonedDateTime\", Re = \"Instant\", N = \"Duration\", ai = [ Math.floor, e => hasHalf(e) ? Math.floor(e) : Math.round(e), Math.ceil, e => hasHalf(e) ? Math.ceil(e) : Math.round(e), Math.trunc, e => hasHalf(e) ? Math.trunc(e) || 0 : Math.round(e), e => e < 0 ? Math.floor(e) : Math.ceil(e), e => Math.sign(e) * Math.round(Math.abs(e)) || 0, e => hasHalf(e) ? (e = Math.trunc(e) || 0) + e % 2 : Math.round(e) ], si = \"UTC\", ci = 5184e3, ui = /*@__PURE__*/ isoArgsToEpochSec(1847), fi = /*@__PURE__*/ isoArgsToEpochSec(/*@__PURE__*/ (/*@__PURE__*/ new Date).getUTCFullYear() + 10), li = /0+$/, he = /*@__PURE__*/ on(_zonedEpochSlotsToIso, WeakMap), di = 2 ** 32 - 1, L = /*@__PURE__*/ on((e => {\n  const n = getTimeZoneEssence(e);\n  return \"object\" == typeof n ? new IntlTimeZone(n) : new FixedTimeZone(n || 0);\n}));\n\nclass FixedTimeZone {\n  constructor(e) {\n    this.$ = e;\n  }\n  R() {\n    return this.$;\n  }\n  I(e) {\n    return (e => {\n      const n = isoToEpochNano({\n        ...e,\n        ...Nt\n      });\n      if (!n || Math.abs(n[0]) > 1e8) {\n        throw new RangeError(Io);\n      }\n    })(e), [ isoToEpochNanoWithOffset(e, this.$) ];\n  }\n  O() {}\n}\n\nclass IntlTimeZone {\n  constructor(e) {\n    this.nn = (e => {\n      function getOffsetSec(e) {\n        const i = clampNumber(e, o, r), [a, s] = computePeriod(i), c = n(a), u = n(s);\n        return c === u ? c : pinch(t(a, s), c, u, e);\n      }\n      function pinch(n, t, o, r) {\n        let i, a;\n        for (;(void 0 === r || void 0 === (i = r < n[0] ? t : r >= n[1] ? o : void 0)) && (a = n[1] - n[0]); ) {\n          const t = n[0] + Math.floor(a / 2);\n          e(t) === o ? n[1] = t : n[0] = t + 1;\n        }\n        return i;\n      }\n      const n = on(e), t = on(createSplitTuple);\n      let o = ui, r = fi;\n      return {\n        tn(e) {\n          const n = getOffsetSec(e - 86400), t = getOffsetSec(e + 86400), o = e - n, r = e - t;\n          if (n === t) {\n            return [ o ];\n          }\n          const i = getOffsetSec(o);\n          return i === getOffsetSec(r) ? [ e - i ] : n > t ? [ o, r ] : [];\n        },\n        rn: getOffsetSec,\n        O(e, i) {\n          const a = clampNumber(e, o, r);\n          let [s, c] = computePeriod(a);\n          const u = ci * i, f = i < 0 ? () => c > o || (o = a, 0) : () => s < r || (r = a, \n          0);\n          for (;f(); ) {\n            const o = n(s), r = n(c);\n            if (o !== r) {\n              const n = t(s, c);\n              pinch(n, o, r);\n              const a = n[0];\n              if ((compareNumbers(a, e) || 1) === i) {\n                return a;\n              }\n            }\n            s += u, c += u;\n          }\n        }\n      };\n    })((e => n => {\n      const t = hashIntlFormatParts(e, n * Co);\n      return isoArgsToEpochSec(parseIntlPartsYear(t), parseInt(t.month), parseInt(t.day), parseInt(t.hour), parseInt(t.minute), parseInt(t.second)) - n;\n    })(e));\n  }\n  R(e) {\n    return this.nn.rn((e => epochNanoToSecMod(e)[0])(e)) * Ro;\n  }\n  I(e) {\n    const [n, t] = [ isoArgsToEpochSec((o = e).isoYear, o.isoMonth, o.isoDay, o.isoHour, o.isoMinute, o.isoSecond), o.isoMillisecond * Qe + o.isoMicrosecond * Yo + o.isoNanosecond ];\n    var o;\n    return this.nn.tn(n).map((e => checkEpochNanoInBounds(moveBigNano(Ge(e, Ro), t))));\n  }\n  O(e, n) {\n    const [t, o] = epochNanoToSecMod(e), r = this.nn.O(t + (n > 0 || o ? 1 : 0), n);\n    if (void 0 !== r) {\n      return Ge(r, Ro);\n    }\n  }\n}\n\nconst mi = \"([+-])\", pi = \"(?:[.,](\\\\d{1,9}))?\", hi = `(?:(?:${mi}(\\\\d{6}))|(\\\\d{4}))-?(\\\\d{2})`, gi = \"(\\\\d{2})(?::?(\\\\d{2})(?::?(\\\\d{2})\" + pi + \")?)?\", Di = mi + gi, Ti = hi + \"-?(\\\\d{2})(?:[T ]\" + gi + \"(Z|\" + Di + \")?)?\", Ii = \"\\\\[(!?)([^\\\\]]*)\\\\]\", Mi = `((?:${Ii}){0,9})`, Ni = /*@__PURE__*/ createRegExp(hi + Mi), yi = /*@__PURE__*/ createRegExp(\"(?:--)?(\\\\d{2})-?(\\\\d{2})\" + Mi), vi = /*@__PURE__*/ createRegExp(Ti + Mi), Pi = /*@__PURE__*/ createRegExp(\"T?\" + gi + \"(?:\" + Di + \")?\" + Mi), Ei = /*@__PURE__*/ createRegExp(Di), Si = /*@__PURE__*/ new RegExp(Ii, \"g\"), Fi = /*@__PURE__*/ createRegExp(`${mi}?P(\\\\d+Y)?(\\\\d+M)?(\\\\d+W)?(\\\\d+D)?(?:T(?:(\\\\d+)${pi}H)?(?:(\\\\d+)${pi}M)?(?:(\\\\d+)${pi}S)?)?`), wi = /*@__PURE__*/ on((e => new en(br, {\n  timeZone: e,\n  era: \"short\",\n  year: \"numeric\",\n  month: \"numeric\",\n  day: \"numeric\",\n  hour: \"numeric\",\n  minute: \"numeric\",\n  second: \"numeric\"\n}))), bi = /^(AC|AE|AG|AR|AS|BE|BS|CA|CN|CS|CT|EA|EC|IE|IS|JS|MI|NE|NS|PL|PN|PR|PS|SS|VS)T$/, Oi = /[^\\w\\/:+-]+/, Bi = /^M(\\d{2})(L?)$/, ki = /*@__PURE__*/ on(createIntlCalendar), Ci = /*@__PURE__*/ on((e => new en(br, {\n  calendar: e,\n  timeZone: si,\n  era: \"short\",\n  year: \"numeric\",\n  month: \"short\",\n  day: \"numeric\"\n}))), Yi = {\n  P(e, n, t) {\n    const o = mt(t);\n    let r, {years: i, months: a, weeks: s, days: c} = n;\n    if (c += durationFieldsToBigNano(n, 5)[0], i || a) {\n      r = ((e, n, t, o, r) => {\n        let [i, a, s] = e.v(n);\n        if (t) {\n          const [n, o] = e.q(i, a);\n          i += t, a = monthCodeNumberToMonth(n, o, e.L(i)), a = clampEntity(\"month\", a, 1, e.B(i), r);\n        }\n        return o && ([i, a] = e.un(i, a, o)), s = clampEntity(\"day\", s, 1, e.U(i, a), r), \n        e.p(i, a, s);\n      })(this, e, i, a, o);\n    } else {\n      if (!s && !c) {\n        return e;\n      }\n      r = isoToEpochMilli(e);\n    }\n    if (void 0 === r) {\n      throw new RangeError(Io);\n    }\n    return r += (7 * s + c) * ko, checkIsoDateInBounds(epochMilliToIso(r));\n  },\n  N(e, n, t) {\n    if (t <= 7) {\n      let o = 0, r = diffDays({\n        ...e,\n        ...Nt\n      }, {\n        ...n,\n        ...Nt\n      });\n      return 7 === t && ([o, r] = divModTrunc(r, 7)), {\n        ...pr,\n        weeks: o,\n        days: r\n      };\n    }\n    const o = this.v(e), r = this.v(n);\n    let [i, a, s] = ((e, n, t, o, r, i, a) => {\n      let s = r - n, c = i - t, u = a - o;\n      if (s || c) {\n        const f = Math.sign(s || c);\n        let l = e.U(r, i), d = 0;\n        if (Math.sign(u) === -f) {\n          const o = l;\n          [r, i] = e.un(r, i, -f), s = r - n, c = i - t, l = e.U(r, i), d = f < 0 ? -o : l;\n        }\n        if (u = a - Math.min(o, l) + d, s) {\n          const [o, a] = e.q(n, t), [u, l] = e.q(r, i);\n          if (c = u - o || Number(l) - Number(a), Math.sign(c) === -f) {\n            const t = f < 0 && -e.B(r);\n            s = (r -= f) - n, c = i - monthCodeNumberToMonth(o, a, e.L(r)) + (t || e.B(r));\n          }\n        }\n      }\n      return [ s, c, u ];\n    })(this, ...o, ...r);\n    return 8 === t && (a += this.cn(i, o[0]), i = 0), {\n      ...pr,\n      years: i,\n      months: a,\n      days: s\n    };\n  },\n  F(e, n) {\n    const t = mt(n), o = refineYear(this, e), r = refineMonth(this, e, o, t), i = refineDay(this, e, r, o, t);\n    return W(checkIsoDateInBounds(this.V(o, r, i)), this.id || l);\n  },\n  K(e, n) {\n    const t = mt(n), o = refineYear(this, e), r = refineMonth(this, e, o, t);\n    return createPlainYearMonthSlots(checkIsoYearMonthInBounds(this.V(o, r, 1)), this.id || l);\n  },\n  _(e, n) {\n    const t = mt(n);\n    let o, r, i, a = void 0 !== e.eraYear || void 0 !== e.year ? refineYear(this, e) : void 0;\n    const s = !this.id;\n    if (void 0 === a && s && (a = Br), void 0 !== a) {\n      const n = refineMonth(this, e, a, t);\n      o = refineDay(this, e, n, a, t);\n      const s = this.L(a);\n      r = monthToMonthCodeNumber(n, s), i = n === s;\n    } else {\n      if (void 0 === e.monthCode) {\n        throw new TypeError(co);\n      }\n      if ([r, i] = parseMonthCode(e.monthCode), this.id && this.id !== or && this.id !== rr) {\n        if (this.id && \"coptic\" === computeCalendarIdBase(this.id) && 0 === t) {\n          const n = i || 13 !== r ? 30 : 6;\n          o = e.day, o = clampNumber(o, 1, n);\n        } else if (this.id && \"chinese\" === computeCalendarIdBase(this.id) && 0 === t) {\n          const n = !i || 1 !== r && 9 !== r && 10 !== r && 11 !== r && 12 !== r ? 30 : 29;\n          o = e.day, o = clampNumber(o, 1, n);\n        } else {\n          o = e.day;\n        }\n      } else {\n        o = refineDay(this, e, refineMonth(this, e, Br, t), Br, t);\n      }\n    }\n    const c = this.G(r, i, o);\n    if (!c) {\n      throw new RangeError(\"Cannot guess year\");\n    }\n    const [u, f] = c;\n    return createPlainMonthDaySlots(checkIsoDateInBounds(this.V(u, f, o)), this.id || l);\n  },\n  fields(e) {\n    return getCalendarEraOrigins(this) && e.includes(\"year\") ? [ ...e, ...$o ] : e;\n  },\n  k(e, n) {\n    const t = Object.assign(Object.create(null), e);\n    return spliceFields(t, n, _o), getCalendarEraOrigins(this) && (spliceFields(t, n, Ho), \n    this.id === rr && spliceFields(t, n, er, $o)), t;\n  },\n  inLeapYear(e) {\n    const [n] = this.v(e);\n    return this.sn(n);\n  },\n  monthsInYear(e) {\n    const [n] = this.v(e);\n    return this.B(n);\n  },\n  daysInMonth(e) {\n    const [n, t] = this.v(e);\n    return this.U(n, t);\n  },\n  daysInYear(e) {\n    const [n] = this.v(e);\n    return this.fn(n);\n  },\n  dayOfYear: computeNativeDayOfYear,\n  era(e) {\n    return this.hn(e)[0];\n  },\n  eraYear(e) {\n    return this.hn(e)[1];\n  },\n  monthCode(e) {\n    const [n, t] = this.v(e), [o, r] = this.q(n, t);\n    return formatMonthCode(o, r);\n  },\n  dayOfWeek: computeIsoDayOfWeek,\n  daysInWeek() {\n    return 7;\n  }\n}, Ri = {\n  v: computeIsoDateParts,\n  hn: computeIsoEraParts,\n  q: computeIsoMonthCodeParts\n}, Zi = {\n  dayOfYear: computeNativeDayOfYear,\n  v: computeIsoDateParts,\n  p: isoArgsToEpochMilli\n}, zi = /*@__PURE__*/ Object.assign({}, Zi, {\n  weekOfYear: computeNativeWeekOfYear,\n  yearOfWeek: computeNativeYearOfWeek,\n  m(e) {\n    function computeWeekShift(e) {\n      return (7 - e < n ? 7 : 0) - e;\n    }\n    function computeWeeksInYear(e) {\n      const n = computeIsoDaysInYear(f + e), t = e || 1, o = computeWeekShift(modFloor(a + n * t, 7));\n      return c = (n + (o - s) * t) / 7;\n    }\n    const n = this.id ? 1 : 4, t = computeIsoDayOfWeek(e), o = this.dayOfYear(e), r = modFloor(t - 1, 7), i = o - 1, a = modFloor(r - i, 7), s = computeWeekShift(a);\n    let c, u = Math.floor((i - s) / 7) + 1, f = e.isoYear;\n    return u ? u > computeWeeksInYear(0) && (u = 1, f++) : (u = computeWeeksInYear(-1), \n    f--), [ u, f, c ];\n  }\n}), Ui = /*@__PURE__*/ Object.assign({}, Yi, zi, {\n  v: computeIsoDateParts,\n  hn: computeIsoEraParts,\n  q: computeIsoMonthCodeParts,\n  G(e, n) {\n    if (!n) {\n      return [ Br, e ];\n    }\n  },\n  sn: computeIsoInLeapYear,\n  L() {},\n  B: computeIsoMonthsInYear,\n  cn: e => e * kr,\n  U: computeIsoDaysInMonth,\n  fn: computeIsoDaysInYear,\n  V: (e, n, t) => ({\n    isoYear: e,\n    isoMonth: n,\n    isoDay: t\n  }),\n  p: isoArgsToEpochMilli,\n  un: (e, n, t) => (e += divTrunc(t, kr), (n += modTrunc(t, kr)) < 1 ? (e--, n += kr) : n > kr && (e++, \n  n -= kr), [ e, n ]),\n  year(e) {\n    return e.isoYear;\n  },\n  month(e) {\n    return e.isoMonth;\n  },\n  day: e => e.isoDay\n}), Ai = {\n  v: computeIntlDateParts,\n  hn: computeIntlEraParts,\n  q: computeIntlMonthCodeParts\n}, qi = {\n  dayOfYear: computeNativeDayOfYear,\n  v: computeIntlDateParts,\n  p: computeIntlEpochMilli,\n  weekOfYear: computeNativeWeekOfYear,\n  yearOfWeek: computeNativeYearOfWeek,\n  m() {\n    return [];\n  }\n}, Wi = /*@__PURE__*/ Object.assign({}, Yi, qi, {\n  v: computeIntlDateParts,\n  hn: computeIntlEraParts,\n  q: computeIntlMonthCodeParts,\n  G(e, n, t) {\n    const o = this.id && \"chinese\" === computeCalendarIdBase(this.id) ? ((e, n, t) => {\n      if (n) {\n        switch (e) {\n         case 1:\n          return 1651;\n\n         case 2:\n          return t < 30 ? 1947 : 1765;\n\n         case 3:\n          return t < 30 ? 1966 : 1955;\n\n         case 4:\n          return t < 30 ? 1963 : 1944;\n\n         case 5:\n          return t < 30 ? 1971 : 1952;\n\n         case 6:\n          return t < 30 ? 1960 : 1941;\n\n         case 7:\n          return t < 30 ? 1968 : 1938;\n\n         case 8:\n          return t < 30 ? 1957 : 1718;\n\n         case 9:\n          return 1832;\n\n         case 10:\n          return 1870;\n\n         case 11:\n          return 1814;\n\n         case 12:\n          return 1890;\n        }\n      }\n      return 1972;\n    })(e, n, t) : Br;\n    let [r, i, a] = computeIntlDateParts.call(this, {\n      isoYear: o,\n      isoMonth: kr,\n      isoDay: 31\n    });\n    const s = computeIntlLeapMonth.call(this, r), c = i === s;\n    1 === (compareNumbers(e, monthToMonthCodeNumber(i, s)) || compareNumbers(Number(n), Number(c)) || compareNumbers(t, a)) && r--;\n    for (let o = 0; o < 100; o++) {\n      const i = r - o, a = computeIntlLeapMonth.call(this, i), s = monthCodeNumberToMonth(e, n, a);\n      if (n === (s === a) && t <= computeIntlDaysInMonth.call(this, i, s)) {\n        return [ i, s ];\n      }\n    }\n  },\n  sn(e) {\n    const n = computeIntlDaysInYear.call(this, e);\n    return n > computeIntlDaysInYear.call(this, e - 1) && n > computeIntlDaysInYear.call(this, e + 1);\n  },\n  L: computeIntlLeapMonth,\n  B: computeIntlMonthsInYear,\n  cn(e, n) {\n    const t = n + e, o = Math.sign(e), r = o < 0 ? -1 : 0;\n    let i = 0;\n    for (let e = n; e !== t; e += o) {\n      i += computeIntlMonthsInYear.call(this, e + r);\n    }\n    return i;\n  },\n  U: computeIntlDaysInMonth,\n  fn: computeIntlDaysInYear,\n  V(e, n, t) {\n    return epochMilliToIso(computeIntlEpochMilli.call(this, e, n, t));\n  },\n  p: computeIntlEpochMilli,\n  un(e, n, t) {\n    if (t) {\n      if (n += t, !Number.isSafeInteger(n)) {\n        throw new RangeError(Io);\n      }\n      if (t < 0) {\n        for (;n < 1; ) {\n          n += computeIntlMonthsInYear.call(this, --e);\n        }\n      } else {\n        let t;\n        for (;n > (t = computeIntlMonthsInYear.call(this, e)); ) {\n          n -= t, e++;\n        }\n      }\n    }\n    return [ e, n ];\n  },\n  year(e) {\n    return this.h(e).year;\n  },\n  month(e) {\n    const {year: n, o: t} = this.h(e), {u: o} = this.l(n);\n    return o[t] + 1;\n  },\n  day(e) {\n    return this.h(e).day;\n  }\n}), ji = /*@__PURE__*/ createNativeOpsCreator(Ri, Ai), C = /*@__PURE__*/ createNativeOpsCreator(Ui, Wi), Li = {\n  ...{\n    era: toStringViaPrimitive,\n    eraYear: toInteger,\n    year: toInteger,\n    month: toPositiveInteger,\n    monthCode(e) {\n      const n = toStringViaPrimitive(e);\n      return parseMonthCode(n), n;\n    },\n    day: toPositiveInteger\n  },\n  .../*@__PURE__*/ wo(O, toInteger),\n  .../*@__PURE__*/ wo(p, toStrictInteger),\n  offset(e) {\n    const n = toStringViaPrimitive(e);\n    return parseOffsetNano(n), n;\n  }\n}, xi = /*@__PURE__*/ Pt(remapProps, O, w), $i = /*@__PURE__*/ Pt(remapProps, w, O), Hi = \"numeric\", Gi = [ \"timeZoneName\" ], Vi = {\n  month: Hi,\n  day: Hi\n}, _i = {\n  year: Hi,\n  month: Hi\n}, Ji = /*@__PURE__*/ Object.assign({}, _i, {\n  day: Hi\n}), Ki = {\n  hour: Hi,\n  minute: Hi,\n  second: Hi\n}, Qi = /*@__PURE__*/ Object.assign({}, Ji, Ki), Xi = /*@__PURE__*/ Object.assign({}, Qi, {\n  timeZoneName: \"short\"\n}), ea = /*@__PURE__*/ Object.keys(_i), na = /*@__PURE__*/ Object.keys(Vi), ta = /*@__PURE__*/ Object.keys(Ji), oa = /*@__PURE__*/ Object.keys(Ki), ra = [ \"dateStyle\" ], ia = /*@__PURE__*/ ea.concat(ra), aa = /*@__PURE__*/ na.concat(ra), sa = /*@__PURE__*/ ta.concat(ra, [ \"weekday\" ]), ca = /*@__PURE__*/ oa.concat([ \"dayPeriod\", \"timeStyle\", \"fractionalSecondDigits\" ]), ua = /*@__PURE__*/ sa.concat(ca), fa = /*@__PURE__*/ Gi.concat(ca), la = /*@__PURE__*/ Gi.concat(sa), da = /*@__PURE__*/ Gi.concat([ \"day\", \"weekday\" ], ca), ma = /*@__PURE__*/ Gi.concat([ \"year\", \"weekday\" ], ca), pa = /*@__PURE__*/ createOptionsTransformer(ua, Qi), ha = /*@__PURE__*/ createOptionsTransformer(ua, Xi), ga = /*@__PURE__*/ createOptionsTransformer(ua, Qi, Gi), Da = /*@__PURE__*/ createOptionsTransformer(sa, Ji, fa), Ta = /*@__PURE__*/ createOptionsTransformer(ca, Ki, la), Ia = /*@__PURE__*/ createOptionsTransformer(ia, _i, da), Ma = /*@__PURE__*/ createOptionsTransformer(aa, Vi, ma), Na = {}, ya = /*@__PURE__*/ new en(void 0, {\n  calendar: l\n}).resolvedOptions().calendar === l, U = [ pa, I ], ot = [ ha, I, 0, (e, n) => {\n  const t = e.timeZone;\n  if (n && n.timeZone !== t) {\n    throw new RangeError(mo);\n  }\n  return t;\n} ], X = [ ga, isoToEpochMilli ], _ = [ Da, isoToEpochMilli ], tt = [ Ta, e => isoTimeFieldsToNano(e) / Qe ], et = [ Ia, isoToEpochMilli, ya ], nt = [ Ma, isoToEpochMilli, ya ];\n\nlet va;\n\nexport { N as DurationBranding, Re as InstantBranding, G as PlainDateBranding, x as PlainDateTimeBranding, qt as PlainMonthDayBranding, ft as PlainTimeBranding, Ut as PlainYearMonthBranding, en as RawDateTimeFormat, z as ZonedDateTimeBranding, Y as absDuration, E as addDurations, Pt as bindArgs, K as compareDurations, Ke as compareInstants, te as compareIsoDateFields, Yt as compareIsoDateTimeFields, Dt as compareIsoTimeFields, Be as compareZonedDateTimes, Te as computeZonedHoursInDay, ve as computeZonedStartOfDay, j as constructDurationSlots, qe as constructInstantSlots, ue as constructPlainDateSlots, Zt as constructPlainDateTimeSlots, kt as constructPlainMonthDaySlots, ut as constructPlainTimeSlots, Qt as constructPlainYearMonthSlots, ye as constructZonedDateTimeSlots, Oe as createDurationSlots, an as createFormatForPrep, Q as createFormatPrepper, t as createGetterDescriptors, xe as createInstantSlots, r as createNameDescriptors, C as createNativeStandardOps, W as createPlainDateSlots, jt as createPlainDateTimeSlots, St as createPlainTimeSlots, n as createPropDescriptors, o as createStringTagDescriptors, _e as createZonedDateTimeSlots, _ as dateConfig, X as dateTimeConfig, Ee as diffInstants, It as diffPlainDateTimes, oe as diffPlainDates, it as diffPlainTimes, zt as diffPlainYearMonth, we as diffZonedDateTimes, p as durationFieldNamesAsc, A as durationWithFields, $e as epochMilliToInstant, He as epochNanoToInstant, b as forbiddenValueOf, k as formatDurationIso, ke as formatInstantIso, Se as formatOffsetNano, ce as formatPlainDateIso, Ft as formatPlainDateTimeIso, Jt as formatPlainMonthDayIso, ct as formatPlainTimeIso, Kt as formatPlainYearMonthIso, Fe as formatZonedDateTimeIso, Xe as getCurrentEpochNano, tn as getCurrentIsoDateTime, Ue as getCurrentTimeZoneId, y as getDurationBlank, I as getEpochMilli, v as getEpochNano, U as instantConfig, Je as instantToZonedDateTime, Ve as instantsEqual, i as invalidBag, c as invalidCalendar, a as invalidCallingContext, rn as invalidFormatType, F as invalidTimeZone, s as isObjectLike, l as isoCalendarId, Nt as isoTimeFieldDefaults, w as isoTimeFieldNamesAsc, g as mapPropNames, e as mapProps, on as memoize, ln as mismatchingFormatTypes, nt as monthDayConfig, Ye as moveInstant, ne as movePlainDate, wt as movePlainDateTime, at as movePlainTime, Gt as movePlainYearMonth, pe as moveZonedDateTime, Qe as nanoInMilli, B as negateDuration, Ge as numberToBigNano, f as parseCalendarId, R as parseDuration, We as parseInstant, de as parsePlainDate, Bt as parsePlainDateTime, xt as parsePlainMonthDay, ht as parsePlainTime, _t as parsePlainYearMonth, H as parseRelativeToSlots, Z as parseTimeZoneId, Ae as parseZonedDateTime, bt as plainDateTimeToZonedDateTime, gt as plainDateTimeWithFields, Ot as plainDateTimeWithPlainTime, Ct as plainDateTimesEqual, ie as plainDateToPlainDateTime, se as plainDateToPlainMonthDay, le as plainDateToPlainYearMonth, ae as plainDateToZonedDateTime, ee as plainDateWithFields, re as plainDatesEqual, Vt as plainMonthDayToPlainDate, Et as plainMonthDayWithFields, Lt as plainMonthDaysEqual, rt as plainTimeWithFields, st as plainTimesEqual, Ht as plainYearMonthToPlainDate, Wt as plainYearMonthWithFields, $t as plainYearMonthsEqual, nn as pluckProps, L as queryNativeTimeZone, Mt as refineCalendarId, Me as refineDirectionOptions, q as refineDurationBag, $ as refineMaybeZonedDateTimeBag, mt as refineOverflowOptions, me as refinePlainDateBag, At as refinePlainDateTimeBag, Rt as refinePlainMonthDayBag, Tt as refinePlainTimeBag, Xt as refinePlainYearMonthBag, Ze as refineTimeZoneId, Ne as refineZonedDateTimeBag, je as refineZonedFieldOptions, D as requireBoolean, T as requireInteger, S as requireIntegerOrUndefined, ze as requireNumberIsInteger, h as requirePositiveInteger, P as requirePositiveIntegerOrUndefined, m as requireString, d as requireStringOrUndefined, u as resolveCalendarId, M as resolveTimeZoneId, V as roundDuration, Le as roundInstant, vt as roundPlainDateTime, lt as roundPlainTime, Ie as roundZonedDateTime, pt as slotsWithCalendarId, Pe as slotsWithTimeZoneId, tt as timeConfig, O as timeFieldNamesAsc, J as totalDuration, et as yearMonthConfig, ot as zonedConfig, be as zonedDateTimeToInstant, fe as zonedDateTimeToPlainDate, yt as zonedDateTimeToPlainDateTime, dt as zonedDateTimeToPlainTime, De as zonedDateTimeWithFields, ge as zonedDateTimeWithPlainTime, Ce as zonedDateTimesEqual, he as zonedEpochSlotsToIso };\n","function createSlotClass(i, l, s, c, u) {\n  function Class(...t) {\n    if (!(this instanceof Class)) {\n      throw new TypeError(a);\n    }\n    un(this, l(...t));\n  }\n  function bindMethod(t, e) {\n    return Object.defineProperties((function(...e) {\n      return t.call(this, getSpecificSlots(this), ...e);\n    }), r(e));\n  }\n  function getSpecificSlots(t) {\n    const e = cn(t);\n    if (!e || e.branding !== i) {\n      throw new TypeError(a);\n    }\n    return e;\n  }\n  return Object.defineProperties(Class.prototype, {\n    ...t(e(bindMethod, s)),\n    ...n(e(bindMethod, c)),\n    ...o(\"Temporal.\" + i)\n  }), Object.defineProperties(Class, {\n    ...n(u),\n    ...r(i)\n  }), [ Class, t => {\n    const e = Object.create(Class.prototype);\n    return un(e, t), e;\n  }, getSpecificSlots ];\n}\n\nfunction rejectInvalidBag(t) {\n  if (cn(t) || void 0 !== t.calendar || void 0 !== t.timeZone) {\n    throw new TypeError(i);\n  }\n  return t;\n}\n\nfunction getCalendarIdFromBag(t) {\n  return extractCalendarIdFromBag(t) || l;\n}\n\nfunction extractCalendarIdFromBag(t) {\n  const {calendar: e} = t;\n  if (void 0 !== e) {\n    return refineCalendarArg(e);\n  }\n}\n\nfunction refineCalendarArg(t) {\n  if (s(t)) {\n    const {calendar: e} = cn(t) || {};\n    if (!e) {\n      throw new TypeError(c(t));\n    }\n    return e;\n  }\n  return (t => u(f(m(t))))(t);\n}\n\nfunction createCalendarGetters(t) {\n  const e = {};\n  for (const n in t) {\n    e[n] = t => {\n      const {calendar: e} = t;\n      return C(e)[n](t);\n    };\n  }\n  return e;\n}\n\nfunction neverValueOf() {\n  throw new TypeError(b);\n}\n\nfunction refineTimeZoneArg(t) {\n  if (s(t)) {\n    const {timeZone: e} = cn(t) || {};\n    if (!e) {\n      throw new TypeError(F(t));\n    }\n    return e;\n  }\n  return (t => M(Z(m(t))))(t);\n}\n\nfunction toDurationSlots(t) {\n  if (s(t)) {\n    const e = cn(t);\n    return e && e.branding === N ? e : q(t);\n  }\n  return R(t);\n}\n\nfunction refinePublicRelativeTo(t) {\n  if (void 0 !== t) {\n    if (s(t)) {\n      const e = cn(t) || {};\n      switch (e.branding) {\n       case z:\n       case G:\n        return e;\n\n       case x:\n        return W(e);\n      }\n      const n = getCalendarIdFromBag(t);\n      return {\n        ...$(refineTimeZoneArg, L, C(n), t),\n        calendar: n\n      };\n    }\n    return H(t);\n  }\n}\n\nfunction toPlainTimeSlots(t, e) {\n  if (s(t)) {\n    const n = cn(t) || {};\n    switch (n.branding) {\n     case ft:\n      return mt(e), n;\n\n     case x:\n      return mt(e), St(n);\n\n     case z:\n      return mt(e), dt(L, n);\n    }\n    return Tt(t, e);\n  }\n  const n = ht(t);\n  return mt(e), n;\n}\n\nfunction optionalToPlainTimeFields(t) {\n  return void 0 === t ? void 0 : toPlainTimeSlots(t);\n}\n\nfunction toPlainDateTimeSlots(t, e) {\n  if (s(t)) {\n    const n = cn(t) || {};\n    switch (n.branding) {\n     case x:\n      return mt(e), n;\n\n     case G:\n      return mt(e), jt({\n        ...n,\n        ...Nt\n      });\n\n     case z:\n      return mt(e), yt(L, n);\n    }\n    return At(C(getCalendarIdFromBag(t)), t, e);\n  }\n  const n = Bt(t);\n  return mt(e), n;\n}\n\nfunction toPlainMonthDaySlots(t, e) {\n  if (s(t)) {\n    const n = cn(t);\n    if (n && n.branding === qt) {\n      return mt(e), n;\n    }\n    const o = extractCalendarIdFromBag(t);\n    return Rt(C(o || l), !o, t, e);\n  }\n  const n = xt(C, t);\n  return mt(e), n;\n}\n\nfunction toPlainYearMonthSlots(t, e) {\n  if (s(t)) {\n    const n = cn(t);\n    return n && n.branding === Ut ? (mt(e), n) : Xt(C(getCalendarIdFromBag(t)), t, e);\n  }\n  const n = _t(C, t);\n  return mt(e), n;\n}\n\nfunction toPlainDateSlots(t, e) {\n  if (s(t)) {\n    const n = cn(t) || {};\n    switch (n.branding) {\n     case G:\n      return mt(e), n;\n\n     case x:\n      return mt(e), W(n);\n\n     case z:\n      return mt(e), fe(L, n);\n    }\n    return me(C(getCalendarIdFromBag(t)), t, e);\n  }\n  const n = de(t);\n  return mt(e), n;\n}\n\nfunction toZonedDateTimeSlots(t, e) {\n  if (s(t)) {\n    const n = cn(t);\n    if (n && n.branding === z) {\n      return je(e), n;\n    }\n    const o = getCalendarIdFromBag(t);\n    return Ne(refineTimeZoneArg, L, C(o), o, t, e);\n  }\n  return Ae(t, e);\n}\n\nfunction adaptDateMethods(t) {\n  return e((t => e => t(slotsToIso(e))), t);\n}\n\nfunction slotsToIso(t) {\n  return he(t, L);\n}\n\nfunction toInstantSlots(t) {\n  if (s(t)) {\n    const e = cn(t);\n    if (e) {\n      switch (e.branding) {\n       case Re:\n        return e;\n\n       case z:\n        return xe(e.epochNanoseconds);\n      }\n    }\n  }\n  return We(t);\n}\n\nfunction toTemporalInstant() {\n  const t = Date.prototype.valueOf.call(this);\n  return Kn(xe(Ge(ze(t), Qe)));\n}\n\nfunction createDateTimeFormatClass() {\n  function DateTimeFormatFunc(t, e) {\n    return new DateTimeFormatNew(t, e);\n  }\n  function DateTimeFormatNew(t, e = Object.create(null)) {\n    to.set(this, ((t, e) => {\n      const n = new en(t, e), o = n.resolvedOptions(), r = o.locale, a = nn(Object.keys(e), o), i = on(createFormatPrepperForBranding), prepFormat = (t, ...e) => {\n        if (t) {\n          if (2 !== e.length) {\n            throw new TypeError(ln);\n          }\n          for (const t of e) {\n            if (void 0 === t) {\n              throw new TypeError(ln);\n            }\n          }\n        }\n        t || void 0 !== e[0] || (e = []);\n        const o = e.map((t => cn(t) || Number(t)));\n        let l, s = 0;\n        for (const t of o) {\n          const e = \"object\" == typeof t ? t.branding : void 0;\n          if (s++ && e !== l) {\n            throw new TypeError(ln);\n          }\n          l = e;\n        }\n        return l ? i(l)(r, a, ...o) : [ n, ...o ];\n      };\n      return prepFormat.X = n, prepFormat;\n    })(t, e));\n  }\n  const t = en.prototype, e = Object.getOwnPropertyDescriptors(t), n = Object.getOwnPropertyDescriptors(en);\n  for (const t in e) {\n    const n = e[t], o = t.startsWith(\"format\") && createFormatMethod(t);\n    \"function\" == typeof n.value ? n.value = \"constructor\" === t ? DateTimeFormatFunc : o || createProxiedMethod(t) : o && (n.get = function() {\n      if (!to.has(this)) {\n        throw new TypeError(a);\n      }\n      return (...t) => o.apply(this, t);\n    }, Object.defineProperties(n.get, r(`get ${t}`)));\n  }\n  return n.prototype.value = DateTimeFormatNew.prototype = Object.create({}, e), Object.defineProperties(DateTimeFormatFunc, n), \n  DateTimeFormatFunc;\n}\n\nfunction createFormatMethod(t) {\n  return Object.defineProperties((function(...e) {\n    const n = to.get(this), [o, ...r] = n(t.includes(\"Range\"), ...e);\n    return o[t](...r);\n  }), r(t));\n}\n\nfunction createProxiedMethod(t) {\n  return Object.defineProperties((function(...e) {\n    return to.get(this).X[t](...e);\n  }), r(t));\n}\n\nfunction createFormatPrepperForBranding(t) {\n  const e = Cn[t];\n  if (!e) {\n    throw new TypeError(rn(t));\n  }\n  return Q(e, on(an), 1);\n}\n\nimport { createGetterDescriptors as t, mapProps as e, createPropDescriptors as n, createStringTagDescriptors as o, createNameDescriptors as r, invalidCallingContext as a, invalidBag as i, isoCalendarId as l, isObjectLike as s, invalidCalendar as c, resolveCalendarId as u, parseCalendarId as f, requireString as m, requireStringOrUndefined as d, requireIntegerOrUndefined as S, requireInteger as T, requirePositiveInteger as h, requireBoolean as D, requirePositiveIntegerOrUndefined as P, mapPropNames as g, durationFieldNamesAsc as p, timeFieldNamesAsc as O, isoTimeFieldNamesAsc as w, getEpochMilli as I, getEpochNano as v, createNativeStandardOps as C, forbiddenValueOf as b, invalidTimeZone as F, resolveTimeZoneId as M, parseTimeZoneId as Z, getDurationBlank as y, constructDurationSlots as j, DurationBranding as N, durationWithFields as A, negateDuration as B, absDuration as Y, addDurations as E, queryNativeTimeZone as L, roundDuration as V, totalDuration as J, formatDurationIso as k, refineDurationBag as q, parseDuration as R, PlainDateTimeBranding as x, createPlainDateSlots as W, PlainDateBranding as G, ZonedDateTimeBranding as z, refineMaybeZonedDateTimeBag as $, parseRelativeToSlots as H, compareDurations as K, createFormatPrepper as Q, instantConfig as U, dateTimeConfig as X, dateConfig as _, timeConfig as tt, yearMonthConfig as et, monthDayConfig as nt, zonedConfig as ot, plainTimeWithFields as rt, movePlainTime as at, diffPlainTimes as it, roundPlainTime as lt, plainTimesEqual as st, formatPlainTimeIso as ct, constructPlainTimeSlots as ut, PlainTimeBranding as ft, refineOverflowOptions as mt, zonedDateTimeToPlainTime as dt, createPlainTimeSlots as St, refinePlainTimeBag as Tt, parsePlainTime as ht, compareIsoTimeFields as Dt, bindArgs as Pt, plainDateTimeWithFields as gt, slotsWithCalendarId as pt, plainDateTimeWithPlainTime as Ot, movePlainDateTime as wt, diffPlainDateTimes as It, roundPlainDateTime as vt, plainDateTimesEqual as Ct, plainDateTimeToZonedDateTime as bt, formatPlainDateTimeIso as Ft, refineCalendarId as Mt, constructPlainDateTimeSlots as Zt, zonedDateTimeToPlainDateTime as yt, createPlainDateTimeSlots as jt, isoTimeFieldDefaults as Nt, refinePlainDateTimeBag as At, parsePlainDateTime as Bt, compareIsoDateTimeFields as Yt, plainMonthDayWithFields as Et, plainMonthDaysEqual as Lt, plainMonthDayToPlainDate as Vt, formatPlainMonthDayIso as Jt, constructPlainMonthDaySlots as kt, PlainMonthDayBranding as qt, refinePlainMonthDayBag as Rt, parsePlainMonthDay as xt, plainYearMonthWithFields as Wt, movePlainYearMonth as Gt, diffPlainYearMonth as zt, plainYearMonthsEqual as $t, plainYearMonthToPlainDate as Ht, formatPlainYearMonthIso as Kt, constructPlainYearMonthSlots as Qt, PlainYearMonthBranding as Ut, refinePlainYearMonthBag as Xt, parsePlainYearMonth as _t, compareIsoDateFields as te, plainDateWithFields as ee, movePlainDate as ne, diffPlainDates as oe, plainDatesEqual as re, plainDateToZonedDateTime as ae, plainDateToPlainDateTime as ie, plainDateToPlainYearMonth as le, plainDateToPlainMonthDay as se, formatPlainDateIso as ce, constructPlainDateSlots as ue, zonedDateTimeToPlainDate as fe, refinePlainDateBag as me, parsePlainDate as de, formatOffsetNano as Se, computeZonedHoursInDay as Te, zonedEpochSlotsToIso as he, zonedDateTimeWithFields as De, slotsWithTimeZoneId as Pe, zonedDateTimeWithPlainTime as ge, moveZonedDateTime as pe, createDurationSlots as Oe, diffZonedDateTimes as we, roundZonedDateTime as Ie, computeZonedStartOfDay as ve, zonedDateTimesEqual as Ce, zonedDateTimeToInstant as be, formatZonedDateTimeIso as Fe, refineDirectionOptions as Me, refineTimeZoneId as Ze, constructZonedDateTimeSlots as ye, refineZonedFieldOptions as je, refineZonedDateTimeBag as Ne, parseZonedDateTime as Ae, compareZonedDateTimes as Be, moveInstant as Ye, diffInstants as Ee, roundInstant as Le, instantsEqual as Ve, instantToZonedDateTime as Je, formatInstantIso as ke, constructInstantSlots as qe, InstantBranding as Re, createInstantSlots as xe, parseInstant as We, numberToBigNano as Ge, requireNumberIsInteger as ze, epochMilliToInstant as $e, epochNanoToInstant as He, compareInstants as Ke, nanoInMilli as Qe, getCurrentTimeZoneId as Ue, getCurrentEpochNano as Xe, createZonedDateTimeSlots as _e, getCurrentIsoDateTime as tn, RawDateTimeFormat as en, pluckProps as nn, memoize as on, invalidFormatType as rn, createFormatForPrep as an, mismatchingFormatTypes as ln } from \"./internal.js\";\n\nconst sn = /*@__PURE__*/ new WeakMap, cn = /*@__PURE__*/ sn.get.bind(sn), un = /*@__PURE__*/ sn.set.bind(sn), fn = {\n  era: d,\n  eraYear: S,\n  year: T,\n  month: h,\n  daysInMonth: h,\n  daysInYear: h,\n  inLeapYear: D,\n  monthsInYear: h\n}, mn = {\n  monthCode: m\n}, dn = {\n  day: h\n}, Sn = {\n  dayOfWeek: h,\n  dayOfYear: h,\n  weekOfYear: P,\n  yearOfWeek: S,\n  daysInWeek: h\n}, Tn = /*@__PURE__*/ createCalendarGetters(/*@__PURE__*/ Object.assign({}, fn, mn, dn, Sn)), hn = /*@__PURE__*/ createCalendarGetters({\n  ...fn,\n  ...mn\n}), Dn = /*@__PURE__*/ createCalendarGetters({\n  ...mn,\n  ...dn\n}), Pn = {\n  calendarId: t => t.calendar\n}, gn = /*@__PURE__*/ g((t => e => e[t]), p.concat(\"sign\")), pn = /*@__PURE__*/ g(((t, e) => t => t[w[e]]), O), On = {\n  epochMilliseconds: I,\n  epochNanoseconds: v\n}, [wn, In, vn] = createSlotClass(N, j, {\n  ...gn,\n  blank: y\n}, {\n  with: (t, e) => In(A(t, e)),\n  negated: t => In(B(t)),\n  abs: t => In(Y(t)),\n  add: (t, e, n) => In(E(refinePublicRelativeTo, C, L, 0, t, toDurationSlots(e), n)),\n  subtract: (t, e, n) => In(E(refinePublicRelativeTo, C, L, 1, t, toDurationSlots(e), n)),\n  round: (t, e) => In(V(refinePublicRelativeTo, C, L, t, e)),\n  total: (t, e) => J(refinePublicRelativeTo, C, L, t, e),\n  toLocaleString(t, e, n) {\n    return Intl.DurationFormat ? new Intl.DurationFormat(e, n).format(this) : k(t);\n  },\n  toString: k,\n  toJSON: t => k(t),\n  valueOf: neverValueOf\n}, {\n  from: t => In(toDurationSlots(t)),\n  compare: (t, e, n) => K(refinePublicRelativeTo, C, L, toDurationSlots(t), toDurationSlots(e), n)\n}), Cn = {\n  Instant: U,\n  PlainDateTime: X,\n  PlainDate: _,\n  PlainTime: tt,\n  PlainYearMonth: et,\n  PlainMonthDay: nt\n}, bn = /*@__PURE__*/ Q(U), Fn = /*@__PURE__*/ Q(ot), Mn = /*@__PURE__*/ Q(X), Zn = /*@__PURE__*/ Q(_), yn = /*@__PURE__*/ Q(tt), jn = /*@__PURE__*/ Q(et), Nn = /*@__PURE__*/ Q(nt), [An, Bn] = createSlotClass(ft, ut, pn, {\n  with(t, e, n) {\n    return Bn(rt(this, rejectInvalidBag(e), n));\n  },\n  add: (t, e) => Bn(at(0, t, toDurationSlots(e))),\n  subtract: (t, e) => Bn(at(1, t, toDurationSlots(e))),\n  until: (t, e, n) => In(it(0, t, toPlainTimeSlots(e), n)),\n  since: (t, e, n) => In(it(1, t, toPlainTimeSlots(e), n)),\n  round: (t, e) => Bn(lt(t, e)),\n  equals: (t, e) => st(t, toPlainTimeSlots(e)),\n  toLocaleString(t, e, n) {\n    const [o, r] = yn(e, n, t);\n    return o.format(r);\n  },\n  toString: ct,\n  toJSON: t => ct(t),\n  valueOf: neverValueOf\n}, {\n  from: (t, e) => Bn(toPlainTimeSlots(t, e)),\n  compare: (t, e) => Dt(toPlainTimeSlots(t), toPlainTimeSlots(e))\n}), [Yn, En] = createSlotClass(x, Pt(Zt, Mt), {\n  ...Pn,\n  ...Tn,\n  ...pn\n}, {\n  with: (t, e, n) => En(gt(C, t, rejectInvalidBag(e), n)),\n  withCalendar: (t, e) => En(pt(t, refineCalendarArg(e))),\n  withPlainTime: (t, e) => En(Ot(t, optionalToPlainTimeFields(e))),\n  add: (t, e, n) => En(wt(C, 0, t, toDurationSlots(e), n)),\n  subtract: (t, e, n) => En(wt(C, 1, t, toDurationSlots(e), n)),\n  until: (t, e, n) => In(It(C, 0, t, toPlainDateTimeSlots(e), n)),\n  since: (t, e, n) => In(It(C, 1, t, toPlainDateTimeSlots(e), n)),\n  round: (t, e) => En(vt(t, e)),\n  equals: (t, e) => Ct(t, toPlainDateTimeSlots(e)),\n  toZonedDateTime: (t, e, n) => $n(bt(L, t, refineTimeZoneArg(e), n)),\n  toPlainDate: t => Wn(W(t)),\n  toPlainTime: t => Bn(St(t)),\n  toLocaleString(t, e, n) {\n    const [o, r] = Mn(e, n, t);\n    return o.format(r);\n  },\n  toString: Ft,\n  toJSON: t => Ft(t),\n  valueOf: neverValueOf\n}, {\n  from: (t, e) => En(toPlainDateTimeSlots(t, e)),\n  compare: (t, e) => Yt(toPlainDateTimeSlots(t), toPlainDateTimeSlots(e))\n}), [Ln, Vn, Jn] = createSlotClass(qt, Pt(kt, Mt), {\n  ...Pn,\n  ...Dn\n}, {\n  with: (t, e, n) => Vn(Et(C, t, rejectInvalidBag(e), n)),\n  equals: (t, e) => Lt(t, toPlainMonthDaySlots(e)),\n  toPlainDate(t, e) {\n    return Wn(Vt(C, t, this, e));\n  },\n  toLocaleString(t, e, n) {\n    const [o, r] = Nn(e, n, t);\n    return o.format(r);\n  },\n  toString: Jt,\n  toJSON: t => Jt(t),\n  valueOf: neverValueOf\n}, {\n  from: (t, e) => Vn(toPlainMonthDaySlots(t, e))\n}), [kn, qn, Rn] = createSlotClass(Ut, Pt(Qt, Mt), {\n  ...Pn,\n  ...hn\n}, {\n  with: (t, e, n) => qn(Wt(C, t, rejectInvalidBag(e), n)),\n  add: (t, e, n) => qn(Gt(C, 0, t, toDurationSlots(e), n)),\n  subtract: (t, e, n) => qn(Gt(C, 1, t, toDurationSlots(e), n)),\n  until: (t, e, n) => In(zt(C, 0, t, toPlainYearMonthSlots(e), n)),\n  since: (t, e, n) => In(zt(C, 1, t, toPlainYearMonthSlots(e), n)),\n  equals: (t, e) => $t(t, toPlainYearMonthSlots(e)),\n  toPlainDate(t, e) {\n    return Wn(Ht(C, t, this, e));\n  },\n  toLocaleString(t, e, n) {\n    const [o, r] = jn(e, n, t);\n    return o.format(r);\n  },\n  toString: Kt,\n  toJSON: t => Kt(t),\n  valueOf: neverValueOf\n}, {\n  from: (t, e) => qn(toPlainYearMonthSlots(t, e)),\n  compare: (t, e) => te(toPlainYearMonthSlots(t), toPlainYearMonthSlots(e))\n}), [xn, Wn, Gn] = createSlotClass(G, Pt(ue, Mt), {\n  ...Pn,\n  ...Tn\n}, {\n  with: (t, e, n) => Wn(ee(C, t, rejectInvalidBag(e), n)),\n  withCalendar: (t, e) => Wn(pt(t, refineCalendarArg(e))),\n  add: (t, e, n) => Wn(ne(C, 0, t, toDurationSlots(e), n)),\n  subtract: (t, e, n) => Wn(ne(C, 1, t, toDurationSlots(e), n)),\n  until: (t, e, n) => In(oe(C, 0, t, toPlainDateSlots(e), n)),\n  since: (t, e, n) => In(oe(C, 1, t, toPlainDateSlots(e), n)),\n  equals: (t, e) => re(t, toPlainDateSlots(e)),\n  toZonedDateTime(t, e) {\n    const n = s(e) ? e : {\n      timeZone: e\n    };\n    return $n(ae(refineTimeZoneArg, toPlainTimeSlots, L, t, n));\n  },\n  toPlainDateTime: (t, e) => En(ie(t, optionalToPlainTimeFields(e))),\n  toPlainYearMonth(t) {\n    return qn(le(C, t, this));\n  },\n  toPlainMonthDay(t) {\n    return Vn(se(C, t, this));\n  },\n  toLocaleString(t, e, n) {\n    const [o, r] = Zn(e, n, t);\n    return o.format(r);\n  },\n  toString: ce,\n  toJSON: t => ce(t),\n  valueOf: neverValueOf\n}, {\n  from: (t, e) => Wn(toPlainDateSlots(t, e)),\n  compare: (t, e) => te(toPlainDateSlots(t), toPlainDateSlots(e))\n}), [zn, $n] = createSlotClass(z, Pt(ye, Mt, Ze), {\n  ...On,\n  ...Pn,\n  ...adaptDateMethods(Tn),\n  ...adaptDateMethods(pn),\n  offset: t => Se(slotsToIso(t).offsetNanoseconds),\n  offsetNanoseconds: t => slotsToIso(t).offsetNanoseconds,\n  timeZoneId: t => t.timeZone,\n  hoursInDay: t => Te(L, t)\n}, {\n  with: (t, e, n) => $n(De(C, L, t, rejectInvalidBag(e), n)),\n  withCalendar: (t, e) => $n(pt(t, refineCalendarArg(e))),\n  withTimeZone: (t, e) => $n(Pe(t, refineTimeZoneArg(e))),\n  withPlainTime: (t, e) => $n(ge(L, t, optionalToPlainTimeFields(e))),\n  add: (t, e, n) => $n(pe(C, L, 0, t, toDurationSlots(e), n)),\n  subtract: (t, e, n) => $n(pe(C, L, 1, t, toDurationSlots(e), n)),\n  until: (t, e, n) => In(Oe(we(C, L, 0, t, toZonedDateTimeSlots(e), n))),\n  since: (t, e, n) => In(Oe(we(C, L, 1, t, toZonedDateTimeSlots(e), n))),\n  round: (t, e) => $n(Ie(L, t, e)),\n  startOfDay: t => $n(ve(L, t)),\n  equals: (t, e) => Ce(t, toZonedDateTimeSlots(e)),\n  toInstant: t => Kn(be(t)),\n  toPlainDateTime: t => En(yt(L, t)),\n  toPlainDate: t => Wn(fe(L, t)),\n  toPlainTime: t => Bn(dt(L, t)),\n  toLocaleString(t, e, n = {}) {\n    const [o, r] = Fn(e, n, t);\n    return o.format(r);\n  },\n  toString: (t, e) => Fe(L, t, e),\n  toJSON: t => Fe(L, t),\n  valueOf: neverValueOf,\n  getTimeZoneTransition(t, e) {\n    const {timeZone: n, epochNanoseconds: o} = t, r = Me(e), a = L(n).O(o, r);\n    return a ? $n({\n      ...t,\n      epochNanoseconds: a\n    }) : null;\n  }\n}, {\n  from: (t, e) => $n(toZonedDateTimeSlots(t, e)),\n  compare: (t, e) => Be(toZonedDateTimeSlots(t), toZonedDateTimeSlots(e))\n}), [Hn, Kn, Qn] = createSlotClass(Re, qe, On, {\n  add: (t, e) => Kn(Ye(0, t, toDurationSlots(e))),\n  subtract: (t, e) => Kn(Ye(1, t, toDurationSlots(e))),\n  until: (t, e, n) => In(Ee(0, t, toInstantSlots(e), n)),\n  since: (t, e, n) => In(Ee(1, t, toInstantSlots(e), n)),\n  round: (t, e) => Kn(Le(t, e)),\n  equals: (t, e) => Ve(t, toInstantSlots(e)),\n  toZonedDateTimeISO: (t, e) => $n(Je(t, refineTimeZoneArg(e))),\n  toLocaleString(t, e, n) {\n    const [o, r] = bn(e, n, t);\n    return o.format(r);\n  },\n  toString: (t, e) => ke(refineTimeZoneArg, L, t, e),\n  toJSON: t => ke(refineTimeZoneArg, L, t),\n  valueOf: neverValueOf\n}, {\n  from: t => Kn(toInstantSlots(t)),\n  fromEpochMilliseconds: t => Kn($e(t)),\n  fromEpochNanoseconds: t => Kn(He(t)),\n  compare: (t, e) => Ke(toInstantSlots(t), toInstantSlots(e))\n}), Un = /*@__PURE__*/ Object.defineProperties({}, {\n  ...o(\"Temporal.Now\"),\n  ...n({\n    timeZoneId: () => Ue(),\n    instant: () => Kn(xe(Xe())),\n    zonedDateTimeISO: (t = Ue()) => $n(_e(Xe(), refineTimeZoneArg(t), l)),\n    plainDateTimeISO: (t = Ue()) => En(jt(tn(L(refineTimeZoneArg(t))), l)),\n    plainDateISO: (t = Ue()) => Wn(W(tn(L(refineTimeZoneArg(t))), l)),\n    plainTimeISO: (t = Ue()) => Bn(St(tn(L(refineTimeZoneArg(t)))))\n  })\n}), Xn = /*@__PURE__*/ Object.defineProperties({}, {\n  ...o(\"Temporal\"),\n  ...n({\n    PlainYearMonth: kn,\n    PlainMonthDay: Ln,\n    PlainDate: xn,\n    PlainTime: An,\n    PlainDateTime: Yn,\n    ZonedDateTime: zn,\n    Instant: Hn,\n    Duration: wn,\n    Now: Un\n  })\n}), _n = /*@__PURE__*/ createDateTimeFormatClass(), to = /*@__PURE__*/ new WeakMap, eo = /*@__PURE__*/ Object.defineProperties(Object.create(Intl), n({\n  DateTimeFormat: _n\n}));\n\nexport { _n as DateTimeFormat, eo as IntlExtended, Xn as Temporal, toTemporalInstant };\n","import { Temporal as Xn, DateTimeFormat as _n, toTemporalInstant as ja } from \"./chunks/classApi.js\";\n\nimport { createPropDescriptors as n } from \"./chunks/internal.js\";\n\nObject.defineProperties(globalThis, n({\n  Temporal: Xn\n})), Object.defineProperties(Intl, n({\n  DateTimeFormat: _n\n})), Object.defineProperties(Date.prototype, n({\n  toTemporalInstant: ja\n}));\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment, type ComponentChild, type VNode } from \"preact\";\nimport { EditorBackend } from \"./model\";\nimport { Moments } from \"./moments\";\nimport { showDocumentation } from \"../../frontend/components/documentation\";\n\nimport \"./login.css\";\nimport { LoginScreen } from \"./editor-login\";\nimport type { Ceremony, EditorAppData, EditorAppState, User } from \"./state\";\nimport { ResetPasswordScreen } from \"./account\";\nimport { AccessDialog } from \"./access\";\nimport { AccountDialog } from \"./account-dialog\";\nimport { EditorHeader } from \"./editor-header\";\nimport \"./editor-footer.scss\";\nimport { getTid } from \"@webhare/gettid\";\nimport { ChooseLanguage } from \"./language\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { Spinner } from \"./components\";\nimport { StreamCodeScreen, StreamScreen } from \"./stream\";\nimport { getCeremonyLocation } from \"../../frontend/settings/ceremony-location\";\nimport type { CMLanguage } from \"../shared-client\";\n\n// import { simpleScreenState } from \"../../frontend/components/simplescreen\";\nimport { simpleScreenState, type SimpleScreenState } from \"../../frontend/components/simplescreen\";\n\nimport \"./styling/preview-layout.scss\";\nimport \"./styling/preview-items.scss\";\nimport \"./styling/preview-footer.scss\";\nimport \"./styling/preview.scss\";\n\nimport { dtapStage } from \"@webhare/env\";\n\n\n/*\n\nImportant sources of data:\n\n- backend.getLanguage() - \"nl\", \"en\"\n- getCeremonyLocation().locationTitle\n- backend.getTexts() - Gets texts in the current language\n\nthis.props.ceremony.accessLevel === \"organizer\"\n\n*/\n\n\n\n// Metadata of the header (title, location, auditorion, when)\n// shown above the moments grid. (this is not the menubar!)\nfunction CeremonyHeader(props: { ceremony: Ceremony }) {\n\n  const isDutch = backend.getLanguage() === \"nl\";\n  const when = isDutch ? props.ceremony.whenTextNL : props.ceremony.whenTextEN;\n\n  return <div class=\"cm-ceremonyheader\">\n    <h2 class=\"cm-ceremonyheader__title\">{props.ceremony.name}</h2>\n    <div class=\"cm-ceremonyheader__where-when\">\n      <span class=\"cm-ceremonyheader__location\">{getCeremonyLocation().locationTitle}</span>\n      <span class=\"cm-ceremonyheader__auditorium\">, {props.ceremony.auditorium}</span>\n      <span class=\"cm-ceremonyheader__when\">, {when}</span>\n    </div>\n  </div>;\n}\n\n/*\nfunction CeremonyDuration(props: { ceremony?: Ceremony }) {\n  return props.ceremony ? <div class=\"cm-ceremonyfooter__ceremonyduration\">\n    <span class=\"fal fa-stopwatch\" role=\"presentation\"></span>\n\n    Totale tijd: {props.ceremony.totalTime}\n  </div> : null;\n}\n*/\nclass CeremonyEditor extends Component<{\n  ceremony?: Ceremony;\n  chooseCeremony?: EditorAppData[\"chooseCeremony\"];\n  user?: User;\n  language: string;\n  simpleScreen?: SimpleScreenState;\n}, {\n  canEdit: boolean; // whether the ceremony can be editted\n  editAccess?: boolean; // allowed to manage who can access/edit this ceremony?\n  showAccountDialog?: boolean;\n  editLanguage?: boolean; // whether the language selection dialog is active\n  ceremonyPreview?: boolean;\n  simpleScreen?: SimpleScreenState;\n}> {\n  //  canEdit = false;\n  hasWarnedDeadlinePassed: boolean = false;\n  hasWarnedMarkedCompleted: boolean = false;\n  hasShownDeadlineInfoPopup: boolean = false; // whether the deadline popup (for mobile) has been shown\n\n  constructor() {\n    super();\n\n    const ceremony = backend.getCeremony();\n    if (ceremony)\n      this.state = { canEdit: ceremony && !ceremony.contentCompleted && ceremony.contentDeadlineTimeRemaining !== null && ceremony.contentDeadlineTimeRemaining > 0 };\n\n    setTimeout(() => void this.doCheckContentDeadline(), 1);\n\n    setInterval(() => this.updateCeremonyState(), 10 * 1000);\n  }\n\n  async updateCeremonyState() {\n    console.log(\"CeremonyEditor::updateCeremonyState\");\n    await backend.updateCeremonyState();\n\n    // FIXME: this is ugly - so much indirection (server -> model.ts::updateCeremonyState -> ..)\n    const ceremony = backend.getCeremony(); // get updated ceremony\n    if (!ceremony || !this.props.ceremony)\n      return;\n\n    this.props.ceremony.contentDeadline = ceremony.contentDeadline;\n    this.props.ceremony.contentDeadlineTimeRemaining = ceremony.contentDeadlineTimeRemaining;\n    this.props.ceremony.contentCompleted = ceremony.contentCompleted;\n\n    // void this.updatedAppState();\n    // ADDME: if we already have a more recent answer from the server, ignore this one (server should provide a current time - because timing is depending on the route to the server and the route of the response)\n    this.doCheckContentDeadline();\n  }\n\n  async doCheckContentDeadline() {\n    console.info(\"CEREMONY !!!!!\", this.props.ceremony);\n\n    if (!this.props.ceremony)\n      return;\n\n\n    let canEdit = true;\n\n    const texts = backend.getTexts();\n    // console.warn(\"TEXTS\", texts);\n\n\n    const hasDeadline = this.props.ceremony.contentDeadlineTimeRemaining !== null;\n    const deadlinePassed = this.props.ceremony.contentDeadlineTimeRemaining !== null && this.props.ceremony.contentDeadlineTimeRemaining <= 0;\n\n    if (!this.props.ceremony.contentCompleted)\n      this.hasWarnedMarkedCompleted = false;\n\n    if (!deadlinePassed)\n      this.hasWarnedDeadlinePassed = false;\n\n    /*\n    console.info(\n      {\n        contentCompleted: this.props.ceremony.contentCompleted,\n        deadlinePassed: deadlinePassed,\n        hasWarnedMarkedCompleted: this.hasWarnedMarkedCompleted,\n        hasWarnedDeadlinePassed: this.hasWarnedMarkedCompleted\n      });\n    */\n\n    // Tell the user if the organizar manually flagged the ceremony as completed\n    // (if the ceremony was explicitally completed, that's more important than the fact the content deadline has been passed)\n    if (this.props.ceremony.contentCompleted) {\n\n      canEdit = false;\n      if (!this.hasWarnedMarkedCompleted) {\n        this.hasWarnedMarkedCompleted = true;\n        await this.showRichMessageDialog(texts.welcome_cantedit_markedcompleted);\n      }\n\n    } else if (deadlinePassed) {\n\n      canEdit = false;\n      if (!this.hasWarnedDeadlinePassed) {\n        this.hasWarnedDeadlinePassed = true;\n        await this.warnContentDeadlinePassed();\n      }\n    } else if (hasDeadline) { // does it have a deadline (which hasn't passed yet)\n\n      /*\n      // Reschedule check - to ensure the user gets warned when the deadline has passed\n      // instead of the clientside editor not showing any clues and the server just rejecting all edits.\n      // (the user will think it's a bug)\n      console.info(\"Scheduling a warning about the deadline passed\", this.props.ceremony.contentDeadlineTimeRemaining);\n\n      // A timeout cannot be longer than 24.8 days (max value of a signed 32-bit integer)\n      // otherwise the timeout will trigger immediately.\n      if (this.props.ceremony.contentDeadlineTimeRemaining < 0x7fffffff)\n        setTimeout(() => void this.warnContentDeadlinePassed(), this.props.ceremony.contentDeadlineTimeRemaining);\n      */\n\n      //if (document.documentElement.offsetWidth < 651) {\n      if (!this.hasShownDeadlineInfoPopup && document.documentElement.offsetWidth <= 752) {\n        this.hasShownDeadlineInfoPopup = true;\n\n        // For mobile we show a popup with the information on the content deadline\n        // (tablet/desktop users can see the same message as extra block in the grid,\n        // but on mobile this block would end up below the fold - so that's why mobile users need this popup)\n        const ceremony = backend.getCeremony();\n        const tid = ceremony!.accessLevel === \"organizer\" ? \"info_organizer\" : \"info_collaborator\";\n        const infoText = backend.getText(tid);\n        await this.showRichMessageDialog(infoText);\n      }\n\n      // FIXME: what to do if the ceremony deadline has changed when the ceremony editor has already been loaded?\n\n    }\n\n    if (canEdit !== this.state.canEdit)\n      this.setState({ canEdit: canEdit });\n  }\n\n  async showRichMessageDialog(richtext: string) {\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    // Otherwise tell if the content deadline has been passed\n    const bodyContent = <div class=\"cm-moments__info__body\"\n      dangerouslySetInnerHTML={{ __html: richtext }}>\n    </div>;\n\n    // Request confirmation on whether to mark the ceremony as completed (and therefore closing the ability to edit)\n    await runSimpleScreen(\"info\", bodyContent, { title: \"\", buttons: [\"ok\"] });\n  }\n\n  async warnContentDeadlinePassed() {\n    const texts = backend.getTexts();\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    // Otherwise tell if the content deadline has been passed\n    const bodyContent = <div class=\"cm-moments__info__body\"\n      dangerouslySetInnerHTML={{ __html: texts.welcome_deadlinepassed }}>\n    </div>;\n\n    // Request confirmation on whether to mark the ceremony as completed (and therefore closing the ability to edit)\n    await runSimpleScreen(\"info\", bodyContent, { title: \"\", buttons: [\"ok\"] });\n  }\n\n  async markCeremonyAsCompleted() {\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    // Request confirmation on whether to mark the ceremony as completed (and therefore closing the ability to edit)\n    const answer = await runSimpleScreen(\"question\",\n      getTid(\"ceremonymedia:webdesigns.site.js.editor.message-markascompleted-confirm\"), {\n      title: getTid(\"ceremonymedia:webdesigns.site.js.editor.message-markascompleted-confirm-title\"),\n      buttons: [\"yes\", \"no\"]\n    });\n\n    if (answer === \"yes\") {\n      await backend.markCeremonyAsCompleted();\n      this.updateCeremonyState(); // ensure we know the new state of the ceremony as soon as possible so we can lock the ceremony against edits\n    }\n  }\n\n  __renderApplicationHeader(callbacks: { editAccess: () => void }) {\n\n    console.log(\"CEREMONY\", this.props.ceremony);\n    const buttons =\n      <>\n        { /* Add edit buttons if we have a ceremony selected */\n          this.props.ceremony ? <Fragment>\n            {this.props.ceremony.accessLevel === \"organizer\" &&\n              <button class=\"cm-addcollaboratorbutton\" type=\"button\" onClick={callbacks.editAccess}>\n                <span class=\"icon far fa-user-plus\" role=\"presentation\"></span>\n                {getTid(\"ceremonymedia:webdesigns.site.js.buttons.addcollaborators\")}\n                <span class=\"cm-addcollaboratorbutton__count\">{this.props.ceremony.collaborators.length}</span>\n              </button>\n            }\n\n            {/* \"Complete ceremony\" button */}\n            {this.state.canEdit && this.props.ceremony.accessLevel === \"organizer\"\n              ? <button class=\"cm-toolbarbutton\"\n                onClick={() => void this.markCeremonyAsCompleted()}\n                type=\"button\">\n                <span class=\"icon far fa-flag-checkered\" role=\"presentation\"></span>\n                <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.markascompleted\")}</span>\n              </button>\n              : null}\n\n            {/* Preview button */}\n            <button class=\"cm-toolbarbutton\"\n              onClick={() => this.setState({ ceremonyPreview: !this.state.ceremonyPreview })}\n              type=\"button\">\n              <span class=\"icon far fa-eye\" role=\"presentation\"></span>\n              <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.preview\")}</span>\n            </button>\n\n            {/* Documentation/Help button */}\n            <button class=\"cm-toolbarbutton\"\n              onClick={() => this.showDocumentation()}\n              type=\"button\">\n              <span class=\"icon far fa-question-circle\" role=\"presentation\"></span>\n              <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.help\")}</span>\n            </button>\n\n            {/* Download script */}\n            <a class=\"cm-toolbarbutton\" href={this.props.ceremony.downloadScriptURL} target=\"_blank\" rel=\"noreferrer\">\n              <span class=\"icon far fa-file-download\" role=\"presentation\"></span>\n              <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.downloadscript\")}</span>\n            </a>\n\n            {/*\n            <button class=\"cm-toolbarbutton\" type=\"button\">\n              <span class=\"icon far fa-question-circle\" role=\"presentation\"></span>\n              <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.help\")}</span>\n            </button>\n            */}\n\n            {/* View condoleance page button */\n              this.props.ceremony.condolencePageURL ?\n                <a class=\"cm-toolbarbutton\" href={this.props.ceremony.condolencePageURL} target=\"_blank\" rel=\"noreferrer\">\n                  <span class=\"icon far fa-window\" role=\"presentation\"></span>\n                  <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.condolencepage\")}</span>\n                </a> : null}\n\n            {/* Account button */}\n            <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => this.setState({ showAccountDialog: true })\n            }>\n              <span class=\"icon far fa-user-circle\" role=\"presentation\"></span>\n              <span class=\"button__label\">{getTid(\"ceremonymedia:webdesigns.site.js.buttons.myaccount\")}</span>\n            </button>\n\n          </Fragment>\n            : null\n        }\n      </>;\n    const ceremonyHeader = this.props.ceremony ? <CeremonyHeader ceremony={this.props.ceremony} /> : null;\n\n    return <EditorHeader buttons={buttons} pageHeader={ceremonyHeader} />;\n  }\n\n  renderPreviewHeader() {\n\n    return (\n      <header class=\"header--previewceremony\">\n        <div class=\"header__top\">\n          <div class=\"header__top__content\">\n\n            <h1 class=\"header__title\">\n              <span class=\"header__title__prefix\">{getTid(\"ceremonymedia:webdesigns.site.js.editor.header-preview\")}</span>\n              <span class=\"header__title__ceremonytitle\">{this.props.ceremony!.name}</span>\n            </h1>\n\n            <div class=\"header__top__buttonbar\">\n              <button class=\"header__closepreviewbutton cm-toolbarbutton\"\n                aria-label={getTid(\"ceremonymedia:webdesigns.site.js.editor.header-preview-closebutton-arialabel\")}\n                onClick={() => this.setState({ ceremonyPreview: false })}\n                type=\"button\">\n                <span class=\"icon fal fa-times\" role=\"presentation\"></span>\n              </button>\n            </div>\n\n          </div>\n        </div>\n        {/* {props.pageHeader} */}\n      </header>\n    );\n\n  }\n\n  render() {\n    //console.trace();\n    console.log(\"[CeremonyEditor::render] STATE\", this.state);\n\n    // We need to render the simplescreen to be able to open a messagebox (confirmation dialog)\n    const { SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n    const subDialogs: ComponentChild[] = [<SimpleScreen />];\n\n    // Have html.cm--editor-previewmode so the moments can be\n    // styles to be fullscreen items instead of being in a grid.\n    if (\"ceremonyPreview\" in this.state)\n      document.documentElement.classList.toggle(\"cm--editor--previewmode\", this.state.ceremonyPreview);\n\n    let footerContent: VNode | null = null;\n    if (!this.state.ceremonyPreview) {\n      footerContent =\n        <>\n          <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => this.setState({ editLanguage: true })\n          }>\n            <span class=\"icon far fa-globe\" role=\"presentation\"></span>\n            <span class=\"button__label\">{this.props.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n          </button >\n        </>;\n    }\n\n    console.warn(\"[CeremonyEditor] Footercontent\", footerContent);\n\n\n    // preview mode\n    if (this.state.ceremonyPreview && this.props.ceremony !== undefined)\n      return <Fragment>\n        {this.renderPreviewHeader()}\n        <div class={this.state.ceremonyPreview ? \"cm-ceremonybody cm-ceremonybody--preview\" : \"cm-ceremonybody cm-ceremonybody--edit\"}>\n          <Moments moments={this.props.ceremony.moments}\n            allowAddingPresentations={this.props.ceremony.allowPresentations}\n            canedit={this.state.canEdit}\n            previewMode={this.state.ceremonyPreview}\n            footerContent={footerContent}\n          ></Moments>\n        </div>\n      </Fragment>;\n\n    // normal (edit) mode\n    return <Fragment>\n      <div class={this.state.ceremonyPreview ? \"cm-ceremonybody cm-ceremonybody--preview\" : \"cm-ceremonybody cm-ceremonybody--edit\"}>\n        {this.__renderApplicationHeader({\n          editAccess: () => this.setState({ editAccess: true })\n        })}\n\n        {this.props.chooseCeremony\n          ? <ChooseCeremonyDialog chooseCeremony={this.props.chooseCeremony} />\n          : this.props.ceremony === undefined\n            ? <div class=\"cm-ceremonybody__textcontent\"><h2>{getTid(\"ceremonymedia:webdesigns.site.js.editor.loading\")}</h2></div>\n            : this.props.ceremony\n              ? <Moments moments={this.props.ceremony.moments}\n                allowAddingPresentations={this.props.ceremony.allowPresentations}\n                previewMode={this.state.ceremonyPreview}\n                canedit={this.state.canEdit}\n                footerContent={footerContent}\n              ></Moments>\n              : <div class=\"cm-ceremonybody__textcontent cm-no-ceremonies\"><h2>{getTid(\"ceremonymedia:webdesigns.site.js.editor.noassociatedceremonies\")}</h2></div>}\n      </div>\n\n      {subDialogs}\n\n      <AccessDialog isOpen={this.state.editAccess ?? false} onClose={() => this.setState({ editAccess: false })} />\n      {this.props.user === undefined ? null : <AccountDialog isOpen={this.state.showAccountDialog ?? false} onClose={() => this.setState({ showAccountDialog: false })} />}\n      {this.state.editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: CMLanguage | null) => {\n        if (lang)\n          backend.setLanguage(lang);\n        this.setState(state => ({ editLanguage: false }));\n      }} /> : null}\n    </Fragment>;\n  }\n\n  showDocumentation() {\n    /*\n    const ceremony = this.state.appstate.ceremony;\n    const user = this.state.appstate.user;\n\n    // Get texts\n    // const locationdata = getFrontendData(\"ceremonymedia:location\");\n    const locationdata = getCeremonyLocation();\n    */\n    const isDutch = backend.getLanguage() === \"nl\";\n    const locationData = getCeremonyLocation();\n    // console.log(\"locationData\", locationData);\n\n    const docLink = isDutch ? locationData.documentation_nl_link : locationData.documentation_en_link;\n    showDocumentation(docLink);\n  }\n}\n\nfunction ChooseCeremonyDialog(props: { chooseCeremony: NonNullable<EditorAppData[\"chooseCeremony\"]> }) {\n  if (!props.chooseCeremony.length) {\n    return (\n      <ModalDialog\n        isOpen={true}\n        isModal={false}\n        class=\"cm-noceremoniesdialog\"\n        title={getTid(\"ceremonymedia:webdesigns.site.js.editor.noassociatedceremonies\")}>\n        <p>{getTid(\"ceremonymedia:webdesigns.site.js.editor.noassociatedceremoniesinfo\")}</p>\n      </ModalDialog>\n    );\n  }\n  return (\n    <ModalDialog\n      isOpen={true}\n      isModal={false}\n      class=\"cm-chooseceremonydialog\"\n      title={getTid(\"ceremonymedia:webdesigns.site.js.editor.chooseceremony\")}>\n      <div class=\"cm-chooseceremonydialog__list\">\n        {props.chooseCeremony.map(ceremony => {\n          const cetStart = ceremony.start && Temporal.Instant.from(ceremony.start).toZonedDateTimeISO('Europe/Amsterdam') || undefined;\n          const cetDate = cetStart?.toString().split(\"T\")[0] || \"\";\n          const cetTime = cetStart?.toString().split(\"T\")[1]?.substring(0, 5) || \"\";\n\n          return <button class=\"ceremonylist__item\" onClick={async () => {\n            using spinner = new Spinner;\n            void (spinner); //we're not using the name but you can't use using without a varname..\n            await backend.chooseCeremony(ceremony.id);\n          }}>\n            <div class=\"ceremonylist__item__line1\">{ceremony.title}</div>\n            <div class=\"ceremonylist__item__line2\">{ceremony.auditorium} {cetDate} {cetTime}</div>\n          </button>;\n        })\n        }\n      </div>\n    </ModalDialog >\n  );\n}\n\nexport const backend = new EditorBackend();\n\n//@ts-ignore FIXME remove, debug only\nwindow.__backend = backend;\n\nexport class EditorAppRoot extends Component<unknown, { appstate: EditorAppState }> {\n  constructor() {\n    super();\n\n    const searchParams = new URL(location.href).searchParams;\n    const streamCode = searchParams.get(\"stream\");\n\n    this.state = {\n      appstate: backend.start((state) => {\n        if (dtapStage === \"development\")\n          console.log(`new appstate`, state);\n        this.setState({ appstate: state });\n      }, streamCode)\n    };\n  }\n  render() {\n    const url = new URL(location.href);\n    if (url.pathname.endsWith(\"/stream\")) {\n      return <StreamCodeScreen language={this.state.appstate.language} />;\n    }\n    const searchParams = url.searchParams;\n    if (searchParams.get(\"stream\")) {\n      return <StreamScreen stream={this.state.appstate.stream} language={this.state.appstate.language} />;\n    }\n    if (searchParams.get(\"wrd_pwdaction\") === \"resetpassword\") //TODO WH should have a SPA API to explain various WRD Login page states\n      return <ResetPasswordScreen ed={searchParams.get(\"_ed\") || ''} verifier={searchParams.get(\"verifier\") || ''} language={this.state.appstate.language} />;\n    else if (!this.state.appstate.isLoggedIn) {\n      document.documentElement.classList.add(\"cm--loginscreen\");\n      document.documentElement.classList.remove(\"cm--editor\");\n      return <LoginScreen language={this.state.appstate.language} />;\n    } else {\n      document.documentElement.classList.remove(\"cm--loginscreen\");\n      document.documentElement.classList.add(\"cm--editor\");\n      return <CeremonyEditor\n        ceremony={this.state.appstate.ceremony}\n        chooseCeremony={this.state.appstate.chooseCeremony}\n        user={this.state.appstate.user}\n        language={this.state.appstate.language}\n      />;\n    }\n  }\n}\n","import type { CondolenceAppData, CondolenceAppState } from \"./state\";\nimport type { CreateCondolencePostData } from \"@mod-ceremonymedia/js/api\";\nimport { wrapSerialized } from \"@webhare/std\";\nimport { SharedCMClient, apiClient } from \"../shared-client\";\n// import { ThumbnailConfigurationStorage } from \"@aws-sdk/client-ivs\";\n\n\n/*\nexport interface CeremonyForCondolencePage {\n  id: number;\n  name: string;\n  imageBanner: string;\n  imagePhoto: string;\n  birthDate: string;\n  passingDate: string;\n}\n*/\nexport class CondolenceBackend extends SharedCMClient {\n  private renderCallback?: (state: CondolenceAppState) => void;\n  condolenceCode = '';\n  condolencePassword = '';\n  private app: CondolenceAppData = { state: \"loading\" };\n\n  start(renderCallback: (state: CondolenceAppState) => void, condolenceCode: string): CondolenceAppState {\n    this.renderCallback = renderCallback;\n    this.condolenceCode = condolenceCode;\n\n    if (condolenceCode !== \"\") {\n      this.refreshCondolenceData();\n    } else\n      this.app = { ...this.app, code: \"\", state: \"unknowncode\" };\n\n    return { ...this.getCMState(), ...this.app };\n  }\n\n  updatedAppState = wrapSerialized(async () => {\n    //never give out a writable state copy\n    this.renderCallback?.(structuredClone({ ...this.getCMState(), ...this.app }));\n  }, { coalesce: true });\n\n  useCondolenceCode(condolenceCode: string, condolencePassword: string) {\n    this.condolenceCode = condolenceCode;\n    this.condolencePassword = condolencePassword;\n    this.refreshCondolenceData();\n  }\n\n  // private async continueStart() {\n  private async refreshCondolenceData() {\n    const codeinfo = await apiClient.handleCondoleanceCode(this.condolenceCode, this.condolencePassword);\n    console.log(`RPC returned info for`, this.condolenceCode, \"is\", codeinfo);\n\n    if (!codeinfo) {\n      this.app.state = \"unknowncode\";\n      await this.updatedAppState();\n      return;\n    }\n\n    if (codeinfo.success) {\n      this.app = {\n        ...this.app,\n        state: \"loaded\",\n        code: codeinfo.code,\n        ceremony: codeinfo.ceremony,\n        canManage: codeinfo.canManage,\n        user: codeinfo.user,\n        predefinedImages: codeinfo.predefinedImages,\n        token: codeinfo.token\n      };\n    } else if (codeinfo.status === \"passwordRequired\" || codeinfo.status === \"passwordIncorrect\") {\n      this.app = {\n        ...this.app,\n        state: codeinfo.status,\n        code: codeinfo.code,\n        ceremony: codeinfo.ceremony\n      };\n    } else if (codeinfo.status === \"unknowncode\") {\n      // alert(\"Onbekende code\");\n      console.error(\"unknown code\"); // FIXME: implementeer nette melding\n      this.app = {\n        ...this.app,\n        state: codeinfo.status,\n        code: codeinfo.code\n      };\n    } else {\n      console.error(\"unknown state\");\n    }\n\n    this.updatedAppState(); // communicate our backend state to the frontend\n  }\n\n  reload() {\n    this.refreshCondolenceData(); // FIXME\n  }\n\n  getCeremonyData() {\n    if (this.app.state !== \"loaded\")\n      return null;\n\n    return this.app.ceremony;\n  }\n\n  async addCondolencePost(postdata: CreateCondolencePostData): Promise<{ success: false } | { success: true; postId: number }> {\n    if (this.app.state !== \"loaded\")\n      return { success: false };\n\n    /*\n    console.info(\"condolence-backend.ts:addCondolencePost\");\n    console.info(\"this.app.state\", this.app.state);\n    console.info(\"postdata\", postdata);\n    */\n\n    return apiClient.addCondolencePost(this.app.ceremony.id, postdata);\n  }\n}\n","// Auto-generated language file from /opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/webdesigns/ceremonysite/pages/condolence/condolence.lang.json\nvar registerTexts = require(\"@webhare/gettid/src/internal\").registerTexts;\nregisterTexts(\"ceremonymedia\",\"nl\",{\"common\":{\"condolence_banner_image_description\":[\"• de condoleance pagina maakt een uitsnede met 7:2 beeldverhouding\",\"\\n\",\"• beinvloed de uitsnede via de edit knop en referentiepunt\",\"\\n\",\"• gebruik ten minste 1820 x 532 voor een scherpe afbeelding\"],\"condolence_photo_image_description\":[\"• uitsnede met 1:1 beeldverhouding wordt gebruikt\",\"\\n\",\"• beinvloed de uitsnede via de edit knop en referentiepunt\",\"\\n\",\"• minimaal 416 x 416 voor een scherpe afbeelding\"],\"title_en\":\"Titel (EN)\",\"title_nl\":\"Titel (NL)\",\"access_level\":{\"access_level\":\"Toegangsniveau\",\"collaborator\":\"Samenwerker\",\"organizer\":\"Organisator\"},\"actions\":{\"openceremonyeditor\":\"Ceremony editor bekijken\",\"openceremonyeditorkeeptoken\":\"Ceremony editor bekijken (behoud token)\",\"opencondolencepage\":\"Condoleancepagina bekijken\",\"openstreampage\":\"Stream pagina bekijken\",\"openstreampage-asadmin\":\"Stream pagina bekijken (als beheerder)\",\"openstreampage-asuser\":\"Stream pagina bekijken (als bezoeker)\"},\"momenttype\":{\"music\":\"Muziek\",\"presentation\":\"Presentatie\",\"slideshow\":\"Slideshow\",\"speaker\":\"Spreker\",\"video\":\"Video\"}},\"webdesigns\":{\"condolence\":{\"js\":{\"post-agreetoterms\":[\"Ik ga akkoord met de \",{\"t\":\"a\",\"link\":\"#\",\"linkparam\":0,\"target\":\"\",\"subs\":\"voorwaarden\"}],\"post-message-label\":\"Uw bericht\",\"post-message-placeholder\":\"Typ hier uw bericht\",\"post-name\":\"Uw naam (of namen)\",\"post-name-placeholder\":\"Type hier uw naam of namen …\",\"post-type-candle\":\"Brand een kaarsje\",\"post-type-image\":\"Kies een afbeelding\",\"post-type-label\":\"Verrijk uw herinnering\",\"post-type-video\":\"Kies een video\"}}}});\nregisterTexts(\"ceremonymedia\",\"en\",{\"common\":{\"condolence_banner_image_description\":[\"• the condolence page will make a cutout with 7:2 aspect ratio\",\"\\n\",\"• influence the cutout using the edit button and reference point\",\"\\n\",\"• use at least of 1820 x 532 for a sharp image\"],\"condolence_photo_image_description\":[\"• a cutout with 1:1 aspect ratio will be used\",\"\\n\",\"• influence the cutout using the edit button and reference point\",\"\\n\",\"• use at least of 416 x 416 for a sharp image\"],\"title_en\":\"Title (EN)\",\"title_nl\":\"Title (NL)\",\"access_level\":{\"access_level\":\"Access level\",\"collaborator\":\"Collaborator\",\"organizer\":\"Organizer\"},\"actions\":{\"openceremonyeditor\":\"View ceremony editor\",\"openceremonyeditorkeeptoken\":\"View ceremony editor (keep token)\",\"opencondolencepage\":\"View condolence page\",\"openstreampage\":\"View stream page\",\"openstreampage-asadmin\":\"View stream page (as admin)\",\"openstreampage-asuser\":\"View stream page (as user)\"},\"momenttype\":{\"music\":\"Music\",\"presentation\":\"Presentation\",\"slideshow\":\"Photos\",\"speaker\":\"Speaker\",\"video\":\"Video\"}},\"webdesigns\":{\"condolence\":{\"js\":{\"post-agreetoterms\":[\"I agree to the \",{\"t\":\"a\",\"link\":\"#\",\"linkparam\":0,\"target\":\"\",\"subs\":\"terms\"}],\"post-message-label\":\"Your message\",\"post-message-placeholder\":\"Add your message\",\"post-name\":\"Your name (or names)\",\"post-name-placeholder\":\"Type your name or names here …\",\"post-type-candle\":\"Burn a candle\",\"post-type-image\":\"Add an image\",\"post-type-label\":\"Enrich your memory\",\"post-type-video\":\"Add a video\"}}}});\n// Adding dependency: /opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/language/default.xml\n// Adding dependency: /opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/language/en.xml\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, createRef, Fragment } from \"preact\";\n\nimport { getTid, getHTMLTid } from \"@webhare/gettid\";\nimport { getFrontendData } from \"@webhare/frontend\";\n\n// Components\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\n\n// File uploading support\nimport { CondolencePredefinedImage } from \"./state\";\nimport { type UploadResult } from \"@webhare/upload\";\n\n// RPC\nimport type { CeremonyUpload, CondolenceAttachmentType } from \"@mod-ceremonymedia/js/api\";\n\nimport \"./condolence.lang.json\";\n\nimport \"./dialog-postmessage.scss\";\nimport { backend } from \"./condolence\";\nimport { prepareUpload, type supportedMimetypes } from \"../shared-upload\";\n\n\nfunction getImageURL(infile: CeremonyUpload) {\n  if (infile.mimetype === \"image/heic\" && infile.handle && infile.url.startsWith(\"https://cdn.filestackcontent.com/\"))\n    return `https://cdn.filestackcontent.com/output=format:jpg/${encodeURIComponent(infile.handle)}`;\n\n  return infile.url;\n}\n\n\nexport class PostMessageDialog extends Component\n  <{ // Properties\n    ceremonyId: number;\n    // onResult: (slides: CeremonyMomentSlide[] | null) => void;\n    // onResult: () => void;\n    onResult: (result: { success: false } | { success: true; postId: number }) => void;\n    predefinedImages: CondolencePredefinedImage[];\n  }, // State\n    {\n      files: UploadResult[];\n      attachmentType: CondolenceAttachmentType;\n      isPosting: boolean;\n      // predefinedImageIdx: 0;\n    }\n  > {\n\n  formref = createRef();\n  attachmentType: CondolenceAttachmentType | \"\" = \"\";\n  files: CeremonyUpload[] = [];\n\n\n  constructor(props: {\n    ceremonyId: number;\n    // onResult: (momentId: number | null) => void;\n    onResult: (result: { success: false } | { success: true; postId: number }) => void;\n  }) {\n    super();\n  }\n\n\n  render() {\n\n    // this.predefinedImageIdx = 0;\n\n    /*\n    console.log(\"Render PostMessageDialog\", this);\n    console.log('ATT \"%s\"', this.attachmentType);\n    console.log(\"Predefined images\", this.props.predefinedImages);\n    */\n\n    const bodycontent = <>\n      <form class=\"postmessageform\" action=\"test.html\" method=\"post\"\n        ref={this.formref}\n        onSubmit={() => this.onSubmit()}>\n\n        <div class=\"form__part\">\n          <label for=\"\">{getTid(\"ceremonymedia:webdesigns.condolence.js.post-name\")}</label>\n          <input name=\"author\" type=\"text\" required\n            placeholder={getTid(\"ceremonymedia:webdesigns.condolence.js.post-name-placeholder\")} />\n        </div>\n\n        {this.attachmentType === \"\"\n          ? this.renderAttachmentSelection()\n          : this.renderAttachmentPreview()\n        }\n\n        <div class=\"form__part form__part--message\">\n          <label>{getTid(\"ceremonymedia:webdesigns.condolence.js.post-message-label\")}</label>\n\n          <textarea name=\"message\"\n            placeholder={getTid(\"ceremonymedia:webdesigns.condolence.js.post-message-placeholder\")}\n          ></textarea>\n        </div>\n\n        <div class=\"form__part form__part--agreetoterms wh-styledinput\">\n          <input name=\"agreetoterms\" type=\"checkbox\" id=\"postform__agreetoterms\" required />\n          <label for=\"postform__agreetoterms\"\n            onClick={evt => this.doCheckForTermsClick(evt)}\n            dangerouslySetInnerHTML={{ __html: getHTMLTid(\"ceremonymedia:webdesigns.condolence.js.post-agreetoterms\") }}></label>\n        </div>\n      </form>\n    </>;\n\n    const footercontent =\n      <Fragment>\n        <button class=\"cm-dialog__cancel-button wh-button-outline\"\n          type=\"button\"\n          onClick={() => this.props.onResult({ success: false })}>{getTid(\"ceremonymedia:webdesigns.site.js.buttons.cancel\")}</button>\n\n        <button class=\"cm-dialog__submit-button wh-button-solid wh-button-default\"\n          type=\"submit\"\n          onClick={() => this.onSubmit()}\n        >{getTid(\"ceremonymedia:webdesigns.site.js.buttons.submit-post\")}</button>\n      </Fragment>;\n\n\n    return <ModalDialog dialogname=\"postmessage\"\n      title=\"Plaats een bericht\"\n      footerContent={footercontent}\n      showSpinner={this.state.isPosting}\n      onClose={() => this.props.onResult({ success: false })}\n      isOpen isModal>{bodycontent}</ModalDialog>;\n  }\n\n  // capture clicks an a anchor in the \"agree to terms\" label (for opening the conditions page)\n  doCheckForTermsClick(evt: MouseEvent) {\n    const anchor = (evt.target as HTMLElement).closest(\"a\");\n    if (!anchor)\n      return;\n\n    // Get texts\n    const locationdata = getFrontendData(\"ceremonymedia:location\");\n    const isDutch = backend.getLanguage() === \"nl\";\n    const texts = isDutch ? locationdata.texts_condolence_nl : locationdata.texts_condolence_en;\n\n    anchor.setAttribute(\"target\", \"_blank\");\n    anchor.setAttribute(\"href\", texts.termslink);\n  }\n\n  doRemoveAttachment() {\n    this.files = [];\n    this.attachmentType = \"\";\n    this.setState({});\n  }\n\n  renderAttachmentPreview() {\n\n    /*\n    console.log({\n      files: this.files,\n      attachmentType: this.attachmentType\n    });\n    */\n\n    const predefinedImages = this.props.predefinedImages;\n\n    const file = this.files[0];\n\n    return <>\n      <div class=\"form__part form__part--card\">\n\n        <label id=\"postform__type__label\">{getTid(\"ceremonymedia:webdesigns.condolence.js.post-type-label\")}</label>\n\n        {this.attachmentType === \"image\"\n          ? <div class=\"postform__attachment__preview\">\n            <img class=\"postform__attachment__image\" src={getImageURL(file)} />\n            <div class=\"postform__attachment__info_and_actions\">\n              <div class=\"postform__attachment__filename\">{file.filename}</div>\n              <button class=\"postform__attachment__removebutton wh-button-outline\"\n                onClick={() => this.doRemoveAttachment()}\n                type=\"button\"><span class=\"icon far fa-trash-alt\" role=\"presentation\"></span><span class=\"text\">Verwijderen</span></button>\n            </div>\n          </div> : null}\n\n        {this.attachmentType === \"video\"\n          ? <div class=\"postform__attachment__preview\">\n            <video class=\"postform__attachment__video\" src={file.url} controls />\n            <div class=\"postform__attachment__info_and_actions\">\n              <div class=\"postform__attachment__filename\">{file.filename}</div>\n              <button class=\"postform__attachment__removebutton wh-button-outline\"\n                onClick={() => this.doRemoveAttachment()}\n                type=\"button\"><span class=\"icon far fa-trash-alt\" role=\"presentation\"></span><span class=\"text\">Verwijderen</span></button>\n            </div>\n          </div> : null}\n\n        {this.attachmentType === \"candle\"\n          ? <div class=\"postform__attachment__cardselection\">\n            Maak een keuze voor een kaars.\n            <div class=\"postform__attachment__options radiobuttons--images__items\">\n              {predefinedImages.map(image => <>\n                <input id={\"predefinedimage\" + image.id} type=\"radio\" name=\"predefinedimage\" value={image.id} />\n                <label for={\"predefinedimage\" + image.id} class=\"predefinedimage\"><img src={image.imageUrl} /></label>\n              </>)}\n            </div>\n          </div> : null}\n\n      </div >\n    </>;\n  }\n\n  renderAttachmentSelection() {\n    return <>\n      <div class=\"form__part\"\n        role=\"group\"\n        aria-labelledby=\"postform__type__label\">\n        <label id=\"postform__type__label\">{getTid(\"ceremonymedia:webdesigns.condolence.js.post-type-label\")}</label>\n\n        <div class=\"postform__type__buttonbar\">\n          {/* Add image */}\n          <button class=\"wh-button-outline\"\n            onClick={evt => this.doAddImage()}\n            type=\"button\"\n          >{getTid(\"ceremonymedia:webdesigns.condolence.js.post-type-image\")}</button>\n\n          {/* Add video */}\n          <button class=\"wh-button-outline\"\n            onClick={evt => this.doAddVideo()}\n            type=\"button\"\n          >{getTid(\"ceremonymedia:webdesigns.condolence.js.post-type-video\")}</button>\n\n          {/* Add candle */}\n          <button class=\"wh-button-outline\"\n            onClick={evt => this.doAddCandle()}\n            type=\"button\"\n          >{getTid(\"ceremonymedia:webdesigns.condolence.js.post-type-candle\")}</button>\n        </div>\n      </div>\n    </>;\n  }\n\n  async doAddImage() {\n    await this.uploadAttachment(\"image\", \"image\");\n  }\n\n  async doAddVideo() {\n    await this.uploadAttachment(\"video\", \"video\");\n  }\n\n  doAddCandle() {\n    this.attachmentType = \"candle\";\n    this.setState({});\n\n    setTimeout(() => {\n      const firstOption = this.formref.current.querySelector(\".postform__attachment__cardselection input\");\n      if (firstOption) {\n        firstOption.focus();\n        firstOption.checked = true;\n      }\n    }, 1);\n  }\n\n\n  async onSubmit() {\n    const form = this.formref.current as HTMLFormElement;\n    // const valid = form.checkValidity();\n    const valid = form.reportValidity();\n    if (!valid)\n      return;\n\n    try {\n      const ceremonyId = backend.getCeremonyData()!.id;\n\n      const postData =\n      {\n        author: String(form.author.value),\n        message: String(form.message.value),\n        attachmentType: this.attachmentType,\n        files: this.files, //await uploader.upload()\n        //predefinedImage: this.attachmentType === \"candle\" ? this.props.predefinedImages[this.predefinedImageIdx].id : 0\n        predefinedImage: this.attachmentType === \"candle\" ? parseInt(form.predefinedimage.value) : null\n      };\n\n      this.setState({ isPosting: true });\n\n      // FIXME: have some kind of encrypted token which acts as temporary login?\n\n      console.log(\"Ceremony #\", ceremonyId, \"add post\", postData);\n\n      const result = await backend.addCondolencePost(postData);\n\n      console.log(\"addCondolencePost returned:\", result);\n      // console.log(`New post id: ${result.postId}`);\n\n      if (result.success === true)\n        // this.props.onResult({ success: true, postId: result.success ? result.postId : 0 });\n        this.props.onResult({ success: true, postId: result.postId });\n    } finally {\n      this.setState({ isPosting: false });\n    }\n  }\n\n  // FIXME: copied from editor model.ts where it's backend.prepareUpload\n  // Changes: maxfiles set to 1, using requestUploadForPost because non-collaborators can also post\n  async uploadAttachment(uploadType: keyof typeof supportedMimetypes, attachmentType: CondolenceAttachmentType) {\n\n    const ceremony = backend.getCeremonyData();\n\n    // NOTE: using ! because the current UI/function can only be reached when there's a ceremony active\n    const uploader = await prepareUpload(ceremony!.filestackApiKey, uploadType, 1);\n    if (!uploader)\n      return;\n\n    console.log(\"Uploader result\", uploader);\n    const files = await uploader.upload();\n    console.info(\"Result of upload\", files);\n\n    // FIXME: should we use state for this??\n    this.files = files;\n    this.attachmentType = attachmentType;\n    this.setState({});\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, Fragment } from \"preact\";\n\n// Components\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\n\nimport \"./dialog-viewimage.scss\";\n\n\n\nexport class ViewImageDialog extends Component\n  <{ // Properties\n    imageURL: string;\n    onResult: () => void;\n  }, // State\n    {\n      dummy: boolean;\n    }\n  > {\n\n\n  constructor(props: {\n    imageURL: number;\n    onResult: () => void;\n  }) {\n    super();\n  }\n\n\n  render() {\n    const bodycontent = <>\n      <img src={this.props.imageURL} />\n    </>;\n\n    return <ModalDialog dialogname=\"viewimage\"\n      title=\"\"\n      closeButton={true}\n      onClose={() => this.props.onResult()}\n      clickOutsideCanClose={true}\n      isOpen isModal>{bodycontent}</ModalDialog>;\n  }\n}\n","import * as dompack from \"@webhare/dompack\";\nimport * as forms from \"@mod-publisher/js/forms\";\nimport UploadField from \"@mod-publisher/js/forms/fields/upload\";\nimport { DateField, TimeField } from \"@mod-publisher/js/forms/fields/datetime\";\n\nimport \"../../frontend/forms/buttons.css\";\nimport \"../../frontend/forms/buttons-v2.css\";\nimport \"../../frontend/forms/textual-input.scss\";\nimport \"../../frontend/forms/checkradio-native.scss\";\nimport \"../../frontend/forms/slider.css\";\n\nimport \"../../frontend/forms/buttonbar.scss\";\n\n//import * as googleRecaptcha from \"@mod-publisher/js/captcha/google-recaptcha\";\n\n//Load neutral styling (optional, but you'll need to supply your own styling for some of the fields below if you skip this)\nimport '@mod-publisher/js/forms/themes/neutral';\nimport '../../frontend/forms/forms.scss';\n\n\n//Enable forms and our builtin validation (starting with WebHare 4.23, validate:true will be the default)\nforms.setup({ validate: true });\n\n//Replaces upload fields with a nicer and edit-supporting version\ndompack.register(\".wh-form__upload\", node => new UploadField(node));\n\n//Replaces date/time fields\ndompack.register(\".wh-form__date\", node => new DateField(node));\ndompack.register(\".wh-form__time\", node => new TimeField(node));\n\n//enable the line below AND the googleRecaptcha import if you want to use this recaptcha. you'll also need to enable it in the site profile\n//googleRecaptcha.setupGoogleRecaptcha();\n","/// @ts-nocheck -- Bulk rename to enable TypeScript validation\n\n// NOTE: This version of dompack-masonry was updated for minfin_wig to\n//       autodetect size changes and relayout using the resizeObserver.\n\n// FIXME: when staying in 1-column mode during a refresh don't clear the CSS variables again\n\nimport * as dompack from \"dompack\";\n\n\n// We have a global resizeObserver for performance reasons\nlet resizeObserver;\nif (window.ResizeObserver)\n  resizeObserver = new ResizeObserver(entries => onMasonryResizes(entries));\n\n\nconst debug = false;\nconst automaticlyHandleResizes = false; // Disable for sites which want to handle it themselves (for example to determine how many columns they want to use)\n\n/*\nList of masonry instances used for:\n- debugging\n- for the resizeObserver code to determine which masonries needs to relayout\n*/\nwindow.__dompackmasonries = [];\n\n\nfunction onMasonryResizes(entries) {\n  if (debug)\n    console.group(\"[dompack-masonry] resizeObserver got entries\");\n\n  const containers_to_relayout = []; //\n\n  for (const entry of entries) {\n    let add_node;\n\n    if (entry.target.hasAttribute(\"data-dompackmasonry\")) {\n      // If the width and height are what we calculated it to be at the last relayout\n      // this probably means this is a resize event which we triggered outselves.\n      // In this case we ignore this resize entry.\n      //\n      // If one of the other resize entries is an item within the masonry,\n      // whe'll still do the relayout. (because that'll mean multiple items may have resized,\n      // but combined the masonry container size stayed the same, but they need to be relayout anyway)\n\n      const renderinfo = entry.target.__dompackmasonry_instance.getLastRenderInfo();\n      //console.info(\"Renderinfo\", renderinfo);\n\n      if (renderinfo.width === entry.contentRect.width\n        && renderinfo.height === entry.contentRect.height) {\n\n        if (debug)\n          console.log(\"masonry container equals the size we set, so ignoring\");\n\n      } else\n        add_node = entry.target;\n    } else {\n      const container = entry.target.closest(\"[data-dompackmasonry]\");\n      if (container) {\n\n        if (debug)\n          console.log(\"resized item:\", entry.target);\n\n        add_node = container;\n      } else { // It has been removed from it's masonry\n        // (FIXME: detected whether it was removed from the DOM, moved outside any masonry or moved to another masonry??)\n        // if (entry.contentRect.width == 0 && entry.contentRect.height == 0)\n      }\n    }\n\n    // Add this Masonry container if it's not in the list yet\n    if (add_node && containers_to_relayout.indexOf(add_node) === -1)\n      containers_to_relayout.push(add_node);\n  }\n\n  if (debug) {\n    console.info(\"containers to relayout\", containers_to_relayout);\n    console.groupEnd();\n  }\n\n  for (const entry of window.__dompackmasonries) {\n    // FIXME: optimize? if container resizes we need a full refresh, if it only was an item only reposition items\n    if (containers_to_relayout.indexOf(entry.node) > -1) {\n\n      if (debug)\n        console.info(\"[dompack-masonry] refresh\", entry.node, \"height was:\", entry.instance.__height);\n\n      entry.instance.refresh();\n    }\n  }\n\n}\n\n\n\nexport default class DompackMasonry {\n  constructor(node, options) {\n    if (node.hasAttribute(\"data-dompackmasonry\")) {\n      console.error(\"Masonry already initialized\");\n      return;\n    }\n\n    for (const entry of window.__dompackmasonries) {\n      if (entry.node === node) {\n        console.error(\"Masonry!\");\n        return;\n      }\n    }\n\n    const domoptions = dompack.getJSONAttribute(node, \"data-masonry-options\");\n\n    // NOTE: we don't use Object.assign() here because we have some\n    //       smart rules (convert gutter to gutter_x and gutter_y for example)\n    this.options =\n    {\n      columns: 3,\n      columnwidth: 0,     // if not set the width will be set so the amount of columns will fill up the horizontal space\n\n      // gutter size\n      // gutter:            10 // shorthand for gutter_x and gutter_y\n      gutter_x: 10,\n      gutter_y: 10,\n\n      debug: false,\n\n      // CSS query (for example '.masonry-item' or array of nodes\n      // Pass an array of nodes if you want control over the order visual order of the items (without reordering the dom)\n      items: null,\n\n      equalizeheight: false,\n      equalizenodequery: \"\", // This is the CSS query to get the element to stretch within each item.\n      // If kept empty (\"\") or no element was found using the query, the item's container itself is stretched.\n\n      //, letbrowserreflow:   false // (ADDME: invent this. but how?) if set, we don't use absolute positioning. downside -> cannot animate to new position, upside -> no issues when content in the masonry\n\n      // specify a class to ignore in layouting\n      // (can be used for items which you transition to hide/fade)\n      ignoreclass: \"hide\",\n\n      //, layoutmode:         \"masonry\"/\"equalheight\"/\"mixed\"\n\n      //, fill_last_strip:    false\n      //, fill_last_strip_threshold: 40\n      righttoleft: false // FIXME: keep or remove this option?\n    };//, domoptions, options;\n\n\n    if (this.options.debug) {\n      console.warn(\"[dompack-masonry] Initializing\", \"\\n\",\n        node, \"\\n\",\n        options\n      );\n    }\n\n    // To easily find the node a masonry is applied is.\n    // (our resizeObserver can also use this to find the masonry instance responsible\n    // for handling the resized item)\n    // This is preferable over using a class, because someone might\n    node.setAttribute(\"data-dompackmasonry\", \"\");\n    node.__dompackmasonry_instance = this;\n\n\n    this.current_item_nodes = []; // also needed to track which nodes we observe\n\n    if (domoptions)\n      this.setOptions(domoptions);\n\n    if (options)\n      this.setOptions(options);\n\n    if (typeof (node) === \"string\")\n      this.container = document.getElementById(node);\n    else\n      this.container = node;\n\n    this.__height = 0;\n    this.__columnwidth = 0;    // (also used to detect whether widget width style has to be set)\n    this.__itemdata = [];   // render data\n    this.__visiblewidgetscount = 0;\n    this.__singlerow = true;\n    this.__columncontainers = [];\n\n    this.__items_dirty = true;\n\n    // PRIVATE VARS!!\n    this.__leftoffset = 0;\n    this.__containerwidth = 0;\n    this.__widgetrecs = [];\n\n\n    // Handle resizing of the Masonry container.\n    if (automaticlyHandleResizes && resizeObserver)\n      resizeObserver.observe(node);\n\n    this.refresh();\n\n    window.__dompackmasonries.push(\n      {\n        node: node,\n        instance: this\n      });\n  }\n\n  setOptions(options) {\n    if (this.options.debug)\n      console.warn(\"[dompack-masonry] setOptions\", \"\\n\", options);\n\n    if (\"gutter\" in options) {\n      options.gutter_x = options.gutter;\n      options.gutter_y = options.gutter;\n      delete options.gutter;\n    }\n\n    if (\"items\" in options)\n      this.__items_dirty = true; // need to recheck all widgets, there might be new ones\n\n    Object.assign(this.options, options);\n  }\n\n\n\n  /** do a full relayout\n      (it will find all items, detect width, read data-cols attributes on items and relayout)\n  */\n  refresh(elem?: HTMLElement) {\n    if (this.options.debug) {\n      console.log(\"Masonry.refresh()\");\n      console.trace();\n    }\n\n    const clientwidth = this.container.clientWidth;\n    if (clientwidth === 0) {\n      console.warn(\"Cannot determine size of mansonry container (got 0).\", this.container);\n      return;\n    }\n\n    // FIXME: assuming padding in px\n    // FIXME: assuming correct box-sizing\n    // FIXME: assumption that this container (with the padding) is also the positioning container\n    const cstyle = window.getComputedStyle(this.container);\n    const padtop = parseInt(cstyle.paddingTop, 10);\n    const padbottom = parseInt(cstyle.paddingBottom, 10);\n    const padleft = parseInt(cstyle.paddingLeft, 10);\n    const padright = parseInt(cstyle.paddingRight, 10);\n    this.__padding = {\n      top: padtop,\n      bottom: padbottom,\n      left: padleft,\n      right: padright\n    };\n    //console.log(this.container, this.__padding);\n\n    this.__leftoffset = padleft;\n    this.__containerwidth = clientwidth - padleft - padright;\n\n    let widgets;\n    if (!this.options.items)\n      widgets = this.container.querySelectorAll(\".wh-masonry-item\");\n    else if (typeof (this.options.items) === \"string\")\n      widgets = Array.from(this.container.querySelectorAll(this.options.items));\n    else\n      widgets = Array.from(this.options.items);\n\n\n    // Update resize observer ------------------------------------\n    //console.log(\"current_item_nodes\", this.current_item_nodes);\n\n    for (const node of widgets) {\n      if (this.current_item_nodes.indexOf(node) === -1) {\n        //console.log(\"Adding\", node);\n        resizeObserver.observe(node);\n      }\n    }\n\n    // Remove items from the resizeObserver which are no longer in the masonry\n    for (const node of this.current_item_nodes) {\n      if (widgets.indexOf(node) === -1) { // a currently observer item isn't in the list of widgets?\n        //console.log(\"Removing\", node);\n        resizeObserver.unobserve(node);\n      }\n    }\n    // -----------------------------------------------------------\n\n    this.current_item_nodes = widgets;\n\n\n    if (this.options.equalizeheight)\n      this.pvt_relayoutEqualHeight(widgets);\n    else\n      this.pvt_relayout(widgets);\n  }\n\n  /* @short reposition\n\n\n\n\n  /** @short only update heights and position\n             New items and changed widths aren't detected\n  */\n  refreshHeights(elem) {\n    if (this.options.equalizeheight)\n      this.pvt_relayoutEqualHeight(null, true);\n    else\n      this.pvt_relayout(null, true);\n  }\n\n  getLastRenderInfo() {\n    return {\n      container: this.container,\n      visiblewidgetscount: this.__visiblewidgetscount,\n      width: this.__containerwidth,\n      height: this.__height,\n      items: this.__itemdata,\n      singlerow: this.__singlerow\n    };\n  }\n\n\n  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n  //\n  //  Private functions\n  //\n\n  pvt_relayout(widgets, no_new_widgets) {\n    if (this.options.debug)\n      console.group(\"Masonry.refresh()\");\n\n\n    if (this.options.columns === 1) {\n      // Unset all CSS properties we normally use\n      for (const widgetnode of widgets) {\n        widgetnode.style.position = \"\";\n        widgetnode.style.left = \"\";\n        widgetnode.style.top = \"\";\n        widgetnode.style.width = \"auto\";\n        widgetnode.style.height = \"auto\"; // clear any inline specified height (we only allow a fixed height if specified in CSS)\n      }\n      this.container.style.height = \"\";\n      return;\n    }\n\n\n    let visiblewidgetscount = 0;\n\n    let columnwidth = this.options.columnwidth;\n    if (!columnwidth)\n      columnwidth = (this.__containerwidth - (this.options.columns - 1) * this.options.gutter_x) / this.options.columns;\n\n    const columncount = this.options.columns;\n    let singlerow = true; // until we have to place a new widget below another one all widgets are still on a single row\n\n    const columns = []; // the last Y position in use per column\n    for (let xcol = 0; xcol < columncount; xcol++)\n      columns.push(0);\n\n    /*\n    console.log({ columns:     this.options.columns\n                , columnwidth: columnwidth\n                });\n    */\n\n    let widgetrecs;\n\n    // Only change widget width's when needed\n    //    if (no_new_widgets !== true || this.__columnwidth != columnwidth)\n    if (this.__items_dirty || this.__columnwidth !== columnwidth) { // new items or width for widgets need to change?\n      widgetrecs = [];\n      // First apply the new width to all widgets, so we can later determine the correct height\n      for (let idx = 0; idx < widgets.length; idx++) {\n        const widget = widgets[idx];\n\n        let widgetcols = widget.getAttribute(\"data-cols\");\n        widgetcols = widgetcols ? parseInt(widgetcols) : 1;\n\n        if (widgetcols > this.options.columns)\n          widgetcols = this.options.columns;\n\n        const width = columnwidth * widgetcols + (widgetcols - 1) * this.options.gutter_x;\n\n        widget.style.position = \"absolute\";\n        widget.style.width = width + \"px\";\n        widget.style.height = \"\"; // clear any inline specified height (we only allow a fixed height if specified in CSS)\n\n        widgetrecs.push(\n          {\n            node: widget,\n            width: width,\n            height: null,\n            cols: widgetcols\n          });\n      }\n\n      /*\n      Let our children relayout to match our new width\n      (after which layout of masonry item contents should be done, meaning the height is known and we can start to build up the masonry)\n      */\n      if (this.options.debug) {\n        // Notify any of our components within the Masonry container that layout has changed.\n        // After they have updated their layout we know the final height of each widget and can start to layout our Masonry.\n        console.log(\"Firing layout change event\");\n\n        // Inform widgets without our masonry grid to relayout\n        // (due to a change in the width)\n        dompack.dispatchCustomEvent(node, \"ws:relayoutwidgetcontent\",\n          {\n            bubbles: true,\n            cancelable: false,\n            detail: {}\n          });\n      }\n\n    } else {\n      widgetrecs = this.__itemdata;\n    }\n\n\n\n    // measure all widgets in one go to prevent extreneous reflows by mixing writes and reads\n    for (let idx = 0; idx < widgetrecs.length; idx++)\n      widgetrecs[idx].height = widgetrecs[idx].node.clientHeight;\n\n\n\n    for (let idx = 0; idx < widgetrecs.length; idx++) {\n      const widgetrec = widgetrecs[idx];\n      const widget = widgetrec.node;\n\n      const widgetheight = widgetrec.height;\n\n      if (this.options.debug)\n        console.log(\"#\" + idx, widgetheight + \"px\", widget.className);\n\n      if (widgetheight === 0 || (this.options.ignoreclass !== \"\" && widget.classList.contains(this.options.ignoreclass)))\n        continue;\n\n      visiblewidgetscount++;\n\n      let bestcol = -1, ypos = 0;\n\n      // set increase the last used ypos within the columns the current widget will occupy\n      // find the first ypos where the whole block would fit\n      if (this.options.debug)\n        console.info(columns);\n\n      for (let xcol = 0; xcol <= columncount - widgetrec.cols; ++xcol) {\n        const col = this.options.righttoleft ? columncount - widgetrec.cols - xcol : xcol;\n\n        const maxypos = Math.max.apply(null, columns.slice(col, col + widgetrec.cols));\n        //console.log(col, \"has enough room for \", widgetrec.cols, \" columns starting at Y pos\", maxypos);\n\n        // if we cannot find any column in which we can place the block,\n        // move to below where all previous block are\n        if (bestcol === -1 || maxypos < ypos) {\n          //          console.log(widgetrec, maxypos, ypos);\n          bestcol = col;\n          ypos = maxypos;\n        }\n      }\n\n      //console.log(\"We select column\", bestcol);\n\n      if (columns[bestcol] > 0) {\n        if (ypos > 0)\n          singlerow = false;\n\n        ypos += this.options.gutter_y;\n      }\n\n      for (let col = 0; col < widgetrec.cols; ++col) {\n        const nextypos = ypos + widgetheight;\n        columns[bestcol + col] = nextypos;\n      }\n\n      widgetrec.col = bestcol;\n      widgetrec.left = this.__leftoffset + (bestcol * columnwidth + (bestcol) * this.options.gutter_x);\n      widgetrec.top = ypos;\n\n      const styles = {\n        position: \"absolute\",\n        left: widgetrec.left, // 300 width, 10 px leftmargin, 20 inter\n        top: widgetrec.top + this.__padding.top\n        //, width:    columnwidth * widgetrec.cols + (widgetrec.cols-1) * this.options.gutter_x\n      };\n\n      if (this.options.debug)\n        console.log(\"Will be placed into col\", bestcol);\n\n      widget.style.position = styles.position;\n      widget.style.left = styles.left + \"px\";\n      widget.style.top = styles.top + \"px\";\n    }\n\n    const maxheight = Math.max.apply(null, columns) + this.__padding.top + this.__padding.bottom;\n\n    //reorderWidgets(keepcolumnpos);\n    if (this.options.columnwidth)\n      this.container.style.width = (this.options.columnwidth * this.options.columns + (this.options.columns - 1) * this.options.gutter_x) + \"px\";\n\n    this.container.style.height = maxheight + \"px\";\n\n    if (this.options.debug) {\n      console.log(this.container, \"has\", visiblewidgetscount, \"visible widgets\");\n      console.groupEnd();\n    }\n\n    /*\n    store render information (can be used to add extra behaviour outside this class for example:\n    - to equalize heights of widgets by external code or hide a widgets grid\n    - to hide a widgets container in case it has no visible widgets\n    */\n    this.__itemdata = widgetrecs;\n    this.__columnwidth = columnwidth;\n    this.__height = maxheight;\n    this.__visiblewidgetscount = visiblewidgetscount;\n    this.__singlerow = singlerow;\n  }\n\n\n\n  pvt_relayoutEqualHeight(widgets, no_new_widgets) {\n    if (this.options.debug)\n      console.group(\"Masonry.refresh()\");\n\n    let visiblewidgetscount = 0;\n\n    let columnwidth = this.options.columnwidth;\n    if (!columnwidth)\n      columnwidth = (this.__containerwidth - (this.options.columns - 1) * this.options.gutter_x) / this.options.columns;\n\n    const columncount = this.options.columns;\n\n    let widgetrecs;\n\n    // Only change widget width's when needed\n    const need_relayout = this.__items_dirty || this.__columnwidth !== columnwidth;\n    if (need_relayout) {\n      widgetrecs = [];\n\n      // First apply the new width to all widgets, so we can later determine the correct height\n      for (let idx = 0; idx < widgets.length; idx++) {\n        const widget = widgets[idx];\n\n        let widgetcols = widget.getAttribute(\"data-cols\");\n        widgetcols = widgetcols ? parseInt(widgetcols) : 1;\n\n        if (widgetcols > this.options.columns)\n          widgetcols = this.options.columns;\n\n        const width = columnwidth * widgetcols + (widgetcols - 1) * this.options.gutter_x;\n\n        widget.style.width = width + \"px\";\n        widget.style.height = \"\"; // clear any inline specified height (we only allow a fixed height if specified in CSS)\n\n        const widgetrec =\n        {\n          node: widget,\n          width: width,\n          height: null,\n          cols: widgetcols,\n          computed: {} // store .ignore, .colnr, .rownr\n        };\n\n        if (this.options.equalizenodequery !== \"\") {\n          if (!(\"eqnode\" in widgetrecs))\n            widgetrec.eqnode = widget.querySelector(this.options.equalizenodequery);\n\n          if (widgetrec.eqnode)\n            widgetrec.eqnode.style.height = \"auto\";\n        }\n\n        widgetrecs.push(widgetrec);\n      }\n\n      /*\n      Let our children relayout to match our new width\n      (after which layout of masonry item contents should be done, meaning the height is known and we can start to build up the masonry)\n      */\n      if (this.options.debug)\n        console.log(\"Firing layout change event\");\n    } else {\n      widgetrecs = this.__itemdata;\n    }\n\n\n\n    // measure all widgets in one go to prevent extreneous reflows by mixing writes and reads\n    for (let idx = 0; idx < widgetrecs.length; idx++)\n      widgetrecs[idx].height = widgetrecs[idx].node.clientHeight;\n\n\n\n    // Determine row and column for each block ---------------------------------\n\n    if (this.options.debug)\n      console.log(\"Determining row and column numbers for each block\");\n\n    let colnr = 0;\n    let rownr = 0; // for debugging the 'equalizeheight' option\n    const rowheights = [];\n    rowheights.push(0);\n\n    for (let idx = 0; idx < widgetrecs.length; idx++) {\n      const widgetrec = widgetrecs[idx];\n      const widgetheight = widgetrec.node.clientHeight;\n\n      //      console.log(idx + \"/\" + widgetrecs.length, widgetheight, widgetrec);\n\n      if (widgetheight === 0 || (this.options.ignoreclass !== \"\" && widgetrec.node.classList.contains(this.options.ignoreclass))) {\n        widgetrec.computed.ignore = true;\n        continue;\n      }\n\n      visiblewidgetscount++;\n\n      // go to the next row if the widget doesn't fit on this row anymore\n      const nextcol = colnr + widgetrec.cols;\n      if (nextcol > columncount) {\n        rowheights.push(0);\n        colnr = 0;\n        rownr++;\n      }\n\n      if (widgetheight > rowheights[rownr])\n        rowheights[rownr] = widgetheight;\n\n      widgetrec.computed.ignore = false;\n      widgetrec.computed.colnr = colnr;\n      widgetrec.computed.rownr = rownr;\n\n      if (this.options.debug)\n        console.log((colnr + 1) + \"x\" + rownr + \" (\" + widgetrec.cols + \" wide)\");\n\n      colnr += widgetrec.cols;\n    }\n\n    if (this.options.debug)\n      console.log(\"Row heights:\", rowheights);\n\n\n\n    // Apply positions to all rows/blocks --------------------------------------\n\n    if (this.options.debug)\n      console.log(\"Applying positions to blocks\");\n\n    let ypos = 0;\n    let previousrow = 0;\n    let computed = { rownr: 0 };\n    for (let idx = 0; idx < widgetrecs.length; idx++) {\n      const widgetrec = widgetrecs[idx];\n      if (widgetrec.computed.ignore) // invisible or must be ignored (not repositioned)\n        continue;\n\n      computed = widgetrec.computed;\n\n      // if we moved to the next row, add the height of the previous row\n      if (computed.rownr > previousrow) {\n        ypos += rowheights[previousrow] + this.options.gutter_y;\n        //console.log(idx, \"New start will start at ypos \", ypos);\n        previousrow = computed.rownr;\n      }\n\n      widgetrec.styles = {\n        position: \"absolute\",\n        left: this.__leftoffset + computed.colnr * columnwidth + computed.colnr * this.options.gutter_x, // 300 width, 10 px leftmargin, 20 inter\n        top: ypos,\n        height: rowheights[computed.rownr]\n      };\n\n      if (need_relayout && this.options.equalizenodequery !== \"\" && widgetrec.eqnode) {\n        widgetrec.eqnode.style.height = (rowheights[computed.rownr] - widgetrec.height) + \"px\";\n      }\n\n      /*\n      console.group(\"#\"+idx);\n      console.log(widgetrec.node);\n      console.log( (computed.colnr+1) + \"x\" + computed.rownr );\n      console.log(widgetrec.styles);\n      console.groupEnd();\n      */\n\n      widgetrec.node.style.position = widgetrec.styles.position;\n      widgetrec.node.style.left = widgetrec.styles.left + \"px\";\n      widgetrec.node.style.top = widgetrec.styles.top + \"px\";\n      widgetrec.node.style.height = widgetrec.styles.height;\n    }\n\n    const totalheight = ypos + rowheights[previousrow];\n\n\n    this.container.style.height = totalheight + \"px\";\n\n    // Now we want our parents to know we have changed in size\n    // FIXME: add a check whether we actually changed in size\n    if (this.options.debug)\n      console.log(\"Firing layout change event\");\n\n\n    if (this.options.debug) {\n      console.log(this.container, \"has\", visiblewidgetscount, \"visible widgets\");\n      console.groupEnd();\n    }\n\n    /*\n    store render information (can be used to add extra behaviour outside this class for example:\n    - to equalize heights of widgets by external code or hide a widgets grid\n    - to hide a widgets container in case it has no visible widgets\n    */\n    this.__itemdata = widgetrecs;\n    this.__columnwidth = columnwidth;\n    this.__height = ypos;\n    this.__visiblewidgetscount = visiblewidgetscount;\n\n    this.__singlerow = computed.rownr === 0; // check the rownr of the last visible widget\n    this.__rows = computed.rownr + 1;\n  }\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport { h, Component, createRef, Fragment, type ComponentChild } from \"preact\";\nimport { LoginHeader } from \"../editor/editor-header\";\nimport { getTid } from \"@webhare/gettid\";\nimport { ModalDialog } from \"../../frontend/components/dialogs\";\nimport { CondolenceBackend } from \"./condolence-backend\";\nimport type { CondolenceAppState } from \"./state\";\nimport { useState } from \"preact/hooks\";\nimport { ChooseLanguage } from \"../editor/language\";\nimport { apiClient, type CMLanguage } from \"../shared-client\";\nimport type { CondolencePostData } from \"@mod-ceremonymedia/js/api\";\n\nimport { PostMessageDialog } from \"./dialog-postmessage\";\nimport { ViewImageDialog } from \"./dialog-viewimage\";\n\nimport { simpleScreenState, type SimpleScreenState } from \"../../frontend/components/simplescreen\";\n\n// import { getCeremonyLocation } from \"../../frontend/settings/ceremony-location\";\nimport { getFrontendData } from \"@webhare/frontend\";\n\nimport \"./forms.tsx\";\n\nimport Masonry from \"./dompack-masonry\";\n\nimport \"./condolence.lang.json\";\n\nimport \"./styling/condolence.scss\";\nimport \"./styling/condolence-pageheader.scss\";\nimport \"./styling/condolence-posts.scss\";\nimport \"./styling/condolence-post-edit.scss\";\n\n\nwindow.addEventListener(\"scroll\", evt => onScroll(evt), { passive: true });\n\n\nfunction onScroll(evt: Event) {\n  if (!document.scrollingElement) // probably Internet Explorer or and old iOS (pre 9)\n    return;\n\n  const normalPostButton = document.querySelector(\".condolence__additem:not(.condolence__additem--sticky)\");\n  if (normalPostButton) {\n    const bounds = normalPostButton.getBoundingClientRect();\n    document.documentElement.classList.toggle(\"show_sticky_postbutton\", bounds.top < 0);\n  }\n}\n\n\nexport const backend = new CondolenceBackend();\n\nexport class CondolenceAppRoot extends Component<{ language: string },\n  {\n    appstate: CondolenceAppState;\n    dialog?: null | \"post\" | \"viewimage\";\n    editLanguage?: boolean;\n    simpleScreen?: SimpleScreenState;\n  }> {\n  condolenceCode: string;\n  //editdialogref = createRef<HTMLDialogElement>();\n  masonry: Masonry | null = null;\n  ref_itemslist = createRef();\n\n  imagedialog_imageurl: string = \"\"; // URL for image to show in if dialog === \"viewimage\"\n  scrollToPostId: number = 0;        // After each componentDidUpdate (rerendering) scroll to this post # if it's >0\n\n\n  //postdialogref = createRef<HTMLDialogElement>();\n\n  resizeObserver = new ResizeObserver(() => this.onMessagesGridResizes());\n\n\n  constructor() {\n    super();\n\n    const searchParams = new URL(location.href).searchParams;\n    this.condolenceCode = searchParams.get(\"condolence\") || ''; //TODO should have been a prop\n\n    // Whe'll use event delegation to dispatch to message components\n    // to close their admin dropdowns.\n    document.documentElement.addEventListener(\"mouseup\", evt => this.doCheckClick(evt), { capture: true });\n    document.documentElement.addEventListener(\"click\", evt => this.doCheckClick(evt), { capture: true });\n    document.body.addEventListener(\"keyup\", evt => this.doCheckKeyPress(evt));\n\n    // Upon finishing loading (especially CSS) ensure we refresh the masonry\n    window.addEventListener(\"load\", evt => this.onAfterPageFullyLoaded(evt));\n\n    this.state = {\n      appstate: backend.start((state) => {\n        console.log(`new appstate`, state);\n        this.setState({ appstate: state });\n      }, this.condolenceCode)\n    };\n  }\n\n\n\n  componentDidMount(): void {\n    console.info(\"!!! componentDidMount\");\n    console.info(\"Document readyState\", document.readyState);\n\n    // We probably don't have the itemsgrid because at the first render\n    // we are probably still waiting for the server to return information on the ceremony\n    // and therefore aren't in the \"loaded\" state yet.\n    // But just in case we do check if there's a masonry to initialize.\n    this.applyMasonryLayoutToMessages();\n  }\n\n  // componentDidUpdate(previousProps: Readonly<{ moments: CeremonyMoment[] }>): void {\n  componentDidUpdate(): void {\n    console.info(\"!!! componentDidUpdate\");\n    console.info(\"Document readyState\", document.readyState);\n\n    this.applyMasonryLayoutToMessages();\n\n    //setTimeout(this.gotoNewPost.bind(this, result.postId), 1);\n    if (this.scrollToPostId > 0)\n      this.gotoNewPost(this.scrollToPostId);\n  }\n\n  onMessagesGridResizes() {\n    this.applyMasonryLayoutToMessages();\n  }\n\n\n  onAfterPageFullyLoaded(evt: Event) {\n    console.info(\"Page load event fired\");\n    this.applyMasonryLayoutToMessages();\n  }\n\n\n  // If the property value isn't numeric it will return 0\n  parseCSSPropertyValueToInteger(propValue: string, fallbackValue: number) {\n    const value = parseInt(propValue);\n    return isNaN(value) ? fallbackValue : value;\n  }\n\n  applyMasonryLayoutToMessages() {\n\n    // console.log(\"appleMasonryLayoutToMessages\");\n\n    const grid = this.ref_itemslist.current;\n    if (!grid) {\n      console.log(\"No grid yet.\");\n      return;\n    }\n\n    const cStyle = window.getComputedStyle(grid);\n\n    const columns = this.parseCSSPropertyValueToInteger(cStyle.columnCount, 1); // \"auto\" will fall back to 1 column\n\n    // let gutterx = parseInt(cStyle.getPropertyValue(\"--widgetsgrid-gutter-x\"), 0);\n    // let guttery = parseInt(cStyle.getPropertyValue(\"--widgetsgrid-gutter-y\"), 0);\n    const gutterx = this.parseCSSPropertyValueToInteger(cStyle.getPropertyValue(\"--grid-gap-h\"), 20);\n    const guttery = this.parseCSSPropertyValueToInteger(cStyle.getPropertyValue(\"--grid-gap-v\"), 20);\n\n    const settings =\n    {\n      columns: columns,\n      gutter_x: gutterx,\n      gutter_y: guttery,\n      items: \".condolence__item\",\n      equalizeheight: false\n    };\n\n    console.info(\"Masonry settings\", settings);\n\n    if (!this.masonry) {\n      this.masonry = new Masonry(grid, settings);\n      this.resizeObserver.observe(grid);\n    } else {\n      this.masonry.setOptions({ columns: columns });\n      this.masonry.refresh();\n    }\n  }\n\n\n  render() {\n    console.info(\"Render this.state.appstate\", this.state.appstate);\n\n    // this.state.appstate.state = \"loaded\";\n\n    switch (this.state.appstate.state) {\n      case \"loaded\":\n        {\n          return this.renderCondoleancePage();\n        }\n      case \"unknowncode\":\n      case \"passwordRequired\": // the code was recognized but the condolence page is password protected\n      case \"passwordIncorrect\":\n        {\n          return this.renderPasswordPage();\n        }\n      default: // assuming state \"loading\"\n        {\n          return this.renderLoadingPage();\n        }\n    }\n  }\n\n\n  onSubmitLogin(evt: SubmitEvent) {\n    evt.preventDefault();\n\n    const form = evt.target! as HTMLFormElement;\n    this.condolenceCode = form.condolencecode?.value ?? this.condolenceCode;\n    backend.useCondolenceCode(this.condolenceCode, form.condolencepassword?.value ?? \"\");\n  }\n\n\n  renderPasswordPage() {\n    // const { SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n    // const subDialogs: ComponentChild[] = [<SimpleScreen />];\n\n    const needPassword = this.state.appstate.state === \"passwordRequired\" || this.state.appstate.state === \"passwordIncorrect\";\n\n    // console.info(\"ceremony\" in this.state.appstate);\n\n    return <>\n      {this.renderApplicationHeader()}\n\n      <ModalDialog\n        isOpen={true}\n        isModal={false}\n        class=\"cm-entercodeform cm-form\"\n      >\n\n        <form class=\"cm-entercodeform-body\"\n          action=\"\" method=\"POST\"\n          onSubmit={(evt) => this.onSubmitLogin(evt)}>\n          <div class=\"cm-form__itemlist\">\n\n            {this.state.appstate.state === \"unknowncode\"\n              ? <div>{getTid(\"ceremonymedia:webdesigns.site.js.condolence.msg-code-incoorrect\", this.state.appstate.code)}</div>\n              : null}\n\n            {this.state.appstate.state === \"passwordRequired\" || this.state.appstate.state === \"passwordIncorrect\" // \"ceremony\" in this.state.appstate && \"title\" in this.state.appstate.ceremony\n              ? <div class=\"cm-form__item\">\n                <h2 class=\"cm-entercodeform-ceremonytitle\">\n                  {getTid(\"ceremonymedia:webdesigns.site.js.condolence.condolence-page-for\")}\n                  <span>{this.state.appstate.ceremony.name}</span>\n                </h2>\n\n              </div>\n              : <div class=\"cm-form__item\">\n                <label for=\"cm-entercodeform-code\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.entercode\")}</label>\n                {/* onInput={e => setCode(e.currentTarget.value)} */}\n                <input id=\"cm-entercodeform-code\"\n                  name=\"condolencecode\"\n                  type=\"text\"\n                  value={this.condolenceCode}\n                  disabled={needPassword}\n                  required />\n              </div>\n            }\n\n            {needPassword\n              ? <div class=\"cm-form__item\">\n                <label for=\"cm-entercodeform-code\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.enterpassword\")}</label>\n                <input id=\"cm-entercodeform-code\"\n                  name=\"condolencepassword\"\n                  type=\"password\" value=\"\" required />\n                {this.state.appstate.state === \"passwordIncorrect\" ? <div class=\"cm-form__item__error\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-password-incorrect\")}</div> : null}\n              </div>\n              : null}\n          </div>\n\n          <div class=\"cm-buttonbar\">\n            <button type=\"submit\" class=\"wh-button-solid wh-button--default\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.login\")}</button>\n          </div>\n        </form>\n      </ModalDialog>\n\n    </>;\n  }\n\n  renderCondoleancePage() {\n\n    // Mostly added because TypeScript doesn't recognize this\n    // path is only used (through the switch statement) when the state is \"loaded\".\n    // (so it complains \"ceremony\" may not exist on the appstate)\n    if (this.state.appstate.state !== \"loaded\")\n      return;\n\n    const ceremony = this.state.appstate.ceremony;\n    const user = this.state.appstate.user;\n\n    // Get texts\n    const locationdata = getFrontendData(\"ceremonymedia:location\");\n\n    /*\n    console.group(\"renderCondolencePage\");\n    console.info(\"language\", backend.getLanguage());\n    console.info(\"ceremony\", ceremony);\n    console.info(\"locationdate\", locationdata);\n    console.info(\"user\", user);\n    console.info(\"predefinedImages\", this.state.appstate.predefinedImages);\n    console.groupEnd();\n    */\n\n    // const subDialogs = new Array<ComponentChild>;\n\n    const { SimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n    const subDialogs: ComponentChild[] = [<SimpleScreen />];\n\n    if (this.state.dialog === \"post\") {\n      subDialogs.push(<PostMessageDialog\n        ceremonyId={ceremony.id}\n        onResult={(result: { success: false } | { success: true; postId: number }) => this.onClosingPostDialog(result)} // FIXME: we would like to have a result returned so we know whether to reload posts\n        predefinedImages={this.state.appstate.predefinedImages}\n      ></PostMessageDialog>);\n    } else if (this.state.dialog === \"viewimage\") {\n      subDialogs.push(<ViewImageDialog\n        imageURL={this.imagedialog_imageurl}\n        onResult={() => this.onClosingViewImageDialog()} // FIXME: we would like to have a result returned so we know whether to reload posts\n      ></ViewImageDialog>);\n    }\n\n    const textualBirthdate = !ceremony.birthDate ? \"\" : new Date(ceremony.birthDate).toLocaleString('nl-nl', { day: \"numeric\", month: \"long\", year: \"numeric\" });\n    const textualPassingdate = !ceremony.passingDate ? \"\" : new Date(ceremony.passingDate).toLocaleString('nl-nl', { day: \"numeric\", month: \"long\", year: \"numeric\" });\n\n    const isDutch = backend.getLanguage() === \"nl\";\n    const texts = isDutch ? locationdata.texts_condolence_nl : locationdata.texts_condolence_en;\n\n    // console.log(\"Texts\", texts);\n    const infoText = ceremony.text !== \"\" ? ceremony.text : texts.text;\n\n    return <>\n      {this.renderApplicationHeader()}\n\n      {this.state.appstate.canManage\n        ? <div class=\"condolence__canmanagemessage\">\n          <span class=\"icon fas fa-user-tie\"></span>\n          {getTid(\"ceremonymedia:webdesigns.site.js.condolence.manager_message\", user?.firstName)}\n        </div>\n        : null}\n\n      {texts.intro ?\n        <div class=\"condolence__intro\"\n          dangerouslySetInnerHTML={{ __html: texts.intro }}>\n        </div>\n        : <div class=\"condolence__intro\">\n          <h1 class=\"heading1\">{isDutch ? \"Online condoleren\" : \"Online condoleance\"}</h1>\n        </div>\n      }\n\n      <div class=\"pageheader\">\n\n        {!ceremony.imageBanner\n          ? <div class=\"pageheader__bannerimage\"></div>\n          : <img class=\"pageheader__bannerimage\" src={ceremony.imageBanner} />}\n\n        {!ceremony.imagePhoto\n          ? <div class=\"pageheader__photo\"></div>\n          : <img class=\"pageheader__photo\" src={ceremony.imagePhoto} />}\n\n        <div class=\"pageheader__text\">\n          <h2 class=\"pageheader__title\">{ceremony.name}</h2>\n          <div class=\"pageheader__subtitle\">{textualBirthdate} - {textualPassingdate}</div>\n        </div>\n\n        {infoText ?\n          <div class=\"pageheader__information\"\n            dangerouslySetInnerHTML={{ __html: infoText }}>\n          </div>\n          : null\n        }\n      </div>\n\n      <div class=\"condolence__cta\">\n        <hr />\n\n        <div class=\"condolence__cta__button-and-text\">\n          <button class=\"condolence__additem wh-button-solid\"\n            onClick={evt => this.showPostMessageDialog()}\n            type=\"button\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.additem_button_label\")}</button>\n\n          {/*texts.cta_text ?\n            <div class=\"condolence__intro\"\n              dangerouslySetInnerHTML={{ __html: texts.cta_text }}>\n            </div> : null*/\n          }\n        </div>\n      </div>\n\n      {/* <PostMessageDialog ceremonyId={ceremony.id} onResult={this.onClosingPostDialog} /> */}\n\n      <div class=\"condolence__overview\">\n        {ceremony.posts.length === 0\n          ? <div class=\"condolence__no_messages\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.no-messages-posted\")}</div>\n          :\n          <div class=\"condolence__items\" ref={this.ref_itemslist}>\n            {this.renderItems(ceremony.posts)}\n          </div>\n        }\n      </div>\n\n      <div class=\"condolence__additem__wrapper\">\n        <button class=\"condolence__additem condolence__additem--sticky wh-button-solid\"\n          onClick={evt => this.showPostMessageDialog()}\n          type=\"button\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.additem_button_label\")}</button>\n      </div>\n\n      {subDialogs}\n    </>;\n  }\n\n  renderApplicationHeader() {\n    const buttons =\n      <>\n        <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => {\n          console.log(`click editlanguage`);\n          this.setState({ editLanguage: true });\n        }\n        }>\n          <span class=\"icon far fa-flag\" role=\"presentation\"></span>\n          <span class=\"button__label\">{this.props.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n        </button>\n        {this.state.editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: CMLanguage | null) => {\n          if (lang)\n            backend.setLanguage(lang);\n          this.setState(state => ({ editLanguage: false }));\n        }} /> : null}\n      </>;\n    return <LoginHeader buttons={buttons} />;\n  }\n\n  renderItems(items: CondolencePostData[]) {\n    // console.info(\"renderItems\", items);\n    return items.map(item => {\n      // if (item.attachmentType === \"candle\")\n      if (item.imageIsPredefined) {\n        return this.renderPredefinedCard(item);\n      } else\n        return this.renderMessageCard(item);\n    });\n    // console.log(\"renderCards\", this.props.moments);\n    // return this.props.items.map(moment => <CeremonyMediaMomentCard key={moment.id} parent={this} moment={moment} />);\n  }\n\n  renderMessageCard(post: CondolencePostData) {\n    const postDate = !post.postDate ? \"\" : new Date(post.postDate).toLocaleString('nl-nl', { day: \"numeric\", month: \"long\", year: \"numeric\" });\n\n    if (this.state.appstate.state !== \"loaded\")\n      return;\n\n    return <>\n      <article class=\"condolence__item condolence__item--custom\" data-id={post.id} data-author={post.author}>\n\n        {/* <div class=\"debug\">{post.id}</div> */}\n\n        {this.renderAdminButton()}\n\n        <div class=\"condolence__item__meta\">\n          <div class=\"condolence__item__when\">{postDate}</div>\n          <h2 class=\"condolence__item__author\">{post.author}</h2>\n        </div>\n\n        <hr />\n\n        <div class=\"condolence__item__message\">\n          {post.message.split('\\n').map(str => <>{str}<br /></>)}\n        </div>\n\n        {post.image ?\n          <img class=\"condolence__item__image\"\n            src={post.image}\n            data-largeimage={post.imageLarge}\n            onClick={evt => this.showLargeVersionOfImage(evt)}\n          />\n          : null\n        }\n\n        {post.video\n          ? <div class=\"condolence__item__video\">\n            <video src={post.video.link} controls />\n          </div>\n          : null\n        }\n\n      </article>\n    </>;\n  }\n\n  // ADDME: alt tag met afbeelding titel\n  renderPredefinedCard(post: CondolencePostData) {\n    // const postDate = !post.postDate ? \"\" : new Date(post.postDate).toLocaleString('nl-nl', {day: \"numeric\", month: \"long\", year: \"numeric\" });\n\n    if (this.state.appstate.state !== \"loaded\")\n      return;\n\n    return <>\n      <article class=\"condolence__item condolence__item--predefined\" data-id={post.id} data-author={post.author}>\n        {this.renderAdminButton()}\n\n        <img class=\"condolence__item__image\"\n          src={post.image}\n          data-largeimage={post.imageLarge}\n          onClick={evt => this.showLargeVersionOfImage(evt)}\n        />\n\n        <div class=\"condolence__item__meta\">\n          {/* <div class=\"condolence__item__when\">{postDate}</div> */}\n          <h2 class=\"condolence__item__author\">{post.author}</h2>\n        </div>\n\n        <div class=\"condolence__item__message\">\n          {post.message}\n        </div>\n\n      </article>\n    </>;\n  }\n\n  onClosingViewImageDialog() {\n    this.setState({ dialog: null });\n  }\n\n  renderAdminButton() {\n    if (this.state.appstate.state !== \"loaded\")\n      return;\n\n    return <>{\n      this.state.appstate.canManage // canManage exists if state === \"loaded\"\n        ? <div class=\"condolence__item__adminoptions\">\n          <button class=\"condolence__item__editbutton\"\n            onClick={(evt) => this.doShowPostManageOptions(evt)}\n            type=\"button\"><span class=\"icon\" role=\"presentation\"></span></button>\n          <div class=\"condolence__item__editpanel\" hidden>\n\n            <div class=\"condolence__item__editpanel__header\">\n              {getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-edit-panelheader\")}\n            </div>\n\n            <button class=\"condolence__item__hide cm-momenttypeselector__option\"\n              onClick={(evt) => this.doHidePost(evt)}\n              type=\"button\">\n              <span class=\"cm-momenttypeselector__option__type\">\n                <span class=\"icon far fa-minus\" role=\"presentation\"></span>\n                <span class=\"icon fas fa-trash-alt\" role=\"presentation\"></span>\n              </span>\n              <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-removepost-button\")}</span>\n            </button>\n\n            <button class=\"condolence__item__hide cm-momenttypeselector__option\"\n              onClick={(evt) => this.doAddPostToCeremony(evt)}\n              type=\"button\">\n              <span class=\"cm-momenttypeselector__option__type\">\n                <span class=\"icon far fa-plus\" role=\"presentation\"></span>\n                <span class=\"icon fas fa-images\" role=\"presentation\"></span>\n              </span>\n              <span class=\"cm-momenttypeselector__option__text\">{getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-addtoceremony-button\")}</span>\n            </button>\n\n          </div>\n        </div>\n        : null\n    }</>;\n  }\n\n  showLargeVersionOfImage(evt: MouseEvent) {\n    this.imagedialog_imageurl = (evt.target as HTMLElement).getAttribute(\"data-largeimage\")!;\n    this.setState({ dialog: \"viewimage\" });\n  }\n\n  showPostMessageDialog() {\n    this.setState({ dialog: \"post\" });\n  }\n\n  // onClosingPostDialog = () => {\n  onClosingPostDialog = (result: { success: false } | { success: true; postId: number }) => {\n    console.log(\"!!! PostMessageDialog returns\", result);\n\n    if (result.success) {\n      this.scrollToPostId = result.postId;\n      backend.reload();\n    }\n\n    this.setState({ dialog: null });\n  };\n\n  gotoNewPost(postId: number) {\n    console.info(`******* gotoNewPost #${postId}`);\n\n    const selector = `.condolence__item[data-id=\"${postId}\"]`;\n    const messageTile = document.querySelector(selector);\n\n    console.log(\"postContainer\", messageTile);\n\n    messageTile?.scrollIntoView({ behavior: \"smooth\" });\n    messageTile?.classList.add(\"condolence__item--justposted\");\n  }\n\n\n  doShowPostManageOptions(evt: MouseEvent) {\n    const itemnode = (evt.target as HTMLElement).closest(\".condolence__item\");\n    itemnode!.querySelector(\".condolence__item__editpanel\")?.toggleAttribute(\"hidden\");\n    // const postId = parseInt(itemnode!.dataset.id, 0);\n  }\n\n  doHideAllPostManageOptions() {\n    for (const panel of document.body.querySelectorAll(\".condolence__item__editpanel\")) {\n      panel.setAttribute(\"hidden\", \"\");\n    }\n  }\n\n\n  doCheckClick(evt: MouseEvent) {\n    //console.info(evt.type, evt.target);\n\n    const containers = document.body.querySelectorAll(\".condolence__item__adminoptions\");\n    for (const container of containers) {\n      // console.log(\"target in\", container.contains(evt.target), \"of\", container);\n      if (!container.contains(evt.target as HTMLElement)) {\n        const dropdown = container.querySelector(\".condolence__item__editpanel\");\n        dropdown?.setAttribute(\"hidden\", \"\");\n      }\n    }\n\n    // Click outside the dropdown so close it\n    // this.doHideAllPostManageOptions();\n  }\n\n  doCheckKeyPress(evt: KeyboardEvent) {\n    // console.info(evt.type, evt.code, evt);\n    if (evt.code === \"Escape\")\n      this.doHideAllPostManageOptions();\n  }\n\n\n\n  getPostDataForNode(node: HTMLElement) {\n    const itemnode = (node as HTMLElement).closest(\".condolence__item\") as HTMLElement;\n    const postId = itemnode.dataset.id ? parseInt(itemnode.dataset.id, 0) : 0;\n    const author = itemnode?.getAttribute(\"data-author\");\n\n    return {\n      node: itemnode,\n      postId: postId,\n      author: author\n    };\n  }\n\n  doHidePost(evt: MouseEvent) {\n    // The MouseEvent wants direct feedback, not a Promise from an async function.\n    this.__doHidePost(evt).then(() => { }, () => { });\n  }\n\n  async __doHidePost(evt: MouseEvent) {\n    // if (this.state.appstate.state !== \"loaded\")\n    // return;\n\n    const postData = this.getPostDataForNode(evt.target as HTMLElement);\n\n    console.info(\"doHistPost\", postData.postId);\n\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    // Request confirmation\n    let answer = await runSimpleScreen(\"question\",\n      getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-removepost-confirm\", postData.author), {\n      title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.warning\"),\n      buttons: [\"yes\", \"no\"]\n    });\n\n    this.doHideAllPostManageOptions();\n\n    if (answer !== \"yes\")\n      return;\n\n    const result = await apiClient.hideCondolencePost(postData.postId);\n\n    // Return feedback on whether the action was succesful\n    if (result.success) {\n\n      if (this.state.appstate.state !== \"loaded\") // to make TSX happy\n        return;\n\n      ////////////////////////////////////////////////////////////////////////////////\n      // No need to request the whole list of posts again,\n      // Now we got confirmation the past has been deleted, also delete it from our current list of posts\n      // and afterwards force an refresh of the itemslist in the DOM.\n      const posts = this.state.appstate.ceremony.posts;\n      console.log([...posts]);\n      const postIndex = posts.findIndex((post: CondolencePostData) => post.id === postData.postId);\n      if (postIndex === -1)\n        return; // should never happen\n\n      posts.splice(postIndex, 1); // remove this post from our list\n      this.setState({}); // refresh\n      ////////////////////////////////////////////////////////////////////////////////\n\n      answer = await runSimpleScreen(\"question\",\n        getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-removepost-done\", postData.author), {\n        title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.info\"),\n        buttons: [\"ok\"]\n      });\n    } else {\n      answer = await runSimpleScreen(\"question\",\n        getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-removepost-failed\", postData.author), {\n        title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.error\"),\n        buttons: [\"ok\"]\n      });\n    }\n  }\n\n  doAddPostToCeremony(evt: MouseEvent) {\n    // The MouseEvent wants direct feedback, not a Promise from an async function.\n    this.__doAddPostToCeremony(evt).then(() => { }, () => { });\n  }\n\n  async __doAddPostToCeremony(evt: MouseEvent) {\n    const postData = this.getPostDataForNode(evt.target as HTMLElement);\n\n    const { runSimpleScreen } = simpleScreenState(this, \"simpleScreen\");\n\n    // Request confirmation\n    let answer = await runSimpleScreen(\"question\",\n      getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-addposttoceremony-confirm\", postData.author), {\n      title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.warning\"),\n      buttons: [\"yes\", \"no\"]\n    });\n\n    this.doHideAllPostManageOptions();\n\n    if (answer !== \"yes\")\n      return;\n\n    const result = await apiClient.addCondolencePostToCeremony(postData.postId);\n\n    if (!result.success) {\n      answer = await runSimpleScreen(\"question\",\n        getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-addposttoceremony-failed\", postData.author), {\n        title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.error\"),\n        buttons: [\"ok\"]\n      });\n\n      return;\n    }\n\n    const channel = new BroadcastChannel(\"ceremonymedia\");\n    channel.postMessage({ type: \"moment-added\" });\n    channel.close();\n\n    answer = await runSimpleScreen(\"question\",\n      getTid(\"ceremonymedia:webdesigns.site.js.condolence.message-addposttoceremony-done\", postData.author), {\n      title: getTid(\"ceremonymedia:webdesigns.site.js.simplescreen.titles.info\"),\n      buttons: [\"ok\"]\n    });\n  }\n\n  renderLoadingPage() {\n    const [editLanguage, setEditLanguage] = useState(false);\n\n    const buttons =\n      <>\n        <button class=\"cm-toolbarbutton\" type=\"button\" onClick={() => setEditLanguage(true)\n        }>\n          <span class=\"icon far fa-flag\" role=\"presentation\"></span>\n          <span class=\"button__label\">{this.state.appstate.language !== \"en\" ? <><u>NL</u> | EN</> : <>NL | <u>EN</u></>}</span>\n        </button >\n      </>;\n\n    return (\n      <Fragment>\n        <LoginHeader buttons={buttons} />\n\n        <ModalDialog\n          isOpen={true}\n          isModal={false}\n          class=\"cm-entercodeform cm-form\">\n          <div class=\"cm-entercodeform-text\">\n            {getTid(\"ceremonymedia:webdesigns.site.js.condolence.loading\")}\n          </div>\n        </ModalDialog>\n        {editLanguage ? <ChooseLanguage language={backend.getLanguage()} onClose={(lang: CMLanguage | null) => {\n          if (lang)\n            backend.setLanguage(lang);\n          setEditLanguage(false);\n        }} /> : null}\n      </Fragment>\n    );\n  }\n\n}\n","/* @jsx h */\n/* @jsxFrag Fragment */\n\nimport \"preact/debug\";\n\nimport \"@webhare/dompack/reset.css\";\n\n// import \"@mod-system/js/wh/errorreporting\"; //log JS errors to notice log\nimport \"./forms/forms\";\nimport \"./settings/components.css\";\nimport \"./settings/form-buttons.scss\";\nimport \"./settings/form-components.css\";\nimport \"./rtd/rtd\";\n\nimport \"./frontend.scss\";\nimport \"./settings/moments.scss\";\n\nimport \"./components/dialogs\";\nimport \"./components/tabstrip.scss\";\nimport \"./settings/dialogs.scss\"; // NOTE: insert AFTER editor, because it contains overrides to the defaults\n\nimport \"../widgets/video\";\nimport { setupWRDAuth } from \"@webhare/frontend\";\nimport * as dompack from \"dompack\";\nimport { EditorAppRoot } from \"../pages/editor/editor\";\nimport { h, render } from \"preact\";\nimport { CondolenceAppRoot } from \"../pages/condolence/condolence\";\nimport { applyCeremonyLocation } from \"./settings/ceremony-location\";\n\n\ntype condolencePageTexts = {\n  intro: string;     // Text at the top of the page (above the banner with photo)\n  text: string;      // Text about the ceremony and/or person\n  cta_text: string;  // Text below the \"Post a message\" button (currenty not used)\n  termslink: string; // Link to terms to agree to when posting on the condoleance page\n};\n\nexport type CeremonyTexts = {\n  info_organizer: string;\n  info_collaborator: string;\n  welcome_deadlinepassed: string;\n  welcome_cantedit_markedcompleted: string;\n};\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"ceremonymedia:location\": {\n      locationGuid: string;\n      locationTitle: string;\n      organizationTitle: string;\n      organizationLogo: string;\n      colorTheme: string;\n      colorThemeDark: string;\n      colorThemeSecondary: string;\n      colorThemeSecondaryDarker: string;\n      filestackApiKey: string;\n\n      texts_ceremony_en: CeremonyTexts;\n      texts_ceremony_nl: CeremonyTexts;\n      texts_condolence_nl: condolencePageTexts;\n      texts_condolence_en: condolencePageTexts;\n      documentation_nl_link: string;\n      documentation_en_link: string;\n    };\n  }\n}\n\nsetupWRDAuth();\n\ndompack.onDomReady(function () {\n  if (\"GestureEvent\" in window) // detect Safari - we need to use flex instead of grid on medialisteditor <dialog>\n    document.documentElement.classList.add(\"safari\");\n});\n\n\nfunction setupCeremonyEditor(root: HTMLElement) {\n  applyCeremonyLocation();\n\n  if (location.pathname.endsWith(\"/condolence\")) {\n    document.documentElement.classList.add(\"page--condolence\");\n    render(<CondolenceAppRoot language=\"nl\" />, root);\n  } else\n    render(<EditorAppRoot />, root);\n}\n\ndompack.register(\"#ceremonyeditor\", setupCeremonyEditor);\n","import \"@webhare/frontend/src/init\";import \"/opt/wh/whtree/modules/publisher/js/internal/polyfills/all\";\nimport \"/opt/whdata/installedmodules/ceremonymedia.20260915T150733.699Z/webdesigns/ceremonysite/frontend/frontend\";const aps = globalThis.whAssetPacks ||= {}; aps[\"ceremonymedia:ceremonysite\"]=\"2026-09-15T15:08:00.737Z\";"],"mappings":"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","names":["formatForConsoleLogs","debugFlags","key","runSettingsCallbacks","cb","settingschangedcallbacks","initEnv","setDtapStage","setBackendBase","dtapStage","isLive","backendBase","dtapstage","islive","globalDebugFlags","localDebugFlags","debugFlagsOverridesCB","DebugFlagsProxyHandler","init_envbackend","__esmMin","target","p","record","keys","newValue","toModify","value","submitForm","action","values","method","form","item","input","navigateTo","navigation","init_navigation","__esmMin","getWHType","obj","isCrossRealm","value","isMoney","isTemporalInstant","isTemporalPlainDateTime","isTemporalPlainDate","isTemporalZonedDateTime","isDate","isBlob","isFile","isPromise","e","stdTypeOf","t","init_quacks","__esmMin","parseMS","ms","parseDuration","duration","matches","addDuration","startingdate","isTemporalInstant","direction","date","modifydays","timeoffset","convertFlexibleInstantToDate","input","convertWaitPeriodToDate","wait","options","isDate","isValidDate","year","month","day","minYear","isleapyear","isValidTime","hour","minute","second","msec","init_datetime","__esmMin","init_quacks","sleep","duration","options","until","convertWaitPeriodToDate","resolve","timeoutid","createDeferred","wrapSerialized","fn","Coalescer","queue","args","res","init_promises","__esmMin","init_datetime","startpos","currentpos","result","e","stripUnneededDecimals","num","decimals","isneg","toText","amount","decimalpoint","mindecimals","isnegative","astext","splitValue","money","split","sign","joinPrice","parts","adjustDecimals","requiredecimals","toadd","multiplier","idx","__add","lhs","rhs","add","amount1","amount2","subtract","tosubtract","__multiply","multiply","cmp","diff","getPercentageOfAmount","perc","result","normalize","__roundIntegerToMultiple","value","roundunit","mode","roundToMultiple","unit","split_value","split_unit","min","amounts","val","max","getNonNegativePowerOf10","exp","retval","running_exp","divide","divisor","mul10exp","mulfactor","test","relation","compareresult","init_finmath","__esmMin","stripUnneededDecimals","num","decimals","isneg","splitValue","money","split","sign","toText","amount","decimalpoint","mindecimals","thousandpoint","isnegative","astext","beforepoint","afterpoint","Money","init_money","__esmMin","init_finmath","init_quacks","_Money","value","intvalue","param","isMoney","left","right","sum","item","add","subtract","roundto","mode","roundToMultiple","lhs","rhs","cmp","relation","test","multiply","percentage","getPercentageOfAmount","numerator","divisor","divide","amounts","min","max","format","nameToCamelCase","name","c","nameToSnakeCase","init_types","__esmMin","init_money","init_quacks","escapeRegExp","text","options","mask","isHTMLUnrepresentableChar","curch","encodeEntities","str","html","s","char","decodeEntities","_","dec","encodeString","encoding","decodeString","stringify","arg","usereplacer","key","value","origvalue","type","stdTypeOf","lhs","rhs","result","parseTyped","input","Money","isValidEmail","email","init_strings","__esmMin","init_quacks","init_money","generateRandomId","encoding","bytes","u8array","x","init_platformbased","__esmMin","emplace","map","key","handler","current","setvalue","pick","value","keys","elt","ret","omit","val","init_collections","__esmMin","init_utils","__esmMin","unlock","LocalMutex","LocalLock","init_localmutex","__esmMin","defer","mutex","throwError","err","init_std","__esmMin","init_promises","init_types","init_strings","init_platformbased","init_collections","init_money","init_datetime","init_quacks","init_utils","init_localmutex","init_fetchdebug","__esmMin","init_envbackend","init_std","init_env","__esmMin","init_envbackend","init_navigation","init_fetchdebug","qS","node_or_selector","selector","qR","matches","qSA","isFormControl","field","isHTMLElement","isElement","node","getRelativeBounds","relativeto","nodecoords","relcoords","parseLanguageTag","languageTag","match","getLang","tag","init_tree","__esmMin","getGetTidHooks","gotHooks","hookFactory","init_hooks","__esmMin","internal_exports","__export","getHTMLTid","getHTMLTidForLanguage","getTIDListForLanguage","getTid","getTidForLanguage","getTidLanguage","registerTexts","setTidLanguage","ensureHooks","hooks","getGetTidHooks","lang","browserSetLanguage","defaultLanguage","newLanguage","getLanguageFile","module","langCode","langkey","compiled","langFileCache","loader","e","dtapStage","debugFlags","texts","toHTMLNode","tag","props","node","wrapInFragment","children","fragment","getTidInternal","tid","params","options","decodeString","nodes","calcTIDForLanguage","p","p1","p2","p3","p4","encodeString","langcode","gid","getCanonicalTid","modsep","lookup","result","key","fallback","cannotFind","rawParams","rich","render","getLanguageDatetimeStrings","debugtid","match","fallbackMatch","executeCompiledTidText","renderString","tok","part","_","text","parts","get_param","sub","link","flattenRecursiveLanguageTexts","pathsofar","name","value","tids","compiledFile","init_internal","__esmMin","init_std","init_hooks","init_env","init_tree","getLang","require_smartcrop","__commonJSMin","exports","module","SmartCrop","options","extend","image","callback","c","cctx","scale","prescale","min","max","smartCrop","prescaledCanvas","ctx","result","i","i_len","crop","s","w","h","o","id","od","y","x","p","lightness","sample","cie","skin","sat","saturation","crops","width","height","minDimension","cropWidth","cropHeight","output","score","downSample","invDownSample","outputHeightDownSample","outputWidthDownSample","outputWidth","importance","detail","px","abs","py","dx","dy","d","sqrt","thirds","r","g","b","mag","rd","gd","bd","canvas","input","scoreCanvas","ceil","scoreCtx","scoreOutput","topScore","topCrop","arg","name","maximum","minumum","l","require_es5","__commonJSMin","exports","module","e","t","n","i","r","s","a","o","u","d","c","f","l","h","require_extends","__commonJSMin","exports","module","_extends","target","i","source","key","require_asyncToGenerator","__commonJSMin","exports","module","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","_asyncToGenerator","fn","self","args","err","require_typeof","__commonJSMin","exports","module","_typeof","o","require_regeneratorRuntime","__commonJSMin","exports","module","_typeof","_regeneratorRuntime","o","t","e","r","i","a","c","u","define","wrap","n","Generator","Context","makeInvokeMethod","tryCatch","h","l","f","s","GeneratorFunction","GeneratorFunctionPrototype","p","d","v","values","g","defineIteratorMethods","AsyncIterator","invoke","callInvokeWithMethodAndArg","maybeInvokeDelegate","pushTryEntry","resetTryEntry","next","handle","require_regenerator","__commonJSMin","exports","module","runtime","require_setPrototypeOf","__commonJSMin","exports","module","_setPrototypeOf","o","p","require_inheritsLoose","__commonJSMin","exports","module","setPrototypeOf","_inheritsLoose","subClass","superClass","require_lib","__commonJSMin","exports","module","finallyConstructor","callback","constructor","value","reason","allSettled","arr","P","resolve","reject","args","remaining","res","i","val","then","e","AggregateError","errors","message","any","rejectionReasons","error","ex","setTimeoutFunc","isArray","x","noop","bind","fn","thisArg","Promise","doResolve","handle","self","deferred","cb","ret","newValue","finale","len","Handler","onFulfilled","onRejected","promise","done","prom","err","require_events","__commonJSMin","exports","module","R","ReflectApply","target","receiver","args","ReflectOwnKeys","ProcessEmitWarning","warning","NumberIsNaN","value","EventEmitter","once","defaultMaxListeners","checkListener","listener","arg","n","_getMaxListeners","that","type","i","doError","events","er","err","handler","len","listeners","arrayClone","_addListener","prepend","m","existing","w","onceWrapper","_onceWrap","state","wrapped","list","position","originalListener","spliceOne","keys","key","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","arr","copy","index","ret","name","resolve","reject","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","require_listCacheClear","__commonJSMin","exports","module","listCacheClear","require_eq","__commonJSMin","exports","module","eq","value","other","require_assocIndexOf","__commonJSMin","exports","module","eq","assocIndexOf","array","key","length","require_listCacheDelete","__commonJSMin","exports","module","assocIndexOf","arrayProto","splice","listCacheDelete","key","data","index","lastIndex","require_listCacheGet","__commonJSMin","exports","module","assocIndexOf","listCacheGet","key","data","index","require_listCacheHas","__commonJSMin","exports","module","assocIndexOf","listCacheHas","key","require_listCacheSet","__commonJSMin","exports","module","assocIndexOf","listCacheSet","key","value","data","index","require_ListCache","__commonJSMin","exports","module","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","index","length","entry","require_stackClear","__commonJSMin","exports","module","ListCache","stackClear","require_stackDelete","__commonJSMin","exports","module","stackDelete","key","data","result","require_stackGet","__commonJSMin","exports","module","stackGet","key","require_stackHas","__commonJSMin","exports","module","stackHas","key","require_freeGlobal","__commonJSMin","exports","module","freeGlobal","require_root","__commonJSMin","exports","module","freeGlobal","freeSelf","root","require_Symbol","__commonJSMin","exports","module","root","Symbol","require_getRawTag","__commonJSMin","exports","module","Symbol","objectProto","hasOwnProperty","nativeObjectToString","symToStringTag","getRawTag","value","isOwn","tag","unmasked","result","require_objectToString","__commonJSMin","exports","module","objectProto","nativeObjectToString","objectToString","value","require_baseGetTag","__commonJSMin","exports","module","Symbol","getRawTag","objectToString","nullTag","undefinedTag","symToStringTag","baseGetTag","value","require_isObject","__commonJSMin","exports","module","isObject","value","type","require_isFunction","__commonJSMin","exports","module","baseGetTag","isObject","asyncTag","funcTag","genTag","proxyTag","isFunction","value","tag","require_coreJsData","__commonJSMin","exports","module","root","coreJsData","require_isMasked","__commonJSMin","exports","module","coreJsData","maskSrcKey","uid","isMasked","func","require_toSource","__commonJSMin","exports","module","funcProto","funcToString","toSource","func","require_baseIsNative","__commonJSMin","exports","module","isFunction","isMasked","isObject","toSource","reRegExpChar","reIsHostCtor","funcProto","objectProto","funcToString","hasOwnProperty","reIsNative","baseIsNative","value","pattern","require_getValue","__commonJSMin","exports","module","getValue","object","key","require_getNative","__commonJSMin","exports","module","baseIsNative","getValue","getNative","object","key","value","require_Map","__commonJSMin","exports","module","getNative","root","Map","require_nativeCreate","__commonJSMin","exports","module","getNative","nativeCreate","require_hashClear","__commonJSMin","exports","module","nativeCreate","hashClear","require_hashDelete","__commonJSMin","exports","module","hashDelete","key","result","require_hashGet","__commonJSMin","exports","module","nativeCreate","HASH_UNDEFINED","objectProto","hasOwnProperty","hashGet","key","data","result","require_hashHas","__commonJSMin","exports","module","nativeCreate","objectProto","hasOwnProperty","hashHas","key","data","require_hashSet","__commonJSMin","exports","module","nativeCreate","HASH_UNDEFINED","hashSet","key","value","data","require_Hash","__commonJSMin","exports","module","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","entries","index","length","entry","require_mapCacheClear","__commonJSMin","exports","module","Hash","ListCache","Map","mapCacheClear","require_isKeyable","__commonJSMin","exports","module","isKeyable","value","type","require_getMapData","__commonJSMin","exports","module","isKeyable","getMapData","map","key","data","require_mapCacheDelete","__commonJSMin","exports","module","getMapData","mapCacheDelete","key","result","require_mapCacheGet","__commonJSMin","exports","module","getMapData","mapCacheGet","key","require_mapCacheHas","__commonJSMin","exports","module","getMapData","mapCacheHas","key","require_mapCacheSet","__commonJSMin","exports","module","getMapData","mapCacheSet","key","value","data","size","require_MapCache","__commonJSMin","exports","module","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","entries","index","length","entry","require_stackSet","__commonJSMin","exports","module","ListCache","Map","MapCache","LARGE_ARRAY_SIZE","stackSet","key","value","data","pairs","require_Stack","__commonJSMin","exports","module","ListCache","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","entries","data","require_defineProperty","__commonJSMin","exports","module","getNative","defineProperty","func","require_baseAssignValue","__commonJSMin","exports","module","defineProperty","baseAssignValue","object","key","value","require_assignMergeValue","__commonJSMin","exports","module","baseAssignValue","eq","assignMergeValue","object","key","value","require_createBaseFor","__commonJSMin","exports","module","createBaseFor","fromRight","object","iteratee","keysFunc","index","iterable","props","length","key","require_baseFor","__commonJSMin","exports","module","createBaseFor","baseFor","require_cloneBuffer","__commonJSMin","exports","module","root","freeExports","freeModule","moduleExports","Buffer","allocUnsafe","cloneBuffer","buffer","isDeep","length","result","require_Uint8Array","__commonJSMin","exports","module","root","Uint8Array","require_cloneArrayBuffer","__commonJSMin","exports","module","Uint8Array","cloneArrayBuffer","arrayBuffer","result","require_cloneTypedArray","__commonJSMin","exports","module","cloneArrayBuffer","cloneTypedArray","typedArray","isDeep","buffer","require_copyArray","__commonJSMin","exports","module","copyArray","source","array","index","length","require_baseCreate","__commonJSMin","exports","module","isObject","objectCreate","baseCreate","object","proto","result","require_overArg","__commonJSMin","exports","module","overArg","func","transform","arg","require_getPrototype","__commonJSMin","exports","module","overArg","getPrototype","require_isPrototype","__commonJSMin","exports","module","objectProto","isPrototype","value","Ctor","proto","require_initCloneObject","__commonJSMin","exports","module","baseCreate","getPrototype","isPrototype","initCloneObject","object","require_isObjectLike","__commonJSMin","exports","module","isObjectLike","value","require_baseIsArguments","__commonJSMin","exports","module","baseGetTag","isObjectLike","argsTag","baseIsArguments","value","require_isArguments","__commonJSMin","exports","module","baseIsArguments","isObjectLike","objectProto","hasOwnProperty","propertyIsEnumerable","isArguments","value","require_isArray","__commonJSMin","exports","module","isArray","require_isLength","__commonJSMin","exports","module","MAX_SAFE_INTEGER","isLength","value","require_isArrayLike","__commonJSMin","exports","module","isFunction","isLength","isArrayLike","value","require_isArrayLikeObject","__commonJSMin","exports","module","isArrayLike","isObjectLike","isArrayLikeObject","value","require_stubFalse","__commonJSMin","exports","module","stubFalse","require_isBuffer","__commonJSMin","exports","module","root","stubFalse","freeExports","freeModule","moduleExports","Buffer","nativeIsBuffer","isBuffer","require_isPlainObject","__commonJSMin","exports","module","baseGetTag","getPrototype","isObjectLike","objectTag","funcProto","objectProto","funcToString","hasOwnProperty","objectCtorString","isPlainObject","value","proto","Ctor","require_baseIsTypedArray","__commonJSMin","exports","module","baseGetTag","isLength","isObjectLike","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","typedArrayTags","baseIsTypedArray","value","require_baseUnary","__commonJSMin","exports","module","baseUnary","func","value","require_nodeUtil","__commonJSMin","exports","module","freeGlobal","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","types","require_isTypedArray","__commonJSMin","exports","module","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","isTypedArray","require_safeGet","__commonJSMin","exports","module","safeGet","object","key","require_assignValue","__commonJSMin","exports","module","baseAssignValue","eq","objectProto","hasOwnProperty","assignValue","object","key","value","objValue","require_copyObject","__commonJSMin","exports","module","assignValue","baseAssignValue","copyObject","source","props","object","customizer","isNew","index","length","key","newValue","require_baseTimes","__commonJSMin","exports","module","baseTimes","n","iteratee","index","result","require_isIndex","__commonJSMin","exports","module","MAX_SAFE_INTEGER","reIsUint","isIndex","value","length","type","require_arrayLikeKeys","__commonJSMin","exports","module","baseTimes","isArguments","isArray","isBuffer","isIndex","isTypedArray","objectProto","hasOwnProperty","arrayLikeKeys","value","inherited","isArr","isArg","isBuff","isType","skipIndexes","result","length","key","require_nativeKeysIn","__commonJSMin","exports","module","nativeKeysIn","object","result","key","require_baseKeysIn","__commonJSMin","exports","module","isObject","isPrototype","nativeKeysIn","objectProto","hasOwnProperty","baseKeysIn","object","isProto","result","key","require_keysIn","__commonJSMin","exports","module","arrayLikeKeys","baseKeysIn","isArrayLike","keysIn","object","require_toPlainObject","__commonJSMin","exports","module","copyObject","keysIn","toPlainObject","value","require_baseMergeDeep","__commonJSMin","exports","module","assignMergeValue","cloneBuffer","cloneTypedArray","copyArray","initCloneObject","isArguments","isArray","isArrayLikeObject","isBuffer","isFunction","isObject","isPlainObject","isTypedArray","safeGet","toPlainObject","baseMergeDeep","object","source","key","srcIndex","mergeFunc","customizer","stack","objValue","srcValue","stacked","newValue","isCommon","isArr","isBuff","isTyped","require_baseMerge","__commonJSMin","exports","module","Stack","assignMergeValue","baseFor","baseMergeDeep","isObject","keysIn","safeGet","baseMerge","object","source","srcIndex","customizer","stack","srcValue","key","newValue","require_identity","__commonJSMin","exports","module","identity","value","require_apply","__commonJSMin","exports","module","apply","func","thisArg","args","require_overRest","__commonJSMin","exports","module","apply","nativeMax","overRest","func","start","transform","args","index","length","array","otherArgs","require_constant","__commonJSMin","exports","module","constant","value","require_baseSetToString","__commonJSMin","exports","module","constant","defineProperty","identity","baseSetToString","func","string","require_shortOut","__commonJSMin","exports","module","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","func","count","lastCalled","stamp","remaining","require_setToString","__commonJSMin","exports","module","baseSetToString","shortOut","setToString","require_baseRest","__commonJSMin","exports","module","identity","overRest","setToString","baseRest","func","start","require_isIterateeCall","__commonJSMin","exports","module","eq","isArrayLike","isIndex","isObject","isIterateeCall","value","index","object","type","require_createAssigner","__commonJSMin","exports","module","baseRest","isIterateeCall","createAssigner","assigner","object","sources","index","length","customizer","guard","source","require_mergeWith","__commonJSMin","exports","module","baseMerge","createAssigner","mergeWith","object","source","srcIndex","customizer","require_getPrototypeOf","__commonJSMin","exports","module","_getPrototypeOf","o","require_isNativeFunction","__commonJSMin","exports","module","_isNativeFunction","fn","require_isNativeReflectConstruct","__commonJSMin","exports","module","_isNativeReflectConstruct","require_construct","__commonJSMin","exports","module","setPrototypeOf","isNativeReflectConstruct","_construct","o","p","require_wrapNativeSuper","__commonJSMin","exports","module","getPrototypeOf","setPrototypeOf","isNativeFunction","construct","_wrapNativeSuper","Class","_cache","Wrapper","require_toPrimitive","__commonJSMin","exports","module","_typeof","toPrimitive","r","e","i","require_toPropertyKey","__commonJSMin","exports","module","_typeof","toPrimitive","toPropertyKey","i","require_createClass","__commonJSMin","exports","module","toPropertyKey","_defineProperties","target","props","i","descriptor","_createClass","Constructor","protoProps","staticProps","require_dist","__commonJSMin","exports","module","e","t","n","r","i","o","a","s","u","c","d","l","f","h","p","E","g","m","v","y","b","S","T","_","C","w","k","I","Sn","yn","vn","En","gn","mn","P","A","D","L","M","R","x","O","N","U","F","V","W","K","B","G","H","j","z","q","Q","Y","Z","J","X","$","ee","te","ne","re","ie","oe","ae","se","ue","ce","de","le","fe","he","pe","ve","me","ge","ye","Ee","Se","be","Te","_e","Ce","we","ke","Ie","Pe","Ae","De","Le","Me","Re","xe","Oe","Ne","Ue","Fe","Ve","Be","Ge","He","We","Ke","je","ze","qe","Qe","Ye","Ze","Je","Xe","$e","et","tt","nt","rt","it","ot","at","st","ut","ct","lt","ft","dt","ht","pt","vt","mt","gt","yt","Et","St","bt","Tt","_t","Ct","wt","kt","It","Pt","At","Dt","Lt","Mt","Rt","xt","Ot","Nt","Ut","Ft","Vt","Gt","Bt","Ht","Wt","Kt","jt","zt","qt","Qt","Yt","Zt","Jt","Xt","$t","en","tn","nn","an","on","rn","sn","un","cn","dn","ln","fn","hn","pn","init_envbackend","getBrowserDebugFlags","varname","flags","urldebugvar","debugcookie","debugcookievalue","flag","sessionDebug","config","siteroot","dtapStage","whconfigel","initEnv","flag","getBrowserDebugFlags","debugFlags","frontendConfig","getFrontendData","dataObject","allowMissing","retval","resolve","reject","_resolve","_reject","items","callbackfn","retval","idx","item","key","list","IteratorPrototype","ArrayIteratorPrototype","OriginalIteratorPrototype","callback","it","value","next_value","real_value","max_count","values","limit","remaining","index","mapper","mapped","reducer","initial_value","acc","count","string","final","first","iterables","others","it_array","e","finished","partition1","partition2","i","max","min","isObject","t","GetIteratorFlattenable","obj","method","iterator","Iterator","WrappedIterator","#iterator","args","returnMethod","Iterator_from","init_env","CustomEvent","dispatchDomEvent","element","eventtype","options","createtype","evt","dispatchCustomEvent","node","event","params","prop","evt","CustomEvent","defaultaction","changeValue","element","newvalue","asString","dispatchDomEvent","keydata","initKeyMapping","normalizeKeyboardEventData","key","stop","addDocEventListener","type","listener","options","locallocks","modallocked","uiwatcher","installedanticancelhandler","currentbusymodaldialog","currentbusymodaluserdialog","busymodalcontent","mylockmgr","getLockmgr","getParentLockManager","LockManager","anyModalLocks","l","scheduleCheckUIFree","checkUIFree","toggleBusyModal","lockmgr","isDialogElement","el","checkCancelEvent","evt","show","dispatchCustomEvent","dialog","toembed","lock","pos","debugFlags","BusyLock","options","lockmgr","getLockmgr","locallocks","modallocked","toggleBusyModal","debugFlags","lockpos","scheduleCheckUIFree","flagUIBusy","options","BusyLock","getParentLockManager","debugFlags","locallocks","l","lockmgr","getLockmgr","locallockmgr","LockManager","lock","mylockmgr","init_tree","init_tree","IS_NON_DIMENSIONAL","generateInsertList","nodes","frag","node","contains","ancestor","child","testNode","after","node","nodes","generateInsertList","append","node","nodes","generateInsertList","toggleClass","classname","settoggle","isDomReady","onDomReady","callback","getJSONAttribute","node","attributename","e","setStyles","node","value","key","propvalue","IS_NON_DIMENSIONAL","flattenArray","list","acc","elt","setClassName","node","value","str","key","idx","MATCH_UPCASE","toDashed","value","MATCH_UPCASE","attrHasBooleanValue","propname","createElement","elementname","attributes","toattrs","node","attrname","value","eventname","toDashed","setClassName","setStyles","append","child","create","children","el","jsxcreate","element","childNodes","parts","flattenArray","elt","components","map","isNodeCompletelyInDom","node","processRegistration","item","reg","domready","list","applyRegistration","startnode","isDomReady","items","e","focus","options","dispatchCustomEvent","register","selector","handler","options","newreg","components","isDomReady","onDomReady","registerMissed","applyRegistration","startnode","item","buildCookieHeader","name","value","options","header","date","init_std","setCookie","key","value","options","buildCookieHeader","getCookie","escapeRegExp","deleteCookie","parseUserAgent","ua","UA","platform","name","version","device","browser","parseUserAgent","getBrowser","submitselector","config","forwardPublisherNavigation","event","isHTMLElement","navaction","desturl","origin","configureForCMS","e","MODE_HYDRATE","slice","options","vnodeId","isValidElement","rerenderQueue","prevDebounce","defer","depthSort","eventClock","eventProxy","eventProxyCapture","i","EMPTY_OBJ","EMPTY_ARR","IS_NON_DIMENSIONAL","isArray","Array","assign","obj","props","removeNode","node","parentNode","removeChild","createElement","type","children","key","ref","normalizedProps","arguments","length","call","defaultProps","createVNode","original","vnode","__k","__","__b","__e","__d","__c","constructor","__v","__i","__u","createRef","current","Fragment","BaseComponent","context","this","getDomSibling","childIndex","sibling","updateParentDomPointers","child","base","enqueueRender","c","push","process","debounceRendering","renderQueueLength","component","newVNode","oldVNode","oldDom","commitQueue","refQueue","sort","shift","diff","__P","namespaceURI","commitRoot","diffChildren","parentDom","renderResult","newParentVNode","oldParentVNode","globalContext","namespace","excessDomChildren","isHydrating","childVNode","newDom","firstChildDom","oldChildren","newChildrenLength","constructNewChildrenArray","applyRef","isConnected","insert","nextSibling","skewedIndex","matchingIndex","oldChildrenLength","remainingOldChildren","skew","String","findMatchingIndex","unmount","parentVNode","insertBefore","nodeType","findMatchingIndex","childVNode","oldChildren","skewedIndex","remainingOldChildren","key","type","x","y","oldVNode","__u","length","setStyle","style","value","setProperty","IS_NON_DIMENSIONAL","test","dom","name","oldValue","namespace","useCapture","o","cssText","replace","toLowerCase","slice","l","_attached","eventClock","addEventListener","eventProxyCapture","eventProxy","removeEventListener","e","removeAttribute","setAttribute","createEventProxy","this","eventHandler","_dispatched","options","event","diff","parentDom","newVNode","globalContext","excessDomChildren","commitQueue","oldDom","isHydrating","refQueue","tmp","c","isNew","oldProps","oldState","snapshot","clearProcessingException","newProps","provider","componentContext","i","renderHook","count","renderResult","newType","constructor","__e","__b","outer","props","contextType","__c","__","__E","prototype","render","BaseComponent","doRender","sub","state","context","__n","__h","_sb","__s","getDerivedStateFromProps","assign","__v","componentWillMount","componentDidMount","push","componentWillReceiveProps","shouldComponentUpdate","__d","__k","forEach","vnode","componentWillUpdate","componentDidUpdate","__P","__r","getChildContext","getSnapshotBeforeUpdate","diffChildren","isArray","Fragment","children","base","MODE_HYDRATE","indexOf","diffElementNodes","diffed","commitRoot","root","applyRef","some","cb","call","newHtml","oldHtml","newChildren","inputValue","checked","nodeType","localName","document","createTextNode","createElementNS","is","data","childNodes","EMPTY_OBJ","attributes","__html","innerHTML","getDomSibling","removeNode","ref","current","unmount","parentVNode","skipRemove","r","componentWillUnmount","replaceNode","createElement","namespaceURI","firstChild","slice","EMPTY_ARR","options","__e","error","vnode","oldVNode","errorInfo","component","ctor","handled","__","__c","constructor","getDerivedStateFromError","setState","__d","componentDidCatch","__E","e","vnodeId","isValidElement","undefined","BaseComponent","prototype","update","callback","s","this","__s","state","assign","props","__v","_sb","push","enqueueRender","forceUpdate","__h","render","Fragment","rerenderQueue","defer","Promise","then","bind","resolve","setTimeout","depthSort","a","b","__b","process","__r","eventClock","eventProxy","createEventProxy","eventProxyCapture","i","window","__PREACT_DEVTOOLS__","attachPreact","options","Fragment","Component","loggedTypeFailures","getDisplayName","vnode","type","Fragment","displayName","name","renderStack","ownerStack","getCurrentVNode","length","showJsxSourcePluginWarning","isPossibleOwner","getOwnerStack","stack","next","__o","push","reduce","acc","owner","source","__source","fileName","lineNumber","console","warn","isWeakMapSupported","WeakMap","getDomChildren","domChildren","__k","forEach","child","apply","getClosestDomNodeParentName","parent","__","__e","parentNode","localName","setState","Component","prototype","isTableElement","update","callback","this","state","call","ILLEGAL_PARAGRAPH_CHILD_ELEMENTS","forceUpdate","serializeVNode","props","attrs","prop","hasOwnProperty","value","Object","toString","JSON","stringify","children","__v","setupComponentStack","oldDiff","options","__b","oldDiffed","diffed","oldRoot","oldVNode","oldRender","__r","pop","hooksAllowed","oldBeforeDiff","oldVnode","oldCatchError","oldHook","__h","warnedComponents","useEffect","useLayoutEffect","lazyPropTypes","deprecations","error","errorInfo","__c","then","promise","Error","componentStack","setTimeout","e","isValid","nodeType","componentName","Array","isArray","ref","key","propTypes","has","m","lazyVNode","set","values","__f","obj","i","checkPropTypes","typeSpecs","location","getStack","keys","typeSpecName","message","loggedTypeFailures","currentComponent","renderCount","nextComponent","comp","index","property","get","indexOf","deprecatedAttributes","nodeName","attributes","deprecatedProto","create","newProps","v","__self","__proto__","join","domParentName","log","illegalDomChildrenTypes","filter","childType","test","__H","hooks","hook","j","initDebug","formatters","updaters","mergeNode","node","set","data","parts","isNodeFunc","func","exprpath","callparts","funcrest","value","exprpathparts","i","prop","run","mergenode","filter","nodes","sets","init_env","init_std","init_env","debugflags","debugFlags","getISOLocalDate","date","getActiveElement","doc","getToplevelWindow","toplevelwindow","asIframe","node","getCurrentlyFocusedElement","limitdoc","focused","frame","canFocusTo","ignoreInertAttribute","getFocusableComponents","startnode","options","focusable","currentnode","currentstyle","iframe","subnodes","init_std","init_env","rfSymbol","init_internal","init_std","fixupConditionRecursive","node","condition","mapping","anychanges","subcondition","newName","ArrayField","handler","items","name","throwError","qS","event","addDocEventListener","rownode","qSA","form","getFormHandler","newrow","addedrow","registerMissed","setup","stop","delNode","row","rowBaseName","rowFields","getFormElementCandidates","_","RecordFieldHandler","rows","rowval","valuePromises","n","rowPromises","field","values","rowValue","value","idx","rowField","firstnode","valueRows","newvalue","fieldnode","rowid","nodeArray","fieldname","getFieldName","cellname","subname","setFieldName","labelnodes","labelnode","type","conditionnode","parseCondition","minRows","maxRows","numRows","getTid","init_std","unmapFieldName","camelCaseName","nameToSnakeCase","mapFieldName","htmlName","nameToCamelCase","mapValue","type","invalue","unmapValue","fieldDescr","isDate","HTMLFormFieldHandler","form","field","selectedrow","newvalue","setvalue","RadioFormFieldHandler","name","rnodes","group","node","_","myname","CheckboxGroupHandler","cboxes","throwError","toset","missing","cbox","RegisteredFieldHandler","ArrayFieldHandler","items","rfSymbol","ArrayField","getFieldName","FormFieldMap","fieldName","nodes","subpos","groups","fullName","arraygroup","AddressFieldHandler","RecordFieldHandler","options","mapName","match","data","ignoreUnknownFields","key","value","baseName","retval","val","prettyName","omit","FieldMapDataProxy","target","p","prop","delayvalidation","validationpendingfor","didGlobalHandlers","lineFeedsToBreaks","text","frag","part","getPageIdx","state","page","idx","getErrorFields","validationresult","field","getFieldName","value","index","self","hasEverFailed","doValidation","iffailedbefore","releasePendingValidations","debugFlags","form","doDelayValidation","tovalidate","lastfocusout","handleFocusOutEvent","event","handleFocusInEvent","handleValidateAfterEvent","FormBase","FormFieldMap","node","getFormElementCandidates","setup","addDocEventListener","evt","#recordLastFocus","pagestate","generateRandomId","#lastFocused","FieldMapDataProxy","name","#onUnload","now","eventdata","dispatchCustomEvent","control","qSA","element","target","ourcondition","parseCondition","searchparams","allvalues","shouldbechecked","tocheck","_","type","getError","fieldgroup","field_with_message","error","potentialgroupnode","contextnode","messageid","messagenode","suggestionholder","create","describedby","describedby_fields","failedfield","getValidationState","stop","extradata","submitter","submitselector","tempbutton","beforeResult","isPromise","el","queryFormFieldLike","startingpoint","lock","flagUIBusy","result","containingpage","pagenum","actionnode","pages","curpage","pagelist","currentpage","scrollto","origscrollto","__isSubmit","pageidx","goingforward","run","direction","pagenode","action","navigateTo","validationstatus","isinit","hiddenPages","mergeNodes","anychanges","formpage","visible","hiddengroups","enabledgroups","requiredgroups","formgroup","groupPage","enabled","required","formline","inputtargets","node_enabled","isFormFieldLike","node_required","isFormControl","option","option_enabled","option_hidden","selectnode","wrapSerialized","nodes","formvalue","mergeNode","conditiontext","fieldname","options","matchfield","isRadioNodeList","currentvalue","conditionfield","fields","attrname","selectedvalue","val","selected","qS","extrafields","condition","subcondition","birthdate","age","matchcase","compareagainst","currentValArray","nextpage","morepages","curpagerole","nextpagerole","richvalues","rawNavigateTo","exitButton","parsedNavTo","redirectdelay","submitButton","submitButtonLabel","registerMissed","isLive","getFieldDisplayName","rfSymbol","deferred","file","fieldnode","saveInteractive","changeValue","foundfields","skiparraymembers","addto","isRadioOrCheckbox","outdata","fieldpromises","receivedvalue","resolve","reject","e","opts","vals","checker","setupValidator","setFieldError","isFieldNativeErrored","updateFieldError","validator","limitset","defer","item","original","group","subnode","tovalidatelist","validationresults","fld","failed","tofocus","canFocusTo","getFocusableComponents","focus","init_env","init_std","init_env","UNKNOWN_FUNCTION","parse","stackString","lines","stack","line","parseResult","parseChrome","parseWinjs","parseGecko","parseNode","parseJSC","chromeRe","chromeEvalRe","parts","isNative","isEval","submatch","winjsRe","geckoRe","geckoEvalRe","javaScriptCoreRe","nodeRe","parseTrace","e","parse","i","formatTrace","trace","prependStackTrace","error","stacklines","tracelines","init_std","globalseqnr","getDebugAppend","urldebugvar","ControlledCall","client","method","stack","id","options","callurl","fetchoptions","fetchpromise","requestStack","response","retryafter","resolve","exception","jsonresponse","logitem","err","prependStackTrace","RPCClient","url","debugFlags","error","backendBase","params","parseTrace","ServiceProxy","target","prop","receiver","newoptions","createClient","args","servicename","rpcclient","hsformservice","tsformservice","getFormService","createClient","getTSFormService","lookupcache","verifyHareScriptAddress","address","options","lookupkey","stringify","emplace","getFormService","init_std","SubField","node","pos","throwError","AddressField","qR","prefixLength","fieldpos","field","qSA","event","fieldname","data","firstfield","key","country","ordering","e","prevgroup","idx","item","fieldgroup","setFieldError","value","visiblefields","anyset","allrequiredset","form","FormBase","curstate","result","lock","flagUIBusy","el","verifyHareScriptAddress","debugFlags","err","anychanges","newvalue","changeValue","init_std","formatDate","dateformat","year","month","day","isValidDate","output","c","formatISODate","date","formatISOTime","hour","minute","second","msec","isValidTime","time","parseDate","format","newdate","options","parts","dayoffset","monthoffset","yearoffset","daypos","monthpos","yearpos","compareDate","lhs","rhs","parseISODate","getLocalToday","today","parseISOTime","intime","nofail","split","getWeekNumber","jsdate","week1","makeJSUTCDate","dateparts","formatJSUTCISODate","dateobj","init_std","validateCheckboxGroup","groupnode","nodes","qSA","min","max","anyenabled","node","numChecked","getTid","validateRadioGroup","reformatDate","datestr","parsed","parseISODate","formatDate","validateDate","date","dateparts","year","month","day","isValidDate","normalizeddate","validateTime","time","timeparts","hours","minutes","seconds","setup","form","datecontrol","field","datematch","propname","thedate","getISOLocalDate","setupValidator","timecontrol","propvalue","checkboxgroup","radiogroup","addresscontrol","AddressField","JSFormElement","newname","required","disable","name","oldValue","newValue","init_std","queryFormFieldLike","isInputElement","field","isHTMLElement","isFormFieldLike","control","isFormControl","JSFormElement","isRadioOrCheckbox","isRadioNodeList","el","getFieldName","setFieldName","newname","getFieldDisplayName","downgradeUploadFields","form","uploadfield","qSA","input","attr","getErrorForValidity","validity","getTid","max","reformatDate","min","key","isFieldNativeErrored","getFieldNativeError","parseCondition","conditiontext","getFormElementCandidates","basenode","namePrefix","parentForm","candidates","getFormHandler","node","allowMissing","throwError","setupServerErrorClear","field","group","setFieldError","ComponentValidationState","el","err","getFieldNativeError","validations","getValidationState","state","newstate","error","options","isHTMLElement","debugFlags","getFieldDisplayName","updateFieldError","dispatchCustomEvent","setupValidator","node","checker","init_std","init_env","cache","mayValidateField","field","acceptEmailSuggestion","evt","form","suggestion","stop","validateField","setFieldError","checkvalue","isValidEmail","getTid","key","rpcCall","getFormService","getTidLanguage","sleep","result","e","debugFlags","jsxcreate","init_env","debugflags","debugFlags","debugFlags","flagname","parseUserAgent","ua","UA","platform","browser","getPlatform","browser","IS_MAC_PLATFORM","getPlatform","propnames","getFinalKey","event","getKeyNames","names","propname","modifier","arr","newkeys","singlemodifier","validateKeyName","key","modifiers","mod","original_order","KeyboardHandler","node","keymap","options","name","keyname","debugflags","target","keynames","tag","is_special_combo","keybinding","handler","keydata","normalizeKeyboardEventData","mapping","dialogconstructor","dialogoptions","createDialog","options","dialogconstructor","dialog","runMessageBox","question","choices","choicebuttons","choice","create","dialogoptions","init_env","init_std","isRealBlob","data","convertToRealBlob","MultiFileUploader","#files","files","signal","item","file","instructions","options","outfiles","uploadedBytes","uploadedFiles","totalBytes","acc","totalFiles","start","fireProgressEvent","partialbytes","curUploaded","timeElapsed","idx","offset","uploadurl","defer","xmlhttp","ev","doAbort","SingleFileUploader","getFilelistFromUser","multiple","accept","dispatchCustomEvent","input","list","requestFiles","requestFile","registerTexts","captcharegistry","initializeCaptcha","provider","injectInto","settings","finalsettings","getTid","registerTexts","isAcceptableType","fileType","masks","basetype","FileEditElement","JSFormElement","csslink","#setValue","evt","error","setFieldError","getTid","value","toset","row","getFieldDisplayName","mimetype","accept","mask","files","_stack","lock","__using","flagUIBusy","file","requestFile","_","_error","_hasError","__callDispose","msg","dispatchCustomEvent","idx","stop","button","init_std","FileUploadFormElement","FileEditElement","#constructFileHolder","fileholder","nodes","idx","file","filename","isFile","filenamefield","jsxcreate","deletebutton","getTid","uploadbutton","UploadField","node","init_std","init_std","formConfiguration","handlers","configuredRegistrations","firstWarningMs","warningIntervalMs","scheduleFormSetup","form","factory","_stack","lock","__using","flagUIBusy","customEls","qSA","_","initPromise","nextWarning","timeoutPromise","sleep","missing","tag","downgradeUploadFields","_error","_hasError","__callDispose","configureForms","setup","dispatchCustomEvent","registerHandlers","addHandlers","defaultHandler","RPCFormBase","handlername","handler","emplace","current","register","getFormConfiguration","formConfiguration","init_std","init_tree","langcodes","ComponentOverlay","evt","debugflags","contains","CalendarTable","clickedday","stop","changeValue","showdate","options","caltable","create","calbody","rownode","jsxcreate","w","mindate","maxdate","startofmonth","makeJSUTCDate","showmonth","showyear","startofmonth_weekday","backwardsdays","currentgriddate","week","day","date","getWeekNumber","dateY","dateM","dateD","celldate","dayclass","daynode","formatJSUTCISODate","compareDate","Calendar2","parseISODate","suggestion","max","getLocalToday","container","headernode","selectedmonth","m","KeyboardHandler","ev","newtable","fnode","formatISODate","direction","newyear","newmonth","DatePicker","owner","getLang","dispatchCustomEvent","calendarnodesize","anchornode","y","datepicker_default","mySelectGetValue","__setUnderlyingValue","comp","newvalue","origsetter","setupMyValueProperty","mySelectSetValue","select","MultiInputSubstition","inpnode","options","setupMyValueProperty","field","evt","stop","dispatchDomEvent","inval","maxlength","nextfield","focus","getLang","jsxcreate","after","ev","KeyboardHandler","key","partname","create","isdisabled","isrequired","toggleClass","node","setvalue","__setUnderlyingValue","change","nodeidx","dir","subinputs","gotofield","prevfield","DateField","dateformat","parseddate","minyear","maxyear","datepicker_default","inplst","which","parts","parseISODate","year","month","day","cutoff","formatISODate","isodate","newdate","formatJSUTCISODate","is_dashed","is_slashed","parseDate","fields","finaldate","getTid","TimeField","step","newval","max","time","parseISOTime","hour","minute","second","msec","finaltime","formatISOTime","recaptchaload","setupForms","options","registerHandlers","configureForms","omit","CaptchaField","JSFormElement","evt","form","setFieldError","getTid","provider","initializeCaptcha","result","stop","setupCaptchaFieldGroup","captchaControl","create","virtualCaptchaPage","buttonarea","qS","unpackObject","formvalue","_","buildTarget","target","FormSubmitter","cache","offline","file","completed","uploader","SingleFileUploader","uploadinstructions","getTSFormService","uploadedfile","isBlob","result","key","value","buildRPCFormSubmission","target","formValue","options","vals","FormSubmitter","eventdetail","buildTarget","unpackObject","submitRPCForm","submission","createClient","RPCFormBase","FormBase","#hadFocus","#completedUploads","#settingUpCaptcha","formnode","#onFirstFocus","isLive","#getSubmitVals","formvalue","background","methodname","args","waiter","lock","flagUIBusy","rpc","getFormService","result","field","prop","value","matchpage","dataval","fieldnode","promise","messages","msg","extradata","extraSubmitAwaitable","extraSubmit","dispatchCustomEvent","config","getFormConfiguration","captchaConfig","setupCaptchaFieldGroup","parameters","insubmitrpc","submitparameters","debugFlags","didfirstfocus","globalerrors","error","failednode","serverMetadata","focus","setFieldError","run","failedfields","pick","e","errors","create","runMessageBox","navigateTo","getCurrentlyFocusedElement","validation","validateField","init_env","init_std","init_env","eventname_regex","datakey_regex","max_sessionid_age","globalOptions","pagesession","useAltRecordURL","seqnr","pxlUserId","pxlSessionId","buildOptions","options","pxlFailed","errormessage","params","isLive","makePxlURL","baseurl","eventname","data","options","globalOptions","eventname_regex","pagesession","generateRandomId","url","seqnr","getPxlSessionId","getPxlId","browser","getBrowser","name","value","test","datakey_regex","type","pxlUserId","timestampvar","debugFlags","sessionExpireDays","max_sessionid_age","expiration","pxlSessionId","sendPxlEvent","event","finaloptions","buildOptions","useAltRecordURL","fetchRes","error","init_env","activeListenPrefixes","sendPxl","eventKey","params","data","options","pxldata","k","v","sendPxlEvent","setupFormAnalytics","prefix","registered","dtapStage","e","formeventdata","key","val","setupForms","form","FormBase","setupFormAnalytics","register","node","UploadField","DateField","TimeField","registerTexts","init_env","init_envbackend","consentstatus","cookiename","consentoptions","getConsentDetail","consentstatus","consentoptions","onConsent","type","callback","evt","details","debugFlags","cookiename","deleteCookie","navigateTo","createMyFrame","ifrm","initYouTube","node","video","playback","youtubeUrl","initVimeo","vimeoUrl","t","minutes","seconds","launchVideo","opts","initializeVideoElementV1","initializeVideoElementV2","videonodes","qSA","videonode","activateVideo","playbutton","getTid","evt","onConsent","register","currentIndex","currentComponent","previousComponent","prevRaf","currentHook","afterPaintEffects","EMPTY","options","_options","oldBeforeDiff","__b","oldBeforeRender","__r","oldAfterDiff","diffed","oldCommit","__c","oldBeforeUnmount","unmount","oldRoot","__","getHookState","index","type","__h","hooks","__H","length","push","__V","useState","initialState","useReducer","invokeOrReturn","reducer","init","hookState","_reducer","action","currentValue","__N","nextValue","setState","_hasScuFromHooks","updateHookState","p","s","c","stateHooks","filter","x","every","prevScu","call","this","shouldUpdate","forEach","hookItem","props","shouldComponentUpdate","prevCWU","componentWillUpdate","__e","tmp","useEffect","callback","args","state","argsChanged","_pendingArgs","useLayoutEffect","__s","useRef","initialValue","useMemo","current","useMemo","factory","args","state","getHookState","currentIndex","argsChanged","__H","__V","_pendingArgs","__h","__","flushAfterPaintEffects","component","afterPaintEffects","shift","__P","__H","__h","forEach","invokeCleanup","invokeEffect","e","options","__e","__v","__b","vnode","currentComponent","oldBeforeDiff","parentDom","__k","__m","oldRoot","__r","oldBeforeRender","currentIndex","hooks","__c","previousComponent","__","hookItem","__N","__V","EMPTY","_pendingArgs","diffed","oldAfterDiff","c","length","push","prevRaf","requestAnimationFrame","afterNextFrame","commitQueue","some","filter","cb","oldCommit","unmount","oldBeforeUnmount","hasErrored","s","HAS_RAF","callback","raf","done","clearTimeout","timeout","cancelAnimationFrame","setTimeout","hook","comp","cleanup","argsChanged","oldArgs","newArgs","arg","index","invokeOrReturn","f","classNames","args","arg","v","k","SpinnerIcon","props","_","classNames","doCheckCanCloseDialog","evt","target","dialog","rect","showModalCounter","showDialog","dialog","modal","RawModalDialog","className","dialogname","isOpen","clickOutsideCanClose","isModal","closeButton","onClose","children","subDialogs","dialogRef","F","A","modalElement","handleClose","classes","_","ModalDialog","props","getTid","SpinnerIcon","init_env","init_env","init_std","isAbsolute","url","getBaseURL","backendBase","ControlledCall","client","method","stack","options","callurl","fetchoptions","fetchpromise","requestStack","response","exception","retryafter","resolve","jsonresponse","parseTyped","logitem","omit","err","prependStackTrace","RPCClient","debugFlags","error","params","stringify","parseTrace","ServiceProxy","target","prop","receiver","newoptions","rpc","args","service","servicematch","rpcclient","PublicCookieSuffix","init_std","authOptions","getCookieName","getFrontendData","getAuthLocalData","c","parseTyped","getCookie","PublicCookieSuffix","submitLoginForm","node","event","_stack","stop","username","password","site","returnto","persistentlogin","login","lock","__using","flagUIBusy","loginresult","refreshLoginStatus","navigateTo","failLogin","_","_error","_hasError","__callDispose","loggedIn","isLoggedIn","setupWRDAuth","options","register","addDocEventListener","evt","handleLogoutClick","doLogout","logout","onDomReady","message","response","form","evtdetail","dispatchCustomEvent","loginfield","qR","getLoginTweaks","tweaks","getLang","urlvars","login","username","password","options","cookieName","getCookieName","result","rpc","getBrowser","getAuthLocalData","doLogout","logout","navigateTo","init_env","init_env","postRenderChecks","log","logtext","onDomReady","init_std","init_env","getCeremonyLocation","getFrontendData","applyCeremonyLocation","editorconfig","htmlnode","CMLanguages","apiClientHeaders","accessToken","apiClient","rpc","SharedCMClient","lang","setTidLanguage","init_env","init_std","supportedMimetypes","wrapFileStackWithDialogElement","__wrapFileStackWithDialogElement","externaldialog","dialogcontainer","unwrapFileStack","prepareUpload","filestackApiKey","type","maxFiles","debugFlags","Filestack","filestack","files","resolve","reject","res","apiClient","pick","requestFilesResult","requestFiles","uploader","MultiFileUploader","uploadinstructions","file","index","accessToken","urlParams","newUrl","paramslist","EditorBackend","SharedCMClient","renderCallback","streamCode","isLoggedIn","e","sleep","ceremonyState","apiClient","tid","texts","infoText","deadlineText","locationData","getCeremonyLocation","condolenceCode","password","userinfo","ceremonies","wrapSerialized","query","ceremonyId","_","username","result","login","navigateTo","logout","email","ed","verifier","type","options","added","momentId","fields","manifest","mediaId","upload","audioFileToken","res","fileToken","images","imageIds","ceremonyinfo","momentOrderingList","text","index","match","escapeRegExp","token","maxFiles","prepareUpload","props","code","assertHTMLElement","el","SimpleScreenDialog","props","buttons","title","getTid","canEscape","b","footerContent","_","k","button","ModalDialog","useSimpleScreen","feedback","setFeedback","p","getSimpleScreenProps","type","message","options","resolve","result","curFeedback","simpleScreenState","component","state","init_std","init_env","toddrpc","createClient","canvasRatio","ctx","devicePixelRatio","backingStoreRatio","imagequeue","imagecache","loadimgtimeout","loadimglock","updateCompositeImage","imgnode","imgnames","width","height","color","data","key","cached","value","debugFlags","applyLoadedResultToImage","flagUIBusy","loadImages","lock","toload","applyLoadedResult","result","loaded","res","processImage","loadedimg","e","img","images","baseimg","basetype","basedata","invertImage","canvaswidth","canvasheight","imgnodes","imgloads","overlayimg","idx","imgdata","imgsrc","resolve","reject","canvas","layercanvas","layerctx","canvasstack","knockout","range","x","y","svgdata","createImage","imgname","width","height","color","eloptions","createCompositeImage","imgnames","imgnode","create","updateCompositeImage","updateImage","ToolbarButton","options","jsxcreate","dispatchCustomEvent","enabled","pressed","ToolbarSeparator","create","ToolbarContainer","_button","_comp","ToolbarPanel","button","comp","Toolbar","modalbuttons","width","height","subPanel","HAS_TOUCHEVENT","moveeventdata","lastcoordinates","fireMoveEvent","eventtype","listener","event","cancelable","originaltarget","coordinatesource","cloneCoordinates","movedX","movedY","eventdata","dispatchCustomEvent","startMove","target","startX","startY","moveMouseMove","moveMouseUp","stopMove","moveMouseDown","stop","enable","el","import_smartcrop","init_env","SurfaceTool","surface","ImageToolbarPanel","ToolbarPanel","tool","options","DraggerPos","PhotoCrop","SurfaceTool","surface","options","ImageToolbarPanel","ToolbarButton","getTid","createImage","toolbar","styles","jsxcreate","canvaspos","enable","evt","c","dragger","pos","mask","movedNode","ev","dragNode","moveGrid","width","height","dx","dy","hPairedNode","vPairedNode","diagonalNode","fixedWidth","fixedHeight","topPx","rightPx","bottomPx","leftPx","d","aspect","callback","crop","maxWidth","maxHeight","debugFlags","SmartCrop","result","w","h","fixed","inputWidth","aw","ah","isValid","inputHeight","x1","y1","x2","y2","cropboxOffset","getRelativeBounds","canvasScale","props","newWidth","newHeight","imgData","canvasScaleX","canvasScaleY","canvasscale","cssWidth","cssHeight","addImageCropButton","cropper","button","tool_inline","buttonicon","PhotoPoint","SurfaceTool","surface","options","ImageToolbarPanel","ToolbarButton","getTid","createImage","event","KeyboardHandler","evt","button","updateImage","toolbar","jsxcreate","enable","fireApply","props","active","canvas","x","y","canvaspos","surfacepos","hide","addRefPointButton","pointer","PhotoRotate","SurfaceTool","surface","options","ImageToolbarPanel","ToolbarButton","getTid","createImage","ToolbarSeparator","toolbar","canvasscalex","canvasscaley","canvasscalexr","canvasscaleyr","cssw","cssh","newprops","props","newWidth","newHeight","scaleX","rx","copy","imgData","prevWidth","prevHeight","max","cssWidth","cssHeight","degrees","addImageRotateButton","rotator","button","ImageSurface","eventTarget","_toolbar","options","jsxcreate","name","detail","dispatchCustomEvent","w","h","img","settings","state","busy","focalPoint","orientation","width","height","containersize","s","rotated","scale","orgSize","canvasScaleX","canvasScaleY","canvasScale","cssw","cssh","drawWidth","drawHeight","tmp","canvas","contentRect","oldcanvas","left","top","ctx","hidemask","qSA","node","replace_same_action","step","copy","toolbar","surface","button","ToolbarButton","getTid","createImage","registerTexts","registerTexts","MAX_IMAGE_LENGTH","MAX_IMAGE_AREA","ImageEditor","el","options","__shadowroot","host","Toolbar","createImage","getTid","ImageSurface","evt","ToolbarSeparator","addImageCropButton","width","height","orgwidth","orgheight","addImageRotateButton","addRefPointButton","event","w","h","img","canvas","resized","resizeCanvasWithMethod","status","minwarning","maxwarning","item","allallowed","imgSize","refPoint","forUpload","resizeMethod","canvasWidth","canvasHeight","imageWidth","imageHeight","imageTop","imageLeft","rect","curleft","scaley","curtop","scalex","jsxcreate","ctx","stylesheet","ImgTransformElement","#editor","imgSize","ImageEditor","#broadcastMetadata","styleSheet","dispatchCustomEvent","image","settings","bitmap","options","type","quality","blob","resolve","Spinner","create","showDialog","ImgTransformElement","EditSlideDialog","b","m","props","fetchresult","inside","node","_stack","spinner","__using","Spinner","blob","uploader","SingleFileUploader","uploadinstructions","backend","uploadedfile","_","_error","_hasError","__callDispose","footercontent","k","getTid","imgSize","ModalDialog","registerTexts","TimeIndicator","props","_","classNames","init_std","init_internal","convertElementTids","scope","node","getTid","args","getTidLanguage","setTidLanguage","getHTMLTid","StringField","props","_","evt","SecondsField","MinutesSecondsField","state","setState","p","updateState","updates","curState","newState","getTid","LanguageField","formFieldDefaultTypes","value","isValidEmail","FormDialog","isOpen","isModal","dialogname","form","onButton","onCancel","subDialogs","rest","defaultValues","acc","field","errors","defaultState","A","buttonClick","tag","anyError","btn","orgState","stateCopy","prop","fieldValue","error","fieldProps","oldState","footerContent","k","button","renderFooterButton","isdefault","title","ModalDialog","classNames","fieldTypeDef","allProps","FieldRenderer","ImageLibraryImageChooser","props","state","setState","p","footerContent","_","getTid","images","backend","ModalDialog","i","curState","selected","MediaListDialog","b","props","evt","assertHTMLElement","row","rows","rowidx","currentrow","idx","runSimpleScreen","simpleScreenState","getTid","backend","slide","items","itemUpdates","item","uploader","result","runEditMediaDialog","haveSelection","formatDuration","secs","footerMessage","slidesDuration","acc","editor","_","TimeIndicator","state","footercontent","k","SimpleScreen","subDialogs","EditMomentDurationForm","ids","all_slide_ids","value","EditSlideDurationForm","ImageLibraryImageChooser","images","ModalDialog","defer","createDeferred","fragment","B","EditSlideDialog","dialog","editSlideDurationForm","isOpen","momentId","allSlideIds","onClose","FormDialog","_stack","spinner","__using","Spinner","ids_to_apply","id","_error","_hasError","__callDispose","editMomentDurationForm","MediaPreviewButton","b","m","props","playernode","evt","cnames","_","getTid","audionode","source","time","percentagePosition","init_std","MediaLibraryViewer","b","m","props","evt","assertHTMLElement","addbutton","itemcontainer","mediaId","_","ModalDialog","getTid","item","backend","throwError","playerinstance","textquery","form","results","onlyFavorites","haveFavorites","maxitems","items","renderMediaTabs","medialisttabs","renderTabs","k","itemcount","MediaPreviewButton","instance","options","runSelectMediaFromLibraryDialog","popularItems","defer","fragment","B","result","dialog","AudioPlayer","b","m","props","time","audionode","state","duration","playernode","evt","slidernode","cnames","percentagePosition","_","getTid","source","prevProps","timedisplaynode","timelinenode","time_msecs","time_secs","hours","minutes","seconds","playbackInterval","CeremonyMediaMomentCard","b","m","props","msg","state","propsChanged","object_equals","stateChanged","showDialog","evt","assertHTMLElement","momentid","backend","timeOffsetInMoment","amountOfSlides","slideIdx","totalSlideshowDuration","slide","slideTimeOffset","tile","notes","moment","content","_","k","mediaId","type","classes","subDialogs","EditMomentDurationForm","popularItems","MediaLibraryViewer","SimpleScreen","simpleScreenState","showSlidesIcon","showPresentationIcon","showAudioIcon","showVideoIcon","icons","slidesCount","finalIcons","idx","icon","getTid","image","className","minutes","seconds","lockDuration","placeholder","audio","SpinnerIcon","uploader","uploadresult","presentation","runSimpleScreen","videoinfo","video","AudioPlayer","audioinfo","runSelectMediaFromLibraryDialog","currentslide","target","slidescount","MediaListDialog","x","y","p","AddMomentCard","b","props","type","backend","uploadType","momentType","uploader","momentId","content","_","k","getTid","SpinnerIcon","evt","MomentTypeSelector","AddMusic","AddSlideShow","classes","AddMomentBase","mediaId","runSelectMediaFromLibraryDialog","momentid","ImageLibraryImageChooser","images","popularItems","gotMedia","MediaLibraryViewer","paginationNodeInstances","assertHTMLElement","el","observer","relayoutPaginationBars","entries","entry","paginationBar","insertinto","options","controls_id","paginationbar","jsxcreate","getTid","pagescontainer","evt","setpagebutton","pagenr","currentPage","lastPage","computed","width","spacing","itemwidth","maxbuttons","extend_left","page_start","page_end","amount_of_buttons","page","DragDropTouch","DragDropTouch_1","DataTransfer","value","type","img","offsetX","offsetY","ddt","supportsPassive","d","ts","tm","te","opt","e","_this","src","target","delta","page","p","pt","el","rc","s","dst","props","i","att","cSrc","cDst","cs","key","evt","t","zoomout_footer_whitespace","Moments","b","m","paginationdata","paginationBar","evt","backend","itemId","newitem","original_idx","moment","paginationContainer","props","state","previousProps","targetelement","momentTileNode","tileIdx","focusedtile","selector","tileNeedingFocus","node","focusedtileidx","tiles","idx","tilenode","margintop","scrollTop","assertHTMLElement","animatedtile","tile","img","viewport_height","momentsgrid_rect","footer_height","zoom_trigger_height","scroll_trigger_height","scrollY","momentgridbottom_viewportY","trigger_zoomout","slide","back","front","posx","posy","targetslide","id_of_moment_to_move","id_of_moment_to_insertbefore","insert_idx","moment_to_move","momentOrderingList","localCards","cardInstance","F","card","_","CeremonyMediaMomentCard","tid","infoText","result","AddMomentCard","k","TimeIndicator","acc","durationMs","getTimeText","timeStart","timeEnd","getTid","newItemIdx","momentsgrid","momentsgrid_top","scale_to_fit","gridElement","scaleFactor","viewportHeight","viewportCenterY","gridOffsetTop","gridCenterY","gridHeight","scaledGridHeight","visibleTopAfterScale","visibleBottomAfterScale","transformOriginY","time_msecs","time_secs","hours","minutes","seconds","closeDocumentation","container","setPlayStateForVideosWithin","initDocumentation","evt","doToggleSideBarMenuItems","doSetSelectedPage","enrichWithAriaAttributes","items_withsubitems","branchidx","branchnode","setBranchState","node","expanded","activatedtogglenode","activatedlink","panelid","toggleBranchState","setPage","docappContainer","pageid","activePage","pages","page","pulldown","links","link","appContainer","menu","play","iframes","idx","iframe","parser","showDocumentation","documentationURL","dialog","spaData","newhtml","jsxcreate","evt","closeMyDocumentation","getTid","spaAppContainer","initDocumentation","registerMissed","closeDocumentation","isFilledComponentChildren","children","EditorHeader","props","titleParts","getCeremonyLocation","part","idx","_","LoginHeader","ChooseLanguage","props","_","FormDialog","getTid","backend","result","LoginScreen","b","_stack","spinner","__using","Spinner","loginresult","backend","_","_error","_hasError","__callDispose","buttons","k","ChooseLanguage","lang","state","LoginHeader","forgotPassword","evt","getTid","runSimpleScreen","SimpleScreen","simpleScreenState","onForgot","e","ResetPasswordScreen","props","editLanguage","setEditLanguage","p","renderStartScreenHeader","buttons","_","k","ChooseLanguage","backend","lang","LoginHeader","getTid","ResetPassword","b","_stack","spinner","__using","Spinner","result","url","_error","_hasError","__callDispose","AccessDialog","isOpen","onClose","addCollaborator","setAddCollaborator","p","collaborators","setCollaborators","liveLink","setliveLink","updateCollaborators","backend","res","_","runSimpleScreen","SimpleScreen","useSimpleScreen","renderPersons","collaboratoritems","k","collaborator","getTid","evt","removeCollaborator","email","answer","result","_stack","spinner","__using","Spinner","_error","_hasError","__callDispose","collaborators_normal","collaboration","ModalDialog","AddCollaboratorDialog","addCollaboratorForm","FormDialog","handleDialogResult","successpage","init_internal","AccountDialog","isOpen","onClose","user","backend","_","ModalDialog","getTid","k","BRAND_SYMBOL","Symbol","endBatch","batchDepth","error","hasError","batchedEffect","effect","batchIteration","next","_nextBatchedEffect","_flags","needsToRecompute","_callback","err","evalContext","batchedEffect","batchDepth","batchIteration","globalVersion","addDependency","signal","evalContext","node","_node","_target","_version","_source","_prevSource","_sources","_nextSource","_prevTarget","_nextTarget","_rollbackNode","_flags","_subscribe","Signal","value","this","_value","_targets","prototype","brand","BRAND_SYMBOL","_refresh","_unsubscribe","prev","next","subscribe","fn","_this","effect","prevContext","valueOf","toString","toJSON","peek","Object","defineProperty","get","set","Error","_notify","endBatch","needsToRecompute","target","prepareSources","rollbackNode","cleanupSources","head","Computed","call","undefined","_fn","_globalVersion","OUTDATED","err","computed","cleanupEffect","cleanup","_cleanup","disposeEffect","endEffect","Effect","_nextBatchedEffect","_callback","finish","_start","bind","_dispose","currentComponent","finishUpdate","hook","hookName","hookFn","options","bind","setCurrentUpdater","updater","_start","SignalValue","_ref","_this","this","data","currentSignal","useSignal","value","s","useMemo","v","__v","__","__c","_updateFlags","_updater","_callback","_this$base","isValidElement","peek","base","nodeType","setState","computed","displayName","Object","defineProperties","Signal","prototype","constructor","configurable","undefined","type","props","get","__b","old","vnode","signalProps","i","__np","component","update","effect","createUpdater","error","oldVNode","dom","__e","renderedProps","updaters","_updaters","prop","_dispose","signal","createPropUpdater","_update","propSignal","setAsProperty","ownerSVGElement","changeSignal","newSignal","newProps","setAttribute","removeAttribute","index","Component","shouldComponentUpdate","state","_sources","HAS_PENDING_UPDATE","init_env","clampProp","e","n","t","o","r","clampEntity","missingField","i","a","clampNumber","numberOutOfRange","s","on","zipProps","g","remapProps","nn","hasAnyPropsByName","allPropsEqual","zeroOutProps","Pt","capitalize","sortStrings","padNumber","compareNumbers","divModFloor","modFloor","divModTrunc","divTrunc","modTrunc","hasHalf","givenFieldsToBigNano","Ao","Uo","c","u","nanoToGivenFields","d","m","P","h","S","T","requireNumberIsPositive","ze","cr","requirePropDefined","requireObjectLike","oo","requireType","invalidEntity","expectedInteger","expectedPositive","toString","no","toStringViaPrimitive","toBigInt","invalidBigInt","toNumber","forbiddenBigIntToNumber","expectedFinite","toInteger","toStrictInteger","toPositiveInteger","createBigNano","addBigNanos","moveBigNano","diffBigNanos","compareBigNanos","bigNanoOutside","bigIntToBigNano","Ge","bigNanoToNumber","divModBigNano","checkIsoYearMonthInBounds","wr","Fr","checkIsoDateInBounds","checkIsoDateTimeInBounds","Nt","checkEpochNanoInBounds","isoToEpochNano","Sr","Er","Io","isoTimeFieldsToNano","w","nanoToIsoTimeAndDay","epochNanoToSecMod","Ro","isoToEpochMilli","isoArgsToEpochMilli","ko","Qe","Yo","isoToEpochNanoWithOffset","isoArgsToEpochSec","Co","isoToLegacyDate","epochNanoToIso","epochMilliToIso","Pr","Tr","hashIntlFormatParts","computeIsoDateParts","computeIsoMonthCodeParts","computeIsoMonthsInYear","kr","computeIsoDaysInMonth","computeIsoInLeapYear","computeIsoDaysInYear","computeIsoDayOfWeek","computeIsoEraParts","or","rr","Yr","computeJapaneseEraParts","Cr","Ci","parseIntlYear","checkIsoDateTimeFields","checkIsoDateFields","constrainIsoTimeFields","constrainIsoDateFields","isIsoDateFieldsValid","Dr","mt","Xr","je","normalizeOptions","ei","ni","refineDiffOptions","Kr","parseRoundingIncInteger","ii","Jr","checkLargestSmallestUnit","refineRoundingInc","refineRoundingOptions","normalizeOptionsOrString","Rr","refineDateDisplayOptions","ti","refineTimeDisplayOptions","refineTimeDisplayTuple","Me","qr","refineChoiceOption","_r","refineSubsecDigits","refineSmallestUnitAndSubsecDigits","zr","Ur","fabricateOverflowOptions","jr","refineUnitOption","Oo","mr","invalidChoice","Bo","Eo","xe","Re","_e","z","jt","x","Nr","W","G","Ir","createPlainYearMonthSlots","Ut","createPlainMonthDaySlots","qt","St","ft","Mr","Oe","N","computeDurationSign","ur","I","v","extractEpochNano","J","getMaxDurationUnit","Zr","Ar","Qr","isUniformUnit","totalDayTimeDuration","yo","f","l","createMarkerSystem","createMarkerToEpochNano","createMoveMarker","createDiffMarkers","isZonedEpochSlots","D","clampRelativeDuration","gr","computeEpochNanoFrac","p","durationFieldsToBigNano","fo","Le","roundBigNano","Ie","he","getStartOfDayInstantFor","roundWithMode","computeDayInterval","getMatchingInstantFor","roundDateTime","vt","lt","roundTimeToNano","computeNanoInc","Te","zo","ve","computeDayFloor","roundDateTimeToNano","moveByDays","roundByInc","roundToMinute","Zo","yr","roundDayTimeDurationByInc","nanoToDurationDayTimeFields","roundBigNanoByInc","roundRelativeDuration","nudgeZonedTimeDuration","nudgeDayTimeDuration","nudgeRelativeDuration","ai","hr","nanoToDurationTimeFields","ke","formatIsoDateTimeFields","Se","si","Fe","ri","oi","formatCalendar","Ft","ce","formatIsoDateFields","Kt","formatDateLikeIso","formatIsoYearMonthFields","Jt","formatIsoMonthDayFields","ct","formatIsoTimeFields","k","checkDurationUnits","negateDurationFields","checkDurationTimeUnit","formatSubsecNano","formatDurationFragments","formatDurationNumber","formatCalendarId","bo","getSignStr","li","_zonedEpochSlotsToIso","Do","getSingleInstantFor","To","go","Ye","durationHasDateParts","vo","pe","moveZonedEpochs","wt","moveDateTime","ne","moveDate","Gt","moveToDayOfMonthUnsafe","B","pr","at","moveTime","diffZonedEpochsExact","diffDateTimesExact","E","V","Po","M","Y","y","No","dr","di","Mo","lr","createSplitTuple","computePeriod","ci","We","parseDateTimeLike","failedParse","parseOffsetNano","parseOffsetNanoMaybe","H","finalizeZonedDateTime","finalizeDate","Ae","Bt","finalizeDateTime","de","Br","_t","parseYearMonthOnly","requireIsoCalendar","invalidSubstring","xt","parseMonthDayOnly","ht","Pi","organizeAnnotationParts","organizeTimeParts","R","Fi","parseUnit","parseSubsecNano","noValidFields","parseSign","Z","L","resolveSlotsCalendar","vi","organizeIsoYearParts","Ni","yi","Ei","ho","parseInt0","Si","createRegExp","Ze","getTimeZoneEssence","Oi","F","bi","po","getTimeZoneAtomic","wi","Ke","Be","K","Yt","te","Dt","Ve","Ce","isTimeZoneIdsEqual","Ct","re","$t","Lt","st","Ee","diffEpochNanos","we","getCommonCalendarId","mo","diffZonedEpochsBig","It","diffDateTimesBig","oe","diffDateLike","zt","it","diffTimes","diffEpochNanosExact","updateMid","diffDays","diffEpochMilliByDay","lo","computeNativeWeekOfYear","computeNativeYearOfWeek","computeNativeDayOfYear","parseMonthCode","Bi","invalidMonthCode","formatMonthCode","monthCodeNumberToMonth","monthToMonthCodeNumber","eraYearToYear","getCalendarEraOrigins","ir","getCalendarIdBase","getCalendarLeapMonthMeta","sr","computeCalendarIdBase","createIntlCalendar","epochMilliToIntlFields","createIntlFieldCache","createIntlYearDataCache","Or","Fo","parseIntlPartsYear","ar","computeIntlDateParts","computeIntlEpochMilli","computeIntlMonthCodeParts","computeIntlLeapMonth","queryMonthStrings","computeIntlDaysInYear","computeIntlDaysInMonth","computeIntlMonthsInYear","computeIntlEraParts","Mt","createNativeOpsCreator","ki","$","refineCalendarFields","Xo","xo","refineTimeBag","Ne","jo","At","O","me","Xt","Ko","Rt","Jo","Tt","refineFields","qo","q","duplicateFields","forbiddenField","Li","tr","xi","De","Lo","ji","$i","gt","computeDateEssentials","ee","Wt","Et","rt","A","convertToIso","refineYear","io","ro","invalidEra","ao","missingYear","refineMonth","uo","so","co","refineDay","spliceFields","qe","ye","Zt","ue","Qt","kt","ut","j","Je","be","yt","fe","dt","bt","ae","ie","le","Qo","se","nr","Ht","Vt","Go","$e","He","createOptionsTransformer","Q","an","Na","toEpochMillis","So","en","ge","Ot","pt","Pe","tn","Xe","Ue","va","b","rn","ln","wo","Wo","$o","Ho","Vo","_o","er","fr","vr","br","Wr","Lr","xr","$r","Hr","Gr","Vr","ui","fi","IntlTimeZone","FixedTimeZone","getOffsetSec","pinch","mi","pi","hi","gi","Di","Ti","Ii","Mi","Yi","Ri","Zi","zi","computeWeekShift","computeWeeksInYear","Ui","Ai","qi","Wi","C","Hi","Gi","Vi","_i","Ji","Ki","Qi","Xi","ea","na","ta","oa","ra","ia","aa","sa","ca","ua","fa","la","da","ma","pa","ha","ga","Da","Ta","Ia","Ma","ya","U","ot","X","_","tt","et","nt","createSlotClass","i","l","s","c","u","Class","t","a","un","bindMethod","e","getSpecificSlots","r","cn","n","o","rejectInvalidBag","getCalendarIdFromBag","extractCalendarIdFromBag","refineCalendarArg","f","m","createCalendarGetters","C","neverValueOf","b","refineTimeZoneArg","F","M","Z","toDurationSlots","N","q","R","refinePublicRelativeTo","z","G","x","W","$","L","H","toPlainTimeSlots","ft","mt","St","dt","Tt","ht","optionalToPlainTimeFields","toPlainDateTimeSlots","jt","Nt","yt","At","Bt","toPlainMonthDaySlots","qt","Rt","xt","toPlainYearMonthSlots","Ut","Xt","_t","toPlainDateSlots","fe","me","de","toZonedDateTimeSlots","je","Ne","Ae","adaptDateMethods","slotsToIso","he","toInstantSlots","Re","xe","We","toTemporalInstant","Kn","Ge","ze","Qe","createDateTimeFormatClass","DateTimeFormatFunc","DateTimeFormatNew","to","en","nn","on","createFormatPrepperForBranding","prepFormat","ln","createFormatMethod","createProxiedMethod","Cn","rn","Q","an","sn","fn","d","S","T","h","D","mn","dn","Sn","P","Tn","hn","Dn","Pn","gn","g","p","pn","w","O","On","I","v","wn","In","vn","j","y","A","B","Y","E","V","J","k","K","U","X","_","tt","et","nt","bn","Fn","ot","Mn","Zn","yn","jn","Nn","An","Bn","ut","rt","at","it","lt","st","ct","Dt","Yn","En","Pt","Zt","Mt","gt","pt","Ot","wt","It","vt","Ct","$n","bt","Wn","Ft","Yt","Ln","Vn","Jn","kt","Et","Lt","Vt","Jt","kn","qn","Rn","Qt","Wt","Gt","zt","$t","Ht","Kt","te","xn","Gn","ue","ee","ne","oe","re","ae","ie","le","se","ce","zn","ye","Ze","Se","Te","De","Pe","ge","pe","Oe","we","Ie","ve","Ce","be","Fe","Me","Be","Hn","Qn","qe","Ye","Ee","Le","Ve","Je","ke","$e","He","Ke","Un","Ue","Xe","_e","tn","Xn","_n","eo","n","Xn","_n","toTemporalInstant","import_amazon_ivs_player","PlayerController","player","src","watchrecording","ceremony","endedCallback","error","quality","cue","data","sendPxl","getNewPlayerState","innerDivRef","m","_","FlowPlayer","props","state","setState","p","controller","amazon_ivs_wasmworker_min_default","curState","StreamScreen","cetStart","cetDate","cetTime","unmuteCallback","d","playbackUrl","setPlaybackUrl","counter","setCounter","editLanguage","setEditLanguage","hasEnded","setHasEnded","dtapStage","later","getTid","message","timeoutMsecs","now","timeout","c","buttons","k","titleParts","getCeremonyLocation","part","idx","LoginHeader","ChooseLanguage","backend","lang","StreamCodeScreen","code","setCode","runSimpleScreen","SimpleScreen","useSimpleScreen","submitting","submit","evt","_stack","lock","__using","flagUIBusy","link","_error","_hasError","__callDispose","ModalDialog","e","init_env","CeremonyHeader","props","when","backend","_","getCeremonyLocation","CeremonyEditor","b","ceremony","canEdit","texts","hasDeadline","deadlinePassed","tid","infoText","richtext","runSimpleScreen","simpleScreenState","bodyContent","getTid","callbacks","buttons","k","ceremonyHeader","EditorHeader","SimpleScreen","subDialogs","footerContent","Moments","ChooseCeremonyDialog","AccessDialog","AccountDialog","ChooseLanguage","lang","state","isDutch","locationData","docLink","showDocumentation","ModalDialog","cetStart","cetDate","cetTime","_stack","spinner","__using","Spinner","_error","_hasError","__callDispose","EditorBackend","EditorAppRoot","streamCode","dtapStage","url","StreamCodeScreen","searchParams","StreamScreen","ResetPasswordScreen","LoginScreen","init_std","CondolenceBackend","SharedCMClient","renderCallback","condolenceCode","wrapSerialized","condolencePassword","codeinfo","apiClient","postdata","registerTexts","getImageURL","infile","PostMessageDialog","b","m","props","bodycontent","_","k","getTid","evt","getHTMLTid","footercontent","ModalDialog","anchor","locationdata","getFrontendData","texts","backend","predefinedImages","file","image","firstOption","form","ceremonyId","postData","result","uploadType","attachmentType","ceremony","uploader","prepareUpload","files","ViewImageDialog","b","props","bodycontent","_","k","ModalDialog","register","node","UploadField","DateField","TimeField","resizeObserver","entries","onMasonryResizes","debug","automaticlyHandleResizes","containers_to_relayout","entry","add_node","renderinfo","container","DompackMasonry","node","options","domoptions","getJSONAttribute","elem","clientwidth","cstyle","padtop","padbottom","padleft","padright","widgets","no_new_widgets","widgetnode","visiblewidgetscount","columnwidth","columncount","singlerow","columns","xcol","widgetrecs","idx","widget","widgetcols","width","dispatchCustomEvent","widgetrec","widgetheight","bestcol","ypos","col","maxypos","nextypos","styles","maxheight","need_relayout","colnr","rownr","rowheights","previousrow","computed","totalheight","evt","onScroll","normalPostButton","bounds","backend","CondolenceBackend","CondolenceAppRoot","b","m","searchParams","state","propValue","fallbackValue","value","grid","cStyle","columns","gutterx","guttery","settings","DompackMasonry","form","needPassword","_","k","ModalDialog","getTid","ceremony","user","locationdata","getFrontendData","SimpleScreen","simpleScreenState","subDialogs","PostMessageDialog","result","ViewImageDialog","textualBirthdate","textualPassingdate","isDutch","texts","infoText","buttons","ChooseLanguage","lang","LoginHeader","items","item","post","postDate","str","postId","selector","messageTile","panel","containers","container","node","itemnode","author","postData","runSimpleScreen","answer","apiClient","posts","postIndex","channel","editLanguage","setEditLanguage","p","setupWRDAuth","onDomReady","setupCeremonyEditor","root","applyCeremonyLocation","B","_","CondolenceAppRoot","EditorAppRoot","register","aps"]}