%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/activity/js/
Upload File :
Create Path :
Current File : //www/varak.net/nextcloud.varak.net/apps_old/apps/activity/js/Activity-Dojq2ncI.mjs.map

{"version":3,"file":"Activity-Dojq2ncI.mjs","sources":["../node_modules/@nextcloud/vue/dist/Composables/useIsMobile.mjs","../node_modules/@nextcloud/vue/dist/Components/NcButton.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcIconSvgWrapper-CvnWKK7h.mjs","../node_modules/@nextcloud/moment/node_modules/moment/min/moment-with-locales.js","../node_modules/@nextcloud/moment/dist/index.mjs","../node_modules/floating-vue/node_modules/@floating-ui/core/dist/floating-ui.core.esm.js","../node_modules/floating-vue/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js","../node_modules/floating-vue/dist/floating-vue.es.js","../node_modules/@nextcloud/vue/dist/Directives/Tooltip.mjs","../node_modules/@nextcloud/vue/dist/chunks/ArrowRight-16bLxoZc.mjs","../node_modules/@nextcloud/browser-storage/dist/scopedstorage.js","../node_modules/@nextcloud/browser-storage/dist/storagebuilder.js","../node_modules/@nextcloud/browser-storage/dist/index.js","../node_modules/@vueuse/shared/node_modules/vue-demi/lib/index.mjs","../node_modules/@vueuse/shared/index.mjs","../node_modules/@vueuse/core/node_modules/vue-demi/lib/index.mjs","../node_modules/@vueuse/core/index.mjs","../node_modules/@nextcloud/vue/dist/Components/NcEmptyContent.mjs","../src/models/ActivityModel.ts","../node_modules/tabbable/dist/index.esm.js","../node_modules/focus-trap/dist/focus-trap.esm.js","../node_modules/@nextcloud/vue/dist/chunks/focusTrap-Py2bQ9-r.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcPopover-93ns_0K4.mjs","../node_modules/@nextcloud/vue/dist/chunks/DotsHorizontal-IbmXTXRA.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcActions-4NCnCJdf.mjs","../node_modules/@nextcloud/vue/dist/chunks/actionGlobal-fRayfdEK.mjs","../node_modules/@nextcloud/vue/dist/chunks/actionText-bMy_49i8.mjs","../node_modules/@nextcloud/vue/dist/Components/NcActionLink.mjs","../node_modules/@nextcloud/vue/node_modules/@nextcloud/router/dist/index.mjs","../node_modules/@nextcloud/capabilities/dist/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcUserStatusIcon-q3okK462.mjs","../node_modules/@nextcloud/vue/dist/chunks/GenColors-DI6G7se8.mjs","../node_modules/crypt/crypt.js","../node_modules/charenc/charenc.js","../node_modules/is-buffer/index.js","../node_modules/md5/md5.js","../node_modules/@nextcloud/vue/dist/chunks/usernameToColor-exoSzo-C.mjs","../node_modules/@nextcloud/vue/dist/Composables/useIsFullscreen.mjs","../node_modules/linkifyjs/dist/linkify.es.js","../node_modules/linkify-string/dist/linkify-string.es.js","../node_modules/striptags/src/striptags.js","../node_modules/@vueuse/components/node_modules/vue-demi/lib/index.mjs","../node_modules/@vueuse/components/index.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcAvatar-MHywJkM4.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcDateTime-FfZJDKud.mjs","../node_modules/@nextcloud/vue/dist/Functions/registerReference.mjs","../node_modules/@nextcloud/vue/dist/chunks/index-2phCrsSH.mjs","../node_modules/@nextcloud/vue-select/dist/vue-select.js","../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../node_modules/@nextcloud/vue/dist/chunks/ChevronDown-suAKKmeb.mjs","../node_modules/@nextcloud/vue/dist/chunks/Close-QtH6_3PP.mjs","../node_modules/@nextcloud/vue/dist/Components/NcEllipsisedOption.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcListItemIcon-NPSUuwgH.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcSelect-Hw3T6JKO.mjs","../node_modules/unist-util-is/lib/index.js","../node_modules/unist-util-visit-parents/lib/index.js","../node_modules/unist-util-visit/lib/index.js","../node_modules/unist-builder/lib/index.js","../node_modules/@nextcloud/vue/dist/chunks/autolink-oKM43mOC.mjs","../node_modules/@nextcloud/vue/dist/chunks/AlertCircleOutline-XY0EPUmQ.mjs","../node_modules/@nextcloud/vue/dist/chunks/Check-qy5XrF1J.mjs","../node_modules/@nextcloud/vue/dist/Components/NcInputField.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcTextField-u76gJqK3.mjs","../node_modules/@nextcloud/vue/dist/chunks/ScopeComponent-fOJOJbfW.mjs","../node_modules/@nextcloud/vue/dist/chunks/ChevronRight-9owhU_17.mjs","../node_modules/@nextcloud/vue/dist/Components/NcModal.mjs","../node_modules/@nextcloud/vue/dist/chunks/referencePickerModal-02Pa52XN.mjs","../node_modules/bail/index.js","../node_modules/extend/index.js","../node_modules/unified/node_modules/is-plain-obj/index.js","../node_modules/trough/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/vfile-message/lib/index.js","../node_modules/vfile/lib/minpath.browser.js","../node_modules/vfile/lib/minproc.browser.js","../node_modules/vfile/lib/minurl.shared.js","../node_modules/vfile/lib/minurl.browser.js","../node_modules/vfile/lib/index.js","../node_modules/unified/lib/callable-instance.js","../node_modules/unified/lib/index.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/decode-named-character-reference/index.dom.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-util-sanitize-uri/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/remark-parse/lib/index.js","../node_modules/ccount/index.js","../node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","../node_modules/mdast-util-find-and-replace/lib/index.js","../node_modules/mdast-util-gfm-autolink-literal/lib/index.js","../node_modules/mdast-util-gfm-footnote/lib/index.js","../node_modules/mdast-util-gfm-strikethrough/lib/index.js","../node_modules/markdown-table/index.js","../node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","../node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","../node_modules/mdast-util-to-markdown/lib/handle/break.js","../node_modules/longest-streak/index.js","../node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","../node_modules/mdast-util-to-markdown/lib/util/check-fence.js","../node_modules/mdast-util-to-markdown/lib/handle/code.js","../node_modules/mdast-util-to-markdown/lib/util/check-quote.js","../node_modules/mdast-util-to-markdown/lib/handle/definition.js","../node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","../node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","../node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","../node_modules/mdast-util-to-markdown/lib/handle/heading.js","../node_modules/mdast-util-to-markdown/lib/handle/html.js","../node_modules/mdast-util-to-markdown/lib/handle/image.js","../node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","../node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","../node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","../node_modules/mdast-util-to-markdown/lib/handle/link.js","../node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","../node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule.js","../node_modules/mdast-util-to-markdown/lib/handle/list.js","../node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","../node_modules/mdast-util-to-markdown/lib/handle/list-item.js","../node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","../node_modules/mdast-util-phrasing/lib/index.js","../node_modules/mdast-util-to-markdown/lib/handle/root.js","../node_modules/mdast-util-to-markdown/lib/util/check-strong.js","../node_modules/mdast-util-to-markdown/lib/handle/strong.js","../node_modules/mdast-util-to-markdown/lib/handle/text.js","../node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","../node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","../node_modules/mdast-util-to-markdown/lib/handle/index.js","../node_modules/mdast-util-gfm-table/lib/index.js","../node_modules/mdast-util-gfm-task-list-item/lib/index.js","../node_modules/mdast-util-gfm/lib/index.js","../node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","../node_modules/micromark-extension-gfm-footnote/lib/syntax.js","../node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","../node_modules/micromark-extension-gfm-table/lib/edit-map.js","../node_modules/micromark-extension-gfm-table/lib/infer.js","../node_modules/micromark-extension-gfm-table/lib/syntax.js","../node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","../node_modules/micromark-extension-gfm/index.js","../node_modules/remark-gfm/lib/index.js","../node_modules/mdast-util-newline-to-break/lib/index.js","../node_modules/remark-breaks/lib/index.js","../node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","../node_modules/mdast-util-to-hast/lib/handlers/break.js","../node_modules/mdast-util-to-hast/lib/handlers/code.js","../node_modules/mdast-util-to-hast/lib/handlers/delete.js","../node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","../node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/heading.js","../node_modules/mdast-util-to-hast/lib/handlers/html.js","../node_modules/mdast-util-to-hast/lib/revert.js","../node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/image.js","../node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","../node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","../node_modules/mdast-util-to-hast/lib/handlers/link.js","../node_modules/mdast-util-to-hast/lib/handlers/list-item.js","../node_modules/mdast-util-to-hast/lib/handlers/list.js","../node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","../node_modules/mdast-util-to-hast/lib/handlers/root.js","../node_modules/mdast-util-to-hast/lib/handlers/strong.js","../node_modules/unist-util-position/lib/index.js","../node_modules/mdast-util-to-hast/lib/handlers/table.js","../node_modules/mdast-util-to-hast/lib/handlers/table-row.js","../node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","../node_modules/trim-lines/index.js","../node_modules/mdast-util-to-hast/lib/handlers/text.js","../node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","../node_modules/mdast-util-to-hast/lib/handlers/index.js","../node_modules/@ungap/structured-clone/esm/types.js","../node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/@ungap/structured-clone/esm/index.js","../node_modules/mdast-util-to-hast/lib/footer.js","../node_modules/mdast-util-to-hast/lib/state.js","../node_modules/mdast-util-to-hast/lib/index.js","../node_modules/remark-rehype/lib/index.js","../node_modules/property-information/lib/util/schema.js","../node_modules/property-information/lib/util/merge.js","../node_modules/property-information/lib/normalize.js","../node_modules/property-information/lib/util/info.js","../node_modules/property-information/lib/util/types.js","../node_modules/property-information/lib/util/defined-info.js","../node_modules/property-information/lib/util/create.js","../node_modules/property-information/lib/xlink.js","../node_modules/property-information/lib/xml.js","../node_modules/property-information/lib/util/case-sensitive-transform.js","../node_modules/property-information/lib/util/case-insensitive-transform.js","../node_modules/property-information/lib/xmlns.js","../node_modules/property-information/lib/aria.js","../node_modules/property-information/lib/html.js","../node_modules/property-information/lib/svg.js","../node_modules/property-information/lib/find.js","../node_modules/property-information/lib/hast-to-react.js","../node_modules/property-information/index.js","../node_modules/space-separated-tokens/index.js","../node_modules/comma-separated-tokens/index.js","../node_modules/inline-style-parser/index.js","../node_modules/style-to-object/index.js","../node_modules/web-namespaces/index.js","../node_modules/hast-to-hyperscript/lib/index.js","../node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-is/convert.js","../node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit-parents/index.js","../node_modules/@mapbox/hast-util-table-cell-style/node_modules/unist-util-visit/index.js","../node_modules/@mapbox/hast-util-table-cell-style/index.js","../node_modules/hast-util-whitespace/index.js","../node_modules/rehype-react/lib/index.js","../node_modules/hast-util-is-element/lib/index.js","../node_modules/is-absolute-url/index.js","../node_modules/rehype-external-links/lib/index.js","../node_modules/@nextcloud/vue/dist/chunks/NcRichText-LKlliqlj.mjs","../node_modules/@nextcloud/vue/dist/chunks/NcUserBubble-2gGv-0Sv.mjs","../node_modules/core-js/internals/array-method-has-species-support.js","../node_modules/core-js/modules/es.array.map.js","../node_modules/core-js/internals/regexp-flags.js","../node_modules/core-js/internals/regexp-sticky-helpers.js","../node_modules/core-js/internals/regexp-unsupported-dot-all.js","../node_modules/core-js/internals/regexp-unsupported-ncg.js","../node_modules/core-js/internals/regexp-exec.js","../node_modules/core-js/modules/es.regexp.exec.js","../node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","../node_modules/core-js/internals/is-regexp.js","../node_modules/core-js/internals/a-constructor.js","../node_modules/core-js/internals/species-constructor.js","../node_modules/core-js/internals/advance-string-index.js","../node_modules/core-js/internals/regexp-exec-abstract.js","../node_modules/core-js/modules/es.string.split.js","../node_modules/core-js/internals/get-substitution.js","../node_modules/core-js/modules/es.string.replace.js","../node_modules/core-js/modules/es.array.filter.js","../node_modules/core-js/internals/array-reduce.js","../node_modules/core-js/internals/array-method-is-strict.js","../node_modules/core-js/internals/engine-is-node.js","../node_modules/core-js/modules/es.array.reduce.js","../node_modules/core-js/internals/does-not-exceed-safe-integer.js","../node_modules/core-js/modules/es.array.concat.js","../node_modules/@nextcloud/paths/dist/index.js","../src/components/richArgumentsTypes/FileRichArgument.vue","../src/components/richArgumentsTypes/EmailRichArgument.vue","../src/components/richArgumentsTypes/SystemTagRichArgument.vue","../src/components/richArgumentsTypes/CalendarRichArgument.vue","../src/components/richArgumentsTypes/CalendarEventRichArgument.vue","../src/components/richArgumentsTypes/OpenGraphRichArgument.vue","../src/components/richArgumentsTypes/AddressBookRichArgument.vue","../src/components/richArgumentsTypes/UnknownArgument.vue","../src/components/richArgumentsTypes/UnknownLinkArgument.vue","../src/utils/richObjects.ts","../src/components/activities/CommentActivity.vue","../src/components/activities/GenericActivity.vue","../src/components/activities/PluginActivity.vue","../src/components/Activity.vue"],"sourcesContent":["import { ref as s, readonly as t } from \"vue\";\n/**\n * @copyright Copyright (c) 2023 Grigorii K. Shartsev <me@shgk.me>\n *\n * @author Grigorii K. Shartsev <me@shgk.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst n = 1024, i = n / 2, e = (r) => document.documentElement.clientWidth < r, o = s(e(n)), l = s(e(i));\nwindow.addEventListener(\"resize\", () => {\n  o.value = e(n), l.value = e(i);\n}, { passive: !0 });\nfunction u() {\n  return t(o);\n}\nfunction a() {\n  return t(l);\n}\nconst M = t(o);\nexport {\n  n as MOBILE_BREAKPOINT,\n  i as MOBILE_SMALL_BREAKPOINT,\n  M as isMobileState,\n  u as useIsMobile,\n  a as useIsSmallMobile\n};\n","import '../assets/NcButton-4Wj3KJn8.css';\nimport { n as p } from \"../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst c = {\n  name: \"NcButton\",\n  inject: {\n    getNcPopoverTriggerAttrs: {\n      from: \"NcPopover:trigger:attrs\",\n      default: () => () => ({})\n    }\n  },\n  props: {\n    /**\n     * Set the text and icon alignment\n     *\n     * @default 'center'\n     */\n    alignment: {\n      type: String,\n      default: \"center\",\n      validator: (t) => [\"start\", \"start-reverse\", \"center\", \"center-reverse\", \"end\", \"end-reverse\"].includes(t)\n    },\n    /**\n     * Toggles the disabled state of the button on and off.\n     */\n    disabled: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Specifies the button type\n     * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n     * the default button style will be applied.\n     */\n    type: {\n      type: String,\n      validator(t) {\n        return [\"primary\", \"secondary\", \"tertiary\", \"tertiary-no-background\", \"tertiary-on-primary\", \"error\", \"warning\", \"success\"].indexOf(t) !== -1;\n      },\n      default: \"secondary\"\n    },\n    /**\n     * Specifies the button native type\n     * Accepted values: submit, reset, button. If left empty,\n     * the default \"button\" type will be used.\n     */\n    nativeType: {\n      type: String,\n      validator(t) {\n        return [\"submit\", \"reset\", \"button\"].indexOf(t) !== -1;\n      },\n      default: \"button\"\n    },\n    /**\n     * Specifies whether the button should span all the available width.\n     * By default, buttons span the whole width of the container.\n     */\n    wide: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Always try to provide an aria-label to your button. Make it more\n     * specific than the button's name by provide some more context. E.g. if\n     * the name of the button is \"send\" in the Mail app, the aria label could\n     * be \"Send email\".\n     */\n    ariaLabel: {\n      type: String,\n      default: null\n    },\n    /**\n     * Providing the href attribute turns the button component into an `a`\n     * element.\n     */\n    href: {\n      type: String,\n      default: null\n    },\n    /**\n     * Providing the download attribute with href downloads file when clicking.\n     */\n    download: {\n      type: String,\n      default: null\n    },\n    /**\n     * Providing the to attribute turns the button component into a `router-link`\n     * element. Takes precedence over the href attribute.\n     */\n    to: {\n      type: [String, Object],\n      default: null\n    },\n    /**\n     * Pass in `true` if you want the matching behaviour of `router-link` to\n     * be non-inclusive: https://router.vuejs.org/api/#exact\n     */\n    exact: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n     * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n     * otherwise root element will inherit incorrect aria-hidden.\n     */\n    ariaHidden: {\n      type: Boolean,\n      default: null\n    },\n    /**\n     * The pressed state of the button if it has a checked state\n     * This will add the `aria-pressed` attribute and for the button to have the primary style in checked state.\n     *\n     * Pressed state is not supported for links\n     */\n    pressed: {\n      type: Boolean,\n      default: null\n    }\n  },\n  emits: [\"update:pressed\", \"click\"],\n  computed: {\n    /**\n     * The real type to be used for the button, enforces `primary` for pressed state and, if stateful button, any other type for not pressed state\n     * Otherwise the type property is used.\n     */\n    realType() {\n      return this.pressed ? \"primary\" : this.pressed === !1 && this.type === \"primary\" ? \"secondary\" : this.type;\n    },\n    /**\n     * The flexbox alignment of the button content\n     */\n    flexAlignment() {\n      return this.alignment.split(\"-\")[0];\n    },\n    /**\n     * If the button content should be reversed (icon on the end)\n     */\n    isReverseAligned() {\n      return this.alignment.includes(\"-\");\n    },\n    ncPopoverTriggerAttrs() {\n      return this.getNcPopoverTriggerAttrs();\n    }\n  },\n  /**\n   * The render function to display the component\n   *\n   * @param {Function} h The function to create VNodes\n   * @return {object|undefined} The created VNode\n   */\n  render(t) {\n    const r = !!this.$slots.default, n = this.$slots?.icon;\n    !r && !this.ariaLabel && console.warn(\n      \"You need to fill either the text or the ariaLabel props in the button component.\",\n      {\n        text: this.$slots.default?.[0]?.text,\n        ariaLabel: this.ariaLabel\n      },\n      this\n    );\n    const e = this.to || this.href, s = !e && typeof this.pressed == \"boolean\", i = ({ href: a, navigate: o, isActive: u, isExactActive: d } = {}) => t(\n      e ? \"a\" : \"button\",\n      {\n        class: [\n          \"button-vue\",\n          {\n            \"button-vue--icon-only\": n && !r,\n            \"button-vue--text-only\": r && !n,\n            \"button-vue--icon-and-text\": n && r,\n            [`button-vue--vue-${this.realType}`]: this.realType,\n            \"button-vue--wide\": this.wide,\n            [`button-vue--${this.flexAlignment}`]: this.flexAlignment !== \"center\",\n            \"button-vue--reverse\": this.isReverseAligned,\n            active: u,\n            \"router-link-exact-active\": d\n          }\n        ],\n        attrs: {\n          \"aria-label\": this.ariaLabel,\n          \"aria-pressed\": s ? this.pressed.toString() : void 0,\n          disabled: this.disabled,\n          type: e ? null : this.nativeType,\n          role: e ? \"button\" : null,\n          href: this.to ? a : this.href || null,\n          target: e ? \"_self\" : null,\n          rel: e ? \"nofollow noreferrer noopener\" : null,\n          download: !this.to && this.href && this.download ? this.download : null,\n          // If this button is used as a popover trigger, we need to apply trigger attrs, e.g. aria attributes\n          ...this.ncPopoverTriggerAttrs,\n          // Inherit all the component attrs\n          ...this.$attrs\n        },\n        on: {\n          ...this.$listeners,\n          click: (l) => {\n            s && this.$emit(\"update:pressed\", !this.pressed), this.$emit(\"click\", l), o?.(l);\n          }\n        }\n      },\n      [\n        t(\"span\", { class: \"button-vue__wrapper\" }, [\n          n ? t(\n            \"span\",\n            {\n              class: \"button-vue__icon\",\n              attrs: {\n                \"aria-hidden\": \"true\"\n              }\n            },\n            [this.$slots.icon]\n          ) : null,\n          r ? t(\"span\", { class: \"button-vue__text\" }, [this.$slots.default]) : null\n        ])\n      ]\n    );\n    return this.to ? t(\"router-link\", {\n      props: {\n        custom: !0,\n        to: this.to,\n        exact: this.exact\n      },\n      scopedSlots: {\n        default: i\n      }\n    }) : i();\n  }\n}, h = null, f = null;\nvar y = /* @__PURE__ */ p(\n  c,\n  h,\n  f,\n  !1,\n  null,\n  \"fe3b5af5\",\n  null,\n  null\n);\nconst g = y.exports;\nexport {\n  g as default\n};\n","import '../assets/NcIconSvgWrapper-KLotijwU.css';\nimport a, { useCssVars as o } from \"vue\";\nimport u from \"dompurify\";\nimport { n as p } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst r = {\n  name: \"NcIconSvgWrapper\",\n  props: {\n    /**\n     * Set if the icon should be used as inline content e.g. within text.\n     * By default the icon is made a block element for use inside `icon`-slots.\n     */\n    inline: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Raw SVG string to render\n     */\n    svg: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Label of the icon, used in aria-label\n     */\n    name: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Raw SVG path to render. Takes precedence over the SVG string in the `svg` prop.\n     */\n    path: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Size of the icon to show. Only use if not using within an icon slot.\n     * Defaults to 20px which is the Nextcloud icon size for all icon slots.\n     * @default 20\n     */\n    size: {\n      type: [Number, String],\n      default: 20,\n      validator: (t) => typeof t == \"number\" || t === \"auto\"\n    }\n  },\n  computed: {\n    /**\n     * Icon size used in CSS\n     */\n    iconSize() {\n      return typeof this.size == \"number\" ? `${this.size}px` : this.size;\n    },\n    cleanSvg() {\n      if (!this.svg || this.path)\n        return;\n      const t = u.sanitize(this.svg), e = new DOMParser().parseFromString(t, \"image/svg+xml\");\n      return e.querySelector(\"parsererror\") ? (a.util.warn(\"SVG is not valid\"), \"\") : (e.documentElement.id && e.documentElement.removeAttribute(\"id\"), e.documentElement.outerHTML);\n    },\n    attributes() {\n      return {\n        class: [\"icon-vue\", { \"icon-vue--inline\": this.inline }],\n        role: \"img\",\n        \"aria-hidden\": this.name ? void 0 : !0,\n        \"aria-label\": this.name || void 0\n      };\n    }\n  }\n}, s = () => {\n  o((t, e) => ({\n    \"758c7a6a\": t.iconSize\n  }));\n}, i = r.setup;\nr.setup = i ? (t, e) => (s(), i(t, e)) : s;\nconst l = r;\nvar c = function() {\n  var e = this, n = e._self._c;\n  return e.cleanSvg ? n(\"span\", e._b({ domProps: { innerHTML: e._s(e.cleanSvg) } }, \"span\", e.attributes, !1)) : n(\"span\", e._b({}, \"span\", e.attributes, !1), [n(\"svg\", { attrs: { viewBox: \"0 0 24 24\", xmlns: \"http://www.w3.org/2000/svg\" } }, [n(\"path\", { attrs: { d: e.path } })])]);\n}, m = [], _ = /* @__PURE__ */ p(\n  l,\n  c,\n  m,\n  !1,\n  null,\n  \"74df2152\",\n  null,\n  null\n);\nconst g = _.exports;\nexport {\n  g as N\n};\n",";(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        var flags = null,\n            parsedParts = false,\n            isNowValid = m._d && !isNaN(m._d.getTime());\n        if (isNowValid) {\n            flags = getParsingFlags(m);\n            parsedParts = some.call(flags.parsedDateParts, function (i) {\n                return i != null;\n            });\n            isNowValid =\n                flags.overflow < 0 &&\n                !flags.empty &&\n                !flags.invalidEra &&\n                !flags.invalidMonth &&\n                !flags.invalidWeekday &&\n                !flags.weekdayMismatch &&\n                !flags.nullInput &&\n                !flags.invalidFormat &&\n                !flags.userInvalidated &&\n                (!flags.meridiem || (flags.meridiem && parsedParts));\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n        }\n        if (Object.isFrozen == null || !Object.isFrozen(m)) {\n            m._isValid = isNowValid;\n        } else {\n            return isNowValid;\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {\n        D: 'date',\n        dates: 'date',\n        date: 'date',\n        d: 'day',\n        days: 'day',\n        day: 'day',\n        e: 'weekday',\n        weekdays: 'weekday',\n        weekday: 'weekday',\n        E: 'isoWeekday',\n        isoweekdays: 'isoWeekday',\n        isoweekday: 'isoWeekday',\n        DDD: 'dayOfYear',\n        dayofyears: 'dayOfYear',\n        dayofyear: 'dayOfYear',\n        h: 'hour',\n        hours: 'hour',\n        hour: 'hour',\n        ms: 'millisecond',\n        milliseconds: 'millisecond',\n        millisecond: 'millisecond',\n        m: 'minute',\n        minutes: 'minute',\n        minute: 'minute',\n        M: 'month',\n        months: 'month',\n        month: 'month',\n        Q: 'quarter',\n        quarters: 'quarter',\n        quarter: 'quarter',\n        s: 'second',\n        seconds: 'second',\n        second: 'second',\n        gg: 'weekYear',\n        weekyears: 'weekYear',\n        weekyear: 'weekYear',\n        GG: 'isoWeekYear',\n        isoweekyears: 'isoWeekYear',\n        isoweekyear: 'isoWeekYear',\n        w: 'week',\n        weeks: 'week',\n        week: 'week',\n        W: 'isoWeek',\n        isoweeks: 'isoWeek',\n        isoweek: 'isoWeek',\n        y: 'year',\n        years: 'year',\n        year: 'year',\n    };\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {\n        date: 9,\n        day: 11,\n        weekday: 11,\n        isoWeekday: 11,\n        dayOfYear: 4,\n        hour: 13,\n        millisecond: 16,\n        minute: 14,\n        month: 8,\n        quarter: 7,\n        second: 15,\n        weekYear: 1,\n        isoWeekYear: 1,\n        week: 5,\n        isoWeek: 5,\n        year: 1,\n    };\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        match1to2NoLeadingZero = /^[1-9]\\d?/, //         1-99\n        match1to2HasZero = /^([1-9]\\d|\\d)/, //           0-99\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        if (!mom.isValid()) {\n            return NaN;\n        }\n\n        var d = mom._d,\n            isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n            case 'Seconds':\n                return isUTC ? d.getUTCSeconds() : d.getSeconds();\n            case 'Minutes':\n                return isUTC ? d.getUTCMinutes() : d.getMinutes();\n            case 'Hours':\n                return isUTC ? d.getUTCHours() : d.getHours();\n            case 'Date':\n                return isUTC ? d.getUTCDate() : d.getDate();\n            case 'Day':\n                return isUTC ? d.getUTCDay() : d.getDay();\n            case 'Month':\n                return isUTC ? d.getUTCMonth() : d.getMonth();\n            case 'FullYear':\n                return isUTC ? d.getUTCFullYear() : d.getFullYear();\n            default:\n                return NaN; // Just in case\n        }\n    }\n\n    function set$1(mom, unit, value) {\n        var d, isUTC, year, month, date;\n\n        if (!mom.isValid() || isNaN(value)) {\n            return;\n        }\n\n        d = mom._d;\n        isUTC = mom._isUTC;\n\n        switch (unit) {\n            case 'Milliseconds':\n                return void (isUTC\n                    ? d.setUTCMilliseconds(value)\n                    : d.setMilliseconds(value));\n            case 'Seconds':\n                return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n            case 'Minutes':\n                return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n            case 'Hours':\n                return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n            case 'Date':\n                return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n            // case 'Day': // Not real\n            //    return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n            // case 'Month': // Not used because we need to pass two variables\n            //     return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n            case 'FullYear':\n                break; // See below ...\n            default:\n                return; // Just in case\n        }\n\n        year = value;\n        month = mom.month();\n        date = mom.date();\n        date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n        void (isUTC\n            ? d.setUTCFullYear(year, month, date)\n            : d.setFullYear(year, month, date));\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // PARSING\n\n    addRegexToken('M', match1to2, match1to2NoLeadingZero);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        var month = value,\n            date = mom.date();\n\n        date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n        void (mom._isUTC\n            ? mom._d.setUTCMonth(month, date)\n            : mom._d.setMonth(month, date));\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            shortP,\n            longP;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortP = regexEscape(this.monthsShort(mom, ''));\n            longP = regexEscape(this.months(mom, ''));\n            shortPieces.push(shortP);\n            longPieces.push(longP);\n            mixedPieces.push(longP);\n            mixedPieces.push(shortP);\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // PARSING\n\n    addRegexToken('w', match1to2, match1to2NoLeadingZero);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2, match1to2NoLeadingZero);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n              ? weekdays[m.day()]\n              : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n              ? this._weekdaysShort[m.day()]\n              : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n              ? this._weekdaysMin[m.day()]\n              : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        var day = get(this, 'Day');\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2, match1to2HasZero);\n    addRegexToken('h', match1to2, match1to2NoLeadingZero);\n    addRegexToken('k', match1to2, match1to2NoLeadingZero);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        // Ensure name is available and function returns boolean\n        return !!(name && name.match('^[^/\\\\\\\\]*$'));\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                      ? DATE\n                      : a[HOUR] < 0 ||\n                          a[HOUR] > 24 ||\n                          (a[HOUR] === 24 &&\n                              (a[MINUTE] !== 0 ||\n                                  a[SECOND] !== 0 ||\n                                  a[MILLISECOND] !== 0))\n                        ? HOUR\n                        : a[MINUTE] < 0 || a[MINUTE] > 59\n                          ? MINUTE\n                          : a[SECOND] < 0 || a[SECOND] > 59\n                            ? SECOND\n                            : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                              ? MILLISECOND\n                              : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n              ? 'lastWeek'\n              : diff < 0\n                ? 'lastDay'\n                : diff < 1\n                  ? 'sameDay'\n                  : diff < 2\n                    ? 'nextDay'\n                    : diff < 7\n                      ? 'nextWeek'\n                      : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            erasName,\n            erasAbbr,\n            erasNarrow,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            erasName = regexEscape(eras[i].name);\n            erasAbbr = regexEscape(eras[i].abbr);\n            erasNarrow = regexEscape(eras[i].narrow);\n\n            namePieces.push(erasName);\n            abbrPieces.push(erasAbbr);\n            narrowPieces.push(erasNarrow);\n            mixedPieces.push(erasName);\n            mixedPieces.push(erasAbbr);\n            mixedPieces.push(erasNarrow);\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday() + this.localeData()._week.dow,\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // PARSING\n\n    addRegexToken('D', match1to2, match1to2NoLeadingZero);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // PARSING\n\n    addRegexToken('m', match1to2, match1to2HasZero);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // PARSING\n\n    addRegexToken('s', match1to2, match1to2HasZero);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y'),\n        valueOf$1 = asMilliseconds;\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.30.1';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months$1 = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    hooks.defineLocale('ar-dz', {\n        months: months$1,\n        monthsShort: months$1,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm$1 = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals$1 = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize$1 = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm$1(number),\n                    str = plurals$1[u][pluralForm$1(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months$2 = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    hooks.defineLocale('ar-ly', {\n        months: months$2,\n        monthsShort: months$2,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize$1('s'),\n            ss: pluralize$1('s'),\n            m: pluralize$1('m'),\n            mm: pluralize$1('m'),\n            h: pluralize$1('h'),\n            hh: pluralize$1('h'),\n            d: pluralize$1('d'),\n            dd: pluralize$1('d'),\n            M: pluralize$1('M'),\n            MM: pluralize$1('M'),\n            y: pluralize$1('y'),\n            yy: pluralize$1('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$1 = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    hooks.defineLocale('ar-ps', {\n        months: 'كانون الثاني_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_تشري الأوّل_تشرين الثاني_كانون الأوّل'.split(\n            '_'\n        ),\n        monthsShort:\n            'ك٢_شباط_آذار_نيسان_أيّار_حزيران_تمّوز_آب_أيلول_ت١_ت٢_ك١'.split('_'),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('') // reversed since negative lookbehind not supported everywhere\n                .reverse()\n                .join('')\n                .replace(/[١٢](?![\\u062a\\u0643])/g, function (match) {\n                    return numberMap[match];\n                })\n                .split('')\n                .reverse()\n                .join('')\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap$1[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$2 = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap$1 = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    hooks.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap$1[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap$2[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$3 = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap$2 = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm$2 = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                  ? 1\n                  : n === 2\n                    ? 2\n                    : n % 100 >= 3 && n % 100 <= 10\n                      ? 3\n                      : n % 100 >= 11\n                        ? 4\n                        : 5;\n        },\n        plurals$2 = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize$2 = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm$2(number),\n                    str = plurals$2[u][pluralForm$2(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months$3 = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    hooks.defineLocale('ar', {\n        months: months$3,\n        monthsShort: months$3,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize$2('s'),\n            ss: pluralize$2('s'),\n            m: pluralize$2('m'),\n            mm: pluralize$2('m'),\n            h: pluralize$2('h'),\n            hh: pluralize$2('h'),\n            d: pluralize$2('d'),\n            dd: pluralize$2('d'),\n            M: pluralize$2('M'),\n            MM: pluralize$2('M'),\n            y: pluralize$2('y'),\n            yy: pluralize$2('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap$2[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap$3[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    hooks.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    hooks.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$4 = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap$3 = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    hooks.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap$3[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$4[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$5 = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap$4 = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    hooks.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap$4[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$5[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$6 = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap$5 = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    hooks.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap$5[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$6[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex$1 =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    hooks.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex$1,\n        monthsShortRegex: monthsRegex$1,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 'm':\n                return withoutSuffix\n                    ? 'jedna minuta'\n                    : isFuture\n                      ? 'jednu minutu'\n                      : 'jedne minute';\n        }\n    }\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jedan sat';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    hooks.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: processRelativeTime,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$4 = {\n            standalone:\n                'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                    '_'\n                ),\n            format: 'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                '_'\n            ),\n            isFormat: /DD?[o.]?(\\[[^\\[\\]]*\\]|\\s)+MMMM/,\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse$1 = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex$2 =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural$1(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate$1(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$1(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$1(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$1(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$1(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$1(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$1(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    hooks.defineLocale('cs', {\n        months: months$4,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex$2,\n        monthsShortRegex: monthsRegex$2,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse$1,\n        longMonthsParse: monthsParse$1,\n        shortMonthsParse: monthsParse$1,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate$1,\n            ss: translate$1,\n            m: translate$1,\n            mm: translate$1,\n            h: translate$1,\n            hh: translate$1,\n            d: translate$1,\n            dd: translate$1,\n            M: translate$1,\n            MM: translate$1,\n            y: translate$1,\n            yy: translate$1,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                      ? 'тан'\n                      : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$1(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    hooks.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime$1,\n            mm: '%d Minuten',\n            h: processRelativeTime$1,\n            hh: '%d Stunden',\n            d: processRelativeTime$1,\n            dd: processRelativeTime$1,\n            w: processRelativeTime$1,\n            ww: '%d Wochen',\n            M: processRelativeTime$1,\n            MM: processRelativeTime$1,\n            y: processRelativeTime$1,\n            yy: processRelativeTime$1,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$2(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    hooks.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime$2,\n            mm: '%d Minuten',\n            h: processRelativeTime$2,\n            hh: '%d Stunden',\n            d: processRelativeTime$2,\n            dd: processRelativeTime$2,\n            w: processRelativeTime$2,\n            ww: '%d Wochen',\n            M: processRelativeTime$2,\n            MM: processRelativeTime$2,\n            y: processRelativeTime$2,\n            yy: processRelativeTime$2,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$3(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    hooks.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime$3,\n            mm: '%d Minuten',\n            h: processRelativeTime$3,\n            hh: '%d Stunden',\n            d: processRelativeTime$3,\n            dd: processRelativeTime$3,\n            w: processRelativeTime$3,\n            ww: '%d Wochen',\n            M: processRelativeTime$3,\n            MM: processRelativeTime$3,\n            y: processRelativeTime$3,\n            yy: processRelativeTime$3,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$5 = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    hooks.defineLocale('dv', {\n        months: months$5,\n        monthsShort: months$5,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function isFunction$1(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    hooks.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction$1(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort$1 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse$2 = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex$3 =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    hooks.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort$1[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex$3,\n        monthsShortRegex: monthsRegex$3,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse$2,\n        longMonthsParse: monthsParse$2,\n        shortMonthsParse: monthsParse$2,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortDot$1 =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort$2 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse$3 = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex$4 =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    hooks.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot$1;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort$2[m.month()];\n            } else {\n                return monthsShortDot$1[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex$4,\n        monthsShortRegex: monthsRegex$4,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse$3,\n        longMonthsParse: monthsParse$3,\n        shortMonthsParse: monthsParse$3,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortDot$2 =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort$3 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse$4 = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex$5 =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    hooks.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot$2;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort$3[m.month()];\n            } else {\n                return monthsShortDot$2[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex$5,\n        monthsShortRegex: monthsRegex$5,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse$4,\n        longMonthsParse: monthsParse$4,\n        shortMonthsParse: monthsParse$4,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortDot$3 =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort$4 = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse$5 = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex$6 =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    hooks.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot$3;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort$4[m.month()];\n            } else {\n                return monthsShortDot$3[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex$6,\n        monthsShortRegex: monthsRegex$6,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse$5,\n        longMonthsParse: monthsParse$5,\n        shortMonthsParse: monthsParse$5,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$4(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    hooks.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime$4,\n            ss: processRelativeTime$4,\n            m: processRelativeTime$4,\n            mm: processRelativeTime$4,\n            h: processRelativeTime$4,\n            hh: processRelativeTime$4,\n            d: processRelativeTime$4,\n            dd: '%d päeva',\n            M: processRelativeTime$4,\n            MM: processRelativeTime$4,\n            y: processRelativeTime$4,\n            yy: processRelativeTime$4,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$7 = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap$6 = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    hooks.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap$6[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap$7[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate$2(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    hooks.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate$2,\n            ss: translate$2,\n            m: translate$2,\n            mm: translate$2,\n            h: translate$2,\n            hh: translate$2,\n            d: translate$2,\n            dd: translate$2,\n            M: translate$2,\n            MM: translate$2,\n            y: translate$2,\n            yy: translate$2,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex$1 =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex$1 =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex$7 =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse$6 = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    hooks.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex$7,\n        monthsShortRegex: monthsRegex$7,\n        monthsStrictRegex: monthsStrictRegex$1,\n        monthsShortStrictRegex: monthsShortStrictRegex$1,\n        monthsParse: monthsParse$6,\n        longMonthsParse: monthsParse$6,\n        shortMonthsParse: monthsParse$6,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    hooks.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$6 = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort$5 = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays$1 = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    hooks.defineLocale('ga', {\n        months: months$6,\n        monthsShort: monthsShort$5,\n        monthsParseExact: true,\n        weekdays: weekdays$1,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$7 = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort$6 = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays$2 = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort$1 = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin$1 = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    hooks.defineLocale('gd', {\n        months: months$7,\n        monthsShort: monthsShort$6,\n        monthsParseExact: true,\n        weekdays: weekdays$2,\n        weekdaysShort: weekdaysShort$1,\n        weekdaysMin: weekdaysMin$1,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$5(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    hooks.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime$5,\n            ss: processRelativeTime$5,\n            m: processRelativeTime$5,\n            mm: processRelativeTime$5,\n            h: processRelativeTime$5,\n            hh: processRelativeTime$5,\n            d: processRelativeTime$5,\n            dd: processRelativeTime$5,\n            M: processRelativeTime$5,\n            MM: processRelativeTime$5,\n            y: processRelativeTime$5,\n            yy: processRelativeTime$5,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$6(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    hooks.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime$6,\n            ss: processRelativeTime$6,\n            m: processRelativeTime$6,\n            mm: processRelativeTime$6,\n            h: processRelativeTime$6,\n            hh: processRelativeTime$6,\n            d: processRelativeTime$6,\n            dd: processRelativeTime$6,\n            M: processRelativeTime$6,\n            MM: processRelativeTime$6,\n            y: processRelativeTime$6,\n            yy: processRelativeTime$6,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$8 = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap$7 = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    hooks.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap$7[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$8[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$9 = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap$8 = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse$7 = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    hooks.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse$7,\n        longMonthsParse: monthsParse$7,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap$8[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$9[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function translate$3(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    hooks.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate$3,\n            m: translate$3,\n            mm: translate$3,\n            h: translate$3,\n            hh: translate$3,\n            d: 'dan',\n            dd: translate$3,\n            M: 'mjesec',\n            MM: translate$3,\n            y: 'godinu',\n            yy: translate$3,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate$4(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    hooks.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate$4,\n            ss: translate$4,\n            m: translate$4,\n            mm: translate$4,\n            h: translate$4,\n            hh: translate$4,\n            d: translate$4,\n            dd: translate$4,\n            M: translate$4,\n            MM: translate$4,\n            y: translate$4,\n            yy: translate$4,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function plural$2(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate$5(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural$2(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural$2(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural$2(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural$2(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural$2(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural$2(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    hooks.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate$5,\n            ss: translate$5,\n            m: translate$5,\n            mm: translate$5,\n            h: 'klukkustund',\n            hh: translate$5,\n            d: translate$5,\n            dd: translate$5,\n            M: translate$5,\n            MM: translate$5,\n            y: translate$5,\n            yy: translate$5,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                  ? ' '\n                                  : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var suffixes$1 = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    hooks.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes$1[number] || suffixes$1[a] || suffixes$1[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$a = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap$9 = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    hooks.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap$9[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$a[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$b = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap$a = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    hooks.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap$a[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$b[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$7(num, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['çend sanîye', 'çend sanîyeyan'],\n            ss: [num + ' sanîye', num + ' sanîyeyan'],\n            m: ['deqîqeyek', 'deqîqeyekê'],\n            mm: [num + ' deqîqe', num + ' deqîqeyan'],\n            h: ['saetek', 'saetekê'],\n            hh: [num + ' saet', num + ' saetan'],\n            d: ['rojek', 'rojekê'],\n            dd: [num + ' roj', num + ' rojan'],\n            w: ['hefteyek', 'hefteyekê'],\n            ww: [num + ' hefte', num + ' hefteyan'],\n            M: ['mehek', 'mehekê'],\n            MM: [num + ' meh', num + ' mehan'],\n            y: ['salek', 'salekê'],\n            yy: [num + ' sal', num + ' salan'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    // function obliqueNumSuffix(num) {\n    //     if(num.includes(':'))\n    //         num = parseInt(num.split(':')[0]);\n    //     else\n    //         num = parseInt(num);\n    //     return num == 0 || num % 10 == 1 ? 'ê'\n    //                         : (num > 10 && num % 10 == 0 ? 'î' : 'an');\n    // }\n    function ezafeNumSuffix(num) {\n        num = '' + num;\n        var l = num.substring(num.length - 1),\n            ll = num.length > 1 ? num.substring(num.length - 2) : '';\n        if (\n            !(ll == 12 || ll == 13) &&\n            (l == '2' || l == '3' || ll == '50' || l == '70' || l == '80')\n        )\n            return 'yê';\n        return 'ê';\n    }\n\n    hooks.defineLocale('ku-kmr', {\n        // According to the spelling rules defined by the work group of Weqfa Mezopotamyayê (Mesopotamia Foundation)\n        // this should be: 'Kanûna Paşîn_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Çirîya Pêşîn_Çirîya Paşîn_Kanûna Pêşîn'\n        // But the names below are more well known and handy\n        months: 'Rêbendan_Sibat_Adar_Nîsan_Gulan_Hezîran_Tîrmeh_Tebax_Îlon_Cotmeh_Mijdar_Berfanbar'.split(\n            '_'\n        ),\n        monthsShort: 'Rêb_Sib_Ada_Nîs_Gul_Hez_Tîr_Teb_Îlo_Cot_Mij_Ber'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'Yekşem_Duşem_Sêşem_Çarşem_Pêncşem_În_Şemî'.split('_'),\n        weekdaysShort: 'Yek_Du_Sê_Çar_Pên_În_Şem'.split('_'),\n        weekdaysMin: 'Ye_Du_Sê_Ça_Pê_În_Şe'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'bn' : 'BN';\n            } else {\n                return isLower ? 'pn' : 'PN';\n            }\n        },\n        meridiemParse: /bn|BN|pn|PN/,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[a] YYYY[an]',\n            LLL: 'Do MMMM[a] YYYY[an] HH:mm',\n            LLLL: 'dddd, Do MMMM[a] YYYY[an] HH:mm',\n            ll: 'Do MMM[.] YYYY[an]',\n            lll: 'Do MMM[.] YYYY[an] HH:mm',\n            llll: 'ddd[.], Do MMM[.] YYYY[an] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Îro di saet] LT [de]',\n            nextDay: '[Sibê di saet] LT [de]',\n            nextWeek: 'dddd [di saet] LT [de]',\n            lastDay: '[Duh di saet] LT [de]',\n            lastWeek: 'dddd[a borî di saet] LT [de]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'di %s de',\n            past: 'berî %s',\n            s: processRelativeTime$7,\n            ss: processRelativeTime$7,\n            m: processRelativeTime$7,\n            mm: processRelativeTime$7,\n            h: processRelativeTime$7,\n            hh: processRelativeTime$7,\n            d: processRelativeTime$7,\n            dd: processRelativeTime$7,\n            w: processRelativeTime$7,\n            ww: processRelativeTime$7,\n            M: processRelativeTime$7,\n            MM: processRelativeTime$7,\n            y: processRelativeTime$7,\n            yy: processRelativeTime$7,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(?:yê|ê|\\.)/,\n        ordinal: function (num, period) {\n            var p = period.toLowerCase();\n            if (p.includes('w') || p.includes('m')) return num + '.';\n\n            return num + ezafeNumSuffix(num);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$c = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap$b = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months$8 = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    hooks.defineLocale('ku', {\n        months: months$8,\n        monthsShort: months$8,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap$b[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap$c[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var suffixes$2 = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    hooks.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes$2[number] || suffixes$2[a] || suffixes$2[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$8(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    hooks.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime$8,\n            mm: '%d Minutten',\n            h: processRelativeTime$8,\n            hh: '%d Stonnen',\n            d: processRelativeTime$8,\n            dd: '%d Deeg',\n            M: processRelativeTime$8,\n            MM: '%d Méint',\n            y: processRelativeTime$8,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n              ? forms(key)[1]\n              : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate$6(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    hooks.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate$6,\n            m: translateSingular,\n            mm: translate$6,\n            h: translateSingular,\n            hh: translate$6,\n            d: translateSingular,\n            dd: translate$6,\n            M: translateSingular,\n            MM: translate$6,\n            y: translateSingular,\n            yy: translate$6,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var units$1 = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format$1(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural$1(number, withoutSuffix, key) {\n        return number + ' ' + format$1(units$1[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format$1(units$1[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    hooks.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural$1,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural$1,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural$1,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural$1,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural$1,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural$1,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                  ? wordKey[1]\n                  : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    hooks.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function translate$7(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    hooks.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate$7,\n            ss: translate$7,\n            m: translate$7,\n            mm: translate$7,\n            h: translate$7,\n            hh: translate$7,\n            d: translate$7,\n            dd: translate$7,\n            M: translate$7,\n            MM: translate$7,\n            y: translate$7,\n            yy: translate$7,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$d = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap$c = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    hooks.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap$c[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$d[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$e = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap$d = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    hooks.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap$d[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$e[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'én time',\n            hh: '%d timer',\n            d: 'én dag',\n            dd: '%d dager',\n            w: 'én uke',\n            ww: '%d uker',\n            M: 'én måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$f = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap$e = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    hooks.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap$e[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$f[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots$1 =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots$1 =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse$8 = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex$8 =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    hooks.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots$1;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots$1[m.month()];\n            } else {\n                return monthsShortWithDots$1[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex$8,\n        monthsShortRegex: monthsRegex$8,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse$8,\n        longMonthsParse: monthsParse$8,\n        shortMonthsParse: monthsParse$8,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots$2 =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots$2 =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse$9 = [\n            /^jan/i,\n            /^feb/i,\n            /^(maart|mrt\\.?)$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex$9 =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    hooks.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots$2;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots$2[m.month()];\n            } else {\n                return monthsShortWithDots$2[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex$9,\n        monthsShortRegex: monthsRegex$9,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse$9,\n        longMonthsParse: monthsParse$9,\n        shortMonthsParse: monthsParse$9,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                      ? 'n'\n                      : number === 3\n                        ? 'r'\n                        : number === 4\n                          ? 't'\n                          : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$g = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap$f = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    hooks.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap$f[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$g[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse$a = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural$3(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate$8(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural$3(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural$3(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural$3(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural$3(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural$3(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural$3(number) ? 'lata' : 'lat');\n        }\n    }\n\n    hooks.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse$a,\n        longMonthsParse: monthsParse$a,\n        shortMonthsParse: monthsParse$a,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate$8,\n            m: translate$8,\n            mm: translate$8,\n            h: translate$8,\n            hh: translate$8,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate$8,\n            M: 'miesiąc',\n            MM: translate$8,\n            y: 'rok',\n            yy: translate$8,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural$2(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    hooks.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural$2,\n            m: 'un minut',\n            mm: relativeTimeWithPlural$2,\n            h: 'o oră',\n            hh: relativeTimeWithPlural$2,\n            d: 'o zi',\n            dd: relativeTimeWithPlural$2,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural$2,\n            M: 'o lună',\n            MM: relativeTimeWithPlural$2,\n            y: 'un an',\n            yy: relativeTimeWithPlural$2,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function plural$4(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural$3(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural$4(format[key], +number);\n        }\n    }\n    var monthsParse$b = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    hooks.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse$b,\n        longMonthsParse: monthsParse$b,\n        shortMonthsParse: monthsParse$b,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural$3,\n            m: relativeTimeWithPlural$3,\n            mm: relativeTimeWithPlural$3,\n            h: 'час',\n            hh: relativeTimeWithPlural$3,\n            d: 'день',\n            dd: relativeTimeWithPlural$3,\n            w: 'неделя',\n            ww: relativeTimeWithPlural$3,\n            M: 'месяц',\n            MM: relativeTimeWithPlural$3,\n            y: 'год',\n            yy: relativeTimeWithPlural$3,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$9 = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days$1 = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    hooks.defineLocale('sd', {\n        months: months$9,\n        monthsShort: months$9,\n        weekdays: days$1,\n        weekdaysShort: days$1,\n        weekdaysMin: days$1,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    hooks.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$a =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort$7 = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural$5(n) {\n        return n > 1 && n < 5;\n    }\n    function translate$9(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$5(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$5(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$5(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$5(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$5(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural$5(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    hooks.defineLocale('sk', {\n        months: months$a,\n        monthsShort: monthsShort$7,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate$9,\n            ss: translate$9,\n            m: translate$9,\n            mm: translate$9,\n            h: translate$9,\n            hh: translate$9,\n            d: translate$9,\n            dd: translate$9,\n            M: translate$9,\n            MM: translate$9,\n            y: translate$9,\n            yy: translate$9,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function processRelativeTime$9(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    hooks.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime$9,\n            ss: processRelativeTime$9,\n            m: processRelativeTime$9,\n            mm: processRelativeTime$9,\n            h: processRelativeTime$9,\n            hh: processRelativeTime$9,\n            d: processRelativeTime$9,\n            dd: processRelativeTime$9,\n            M: processRelativeTime$9,\n            MM: processRelativeTime$9,\n            y: processRelativeTime$9,\n            yy: processRelativeTime$9,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var translator$1 = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator$1.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator$1.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    hooks.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator$1.translate,\n            m: translator$1.translate,\n            mm: translator$1.translate,\n            h: translator$1.translate,\n            hh: translator$1.translate,\n            d: translator$1.translate,\n            dd: translator$1.translate,\n            M: translator$1.translate,\n            MM: translator$1.translate,\n            y: translator$1.translate,\n            yy: translator$1.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var translator$2 = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator$2.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator$2.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    hooks.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator$2.translate,\n            m: translator$2.translate,\n            mm: translator$2.translate,\n            h: translator$2.translate,\n            hh: translator$2.translate,\n            d: translator$2.translate,\n            dd: translator$2.translate,\n            M: translator$2.translate,\n            MM: translator$2.translate,\n            y: translator$2.translate,\n            yy: translator$2.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                          ? ':a'\n                          : b === 2\n                            ? ':a'\n                            : b === 3\n                              ? ':e'\n                              : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var symbolMap$h = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap$g = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    hooks.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap$g[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap$h[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var suffixes$3 = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    hooks.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes$3[number] || suffixes$3[a] || suffixes$3[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var suffixes$4 = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    hooks.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes$4[a] || suffixes$4[b] || suffixes$4[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'waQ'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'nem'\n                    : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                  ? time.slice(0, -3) + 'wen'\n                  : output.indexOf('DIS') !== -1\n                    ? time.slice(0, -3) + 'ben'\n                    : time + ' ret';\n        return time;\n    }\n\n    function translate$a(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    hooks.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate$a,\n            m: 'wa’ tup',\n            mm: translate$a,\n            h: 'wa’ rep',\n            hh: translate$a,\n            d: 'wa’ jaj',\n            dd: translate$a,\n            M: 'wa’ jar',\n            MM: translate$a,\n            y: 'wa’ DIS',\n            yy: translate$a,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var suffixes$5 = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    hooks.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes$5[a] || suffixes$5[b] || suffixes$5[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    hooks.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime$a,\n            ss: processRelativeTime$a,\n            m: processRelativeTime$a,\n            mm: processRelativeTime$a,\n            h: processRelativeTime$a,\n            hh: processRelativeTime$a,\n            d: processRelativeTime$a,\n            dd: processRelativeTime$a,\n            M: processRelativeTime$a,\n            MM: processRelativeTime$a,\n            y: processRelativeTime$a,\n            yy: processRelativeTime$a,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime$a(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n              ? format[key][0]\n              : format[key][1];\n    }\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    function plural$6(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n              ? forms[1]\n              : forms[2];\n    }\n    function relativeTimeWithPlural$4(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural$6(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n              ? 'genitive'\n              : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    hooks.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural$4,\n            m: relativeTimeWithPlural$4,\n            mm: relativeTimeWithPlural$4,\n            h: 'годину',\n            hh: relativeTimeWithPlural$4,\n            d: 'день',\n            dd: relativeTimeWithPlural$4,\n            M: 'місяць',\n            MM: relativeTimeWithPlural$4,\n            y: 'рік',\n            yy: relativeTimeWithPlural$4,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    var months$b = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days$2 = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    hooks.defineLocale('ur', {\n        months: months$b,\n        monthsShort: months$b,\n        weekdays: days$2,\n        weekdaysShort: days$2,\n        weekdaysMin: days$2,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                          ? 'st'\n                          : b === 2\n                            ? 'nd'\n                            : b === 3\n                              ? 'rd'\n                              : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    //! moment.js locale configuration\n\n    hooks.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    hooks.locale('en');\n\n    return hooks;\n\n})));\n","import n from \"moment/min/moment-with-locales.js\";\nimport { default as m } from \"moment/min/moment-with-locales.js\";\nimport o from \"node-gettext\";\nimport { getLocale as d } from \"@nextcloud/l10n\";\nconst s = d(), e = { ar: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"ثوانٍ\"] } } } }, ast: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, az: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"saniyə\"] } } } }, br: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"eilennoù\"] } } } }, ca: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segons\"] } } } }, cs_CZ: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekund(y)\"] } } } }, da: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekunder\"] } } } }, de: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"Sekunden\"] } } } }, de_DE: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"Sekunden\"] } } } }, el: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"δευτερόλεπτα\"] } } } }, en_GB: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"seconds\"] } } } }, eo: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekundoj\"] } } } }, es: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, es_AR: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, es_MX: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, et_EE: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekundid\"] } } } }, eu: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundo\"] } } } }, fa: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"ثانیه\"] } } } }, fi_FI: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekuntia\"] } } } }, fr: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"secondes\"] } } } }, gl: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, he: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"שניות\"] } } } }, hu_HU: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"másodperc\"] } } } }, id: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"detik\"] } } } }, is: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekúndur\"] } } } }, it: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"secondi\"] } } } }, ja_JP: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"秒\"] } } } }, kab: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"tasinin\"] } } } }, ko: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"초\"] } } } }, lo: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"ວິນາທີ\"] } } } }, lt_LT: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sek.\"] } } } }, lv: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekundes\"] } } } }, mk: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"секунди\"] } } } }, mn: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"секунд\"] } } } }, my: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"စက္ကန့်\"] } } } }, nb_NO: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekunder\"] } } } }, nl: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"seconden\"] } } } }, oc: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segondas\"] } } } }, pl: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekundy\"] } } } }, pt_BR: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, pt_PT: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"segundos\"] } } } }, ro: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"secunde\"] } } } }, ru: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"секунды\"] } } } }, si: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"තත්පර\"] } } } }, sk_SK: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekundy\"] } } } }, sl: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekunde\"] } } } }, sq: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekonda\"] } } } }, sr: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"секунде\"] } } } }, sv: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"sekunder\"] } } } }, th_TH: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"วินาที\"] } } } }, tr: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"saniye\"] } } } }, uk: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"секунд\"] } } } }, vi: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"giây\"] } } } }, zh_CN: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"秒\"] } } } }, zh_HK: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"秒\"] } } } }, zh_TW: { charset: \"utf-8\", translations: { \"\": { seconds: { msgid: \"seconds\", msgstr: [\"秒\"] } } } } };\nn.locale(s);\nif (s === \"en\" || s in e) {\n  const t = new o();\n  t.addTranslations(s, \"messages\", e[s]), t.setLocale(s), n.updateLocale(n.locale(), {\n    relativeTime: {\n      s: t.gettext(\"seconds\")\n    }\n  });\n}\nexport {\n  m as default\n};\n","function getBasePlacement(placement) {\n  return placement.split('-')[0];\n}\n\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\n\nfunction getMainAxisFromPlacement(placement) {\n  return ['top', 'bottom'].includes(getBasePlacement(placement)) ? 'x' : 'y';\n}\n\nfunction getLengthFromAxis(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\n\nfunction computeCoordsFromPlacement(_ref) {\n  let {\n    reference,\n    floating,\n    placement\n  } = _ref;\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  let coords;\n\n  switch (getBasePlacement(placement)) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n\n  const mainAxis = getMainAxisFromPlacement(placement);\n  const length = getLengthFromAxis(mainAxis);\n\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[mainAxis] = coords[mainAxis] - (reference[length] / 2 - floating[length] / 2);\n      break;\n\n    case 'end':\n      coords[mainAxis] = coords[mainAxis] + (reference[length] / 2 - floating[length] / 2);\n      break;\n  }\n\n  return coords;\n}\n\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n\n  if (process.env.NODE_ENV !== \"production\") {\n    if (platform == null) {\n      console.error(['Floating UI: `platform` property was not passed to config. If you', 'want to use Floating UI on the web, install @floating-ui/dom', 'instead of the /core package. Otherwise, you can create your own', '`platform`: https://floating-ui.com/docs/platform'].join(' '));\n    }\n\n    if (middleware.filter(_ref => {\n      let {\n        name\n      } = _ref;\n      return name === 'autoPlacement' || name === 'flip';\n    }).length > 1) {\n      throw new Error(['Floating UI: duplicate `flip` and/or `autoPlacement`', 'middleware detected. This will lead to an infinite loop. Ensure only', 'one of either has been passed to the `middleware` array.'].join(' '));\n    }\n  }\n\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement({ ...rects,\n    placement\n  });\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let _debug_loop_count_ = 0;\n\n  for (let i = 0; i < middleware.length; i++) {\n    if (process.env.NODE_ENV !== \"production\") {\n      _debug_loop_count_++;\n\n      if (_debug_loop_count_ > 100) {\n        throw new Error(['Floating UI: The middleware lifecycle appears to be', 'running in an infinite loop. This is usually caused by a `reset`', 'continually being returned without a break condition.'].join(' '));\n      }\n    }\n\n    const {\n      name,\n      fn\n    } = middleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = { ...middlewareData,\n      [name]: data != null ? data : {}\n    };\n\n    if (reset) {\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement({ ...rects,\n          placement: statefulPlacement\n        }));\n      }\n\n      i = -1;\n      continue;\n    }\n  }\n\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\n\nfunction getSideObjectFromPadding(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\n\nfunction rectToClientRect(rect) {\n  return { ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\nasync function detectOverflow(middlewareArguments, options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = middlewareArguments;\n  const {\n    boundary = 'clippingParents',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = options;\n  const paddingObject = getSideObjectFromPadding(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = await platform.getClippingClientRect({\n    element: (await platform.isElement(element)) ? element : element.contextElement || (await platform.getDocumentElement({\n      element: elements.floating\n    })),\n    boundary,\n    rootBoundary\n  });\n  const elementClientRect = rectToClientRect(await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    rect: elementContext === 'floating' ? { ...rects.floating,\n      x,\n      y\n    } : rects.reference,\n    offsetParent: await platform.getOffsetParent({\n      element: elements.floating\n    }),\n    strategy\n  })); // positive = overflowing the clipping rect\n  // 0 or negative = within the clipping rect\n\n  return {\n    top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n    bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n    left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n    right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n  };\n}\n\nconst min = Math.min;\nconst max = Math.max;\n\nfunction within(min$1, value, max$1) {\n  return max(min$1, min(value, max$1));\n}\n\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n\n  async fn(middlewareArguments) {\n    // Since `element` is required, we don't Partial<> the type\n    const {\n      element,\n      padding = 0\n    } = options != null ? options : {};\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform\n    } = middlewareArguments;\n\n    if (element == null) {\n      if (process.env.NODE_ENV !== \"production\") {\n        console.warn('Floating UI: No `element` was passed to the `arrow` middleware.');\n      }\n\n      return {};\n    }\n\n    const paddingObject = getSideObjectFromPadding(padding);\n    const coords = {\n      x,\n      y\n    };\n    const basePlacement = getBasePlacement(placement);\n    const axis = getMainAxisFromPlacement(basePlacement);\n    const length = getLengthFromAxis(axis);\n    const arrowDimensions = await platform.getDimensions({\n      element\n    });\n    const minProp = axis === 'y' ? 'top' : 'left';\n    const maxProp = axis === 'y' ? 'bottom' : 'right';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await platform.getOffsetParent({\n      element\n    });\n    const clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n    const centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside of the floating element's bounds\n\n    const min = paddingObject[minProp];\n    const max = clientSize - arrowDimensions[length] - paddingObject[maxProp];\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = within(min, center, max);\n    return {\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset\n      }\n    };\n  }\n\n});\n\nconst hash$1 = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]);\n}\n\nfunction getAlignmentSides(placement, rects) {\n  const isStart = getAlignment(placement) === 'start';\n  const mainAxis = getMainAxisFromPlacement(placement);\n  const length = getLengthFromAxis(mainAxis);\n  let mainAlignmentSide = mainAxis === 'x' ? isStart ? 'right' : 'left' : isStart ? 'bottom' : 'top';\n\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n\n  return {\n    main: mainAlignmentSide,\n    cross: getOppositePlacement(mainAlignmentSide)\n  };\n}\n\nconst hash = {\n  start: 'end',\n  end: 'start'\n};\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, matched => hash[matched]);\n}\n\nconst basePlacements = ['top', 'right', 'bottom', 'left'];\nconst allPlacements = /*#__PURE__*/basePlacements.reduce((acc, basePlacement) => acc.concat(basePlacement, basePlacement + \"-start\", basePlacement + \"-end\"), []);\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getBasePlacement(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n\n    return true;\n  });\n}\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  return {\n    name: 'autoPlacement',\n    options,\n\n    async fn(middlewareArguments) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _middlewareData$autoP3, _middlewareData$autoP4, _middlewareData$autoP5, _placementsSortedByLe;\n\n      const {\n        x,\n        y,\n        rects,\n        middlewareData,\n        placement\n      } = middlewareArguments;\n      const {\n        alignment = null,\n        allowedPlacements = allPlacements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = options;\n\n      if ((_middlewareData$autoP = middlewareData.autoPlacement) != null && _middlewareData$autoP.skip) {\n        return {};\n      }\n\n      const placements = getPlacementList(alignment, autoAlignment, allowedPlacements);\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const currentIndex = (_middlewareData$autoP2 = (_middlewareData$autoP3 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP3.index) != null ? _middlewareData$autoP2 : 0;\n      const currentPlacement = placements[currentIndex];\n      const {\n        main,\n        cross\n      } = getAlignmentSides(currentPlacement, rects); // Make `computeCoords` start from the right place\n\n      if (placement !== currentPlacement) {\n        return {\n          x,\n          y,\n          reset: {\n            placement: placements[0]\n          }\n        };\n      }\n\n      const currentOverflows = [overflow[getBasePlacement(currentPlacement)], overflow[main], overflow[cross]];\n      const allOverflows = [...((_middlewareData$autoP4 = (_middlewareData$autoP5 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP5.overflows) != null ? _middlewareData$autoP4 : []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements[currentIndex + 1]; // There are more placements to check\n\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n\n      const placementsSortedByLeastOverflow = allOverflows.slice().sort((a, b) => a.overflows[0] - b.overflows[0]);\n      const placementThatFitsOnAllSides = (_placementsSortedByLe = placementsSortedByLeastOverflow.find(_ref => {\n        let {\n          overflows\n        } = _ref;\n        return overflows.every(overflow => overflow <= 0);\n      })) == null ? void 0 : _placementsSortedByLe.placement;\n      return {\n        data: {\n          skip: true\n        },\n        reset: {\n          placement: placementThatFitsOnAllSides != null ? placementThatFitsOnAllSides : placementsSortedByLeastOverflow[0].placement\n        }\n      };\n    }\n\n  };\n};\n\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\n\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  return {\n    name: 'flip',\n    options,\n\n    async fn(middlewareArguments) {\n      var _middlewareData$flip, _middlewareData$flip2;\n\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement\n      } = middlewareArguments;\n\n      if ((_middlewareData$flip = middlewareData.flip) != null && _middlewareData$flip.skip) {\n        return {};\n      }\n\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = options;\n      const basePlacement = getBasePlacement(placement);\n      const isBasePlacement = basePlacement === initialPlacement;\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.overflows) || [];\n\n      if (checkMainAxis) {\n        overflows.push(overflow[basePlacement]);\n      }\n\n      if (checkCrossAxis) {\n        const {\n          main,\n          cross\n        } = getAlignmentSides(placement, rects);\n        overflows.push(overflow[main], overflow[cross]);\n      }\n\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }]; // One or more sides is overflowing\n\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip$, _middlewareData$flip3;\n\n        const nextIndex = ((_middlewareData$flip$ = (_middlewareData$flip3 = middlewareData.flip) == null ? void 0 : _middlewareData$flip3.index) != null ? _middlewareData$flip$ : 0) + 1;\n        const nextPlacement = placements[nextIndex];\n\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        let resetPlacement = 'bottom';\n\n        switch (fallbackStrategy) {\n          case 'bestFit':\n            {\n              var _overflowsData$slice$;\n\n              const placement = (_overflowsData$slice$ = overflowsData.slice().sort((a, b) => a.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0) - b.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0))[0]) == null ? void 0 : _overflowsData$slice$.placement;\n\n              if (placement) {\n                resetPlacement = placement;\n              }\n\n              break;\n            }\n\n          case 'initialPlacement':\n            resetPlacement = initialPlacement;\n            break;\n        }\n\n        return {\n          data: {\n            skip: true\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n\n      return {};\n    }\n\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n  return basePlacements.some(side => overflow[side] >= 0);\n}\n\nconst hide = () => ({\n  name: 'hide',\n\n  async fn(modifierArguments) {\n    const referenceOverflow = await detectOverflow(modifierArguments, {\n      elementContext: 'reference'\n    });\n    const floatingAltOverflow = await detectOverflow(modifierArguments, {\n      altBoundary: true\n    });\n    const referenceHiddenOffsets = getSideOffsets(referenceOverflow, modifierArguments.rects.reference);\n    const escapedOffsets = getSideOffsets(floatingAltOverflow, modifierArguments.rects.floating);\n    const referenceHidden = isAnySideFullyClipped(referenceHiddenOffsets);\n    const escaped = isAnySideFullyClipped(escapedOffsets);\n    return {\n      data: {\n        referenceHidden,\n        referenceHiddenOffsets,\n        escaped,\n        escapedOffsets\n      }\n    };\n  }\n\n});\n\nfunction convertValueToCoords(_ref) {\n  let {\n    placement,\n    rects,\n    value\n  } = _ref;\n  const basePlacement = getBasePlacement(placement);\n  const multiplier = ['left', 'top'].includes(basePlacement) ? -1 : 1;\n  const rawValue = typeof value === 'function' ? value({ ...rects,\n    placement\n  }) : value;\n  const {\n    mainAxis,\n    crossAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0\n  } : {\n    mainAxis: 0,\n    crossAxis: 0,\n    ...rawValue\n  };\n  return getMainAxisFromPlacement(basePlacement) === 'x' ? {\n    x: crossAxis,\n    y: mainAxis * multiplier\n  } : {\n    x: mainAxis * multiplier,\n    y: crossAxis\n  };\n}\nconst offset = function (value) {\n  if (value === void 0) {\n    value = 0;\n  }\n\n  return {\n    name: 'offset',\n    options: value,\n\n    fn(middlewareArguments) {\n      const {\n        x,\n        y,\n        placement,\n        rects\n      } = middlewareArguments;\n      const diffCoords = convertValueToCoords({\n        placement,\n        rects,\n        value\n      });\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: diffCoords\n      };\n    }\n\n  };\n};\n\nfunction getCrossAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\n\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  return {\n    name: 'shift',\n    options,\n\n    async fn(middlewareArguments) {\n      const {\n        x,\n        y,\n        placement\n      } = middlewareArguments;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = options;\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const mainAxis = getMainAxisFromPlacement(getBasePlacement(placement));\n      const crossAxis = getCrossAxis(mainAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = within(min, mainAxisCoord, max);\n      }\n\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = within(min, crossAxisCoord, max);\n      }\n\n      const limitedCoords = limiter.fn({ ...middlewareArguments,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return { ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y\n        }\n      };\n    }\n\n  };\n};\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  return {\n    options,\n\n    fn(middlewareArguments) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = middlewareArguments;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = options;\n      const coords = {\n        x,\n        y\n      };\n      const mainAxis = getMainAxisFromPlacement(placement);\n      const crossAxis = getCrossAxis(mainAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = typeof offset === 'function' ? offset({ ...rects,\n        placement\n      }) : offset;\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2, _middlewareData$offse3, _middlewareData$offse4;\n\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getBasePlacement(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? (_middlewareData$offse = (_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) != null ? _middlewareData$offse : 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : (_middlewareData$offse3 = (_middlewareData$offse4 = middlewareData.offset) == null ? void 0 : _middlewareData$offse4[crossAxis]) != null ? _middlewareData$offse3 : 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n\n  };\n};\n\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  return {\n    name: 'size',\n    options,\n\n    async fn(middlewareArguments) {\n      var _middlewareData$size;\n\n      const {\n        placement,\n        rects,\n        middlewareData\n      } = middlewareArguments;\n      const {\n        apply,\n        ...detectOverflowOptions\n      } = options;\n\n      if ((_middlewareData$size = middlewareData.size) != null && _middlewareData$size.skip) {\n        return {};\n      }\n\n      const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions);\n      const basePlacement = getBasePlacement(placement);\n      const isEnd = getAlignment(placement) === 'end';\n      let heightSide;\n      let widthSide;\n\n      if (basePlacement === 'top' || basePlacement === 'bottom') {\n        heightSide = basePlacement;\n        widthSide = isEnd ? 'left' : 'right';\n      } else {\n        widthSide = basePlacement;\n        heightSide = isEnd ? 'top' : 'bottom';\n      }\n\n      const xMin = max(overflow.left, 0);\n      const xMax = max(overflow.right, 0);\n      const yMin = max(overflow.top, 0);\n      const yMax = max(overflow.bottom, 0);\n      const dimensions = {\n        height: rects.floating.height - (['left', 'right'].includes(placement) ? 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom)) : overflow[heightSide]),\n        width: rects.floating.width - (['top', 'bottom'].includes(placement) ? 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right)) : overflow[widthSide])\n      };\n      apply == null ? void 0 : apply({ ...dimensions,\n        ...rects\n      });\n      return {\n        data: {\n          skip: true\n        },\n        reset: {\n          rects: true\n        }\n      };\n    }\n\n  };\n};\n\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n\n  return {\n    name: 'inline',\n    options,\n\n    async fn(middlewareArguments) {\n      var _middlewareData$inlin, _await$platform$getCl;\n\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy,\n        middlewareData\n      } = middlewareArguments; // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n\n      const {\n        padding = 2,\n        x,\n        y\n      } = options;\n\n      if ((_middlewareData$inlin = middlewareData.inline) != null && _middlewareData$inlin.skip) {\n        return {};\n      }\n\n      const fallback = rectToClientRect(await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n        rect: rects.reference,\n        offsetParent: await platform.getOffsetParent({\n          element: elements.floating\n        }),\n        strategy\n      }));\n      const clientRects = Array.from((_await$platform$getCl = await (platform.getClientRects == null ? void 0 : platform.getClientRects({\n        element: elements.reference\n      }))) != null ? _await$platform$getCl : []);\n      const paddingObject = getSideObjectFromPadding(padding);\n\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          var _clientRects$find;\n\n          // Find the first rect in which the point is fully inside\n          return (_clientRects$find = clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom)) != null ? _clientRects$find : fallback;\n        } // There are 2 or more connected rects\n\n\n        if (clientRects.length >= 2) {\n          if (getMainAxisFromPlacement(placement) === 'x') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getBasePlacement(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n\n          const isLeftPlacement = getBasePlacement(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftPlacement ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n\n        return fallback;\n      }\n\n      return {\n        data: {\n          skip: true\n        },\n        reset: {\n          rects: await platform.getElementRects({\n            reference: {\n              getBoundingClientRect\n            },\n            floating: elements.floating,\n            strategy\n          })\n        }\n      };\n    }\n\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, rectToClientRect, shift, size };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\n\nfunction isWindow(value) {\n  return (value == null ? void 0 : value.toString()) === '[object Window]';\n}\nfunction getWindow(node) {\n  if (node == null) {\n    return window;\n  }\n\n  if (!isWindow(node)) {\n    const ownerDocument = node.ownerDocument;\n    return ownerDocument ? ownerDocument.defaultView || window : window;\n  }\n\n  return node;\n}\n\nfunction getComputedStyle$1(element) {\n  return getWindow(element).getComputedStyle(element);\n}\n\nfunction getNodeName(node) {\n  return isWindow(node) ? '' : node ? (node.nodeName || '').toLowerCase() : '';\n}\n\nfunction isHTMLElement(value) {\n  return value instanceof getWindow(value).HTMLElement;\n}\nfunction isElement(value) {\n  return value instanceof getWindow(value).Element;\n}\nfunction isNode(value) {\n  return value instanceof getWindow(value).Node;\n}\nfunction isShadowRoot(node) {\n  const OwnElement = getWindow(node).ShadowRoot;\n  return node instanceof OwnElement || node instanceof ShadowRoot;\n}\nfunction isScrollParent(element) {\n  // Firefox wants us to check `-x` and `-y` variations as well\n  const {\n    overflow,\n    overflowX,\n    overflowY\n  } = getComputedStyle$1(element);\n  return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isContainingBlock(element) {\n  // TODO: Try and use feature detection here instead\n  const isFirefox = navigator.userAgent.toLowerCase().includes('firefox');\n  const css = getComputedStyle$1(element); // This is non-exhaustive but covers the most common CSS properties that\n  // create a containing block.\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n  return css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].includes(css.willChange) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false);\n}\n\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\n\nfunction getBoundingClientRect(element, includeScale) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n\n  const clientRect = element.getBoundingClientRect();\n  let scaleX = 1;\n  let scaleY = 1;\n\n  if (includeScale && isHTMLElement(element)) {\n    scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n    scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n  }\n\n  return {\n    width: clientRect.width / scaleX,\n    height: clientRect.height / scaleY,\n    top: clientRect.top / scaleY,\n    right: clientRect.right / scaleX,\n    bottom: clientRect.bottom / scaleY,\n    left: clientRect.left / scaleX,\n    x: clientRect.left / scaleX,\n    y: clientRect.top / scaleY\n  };\n}\n\nfunction getDocumentElement(node) {\n  return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement;\n}\n\nfunction getNodeScroll(element) {\n  if (isWindow(element)) {\n    return {\n      scrollLeft: element.pageXOffset,\n      scrollTop: element.pageYOffset\n    };\n  }\n\n  return {\n    scrollLeft: element.scrollLeft,\n    scrollTop: element.scrollTop\n  };\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\nfunction isScaled(element) {\n  const rect = getBoundingClientRect(element);\n  return round(rect.width) !== element.offsetWidth || round(rect.height) !== element.offsetHeight;\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const rect = getBoundingClientRect(element, isOffsetParentAnElement && isScaled(offsetParent));\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent, true);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n\n  return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n    // @ts-ignore\n    node.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n    node.parentNode || ( // DOM Element detected\n    isShadowRoot(node) ? node.host : null) || // ShadowRoot detected\n    getDocumentElement(node) // fallback\n\n  );\n}\n\nfunction getTrueOffsetParent(element) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n\n  return element.offsetParent;\n}\n\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n\n  while (isHTMLElement(currentNode) && !['html', 'body'].includes(getNodeName(currentNode))) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else {\n      currentNode = currentNode.parentNode;\n    }\n  }\n\n  return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n  const window = getWindow(element);\n  let offsetParent = getTrueOffsetParent(element);\n\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent);\n  }\n\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nfunction getDimensions(element) {\n  return {\n    width: element.offsetWidth,\n    height: element.offsetHeight\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = {\n    x: 0,\n    y: 0\n  };\n\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isScrollParent(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent, true);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } // This doesn't appear to be need to be negated.\n    // else if (documentElement) {\n    //   offsets.x = getWindowScrollBarX(documentElement);\n    // }\n\n  }\n\n  return { ...rect,\n    x: rect.x - scroll.scrollLeft + offsets.x,\n    y: rect.y - scroll.scrollTop + offsets.y\n  };\n}\n\nfunction getViewportRect(element) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n    // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n    // errors due to floating point numbers, so we need to check precision.\n    // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n\n    if (Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) < 0.01) {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n  var _element$ownerDocumen;\n\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n  const width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n  const height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n\n  if (getComputedStyle$1(body || html).direction === 'rtl') {\n    x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n  }\n\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getScrollParent(node) {\n  if (['html', 'body', '#document'].includes(getNodeName(node))) {\n    // @ts-ignore assume body is always available\n    return node.ownerDocument.body;\n  }\n\n  if (isHTMLElement(node) && isScrollParent(node)) {\n    return node;\n  }\n\n  return getScrollParent(getParentNode(node));\n}\n\nfunction getScrollParents(node, list) {\n  var _node$ownerDocument;\n\n  if (list === void 0) {\n    list = [];\n  }\n\n  const scrollParent = getScrollParent(node);\n  const isBody = scrollParent === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body);\n  const win = getWindow(scrollParent);\n  const target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n  const updatedList = list.concat(target);\n  return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here\n  updatedList.concat(getScrollParents(getParentNode(target)));\n}\n\nfunction contains(parent, child) {\n  const rootNode = child.getRootNode == null ? void 0 : child.getRootNode(); // First, attempt with faster native method\n\n  if (parent.contains(child)) {\n    return true;\n  } // then fallback to custom implementation with Shadow DOM support\n  else if (rootNode && isShadowRoot(rootNode)) {\n    let next = child;\n\n    do {\n      // use `===` replace node.isSameNode()\n      if (next && parent === next) {\n        return true;\n      } // @ts-ignore: need a better way to handle this...\n\n\n      next = next.parentNode || next.host;\n    } while (next);\n  }\n\n  return false;\n}\n\nfunction getInnerBoundingClientRect(element) {\n  const clientRect = getBoundingClientRect(element);\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  return {\n    top,\n    left,\n    x: left,\n    y: top,\n    right: left + element.clientWidth,\n    bottom: top + element.clientHeight,\n    width: element.clientWidth,\n    height: element.clientHeight\n  };\n}\n\nfunction getClientRectFromClippingParent(element, clippingParent) {\n  if (clippingParent === 'viewport') {\n    return rectToClientRect(getViewportRect(element));\n  }\n\n  if (isElement(clippingParent)) {\n    return getInnerBoundingClientRect(clippingParent);\n  }\n\n  return rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n  const clippingParents = getScrollParents(getParentNode(element));\n  const canEscapeClipping = ['absolute', 'fixed'].includes(getComputedStyle$1(element).position);\n  const clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n  if (!isElement(clipperElement)) {\n    return [];\n  } // @ts-ignore isElement check ensures we return Array<Element>\n\n\n  return clippingParents.filter(clippingParent => isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body');\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingClientRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary\n  } = _ref;\n  const mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n  const clippingParents = [...mainClippingParents, rootBoundary];\n  const firstClippingParent = clippingParents[0];\n  const clippingRect = clippingParents.reduce((accRect, clippingParent) => {\n    const rect = getClientRectFromClippingParent(element, clippingParent);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingParent(element, firstClippingParent));\n  clippingRect.width = clippingRect.right - clippingRect.left;\n  clippingRect.height = clippingRect.bottom - clippingRect.top;\n  clippingRect.x = clippingRect.left;\n  clippingRect.y = clippingRect.top;\n  return clippingRect;\n}\n\nconst platform = {\n  getElementRects: _ref => {\n    let {\n      reference,\n      floating,\n      strategy\n    } = _ref;\n    return {\n      reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy),\n      floating: { ...getDimensions(floating),\n        x: 0,\n        y: 0\n      }\n    };\n  },\n  convertOffsetParentRelativeRectToViewportRelativeRect: args => convertOffsetParentRelativeRectToViewportRelativeRect(args),\n  getOffsetParent: _ref2 => {\n    let {\n      element\n    } = _ref2;\n    return getOffsetParent(element);\n  },\n  isElement: value => isElement(value),\n  getDocumentElement: _ref3 => {\n    let {\n      element\n    } = _ref3;\n    return getDocumentElement(element);\n  },\n  getClippingClientRect: args => getClippingClientRect(args),\n  getDimensions: _ref4 => {\n    let {\n      element\n    } = _ref4;\n    return getDimensions(element);\n  },\n  getClientRects: _ref5 => {\n    let {\n      element\n    } = _ref5;\n    return element.getClientRects();\n  }\n};\n\nconst computePosition = (reference, floating, options) => computePosition$1(reference, floating, {\n  platform,\n  ...options\n});\n\nexport { computePosition, getScrollParents };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\nimport { offset, autoPlacement, shift, flip, arrow, size, computePosition, getScrollParents } from \"@floating-ui/dom\";\nimport Vue from \"vue\";\nfunction assign(to, from) {\n  for (const key in from) {\n    if (Object.prototype.hasOwnProperty.call(from, key)) {\n      if (typeof from[key] === \"object\" && to[key]) {\n        assign(to[key], from[key]);\n      } else {\n        to[key] = from[key];\n      }\n    }\n  }\n}\nconst config = {\n  disabled: false,\n  distance: 5,\n  skidding: 0,\n  container: \"body\",\n  boundary: void 0,\n  instantMove: false,\n  disposeTimeout: 5e3,\n  popperTriggers: [],\n  strategy: \"absolute\",\n  preventOverflow: true,\n  flip: true,\n  shift: true,\n  overflowPadding: 0,\n  arrowPadding: 0,\n  arrowOverflow: true,\n  themes: {\n    tooltip: {\n      placement: \"top\",\n      triggers: [\"hover\", \"focus\", \"touch\"],\n      hideTriggers: (events) => [...events, \"click\"],\n      delay: {\n        show: 200,\n        hide: 0\n      },\n      handleResize: false,\n      html: false,\n      loadingContent: \"...\"\n    },\n    dropdown: {\n      placement: \"bottom\",\n      triggers: [\"click\"],\n      delay: 0,\n      handleResize: true,\n      autoHide: true\n    },\n    menu: {\n      $extend: \"dropdown\",\n      triggers: [\"hover\", \"focus\"],\n      popperTriggers: [\"hover\", \"focus\"],\n      delay: {\n        show: 0,\n        hide: 400\n      }\n    }\n  }\n};\nfunction getDefaultConfig(theme, key) {\n  let themeConfig = config.themes[theme] || {};\n  let value;\n  do {\n    value = themeConfig[key];\n    if (typeof value === \"undefined\") {\n      if (themeConfig.$extend) {\n        themeConfig = config.themes[themeConfig.$extend] || {};\n      } else {\n        themeConfig = null;\n        value = config[key];\n      }\n    } else {\n      themeConfig = null;\n    }\n  } while (themeConfig);\n  return value;\n}\nfunction getThemeClasses(theme) {\n  const result = [theme];\n  let themeConfig = config.themes[theme] || {};\n  do {\n    if (themeConfig.$extend && !themeConfig.$resetCss) {\n      result.push(themeConfig.$extend);\n      themeConfig = config.themes[themeConfig.$extend] || {};\n    } else {\n      themeConfig = null;\n    }\n  } while (themeConfig);\n  return result.map((c) => `v-popper--theme-${c}`);\n}\nfunction getAllParentThemes(theme) {\n  const result = [theme];\n  let themeConfig = config.themes[theme] || {};\n  do {\n    if (themeConfig.$extend) {\n      result.push(themeConfig.$extend);\n      themeConfig = config.themes[themeConfig.$extend] || {};\n    } else {\n      themeConfig = null;\n    }\n  } while (themeConfig);\n  return result;\n}\nvar vueResize = \"\";\nlet supportsPassive = false;\nif (typeof window !== \"undefined\") {\n  supportsPassive = false;\n  try {\n    const opts = Object.defineProperty({}, \"passive\", {\n      get() {\n        supportsPassive = true;\n      }\n    });\n    window.addEventListener(\"test\", null, opts);\n  } catch (e) {\n  }\n}\nlet isIOS = false;\nif (typeof window !== \"undefined\" && typeof navigator !== \"undefined\") {\n  isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n}\nconst placements = [\"auto\", \"top\", \"bottom\", \"left\", \"right\"].reduce((acc, base) => acc.concat([\n  base,\n  `${base}-start`,\n  `${base}-end`\n]), []);\nconst SHOW_EVENT_MAP = {\n  hover: \"mouseenter\",\n  focus: \"focus\",\n  click: \"click\",\n  touch: \"touchstart\"\n};\nconst HIDE_EVENT_MAP = {\n  hover: \"mouseleave\",\n  focus: \"blur\",\n  click: \"click\",\n  touch: \"touchend\"\n};\nfunction removeFromArray(array, item) {\n  const index = array.indexOf(item);\n  if (index !== -1) {\n    array.splice(index, 1);\n  }\n}\nfunction nextFrame() {\n  return new Promise((resolve) => requestAnimationFrame(() => {\n    requestAnimationFrame(resolve);\n  }));\n}\nconst shownPoppers = [];\nlet hidingPopper = null;\nconst shownPoppersByTheme = {};\nfunction getShownPoppersByTheme(theme) {\n  let list = shownPoppersByTheme[theme];\n  if (!list) {\n    list = shownPoppersByTheme[theme] = [];\n  }\n  return list;\n}\nlet Element = function() {\n};\nif (typeof window !== \"undefined\") {\n  Element = window.Element;\n}\nfunction defaultPropFactory(prop) {\n  return function() {\n    const props = this.$props;\n    return getDefaultConfig(props.theme, prop);\n  };\n}\nconst PROVIDE_KEY = \"__floating-vue__popper\";\nvar PrivatePopper = () => ({\n  name: \"VPopper\",\n  props: {\n    theme: {\n      type: String,\n      required: true\n    },\n    targetNodes: {\n      type: Function,\n      required: true\n    },\n    referenceNode: {\n      type: Function,\n      required: true\n    },\n    popperNode: {\n      type: Function,\n      required: true\n    },\n    shown: {\n      type: Boolean,\n      default: false\n    },\n    showGroup: {\n      type: String,\n      default: null\n    },\n    ariaId: {\n      default: null\n    },\n    disabled: {\n      type: Boolean,\n      default: defaultPropFactory(\"disabled\")\n    },\n    positioningDisabled: {\n      type: Boolean,\n      default: defaultPropFactory(\"positioningDisabled\")\n    },\n    placement: {\n      type: String,\n      default: defaultPropFactory(\"placement\"),\n      validator: (value) => placements.includes(value)\n    },\n    delay: {\n      type: [String, Number, Object],\n      default: defaultPropFactory(\"delay\")\n    },\n    distance: {\n      type: [Number, String],\n      default: defaultPropFactory(\"distance\")\n    },\n    skidding: {\n      type: [Number, String],\n      default: defaultPropFactory(\"skidding\")\n    },\n    triggers: {\n      type: Array,\n      default: defaultPropFactory(\"triggers\")\n    },\n    showTriggers: {\n      type: [Array, Function],\n      default: defaultPropFactory(\"showTriggers\")\n    },\n    hideTriggers: {\n      type: [Array, Function],\n      default: defaultPropFactory(\"hideTriggers\")\n    },\n    popperTriggers: {\n      type: Array,\n      default: defaultPropFactory(\"popperTriggers\")\n    },\n    popperShowTriggers: {\n      type: [Array, Function],\n      default: defaultPropFactory(\"popperShowTriggers\")\n    },\n    popperHideTriggers: {\n      type: [Array, Function],\n      default: defaultPropFactory(\"popperHideTriggers\")\n    },\n    container: {\n      type: [String, Object, Element, Boolean],\n      default: defaultPropFactory(\"container\")\n    },\n    boundary: {\n      type: [String, Element],\n      default: defaultPropFactory(\"boundary\")\n    },\n    strategy: {\n      type: String,\n      validator: (value) => [\"absolute\", \"fixed\"].includes(value),\n      default: defaultPropFactory(\"strategy\")\n    },\n    autoHide: {\n      type: [Boolean, Function],\n      default: defaultPropFactory(\"autoHide\")\n    },\n    handleResize: {\n      type: Boolean,\n      default: defaultPropFactory(\"handleResize\")\n    },\n    instantMove: {\n      type: Boolean,\n      default: defaultPropFactory(\"instantMove\")\n    },\n    eagerMount: {\n      type: Boolean,\n      default: defaultPropFactory(\"eagerMount\")\n    },\n    popperClass: {\n      type: [String, Array, Object],\n      default: defaultPropFactory(\"popperClass\")\n    },\n    computeTransformOrigin: {\n      type: Boolean,\n      default: defaultPropFactory(\"computeTransformOrigin\")\n    },\n    autoMinSize: {\n      type: Boolean,\n      default: defaultPropFactory(\"autoMinSize\")\n    },\n    autoSize: {\n      type: [Boolean, String],\n      default: defaultPropFactory(\"autoSize\")\n    },\n    autoMaxSize: {\n      type: Boolean,\n      default: defaultPropFactory(\"autoMaxSize\")\n    },\n    autoBoundaryMaxSize: {\n      type: Boolean,\n      default: defaultPropFactory(\"autoBoundaryMaxSize\")\n    },\n    preventOverflow: {\n      type: Boolean,\n      default: defaultPropFactory(\"preventOverflow\")\n    },\n    overflowPadding: {\n      type: [Number, String],\n      default: defaultPropFactory(\"overflowPadding\")\n    },\n    arrowPadding: {\n      type: [Number, String],\n      default: defaultPropFactory(\"arrowPadding\")\n    },\n    arrowOverflow: {\n      type: Boolean,\n      default: defaultPropFactory(\"arrowOverflow\")\n    },\n    flip: {\n      type: Boolean,\n      default: defaultPropFactory(\"flip\")\n    },\n    shift: {\n      type: Boolean,\n      default: defaultPropFactory(\"shift\")\n    },\n    shiftCrossAxis: {\n      type: Boolean,\n      default: defaultPropFactory(\"shiftCrossAxis\")\n    },\n    noAutoFocus: {\n      type: Boolean,\n      default: defaultPropFactory(\"noAutoFocus\")\n    }\n  },\n  provide() {\n    return {\n      [PROVIDE_KEY]: {\n        parentPopper: this\n      }\n    };\n  },\n  inject: {\n    [PROVIDE_KEY]: { default: null }\n  },\n  data() {\n    return {\n      isShown: false,\n      isMounted: false,\n      skipTransition: false,\n      classes: {\n        showFrom: false,\n        showTo: false,\n        hideFrom: false,\n        hideTo: true\n      },\n      result: {\n        x: 0,\n        y: 0,\n        placement: \"\",\n        strategy: this.strategy,\n        arrow: {\n          x: 0,\n          y: 0,\n          centerOffset: 0\n        },\n        transformOrigin: null\n      },\n      shownChildren: /* @__PURE__ */ new Set(),\n      lastAutoHide: true\n    };\n  },\n  computed: {\n    popperId() {\n      return this.ariaId != null ? this.ariaId : this.randomId;\n    },\n    shouldMountContent() {\n      return this.eagerMount || this.isMounted;\n    },\n    slotData() {\n      return {\n        popperId: this.popperId,\n        isShown: this.isShown,\n        shouldMountContent: this.shouldMountContent,\n        skipTransition: this.skipTransition,\n        autoHide: typeof this.autoHide === \"function\" ? this.lastAutoHide : this.autoHide,\n        show: this.show,\n        hide: this.hide,\n        handleResize: this.handleResize,\n        onResize: this.onResize,\n        classes: __spreadProps(__spreadValues({}, this.classes), {\n          popperClass: this.popperClass\n        }),\n        result: this.positioningDisabled ? null : this.result\n      };\n    },\n    parentPopper() {\n      var _a;\n      return (_a = this[PROVIDE_KEY]) == null ? void 0 : _a.parentPopper;\n    },\n    hasPopperShowTriggerHover() {\n      var _a, _b;\n      return ((_a = this.popperTriggers) == null ? void 0 : _a.includes(\"hover\")) || ((_b = this.popperShowTriggers) == null ? void 0 : _b.includes(\"hover\"));\n    }\n  },\n  watch: __spreadValues(__spreadValues({\n    shown: \"$_autoShowHide\",\n    disabled(value) {\n      if (value) {\n        this.dispose();\n      } else {\n        this.init();\n      }\n    },\n    async container() {\n      if (this.isShown) {\n        this.$_ensureTeleport();\n        await this.$_computePosition();\n      }\n    }\n  }, [\n    \"triggers\",\n    \"positioningDisabled\"\n  ].reduce((acc, prop) => {\n    acc[prop] = \"$_refreshListeners\";\n    return acc;\n  }, {})), [\n    \"placement\",\n    \"distance\",\n    \"skidding\",\n    \"boundary\",\n    \"strategy\",\n    \"overflowPadding\",\n    \"arrowPadding\",\n    \"preventOverflow\",\n    \"shift\",\n    \"shiftCrossAxis\",\n    \"flip\"\n  ].reduce((acc, prop) => {\n    acc[prop] = \"$_computePosition\";\n    return acc;\n  }, {})),\n  created() {\n    this.$_isDisposed = true;\n    this.randomId = `popper_${[Math.random(), Date.now()].map((n) => n.toString(36).substring(2, 10)).join(\"_\")}`;\n    if (this.autoMinSize) {\n      console.warn('[floating-vue] `autoMinSize` option is deprecated. Use `autoSize=\"min\"` instead.');\n    }\n    if (this.autoMaxSize) {\n      console.warn(\"[floating-vue] `autoMaxSize` option is deprecated. Use `autoBoundaryMaxSize` instead.\");\n    }\n  },\n  mounted() {\n    this.init();\n    this.$_detachPopperNode();\n  },\n  activated() {\n    this.$_autoShowHide();\n  },\n  deactivated() {\n    this.hide();\n  },\n  beforeDestroy() {\n    this.dispose();\n  },\n  methods: {\n    show({ event = null, skipDelay = false, force = false } = {}) {\n      var _a, _b;\n      if (((_a = this.parentPopper) == null ? void 0 : _a.lockedChild) && this.parentPopper.lockedChild !== this)\n        return;\n      this.$_pendingHide = false;\n      if (force || !this.disabled) {\n        if (((_b = this.parentPopper) == null ? void 0 : _b.lockedChild) === this) {\n          this.parentPopper.lockedChild = null;\n        }\n        this.$_scheduleShow(event, skipDelay);\n        this.$emit(\"show\");\n        this.$_showFrameLocked = true;\n        requestAnimationFrame(() => {\n          this.$_showFrameLocked = false;\n        });\n      }\n      this.$emit(\"update:shown\", true);\n    },\n    hide({ event = null, skipDelay = false, skipAiming = false } = {}) {\n      var _a;\n      if (this.$_hideInProgress)\n        return;\n      if (this.shownChildren.size > 0) {\n        this.$_pendingHide = true;\n        return;\n      }\n      if (!skipAiming && this.hasPopperShowTriggerHover && this.$_isAimingPopper()) {\n        if (this.parentPopper) {\n          this.parentPopper.lockedChild = this;\n          clearTimeout(this.parentPopper.lockedChildTimer);\n          this.parentPopper.lockedChildTimer = setTimeout(() => {\n            if (this.parentPopper.lockedChild === this) {\n              this.parentPopper.lockedChild.hide({ skipDelay });\n              this.parentPopper.lockedChild = null;\n            }\n          }, 1e3);\n        }\n        return;\n      }\n      if (((_a = this.parentPopper) == null ? void 0 : _a.lockedChild) === this) {\n        this.parentPopper.lockedChild = null;\n      }\n      this.$_pendingHide = false;\n      this.$_scheduleHide(event, skipDelay);\n      this.$emit(\"hide\");\n      this.$emit(\"update:shown\", false);\n    },\n    init() {\n      if (!this.$_isDisposed)\n        return;\n      this.$_isDisposed = false;\n      this.isMounted = false;\n      this.$_events = [];\n      this.$_preventShow = false;\n      this.$_referenceNode = this.referenceNode();\n      this.$_targetNodes = this.targetNodes().filter((e) => e.nodeType === e.ELEMENT_NODE);\n      this.$_popperNode = this.popperNode();\n      this.$_innerNode = this.$_popperNode.querySelector(\".v-popper__inner\");\n      this.$_arrowNode = this.$_popperNode.querySelector(\".v-popper__arrow-container\");\n      this.$_swapTargetAttrs(\"title\", \"data-original-title\");\n      this.$_detachPopperNode();\n      if (this.triggers.length) {\n        this.$_addEventListeners();\n      }\n      if (this.shown) {\n        this.show();\n      }\n    },\n    dispose() {\n      if (this.$_isDisposed)\n        return;\n      this.$_isDisposed = true;\n      this.$_removeEventListeners();\n      this.hide({ skipDelay: true });\n      this.$_detachPopperNode();\n      this.isMounted = false;\n      this.isShown = false;\n      this.$_updateParentShownChildren(false);\n      this.$_swapTargetAttrs(\"data-original-title\", \"title\");\n      this.$emit(\"dispose\");\n    },\n    async onResize() {\n      if (this.isShown) {\n        await this.$_computePosition();\n        this.$emit(\"resize\");\n      }\n    },\n    async $_computePosition() {\n      var _a;\n      if (this.$_isDisposed || this.positioningDisabled)\n        return;\n      const options2 = {\n        strategy: this.strategy,\n        middleware: []\n      };\n      if (this.distance || this.skidding) {\n        options2.middleware.push(offset({\n          mainAxis: this.distance,\n          crossAxis: this.skidding\n        }));\n      }\n      const isPlacementAuto = this.placement.startsWith(\"auto\");\n      if (isPlacementAuto) {\n        options2.middleware.push(autoPlacement({\n          alignment: (_a = this.placement.split(\"-\")[1]) != null ? _a : \"\"\n        }));\n      } else {\n        options2.placement = this.placement;\n      }\n      if (this.preventOverflow) {\n        if (this.shift) {\n          options2.middleware.push(shift({\n            padding: this.overflowPadding,\n            boundary: this.boundary,\n            crossAxis: this.shiftCrossAxis\n          }));\n        }\n        if (!isPlacementAuto && this.flip) {\n          options2.middleware.push(flip({\n            padding: this.overflowPadding,\n            boundary: this.boundary\n          }));\n        }\n      }\n      options2.middleware.push(arrow({\n        element: this.$_arrowNode,\n        padding: this.arrowPadding\n      }));\n      if (this.arrowOverflow) {\n        options2.middleware.push({\n          name: \"arrowOverflow\",\n          fn: ({ placement, rects, middlewareData }) => {\n            let overflow;\n            const { centerOffset } = middlewareData.arrow;\n            if (placement.startsWith(\"top\") || placement.startsWith(\"bottom\")) {\n              overflow = Math.abs(centerOffset) > rects.reference.width / 2;\n            } else {\n              overflow = Math.abs(centerOffset) > rects.reference.height / 2;\n            }\n            return {\n              data: {\n                overflow\n              }\n            };\n          }\n        });\n      }\n      if (this.autoMinSize || this.autoSize) {\n        const autoSize = this.autoSize ? this.autoSize : this.autoMinSize ? \"min\" : null;\n        options2.middleware.push({\n          name: \"autoSize\",\n          fn: ({ rects, placement, middlewareData }) => {\n            var _a2;\n            if ((_a2 = middlewareData.autoSize) == null ? void 0 : _a2.skip) {\n              return {};\n            }\n            let width;\n            let height;\n            if (placement.startsWith(\"top\") || placement.startsWith(\"bottom\")) {\n              width = rects.reference.width;\n            } else {\n              height = rects.reference.height;\n            }\n            this.$_innerNode.style[autoSize === \"min\" ? \"minWidth\" : autoSize === \"max\" ? \"maxWidth\" : \"width\"] = width != null ? `${width}px` : null;\n            this.$_innerNode.style[autoSize === \"min\" ? \"minHeight\" : autoSize === \"max\" ? \"maxHeight\" : \"height\"] = height != null ? `${height}px` : null;\n            return {\n              data: {\n                skip: true\n              },\n              reset: {\n                rects: true\n              }\n            };\n          }\n        });\n      }\n      if (this.autoMaxSize || this.autoBoundaryMaxSize) {\n        this.$_innerNode.style.maxWidth = null;\n        this.$_innerNode.style.maxHeight = null;\n        options2.middleware.push(size({\n          boundary: this.boundary,\n          padding: this.overflowPadding,\n          apply: ({ width, height }) => {\n            this.$_innerNode.style.maxWidth = width != null ? `${width}px` : null;\n            this.$_innerNode.style.maxHeight = height != null ? `${height}px` : null;\n          }\n        }));\n      }\n      const data = await computePosition(this.$_referenceNode, this.$_popperNode, options2);\n      Object.assign(this.result, {\n        x: data.x,\n        y: data.y,\n        placement: data.placement,\n        strategy: data.strategy,\n        arrow: __spreadValues(__spreadValues({}, data.middlewareData.arrow), data.middlewareData.arrowOverflow)\n      });\n    },\n    $_scheduleShow(event = null, skipDelay = false) {\n      this.$_updateParentShownChildren(true);\n      this.$_hideInProgress = false;\n      clearTimeout(this.$_scheduleTimer);\n      if (hidingPopper && this.instantMove && hidingPopper.instantMove && hidingPopper !== this.parentPopper) {\n        hidingPopper.$_applyHide(true);\n        this.$_applyShow(true);\n        return;\n      }\n      if (skipDelay) {\n        this.$_applyShow();\n      } else {\n        this.$_scheduleTimer = setTimeout(this.$_applyShow.bind(this), this.$_computeDelay(\"show\"));\n      }\n    },\n    $_scheduleHide(event = null, skipDelay = false) {\n      if (this.shownChildren.size > 0) {\n        this.$_pendingHide = true;\n        return;\n      }\n      this.$_updateParentShownChildren(false);\n      this.$_hideInProgress = true;\n      clearTimeout(this.$_scheduleTimer);\n      if (this.isShown) {\n        hidingPopper = this;\n      }\n      if (skipDelay) {\n        this.$_applyHide();\n      } else {\n        this.$_scheduleTimer = setTimeout(this.$_applyHide.bind(this), this.$_computeDelay(\"hide\"));\n      }\n    },\n    $_computeDelay(type) {\n      const delay = this.delay;\n      return parseInt(delay && delay[type] || delay || 0);\n    },\n    async $_applyShow(skipTransition = false) {\n      clearTimeout(this.$_disposeTimer);\n      clearTimeout(this.$_scheduleTimer);\n      this.skipTransition = skipTransition;\n      if (this.isShown) {\n        return;\n      }\n      this.$_ensureTeleport();\n      await nextFrame();\n      await this.$_computePosition();\n      await this.$_applyShowEffect();\n      if (!this.positioningDisabled) {\n        this.$_registerEventListeners([\n          ...getScrollParents(this.$_referenceNode),\n          ...getScrollParents(this.$_popperNode)\n        ], \"scroll\", () => {\n          this.$_computePosition();\n        });\n      }\n    },\n    async $_applyShowEffect() {\n      if (this.$_hideInProgress)\n        return;\n      if (this.computeTransformOrigin) {\n        const bounds = this.$_referenceNode.getBoundingClientRect();\n        const popperWrapper = this.$_popperNode.querySelector(\".v-popper__wrapper\");\n        const parentBounds = popperWrapper.parentNode.getBoundingClientRect();\n        const x = bounds.x + bounds.width / 2 - (parentBounds.left + popperWrapper.offsetLeft);\n        const y = bounds.y + bounds.height / 2 - (parentBounds.top + popperWrapper.offsetTop);\n        this.result.transformOrigin = `${x}px ${y}px`;\n      }\n      this.isShown = true;\n      this.$_applyAttrsToTarget({\n        \"aria-describedby\": this.popperId,\n        \"data-popper-shown\": \"\"\n      });\n      const showGroup = this.showGroup;\n      if (showGroup) {\n        let popover;\n        for (let i = 0; i < shownPoppers.length; i++) {\n          popover = shownPoppers[i];\n          if (popover.showGroup !== showGroup) {\n            popover.hide();\n            popover.$emit(\"close-group\");\n          }\n        }\n      }\n      shownPoppers.push(this);\n      document.body.classList.add(\"v-popper--some-open\");\n      for (const theme of getAllParentThemes(this.theme)) {\n        getShownPoppersByTheme(theme).push(this);\n        document.body.classList.add(`v-popper--some-open--${theme}`);\n      }\n      this.$emit(\"apply-show\");\n      this.classes.showFrom = true;\n      this.classes.showTo = false;\n      this.classes.hideFrom = false;\n      this.classes.hideTo = false;\n      await nextFrame();\n      this.classes.showFrom = false;\n      this.classes.showTo = true;\n      if (!this.noAutoFocus)\n        this.$_popperNode.focus();\n    },\n    async $_applyHide(skipTransition = false) {\n      if (this.shownChildren.size > 0) {\n        this.$_pendingHide = true;\n        this.$_hideInProgress = false;\n        return;\n      }\n      clearTimeout(this.$_scheduleTimer);\n      if (!this.isShown) {\n        return;\n      }\n      this.skipTransition = skipTransition;\n      removeFromArray(shownPoppers, this);\n      if (shownPoppers.length === 0) {\n        document.body.classList.remove(\"v-popper--some-open\");\n      }\n      for (const theme of getAllParentThemes(this.theme)) {\n        const list = getShownPoppersByTheme(theme);\n        removeFromArray(list, this);\n        if (list.length === 0) {\n          document.body.classList.remove(`v-popper--some-open--${theme}`);\n        }\n      }\n      if (hidingPopper === this) {\n        hidingPopper = null;\n      }\n      this.isShown = false;\n      this.$_applyAttrsToTarget({\n        \"aria-describedby\": void 0,\n        \"data-popper-shown\": void 0\n      });\n      clearTimeout(this.$_disposeTimer);\n      const disposeTime = getDefaultConfig(this.theme, \"disposeTimeout\");\n      if (disposeTime !== null) {\n        this.$_disposeTimer = setTimeout(() => {\n          if (this.$_popperNode) {\n            this.$_detachPopperNode();\n            this.isMounted = false;\n          }\n        }, disposeTime);\n      }\n      this.$_removeEventListeners(\"scroll\");\n      this.$emit(\"apply-hide\");\n      this.classes.showFrom = false;\n      this.classes.showTo = false;\n      this.classes.hideFrom = true;\n      this.classes.hideTo = false;\n      await nextFrame();\n      this.classes.hideFrom = false;\n      this.classes.hideTo = true;\n    },\n    $_autoShowHide() {\n      if (this.shown) {\n        this.show();\n      } else {\n        this.hide();\n      }\n    },\n    $_ensureTeleport() {\n      if (this.$_isDisposed)\n        return;\n      let container = this.container;\n      if (typeof container === \"string\") {\n        container = window.document.querySelector(container);\n      } else if (container === false) {\n        container = this.$_targetNodes[0].parentNode;\n      }\n      if (!container) {\n        throw new Error(\"No container for popover: \" + this.container);\n      }\n      container.appendChild(this.$_popperNode);\n      this.isMounted = true;\n    },\n    $_addEventListeners() {\n      const handleShow = (event) => {\n        if (this.isShown && !this.$_hideInProgress) {\n          return;\n        }\n        event.usedByTooltip = true;\n        !this.$_preventShow && this.show({ event });\n      };\n      this.$_registerTriggerListeners(this.$_targetNodes, SHOW_EVENT_MAP, this.triggers, this.showTriggers, handleShow);\n      this.$_registerTriggerListeners([this.$_popperNode], SHOW_EVENT_MAP, this.popperTriggers, this.popperShowTriggers, handleShow);\n      const handleHide = (skipAiming) => (event) => {\n        if (event.usedByTooltip) {\n          return;\n        }\n        this.hide({ event, skipAiming });\n      };\n      this.$_registerTriggerListeners(this.$_targetNodes, HIDE_EVENT_MAP, this.triggers, this.hideTriggers, handleHide(false));\n      this.$_registerTriggerListeners([this.$_popperNode], HIDE_EVENT_MAP, this.popperTriggers, this.popperHideTriggers, handleHide(true));\n    },\n    $_registerEventListeners(targetNodes, eventType, handler) {\n      this.$_events.push({ targetNodes, eventType, handler });\n      targetNodes.forEach((node) => node.addEventListener(eventType, handler, supportsPassive ? {\n        passive: true\n      } : void 0));\n    },\n    $_registerTriggerListeners(targetNodes, eventMap, commonTriggers, customTrigger, handler) {\n      let triggers = commonTriggers;\n      if (customTrigger != null) {\n        triggers = typeof customTrigger === \"function\" ? customTrigger(triggers) : customTrigger;\n      }\n      triggers.forEach((trigger) => {\n        const eventType = eventMap[trigger];\n        if (eventType) {\n          this.$_registerEventListeners(targetNodes, eventType, handler);\n        }\n      });\n    },\n    $_removeEventListeners(filterEventType) {\n      const newList = [];\n      this.$_events.forEach((listener) => {\n        const { targetNodes, eventType, handler } = listener;\n        if (!filterEventType || filterEventType === eventType) {\n          targetNodes.forEach((node) => node.removeEventListener(eventType, handler));\n        } else {\n          newList.push(listener);\n        }\n      });\n      this.$_events = newList;\n    },\n    $_refreshListeners() {\n      if (!this.$_isDisposed) {\n        this.$_removeEventListeners();\n        this.$_addEventListeners();\n      }\n    },\n    $_handleGlobalClose(event, touch = false) {\n      if (this.$_showFrameLocked)\n        return;\n      this.hide({ event });\n      if (event.closePopover) {\n        this.$emit(\"close-directive\");\n      } else {\n        this.$emit(\"auto-hide\");\n      }\n      if (touch) {\n        this.$_preventShow = true;\n        setTimeout(() => {\n          this.$_preventShow = false;\n        }, 300);\n      }\n    },\n    $_detachPopperNode() {\n      this.$_popperNode.parentNode && this.$_popperNode.parentNode.removeChild(this.$_popperNode);\n    },\n    $_swapTargetAttrs(attrFrom, attrTo) {\n      for (const el of this.$_targetNodes) {\n        const value = el.getAttribute(attrFrom);\n        if (value) {\n          el.removeAttribute(attrFrom);\n          el.setAttribute(attrTo, value);\n        }\n      }\n    },\n    $_applyAttrsToTarget(attrs) {\n      for (const el of this.$_targetNodes) {\n        for (const n in attrs) {\n          const value = attrs[n];\n          if (value == null) {\n            el.removeAttribute(n);\n          } else {\n            el.setAttribute(n, value);\n          }\n        }\n      }\n    },\n    $_updateParentShownChildren(value) {\n      let parent = this.parentPopper;\n      while (parent) {\n        if (value) {\n          parent.shownChildren.add(this.randomId);\n        } else {\n          parent.shownChildren.delete(this.randomId);\n          if (parent.$_pendingHide) {\n            parent.hide();\n          }\n        }\n        parent = parent.parentPopper;\n      }\n    },\n    $_isAimingPopper() {\n      const referenceBounds = this.$el.getBoundingClientRect();\n      if (mouseX >= referenceBounds.left && mouseX <= referenceBounds.right && mouseY >= referenceBounds.top && mouseY <= referenceBounds.bottom) {\n        const popperBounds = this.$_popperNode.getBoundingClientRect();\n        const vectorX = mouseX - mousePreviousX;\n        const vectorY = mouseY - mousePreviousY;\n        const distance = popperBounds.left + popperBounds.width / 2 - mousePreviousX + (popperBounds.top + popperBounds.height / 2) - mousePreviousY;\n        const newVectorLength = distance + popperBounds.width + popperBounds.height;\n        const edgeX = mousePreviousX + vectorX * newVectorLength;\n        const edgeY = mousePreviousY + vectorY * newVectorLength;\n        return lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.top, popperBounds.left, popperBounds.bottom) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.top, popperBounds.right, popperBounds.top) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.right, popperBounds.top, popperBounds.right, popperBounds.bottom) || lineIntersectsLine(mousePreviousX, mousePreviousY, edgeX, edgeY, popperBounds.left, popperBounds.bottom, popperBounds.right, popperBounds.bottom);\n      }\n      return false;\n    }\n  },\n  render() {\n    return this.$scopedSlots.default(this.slotData)[0];\n  }\n});\nif (typeof document !== \"undefined\" && typeof window !== \"undefined\") {\n  if (isIOS) {\n    document.addEventListener(\"touchstart\", handleGlobalMousedown, supportsPassive ? {\n      passive: true,\n      capture: true\n    } : true);\n    document.addEventListener(\"touchend\", handleGlobalTouchend, supportsPassive ? {\n      passive: true,\n      capture: true\n    } : true);\n  } else {\n    window.addEventListener(\"mousedown\", handleGlobalMousedown, true);\n    window.addEventListener(\"click\", handleGlobalClick, true);\n  }\n  window.addEventListener(\"resize\", computePositionAllShownPoppers);\n}\nfunction handleGlobalMousedown(event) {\n  for (let i = 0; i < shownPoppers.length; i++) {\n    const popper = shownPoppers[i];\n    try {\n      const popperContent = popper.popperNode();\n      popper.$_mouseDownContains = popperContent.contains(event.target);\n    } catch (e) {\n    }\n  }\n}\nfunction handleGlobalClick(event) {\n  handleGlobalClose(event);\n}\nfunction handleGlobalTouchend(event) {\n  handleGlobalClose(event, true);\n}\nfunction handleGlobalClose(event, touch = false) {\n  const preventClose = {};\n  for (let i = shownPoppers.length - 1; i >= 0; i--) {\n    const popper = shownPoppers[i];\n    try {\n      const contains = popper.$_containsGlobalTarget = isContainingEventTarget(popper, event);\n      popper.$_pendingHide = false;\n      requestAnimationFrame(() => {\n        popper.$_pendingHide = false;\n        if (preventClose[popper.randomId])\n          return;\n        if (shouldAutoHide(popper, contains, event)) {\n          popper.$_handleGlobalClose(event, touch);\n          if (!event.closeAllPopover && event.closePopover && contains) {\n            let parent2 = popper.parentPopper;\n            while (parent2) {\n              preventClose[parent2.randomId] = true;\n              parent2 = parent2.parentPopper;\n            }\n            return;\n          }\n          let parent = popper.parentPopper;\n          while (parent) {\n            if (shouldAutoHide(parent, parent.$_containsGlobalTarget, event)) {\n              parent.$_handleGlobalClose(event, touch);\n            } else {\n              break;\n            }\n            parent = parent.parentPopper;\n          }\n        }\n      });\n    } catch (e) {\n    }\n  }\n}\nfunction isContainingEventTarget(popper, event) {\n  const popperContent = popper.popperNode();\n  return popper.$_mouseDownContains || popperContent.contains(event.target);\n}\nfunction shouldAutoHide(popper, contains, event) {\n  return event.closeAllPopover || event.closePopover && contains || getAutoHideResult(popper, event) && !contains;\n}\nfunction getAutoHideResult(popper, event) {\n  if (typeof popper.autoHide === \"function\") {\n    const result = popper.autoHide(event);\n    popper.lastAutoHide = result;\n    return result;\n  }\n  return popper.autoHide;\n}\nfunction computePositionAllShownPoppers(event) {\n  for (let i = 0; i < shownPoppers.length; i++) {\n    const popper = shownPoppers[i];\n    popper.$_computePosition(event);\n  }\n}\nfunction hideAllPoppers() {\n  for (let i = 0; i < shownPoppers.length; i++) {\n    const popper = shownPoppers[i];\n    popper.hide();\n  }\n}\nlet mousePreviousX = 0;\nlet mousePreviousY = 0;\nlet mouseX = 0;\nlet mouseY = 0;\nif (typeof window !== \"undefined\") {\n  window.addEventListener(\"mousemove\", (event) => {\n    mousePreviousX = mouseX;\n    mousePreviousY = mouseY;\n    mouseX = event.clientX;\n    mouseY = event.clientY;\n  }, supportsPassive ? {\n    passive: true\n  } : void 0);\n}\nfunction lineIntersectsLine(x1, y1, x2, y2, x3, y3, x4, y4) {\n  const uA = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\n  const uB = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / ((y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1));\n  return uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1;\n}\nfunction getInternetExplorerVersion() {\n  var ua = window.navigator.userAgent;\n  var msie = ua.indexOf(\"MSIE \");\n  if (msie > 0) {\n    return parseInt(ua.substring(msie + 5, ua.indexOf(\".\", msie)), 10);\n  }\n  var trident = ua.indexOf(\"Trident/\");\n  if (trident > 0) {\n    var rv = ua.indexOf(\"rv:\");\n    return parseInt(ua.substring(rv + 3, ua.indexOf(\".\", rv)), 10);\n  }\n  var edge = ua.indexOf(\"Edge/\");\n  if (edge > 0) {\n    return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n  }\n  return -1;\n}\nvar isIE;\nfunction initCompat() {\n  if (!initCompat.init) {\n    initCompat.init = true;\n    isIE = getInternetExplorerVersion() !== -1;\n  }\n}\nvar script = {\n  name: \"ResizeObserver\",\n  props: {\n    emitOnMount: {\n      type: Boolean,\n      default: false\n    },\n    ignoreWidth: {\n      type: Boolean,\n      default: false\n    },\n    ignoreHeight: {\n      type: Boolean,\n      default: false\n    }\n  },\n  mounted: function mounted() {\n    var _this = this;\n    initCompat();\n    this.$nextTick(function() {\n      _this._w = _this.$el.offsetWidth;\n      _this._h = _this.$el.offsetHeight;\n      if (_this.emitOnMount) {\n        _this.emitSize();\n      }\n    });\n    var object = document.createElement(\"object\");\n    this._resizeObject = object;\n    object.setAttribute(\"aria-hidden\", \"true\");\n    object.setAttribute(\"tabindex\", -1);\n    object.onload = this.addResizeHandlers;\n    object.type = \"text/html\";\n    if (isIE) {\n      this.$el.appendChild(object);\n    }\n    object.data = \"about:blank\";\n    if (!isIE) {\n      this.$el.appendChild(object);\n    }\n  },\n  beforeDestroy: function beforeDestroy() {\n    this.removeResizeHandlers();\n  },\n  methods: {\n    compareAndNotify: function compareAndNotify() {\n      if (!this.ignoreWidth && this._w !== this.$el.offsetWidth || !this.ignoreHeight && this._h !== this.$el.offsetHeight) {\n        this._w = this.$el.offsetWidth;\n        this._h = this.$el.offsetHeight;\n        this.emitSize();\n      }\n    },\n    emitSize: function emitSize() {\n      this.$emit(\"notify\", {\n        width: this._w,\n        height: this._h\n      });\n    },\n    addResizeHandlers: function addResizeHandlers() {\n      this._resizeObject.contentDocument.defaultView.addEventListener(\"resize\", this.compareAndNotify);\n      this.compareAndNotify();\n    },\n    removeResizeHandlers: function removeResizeHandlers() {\n      if (this._resizeObject && this._resizeObject.onload) {\n        if (!isIE && this._resizeObject.contentDocument) {\n          this._resizeObject.contentDocument.defaultView.removeEventListener(\"resize\", this.compareAndNotify);\n        }\n        this.$el.removeChild(this._resizeObject);\n        this._resizeObject.onload = null;\n        this._resizeObject = null;\n      }\n    }\n  }\n};\nfunction normalizeComponent$1(template, style, script2, scopeId, isFunctionalTemplate, moduleIdentifier, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\n  if (typeof shadowMode !== \"boolean\") {\n    createInjectorSSR = createInjector;\n    createInjector = shadowMode;\n    shadowMode = false;\n  }\n  var options2 = typeof script2 === \"function\" ? script2.options : script2;\n  if (template && template.render) {\n    options2.render = template.render;\n    options2.staticRenderFns = template.staticRenderFns;\n    options2._compiled = true;\n    if (isFunctionalTemplate) {\n      options2.functional = true;\n    }\n  }\n  if (scopeId) {\n    options2._scopeId = scopeId;\n  }\n  var hook;\n  if (moduleIdentifier) {\n    hook = function hook2(context) {\n      context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n        context = __VUE_SSR_CONTEXT__;\n      }\n      if (style) {\n        style.call(this, createInjectorSSR(context));\n      }\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier);\n      }\n    };\n    options2._ssrRegister = hook;\n  } else if (style) {\n    hook = shadowMode ? function(context) {\n      style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\n    } : function(context) {\n      style.call(this, createInjector(context));\n    };\n  }\n  if (hook) {\n    if (options2.functional) {\n      var originalRender = options2.render;\n      options2.render = function renderWithStyleInjection(h, context) {\n        hook.call(context);\n        return originalRender(h, context);\n      };\n    } else {\n      var existing = options2.beforeCreate;\n      options2.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n    }\n  }\n  return script2;\n}\nvar __vue_script__ = script;\nvar __vue_render__ = function __vue_render__2() {\n  var _vm = this;\n  var _h = _vm.$createElement;\n  var _c = _vm._self._c || _h;\n  return _c(\"div\", {\n    staticClass: \"resize-observer\",\n    attrs: {\n      tabindex: \"-1\"\n    }\n  });\n};\nvar __vue_staticRenderFns__ = [];\n__vue_render__._withStripped = true;\nvar __vue_inject_styles__ = void 0;\nvar __vue_scope_id__ = \"data-v-8859cc6c\";\nvar __vue_module_identifier__ = void 0;\nvar __vue_is_functional_template__ = false;\nvar __vue_component__ = /* @__PURE__ */ normalizeComponent$1({\n  render: __vue_render__,\n  staticRenderFns: __vue_staticRenderFns__\n}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, void 0, void 0, void 0);\nfunction install$1(Vue2) {\n  Vue2.component(\"resize-observer\", __vue_component__);\n  Vue2.component(\"ResizeObserver\", __vue_component__);\n}\nvar plugin$1 = {\n  version: \"1.0.1\",\n  install: install$1\n};\nvar GlobalVue$1 = null;\nif (typeof window !== \"undefined\") {\n  GlobalVue$1 = window.Vue;\n} else if (typeof global !== \"undefined\") {\n  GlobalVue$1 = global.Vue;\n}\nif (GlobalVue$1) {\n  GlobalVue$1.use(plugin$1);\n}\nvar PrivateThemeClass = {\n  computed: {\n    themeClass() {\n      return getThemeClasses(this.theme);\n    }\n  }\n};\nvar __vue2_script$5 = {\n  name: \"VPopperContent\",\n  components: {\n    ResizeObserver: __vue_component__\n  },\n  mixins: [\n    PrivateThemeClass\n  ],\n  props: {\n    popperId: String,\n    theme: String,\n    shown: Boolean,\n    mounted: Boolean,\n    skipTransition: Boolean,\n    autoHide: Boolean,\n    handleResize: Boolean,\n    classes: Object,\n    result: Object\n  },\n  methods: {\n    toPx(value) {\n      if (value != null && !isNaN(value)) {\n        return `${value}px`;\n      }\n      return null;\n    }\n  }\n};\nvar render$2 = function() {\n  var _vm = this;\n  var _h = _vm.$createElement;\n  var _c = _vm._self._c || _h;\n  return _c(\"div\", { ref: \"popover\", staticClass: \"v-popper__popper\", class: [\n    _vm.themeClass,\n    _vm.classes.popperClass,\n    {\n      \"v-popper__popper--shown\": _vm.shown,\n      \"v-popper__popper--hidden\": !_vm.shown,\n      \"v-popper__popper--show-from\": _vm.classes.showFrom,\n      \"v-popper__popper--show-to\": _vm.classes.showTo,\n      \"v-popper__popper--hide-from\": _vm.classes.hideFrom,\n      \"v-popper__popper--hide-to\": _vm.classes.hideTo,\n      \"v-popper__popper--skip-transition\": _vm.skipTransition,\n      \"v-popper__popper--arrow-overflow\": _vm.result && _vm.result.arrow.overflow,\n      \"v-popper__popper--no-positioning\": !_vm.result\n    }\n  ], style: _vm.result ? {\n    position: _vm.result.strategy,\n    transform: \"translate3d(\" + Math.round(_vm.result.x) + \"px,\" + Math.round(_vm.result.y) + \"px,0)\"\n  } : void 0, attrs: { \"id\": _vm.popperId, \"aria-hidden\": _vm.shown ? \"false\" : \"true\", \"tabindex\": _vm.autoHide ? 0 : void 0, \"data-popper-placement\": _vm.result ? _vm.result.placement : void 0 }, on: { \"keyup\": function($event) {\n    if (!$event.type.indexOf(\"key\") && _vm._k($event.keyCode, \"esc\", 27, $event.key, [\"Esc\", \"Escape\"])) {\n      return null;\n    }\n    _vm.autoHide && _vm.$emit(\"hide\");\n  } } }, [_c(\"div\", { staticClass: \"v-popper__backdrop\", on: { \"click\": function($event) {\n    _vm.autoHide && _vm.$emit(\"hide\");\n  } } }), _c(\"div\", { staticClass: \"v-popper__wrapper\", style: _vm.result ? {\n    transformOrigin: _vm.result.transformOrigin\n  } : void 0 }, [_c(\"div\", { ref: \"inner\", staticClass: \"v-popper__inner\" }, [_vm.mounted ? [_c(\"div\", [_vm._t(\"default\")], 2), _vm.handleResize ? _c(\"ResizeObserver\", { on: { \"notify\": function($event) {\n    return _vm.$emit(\"resize\", $event);\n  } } }) : _vm._e()] : _vm._e()], 2), _c(\"div\", { ref: \"arrow\", staticClass: \"v-popper__arrow-container\", style: _vm.result ? {\n    left: _vm.toPx(_vm.result.arrow.x),\n    top: _vm.toPx(_vm.result.arrow.y)\n  } : void 0 }, [_c(\"div\", { staticClass: \"v-popper__arrow-outer\" }), _c(\"div\", { staticClass: \"v-popper__arrow-inner\" })])])]);\n};\nvar staticRenderFns$2 = [];\nvar PopperContent_vue_vue_type_style_index_0_lang = \"\";\nfunction normalizeComponent(scriptExports, render2, staticRenderFns2, functionalTemplate, injectStyles, scopeId, moduleIdentifier, shadowMode) {\n  var options2 = typeof scriptExports === \"function\" ? scriptExports.options : scriptExports;\n  if (render2) {\n    options2.render = render2;\n    options2.staticRenderFns = staticRenderFns2;\n    options2._compiled = true;\n  }\n  if (functionalTemplate) {\n    options2.functional = true;\n  }\n  if (scopeId) {\n    options2._scopeId = \"data-v-\" + scopeId;\n  }\n  var hook;\n  if (moduleIdentifier) {\n    hook = function(context) {\n      context = context || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext;\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== \"undefined\") {\n        context = __VUE_SSR_CONTEXT__;\n      }\n      if (injectStyles) {\n        injectStyles.call(this, context);\n      }\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier);\n      }\n    };\n    options2._ssrRegister = hook;\n  } else if (injectStyles) {\n    hook = shadowMode ? function() {\n      injectStyles.call(this, (options2.functional ? this.parent : this).$root.$options.shadowRoot);\n    } : injectStyles;\n  }\n  if (hook) {\n    if (options2.functional) {\n      options2._injectStyles = hook;\n      var originalRender = options2.render;\n      options2.render = function renderWithStyleInjection(h, context) {\n        hook.call(context);\n        return originalRender(h, context);\n      };\n    } else {\n      var existing = options2.beforeCreate;\n      options2.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n    }\n  }\n  return {\n    exports: scriptExports,\n    options: options2\n  };\n}\nconst __cssModules$5 = {};\nvar __component__$5 = /* @__PURE__ */ normalizeComponent(__vue2_script$5, render$2, staticRenderFns$2, false, __vue2_injectStyles$5, null, null, null);\nfunction __vue2_injectStyles$5(context) {\n  for (let o in __cssModules$5) {\n    this[o] = __cssModules$5[o];\n  }\n}\nvar PrivatePopperContent = /* @__PURE__ */ function() {\n  return __component__$5.exports;\n}();\nvar PrivatePopperMethods = {\n  methods: {\n    show(...args) {\n      return this.$refs.popper.show(...args);\n    },\n    hide(...args) {\n      return this.$refs.popper.hide(...args);\n    },\n    dispose(...args) {\n      return this.$refs.popper.dispose(...args);\n    },\n    onResize(...args) {\n      return this.$refs.popper.onResize(...args);\n    }\n  }\n};\nvar __vue2_script$4 = {\n  name: \"VPopperWrapper\",\n  components: {\n    Popper: PrivatePopper(),\n    PopperContent: PrivatePopperContent\n  },\n  mixins: [\n    PrivatePopperMethods,\n    PrivateThemeClass\n  ],\n  inheritAttrs: false,\n  props: {\n    theme: {\n      type: String,\n      default() {\n        return this.$options.vPopperTheme;\n      }\n    }\n  },\n  methods: {\n    getTargetNodes() {\n      return Array.from(this.$refs.reference.children).filter((node) => node !== this.$refs.popperContent.$el);\n    }\n  }\n};\nvar render$1 = function() {\n  var _vm = this;\n  var _h = _vm.$createElement;\n  var _c = _vm._self._c || _h;\n  return _c(\"Popper\", _vm._g(_vm._b({ ref: \"popper\", attrs: { \"theme\": _vm.theme, \"target-nodes\": _vm.getTargetNodes, \"reference-node\": function() {\n    return _vm.$refs.reference;\n  }, \"popper-node\": function() {\n    return _vm.$refs.popperContent.$el;\n  } }, scopedSlots: _vm._u([{ key: \"default\", fn: function(ref) {\n    var popperId = ref.popperId;\n    var isShown = ref.isShown;\n    var shouldMountContent = ref.shouldMountContent;\n    var skipTransition = ref.skipTransition;\n    var autoHide = ref.autoHide;\n    var show = ref.show;\n    var hide = ref.hide;\n    var handleResize = ref.handleResize;\n    var onResize = ref.onResize;\n    var classes = ref.classes;\n    var result = ref.result;\n    return [_c(\"div\", { ref: \"reference\", staticClass: \"v-popper\", class: [\n      _vm.themeClass,\n      {\n        \"v-popper--shown\": isShown\n      }\n    ] }, [_vm._t(\"default\", null, { \"shown\": isShown, \"show\": show, \"hide\": hide }), _c(\"PopperContent\", { ref: \"popperContent\", attrs: { \"popper-id\": popperId, \"theme\": _vm.theme, \"shown\": isShown, \"mounted\": shouldMountContent, \"skip-transition\": skipTransition, \"auto-hide\": autoHide, \"handle-resize\": handleResize, \"classes\": classes, \"result\": result }, on: { \"hide\": hide, \"resize\": onResize } }, [_vm._t(\"popper\", null, { \"shown\": isShown, \"hide\": hide })], 2)], 2)];\n  } }], null, true) }, \"Popper\", _vm.$attrs, false), _vm.$listeners));\n};\nvar staticRenderFns$1 = [];\nconst __cssModules$4 = {};\nvar __component__$4 = /* @__PURE__ */ normalizeComponent(__vue2_script$4, render$1, staticRenderFns$1, false, __vue2_injectStyles$4, null, null, null);\nfunction __vue2_injectStyles$4(context) {\n  for (let o in __cssModules$4) {\n    this[o] = __cssModules$4[o];\n  }\n}\nvar PrivatePopperWrapper = /* @__PURE__ */ function() {\n  return __component__$4.exports;\n}();\nvar __vue2_script$3 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), {\n  name: \"VDropdown\",\n  vPopperTheme: \"dropdown\"\n});\nvar Dropdown_vue_vue_type_style_index_0_lang = \"\";\nlet __vue2_render$2, __vue2_staticRenderFns$2;\nconst __cssModules$3 = {};\nvar __component__$3 = /* @__PURE__ */ normalizeComponent(__vue2_script$3, __vue2_render$2, __vue2_staticRenderFns$2, false, __vue2_injectStyles$3, null, null, null);\nfunction __vue2_injectStyles$3(context) {\n  for (let o in __cssModules$3) {\n    this[o] = __cssModules$3[o];\n  }\n}\nvar PrivateDropdown = /* @__PURE__ */ function() {\n  return __component__$3.exports;\n}();\nvar __vue2_script$2 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), {\n  name: \"VMenu\",\n  vPopperTheme: \"menu\"\n});\nlet __vue2_render$1, __vue2_staticRenderFns$1;\nconst __cssModules$2 = {};\nvar __component__$2 = /* @__PURE__ */ normalizeComponent(__vue2_script$2, __vue2_render$1, __vue2_staticRenderFns$1, false, __vue2_injectStyles$2, null, null, null);\nfunction __vue2_injectStyles$2(context) {\n  for (let o in __cssModules$2) {\n    this[o] = __cssModules$2[o];\n  }\n}\nvar PrivateMenu = /* @__PURE__ */ function() {\n  return __component__$2.exports;\n}();\nvar __vue2_script$1 = __spreadProps(__spreadValues({}, PrivatePopperWrapper), {\n  name: \"VTooltip\",\n  vPopperTheme: \"tooltip\"\n});\nvar Tooltip_vue_vue_type_style_index_0_lang = \"\";\nlet __vue2_render, __vue2_staticRenderFns;\nconst __cssModules$1 = {};\nvar __component__$1 = /* @__PURE__ */ normalizeComponent(__vue2_script$1, __vue2_render, __vue2_staticRenderFns, false, __vue2_injectStyles$1, null, null, null);\nfunction __vue2_injectStyles$1(context) {\n  for (let o in __cssModules$1) {\n    this[o] = __cssModules$1[o];\n  }\n}\nvar PrivateTooltip = /* @__PURE__ */ function() {\n  return __component__$1.exports;\n}();\nvar __vue2_script = {\n  name: \"VTooltipDirective\",\n  components: {\n    Popper: PrivatePopper(),\n    PopperContent: PrivatePopperContent\n  },\n  mixins: [\n    PrivatePopperMethods\n  ],\n  inheritAttrs: false,\n  props: {\n    theme: {\n      type: String,\n      default: \"tooltip\"\n    },\n    html: {\n      type: Boolean,\n      default() {\n        return getDefaultConfig(this.theme, \"html\");\n      }\n    },\n    content: {\n      type: [String, Number, Function],\n      default: null\n    },\n    loadingContent: {\n      type: String,\n      default() {\n        return getDefaultConfig(this.theme, \"loadingContent\");\n      }\n    }\n  },\n  data() {\n    return {\n      asyncContent: null\n    };\n  },\n  computed: {\n    isContentAsync() {\n      return typeof this.content === \"function\";\n    },\n    loading() {\n      return this.isContentAsync && this.asyncContent == null;\n    },\n    finalContent() {\n      if (this.isContentAsync) {\n        return this.loading ? this.loadingContent : this.asyncContent;\n      }\n      return this.content;\n    }\n  },\n  watch: {\n    content: {\n      handler() {\n        this.fetchContent(true);\n      },\n      immediate: true\n    },\n    async finalContent(value) {\n      await this.$nextTick();\n      this.$refs.popper.onResize();\n    }\n  },\n  created() {\n    this.$_fetchId = 0;\n  },\n  methods: {\n    fetchContent(force) {\n      if (typeof this.content === \"function\" && this.$_isShown && (force || !this.$_loading && this.asyncContent == null)) {\n        this.asyncContent = null;\n        this.$_loading = true;\n        const fetchId = ++this.$_fetchId;\n        const result = this.content(this);\n        if (result.then) {\n          result.then((res) => this.onResult(fetchId, res));\n        } else {\n          this.onResult(fetchId, result);\n        }\n      }\n    },\n    onResult(fetchId, result) {\n      if (fetchId !== this.$_fetchId)\n        return;\n      this.$_loading = false;\n      this.asyncContent = result;\n    },\n    onShow() {\n      this.$_isShown = true;\n      this.fetchContent();\n    },\n    onHide() {\n      this.$_isShown = false;\n    }\n  }\n};\nvar render = function() {\n  var _vm = this;\n  var _h = _vm.$createElement;\n  var _c = _vm._self._c || _h;\n  return _c(\"Popper\", _vm._g(_vm._b({ ref: \"popper\", attrs: { \"theme\": _vm.theme, \"popper-node\": function() {\n    return _vm.$refs.popperContent.$el;\n  } }, on: { \"apply-show\": _vm.onShow, \"apply-hide\": _vm.onHide }, scopedSlots: _vm._u([{ key: \"default\", fn: function(ref) {\n    var popperId = ref.popperId;\n    var isShown = ref.isShown;\n    var shouldMountContent = ref.shouldMountContent;\n    var skipTransition = ref.skipTransition;\n    var autoHide = ref.autoHide;\n    var hide = ref.hide;\n    var handleResize = ref.handleResize;\n    var onResize = ref.onResize;\n    var classes = ref.classes;\n    var result = ref.result;\n    return [_c(\"PopperContent\", { ref: \"popperContent\", class: {\n      \"v-popper--tooltip-loading\": _vm.loading\n    }, attrs: { \"popper-id\": popperId, \"theme\": _vm.theme, \"shown\": isShown, \"mounted\": shouldMountContent, \"skip-transition\": skipTransition, \"auto-hide\": autoHide, \"handle-resize\": handleResize, \"classes\": classes, \"result\": result }, on: { \"hide\": hide, \"resize\": onResize } }, [_vm.html ? _c(\"div\", { domProps: { \"innerHTML\": _vm._s(_vm.finalContent) } }) : _c(\"div\", { domProps: { \"textContent\": _vm._s(_vm.finalContent) } })])];\n  } }]) }, \"Popper\", _vm.$attrs, false), _vm.$listeners));\n};\nvar staticRenderFns = [];\nconst __cssModules = {};\nvar __component__ = /* @__PURE__ */ normalizeComponent(__vue2_script, render, staticRenderFns, false, __vue2_injectStyles, null, null, null);\nfunction __vue2_injectStyles(context) {\n  for (let o in __cssModules) {\n    this[o] = __cssModules[o];\n  }\n}\nvar PrivateTooltipDirective = /* @__PURE__ */ function() {\n  return __component__.exports;\n}();\nconst TARGET_CLASS = \"v-popper--has-tooltip\";\nfunction getPlacement(options2, modifiers) {\n  let result = options2.placement;\n  if (!result && modifiers) {\n    for (const pos of placements) {\n      if (modifiers[pos]) {\n        result = pos;\n      }\n    }\n  }\n  if (!result) {\n    result = getDefaultConfig(options2.theme || \"tooltip\", \"placement\");\n  }\n  return result;\n}\nfunction getOptions(el, value, modifiers) {\n  let options2;\n  const type = typeof value;\n  if (type === \"string\") {\n    options2 = { content: value };\n  } else if (value && type === \"object\") {\n    options2 = value;\n  } else {\n    options2 = { content: false };\n  }\n  options2.placement = getPlacement(options2, modifiers);\n  options2.targetNodes = () => [el];\n  options2.referenceNode = () => el;\n  return options2;\n}\nfunction createTooltip(el, value, modifiers) {\n  const options2 = getOptions(el, value, modifiers);\n  const tooltipApp = el.$_popper = new Vue({\n    mixins: [\n      PrivatePopperMethods\n    ],\n    data() {\n      return {\n        options: options2\n      };\n    },\n    render(h) {\n      const _a = this.options, {\n        theme,\n        html,\n        content,\n        loadingContent\n      } = _a, otherOptions = __objRest(_a, [\n        \"theme\",\n        \"html\",\n        \"content\",\n        \"loadingContent\"\n      ]);\n      return h(PrivateTooltipDirective, {\n        props: {\n          theme,\n          html,\n          content,\n          loadingContent\n        },\n        attrs: otherOptions,\n        ref: \"popper\"\n      });\n    },\n    devtools: {\n      hide: true\n    }\n  });\n  const mountTarget = document.createElement(\"div\");\n  document.body.appendChild(mountTarget);\n  tooltipApp.$mount(mountTarget);\n  if (el.classList) {\n    el.classList.add(TARGET_CLASS);\n  }\n  return tooltipApp;\n}\nfunction destroyTooltip(el) {\n  if (el.$_popper) {\n    el.$_popper.$destroy();\n    delete el.$_popper;\n    delete el.$_popperOldShown;\n  }\n  if (el.classList) {\n    el.classList.remove(TARGET_CLASS);\n  }\n}\nfunction bind(el, { value, oldValue, modifiers }) {\n  const options2 = getOptions(el, value, modifiers);\n  if (!options2.content || getDefaultConfig(options2.theme || \"tooltip\", \"disabled\")) {\n    destroyTooltip(el);\n  } else {\n    let tooltipApp;\n    if (el.$_popper) {\n      tooltipApp = el.$_popper;\n      tooltipApp.options = options2;\n    } else {\n      tooltipApp = createTooltip(el, value, modifiers);\n    }\n    if (typeof value.shown !== \"undefined\" && value.shown !== el.$_popperOldShown) {\n      el.$_popperOldShown = value.shown;\n      value.shown ? tooltipApp.show() : tooltipApp.hide();\n    }\n  }\n}\nvar PrivateVTooltip = {\n  bind,\n  update: bind,\n  unbind(el) {\n    destroyTooltip(el);\n  }\n};\nfunction addListeners(el) {\n  el.addEventListener(\"click\", onClick);\n  el.addEventListener(\"touchstart\", onTouchStart, supportsPassive ? {\n    passive: true\n  } : false);\n}\nfunction removeListeners(el) {\n  el.removeEventListener(\"click\", onClick);\n  el.removeEventListener(\"touchstart\", onTouchStart);\n  el.removeEventListener(\"touchend\", onTouchEnd);\n  el.removeEventListener(\"touchcancel\", onTouchCancel);\n}\nfunction onClick(event) {\n  const el = event.currentTarget;\n  event.closePopover = !el.$_vclosepopover_touch;\n  event.closeAllPopover = el.$_closePopoverModifiers && !!el.$_closePopoverModifiers.all;\n}\nfunction onTouchStart(event) {\n  if (event.changedTouches.length === 1) {\n    const el = event.currentTarget;\n    el.$_vclosepopover_touch = true;\n    const touch = event.changedTouches[0];\n    el.$_vclosepopover_touchPoint = touch;\n    el.addEventListener(\"touchend\", onTouchEnd);\n    el.addEventListener(\"touchcancel\", onTouchCancel);\n  }\n}\nfunction onTouchEnd(event) {\n  const el = event.currentTarget;\n  el.$_vclosepopover_touch = false;\n  if (event.changedTouches.length === 1) {\n    const touch = event.changedTouches[0];\n    const firstTouch = el.$_vclosepopover_touchPoint;\n    event.closePopover = Math.abs(touch.screenY - firstTouch.screenY) < 20 && Math.abs(touch.screenX - firstTouch.screenX) < 20;\n    event.closeAllPopover = el.$_closePopoverModifiers && !!el.$_closePopoverModifiers.all;\n  }\n}\nfunction onTouchCancel(event) {\n  const el = event.currentTarget;\n  el.$_vclosepopover_touch = false;\n}\nvar PrivateVClosePopper = {\n  bind(el, { value, modifiers }) {\n    el.$_closePopoverModifiers = modifiers;\n    if (typeof value === \"undefined\" || value) {\n      addListeners(el);\n    }\n  },\n  update(el, { value, oldValue, modifiers }) {\n    el.$_closePopoverModifiers = modifiers;\n    if (value !== oldValue) {\n      if (typeof value === \"undefined\" || value) {\n        addListeners(el);\n      } else {\n        removeListeners(el);\n      }\n    }\n  },\n  unbind(el) {\n    removeListeners(el);\n  }\n};\nconst options = config;\nconst VTooltip = PrivateVTooltip;\nconst VClosePopper = PrivateVClosePopper;\nconst Dropdown = PrivateDropdown;\nconst Menu = PrivateMenu;\nconst Popper = PrivatePopper;\nconst PopperContent = PrivatePopperContent;\nconst PopperMethods = PrivatePopperMethods;\nconst PopperWrapper = PrivatePopperWrapper;\nconst ThemeClass = PrivateThemeClass;\nconst Tooltip = PrivateTooltip;\nconst TooltipDirective = PrivateTooltipDirective;\nfunction install(app, options2 = {}) {\n  if (app.$_vTooltipInstalled)\n    return;\n  app.$_vTooltipInstalled = true;\n  assign(config, options2);\n  app.directive(\"tooltip\", PrivateVTooltip);\n  app.directive(\"close-popper\", PrivateVClosePopper);\n  app.component(\"v-tooltip\", PrivateTooltip);\n  app.component(\"VTooltip\", PrivateTooltip);\n  app.component(\"v-dropdown\", PrivateDropdown);\n  app.component(\"VDropdown\", PrivateDropdown);\n  app.component(\"v-menu\", PrivateMenu);\n  app.component(\"VMenu\", PrivateMenu);\n}\nconst plugin = {\n  version: \"1.0.0-beta.19\",\n  install,\n  options: config\n};\nlet GlobalVue = null;\nif (typeof window !== \"undefined\") {\n  GlobalVue = window.Vue;\n} else if (typeof global !== \"undefined\") {\n  GlobalVue = global.Vue;\n}\nif (GlobalVue) {\n  GlobalVue.use(plugin);\n}\nexport { Dropdown, HIDE_EVENT_MAP, Menu, Popper, PopperContent, PopperMethods, PopperWrapper, SHOW_EVENT_MAP, ThemeClass, Tooltip, TooltipDirective, VClosePopper, VTooltip, createTooltip, plugin as default, destroyTooltip, hideAllPoppers, install, options, placements };\n","import '../assets/Tooltip-wOLIuz0Q.css';\nimport { options as o } from \"floating-vue\";\nimport { VTooltip as l, options as s } from \"floating-vue\";\n/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\no.themes.tooltip.html = !1;\no.themes.tooltip.delay = { show: 500, hide: 200 };\no.themes.tooltip.distance = 10;\no.themes.tooltip[\"arrow-padding\"] = 3;\nexport {\n  l as default,\n  s as options\n};\n","import { n as r } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst l = {\n  name: \"ArrowRightIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar n = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon arrow-right-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(i) {\n    return t.$emit(\"click\", i);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, s = [], a = /* @__PURE__ */ r(\n  l,\n  n,\n  s,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as A\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass ScopedStorage {\n  constructor(scope, wrapped, persistent) {\n    _defineProperty(this, \"scope\", void 0);\n    _defineProperty(this, \"wrapped\", void 0);\n    this.scope = `${persistent ? ScopedStorage.GLOBAL_SCOPE_PERSISTENT : ScopedStorage.GLOBAL_SCOPE_VOLATILE}_${btoa(scope)}_`;\n    this.wrapped = wrapped;\n  }\n  scopeKey(key) {\n    return `${this.scope}${key}`;\n  }\n  setItem(key, value) {\n    this.wrapped.setItem(this.scopeKey(key), value);\n  }\n  getItem(key) {\n    return this.wrapped.getItem(this.scopeKey(key));\n  }\n  removeItem(key) {\n    this.wrapped.removeItem(this.scopeKey(key));\n  }\n  clear() {\n    Object.keys(this.wrapped).filter(key => key.startsWith(this.scope)).map(this.wrapped.removeItem.bind(this.wrapped));\n  }\n}\nexports.default = ScopedStorage;\n_defineProperty(ScopedStorage, \"GLOBAL_SCOPE_VOLATILE\", 'nextcloud_vol');\n_defineProperty(ScopedStorage, \"GLOBAL_SCOPE_PERSISTENT\", 'nextcloud_per');\n//# sourceMappingURL=scopedstorage.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = void 0;\nvar _scopedstorage = _interopRequireDefault(require(\"./scopedstorage\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nclass StorageBuilder {\n  constructor(appId) {\n    _defineProperty(this, \"appId\", void 0);\n    _defineProperty(this, \"persisted\", false);\n    _defineProperty(this, \"clearedOnLogout\", false);\n    this.appId = appId;\n  }\n  persist() {\n    let persist = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    this.persisted = persist;\n    return this;\n  }\n  clearOnLogout() {\n    let clear = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    this.clearedOnLogout = clear;\n    return this;\n  }\n  build() {\n    return new _scopedstorage.default(this.appId, this.persisted ? window.localStorage : window.sessionStorage, !this.clearedOnLogout);\n  }\n}\nexports.default = StorageBuilder;\n//# sourceMappingURL=storagebuilder.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.clearAll = clearAll;\nexports.clearNonPersistent = clearNonPersistent;\nexports.getBuilder = getBuilder;\nvar _storagebuilder = _interopRequireDefault(require(\"./storagebuilder\"));\nvar _scopedstorage = _interopRequireDefault(require(\"./scopedstorage\"));\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\nfunction getBuilder(appId) {\n  return new _storagebuilder.default(appId);\n}\nfunction clearStorage(storage, pred) {\n  Object.keys(storage).filter(k => pred ? pred(k) : true).map(storage.removeItem.bind(storage));\n}\nfunction clearAll() {\n  const storages = [window.sessionStorage, window.localStorage];\n  storages.map(s => clearStorage(s));\n}\nfunction clearNonPersistent() {\n  const storages = [window.sessionStorage, window.localStorage];\n  storages.map(s => clearStorage(s, k => !k.startsWith(_scopedstorage.default.GLOBAL_SCOPE_PERSISTENT)));\n}\n//# sourceMappingURL=index.js.map","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n  var vm\n  var provide = {}\n  var app = {\n    config: Vue.config,\n    use: Vue.use.bind(Vue),\n    mixin: Vue.mixin.bind(Vue),\n    component: Vue.component.bind(Vue),\n    provide: function (key, value) {\n      provide[key] = value\n      return this\n    },\n    directive: function (name, dir) {\n      if (dir) {\n        Vue.directive(name, dir)\n        return app\n      } else {\n        return Vue.directive(name)\n      }\n    },\n    mount: function (el, hydrating) {\n      if (!vm) {\n        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n        vm.$mount(el, hydrating)\n        return vm\n      } else {\n        return vm\n      }\n    },\n    unmount: function () {\n      if (vm) {\n        vm.$destroy()\n        vm = undefined\n      }\n    },\n  }\n  return app\n}\n\nexport {\n  Vue,\n  Vue2,\n  isVue2,\n  isVue3,\n  install,\n  warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n  return {\n    setup() {\n      throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n    }\n  }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n  return !!getCurrentInstance()\n}\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, provide, inject, isVue3, version, isRef, unref, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, isVue2, set as set$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue-demi';\n\nfunction computedEager(fn, options) {\n  var _a;\n  const result = shallowRef();\n  watchEffect(() => {\n    result.value = fn();\n  }, {\n    ...options,\n    flush: (_a = options == null ? void 0 : options.flush) != null ? _a : \"sync\"\n  });\n  return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n  let v = void 0;\n  let track;\n  let trigger;\n  const dirty = ref(true);\n  const update = () => {\n    dirty.value = true;\n    trigger();\n  };\n  watch(source, update, { flush: \"sync\" });\n  const get = typeof fn === \"function\" ? fn : fn.get;\n  const set = typeof fn === \"function\" ? void 0 : fn.set;\n  const result = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        if (dirty.value) {\n          v = get();\n          dirty.value = false;\n        }\n        track();\n        return v;\n      },\n      set(v2) {\n        set == null ? void 0 : set(v2);\n      }\n    };\n  });\n  if (Object.isExtensible(result))\n    result.trigger = update;\n  return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nfunction createEventHook() {\n  const fns = /* @__PURE__ */ new Set();\n  const off = (fn) => {\n    fns.delete(fn);\n  };\n  const on = (fn) => {\n    fns.add(fn);\n    const offFn = () => off(fn);\n    tryOnScopeDispose(offFn);\n    return {\n      off: offFn\n    };\n  };\n  const trigger = (...args) => {\n    return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n  };\n  return {\n    on,\n    off,\n    trigger\n  };\n}\n\nfunction createGlobalState(stateFactory) {\n  let initialized = false;\n  let state;\n  const scope = effectScope(true);\n  return (...args) => {\n    if (!initialized) {\n      state = scope.run(() => stateFactory(...args));\n      initialized = true;\n    }\n    return state;\n  };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst provideLocal = (key, value) => {\n  var _a;\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"provideLocal must be called in setup\");\n  if (!localProvidedStateMap.has(instance))\n    localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n  const localProvidedState = localProvidedStateMap.get(instance);\n  localProvidedState[key] = value;\n  provide(key, value);\n};\n\nconst injectLocal = (...args) => {\n  var _a;\n  const key = args[0];\n  const instance = (_a = getCurrentInstance()) == null ? void 0 : _a.proxy;\n  if (instance == null)\n    throw new Error(\"injectLocal must be called in setup\");\n  if (localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n    return localProvidedStateMap.get(instance)[key];\n  return inject(...args);\n};\n\nfunction createInjectionState(composable, options) {\n  const key = (options == null ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n  const useProvidingState = (...args) => {\n    const state = composable(...args);\n    provideLocal(key, state);\n    return state;\n  };\n  const useInjectedState = () => injectLocal(key);\n  return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n  let subscribers = 0;\n  let state;\n  let scope;\n  const dispose = () => {\n    subscribers -= 1;\n    if (scope && subscribers <= 0) {\n      scope.stop();\n      state = void 0;\n      scope = void 0;\n    }\n  };\n  return (...args) => {\n    subscribers += 1;\n    if (!state) {\n      scope = effectScope(true);\n      state = scope.run(() => composable(...args));\n    }\n    tryOnScopeDispose(dispose);\n    return state;\n  };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] extendRef only works in Vue 2.7 or above.\");\n    return;\n  }\n  for (const [key, value] of Object.entries(extend)) {\n    if (key === \"value\")\n      continue;\n    if (isRef(value) && unwrap) {\n      Object.defineProperty(ref, key, {\n        get() {\n          return value.value;\n        },\n        set(v) {\n          value.value = v;\n        },\n        enumerable\n      });\n    } else {\n      Object.defineProperty(ref, key, { value, enumerable });\n    }\n  }\n  return ref;\n}\n\nfunction get(obj, key) {\n  if (key == null)\n    return unref(obj);\n  return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n  return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n  if (typeof Symbol !== \"undefined\") {\n    const clone = { ...obj };\n    Object.defineProperty(clone, Symbol.iterator, {\n      enumerable: false,\n      value() {\n        let index = 0;\n        return {\n          next: () => ({\n            value: arr[index++],\n            done: index > arr.length\n          })\n        };\n      }\n    });\n    return clone;\n  } else {\n    return Object.assign([...arr], obj);\n  }\n}\n\nfunction toValue(r) {\n  return typeof r === \"function\" ? r() : unref(r);\n}\nconst resolveUnref = toValue;\n\nfunction reactify(fn, options) {\n  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : toValue;\n  return function(...args) {\n    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n  };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n  let keys = [];\n  let options;\n  if (Array.isArray(optionsOrKeys)) {\n    keys = optionsOrKeys;\n  } else {\n    options = optionsOrKeys;\n    const { includeOwnProperties = true } = optionsOrKeys;\n    keys.push(...Object.keys(obj));\n    if (includeOwnProperties)\n      keys.push(...Object.getOwnPropertyNames(obj));\n  }\n  return Object.fromEntries(\n    keys.map((key) => {\n      const value = obj[key];\n      return [\n        key,\n        typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n      ];\n    })\n  );\n}\n\nfunction toReactive(objectRef) {\n  if (!isRef(objectRef))\n    return reactive(objectRef);\n  const proxy = new Proxy({}, {\n    get(_, p, receiver) {\n      return unref(Reflect.get(objectRef.value, p, receiver));\n    },\n    set(_, p, value) {\n      if (isRef(objectRef.value[p]) && !isRef(value))\n        objectRef.value[p].value = value;\n      else\n        objectRef.value[p] = value;\n      return true;\n    },\n    deleteProperty(_, p) {\n      return Reflect.deleteProperty(objectRef.value, p);\n    },\n    has(_, p) {\n      return Reflect.has(objectRef.value, p);\n    },\n    ownKeys() {\n      return Object.keys(objectRef.value);\n    },\n    getOwnPropertyDescriptor() {\n      return {\n        enumerable: true,\n        configurable: true\n      };\n    }\n  });\n  return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n  return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n  if (!condition)\n    console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n  min = Math.ceil(min);\n  max = Math.floor(max);\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n  var _a, _b;\n  return isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && (/iP(ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? void 0 : window.navigator) == null ? void 0 : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? void 0 : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n  function wrapper(...args) {\n    return new Promise((resolve, reject) => {\n      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n    });\n  }\n  return wrapper;\n}\nconst bypassFilter = (invoke) => {\n  return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n  let timer;\n  let maxTimer;\n  let lastRejector = noop;\n  const _clearTimeout = (timer2) => {\n    clearTimeout(timer2);\n    lastRejector();\n    lastRejector = noop;\n  };\n  const filter = (invoke) => {\n    const duration = toValue(ms);\n    const maxDuration = toValue(options.maxWait);\n    if (timer)\n      _clearTimeout(timer);\n    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n      if (maxTimer) {\n        _clearTimeout(maxTimer);\n        maxTimer = null;\n      }\n      return Promise.resolve(invoke());\n    }\n    return new Promise((resolve, reject) => {\n      lastRejector = options.rejectOnCancel ? reject : resolve;\n      if (maxDuration && !maxTimer) {\n        maxTimer = setTimeout(() => {\n          if (timer)\n            _clearTimeout(timer);\n          maxTimer = null;\n          resolve(invoke());\n        }, maxDuration);\n      }\n      timer = setTimeout(() => {\n        if (maxTimer)\n          _clearTimeout(maxTimer);\n        maxTimer = null;\n        resolve(invoke());\n      }, duration);\n    });\n  };\n  return filter;\n}\nfunction throttleFilter(...args) {\n  let lastExec = 0;\n  let timer;\n  let isLeading = true;\n  let lastRejector = noop;\n  let lastValue;\n  let ms;\n  let trailing;\n  let leading;\n  let rejectOnCancel;\n  if (!isRef(args[0]) && typeof args[0] === \"object\")\n    ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n  else\n    [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n  const clear = () => {\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n      lastRejector();\n      lastRejector = noop;\n    }\n  };\n  const filter = (_invoke) => {\n    const duration = toValue(ms);\n    const elapsed = Date.now() - lastExec;\n    const invoke = () => {\n      return lastValue = _invoke();\n    };\n    clear();\n    if (duration <= 0) {\n      lastExec = Date.now();\n      return invoke();\n    }\n    if (elapsed > duration && (leading || !isLeading)) {\n      lastExec = Date.now();\n      invoke();\n    } else if (trailing) {\n      lastValue = new Promise((resolve, reject) => {\n        lastRejector = rejectOnCancel ? reject : resolve;\n        timer = setTimeout(() => {\n          lastExec = Date.now();\n          isLeading = true;\n          resolve(invoke());\n          clear();\n        }, Math.max(0, duration - elapsed));\n      });\n    }\n    if (!leading && !timer)\n      timer = setTimeout(() => isLeading = true, duration);\n    isLeading = false;\n    return lastValue;\n  };\n  return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n  const isActive = ref(true);\n  function pause() {\n    isActive.value = false;\n  }\n  function resume() {\n    isActive.value = true;\n  }\n  const eventFilter = (...args) => {\n    if (isActive.value)\n      extendFilter(...args);\n  };\n  return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nconst directiveHooks = {\n  mounted: isVue3 ? \"mounted\" : \"inserted\",\n  updated: isVue3 ? \"updated\" : \"componentUpdated\",\n  unmounted: isVue3 ? \"unmounted\" : \"unbind\"\n};\n\nfunction cacheStringFunction(fn) {\n  const cache = /* @__PURE__ */ Object.create(null);\n  return (str) => {\n    const hit = cache[str];\n    return hit || (cache[str] = fn(str));\n  };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n  return new Promise((resolve, reject) => {\n    if (throwOnTimeout)\n      setTimeout(() => reject(reason), ms);\n    else\n      setTimeout(resolve, ms);\n  });\n}\nfunction identity(arg) {\n  return arg;\n}\nfunction createSingletonPromise(fn) {\n  let _promise;\n  function wrapper() {\n    if (!_promise)\n      _promise = fn();\n    return _promise;\n  }\n  wrapper.reset = async () => {\n    const _prev = _promise;\n    _promise = void 0;\n    if (_prev)\n      await _prev;\n  };\n  return wrapper;\n}\nfunction invoke(fn) {\n  return fn();\n}\nfunction containsProp(obj, ...props) {\n  return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n  var _a;\n  if (typeof target === \"number\")\n    return target + delta;\n  const value = ((_a = target.match(/^-?[0-9]+\\.?[0-9]*/)) == null ? void 0 : _a[0]) || \"\";\n  const unit = target.slice(value.length);\n  const result = Number.parseFloat(value) + delta;\n  if (Number.isNaN(result))\n    return target;\n  return result + unit;\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n  return keys.reduce((n, k) => {\n    if (k in obj) {\n      if (!omitUndefined || obj[k] !== void 0)\n        n[k] = obj[k];\n    }\n    return n;\n  }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n  return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n    return (!omitUndefined || value !== void 0) && !keys.includes(key);\n  }));\n}\nfunction objectEntries(obj) {\n  return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n  return target || getCurrentInstance();\n}\n\nfunction toRef(...args) {\n  if (args.length !== 1)\n    return toRef$1(...args);\n  const r = args[0];\n  return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n  const flatKeys = keys.flat();\n  const predicate = flatKeys[0];\n  return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n  return customRef((track, trigger) => {\n    let value = toValue(defaultValue);\n    let timer;\n    const resetAfter = () => setTimeout(() => {\n      value = toValue(defaultValue);\n      trigger();\n    }, toValue(afterMs));\n    tryOnScopeDispose(() => {\n      clearTimeout(timer);\n    });\n    return {\n      get() {\n        track();\n        return value;\n      },\n      set(newValue) {\n        value = newValue;\n        trigger();\n        clearTimeout(timer);\n        timer = resetAfter();\n      }\n    };\n  });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n  return createFilterWrapper(\n    debounceFilter(ms, options),\n    fn\n  );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n  const debounced = ref(value.value);\n  const updater = useDebounceFn(() => {\n    debounced.value = value.value;\n  }, ms, options);\n  watch(value, () => updater());\n  return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n  return computed({\n    get() {\n      var _a;\n      return (_a = source.value) != null ? _a : defaultValue;\n    },\n    set(value) {\n      source.value = value;\n    }\n  });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n  return createFilterWrapper(\n    throttleFilter(ms, trailing, leading, rejectOnCancel),\n    fn\n  );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n  if (delay <= 0)\n    return value;\n  const throttled = ref(value.value);\n  const updater = useThrottleFn(() => {\n    throttled.value = value.value;\n  }, delay, trailing, leading);\n  watch(value, () => updater());\n  return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n  let source = initial;\n  let track;\n  let trigger;\n  const ref = customRef((_track, _trigger) => {\n    track = _track;\n    trigger = _trigger;\n    return {\n      get() {\n        return get();\n      },\n      set(v) {\n        set(v);\n      }\n    };\n  });\n  function get(tracking = true) {\n    if (tracking)\n      track();\n    return source;\n  }\n  function set(value, triggering = true) {\n    var _a, _b;\n    if (value === source)\n      return;\n    const old = source;\n    if (((_a = options.onBeforeChange) == null ? void 0 : _a.call(options, value, old)) === false)\n      return;\n    source = value;\n    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);\n    if (triggering)\n      trigger();\n  }\n  const untrackedGet = () => get(false);\n  const silentSet = (v) => set(v, false);\n  const peek = () => get(false);\n  const lay = (v) => set(v, false);\n  return extendRef(\n    ref,\n    {\n      get,\n      set,\n      untrackedGet,\n      silentSet,\n      peek,\n      lay\n    },\n    { enumerable: true }\n  );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n  if (args.length === 2) {\n    const [ref, value] = args;\n    ref.value = value;\n  }\n  if (args.length === 3) {\n    if (isVue2) {\n      set$1(...args);\n    } else {\n      const [target, key, value] = args;\n      target[key] = value;\n    }\n  }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  return watch(\n    source,\n    createFilterWrapper(\n      eventFilter,\n      cb\n    ),\n    watchOptions\n  );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n  const {\n    eventFilter: filter,\n    ...watchOptions\n  } = options;\n  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n  const stop = watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter\n    }\n  );\n  return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true,\n    direction = \"both\",\n    transform = {}\n  } = options || {};\n  const watchers = [];\n  const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n  const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n  if (direction === \"both\" || direction === \"ltr\") {\n    watchers.push(watchPausable(\n      left,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        right.value = transformLTR(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  if (direction === \"both\" || direction === \"rtl\") {\n    watchers.push(watchPausable(\n      right,\n      (newValue) => {\n        watchers.forEach((w) => w.pause());\n        left.value = transformRTL(newValue);\n        watchers.forEach((w) => w.resume());\n      },\n      { flush, deep, immediate }\n    ));\n  }\n  const stop = () => {\n    watchers.forEach((w) => w.stop());\n  };\n  return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n  const {\n    flush = \"sync\",\n    deep = false,\n    immediate = true\n  } = options;\n  if (!Array.isArray(targets))\n    targets = [targets];\n  return watch(\n    source,\n    (newValue) => targets.forEach((target) => target.value = newValue),\n    { flush, deep, immediate }\n  );\n}\n\nfunction toRefs(objectRef, options = {}) {\n  if (!isRef(objectRef))\n    return toRefs$1(objectRef);\n  const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n  for (const key in objectRef.value) {\n    result[key] = customRef(() => ({\n      get() {\n        return objectRef.value[key];\n      },\n      set(v) {\n        var _a;\n        const replaceRef = (_a = toValue(options.replaceRef)) != null ? _a : true;\n        if (replaceRef) {\n          if (Array.isArray(objectRef.value)) {\n            const copy = [...objectRef.value];\n            copy[key] = v;\n            objectRef.value = copy;\n          } else {\n            const newObject = { ...objectRef.value, [key]: v };\n            Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n            objectRef.value = newObject;\n          }\n        } else {\n          objectRef.value[key] = v;\n        }\n      }\n    }));\n  }\n  return result;\n}\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeMount(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n  const instance = getLifeCycleTarget();\n  if (instance)\n    onMounted(fn, target);\n  else if (sync)\n    fn();\n  else\n    nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n  const instance = getLifeCycleTarget(target);\n  if (instance)\n    onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n  function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        r,\n        (v) => {\n          if (condition(v) !== isNot) {\n            stop == null ? void 0 : stop();\n            resolve(v);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop == null ? void 0 : stop())\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBe(value, options) {\n    if (!isRef(value))\n      return toMatch((v) => v === value, options);\n    const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n    let stop = null;\n    const watcher = new Promise((resolve) => {\n      stop = watch(\n        [r, value],\n        ([v1, v2]) => {\n          if (isNot !== (v1 === v2)) {\n            stop == null ? void 0 : stop();\n            resolve(v1);\n          }\n        },\n        {\n          flush,\n          deep,\n          immediate: true\n        }\n      );\n    });\n    const promises = [watcher];\n    if (timeout != null) {\n      promises.push(\n        promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n          stop == null ? void 0 : stop();\n          return toValue(r);\n        })\n      );\n    }\n    return Promise.race(promises);\n  }\n  function toBeTruthy(options) {\n    return toMatch((v) => Boolean(v), options);\n  }\n  function toBeNull(options) {\n    return toBe(null, options);\n  }\n  function toBeUndefined(options) {\n    return toBe(void 0, options);\n  }\n  function toBeNaN(options) {\n    return toMatch(Number.isNaN, options);\n  }\n  function toContains(value, options) {\n    return toMatch((v) => {\n      const array = Array.from(v);\n      return array.includes(value) || array.includes(toValue(value));\n    }, options);\n  }\n  function changed(options) {\n    return changedTimes(1, options);\n  }\n  function changedTimes(n = 1, options) {\n    let count = -1;\n    return toMatch(() => {\n      count += 1;\n      return count >= n;\n    }, options);\n  }\n  if (Array.isArray(toValue(r))) {\n    const instance = {\n      toMatch,\n      toContains,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  } else {\n    const instance = {\n      toMatch,\n      toBe,\n      toBeTruthy,\n      toBeNull,\n      toBeNaN,\n      toBeUndefined,\n      changed,\n      changedTimes,\n      get not() {\n        return createUntil(r, !isNot);\n      }\n    };\n    return instance;\n  }\n}\nfunction until(r) {\n  return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n  return value === othVal;\n}\nfunction useArrayDifference(...args) {\n  var _a;\n  const list = args[0];\n  const values = args[1];\n  let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n  if (typeof compareFn === \"string\") {\n    const key = compareFn;\n    compareFn = (value, othVal) => value[key] === othVal[key];\n  }\n  return computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n}\n\nfunction useArrayEvery(list, fn) {\n  return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n  return computed(() => toValue(\n    toValue(list).find((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n  return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n  let index = arr.length;\n  while (index-- > 0) {\n    if (cb(arr[index], index, arr))\n      return arr[index];\n  }\n  return void 0;\n}\nfunction useArrayFindLast(list, fn) {\n  return computed(() => toValue(\n    !Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))\n  ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n  return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n  var _a;\n  const list = args[0];\n  const value = args[1];\n  let comparator = args[2];\n  let formIndex = 0;\n  if (isArrayIncludesOptions(comparator)) {\n    formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n    comparator = comparator.comparator;\n  }\n  if (typeof comparator === \"string\") {\n    const key = comparator;\n    comparator = (element, value2) => element[key] === toValue(value2);\n  }\n  comparator = comparator != null ? comparator : (element, value2) => element === toValue(value2);\n  return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(\n    toValue(element),\n    toValue(value),\n    index,\n    toValue(array)\n  )));\n}\n\nfunction useArrayJoin(list, separator) {\n  return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n  return computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n  const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n  return computed(() => {\n    const resolved = toValue(list);\n    return args.length ? resolved.reduce(reduceCallback, toValue(args[0])) : resolved.reduce(reduceCallback);\n  });\n}\n\nfunction useArraySome(list, fn) {\n  return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\nfunction uniq(array) {\n  return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n  return array.reduce((acc, v) => {\n    if (!acc.some((x) => fn(v, x, array)))\n      acc.push(v);\n    return acc;\n  }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n  return computed(() => {\n    const resolvedList = toValue(list).map((element) => toValue(element));\n    return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n  });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n  let _initialValue = unref(initialValue);\n  const count = ref(initialValue);\n  const {\n    max = Number.POSITIVE_INFINITY,\n    min = Number.NEGATIVE_INFINITY\n  } = options;\n  const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n  const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n  const get = () => count.value;\n  const set = (val) => count.value = Math.max(min, Math.min(max, val));\n  const reset = (val = _initialValue) => {\n    _initialValue = val;\n    return set(val);\n  };\n  return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n  let m = hours < 12 ? \"AM\" : \"PM\";\n  if (hasPeriod)\n    m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n  return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n  const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n  const v = num % 100;\n  return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n  var _a;\n  const years = date.getFullYear();\n  const month = date.getMonth();\n  const days = date.getDate();\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n  const milliseconds = date.getMilliseconds();\n  const day = date.getDay();\n  const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n  const matches = {\n    Yo: () => formatOrdinal(years),\n    YY: () => String(years).slice(-2),\n    YYYY: () => years,\n    M: () => month + 1,\n    Mo: () => formatOrdinal(month + 1),\n    MM: () => `${month + 1}`.padStart(2, \"0\"),\n    MMM: () => date.toLocaleDateString(options.locales, { month: \"short\" }),\n    MMMM: () => date.toLocaleDateString(options.locales, { month: \"long\" }),\n    D: () => String(days),\n    Do: () => formatOrdinal(days),\n    DD: () => `${days}`.padStart(2, \"0\"),\n    H: () => String(hours),\n    Ho: () => formatOrdinal(hours),\n    HH: () => `${hours}`.padStart(2, \"0\"),\n    h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n    ho: () => formatOrdinal(hours % 12 || 12),\n    hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n    m: () => String(minutes),\n    mo: () => formatOrdinal(minutes),\n    mm: () => `${minutes}`.padStart(2, \"0\"),\n    s: () => String(seconds),\n    so: () => formatOrdinal(seconds),\n    ss: () => `${seconds}`.padStart(2, \"0\"),\n    SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n    d: () => day,\n    dd: () => date.toLocaleDateString(options.locales, { weekday: \"narrow\" }),\n    ddd: () => date.toLocaleDateString(options.locales, { weekday: \"short\" }),\n    dddd: () => date.toLocaleDateString(options.locales, { weekday: \"long\" }),\n    A: () => meridiem(hours, minutes),\n    AA: () => meridiem(hours, minutes, false, true),\n    a: () => meridiem(hours, minutes, true),\n    aa: () => meridiem(hours, minutes, true, true)\n  };\n  return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n    var _a2, _b;\n    return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? void 0 : _a2.call(matches)) != null ? _b : match;\n  });\n}\nfunction normalizeDate(date) {\n  if (date === null)\n    return new Date(Number.NaN);\n  if (date === void 0)\n    return /* @__PURE__ */ new Date();\n  if (date instanceof Date)\n    return new Date(date);\n  if (typeof date === \"string\" && !/Z$/i.test(date)) {\n    const d = date.match(REGEX_PARSE);\n    if (d) {\n      const m = d[2] - 1 || 0;\n      const ms = (d[7] || \"0\").substring(0, 3);\n      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n    }\n  }\n  return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n  return computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n  const {\n    immediate = true,\n    immediateCallback = false\n  } = options;\n  let timer = null;\n  const isActive = ref(false);\n  function clean() {\n    if (timer) {\n      clearInterval(timer);\n      timer = null;\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    clean();\n  }\n  function resume() {\n    const intervalValue = toValue(interval);\n    if (intervalValue <= 0)\n      return;\n    isActive.value = true;\n    if (immediateCallback)\n      cb();\n    clean();\n    timer = setInterval(cb, intervalValue);\n  }\n  if (immediate && isClient)\n    resume();\n  if (isRef(interval) || typeof interval === \"function\") {\n    const stopWatch = watch(interval, () => {\n      if (isActive.value && isClient)\n        resume();\n    });\n    tryOnScopeDispose(stopWatch);\n  }\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    immediate = true,\n    callback\n  } = options;\n  const counter = ref(0);\n  const update = () => counter.value += 1;\n  const reset = () => {\n    counter.value = 0;\n  };\n  const controls = useIntervalFn(\n    callback ? () => {\n      update();\n      callback(counter.value);\n    } : update,\n    interval,\n    { immediate }\n  );\n  if (exposeControls) {\n    return {\n      counter,\n      reset,\n      ...controls\n    };\n  } else {\n    return counter;\n  }\n}\n\nfunction useLastChanged(source, options = {}) {\n  var _a;\n  const ms = ref((_a = options.initialValue) != null ? _a : null);\n  watch(\n    source,\n    () => ms.value = timestamp(),\n    options\n  );\n  return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n  const {\n    immediate = true\n  } = options;\n  const isPending = ref(false);\n  let timer = null;\n  function clear() {\n    if (timer) {\n      clearTimeout(timer);\n      timer = null;\n    }\n  }\n  function stop() {\n    isPending.value = false;\n    clear();\n  }\n  function start(...args) {\n    clear();\n    isPending.value = true;\n    timer = setTimeout(() => {\n      isPending.value = false;\n      timer = null;\n      cb(...args);\n    }, toValue(interval));\n  }\n  if (immediate) {\n    isPending.value = true;\n    if (isClient)\n      start();\n  }\n  tryOnScopeDispose(stop);\n  return {\n    isPending: readonly(isPending),\n    start,\n    stop\n  };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n  const {\n    controls: exposeControls = false,\n    callback\n  } = options;\n  const controls = useTimeoutFn(\n    callback != null ? callback : noop,\n    interval,\n    options\n  );\n  const ready = computed(() => !controls.isPending.value);\n  if (exposeControls) {\n    return {\n      ready,\n      ...controls\n    };\n  } else {\n    return ready;\n  }\n}\n\nfunction useToNumber(value, options = {}) {\n  const {\n    method = \"parseFloat\",\n    radix,\n    nanToZero\n  } = options;\n  return computed(() => {\n    let resolved = toValue(value);\n    if (typeof resolved === \"string\")\n      resolved = Number[method](resolved, radix);\n    if (nanToZero && Number.isNaN(resolved))\n      resolved = 0;\n    return resolved;\n  });\n}\n\nfunction useToString(value) {\n  return computed(() => `${toValue(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n  const {\n    truthyValue = true,\n    falsyValue = false\n  } = options;\n  const valueIsRef = isRef(initialValue);\n  const _value = ref(initialValue);\n  function toggle(value) {\n    if (arguments.length) {\n      _value.value = value;\n      return _value.value;\n    } else {\n      const truthy = toValue(truthyValue);\n      _value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n      return _value.value;\n    }\n  }\n  if (valueIsRef)\n    return toggle;\n  else\n    return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n  let oldList = (options == null ? void 0 : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue(source)];\n  return watch(source, (newList, _, onCleanup) => {\n    const oldListRemains = Array.from({ length: oldList.length });\n    const added = [];\n    for (const obj of newList) {\n      let found = false;\n      for (let i = 0; i < oldList.length; i++) {\n        if (!oldListRemains[i] && obj === oldList[i]) {\n          oldListRemains[i] = true;\n          found = true;\n          break;\n        }\n      }\n      if (!found)\n        added.push(obj);\n    }\n    const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n    cb(newList, oldList, added, removed, onCleanup);\n    oldList = [...newList];\n  }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n  const {\n    count,\n    ...watchOptions\n  } = options;\n  const current = ref(0);\n  const stop = watchWithFilter(\n    source,\n    (...args) => {\n      current.value += 1;\n      if (current.value >= toValue(count))\n        nextTick(() => stop());\n      cb(...args);\n    },\n    watchOptions\n  );\n  return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n  const {\n    debounce = 0,\n    maxWait = void 0,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: debounceFilter(debounce, { maxWait })\n    }\n  );\n}\n\nfunction watchDeep(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      deep: true\n    }\n  );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n  const {\n    eventFilter = bypassFilter,\n    ...watchOptions\n  } = options;\n  const filteredCb = createFilterWrapper(\n    eventFilter,\n    cb\n  );\n  let ignoreUpdates;\n  let ignorePrevAsyncUpdates;\n  let stop;\n  if (watchOptions.flush === \"sync\") {\n    const ignore = ref(false);\n    ignorePrevAsyncUpdates = () => {\n    };\n    ignoreUpdates = (updater) => {\n      ignore.value = true;\n      updater();\n      ignore.value = false;\n    };\n    stop = watch(\n      source,\n      (...args) => {\n        if (!ignore.value)\n          filteredCb(...args);\n      },\n      watchOptions\n    );\n  } else {\n    const disposables = [];\n    const ignoreCounter = ref(0);\n    const syncCounter = ref(0);\n    ignorePrevAsyncUpdates = () => {\n      ignoreCounter.value = syncCounter.value;\n    };\n    disposables.push(\n      watch(\n        source,\n        () => {\n          syncCounter.value++;\n        },\n        { ...watchOptions, flush: \"sync\" }\n      )\n    );\n    ignoreUpdates = (updater) => {\n      const syncCounterPrev = syncCounter.value;\n      updater();\n      ignoreCounter.value += syncCounter.value - syncCounterPrev;\n    };\n    disposables.push(\n      watch(\n        source,\n        (...args) => {\n          const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n          ignoreCounter.value = 0;\n          syncCounter.value = 0;\n          if (ignore)\n            return;\n          filteredCb(...args);\n        },\n        watchOptions\n      )\n    );\n    stop = () => {\n      disposables.forEach((fn) => fn());\n    };\n  }\n  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n  return watch(\n    source,\n    cb,\n    {\n      ...options,\n      immediate: true\n    }\n  );\n}\n\nfunction watchOnce(source, cb, options) {\n  const stop = watch(source, (...args) => {\n    nextTick(() => stop());\n    return cb(...args);\n  }, options);\n  return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n  const {\n    throttle = 0,\n    trailing = true,\n    leading = true,\n    ...watchOptions\n  } = options;\n  return watchWithFilter(\n    source,\n    cb,\n    {\n      ...watchOptions,\n      eventFilter: throttleFilter(throttle, trailing, leading)\n    }\n  );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n  let cleanupFn;\n  function onEffect() {\n    if (!cleanupFn)\n      return;\n    const fn = cleanupFn;\n    cleanupFn = void 0;\n    fn();\n  }\n  function onCleanup(callback) {\n    cleanupFn = callback;\n  }\n  const _cb = (value, oldValue) => {\n    onEffect();\n    return cb(value, oldValue, onCleanup);\n  };\n  const res = watchIgnorable(source, _cb, options);\n  const { ignoreUpdates } = res;\n  const trigger = () => {\n    let res2;\n    ignoreUpdates(() => {\n      res2 = _cb(getWatchSources(source), getOldValue(source));\n    });\n    return res2;\n  };\n  return {\n    ...res,\n    trigger\n  };\n}\nfunction getWatchSources(sources) {\n  if (isReactive(sources))\n    return sources;\n  if (Array.isArray(sources))\n    return sources.map((item) => toValue(item));\n  return toValue(sources);\n}\nfunction getOldValue(source) {\n  return Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\nfunction whenever(source, cb, options) {\n  const stop = watch(\n    source,\n    (v, ov, onInvalidate) => {\n      if (v) {\n        if (options == null ? void 0 : options.once)\n          nextTick(() => stop());\n        cb(v, ov, onInvalidate);\n      }\n    },\n    {\n      ...options,\n      once: false\n    }\n  );\n  return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, directiveHooks, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n  var vm\n  var provide = {}\n  var app = {\n    config: Vue.config,\n    use: Vue.use.bind(Vue),\n    mixin: Vue.mixin.bind(Vue),\n    component: Vue.component.bind(Vue),\n    provide: function (key, value) {\n      provide[key] = value\n      return this\n    },\n    directive: function (name, dir) {\n      if (dir) {\n        Vue.directive(name, dir)\n        return app\n      } else {\n        return Vue.directive(name)\n      }\n    },\n    mount: function (el, hydrating) {\n      if (!vm) {\n        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n        vm.$mount(el, hydrating)\n        return vm\n      } else {\n        return vm\n      }\n    },\n    unmount: function () {\n      if (vm) {\n        vm.$destroy()\n        vm = undefined\n      }\n    },\n  }\n  return app\n}\n\nexport {\n  Vue,\n  Vue2,\n  isVue2,\n  isVue3,\n  install,\n  warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n  return {\n    setup() {\n      throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n    }\n  }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n  return !!getCurrentInstance()\n}\n","import { noop, makeDestructurable, camelize, toValue, isClient, isObject, tryOnScopeDispose, isIOS, tryOnMounted, objectOmit, promiseTimeout, until, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, notNullish, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, createFilterWrapper, bypassFilter, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, clamp, syncRef, objectPick, tryOnUnmounted, watchWithFilter, tryOnBeforeUnmount, identity, isDef, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, isVue3, version, defineComponent, h, TransitionGroup, shallowReactive, Fragment, watch, getCurrentInstance, customRef, onUpdated, onMounted, isVue2, readonly, nextTick, reactive, markRaw, unref, getCurrentScope, set, del, isReadonly, onBeforeUpdate } from 'vue-demi';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n  let options;\n  if (isRef(optionsOrRef)) {\n    options = {\n      evaluating: optionsOrRef\n    };\n  } else {\n    options = optionsOrRef || {};\n  }\n  const {\n    lazy = false,\n    evaluating = void 0,\n    shallow = true,\n    onError = noop\n  } = options;\n  const started = ref(!lazy);\n  const current = shallow ? shallowRef(initialState) : ref(initialState);\n  let counter = 0;\n  watchEffect(async (onInvalidate) => {\n    if (!started.value)\n      return;\n    counter++;\n    const counterAtBeginning = counter;\n    let hasFinished = false;\n    if (evaluating) {\n      Promise.resolve().then(() => {\n        evaluating.value = true;\n      });\n    }\n    try {\n      const result = await evaluationCallback((cancelCallback) => {\n        onInvalidate(() => {\n          if (evaluating)\n            evaluating.value = false;\n          if (!hasFinished)\n            cancelCallback();\n        });\n      });\n      if (counterAtBeginning === counter)\n        current.value = result;\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (evaluating && counterAtBeginning === counter)\n        evaluating.value = false;\n      hasFinished = true;\n    }\n  });\n  if (lazy) {\n    return computed(() => {\n      started.value = true;\n      return current.value;\n    });\n  } else {\n    return current;\n  }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n  let source = inject(key);\n  if (defaultSource)\n    source = inject(key, defaultSource);\n  if (treatDefaultAsFactory)\n    source = inject(key, defaultSource, treatDefaultAsFactory);\n  if (typeof options === \"function\") {\n    return computed((ctx) => options(source, ctx));\n  } else {\n    return computed({\n      get: (ctx) => options.get(source, ctx),\n      set: options.set\n    });\n  }\n}\n\nfunction createReusableTemplate(options = {}) {\n  if (!isVue3 && !version.startsWith(\"2.7.\")) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createReusableTemplate only works in Vue 2.7 or above.\");\n    return;\n  }\n  const {\n    inheritAttrs = true\n  } = options;\n  const render = shallowRef();\n  const define = /* #__PURE__ */ defineComponent({\n    setup(_, { slots }) {\n      return () => {\n        render.value = slots.default;\n      };\n    }\n  });\n  const reuse = /* #__PURE__ */ defineComponent({\n    inheritAttrs,\n    setup(_, { attrs, slots }) {\n      return () => {\n        var _a;\n        if (!render.value && process.env.NODE_ENV !== \"production\")\n          throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n        const vnode = (_a = render.value) == null ? void 0 : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n        return inheritAttrs && (vnode == null ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n      };\n    }\n  });\n  return makeDestructurable(\n    { define, reuse },\n    [define, reuse]\n  );\n}\nfunction keysToCamelKebabCase(obj) {\n  const newObj = {};\n  for (const key in obj)\n    newObj[camelize(key)] = obj[key];\n  return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n  if (!isVue3) {\n    if (process.env.NODE_ENV !== \"production\")\n      throw new Error(\"[VueUse] createTemplatePromise only works in Vue 3 or above.\");\n    return;\n  }\n  let index = 0;\n  const instances = ref([]);\n  function create(...args) {\n    const props = shallowReactive({\n      key: index++,\n      args,\n      promise: void 0,\n      resolve: () => {\n      },\n      reject: () => {\n      },\n      isResolving: false,\n      options\n    });\n    instances.value.push(props);\n    props.promise = new Promise((_resolve, _reject) => {\n      props.resolve = (v) => {\n        props.isResolving = true;\n        return _resolve(v);\n      };\n      props.reject = _reject;\n    }).finally(() => {\n      props.promise = void 0;\n      const index2 = instances.value.indexOf(props);\n      if (index2 !== -1)\n        instances.value.splice(index2, 1);\n    });\n    return props.promise;\n  }\n  function start(...args) {\n    if (options.singleton && instances.value.length > 0)\n      return instances.value[0].promise;\n    return create(...args);\n  }\n  const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n    const renderList = () => instances.value.map((props) => {\n      var _a;\n      return h(Fragment, { key: props.key }, (_a = slots.default) == null ? void 0 : _a.call(slots, props));\n    });\n    if (options.transition)\n      return () => h(TransitionGroup, options.transition, renderList);\n    return renderList;\n  });\n  component.start = start;\n  return component;\n}\n\nfunction createUnrefFn(fn) {\n  return function(...args) {\n    return fn.apply(this, args.map((i) => toValue(i)));\n  };\n}\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(\n    () => [unrefElement(target), toValue(options)],\n    ([el, options2]) => {\n      cleanup();\n      if (!el)\n        return;\n      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\n        })\n      );\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return noop;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.addEventListener(\"click\", noop);\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\n        var _a;\n        const el = unrefElement(target);\n        if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n          handler(event);\n      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n  return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    timeout = setTimeout(\n      () => handler(ev),\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], clear, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nfunction isFocusedElementEditable() {\n  const { activeElement, body } = document;\n  if (!activeElement)\n    return false;\n  if (activeElement === body)\n    return false;\n  switch (activeElement.tagName) {\n    case \"INPUT\":\n    case \"TEXTAREA\":\n      return true;\n  }\n  return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n  keyCode,\n  metaKey,\n  ctrlKey,\n  altKey\n}) {\n  if (metaKey || ctrlKey || altKey)\n    return false;\n  if (keyCode >= 48 && keyCode <= 57)\n    return true;\n  if (keyCode >= 65 && keyCode <= 90)\n    return true;\n  if (keyCode >= 97 && keyCode <= 122)\n    return true;\n  return false;\n}\nfunction onStartTyping(callback, options = {}) {\n  const { document: document2 = defaultDocument } = options;\n  const keydown = (event) => {\n    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);\n  };\n  if (document2)\n    useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n  const instance = getCurrentInstance();\n  let _trigger = () => {\n  };\n  const element = customRef((track, trigger) => {\n    _trigger = trigger;\n    return {\n      get() {\n        var _a, _b;\n        track();\n        return (_b = (_a = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a.$refs[key]) != null ? _b : initialValue;\n      },\n      set() {\n      }\n    };\n  });\n  tryOnMounted(_trigger);\n  onUpdated(_trigger);\n  return element;\n}\n\nfunction useActiveElement(options = {}) {\n  var _a;\n  const {\n    window = defaultWindow,\n    deep = true\n  } = options;\n  const document = (_a = options.document) != null ? _a : window == null ? void 0 : window.document;\n  const getDeepActiveElement = () => {\n    var _a2;\n    let element = document == null ? void 0 : document.activeElement;\n    if (deep) {\n      while (element == null ? void 0 : element.shadowRoot)\n        element = (_a2 = element == null ? void 0 : element.shadowRoot) == null ? void 0 : _a2.activeElement;\n    }\n    return element;\n  };\n  const activeElement = ref();\n  const trigger = () => {\n    activeElement.value = getDeepActiveElement();\n  };\n  if (window) {\n    useEventListener(window, \"blur\", (event) => {\n      if (event.relatedTarget !== null)\n        return;\n      trigger();\n    }, true);\n    useEventListener(window, \"focus\", trigger, true);\n  }\n  trigger();\n  return activeElement;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, isVue2 ? null : instance);\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useRafFn(fn, options = {}) {\n  const {\n    immediate = true,\n    fpsLimit = void 0,\n    window = defaultWindow\n  } = options;\n  const isActive = ref(false);\n  const intervalLimit = fpsLimit ? 1e3 / fpsLimit : null;\n  let previousFrameTimestamp = 0;\n  let rafId = null;\n  function loop(timestamp) {\n    if (!isActive.value || !window)\n      return;\n    if (!previousFrameTimestamp)\n      previousFrameTimestamp = timestamp;\n    const delta = timestamp - previousFrameTimestamp;\n    if (intervalLimit && delta < intervalLimit) {\n      rafId = window.requestAnimationFrame(loop);\n      return;\n    }\n    previousFrameTimestamp = timestamp;\n    fn({ delta, timestamp });\n    rafId = window.requestAnimationFrame(loop);\n  }\n  function resume() {\n    if (!isActive.value && window) {\n      isActive.value = true;\n      previousFrameTimestamp = 0;\n      rafId = window.requestAnimationFrame(loop);\n    }\n  }\n  function pause() {\n    isActive.value = false;\n    if (rafId != null && window) {\n      window.cancelAnimationFrame(rafId);\n      rafId = null;\n    }\n  }\n  if (immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive: readonly(isActive),\n    pause,\n    resume\n  };\n}\n\nfunction useAnimate(target, keyframes, options) {\n  let config;\n  let animateOptions;\n  if (isObject(options)) {\n    config = options;\n    animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n  } else {\n    config = { duration: options };\n    animateOptions = options;\n  }\n  const {\n    window = defaultWindow,\n    immediate = true,\n    commitStyles,\n    persist,\n    playbackRate: _playbackRate = 1,\n    onReady,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = config;\n  const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n  const animate = shallowRef(void 0);\n  const store = shallowReactive({\n    startTime: null,\n    currentTime: null,\n    timeline: null,\n    playbackRate: _playbackRate,\n    pending: false,\n    playState: immediate ? \"idle\" : \"paused\",\n    replaceState: \"active\"\n  });\n  const pending = computed(() => store.pending);\n  const playState = computed(() => store.playState);\n  const replaceState = computed(() => store.replaceState);\n  const startTime = computed({\n    get() {\n      return store.startTime;\n    },\n    set(value) {\n      store.startTime = value;\n      if (animate.value)\n        animate.value.startTime = value;\n    }\n  });\n  const currentTime = computed({\n    get() {\n      return store.currentTime;\n    },\n    set(value) {\n      store.currentTime = value;\n      if (animate.value) {\n        animate.value.currentTime = value;\n        syncResume();\n      }\n    }\n  });\n  const timeline = computed({\n    get() {\n      return store.timeline;\n    },\n    set(value) {\n      store.timeline = value;\n      if (animate.value)\n        animate.value.timeline = value;\n    }\n  });\n  const playbackRate = computed({\n    get() {\n      return store.playbackRate;\n    },\n    set(value) {\n      store.playbackRate = value;\n      if (animate.value)\n        animate.value.playbackRate = value;\n    }\n  });\n  const play = () => {\n    if (animate.value) {\n      try {\n        animate.value.play();\n        syncResume();\n      } catch (e) {\n        syncPause();\n        onError(e);\n      }\n    } else {\n      update();\n    }\n  };\n  const pause = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.pause();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const reverse = () => {\n    var _a;\n    !animate.value && update();\n    try {\n      (_a = animate.value) == null ? void 0 : _a.reverse();\n      syncResume();\n    } catch (e) {\n      syncPause();\n      onError(e);\n    }\n  };\n  const finish = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.finish();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  const cancel = () => {\n    var _a;\n    try {\n      (_a = animate.value) == null ? void 0 : _a.cancel();\n      syncPause();\n    } catch (e) {\n      onError(e);\n    }\n  };\n  watch(() => unrefElement(target), (el) => {\n    el && update();\n  });\n  watch(() => keyframes, (value) => {\n    !animate.value && update();\n    if (!unrefElement(target) && animate.value) {\n      animate.value.effect = new KeyframeEffect(\n        unrefElement(target),\n        toValue(value),\n        animateOptions\n      );\n    }\n  }, { deep: true });\n  tryOnMounted(() => {\n    nextTick(() => update(true));\n  });\n  tryOnScopeDispose(cancel);\n  function update(init) {\n    const el = unrefElement(target);\n    if (!isSupported.value || !el)\n      return;\n    if (!animate.value)\n      animate.value = el.animate(toValue(keyframes), animateOptions);\n    if (commitStyles)\n      animate.value.commitStyles();\n    if (persist)\n      animate.value.persist();\n    if (_playbackRate !== 1)\n      animate.value.playbackRate = _playbackRate;\n    if (init && !immediate)\n      animate.value.pause();\n    else\n      syncResume();\n    onReady == null ? void 0 : onReady(animate.value);\n  }\n  useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n  const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n    if (!animate.value)\n      return;\n    store.pending = animate.value.pending;\n    store.playState = animate.value.playState;\n    store.replaceState = animate.value.replaceState;\n    store.startTime = animate.value.startTime;\n    store.currentTime = animate.value.currentTime;\n    store.timeline = animate.value.timeline;\n    store.playbackRate = animate.value.playbackRate;\n  }, { immediate: false });\n  function syncResume() {\n    if (isSupported.value)\n      resumeRef();\n  }\n  function syncPause() {\n    if (isSupported.value && window)\n      window.requestAnimationFrame(pauseRef);\n  }\n  return {\n    isSupported,\n    animate,\n    // actions\n    play,\n    pause,\n    reverse,\n    finish,\n    cancel,\n    // state\n    pending,\n    playState,\n    replaceState,\n    startTime,\n    currentTime,\n    timeline,\n    playbackRate\n  };\n}\n\nfunction useAsyncQueue(tasks, options) {\n  const {\n    interrupt = true,\n    onError = noop,\n    onFinished = noop,\n    signal\n  } = options || {};\n  const promiseState = {\n    aborted: \"aborted\",\n    fulfilled: \"fulfilled\",\n    pending: \"pending\",\n    rejected: \"rejected\"\n  };\n  const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n  const result = reactive(initialResult);\n  const activeIndex = ref(-1);\n  if (!tasks || tasks.length === 0) {\n    onFinished();\n    return {\n      activeIndex,\n      result\n    };\n  }\n  function updateResult(state, res) {\n    activeIndex.value++;\n    result[activeIndex.value].data = res;\n    result[activeIndex.value].state = state;\n  }\n  tasks.reduce((prev, curr) => {\n    return prev.then((prevRes) => {\n      var _a;\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, new Error(\"aborted\"));\n        return;\n      }\n      if (((_a = result[activeIndex.value]) == null ? void 0 : _a.state) === promiseState.rejected && interrupt) {\n        onFinished();\n        return;\n      }\n      const done = curr(prevRes).then((currentRes) => {\n        updateResult(promiseState.fulfilled, currentRes);\n        activeIndex.value === tasks.length - 1 && onFinished();\n        return currentRes;\n      });\n      if (!signal)\n        return done;\n      return Promise.race([done, whenAborted(signal)]);\n    }).catch((e) => {\n      if (signal == null ? void 0 : signal.aborted) {\n        updateResult(promiseState.aborted, e);\n        return e;\n      }\n      updateResult(promiseState.rejected, e);\n      onError();\n      return e;\n    });\n  }, Promise.resolve());\n  return {\n    activeIndex,\n    result\n  };\n}\nfunction whenAborted(signal) {\n  return new Promise((resolve, reject) => {\n    const error = new Error(\"aborted\");\n    if (signal.aborted)\n      reject(error);\n    else\n      signal.addEventListener(\"abort\", () => reject(error), { once: true });\n  });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\n\nconst defaults = {\n  array: (v) => JSON.stringify(v),\n  object: (v) => JSON.stringify(v),\n  set: (v) => JSON.stringify(Array.from(v)),\n  map: (v) => JSON.stringify(Object.fromEntries(v)),\n  null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n  if (!target)\n    return defaults.null;\n  if (target instanceof Map)\n    return defaults.map;\n  else if (target instanceof Set)\n    return defaults.set;\n  else if (Array.isArray(target))\n    return defaults.array;\n  else\n    return defaults.object;\n}\n\nfunction useBase64(target, options) {\n  const base64 = ref(\"\");\n  const promise = ref();\n  function execute() {\n    if (!isClient)\n      return;\n    promise.value = new Promise((resolve, reject) => {\n      try {\n        const _target = toValue(target);\n        if (_target == null) {\n          resolve(\"\");\n        } else if (typeof _target === \"string\") {\n          resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n        } else if (_target instanceof Blob) {\n          resolve(blobToBase64(_target));\n        } else if (_target instanceof ArrayBuffer) {\n          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n        } else if (_target instanceof HTMLCanvasElement) {\n          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n        } else if (_target instanceof HTMLImageElement) {\n          const img = _target.cloneNode(false);\n          img.crossOrigin = \"Anonymous\";\n          imgLoaded(img).then(() => {\n            const canvas = document.createElement(\"canvas\");\n            const ctx = canvas.getContext(\"2d\");\n            canvas.width = img.width;\n            canvas.height = img.height;\n            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n          }).catch(reject);\n        } else if (typeof _target === \"object\") {\n          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n          const serialized = _serializeFn(_target);\n          return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n        } else {\n          reject(new Error(\"target is unsupported types\"));\n        }\n      } catch (error) {\n        reject(error);\n      }\n    });\n    promise.value.then((res) => base64.value = res);\n    return promise.value;\n  }\n  if (isRef(target) || typeof target === \"function\")\n    watch(target, execute, { immediate: true });\n  else\n    execute();\n  return {\n    base64,\n    promise,\n    execute\n  };\n}\nfunction imgLoaded(img) {\n  return new Promise((resolve, reject) => {\n    if (!img.complete) {\n      img.onload = () => {\n        resolve();\n      };\n      img.onerror = reject;\n    } else {\n      resolve();\n    }\n  });\n}\nfunction blobToBase64(blob) {\n  return new Promise((resolve, reject) => {\n    const fr = new FileReader();\n    fr.onload = (e) => {\n      resolve(e.target.result);\n    };\n    fr.onerror = reject;\n    fr.readAsDataURL(blob);\n  });\n}\n\nfunction useBattery(options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n  const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n  const charging = ref(false);\n  const chargingTime = ref(0);\n  const dischargingTime = ref(0);\n  const level = ref(1);\n  let battery;\n  function updateBatteryInfo() {\n    charging.value = this.charging;\n    chargingTime.value = this.chargingTime || 0;\n    dischargingTime.value = this.dischargingTime || 0;\n    level.value = this.level;\n  }\n  if (isSupported.value) {\n    navigator.getBattery().then((_battery) => {\n      battery = _battery;\n      updateBatteryInfo.call(battery);\n      useEventListener(battery, events, updateBatteryInfo, { passive: true });\n    });\n  }\n  return {\n    isSupported,\n    charging,\n    chargingTime,\n    dischargingTime,\n    level\n  };\n}\n\nfunction useBluetooth(options) {\n  let {\n    acceptAllDevices = false\n  } = options || {};\n  const {\n    filters = void 0,\n    optionalServices = void 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n  const device = shallowRef(void 0);\n  const error = shallowRef(null);\n  watch(device, () => {\n    connectToBluetoothGATTServer();\n  });\n  async function requestDevice() {\n    if (!isSupported.value)\n      return;\n    error.value = null;\n    if (filters && filters.length > 0)\n      acceptAllDevices = false;\n    try {\n      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n        acceptAllDevices,\n        filters,\n        optionalServices\n      }));\n    } catch (err) {\n      error.value = err;\n    }\n  }\n  const server = ref();\n  const isConnected = computed(() => {\n    var _a;\n    return ((_a = server.value) == null ? void 0 : _a.connected) || false;\n  });\n  async function connectToBluetoothGATTServer() {\n    error.value = null;\n    if (device.value && device.value.gatt) {\n      device.value.addEventListener(\"gattserverdisconnected\", () => {\n      });\n      try {\n        server.value = await device.value.gatt.connect();\n      } catch (err) {\n        error.value = err;\n      }\n    }\n  }\n  tryOnMounted(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.connect();\n  });\n  tryOnScopeDispose(() => {\n    var _a;\n    if (device.value)\n      (_a = device.value.gatt) == null ? void 0 : _a.disconnect();\n  });\n  return {\n    isSupported,\n    isConnected,\n    // Device:\n    device,\n    requestDevice,\n    // Server:\n    server,\n    // Errors:\n    error\n  };\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\n  return matches;\n}\n\nconst breakpointsTailwind = {\n  \"sm\": 640,\n  \"md\": 768,\n  \"lg\": 1024,\n  \"xl\": 1280,\n  \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n  xs: 0,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1264,\n  xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n  xs: 0,\n  sm: 600,\n  md: 960,\n  lg: 1280,\n  xl: 1920,\n  xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n  xs: 480,\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200,\n  xxl: 1600\n};\nconst breakpointsQuasar = {\n  xs: 0,\n  sm: 600,\n  md: 1024,\n  lg: 1440,\n  xl: 1920\n};\nconst breakpointsSematic = {\n  mobileS: 320,\n  mobileM: 375,\n  mobileL: 425,\n  tablet: 768,\n  laptop: 1024,\n  laptopL: 1440,\n  desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n  \"3xs\": 360,\n  \"2xs\": 480,\n  \"xs\": 600,\n  \"sm\": 768,\n  \"md\": 1024,\n  \"lg\": 1280,\n  \"xl\": 1440,\n  \"2xl\": 1600,\n  \"3xl\": 1920,\n  \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n  sm: 576,\n  md: 768,\n  lg: 992,\n  xl: 1200\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n  function getValue(k, delta) {\n    let v = toValue(breakpoints[toValue(k)]);\n    if (delta != null)\n      v = increaseWithUnit(v, delta);\n    if (typeof v === \"number\")\n      v = `${v}px`;\n    return v;\n  }\n  const { window = defaultWindow, strategy = \"min-width\" } = options;\n  function match(query) {\n    if (!window)\n      return false;\n    return window.matchMedia(query).matches;\n  }\n  const greaterOrEqual = (k) => {\n    return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n  };\n  const smallerOrEqual = (k) => {\n    return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n  };\n  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n    Object.defineProperty(shortcuts, k, {\n      get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n      enumerable: true,\n      configurable: true\n    });\n    return shortcuts;\n  }, {});\n  function current() {\n    const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i)]);\n    return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n  }\n  return Object.assign(shortcutMethods, {\n    greaterOrEqual,\n    smallerOrEqual,\n    greater(k) {\n      return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n    },\n    smaller(k) {\n      return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n    },\n    between(a, b) {\n      return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n    },\n    isGreater(k) {\n      return match(`(min-width: ${getValue(k, 0.1)})`);\n    },\n    isGreaterOrEqual(k) {\n      return match(`(min-width: ${getValue(k)})`);\n    },\n    isSmaller(k) {\n      return match(`(max-width: ${getValue(k, -0.1)})`);\n    },\n    isSmallerOrEqual(k) {\n      return match(`(max-width: ${getValue(k)})`);\n    },\n    isInBetween(a, b) {\n      return match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n    },\n    current,\n    active() {\n      const bps = current();\n      return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(-1));\n    }\n  });\n}\n\nfunction useBroadcastChannel(options) {\n  const {\n    name,\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n  const isClosed = ref(false);\n  const channel = ref();\n  const data = ref();\n  const error = shallowRef(null);\n  const post = (data2) => {\n    if (channel.value)\n      channel.value.postMessage(data2);\n  };\n  const close = () => {\n    if (channel.value)\n      channel.value.close();\n    isClosed.value = true;\n  };\n  if (isSupported.value) {\n    tryOnMounted(() => {\n      error.value = null;\n      channel.value = new BroadcastChannel(name);\n      channel.value.addEventListener(\"message\", (e) => {\n        data.value = e.data;\n      }, { passive: true });\n      channel.value.addEventListener(\"messageerror\", (e) => {\n        error.value = e;\n      }, { passive: true });\n      channel.value.addEventListener(\"close\", () => {\n        isClosed.value = true;\n      });\n    });\n  }\n  tryOnScopeDispose(() => {\n    close();\n  });\n  return {\n    isSupported,\n    channel,\n    data,\n    post,\n    close,\n    error,\n    isClosed\n  };\n}\n\nconst WRITABLE_PROPERTIES = [\n  \"hash\",\n  \"host\",\n  \"hostname\",\n  \"href\",\n  \"pathname\",\n  \"port\",\n  \"protocol\",\n  \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n  const { window = defaultWindow } = options;\n  const refs = Object.fromEntries(\n    WRITABLE_PROPERTIES.map((key) => [key, ref()])\n  );\n  for (const [key, ref2] of objectEntries(refs)) {\n    watch(ref2, (value) => {\n      if (!(window == null ? void 0 : window.location) || window.location[key] === value)\n        return;\n      window.location[key] = value;\n    });\n  }\n  const buildState = (trigger) => {\n    var _a;\n    const { state: state2, length } = (window == null ? void 0 : window.history) || {};\n    const { origin } = (window == null ? void 0 : window.location) || {};\n    for (const key of WRITABLE_PROPERTIES)\n      refs[key].value = (_a = window == null ? void 0 : window.location) == null ? void 0 : _a[key];\n    return reactive({\n      trigger,\n      state: state2,\n      length,\n      origin,\n      ...refs\n    });\n  };\n  const state = ref(buildState(\"load\"));\n  if (window) {\n    useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n    useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n  }\n  return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n  const cachedValue = ref(refValue.value);\n  watch(() => refValue.value, (value) => {\n    if (!comparator(value, cachedValue.value))\n      cachedValue.value = value;\n  }, watchOptions);\n  return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n  const {\n    controls = false,\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n  let permissionStatus;\n  const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n  const state = ref();\n  const onChange = () => {\n    if (permissionStatus)\n      state.value = permissionStatus.state;\n  };\n  const query = createSingletonPromise(async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionStatus) {\n      try {\n        permissionStatus = await navigator.permissions.query(desc);\n        useEventListener(permissionStatus, \"change\", onChange);\n        onChange();\n      } catch (e) {\n        state.value = \"prompt\";\n      }\n    }\n    return permissionStatus;\n  });\n  query();\n  if (controls) {\n    return {\n      state,\n      isSupported,\n      query\n    };\n  } else {\n    return state;\n  }\n}\n\nfunction useClipboard(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500,\n    legacy = false\n  } = options;\n  const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const permissionRead = usePermission(\"clipboard-read\");\n  const permissionWrite = usePermission(\"clipboard-write\");\n  const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n  const text = ref(\"\");\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateText() {\n    if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n      navigator.clipboard.readText().then((value) => {\n        text.value = value;\n      });\n    } else {\n      text.value = legacyRead();\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateText);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n        await navigator.clipboard.writeText(value);\n      else\n        legacyCopy(value);\n      text.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  function legacyCopy(value) {\n    const ta = document.createElement(\"textarea\");\n    ta.value = value != null ? value : \"\";\n    ta.style.position = \"absolute\";\n    ta.style.opacity = \"0\";\n    document.body.appendChild(ta);\n    ta.select();\n    document.execCommand(\"copy\");\n    ta.remove();\n  }\n  function legacyRead() {\n    var _a, _b, _c;\n    return (_c = (_b = (_a = document == null ? void 0 : document.getSelection) == null ? void 0 : _a.call(document)) == null ? void 0 : _b.toString()) != null ? _c : \"\";\n  }\n  function isAllowed(status) {\n    return status === \"granted\" || status === \"prompt\";\n  }\n  return {\n    isSupported,\n    text,\n    copied,\n    copy\n  };\n}\n\nfunction useClipboardItems(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    read = false,\n    source,\n    copiedDuring = 1500\n  } = options;\n  const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n  const content = ref([]);\n  const copied = ref(false);\n  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);\n  function updateContent() {\n    if (isSupported.value) {\n      navigator.clipboard.read().then((items) => {\n        content.value = items;\n      });\n    }\n  }\n  if (isSupported.value && read)\n    useEventListener([\"copy\", \"cut\"], updateContent);\n  async function copy(value = toValue(source)) {\n    if (isSupported.value && value != null) {\n      await navigator.clipboard.write(value);\n      content.value = value;\n      copied.value = true;\n      timeout.start();\n    }\n  }\n  return {\n    isSupported,\n    content,\n    copied,\n    copy\n  };\n}\n\nfunction cloneFnJSON(source) {\n  return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n  const cloned = ref({});\n  const {\n    manual,\n    clone = cloneFnJSON,\n    // watch options\n    deep = true,\n    immediate = true\n  } = options;\n  function sync() {\n    cloned.value = clone(toValue(source));\n  }\n  if (!manual && (isRef(source) || typeof source === \"function\")) {\n    watch(source, sync, {\n      ...options,\n      deep,\n      immediate\n    });\n  } else {\n    sync();\n  }\n  return { cloned, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n  handlers[key] = fn;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    },\n    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  if (window && listenToStorageChanges) {\n    tryOnMounted(() => {\n      useEventListener(window, \"storage\", update);\n      useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      window.dispatchEvent(new CustomEvent(customStorageEventName, {\n        detail: {\n          key,\n          oldValue,\n          newValue,\n          storageArea: storage\n        }\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(key);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          dispatchWriteEvent(oldValue, serialized);\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit != null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return { ...rawInit, ...value };\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n        data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n        style.appendChild(document.createTextNode(styleString));\n        window.document.head.appendChild(style);\n      }\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            el.classList.add(v);\n          else\n            el.classList.remove(v);\n        });\n      } else {\n        el.setAttribute(attribute2, value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  try {\n    return Object.assign(auto, { store, system, state });\n  } catch (e) {\n    return auto;\n  }\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n  const confirmHook = createEventHook();\n  const cancelHook = createEventHook();\n  const revealHook = createEventHook();\n  let _resolve = noop;\n  const reveal = (data) => {\n    revealHook.trigger(data);\n    revealed.value = true;\n    return new Promise((resolve) => {\n      _resolve = resolve;\n    });\n  };\n  const confirm = (data) => {\n    revealed.value = false;\n    confirmHook.trigger(data);\n    _resolve({ data, isCanceled: false });\n  };\n  const cancel = (data) => {\n    revealed.value = false;\n    cancelHook.trigger(data);\n    _resolve({ data, isCanceled: true });\n  };\n  return {\n    isRevealed: computed(() => revealed.value),\n    reveal,\n    confirm,\n    cancel,\n    onReveal: revealHook.on,\n    onConfirm: confirmHook.on,\n    onCancel: cancelHook.on\n  };\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const value = toValue(target);\n    const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && window && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributeFilter: [\"style\", \"class\"],\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    updateCssVar,\n    { immediate: true }\n  );\n  watch(\n    variable,\n    (val) => {\n      var _a;\n      if ((_a = elRef.value) == null ? void 0 : _a.style)\n        elRef.value.style.setProperty(toValue(prop), val);\n    }\n  );\n  return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n  const vm = getCurrentInstance();\n  const currentElement = computedWithControl(\n    () => null,\n    () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n  );\n  onUpdated(currentElement.trigger);\n  onMounted(currentElement.trigger);\n  return currentElement;\n}\n\nfunction useCycleList(list, options) {\n  const state = shallowRef(getInitialValue());\n  const listRef = toRef(list);\n  const index = computed({\n    get() {\n      var _a;\n      const targetList = listRef.value;\n      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n      if (index2 < 0)\n        index2 = (_a = options == null ? void 0 : options.fallbackIndex) != null ? _a : 0;\n      return index2;\n    },\n    set(v) {\n      set(v);\n    }\n  });\n  function set(i) {\n    const targetList = listRef.value;\n    const length = targetList.length;\n    const index2 = (i % length + length) % length;\n    const value = targetList[index2];\n    state.value = value;\n    return value;\n  }\n  function shift(delta = 1) {\n    return set(index.value + delta);\n  }\n  function next(n = 1) {\n    return shift(n);\n  }\n  function prev(n = 1) {\n    return shift(-n);\n  }\n  function getInitialValue() {\n    var _a, _b;\n    return (_b = toValue((_a = options == null ? void 0 : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : void 0;\n  }\n  watch(listRef, () => set(index.value));\n  return {\n    state,\n    index,\n    next,\n    prev,\n    go: set\n  };\n}\n\nfunction useDark(options = {}) {\n  const {\n    valueDark = \"dark\",\n    valueLight = \"\",\n    window = defaultWindow\n  } = options;\n  const mode = useColorMode({\n    ...options,\n    onChanged: (mode2, defaultHandler) => {\n      var _a;\n      if (options.onChanged)\n        (_a = options.onChanged) == null ? void 0 : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n      else\n        defaultHandler(mode2);\n    },\n    modes: {\n      dark: valueDark,\n      light: valueLight\n    }\n  });\n  const system = computed(() => {\n    if (mode.system) {\n      return mode.system.value;\n    } else {\n      const preferredDark = usePreferredDark({ window });\n      return preferredDark.value ? \"dark\" : \"light\";\n    }\n  });\n  const isDark = computed({\n    get() {\n      return mode.value === \"dark\";\n    },\n    set(v) {\n      const modeVal = v ? \"dark\" : \"light\";\n      if (system.value === modeVal)\n        mode.value = \"auto\";\n      else\n        mode.value = modeVal;\n    }\n  });\n  return isDark;\n}\n\nfunction fnBypass(v) {\n  return v;\n}\nfunction fnSetSource(source, value) {\n  return source.value = value;\n}\nfunction defaultDump(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n  return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n  const {\n    clone = false,\n    dump = defaultDump(clone),\n    parse = defaultParse(clone),\n    setSource = fnSetSource\n  } = options;\n  function _createHistoryRecord() {\n    return markRaw({\n      snapshot: dump(source.value),\n      timestamp: timestamp()\n    });\n  }\n  const last = ref(_createHistoryRecord());\n  const undoStack = ref([]);\n  const redoStack = ref([]);\n  const _setSource = (record) => {\n    setSource(source, parse(record.snapshot));\n    last.value = record;\n  };\n  const commit = () => {\n    undoStack.value.unshift(last.value);\n    last.value = _createHistoryRecord();\n    if (options.capacity && undoStack.value.length > options.capacity)\n      undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n    if (redoStack.value.length)\n      redoStack.value.splice(0, redoStack.value.length);\n  };\n  const clear = () => {\n    undoStack.value.splice(0, undoStack.value.length);\n    redoStack.value.splice(0, redoStack.value.length);\n  };\n  const undo = () => {\n    const state = undoStack.value.shift();\n    if (state) {\n      redoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const redo = () => {\n    const state = redoStack.value.shift();\n    if (state) {\n      undoStack.value.unshift(last.value);\n      _setSource(state);\n    }\n  };\n  const reset = () => {\n    _setSource(last.value);\n  };\n  const history = computed(() => [last.value, ...undoStack.value]);\n  const canUndo = computed(() => undoStack.value.length > 0);\n  const canRedo = computed(() => redoStack.value.length > 0);\n  return {\n    source,\n    undoStack,\n    redoStack,\n    last,\n    history,\n    canUndo,\n    canRedo,\n    clear,\n    commit,\n    reset,\n    undo,\n    redo\n  };\n}\n\nfunction useRefHistory(source, options = {}) {\n  const {\n    deep = false,\n    flush = \"pre\",\n    eventFilter\n  } = options;\n  const {\n    eventFilter: composedFilter,\n    pause,\n    resume: resumeTracking,\n    isActive: isTracking\n  } = pausableFilter(eventFilter);\n  const {\n    ignoreUpdates,\n    ignorePrevAsyncUpdates,\n    stop\n  } = watchIgnorable(\n    source,\n    commit,\n    { deep, flush, eventFilter: composedFilter }\n  );\n  function setSource(source2, value) {\n    ignorePrevAsyncUpdates();\n    ignoreUpdates(() => {\n      source2.value = value;\n    });\n  }\n  const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n  const { clear, commit: manualCommit } = manualHistory;\n  function commit() {\n    ignorePrevAsyncUpdates();\n    manualCommit();\n  }\n  function resume(commitNow) {\n    resumeTracking();\n    if (commitNow)\n      commit();\n  }\n  function batch(fn) {\n    let canceled = false;\n    const cancel = () => canceled = true;\n    ignoreUpdates(() => {\n      fn(cancel);\n    });\n    if (!canceled)\n      commit();\n  }\n  function dispose() {\n    stop();\n    clear();\n  }\n  return {\n    ...manualHistory,\n    isTracking,\n    pause,\n    resume,\n    commit,\n    batch,\n    dispose\n  };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nfunction useDeviceMotion(options = {}) {\n  const {\n    window = defaultWindow,\n    eventFilter = bypassFilter\n  } = options;\n  const acceleration = ref({ x: null, y: null, z: null });\n  const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n  const interval = ref(0);\n  const accelerationIncludingGravity = ref({\n    x: null,\n    y: null,\n    z: null\n  });\n  if (window) {\n    const onDeviceMotion = createFilterWrapper(\n      eventFilter,\n      (event) => {\n        acceleration.value = event.acceleration;\n        accelerationIncludingGravity.value = event.accelerationIncludingGravity;\n        rotationRate.value = event.rotationRate;\n        interval.value = event.interval;\n      }\n    );\n    useEventListener(window, \"devicemotion\", onDeviceMotion);\n  }\n  return {\n    acceleration,\n    accelerationIncludingGravity,\n    rotationRate,\n    interval\n  };\n}\n\nfunction useDeviceOrientation(options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n  const isAbsolute = ref(false);\n  const alpha = ref(null);\n  const beta = ref(null);\n  const gamma = ref(null);\n  if (window && isSupported.value) {\n    useEventListener(window, \"deviceorientation\", (event) => {\n      isAbsolute.value = event.absolute;\n      alpha.value = event.alpha;\n      beta.value = event.beta;\n      gamma.value = event.gamma;\n    });\n  }\n  return {\n    isSupported,\n    isAbsolute,\n    alpha,\n    beta,\n    gamma\n  };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const pixelRatio = ref(1);\n  if (window) {\n    let observe2 = function() {\n      pixelRatio.value = window.devicePixelRatio;\n      cleanup2();\n      media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n      media.addEventListener(\"change\", observe2, { once: true });\n    }, cleanup2 = function() {\n      media == null ? void 0 : media.removeEventListener(\"change\", observe2);\n    };\n    let media;\n    observe2();\n    tryOnScopeDispose(cleanup2);\n  }\n  return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    requestPermissions = false,\n    constraints = { audio: true, video: true },\n    onUpdated\n  } = options;\n  const devices = ref([]);\n  const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n  const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n  const permissionGranted = ref(false);\n  let stream;\n  async function update() {\n    if (!isSupported.value)\n      return;\n    devices.value = await navigator.mediaDevices.enumerateDevices();\n    onUpdated == null ? void 0 : onUpdated(devices.value);\n    if (stream) {\n      stream.getTracks().forEach((t) => t.stop());\n      stream = null;\n    }\n  }\n  async function ensurePermissions() {\n    if (!isSupported.value)\n      return false;\n    if (permissionGranted.value)\n      return true;\n    const { state, query } = usePermission(\"camera\", { controls: true });\n    await query();\n    if (state.value !== \"granted\") {\n      stream = await navigator.mediaDevices.getUserMedia(constraints);\n      update();\n      permissionGranted.value = true;\n    } else {\n      permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  }\n  if (isSupported.value) {\n    if (requestPermissions)\n      ensurePermissions();\n    useEventListener(navigator.mediaDevices, \"devicechange\", update);\n    update();\n  }\n  return {\n    devices,\n    ensurePermissions,\n    permissionGranted,\n    videoInputs,\n    audioInputs,\n    audioOutputs,\n    isSupported\n  };\n}\n\nfunction useDisplayMedia(options = {}) {\n  var _a;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const video = options.video;\n  const audio = options.audio;\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getDisplayMedia;\n  });\n  const constraint = { audio, video };\n  const stream = shallowRef();\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n    return stream.value;\n  }\n  async function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    enabled\n  };\n}\n\nfunction useDocumentVisibility(options = {}) {\n  const { document = defaultDocument } = options;\n  if (!document)\n    return ref(\"visible\");\n  const visibility = ref(document.visibilityState);\n  useEventListener(document, \"visibilitychange\", () => {\n    visibility.value = document.visibilityState;\n  });\n  return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n  var _a, _b;\n  const {\n    pointerTypes,\n    preventDefault,\n    stopPropagation,\n    exact,\n    onMove,\n    onEnd,\n    onStart,\n    initialValue,\n    axis = \"both\",\n    draggingElement = defaultWindow,\n    containerElement,\n    handle: draggingHandle = target\n  } = options;\n  const position = ref(\n    (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n  );\n  const pressedDelta = ref();\n  const filterEvent = (e) => {\n    if (pointerTypes)\n      return pointerTypes.includes(e.pointerType);\n    return true;\n  };\n  const handleEvent = (e) => {\n    if (toValue(preventDefault))\n      e.preventDefault();\n    if (toValue(stopPropagation))\n      e.stopPropagation();\n  };\n  const start = (e) => {\n    var _a2;\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (toValue(exact) && e.target !== toValue(target))\n      return;\n    const container = toValue(containerElement);\n    const containerRect = (_a2 = container == null ? void 0 : container.getBoundingClientRect) == null ? void 0 : _a2.call(container);\n    const targetRect = toValue(target).getBoundingClientRect();\n    const pos = {\n      x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n      y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n    };\n    if ((onStart == null ? void 0 : onStart(pos, e)) === false)\n      return;\n    pressedDelta.value = pos;\n    handleEvent(e);\n  };\n  const move = (e) => {\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    const container = toValue(containerElement);\n    const targetRect = toValue(target).getBoundingClientRect();\n    let { x, y } = position.value;\n    if (axis === \"x\" || axis === \"both\") {\n      x = e.clientX - pressedDelta.value.x;\n      if (container)\n        x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n    }\n    if (axis === \"y\" || axis === \"both\") {\n      y = e.clientY - pressedDelta.value.y;\n      if (container)\n        y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n    }\n    position.value = {\n      x,\n      y\n    };\n    onMove == null ? void 0 : onMove(position.value, e);\n    handleEvent(e);\n  };\n  const end = (e) => {\n    if (toValue(options.disabled) || !filterEvent(e))\n      return;\n    if (!pressedDelta.value)\n      return;\n    pressedDelta.value = void 0;\n    onEnd == null ? void 0 : onEnd(position.value, e);\n    handleEvent(e);\n  };\n  if (isClient) {\n    const config = { capture: (_b = options.capture) != null ? _b : true };\n    useEventListener(draggingHandle, \"pointerdown\", start, config);\n    useEventListener(draggingElement, \"pointermove\", move, config);\n    useEventListener(draggingElement, \"pointerup\", end, config);\n  }\n  return {\n    ...toRefs(position),\n    position,\n    isDragging: computed(() => !!pressedDelta.value),\n    style: computed(\n      () => `left:${position.value.x}px;top:${position.value.y}px;`\n    )\n  };\n}\n\nfunction useDropZone(target, options = {}) {\n  const isOverDropZone = ref(false);\n  const files = shallowRef(null);\n  let counter = 0;\n  let isDataTypeIncluded = true;\n  if (isClient) {\n    const _options = typeof options === \"function\" ? { onDrop: options } : options;\n    const getFiles = (event) => {\n      var _a, _b;\n      const list = Array.from((_b = (_a = event.dataTransfer) == null ? void 0 : _a.files) != null ? _b : []);\n      return files.value = list.length === 0 ? null : list;\n    };\n    useEventListener(target, \"dragenter\", (event) => {\n      var _a, _b;\n      const types = Array.from(((_a = event == null ? void 0 : event.dataTransfer) == null ? void 0 : _a.items) || []).map((i) => i.kind === \"file\" ? i.type : null).filter(notNullish);\n      if (_options.dataTypes && event.dataTransfer) {\n        const dataTypes = unref(_options.dataTypes);\n        isDataTypeIncluded = typeof dataTypes === \"function\" ? dataTypes(types) : dataTypes ? dataTypes.some((item) => types.includes(item)) : true;\n        if (!isDataTypeIncluded)\n          return;\n      }\n      event.preventDefault();\n      counter += 1;\n      isOverDropZone.value = true;\n      (_b = _options.onEnter) == null ? void 0 : _b.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"dragover\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      (_a = _options.onOver) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"dragleave\", (event) => {\n      var _a;\n      if (!isDataTypeIncluded)\n        return;\n      event.preventDefault();\n      counter -= 1;\n      if (counter === 0)\n        isOverDropZone.value = false;\n      (_a = _options.onLeave) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n    useEventListener(target, \"drop\", (event) => {\n      var _a;\n      event.preventDefault();\n      counter = 0;\n      isOverDropZone.value = false;\n      (_a = _options.onDrop) == null ? void 0 : _a.call(_options, getFiles(event), event);\n    });\n  }\n  return {\n    files,\n    isOverDropZone\n  };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els)\n          _el && observer.observe(_el, observerOptions);\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementBounding(target, options = {}) {\n  const {\n    reset = true,\n    windowResize = true,\n    windowScroll = true,\n    immediate = true\n  } = options;\n  const height = ref(0);\n  const bottom = ref(0);\n  const left = ref(0);\n  const right = ref(0);\n  const top = ref(0);\n  const width = ref(0);\n  const x = ref(0);\n  const y = ref(0);\n  function update() {\n    const el = unrefElement(target);\n    if (!el) {\n      if (reset) {\n        height.value = 0;\n        bottom.value = 0;\n        left.value = 0;\n        right.value = 0;\n        top.value = 0;\n        width.value = 0;\n        x.value = 0;\n        y.value = 0;\n      }\n      return;\n    }\n    const rect = el.getBoundingClientRect();\n    height.value = rect.height;\n    bottom.value = rect.bottom;\n    left.value = rect.left;\n    right.value = rect.right;\n    top.value = rect.top;\n    width.value = rect.width;\n    x.value = rect.x;\n    y.value = rect.y;\n  }\n  useResizeObserver(target, update);\n  watch(() => unrefElement(target), (ele) => !ele && update());\n  useMutationObserver(target, update, {\n    attributeFilter: [\"style\", \"class\"]\n  });\n  if (windowScroll)\n    useEventListener(\"scroll\", update, { capture: true, passive: true });\n  if (windowResize)\n    useEventListener(\"resize\", update, { passive: true });\n  tryOnMounted(() => {\n    if (immediate)\n      update();\n  });\n  return {\n    height,\n    bottom,\n    left,\n    right,\n    top,\n    width,\n    x,\n    y,\n    update\n  };\n}\n\nfunction useElementByPoint(options) {\n  const {\n    x,\n    y,\n    document = defaultDocument,\n    multiple,\n    interval = \"requestAnimationFrame\",\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => {\n    if (toValue(multiple))\n      return document && \"elementsFromPoint\" in document;\n    return document && \"elementFromPoint\" in document;\n  });\n  const element = ref(null);\n  const cb = () => {\n    var _a, _b;\n    element.value = toValue(multiple) ? (_a = document == null ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n  };\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  return {\n    isSupported,\n    element,\n    ...controls\n  };\n}\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    window = defaultWindow\n  } = options;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  const { stop: stop1 } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const styles = window.getComputedStyle($elem);\n          width.value = Number.parseFloat(styles.width);\n          height.value = Number.parseFloat(styles.height);\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = ref(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, options = {}) {\n  const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold\n    }\n  );\n  return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n  const scope = getCurrentScope();\n  function on(listener) {\n    var _a;\n    const listeners = events.get(key) || /* @__PURE__ */ new Set();\n    listeners.add(listener);\n    events.set(key, listeners);\n    const _off = () => off(listener);\n    (_a = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a.push(_off);\n    return _off;\n  }\n  function once(listener) {\n    function _listener(...args) {\n      off(_listener);\n      listener(...args);\n    }\n    return on(_listener);\n  }\n  function off(listener) {\n    const listeners = events.get(key);\n    if (!listeners)\n      return;\n    listeners.delete(listener);\n    if (!listeners.size)\n      reset();\n  }\n  function reset() {\n    events.delete(key);\n  }\n  function emit(event, payload) {\n    var _a;\n    (_a = events.get(key)) == null ? void 0 : _a.forEach((v) => v(event, payload));\n  }\n  return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n  const event = ref(null);\n  const data = ref(null);\n  const status = ref(\"CONNECTING\");\n  const eventSource = ref(null);\n  const error = shallowRef(null);\n  const urlRef = toRef(url);\n  let explicitlyClosed = false;\n  let retried = 0;\n  const {\n    withCredentials = false,\n    immediate = true\n  } = options;\n  const close = () => {\n    if (isClient && eventSource.value) {\n      eventSource.value.close();\n      eventSource.value = null;\n      status.value = \"CLOSED\";\n      explicitlyClosed = true;\n    }\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const es = new EventSource(urlRef.value, { withCredentials });\n    status.value = \"CONNECTING\";\n    eventSource.value = es;\n    es.onopen = () => {\n      status.value = \"OPEN\";\n      error.value = null;\n    };\n    es.onerror = (e) => {\n      status.value = \"CLOSED\";\n      error.value = e;\n      if (es.readyState === 2 && !explicitlyClosed && options.autoReconnect) {\n        es.close();\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions$1(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    es.onmessage = (e) => {\n      event.value = null;\n      data.value = e.data;\n    };\n    for (const event_name of events) {\n      useEventListener(es, event_name, (e) => {\n        event.value = event_name;\n        data.value = e.data || null;\n      });\n    }\n  };\n  const open = () => {\n    if (!isClient)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    watch(urlRef, open, { immediate: true });\n  tryOnScopeDispose(close);\n  return {\n    eventSource,\n    event,\n    data,\n    status,\n    error,\n    open,\n    close\n  };\n}\n\nfunction useEyeDropper(options = {}) {\n  const { initialValue = \"\" } = options;\n  const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n  const sRGBHex = ref(initialValue);\n  async function open(openOptions) {\n    if (!isSupported.value)\n      return;\n    const eyeDropper = new window.EyeDropper();\n    const result = await eyeDropper.open(openOptions);\n    sRGBHex.value = result.sRGBHex;\n    return result;\n  }\n  return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n  const {\n    baseUrl = \"\",\n    rel = \"icon\",\n    document = defaultDocument\n  } = options;\n  const favicon = toRef(newIcon);\n  const applyIcon = (icon) => {\n    const elements = document == null ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n    if (!elements || elements.length === 0) {\n      const link = document == null ? void 0 : document.createElement(\"link\");\n      if (link) {\n        link.rel = rel;\n        link.href = `${baseUrl}${icon}`;\n        link.type = `image/${icon.split(\".\").pop()}`;\n        document == null ? void 0 : document.head.append(link);\n      }\n      return;\n    }\n    elements == null ? void 0 : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n  };\n  watch(\n    favicon,\n    (i, o) => {\n      if (typeof i === \"string\" && i !== o)\n        applyIcon(i);\n    },\n    { immediate: true }\n  );\n  return favicon;\n}\n\nconst payloadMapping = {\n  json: \"application/json\",\n  text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n  return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nfunction isAbsoluteURL(url) {\n  return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\nfunction headersToObject(headers) {\n  if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n    return Object.fromEntries(headers.entries());\n  return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n  if (combination === \"overwrite\") {\n    return async (ctx) => {\n      const callback = callbacks[callbacks.length - 1];\n      if (callback)\n        return { ...ctx, ...await callback(ctx) };\n      return ctx;\n    };\n  } else {\n    return async (ctx) => {\n      for (const callback of callbacks) {\n        if (callback)\n          ctx = { ...ctx, ...await callback(ctx) };\n      }\n      return ctx;\n    };\n  }\n}\nfunction createFetch(config = {}) {\n  const _combination = config.combination || \"chain\";\n  const _options = config.options || {};\n  const _fetchOptions = config.fetchOptions || {};\n  function useFactoryFetch(url, ...args) {\n    const computedUrl = computed(() => {\n      const baseUrl = toValue(config.baseUrl);\n      const targetUrl = toValue(url);\n      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n    });\n    let options = _options;\n    let fetchOptions = _fetchOptions;\n    if (args.length > 0) {\n      if (isFetchOptions(args[0])) {\n        options = {\n          ...options,\n          ...args[0],\n          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n        };\n      } else {\n        fetchOptions = {\n          ...fetchOptions,\n          ...args[0],\n          headers: {\n            ...headersToObject(fetchOptions.headers) || {},\n            ...headersToObject(args[0].headers) || {}\n          }\n        };\n      }\n    }\n    if (args.length > 1 && isFetchOptions(args[1])) {\n      options = {\n        ...options,\n        ...args[1],\n        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n      };\n    }\n    return useFetch(computedUrl, fetchOptions, options);\n  }\n  return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n  var _a;\n  const supportsAbort = typeof AbortController === \"function\";\n  let fetchOptions = {};\n  let options = {\n    immediate: true,\n    refetch: false,\n    timeout: 0,\n    updateDataOnError: false\n  };\n  const config = {\n    method: \"GET\",\n    type: \"text\",\n    payload: void 0\n  };\n  if (args.length > 0) {\n    if (isFetchOptions(args[0]))\n      options = { ...options, ...args[0] };\n    else\n      fetchOptions = args[0];\n  }\n  if (args.length > 1) {\n    if (isFetchOptions(args[1]))\n      options = { ...options, ...args[1] };\n  }\n  const {\n    fetch = (_a = defaultWindow) == null ? void 0 : _a.fetch,\n    initialData,\n    timeout\n  } = options;\n  const responseEvent = createEventHook();\n  const errorEvent = createEventHook();\n  const finallyEvent = createEventHook();\n  const isFinished = ref(false);\n  const isFetching = ref(false);\n  const aborted = ref(false);\n  const statusCode = ref(null);\n  const response = shallowRef(null);\n  const error = shallowRef(null);\n  const data = shallowRef(initialData || null);\n  const canAbort = computed(() => supportsAbort && isFetching.value);\n  let controller;\n  let timer;\n  const abort = () => {\n    if (supportsAbort) {\n      controller == null ? void 0 : controller.abort();\n      controller = new AbortController();\n      controller.signal.onabort = () => aborted.value = true;\n      fetchOptions = {\n        ...fetchOptions,\n        signal: controller.signal\n      };\n    }\n  };\n  const loading = (isLoading) => {\n    isFetching.value = isLoading;\n    isFinished.value = !isLoading;\n  };\n  if (timeout)\n    timer = useTimeoutFn(abort, timeout, { immediate: false });\n  let executeCounter = 0;\n  const execute = async (throwOnFailed = false) => {\n    var _a2, _b;\n    abort();\n    loading(true);\n    error.value = null;\n    statusCode.value = null;\n    aborted.value = false;\n    executeCounter += 1;\n    const currentExecuteCounter = executeCounter;\n    const defaultFetchOptions = {\n      method: config.method,\n      headers: {}\n    };\n    if (config.payload) {\n      const headers = headersToObject(defaultFetchOptions.headers);\n      const payload = toValue(config.payload);\n      if (!config.payloadType && payload && Object.getPrototypeOf(payload) === Object.prototype && !(payload instanceof FormData))\n        config.payloadType = \"json\";\n      if (config.payloadType)\n        headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n      defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n    }\n    let isCanceled = false;\n    const context = {\n      url: toValue(url),\n      options: {\n        ...defaultFetchOptions,\n        ...fetchOptions\n      },\n      cancel: () => {\n        isCanceled = true;\n      }\n    };\n    if (options.beforeFetch)\n      Object.assign(context, await options.beforeFetch(context));\n    if (isCanceled || !fetch) {\n      loading(false);\n      return Promise.resolve(null);\n    }\n    let responseData = null;\n    if (timer)\n      timer.start();\n    return fetch(\n      context.url,\n      {\n        ...defaultFetchOptions,\n        ...context.options,\n        headers: {\n          ...headersToObject(defaultFetchOptions.headers),\n          ...headersToObject((_b = context.options) == null ? void 0 : _b.headers)\n        }\n      }\n    ).then(async (fetchResponse) => {\n      response.value = fetchResponse;\n      statusCode.value = fetchResponse.status;\n      responseData = await fetchResponse.clone()[config.type]();\n      if (!fetchResponse.ok) {\n        data.value = initialData || null;\n        throw new Error(fetchResponse.statusText);\n      }\n      if (options.afterFetch) {\n        ({ data: responseData } = await options.afterFetch({\n          data: responseData,\n          response: fetchResponse\n        }));\n      }\n      data.value = responseData;\n      responseEvent.trigger(fetchResponse);\n      return fetchResponse;\n    }).catch(async (fetchError) => {\n      let errorData = fetchError.message || fetchError.name;\n      if (options.onFetchError) {\n        ({ error: errorData, data: responseData } = await options.onFetchError({\n          data: responseData,\n          error: fetchError,\n          response: response.value\n        }));\n      }\n      error.value = errorData;\n      if (options.updateDataOnError)\n        data.value = responseData;\n      errorEvent.trigger(fetchError);\n      if (throwOnFailed)\n        throw fetchError;\n      return null;\n    }).finally(() => {\n      if (currentExecuteCounter === executeCounter)\n        loading(false);\n      if (timer)\n        timer.stop();\n      finallyEvent.trigger(null);\n    });\n  };\n  const refetch = toRef(options.refetch);\n  watch(\n    [\n      refetch,\n      toRef(url)\n    ],\n    ([refetch2]) => refetch2 && execute(),\n    { deep: true }\n  );\n  const shell = {\n    isFinished: readonly(isFinished),\n    isFetching: readonly(isFetching),\n    statusCode,\n    response,\n    error,\n    data,\n    canAbort,\n    aborted,\n    abort,\n    execute,\n    onFetchResponse: responseEvent.on,\n    onFetchError: errorEvent.on,\n    onFetchFinally: finallyEvent.on,\n    // method\n    get: setMethod(\"GET\"),\n    put: setMethod(\"PUT\"),\n    post: setMethod(\"POST\"),\n    delete: setMethod(\"DELETE\"),\n    patch: setMethod(\"PATCH\"),\n    head: setMethod(\"HEAD\"),\n    options: setMethod(\"OPTIONS\"),\n    // type\n    json: setType(\"json\"),\n    text: setType(\"text\"),\n    blob: setType(\"blob\"),\n    arrayBuffer: setType(\"arrayBuffer\"),\n    formData: setType(\"formData\")\n  };\n  function setMethod(method) {\n    return (payload, payloadType) => {\n      if (!isFetching.value) {\n        config.method = method;\n        config.payload = payload;\n        config.payloadType = payloadType;\n        if (isRef(config.payload)) {\n          watch(\n            [\n              refetch,\n              toRef(config.payload)\n            ],\n            ([refetch2]) => refetch2 && execute(),\n            { deep: true }\n          );\n        }\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  function waitUntilFinished() {\n    return new Promise((resolve, reject) => {\n      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));\n    });\n  }\n  function setType(type) {\n    return () => {\n      if (!isFetching.value) {\n        config.type = type;\n        return {\n          ...shell,\n          then(onFulfilled, onRejected) {\n            return waitUntilFinished().then(onFulfilled, onRejected);\n          }\n        };\n      }\n      return void 0;\n    };\n  }\n  if (options.immediate)\n    Promise.resolve().then(() => execute());\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilFinished().then(onFulfilled, onRejected);\n    }\n  };\n}\nfunction joinPaths(start, end) {\n  if (!start.endsWith(\"/\") && !end.startsWith(\"/\"))\n    return `${start}/${end}`;\n  return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n  multiple: true,\n  accept: \"*\",\n  reset: false,\n  directory: false\n};\nfunction useFileDialog(options = {}) {\n  const {\n    document = defaultDocument\n  } = options;\n  const files = ref(null);\n  const { on: onChange, trigger } = createEventHook();\n  let input;\n  if (document) {\n    input = document.createElement(\"input\");\n    input.type = \"file\";\n    input.onchange = (event) => {\n      const result = event.target;\n      files.value = result.files;\n      trigger(files.value);\n    };\n  }\n  const reset = () => {\n    files.value = null;\n    if (input) {\n      input.value = \"\";\n      trigger(null);\n    }\n  };\n  const open = (localOptions) => {\n    if (!input)\n      return;\n    const _options = {\n      ...DEFAULT_OPTIONS,\n      ...options,\n      ...localOptions\n    };\n    input.multiple = _options.multiple;\n    input.accept = _options.accept;\n    input.webkitdirectory = _options.directory;\n    if (hasOwn(_options, \"capture\"))\n      input.capture = _options.capture;\n    if (_options.reset)\n      reset();\n    input.click();\n  };\n  return {\n    files: readonly(files),\n    open,\n    reset,\n    onChange\n  };\n}\n\nfunction useFileSystemAccess(options = {}) {\n  const {\n    window: _window = defaultWindow,\n    dataType = \"Text\"\n  } = options;\n  const window = _window;\n  const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n  const fileHandle = ref();\n  const data = ref();\n  const file = ref();\n  const fileName = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.name) != null ? _b : \"\";\n  });\n  const fileMIME = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.type) != null ? _b : \"\";\n  });\n  const fileSize = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.size) != null ? _b : 0;\n  });\n  const fileLastModified = computed(() => {\n    var _a, _b;\n    return (_b = (_a = file.value) == null ? void 0 : _a.lastModified) != null ? _b : 0;\n  });\n  async function open(_options = {}) {\n    if (!isSupported.value)\n      return;\n    const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n    fileHandle.value = handle;\n    await updateData();\n  }\n  async function create(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    data.value = void 0;\n    await updateData();\n  }\n  async function save(_options = {}) {\n    if (!isSupported.value)\n      return;\n    if (!fileHandle.value)\n      return saveAs(_options);\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function saveAs(_options = {}) {\n    if (!isSupported.value)\n      return;\n    fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n    if (data.value) {\n      const writableStream = await fileHandle.value.createWritable();\n      await writableStream.write(data.value);\n      await writableStream.close();\n    }\n    await updateFile();\n  }\n  async function updateFile() {\n    var _a;\n    file.value = await ((_a = fileHandle.value) == null ? void 0 : _a.getFile());\n  }\n  async function updateData() {\n    var _a, _b;\n    await updateFile();\n    const type = toValue(dataType);\n    if (type === \"Text\")\n      data.value = await ((_a = file.value) == null ? void 0 : _a.text());\n    else if (type === \"ArrayBuffer\")\n      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());\n    else if (type === \"Blob\")\n      data.value = file.value;\n  }\n  watch(() => toValue(dataType), updateData);\n  return {\n    isSupported,\n    data,\n    file,\n    fileName,\n    fileMIME,\n    fileSize,\n    fileLastModified,\n    open,\n    create,\n    save,\n    saveAs,\n    updateData\n  };\n}\n\nfunction useFocus(target, options = {}) {\n  const { initialValue = false, focusVisible = false } = options;\n  const innerFocused = ref(false);\n  const targetElement = computed(() => unrefElement(target));\n  useEventListener(targetElement, \"focus\", (event) => {\n    var _a, _b;\n    if (!focusVisible || ((_b = (_a = event.target).matches) == null ? void 0 : _b.call(_a, \":focus-visible\")))\n      innerFocused.value = true;\n  });\n  useEventListener(targetElement, \"blur\", () => innerFocused.value = false);\n  const focused = computed({\n    get: () => innerFocused.value,\n    set(value) {\n      var _a, _b;\n      if (!value && innerFocused.value)\n        (_a = targetElement.value) == null ? void 0 : _a.blur();\n      else if (value && !innerFocused.value)\n        (_b = targetElement.value) == null ? void 0 : _b.focus();\n    }\n  });\n  watch(\n    targetElement,\n    () => {\n      focused.value = initialValue;\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  return { focused };\n}\n\nfunction useFocusWithin(target, options = {}) {\n  const activeElement = useActiveElement(options);\n  const targetElement = computed(() => unrefElement(target));\n  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);\n  return { focused };\n}\n\nfunction useFps(options) {\n  var _a;\n  const fps = ref(0);\n  if (typeof performance === \"undefined\")\n    return fps;\n  const every = (_a = options == null ? void 0 : options.every) != null ? _a : 10;\n  let last = performance.now();\n  let ticks = 0;\n  useRafFn(() => {\n    ticks += 1;\n    if (ticks >= every) {\n      const now = performance.now();\n      const diff = now - last;\n      fps.value = Math.round(1e3 / (diff / ticks));\n      last = now;\n      ticks = 0;\n    }\n  });\n  return fps;\n}\n\nconst eventHandlers = [\n  \"fullscreenchange\",\n  \"webkitfullscreenchange\",\n  \"webkitendfullscreen\",\n  \"mozfullscreenchange\",\n  \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n  const {\n    document = defaultDocument,\n    autoExit = false\n  } = options;\n  const targetRef = computed(() => {\n    var _a;\n    return (_a = unrefElement(target)) != null ? _a : document == null ? void 0 : document.querySelector(\"html\");\n  });\n  const isFullscreen = ref(false);\n  const requestMethod = computed(() => {\n    return [\n      \"requestFullscreen\",\n      \"webkitRequestFullscreen\",\n      \"webkitEnterFullscreen\",\n      \"webkitEnterFullScreen\",\n      \"webkitRequestFullScreen\",\n      \"mozRequestFullScreen\",\n      \"msRequestFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const exitMethod = computed(() => {\n    return [\n      \"exitFullscreen\",\n      \"webkitExitFullscreen\",\n      \"webkitExitFullScreen\",\n      \"webkitCancelFullScreen\",\n      \"mozCancelFullScreen\",\n      \"msExitFullscreen\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenEnabled = computed(() => {\n    return [\n      \"fullScreen\",\n      \"webkitIsFullScreen\",\n      \"webkitDisplayingFullscreen\",\n      \"mozFullScreen\",\n      \"msFullscreenElement\"\n    ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n  });\n  const fullscreenElementMethod = [\n    \"fullscreenElement\",\n    \"webkitFullscreenElement\",\n    \"mozFullScreenElement\",\n    \"msFullscreenElement\"\n  ].find((m) => document && m in document);\n  const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n  const isCurrentElementFullScreen = () => {\n    if (fullscreenElementMethod)\n      return (document == null ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n    return false;\n  };\n  const isElementFullScreen = () => {\n    if (fullscreenEnabled.value) {\n      if (document && document[fullscreenEnabled.value] != null) {\n        return document[fullscreenEnabled.value];\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[fullscreenEnabled.value]) != null) {\n          return Boolean(target2[fullscreenEnabled.value]);\n        }\n      }\n    }\n    return false;\n  };\n  async function exit() {\n    if (!isSupported.value || !isFullscreen.value)\n      return;\n    if (exitMethod.value) {\n      if ((document == null ? void 0 : document[exitMethod.value]) != null) {\n        await document[exitMethod.value]();\n      } else {\n        const target2 = targetRef.value;\n        if ((target2 == null ? void 0 : target2[exitMethod.value]) != null)\n          await target2[exitMethod.value]();\n      }\n    }\n    isFullscreen.value = false;\n  }\n  async function enter() {\n    if (!isSupported.value || isFullscreen.value)\n      return;\n    if (isElementFullScreen())\n      await exit();\n    const target2 = targetRef.value;\n    if (requestMethod.value && (target2 == null ? void 0 : target2[requestMethod.value]) != null) {\n      await target2[requestMethod.value]();\n      isFullscreen.value = true;\n    }\n  }\n  async function toggle() {\n    await (isFullscreen.value ? exit() : enter());\n  }\n  const handlerCallback = () => {\n    const isElementFullScreenValue = isElementFullScreen();\n    if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n      isFullscreen.value = isElementFullScreenValue;\n  };\n  useEventListener(document, eventHandlers, handlerCallback, false);\n  useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, false);\n  if (autoExit)\n    tryOnScopeDispose(exit);\n  return {\n    isSupported,\n    isFullscreen,\n    enter,\n    exit,\n    toggle\n  };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n  return computed(() => {\n    if (gamepad.value) {\n      return {\n        buttons: {\n          a: gamepad.value.buttons[0],\n          b: gamepad.value.buttons[1],\n          x: gamepad.value.buttons[2],\n          y: gamepad.value.buttons[3]\n        },\n        bumper: {\n          left: gamepad.value.buttons[4],\n          right: gamepad.value.buttons[5]\n        },\n        triggers: {\n          left: gamepad.value.buttons[6],\n          right: gamepad.value.buttons[7]\n        },\n        stick: {\n          left: {\n            horizontal: gamepad.value.axes[0],\n            vertical: gamepad.value.axes[1],\n            button: gamepad.value.buttons[10]\n          },\n          right: {\n            horizontal: gamepad.value.axes[2],\n            vertical: gamepad.value.axes[3],\n            button: gamepad.value.buttons[11]\n          }\n        },\n        dpad: {\n          up: gamepad.value.buttons[12],\n          down: gamepad.value.buttons[13],\n          left: gamepad.value.buttons[14],\n          right: gamepad.value.buttons[15]\n        },\n        back: gamepad.value.buttons[8],\n        start: gamepad.value.buttons[9]\n      };\n    }\n    return null;\n  });\n}\nfunction useGamepad(options = {}) {\n  const {\n    navigator = defaultNavigator\n  } = options;\n  const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n  const gamepads = ref([]);\n  const onConnectedHook = createEventHook();\n  const onDisconnectedHook = createEventHook();\n  const stateFromGamepad = (gamepad) => {\n    const hapticActuators = [];\n    const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n    if (vibrationActuator)\n      hapticActuators.push(vibrationActuator);\n    if (gamepad.hapticActuators)\n      hapticActuators.push(...gamepad.hapticActuators);\n    return {\n      ...gamepad,\n      id: gamepad.id,\n      hapticActuators,\n      axes: gamepad.axes.map((axes) => axes),\n      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value })),\n      index: gamepad.index\n    };\n  };\n  const updateGamepadState = () => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n    }\n  };\n  const { isActive, pause, resume } = useRafFn(updateGamepadState);\n  const onGamepadConnected = (gamepad) => {\n    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n      gamepads.value.push(stateFromGamepad(gamepad));\n      onConnectedHook.trigger(gamepad.index);\n    }\n    resume();\n  };\n  const onGamepadDisconnected = (gamepad) => {\n    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n    onDisconnectedHook.trigger(gamepad.index);\n  };\n  useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad));\n  useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad));\n  tryOnMounted(() => {\n    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];\n    for (const gamepad of _gamepads) {\n      if (gamepad && gamepads.value[gamepad.index])\n        onGamepadConnected(gamepad);\n    }\n  });\n  pause();\n  return {\n    isSupported,\n    onConnected: onConnectedHook.on,\n    onDisconnected: onDisconnectedHook.on,\n    gamepads,\n    pause,\n    resume,\n    isActive\n  };\n}\n\nfunction useGeolocation(options = {}) {\n  const {\n    enableHighAccuracy = true,\n    maximumAge = 3e4,\n    timeout = 27e3,\n    navigator = defaultNavigator,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n  const locatedAt = ref(null);\n  const error = shallowRef(null);\n  const coords = ref({\n    accuracy: 0,\n    latitude: Number.POSITIVE_INFINITY,\n    longitude: Number.POSITIVE_INFINITY,\n    altitude: null,\n    altitudeAccuracy: null,\n    heading: null,\n    speed: null\n  });\n  function updatePosition(position) {\n    locatedAt.value = position.timestamp;\n    coords.value = position.coords;\n    error.value = null;\n  }\n  let watcher;\n  function resume() {\n    if (isSupported.value) {\n      watcher = navigator.geolocation.watchPosition(\n        updatePosition,\n        (err) => error.value = err,\n        {\n          enableHighAccuracy,\n          maximumAge,\n          timeout\n        }\n      );\n    }\n  }\n  if (immediate)\n    resume();\n  function pause() {\n    if (watcher && navigator)\n      navigator.geolocation.clearWatch(watcher);\n  }\n  tryOnScopeDispose(() => {\n    pause();\n  });\n  return {\n    isSupported,\n    coords,\n    locatedAt,\n    error,\n    resume,\n    pause\n  };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n  const {\n    initialState = false,\n    listenForVisibilityChange = true,\n    events = defaultEvents$1,\n    window = defaultWindow,\n    eventFilter = throttleFilter(50)\n  } = options;\n  const idle = ref(initialState);\n  const lastActive = ref(timestamp());\n  let timer;\n  const reset = () => {\n    idle.value = false;\n    clearTimeout(timer);\n    timer = setTimeout(() => idle.value = true, timeout);\n  };\n  const onEvent = createFilterWrapper(\n    eventFilter,\n    () => {\n      lastActive.value = timestamp();\n      reset();\n    }\n  );\n  if (window) {\n    const document = window.document;\n    for (const event of events)\n      useEventListener(window, event, onEvent, { passive: true });\n    if (listenForVisibilityChange) {\n      useEventListener(document, \"visibilitychange\", () => {\n        if (!document.hidden)\n          onEvent();\n      });\n    }\n    reset();\n  }\n  return {\n    idle,\n    lastActive,\n    reset\n  };\n}\n\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    if (clazz)\n      img.className = clazz;\n    if (loading)\n      img.loading = loading;\n    if (crossorigin)\n      img.crossOrigin = crossorigin;\n    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\",\n    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n    const { display, flexDirection } = getComputedStyle(el);\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft) <= (offset.left || 0);\n    const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\n  });\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  watch(\n    () => [state.arrivedState[direction], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  return {\n    isLoading\n  };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n  const {\n    events = defaultEvents,\n    document = defaultDocument,\n    initial = null\n  } = options;\n  const state = ref(initial);\n  if (document) {\n    events.forEach((listenerEvent) => {\n      useEventListener(document, listenerEvent, (evt) => {\n        if (typeof evt.getModifierState === \"function\")\n          state.value = evt.getModifierState(modifier);\n      });\n    });\n  }\n  return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n  ctrl: \"control\",\n  command: \"meta\",\n  cmd: \"meta\",\n  option: \"alt\",\n  up: \"arrowup\",\n  down: \"arrowdown\",\n  left: \"arrowleft\",\n  right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n  const {\n    reactive: useReactive = false,\n    target = defaultWindow,\n    aliasMap = DefaultMagicKeysAliasMap,\n    passive = true,\n    onEventFired = noop\n  } = options;\n  const current = reactive(/* @__PURE__ */ new Set());\n  const obj = {\n    toJSON() {\n      return {};\n    },\n    current\n  };\n  const refs = useReactive ? reactive(obj) : obj;\n  const metaDeps = /* @__PURE__ */ new Set();\n  const usedKeys = /* @__PURE__ */ new Set();\n  function setRefs(key, value) {\n    if (key in refs) {\n      if (useReactive)\n        refs[key] = value;\n      else\n        refs[key].value = value;\n    }\n  }\n  function reset() {\n    current.clear();\n    for (const key of usedKeys)\n      setRefs(key, false);\n  }\n  function updateRefs(e, value) {\n    var _a, _b;\n    const key = (_a = e.key) == null ? void 0 : _a.toLowerCase();\n    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();\n    const values = [code, key].filter(Boolean);\n    if (key) {\n      if (value)\n        current.add(key);\n      else\n        current.delete(key);\n    }\n    for (const key2 of values) {\n      usedKeys.add(key2);\n      setRefs(key2, value);\n    }\n    if (key === \"meta\" && !value) {\n      metaDeps.forEach((key2) => {\n        current.delete(key2);\n        setRefs(key2, false);\n      });\n      metaDeps.clear();\n    } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n      [...current, ...values].forEach((key2) => metaDeps.add(key2));\n    }\n  }\n  useEventListener(target, \"keydown\", (e) => {\n    updateRefs(e, true);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(target, \"keyup\", (e) => {\n    updateRefs(e, false);\n    return onEventFired(e);\n  }, { passive });\n  useEventListener(\"blur\", reset, { passive: true });\n  useEventListener(\"focus\", reset, { passive: true });\n  const proxy = new Proxy(\n    refs,\n    {\n      get(target2, prop, rec) {\n        if (typeof prop !== \"string\")\n          return Reflect.get(target2, prop, rec);\n        prop = prop.toLowerCase();\n        if (prop in aliasMap)\n          prop = aliasMap[prop];\n        if (!(prop in refs)) {\n          if (/[+_-]/.test(prop)) {\n            const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n            refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n          } else {\n            refs[prop] = ref(false);\n          }\n        }\n        const r = Reflect.get(target2, prop, rec);\n        return useReactive ? toValue(r) : r;\n      }\n    }\n  );\n  return proxy;\n}\n\nfunction usingElRef(source, cb) {\n  if (toValue(source))\n    cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n  let ranges = [];\n  for (let i = 0; i < timeRanges.length; ++i)\n    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n  return ranges;\n}\nfunction tracksToArray(tracks) {\n  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n  src: \"\",\n  tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n  options = {\n    ...defaultOptions,\n    ...options\n  };\n  const {\n    document = defaultDocument\n  } = options;\n  const currentTime = ref(0);\n  const duration = ref(0);\n  const seeking = ref(false);\n  const volume = ref(1);\n  const waiting = ref(false);\n  const ended = ref(false);\n  const playing = ref(false);\n  const rate = ref(1);\n  const stalled = ref(false);\n  const buffered = ref([]);\n  const tracks = ref([]);\n  const selectedTrack = ref(-1);\n  const isPictureInPicture = ref(false);\n  const muted = ref(false);\n  const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n  const sourceErrorEvent = createEventHook();\n  const disableTrack = (track) => {\n    usingElRef(target, (el) => {\n      if (track) {\n        const id = typeof track === \"number\" ? track : track.id;\n        el.textTracks[id].mode = \"disabled\";\n      } else {\n        for (let i = 0; i < el.textTracks.length; ++i)\n          el.textTracks[i].mode = \"disabled\";\n      }\n      selectedTrack.value = -1;\n    });\n  };\n  const enableTrack = (track, disableTracks = true) => {\n    usingElRef(target, (el) => {\n      const id = typeof track === \"number\" ? track : track.id;\n      if (disableTracks)\n        disableTrack();\n      el.textTracks[id].mode = \"showing\";\n      selectedTrack.value = id;\n    });\n  };\n  const togglePictureInPicture = () => {\n    return new Promise((resolve, reject) => {\n      usingElRef(target, async (el) => {\n        if (supportsPictureInPicture) {\n          if (!isPictureInPicture.value) {\n            el.requestPictureInPicture().then(resolve).catch(reject);\n          } else {\n            document.exitPictureInPicture().then(resolve).catch(reject);\n          }\n        }\n      });\n    });\n  };\n  watchEffect(() => {\n    if (!document)\n      return;\n    const el = toValue(target);\n    if (!el)\n      return;\n    const src = toValue(options.src);\n    let sources = [];\n    if (!src)\n      return;\n    if (typeof src === \"string\")\n      sources = [{ src }];\n    else if (Array.isArray(src))\n      sources = src;\n    else if (isObject(src))\n      sources = [src];\n    el.querySelectorAll(\"source\").forEach((e) => {\n      e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n      e.remove();\n    });\n    sources.forEach(({ src: src2, type }) => {\n      const source = document.createElement(\"source\");\n      source.setAttribute(\"src\", src2);\n      source.setAttribute(\"type\", type || \"\");\n      source.addEventListener(\"error\", sourceErrorEvent.trigger);\n      el.appendChild(source);\n    });\n    el.load();\n  });\n  tryOnScopeDispose(() => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n  });\n  watch([target, volume], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.volume = volume.value;\n  });\n  watch([target, muted], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.muted = muted.value;\n  });\n  watch([target, rate], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.playbackRate = rate.value;\n  });\n  watchEffect(() => {\n    if (!document)\n      return;\n    const textTracks = toValue(options.tracks);\n    const el = toValue(target);\n    if (!textTracks || !textTracks.length || !el)\n      return;\n    el.querySelectorAll(\"track\").forEach((e) => e.remove());\n    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n      const track = document.createElement(\"track\");\n      track.default = isDefault || false;\n      track.kind = kind;\n      track.label = label;\n      track.src = src;\n      track.srclang = srcLang;\n      if (track.default)\n        selectedTrack.value = i;\n      el.appendChild(track);\n    });\n  });\n  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    el.currentTime = time;\n  });\n  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    isPlaying ? el.play() : el.pause();\n  });\n  useEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime));\n  useEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration);\n  useEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered));\n  useEventListener(target, \"seeking\", () => seeking.value = true);\n  useEventListener(target, \"seeked\", () => seeking.value = false);\n  useEventListener(target, [\"waiting\", \"loadstart\"], () => {\n    waiting.value = true;\n    ignorePlayingUpdates(() => playing.value = false);\n  });\n  useEventListener(target, \"loadeddata\", () => waiting.value = false);\n  useEventListener(target, \"playing\", () => {\n    waiting.value = false;\n    ended.value = false;\n    ignorePlayingUpdates(() => playing.value = true);\n  });\n  useEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate);\n  useEventListener(target, \"stalled\", () => stalled.value = true);\n  useEventListener(target, \"ended\", () => ended.value = true);\n  useEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false));\n  useEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true));\n  useEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true);\n  useEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false);\n  useEventListener(target, \"volumechange\", () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    volume.value = el.volume;\n    muted.value = el.muted;\n  });\n  const listeners = [];\n  const stop = watch([target], () => {\n    const el = toValue(target);\n    if (!el)\n      return;\n    stop();\n    listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks));\n    listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks));\n  });\n  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n  return {\n    currentTime,\n    duration,\n    waiting,\n    seeking,\n    ended,\n    stalled,\n    buffered,\n    playing,\n    rate,\n    // Volume\n    volume,\n    muted,\n    // Tracks\n    tracks,\n    selectedTrack,\n    enableTrack,\n    disableTrack,\n    // Picture in Picture\n    supportsPictureInPicture,\n    togglePictureInPicture,\n    isPictureInPicture,\n    // Events\n    onSourceError: sourceErrorEvent.on\n  };\n}\n\nfunction getMapVue2Compat() {\n  const data = shallowReactive({});\n  return {\n    get: (key) => data[key],\n    set: (key, value) => set(data, key, value),\n    has: (key) => hasOwn(data, key),\n    delete: (key) => del(data, key),\n    clear: () => {\n      Object.keys(data).forEach((key) => {\n        del(data, key);\n      });\n    }\n  };\n}\nfunction useMemoize(resolver, options) {\n  const initCache = () => {\n    if (options == null ? void 0 : options.cache)\n      return shallowReactive(options.cache);\n    if (isVue2)\n      return getMapVue2Compat();\n    return shallowReactive(/* @__PURE__ */ new Map());\n  };\n  const cache = initCache();\n  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n  const _loadData = (key, ...args) => {\n    cache.set(key, resolver(...args));\n    return cache.get(key);\n  };\n  const loadData = (...args) => _loadData(generateKey(...args), ...args);\n  const deleteData = (...args) => {\n    cache.delete(generateKey(...args));\n  };\n  const clearData = () => {\n    cache.clear();\n  };\n  const memoized = (...args) => {\n    const key = generateKey(...args);\n    if (cache.has(key))\n      return cache.get(key);\n    return _loadData(key, ...args);\n  };\n  memoized.load = loadData;\n  memoized.delete = deleteData;\n  memoized.clear = clearData;\n  memoized.generateKey = generateKey;\n  memoized.cache = cache;\n  return memoized;\n}\n\nfunction useMemory(options = {}) {\n  const memory = ref();\n  const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n  if (isSupported.value) {\n    const { interval = 1e3 } = options;\n    useIntervalFn(() => {\n      memory.value = performance.memory;\n    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n  }\n  return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n  page: (event) => [event.pageX, event.pageY],\n  client: (event) => [event.clientX, event.clientY],\n  screen: (event) => [event.screenX, event.screenY],\n  movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n  const {\n    type = \"page\",\n    touch = true,\n    resetOnTouchEnds = false,\n    initialValue = { x: 0, y: 0 },\n    window = defaultWindow,\n    target = window,\n    scroll = true,\n    eventFilter\n  } = options;\n  let _prevMouseEvent = null;\n  const x = ref(initialValue.x);\n  const y = ref(initialValue.y);\n  const sourceType = ref(null);\n  const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n  const mouseHandler = (event) => {\n    const result = extractor(event);\n    _prevMouseEvent = event;\n    if (result) {\n      [x.value, y.value] = result;\n      sourceType.value = \"mouse\";\n    }\n  };\n  const touchHandler = (event) => {\n    if (event.touches.length > 0) {\n      const result = extractor(event.touches[0]);\n      if (result) {\n        [x.value, y.value] = result;\n        sourceType.value = \"touch\";\n      }\n    }\n  };\n  const scrollHandler = () => {\n    if (!_prevMouseEvent || !window)\n      return;\n    const pos = extractor(_prevMouseEvent);\n    if (_prevMouseEvent instanceof MouseEvent && pos) {\n      x.value = pos[0] + window.scrollX;\n      y.value = pos[1] + window.scrollY;\n    }\n  };\n  const reset = () => {\n    x.value = initialValue.x;\n    y.value = initialValue.y;\n  };\n  const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n  const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n  const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n    if (touch && type !== \"movement\") {\n      useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n      if (resetOnTouchEnds)\n        useEventListener(target, \"touchend\", reset, listenerOptions);\n    }\n    if (scroll && type === \"page\")\n      useEventListener(window, \"scroll\", scrollHandlerWrapper, { passive: true });\n  }\n  return {\n    x,\n    y,\n    sourceType\n  };\n}\n\nfunction useMouseInElement(target, options = {}) {\n  const {\n    handleOutside = true,\n    window = defaultWindow\n  } = options;\n  const type = options.type || \"page\";\n  const { x, y, sourceType } = useMouse(options);\n  const targetRef = ref(target != null ? target : window == null ? void 0 : window.document.body);\n  const elementX = ref(0);\n  const elementY = ref(0);\n  const elementPositionX = ref(0);\n  const elementPositionY = ref(0);\n  const elementHeight = ref(0);\n  const elementWidth = ref(0);\n  const isOutside = ref(true);\n  let stop = () => {\n  };\n  if (window) {\n    stop = watch(\n      [targetRef, x, y],\n      () => {\n        const el = unrefElement(targetRef);\n        if (!el)\n          return;\n        const {\n          left,\n          top,\n          width,\n          height\n        } = el.getBoundingClientRect();\n        elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n        elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n        elementHeight.value = height;\n        elementWidth.value = width;\n        const elX = x.value - elementPositionX.value;\n        const elY = y.value - elementPositionY.value;\n        isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n        if (handleOutside || !isOutside.value) {\n          elementX.value = elX;\n          elementY.value = elY;\n        }\n      },\n      { immediate: true }\n    );\n    useEventListener(document, \"mouseleave\", () => {\n      isOutside.value = true;\n    });\n  }\n  return {\n    x,\n    y,\n    sourceType,\n    elementX,\n    elementY,\n    elementPositionX,\n    elementPositionY,\n    elementHeight,\n    elementWidth,\n    isOutside,\n    stop\n  };\n}\n\nfunction useMousePressed(options = {}) {\n  const {\n    touch = true,\n    drag = true,\n    capture = false,\n    initialValue = false,\n    window = defaultWindow\n  } = options;\n  const pressed = ref(initialValue);\n  const sourceType = ref(null);\n  if (!window) {\n    return {\n      pressed,\n      sourceType\n    };\n  }\n  const onPressed = (srcType) => () => {\n    pressed.value = true;\n    sourceType.value = srcType;\n  };\n  const onReleased = () => {\n    pressed.value = false;\n    sourceType.value = null;\n  };\n  const target = computed(() => unrefElement(options.target) || window);\n  useEventListener(target, \"mousedown\", onPressed(\"mouse\"), { passive: true, capture });\n  useEventListener(window, \"mouseleave\", onReleased, { passive: true, capture });\n  useEventListener(window, \"mouseup\", onReleased, { passive: true, capture });\n  if (drag) {\n    useEventListener(target, \"dragstart\", onPressed(\"mouse\"), { passive: true, capture });\n    useEventListener(window, \"drop\", onReleased, { passive: true, capture });\n    useEventListener(window, \"dragend\", onReleased, { passive: true, capture });\n  }\n  if (touch) {\n    useEventListener(target, \"touchstart\", onPressed(\"touch\"), { passive: true, capture });\n    useEventListener(window, \"touchend\", onReleased, { passive: true, capture });\n    useEventListener(window, \"touchcancel\", onReleased, { passive: true, capture });\n  }\n  return {\n    pressed,\n    sourceType\n  };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"language\" in navigator);\n  const language = ref(navigator == null ? void 0 : navigator.language);\n  useEventListener(window, \"languagechange\", () => {\n    if (navigator)\n      language.value = navigator.language;\n  });\n  return {\n    isSupported,\n    language\n  };\n}\n\nfunction useNetwork(options = {}) {\n  const { window = defaultWindow } = options;\n  const navigator = window == null ? void 0 : window.navigator;\n  const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n  const isOnline = ref(true);\n  const saveData = ref(false);\n  const offlineAt = ref(void 0);\n  const onlineAt = ref(void 0);\n  const downlink = ref(void 0);\n  const downlinkMax = ref(void 0);\n  const rtt = ref(void 0);\n  const effectiveType = ref(void 0);\n  const type = ref(\"unknown\");\n  const connection = isSupported.value && navigator.connection;\n  function updateNetworkInformation() {\n    if (!navigator)\n      return;\n    isOnline.value = navigator.onLine;\n    offlineAt.value = isOnline.value ? void 0 : Date.now();\n    onlineAt.value = isOnline.value ? Date.now() : void 0;\n    if (connection) {\n      downlink.value = connection.downlink;\n      downlinkMax.value = connection.downlinkMax;\n      effectiveType.value = connection.effectiveType;\n      rtt.value = connection.rtt;\n      saveData.value = connection.saveData;\n      type.value = connection.type;\n    }\n  }\n  if (window) {\n    useEventListener(window, \"offline\", () => {\n      isOnline.value = false;\n      offlineAt.value = Date.now();\n    });\n    useEventListener(window, \"online\", () => {\n      isOnline.value = true;\n      onlineAt.value = Date.now();\n    });\n  }\n  if (connection)\n    useEventListener(connection, \"change\", updateNetworkInformation, false);\n  updateNetworkInformation();\n  return {\n    isSupported,\n    isOnline,\n    saveData,\n    offlineAt,\n    onlineAt,\n    downlink,\n    downlinkMax,\n    effectiveType,\n    rtt,\n    type\n  };\n}\n\nfunction useNow(options = {}) {\n  const {\n    controls: exposeControls = false,\n    interval = \"requestAnimationFrame\"\n  } = options;\n  const now = ref(/* @__PURE__ */ new Date());\n  const update = () => now.value = /* @__PURE__ */ new Date();\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n  if (exposeControls) {\n    return {\n      now,\n      ...controls\n    };\n  } else {\n    return now;\n  }\n}\n\nfunction useObjectUrl(object) {\n  const url = ref();\n  const release = () => {\n    if (url.value)\n      URL.revokeObjectURL(url.value);\n    url.value = void 0;\n  };\n  watch(\n    () => toValue(object),\n    (newObject) => {\n      release();\n      if (newObject)\n        url.value = URL.createObjectURL(newObject);\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(release);\n  return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n  if (typeof value === \"function\" || isReadonly(value))\n    return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n  const _value = ref(value);\n  return computed({\n    get() {\n      return _value.value = clamp(_value.value, toValue(min), toValue(max));\n    },\n    set(value2) {\n      _value.value = clamp(value2, toValue(min), toValue(max));\n    }\n  });\n}\n\nfunction useOffsetPagination(options) {\n  const {\n    total = Number.POSITIVE_INFINITY,\n    pageSize = 10,\n    page = 1,\n    onPageChange = noop,\n    onPageSizeChange = noop,\n    onPageCountChange = noop\n  } = options;\n  const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n  const pageCount = computed(() => Math.max(\n    1,\n    Math.ceil(toValue(total) / toValue(currentPageSize))\n  ));\n  const currentPage = useClamp(page, 1, pageCount);\n  const isFirstPage = computed(() => currentPage.value === 1);\n  const isLastPage = computed(() => currentPage.value === pageCount.value);\n  if (isRef(page)) {\n    syncRef(page, currentPage, {\n      direction: isReadonly(page) ? \"ltr\" : \"both\"\n    });\n  }\n  if (isRef(pageSize)) {\n    syncRef(pageSize, currentPageSize, {\n      direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n    });\n  }\n  function prev() {\n    currentPage.value--;\n  }\n  function next() {\n    currentPage.value++;\n  }\n  const returnValue = {\n    currentPage,\n    currentPageSize,\n    pageCount,\n    isFirstPage,\n    isLastPage,\n    prev,\n    next\n  };\n  watch(currentPage, () => {\n    onPageChange(reactive(returnValue));\n  });\n  watch(currentPageSize, () => {\n    onPageSizeChange(reactive(returnValue));\n  });\n  watch(pageCount, () => {\n    onPageCountChange(reactive(returnValue));\n  });\n  return returnValue;\n}\n\nfunction useOnline(options = {}) {\n  const { isOnline } = useNetwork(options);\n  return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n  const { window = defaultWindow } = options;\n  const isLeft = ref(false);\n  const handler = (event) => {\n    if (!window)\n      return;\n    event = event || window.event;\n    const from = event.relatedTarget || event.toElement;\n    isLeft.value = !from;\n  };\n  if (window) {\n    useEventListener(window, \"mouseout\", handler, { passive: true });\n    useEventListener(window.document, \"mouseleave\", handler, { passive: true });\n    useEventListener(window.document, \"mouseenter\", handler, { passive: true });\n  }\n  return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n  const screenOrientation = isSupported.value ? window.screen.orientation : {};\n  const orientation = ref(screenOrientation.type);\n  const angle = ref(screenOrientation.angle || 0);\n  if (isSupported.value) {\n    useEventListener(window, \"orientationchange\", () => {\n      orientation.value = screenOrientation.type;\n      angle.value = screenOrientation.angle;\n    });\n  }\n  const lockOrientation = (type) => {\n    if (isSupported.value && typeof screenOrientation.lock === \"function\")\n      return screenOrientation.lock(type);\n    return Promise.reject(new Error(\"Not supported\"));\n  };\n  const unlockOrientation = () => {\n    if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n      screenOrientation.unlock();\n  };\n  return {\n    isSupported,\n    orientation,\n    angle,\n    lockOrientation,\n    unlockOrientation\n  };\n}\n\nfunction useParallax(target, options = {}) {\n  const {\n    deviceOrientationTiltAdjust = (i) => i,\n    deviceOrientationRollAdjust = (i) => i,\n    mouseTiltAdjust = (i) => i,\n    mouseRollAdjust = (i) => i,\n    window = defaultWindow\n  } = options;\n  const orientation = reactive(useDeviceOrientation({ window }));\n  const screenOrientation = reactive(useScreenOrientation({ window }));\n  const {\n    elementX: x,\n    elementY: y,\n    elementWidth: width,\n    elementHeight: height\n  } = useMouseInElement(target, { handleOutside: false, window });\n  const source = computed(() => {\n    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))\n      return \"deviceOrientation\";\n    return \"mouse\";\n  });\n  const roll = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        case \"portrait-primary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-secondary\":\n          value = orientation.beta / 90;\n          break;\n        default:\n          value = -orientation.beta / 90;\n      }\n      return deviceOrientationRollAdjust(value);\n    } else {\n      const value = -(y.value - height.value / 2) / height.value;\n      return mouseRollAdjust(value);\n    }\n  });\n  const tilt = computed(() => {\n    if (source.value === \"deviceOrientation\") {\n      let value;\n      switch (screenOrientation.orientation) {\n        case \"landscape-primary\":\n          value = orientation.beta / 90;\n          break;\n        case \"landscape-secondary\":\n          value = -orientation.beta / 90;\n          break;\n        case \"portrait-primary\":\n          value = orientation.gamma / 90;\n          break;\n        case \"portrait-secondary\":\n          value = -orientation.gamma / 90;\n          break;\n        default:\n          value = orientation.gamma / 90;\n      }\n      return deviceOrientationTiltAdjust(value);\n    } else {\n      const value = (x.value - width.value / 2) / width.value;\n      return mouseTiltAdjust(value);\n    }\n  });\n  return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n  const parentElement = shallowRef();\n  const update = () => {\n    const el = unrefElement(element);\n    if (el)\n      parentElement.value = el.parentElement;\n  };\n  tryOnMounted(update);\n  watch(() => toValue(element), update);\n  return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n  const {\n    window = defaultWindow,\n    immediate = true,\n    ...performanceOptions\n  } = options;\n  const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n  let observer;\n  const stop = () => {\n    observer == null ? void 0 : observer.disconnect();\n  };\n  const start = () => {\n    if (isSupported.value) {\n      stop();\n      observer = new PerformanceObserver(callback);\n      observer.observe(performanceOptions);\n    }\n  };\n  tryOnScopeDispose(stop);\n  if (immediate)\n    start();\n  return {\n    isSupported,\n    start,\n    stop\n  };\n}\n\nconst defaultState = {\n  x: 0,\n  y: 0,\n  pointerId: 0,\n  pressure: 0,\n  tiltX: 0,\n  tiltY: 0,\n  width: 0,\n  height: 0,\n  twist: 0,\n  pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n  const {\n    target = defaultWindow\n  } = options;\n  const isInside = ref(false);\n  const state = ref(options.initialValue || {});\n  Object.assign(state.value, defaultState, state.value);\n  const handler = (event) => {\n    isInside.value = true;\n    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n      return;\n    state.value = objectPick(event, keys, false);\n  };\n  if (target) {\n    const listenerOptions = { passive: true };\n    useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n    useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n  }\n  return {\n    ...toRefs(state),\n    isInside\n  };\n}\n\nfunction usePointerLock(target, options = {}) {\n  const { document = defaultDocument } = options;\n  const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n  const element = ref();\n  const triggerElement = ref();\n  let targetElement;\n  if (isSupported.value) {\n    useEventListener(document, \"pointerlockchange\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        element.value = document.pointerLockElement;\n        if (!element.value)\n          targetElement = triggerElement.value = null;\n      }\n    });\n    useEventListener(document, \"pointerlockerror\", () => {\n      var _a;\n      const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n      if (targetElement && currentElement === targetElement) {\n        const action = document.pointerLockElement ? \"release\" : \"acquire\";\n        throw new Error(`Failed to ${action} pointer lock.`);\n      }\n    });\n  }\n  async function lock(e) {\n    var _a;\n    if (!isSupported.value)\n      throw new Error(\"Pointer Lock API is not supported by your browser.\");\n    triggerElement.value = e instanceof Event ? e.currentTarget : null;\n    targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n    if (!targetElement)\n      throw new Error(\"Target element undefined.\");\n    targetElement.requestPointerLock();\n    return await until(element).toBe(targetElement);\n  }\n  async function unlock() {\n    if (!element.value)\n      return false;\n    document.exitPointerLock();\n    await until(element).toBeNull();\n    return true;\n  }\n  return {\n    isSupported,\n    element,\n    triggerElement,\n    lock,\n    unlock\n  };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n  const targetRef = toRef(target);\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    disableTextSelect = false\n  } = options;\n  const posStart = reactive({ x: 0, y: 0 });\n  const updatePosStart = (x, y) => {\n    posStart.x = x;\n    posStart.y = y;\n  };\n  const posEnd = reactive({ x: 0, y: 0 });\n  const updatePosEnd = (x, y) => {\n    posEnd.x = x;\n    posEnd.y = y;\n  };\n  const distanceX = computed(() => posStart.x - posEnd.x);\n  const distanceY = computed(() => posStart.y - posEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const isPointerDown = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(distanceX.value) > abs(distanceY.value)) {\n      return distanceX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return distanceY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const eventIsAllowed = (e) => {\n    var _a, _b, _c;\n    const isReleasingButton = e.buttons === 0;\n    const isPrimaryButton = e.buttons === 1;\n    return (_c = (_b = (_a = options.pointerTypes) == null ? void 0 : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n  };\n  const stops = [\n    useEventListener(target, \"pointerdown\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      isPointerDown.value = true;\n      const eventTarget = e.target;\n      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);\n      const { clientX: x, clientY: y } = e;\n      updatePosStart(x, y);\n      updatePosEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }),\n    useEventListener(target, \"pointermove\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (!isPointerDown.value)\n        return;\n      const { clientX: x, clientY: y } = e;\n      updatePosEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }),\n    useEventListener(target, \"pointerup\", (e) => {\n      if (!eventIsAllowed(e))\n        return;\n      if (isSwiping.value)\n        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n      isPointerDown.value = false;\n      isSwiping.value = false;\n    })\n  ];\n  tryOnMounted(() => {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    (_b = (_a = targetRef.value) == null ? void 0 : _a.style) == null ? void 0 : _b.setProperty(\"touch-action\", \"none\");\n    if (disableTextSelect) {\n      (_d = (_c = targetRef.value) == null ? void 0 : _c.style) == null ? void 0 : _d.setProperty(\"-webkit-user-select\", \"none\");\n      (_f = (_e = targetRef.value) == null ? void 0 : _e.style) == null ? void 0 : _f.setProperty(\"-ms-user-select\", \"none\");\n      (_h = (_g = targetRef.value) == null ? void 0 : _g.style) == null ? void 0 : _h.setProperty(\"user-select\", \"none\");\n    }\n  });\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isSwiping: readonly(isSwiping),\n    direction: readonly(direction),\n    posStart: readonly(posStart),\n    posEnd: readonly(posEnd),\n    distanceX,\n    distanceY,\n    stop\n  };\n}\n\nfunction usePreferredColorScheme(options) {\n  const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n  const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n  return computed(() => {\n    if (isDark.value)\n      return \"dark\";\n    if (isLight.value)\n      return \"light\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredContrast(options) {\n  const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n  const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n  const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n  return computed(() => {\n    if (isMore.value)\n      return \"more\";\n    if (isLess.value)\n      return \"less\";\n    if (isCustom.value)\n      return \"custom\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePreferredLanguages(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref([\"en\"]);\n  const navigator = window.navigator;\n  const value = ref(navigator.languages);\n  useEventListener(window, \"languagechange\", () => {\n    value.value = navigator.languages;\n  });\n  return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n  const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n  return computed(() => {\n    if (isReduced.value)\n      return \"reduce\";\n    return \"no-preference\";\n  });\n}\n\nfunction usePrevious(value, initialValue) {\n  const previous = shallowRef(initialValue);\n  watch(\n    toRef(value),\n    (_, oldValue) => {\n      previous.value = oldValue;\n    },\n    { flush: \"sync\" }\n  );\n  return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n  const {\n    immediate = true,\n    manual = false,\n    type = \"text/javascript\",\n    async = true,\n    crossOrigin,\n    referrerPolicy,\n    noModule,\n    defer,\n    document = defaultDocument,\n    attrs = {}\n  } = options;\n  const scriptTag = ref(null);\n  let _promise = null;\n  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n    const resolveWithElement = (el2) => {\n      scriptTag.value = el2;\n      resolve(el2);\n      return el2;\n    };\n    if (!document) {\n      resolve(false);\n      return;\n    }\n    let shouldAppend = false;\n    let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (!el) {\n      el = document.createElement(\"script\");\n      el.type = type;\n      el.async = async;\n      el.src = toValue(src);\n      if (defer)\n        el.defer = defer;\n      if (crossOrigin)\n        el.crossOrigin = crossOrigin;\n      if (noModule)\n        el.noModule = noModule;\n      if (referrerPolicy)\n        el.referrerPolicy = referrerPolicy;\n      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));\n      shouldAppend = true;\n    } else if (el.hasAttribute(\"data-loaded\")) {\n      resolveWithElement(el);\n    }\n    el.addEventListener(\"error\", (event) => reject(event));\n    el.addEventListener(\"abort\", (event) => reject(event));\n    el.addEventListener(\"load\", () => {\n      el.setAttribute(\"data-loaded\", \"true\");\n      onLoaded(el);\n      resolveWithElement(el);\n    });\n    if (shouldAppend)\n      el = document.head.appendChild(el);\n    if (!waitForScriptLoad)\n      resolveWithElement(el);\n  });\n  const load = (waitForScriptLoad = true) => {\n    if (!_promise)\n      _promise = loadScript(waitForScriptLoad);\n    return _promise;\n  };\n  const unload = () => {\n    if (!document)\n      return;\n    _promise = null;\n    if (scriptTag.value)\n      scriptTag.value = null;\n    const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n    if (el)\n      document.head.removeChild(el);\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnUnmounted(unload);\n  return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    var _a;\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    el.style.overflow = (_a = elInitialOverflow.get(el)) != null ? _a : \"\";\n    elInitialOverflow.delete(el);\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n  const { window = defaultWindow } = options;\n  return useStorage(key, initialValue, window == null ? void 0 : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n  const { navigator = defaultNavigator } = options;\n  const _navigator = navigator;\n  const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n  const share = async (overrideOptions = {}) => {\n    if (isSupported.value) {\n      const data = {\n        ...toValue(shareOptions),\n        ...toValue(overrideOptions)\n      };\n      let granted = true;\n      if (data.files && _navigator.canShare)\n        granted = _navigator.canShare({ files: data.files });\n      if (granted)\n        return _navigator.share(data);\n    }\n  };\n  return {\n    isSupported,\n    share\n  };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n  var _a, _b, _c, _d;\n  const [source] = args;\n  let compareFn = defaultCompare;\n  let options = {};\n  if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      options = args[1];\n      compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n    } else {\n      compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n    }\n  } else if (args.length > 2) {\n    compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n    options = (_d = args[2]) != null ? _d : {};\n  }\n  const {\n    dirty = false,\n    sortFn = defaultSortFn\n  } = options;\n  if (!dirty)\n    return computed(() => sortFn([...toValue(source)], compareFn));\n  watchEffect(() => {\n    const result = sortFn(toValue(source), compareFn);\n    if (isRef(source))\n      source.value = result;\n    else\n      source.splice(0, source.length, ...result);\n  });\n  return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n  const {\n    interimResults = true,\n    continuous = true,\n    window = defaultWindow\n  } = options;\n  const lang = toRef(options.lang || \"en-US\");\n  const isListening = ref(false);\n  const isFinal = ref(false);\n  const result = ref(\"\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isListening.value) => {\n    isListening.value = value;\n  };\n  const start = () => {\n    isListening.value = true;\n  };\n  const stop = () => {\n    isListening.value = false;\n  };\n  const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n  const isSupported = useSupported(() => SpeechRecognition);\n  let recognition;\n  if (isSupported.value) {\n    recognition = new SpeechRecognition();\n    recognition.continuous = continuous;\n    recognition.interimResults = interimResults;\n    recognition.lang = toValue(lang);\n    recognition.onstart = () => {\n      isFinal.value = false;\n    };\n    watch(lang, (lang2) => {\n      if (recognition && !isListening.value)\n        recognition.lang = lang2;\n    });\n    recognition.onresult = (event) => {\n      const transcript = Array.from(event.results).map((result2) => {\n        isFinal.value = result2.isFinal;\n        return result2[0];\n      }).map((result2) => result2.transcript).join(\"\");\n      result.value = transcript;\n      error.value = void 0;\n    };\n    recognition.onerror = (event) => {\n      error.value = event;\n    };\n    recognition.onend = () => {\n      isListening.value = false;\n      recognition.lang = toValue(lang);\n    };\n    watch(isListening, () => {\n      if (isListening.value)\n        recognition.start();\n      else\n        recognition.stop();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isListening.value = false;\n  });\n  return {\n    isSupported,\n    isListening,\n    isFinal,\n    recognition,\n    result,\n    error,\n    toggle,\n    start,\n    stop\n  };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n  const {\n    pitch = 1,\n    rate = 1,\n    volume = 1,\n    window = defaultWindow\n  } = options;\n  const synth = window && window.speechSynthesis;\n  const isSupported = useSupported(() => synth);\n  const isPlaying = ref(false);\n  const status = ref(\"init\");\n  const spokenText = toRef(text || \"\");\n  const lang = toRef(options.lang || \"en-US\");\n  const error = shallowRef(void 0);\n  const toggle = (value = !isPlaying.value) => {\n    isPlaying.value = value;\n  };\n  const bindEventsForUtterance = (utterance2) => {\n    utterance2.lang = toValue(lang);\n    utterance2.voice = toValue(options.voice) || null;\n    utterance2.pitch = toValue(pitch);\n    utterance2.rate = toValue(rate);\n    utterance2.volume = volume;\n    utterance2.onstart = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onpause = () => {\n      isPlaying.value = false;\n      status.value = \"pause\";\n    };\n    utterance2.onresume = () => {\n      isPlaying.value = true;\n      status.value = \"play\";\n    };\n    utterance2.onend = () => {\n      isPlaying.value = false;\n      status.value = \"end\";\n    };\n    utterance2.onerror = (event) => {\n      error.value = event;\n    };\n  };\n  const utterance = computed(() => {\n    isPlaying.value = false;\n    status.value = \"init\";\n    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n    bindEventsForUtterance(newUtterance);\n    return newUtterance;\n  });\n  const speak = () => {\n    synth.cancel();\n    utterance && synth.speak(utterance.value);\n  };\n  const stop = () => {\n    synth.cancel();\n    isPlaying.value = false;\n  };\n  if (isSupported.value) {\n    bindEventsForUtterance(utterance.value);\n    watch(lang, (lang2) => {\n      if (utterance.value && !isPlaying.value)\n        utterance.value.lang = lang2;\n    });\n    if (options.voice) {\n      watch(options.voice, () => {\n        synth.cancel();\n      });\n    }\n    watch(isPlaying, () => {\n      if (isPlaying.value)\n        synth.resume();\n      else\n        synth.pause();\n    });\n  }\n  tryOnScopeDispose(() => {\n    isPlaying.value = false;\n  });\n  return {\n    isSupported,\n    isPlaying,\n    status,\n    utterance,\n    error,\n    stop,\n    toggle,\n    speak\n  };\n}\n\nfunction useStepper(steps, initialStep) {\n  const stepsRef = ref(steps);\n  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n  const current = computed(() => at(index.value));\n  const isFirst = computed(() => index.value === 0);\n  const isLast = computed(() => index.value === stepNames.value.length - 1);\n  const next = computed(() => stepNames.value[index.value + 1]);\n  const previous = computed(() => stepNames.value[index.value - 1]);\n  function at(index2) {\n    if (Array.isArray(stepsRef.value))\n      return stepsRef.value[index2];\n    return stepsRef.value[stepNames.value[index2]];\n  }\n  function get(step) {\n    if (!stepNames.value.includes(step))\n      return;\n    return at(stepNames.value.indexOf(step));\n  }\n  function goTo(step) {\n    if (stepNames.value.includes(step))\n      index.value = stepNames.value.indexOf(step);\n  }\n  function goToNext() {\n    if (isLast.value)\n      return;\n    index.value++;\n  }\n  function goToPrevious() {\n    if (isFirst.value)\n      return;\n    index.value--;\n  }\n  function goBackTo(step) {\n    if (isAfter(step))\n      goTo(step);\n  }\n  function isNext(step) {\n    return stepNames.value.indexOf(step) === index.value + 1;\n  }\n  function isPrevious(step) {\n    return stepNames.value.indexOf(step) === index.value - 1;\n  }\n  function isCurrent(step) {\n    return stepNames.value.indexOf(step) === index.value;\n  }\n  function isBefore(step) {\n    return index.value < stepNames.value.indexOf(step);\n  }\n  function isAfter(step) {\n    return index.value > stepNames.value.indexOf(step);\n  }\n  return {\n    steps: stepsRef,\n    stepNames,\n    index,\n    current,\n    next,\n    previous,\n    isFirst,\n    isLast,\n    at,\n    get,\n    goTo,\n    goToNext,\n    goToPrevious,\n    goBackTo,\n    isNext,\n    isPrevious,\n    isCurrent,\n    isBefore,\n    isAfter\n  };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const rawInit = toValue(initialValue);\n  const type = guessSerializerType(rawInit);\n  const data = (shallow ? shallowRef : ref)(initialValue);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  async function read(event) {\n    if (!storage || event && event.key !== key)\n      return;\n    try {\n      const rawValue = event ? event.newValue : await storage.getItem(key);\n      if (rawValue == null) {\n        data.value = rawInit;\n        if (writeDefaults && rawInit !== null)\n          await storage.setItem(key, await serializer.write(rawInit));\n      } else if (mergeDefaults) {\n        const value = await serializer.read(rawValue);\n        if (typeof mergeDefaults === \"function\")\n          data.value = mergeDefaults(value, rawInit);\n        else if (type === \"object\" && !Array.isArray(value))\n          data.value = { ...rawInit, ...value };\n        else\n          data.value = value;\n      } else {\n        data.value = await serializer.read(rawValue);\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  read();\n  if (window && listenToStorageChanges)\n    useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)));\n  if (storage) {\n    watchWithFilter(\n      data,\n      async () => {\n        try {\n          if (data.value == null)\n            await storage.removeItem(key);\n          else\n            await storage.setItem(key, await serializer.write(data.value));\n        } catch (e) {\n          onError(e);\n        }\n      },\n      {\n        flush,\n        deep,\n        eventFilter\n      }\n    );\n  }\n  return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n  const isLoaded = ref(false);\n  const {\n    document = defaultDocument,\n    immediate = true,\n    manual = false,\n    id = `vueuse_styletag_${++_id}`\n  } = options;\n  const cssRef = ref(css);\n  let stop = () => {\n  };\n  const load = () => {\n    if (!document)\n      return;\n    const el = document.getElementById(id) || document.createElement(\"style\");\n    if (!el.isConnected) {\n      el.id = id;\n      if (options.media)\n        el.media = options.media;\n      document.head.appendChild(el);\n    }\n    if (isLoaded.value)\n      return;\n    stop = watch(\n      cssRef,\n      (value) => {\n        el.textContent = value;\n      },\n      { immediate: true }\n    );\n    isLoaded.value = true;\n  };\n  const unload = () => {\n    if (!document || !isLoaded.value)\n      return;\n    stop();\n    document.head.removeChild(document.getElementById(id));\n    isLoaded.value = false;\n  };\n  if (immediate && !manual)\n    tryOnMounted(load);\n  if (!manual)\n    tryOnScopeDispose(unload);\n  return {\n    id,\n    css: cssRef,\n    unload,\n    load,\n    isLoaded: readonly(isLoaded)\n  };\n}\n\nfunction useSwipe(target, options = {}) {\n  const {\n    threshold = 50,\n    onSwipe,\n    onSwipeEnd,\n    onSwipeStart,\n    passive = true,\n    window = defaultWindow\n  } = options;\n  const coordsStart = reactive({ x: 0, y: 0 });\n  const coordsEnd = reactive({ x: 0, y: 0 });\n  const diffX = computed(() => coordsStart.x - coordsEnd.x);\n  const diffY = computed(() => coordsStart.y - coordsEnd.y);\n  const { max, abs } = Math;\n  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n  const isSwiping = ref(false);\n  const direction = computed(() => {\n    if (!isThresholdExceeded.value)\n      return \"none\";\n    if (abs(diffX.value) > abs(diffY.value)) {\n      return diffX.value > 0 ? \"left\" : \"right\";\n    } else {\n      return diffY.value > 0 ? \"up\" : \"down\";\n    }\n  });\n  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n  const updateCoordsStart = (x, y) => {\n    coordsStart.x = x;\n    coordsStart.y = y;\n  };\n  const updateCoordsEnd = (x, y) => {\n    coordsEnd.x = x;\n    coordsEnd.y = y;\n  };\n  let listenerOptions;\n  const isPassiveEventSupported = checkPassiveEventSupport(window == null ? void 0 : window.document);\n  if (!passive)\n    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };\n  else\n    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };\n  const onTouchEnd = (e) => {\n    if (isSwiping.value)\n      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);\n    isSwiping.value = false;\n  };\n  const stops = [\n    useEventListener(target, \"touchstart\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      if (listenerOptions.capture && !listenerOptions.passive)\n        e.preventDefault();\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsStart(x, y);\n      updateCoordsEnd(x, y);\n      onSwipeStart == null ? void 0 : onSwipeStart(e);\n    }, listenerOptions),\n    useEventListener(target, \"touchmove\", (e) => {\n      if (e.touches.length !== 1)\n        return;\n      const [x, y] = getTouchEventCoords(e);\n      updateCoordsEnd(x, y);\n      if (!isSwiping.value && isThresholdExceeded.value)\n        isSwiping.value = true;\n      if (isSwiping.value)\n        onSwipe == null ? void 0 : onSwipe(e);\n    }, listenerOptions),\n    useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n  ];\n  const stop = () => stops.forEach((s) => s());\n  return {\n    isPassiveEventSupported,\n    isSwiping,\n    direction,\n    coordsStart,\n    coordsEnd,\n    lengthX: diffX,\n    lengthY: diffY,\n    stop\n  };\n}\nfunction checkPassiveEventSupport(document) {\n  if (!document)\n    return false;\n  let supportsPassive = false;\n  const optionsBlock = {\n    get passive() {\n      supportsPassive = true;\n      return false;\n    }\n  };\n  document.addEventListener(\"x\", noop, optionsBlock);\n  document.removeEventListener(\"x\", noop);\n  return supportsPassive;\n}\n\nfunction useTemplateRefsList() {\n  const refs = ref([]);\n  refs.value.set = (el) => {\n    if (el)\n      refs.value.push(el);\n  };\n  onBeforeUpdate(() => {\n    refs.value.length = 0;\n  });\n  return refs;\n}\n\nfunction useTextDirection(options = {}) {\n  const {\n    document = defaultDocument,\n    selector = \"html\",\n    observe = false,\n    initialValue = \"ltr\"\n  } = options;\n  function getValue() {\n    var _a, _b;\n    return (_b = (_a = document == null ? void 0 : document.querySelector(selector)) == null ? void 0 : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n  }\n  const dir = ref(getValue());\n  tryOnMounted(() => dir.value = getValue());\n  if (observe && document) {\n    useMutationObserver(\n      document.querySelector(selector),\n      () => dir.value = getValue(),\n      { attributes: true }\n    );\n  }\n  return computed({\n    get() {\n      return dir.value;\n    },\n    set(v) {\n      var _a, _b;\n      dir.value = v;\n      if (!document)\n        return;\n      if (dir.value)\n        (_a = document.querySelector(selector)) == null ? void 0 : _a.setAttribute(\"dir\", dir.value);\n      else\n        (_b = document.querySelector(selector)) == null ? void 0 : _b.removeAttribute(\"dir\");\n    }\n  });\n}\n\nfunction getRangesFromSelection(selection) {\n  var _a;\n  const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n  return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n  const {\n    window = defaultWindow\n  } = options;\n  const selection = ref(null);\n  const text = computed(() => {\n    var _a, _b;\n    return (_b = (_a = selection.value) == null ? void 0 : _a.toString()) != null ? _b : \"\";\n  });\n  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n  function onSelectionChange() {\n    selection.value = null;\n    if (window)\n      selection.value = window.getSelection();\n  }\n  if (window)\n    useEventListener(window.document, \"selectionchange\", onSelectionChange);\n  return {\n    text,\n    rects,\n    ranges,\n    selection\n  };\n}\n\nfunction useTextareaAutosize(options) {\n  var _a;\n  const textarea = ref(options == null ? void 0 : options.element);\n  const input = ref(options == null ? void 0 : options.input);\n  const styleProp = (_a = options == null ? void 0 : options.styleProp) != null ? _a : \"height\";\n  const textareaScrollHeight = ref(1);\n  function triggerResize() {\n    var _a2, _b;\n    if (!textarea.value)\n      return;\n    let height = \"\";\n    textarea.value.style[styleProp] = \"1px\";\n    textareaScrollHeight.value = (_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight;\n    if (options == null ? void 0 : options.styleTarget)\n      toValue(options.styleTarget).style[styleProp] = `${textareaScrollHeight.value}px`;\n    else\n      height = `${textareaScrollHeight.value}px`;\n    textarea.value.style[styleProp] = height;\n    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);\n  }\n  watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n  useResizeObserver(textarea, () => triggerResize());\n  if (options == null ? void 0 : options.watch)\n    watch(options.watch, triggerResize, { immediate: true, deep: true });\n  return {\n    textarea,\n    input,\n    triggerResize\n  };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n  const { throttle = 200, trailing = true } = options;\n  const filter = throttleFilter(throttle, trailing);\n  const history = useRefHistory(source, { ...options, eventFilter: filter });\n  return {\n    ...history\n  };\n}\n\nconst DEFAULT_UNITS = [\n  { max: 6e4, value: 1e3, name: \"second\" },\n  { max: 276e4, value: 6e4, name: \"minute\" },\n  { max: 72e6, value: 36e5, name: \"hour\" },\n  { max: 5184e5, value: 864e5, name: \"day\" },\n  { max: 24192e5, value: 6048e5, name: \"week\" },\n  { max: 28512e6, value: 2592e6, name: \"month\" },\n  { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n  justNow: \"just now\",\n  past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n  future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n  month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n  year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n  day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n  week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n  hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n  minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n  second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n  invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n  return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n  const {\n    controls: exposeControls = false,\n    updateInterval = 3e4\n  } = options;\n  const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n  const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n  if (exposeControls) {\n    return {\n      timeAgo,\n      ...controls\n    };\n  } else {\n    return timeAgo;\n  }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n  var _a;\n  const {\n    max,\n    messages = DEFAULT_MESSAGES,\n    fullDateFormatter = DEFAULT_FORMATTER,\n    units = DEFAULT_UNITS,\n    showSecond = false,\n    rounding = \"round\"\n  } = options;\n  const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n  const diff = +now - +from;\n  const absDiff = Math.abs(diff);\n  function getValue(diff2, unit) {\n    return roundFn(Math.abs(diff2) / unit.value);\n  }\n  function format(diff2, unit) {\n    const val = getValue(diff2, unit);\n    const past = diff2 > 0;\n    const str = applyFormat(unit.name, val, past);\n    return applyFormat(past ? \"past\" : \"future\", str, past);\n  }\n  function applyFormat(name, val, isPast) {\n    const formatter = messages[name];\n    if (typeof formatter === \"function\")\n      return formatter(val, isPast);\n    return formatter.replace(\"{0}\", val.toString());\n  }\n  if (absDiff < 6e4 && !showSecond)\n    return messages.justNow;\n  if (typeof max === \"number\" && absDiff > max)\n    return fullDateFormatter(new Date(from));\n  if (typeof max === \"string\") {\n    const unitMax = (_a = units.find((i) => i.name === max)) == null ? void 0 : _a.max;\n    if (unitMax && absDiff > unitMax)\n      return fullDateFormatter(new Date(from));\n  }\n  for (const [idx, unit] of units.entries()) {\n    const val = getValue(diff, unit);\n    if (val <= 0 && units[idx - 1])\n      return format(diff, units[idx - 1]);\n    if (absDiff < unit.max)\n      return format(diff, unit);\n  }\n  return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, timeoutPollOptions) {\n  const { start } = useTimeoutFn(loop, interval, { immediate: false });\n  const isActive = ref(false);\n  async function loop() {\n    if (!isActive.value)\n      return;\n    await fn();\n    start();\n  }\n  function resume() {\n    if (!isActive.value) {\n      isActive.value = true;\n      loop();\n    }\n  }\n  function pause() {\n    isActive.value = false;\n  }\n  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)\n    resume();\n  tryOnScopeDispose(pause);\n  return {\n    isActive,\n    pause,\n    resume\n  };\n}\n\nfunction useTimestamp(options = {}) {\n  const {\n    controls: exposeControls = false,\n    offset = 0,\n    immediate = true,\n    interval = \"requestAnimationFrame\",\n    callback\n  } = options;\n  const ts = ref(timestamp() + offset);\n  const update = () => ts.value = timestamp() + offset;\n  const cb = callback ? () => {\n    update();\n    callback(ts.value);\n  } : update;\n  const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n  if (exposeControls) {\n    return {\n      timestamp: ts,\n      ...controls\n    };\n  } else {\n    return ts;\n  }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n  var _a, _b, _c;\n  const {\n    document = defaultDocument,\n    restoreOnUnmount = (t) => t\n  } = options;\n  const originalTitle = (_a = document == null ? void 0 : document.title) != null ? _a : \"\";\n  const title = toRef((_b = newTitle != null ? newTitle : document == null ? void 0 : document.title) != null ? _b : null);\n  const isReadonly = newTitle && typeof newTitle === \"function\";\n  function format(t) {\n    if (!(\"titleTemplate\" in options))\n      return t;\n    const template = options.titleTemplate || \"%s\";\n    return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n  }\n  watch(\n    title,\n    (t, o) => {\n      if (t !== o && document)\n        document.title = format(typeof t === \"string\" ? t : \"\");\n    },\n    { immediate: true }\n  );\n  if (options.observe && !options.titleTemplate && document && !isReadonly) {\n    useMutationObserver(\n      (_c = document.head) == null ? void 0 : _c.querySelector(\"title\"),\n      () => {\n        if (document && document.title !== title.value)\n          title.value = format(document.title);\n      },\n      { childList: true }\n    );\n  }\n  tryOnBeforeUnmount(() => {\n    if (restoreOnUnmount) {\n      const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n      if (restoredTitle != null && document)\n        document.title = restoredTitle;\n    }\n  });\n  return title;\n}\n\nconst _TransitionPresets = {\n  easeInSine: [0.12, 0, 0.39, 0],\n  easeOutSine: [0.61, 1, 0.88, 1],\n  easeInOutSine: [0.37, 0, 0.63, 1],\n  easeInQuad: [0.11, 0, 0.5, 0],\n  easeOutQuad: [0.5, 1, 0.89, 1],\n  easeInOutQuad: [0.45, 0, 0.55, 1],\n  easeInCubic: [0.32, 0, 0.67, 0],\n  easeOutCubic: [0.33, 1, 0.68, 1],\n  easeInOutCubic: [0.65, 0, 0.35, 1],\n  easeInQuart: [0.5, 0, 0.75, 0],\n  easeOutQuart: [0.25, 1, 0.5, 1],\n  easeInOutQuart: [0.76, 0, 0.24, 1],\n  easeInQuint: [0.64, 0, 0.78, 0],\n  easeOutQuint: [0.22, 1, 0.36, 1],\n  easeInOutQuint: [0.83, 0, 0.17, 1],\n  easeInExpo: [0.7, 0, 0.84, 0],\n  easeOutExpo: [0.16, 1, 0.3, 1],\n  easeInOutExpo: [0.87, 0, 0.13, 1],\n  easeInCirc: [0.55, 0, 1, 0.45],\n  easeOutCirc: [0, 0.55, 0.45, 1],\n  easeInOutCirc: [0.85, 0, 0.15, 1],\n  easeInBack: [0.36, 0, 0.66, -0.56],\n  easeOutBack: [0.34, 1.56, 0.64, 1],\n  easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n  const b = (a1, a2) => 3 * a2 - 6 * a1;\n  const c = (a1) => 3 * a1;\n  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n  const getTforX = (x) => {\n    let aGuessT = x;\n    for (let i = 0; i < 4; ++i) {\n      const currentSlope = getSlope(aGuessT, p0, p2);\n      if (currentSlope === 0)\n        return aGuessT;\n      const currentX = calcBezier(aGuessT, p0, p2) - x;\n      aGuessT -= currentX / currentSlope;\n    }\n    return aGuessT;\n  };\n  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n  return a + alpha * (b - a);\n}\nfunction toVec(t) {\n  return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n  var _a, _b;\n  const fromVal = toValue(from);\n  const toVal = toValue(to);\n  const v1 = toVec(fromVal);\n  const v2 = toVec(toVal);\n  const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n  const startedAt = Date.now();\n  const endAt = Date.now() + duration;\n  const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n  const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n  return new Promise((resolve) => {\n    source.value = fromVal;\n    const tick = () => {\n      var _a2;\n      if ((_a2 = options.abort) == null ? void 0 : _a2.call(options)) {\n        resolve();\n        return;\n      }\n      const now = Date.now();\n      const alpha = ease((now - startedAt) / duration);\n      const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n      if (Array.isArray(source.value))\n        source.value = arr.map((n, i) => {\n          var _a3, _b2;\n          return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n        });\n      else if (typeof source.value === \"number\")\n        source.value = arr[0];\n      if (now < endAt) {\n        requestAnimationFrame(tick);\n      } else {\n        source.value = toVal;\n        resolve();\n      }\n    };\n    tick();\n  });\n}\nfunction useTransition(source, options = {}) {\n  let currentId = 0;\n  const sourceVal = () => {\n    const v = toValue(source);\n    return typeof v === \"number\" ? v : v.map(toValue);\n  };\n  const outputRef = ref(sourceVal());\n  watch(sourceVal, async (to) => {\n    var _a, _b;\n    if (toValue(options.disabled))\n      return;\n    const id = ++currentId;\n    if (options.delay)\n      await promiseTimeout(toValue(options.delay));\n    if (id !== currentId)\n      return;\n    const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n    (_a = options.onStarted) == null ? void 0 : _a.call(options);\n    await executeTransition(outputRef, outputRef.value, toVal, {\n      ...options,\n      abort: () => {\n        var _a2;\n        return id !== currentId || ((_a2 = options.abort) == null ? void 0 : _a2.call(options));\n      }\n    });\n    (_b = options.onFinished) == null ? void 0 : _b.call(options);\n  }, { deep: true });\n  watch(() => toValue(options.disabled), (disabled) => {\n    if (disabled) {\n      currentId++;\n      outputRef.value = sourceVal();\n    }\n  });\n  tryOnScopeDispose(() => {\n    currentId++;\n  });\n  return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n  const {\n    initialValue = {},\n    removeNullishValues = true,\n    removeFalsyValues = false,\n    write: enableWrite = true,\n    window = defaultWindow\n  } = options;\n  if (!window)\n    return reactive(initialValue);\n  const state = reactive({});\n  function getRawParams() {\n    if (mode === \"history\") {\n      return window.location.search || \"\";\n    } else if (mode === \"hash\") {\n      const hash = window.location.hash || \"\";\n      const index = hash.indexOf(\"?\");\n      return index > 0 ? hash.slice(index) : \"\";\n    } else {\n      return (window.location.hash || \"\").replace(/^#/, \"\");\n    }\n  }\n  function constructQuery(params) {\n    const stringified = params.toString();\n    if (mode === \"history\")\n      return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n    if (mode === \"hash-params\")\n      return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n    const hash = window.location.hash || \"#\";\n    const index = hash.indexOf(\"?\");\n    if (index > 0)\n      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n    return `${hash}${stringified ? `?${stringified}` : \"\"}`;\n  }\n  function read() {\n    return new URLSearchParams(getRawParams());\n  }\n  function updateState(params) {\n    const unusedKeys = new Set(Object.keys(state));\n    for (const key of params.keys()) {\n      const paramsForKey = params.getAll(key);\n      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n      unusedKeys.delete(key);\n    }\n    Array.from(unusedKeys).forEach((key) => delete state[key]);\n  }\n  const { pause, resume } = pausableWatch(\n    state,\n    () => {\n      const params = new URLSearchParams(\"\");\n      Object.keys(state).forEach((key) => {\n        const mapEntry = state[key];\n        if (Array.isArray(mapEntry))\n          mapEntry.forEach((value) => params.append(key, value));\n        else if (removeNullishValues && mapEntry == null)\n          params.delete(key);\n        else if (removeFalsyValues && !mapEntry)\n          params.delete(key);\n        else\n          params.set(key, mapEntry);\n      });\n      write(params);\n    },\n    { deep: true }\n  );\n  function write(params, shouldUpdate) {\n    pause();\n    if (shouldUpdate)\n      updateState(params);\n    window.history.replaceState(\n      window.history.state,\n      window.document.title,\n      window.location.pathname + constructQuery(params)\n    );\n    resume();\n  }\n  function onChanged() {\n    if (!enableWrite)\n      return;\n    write(read(), true);\n  }\n  useEventListener(window, \"popstate\", onChanged, false);\n  if (mode !== \"history\")\n    useEventListener(window, \"hashchange\", onChanged, false);\n  const initial = read();\n  if (initial.keys().next().value)\n    updateState(initial);\n  else\n    Object.assign(state, initialValue);\n  return state;\n}\n\nfunction useUserMedia(options = {}) {\n  var _a, _b;\n  const enabled = ref((_a = options.enabled) != null ? _a : false);\n  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n  const constraints = ref(options.constraints);\n  const { navigator = defaultNavigator } = options;\n  const isSupported = useSupported(() => {\n    var _a2;\n    return (_a2 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a2.getUserMedia;\n  });\n  const stream = shallowRef();\n  function getDeviceOptions(type) {\n    switch (type) {\n      case \"video\": {\n        if (constraints.value)\n          return constraints.value.video || false;\n        break;\n      }\n      case \"audio\": {\n        if (constraints.value)\n          return constraints.value.audio || false;\n        break;\n      }\n    }\n  }\n  async function _start() {\n    if (!isSupported.value || stream.value)\n      return;\n    stream.value = await navigator.mediaDevices.getUserMedia({\n      video: getDeviceOptions(\"video\"),\n      audio: getDeviceOptions(\"audio\")\n    });\n    return stream.value;\n  }\n  function _stop() {\n    var _a2;\n    (_a2 = stream.value) == null ? void 0 : _a2.getTracks().forEach((t) => t.stop());\n    stream.value = void 0;\n  }\n  function stop() {\n    _stop();\n    enabled.value = false;\n  }\n  async function start() {\n    await _start();\n    if (stream.value)\n      enabled.value = true;\n    return stream.value;\n  }\n  async function restart() {\n    _stop();\n    return await start();\n  }\n  watch(\n    enabled,\n    (v) => {\n      if (v)\n        _start();\n      else\n        _stop();\n    },\n    { immediate: true }\n  );\n  watch(\n    constraints,\n    () => {\n      if (autoSwitch.value && stream.value)\n        restart();\n    },\n    { immediate: true }\n  );\n  tryOnScopeDispose(() => {\n    stop();\n  });\n  return {\n    isSupported,\n    stream,\n    start,\n    stop,\n    restart,\n    constraints,\n    enabled,\n    autoSwitch\n  };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n  var _a, _b, _c, _d, _e;\n  const {\n    clone = false,\n    passive = false,\n    eventName,\n    deep = false,\n    defaultValue,\n    shouldEmit\n  } = options;\n  const vm = getCurrentInstance();\n  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));\n  let event = eventName;\n  if (!key) {\n    if (isVue2) {\n      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;\n      key = (modelOptions == null ? void 0 : modelOptions.value) || \"value\";\n      if (!eventName)\n        event = (modelOptions == null ? void 0 : modelOptions.event) || \"input\";\n    } else {\n      key = \"modelValue\";\n    }\n  }\n  event = event || `update:${key.toString()}`;\n  const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n  const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n  const triggerEmit = (value) => {\n    if (shouldEmit) {\n      if (shouldEmit(value))\n        _emit(event, value);\n    } else {\n      _emit(event, value);\n    }\n  };\n  if (passive) {\n    const initialValue = getValue();\n    const proxy = ref(initialValue);\n    let isUpdating = false;\n    watch(\n      () => props[key],\n      (v) => {\n        if (!isUpdating) {\n          isUpdating = true;\n          proxy.value = cloneFn(v);\n          nextTick(() => isUpdating = false);\n        }\n      }\n    );\n    watch(\n      proxy,\n      (v) => {\n        if (!isUpdating && (v !== props[key] || deep))\n          triggerEmit(v);\n      },\n      { deep }\n    );\n    return proxy;\n  } else {\n    return computed({\n      get() {\n        return getValue();\n      },\n      set(value) {\n        triggerEmit(value);\n      }\n    });\n  }\n}\n\nfunction useVModels(props, emit, options = {}) {\n  const ret = {};\n  for (const key in props) {\n    ret[key] = useVModel(\n      props,\n      key,\n      emit,\n      options\n    );\n  }\n  return ret;\n}\n\nfunction useVibrate(options) {\n  const {\n    pattern = [],\n    interval = 0,\n    navigator = defaultNavigator\n  } = options || {};\n  const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n  const patternRef = toRef(pattern);\n  let intervalControls;\n  const vibrate = (pattern2 = patternRef.value) => {\n    if (isSupported.value)\n      navigator.vibrate(pattern2);\n  };\n  const stop = () => {\n    if (isSupported.value)\n      navigator.vibrate(0);\n    intervalControls == null ? void 0 : intervalControls.pause();\n  };\n  if (interval > 0) {\n    intervalControls = useIntervalFn(\n      vibrate,\n      interval,\n      {\n        immediate: false,\n        immediateCallback: false\n      }\n    );\n  }\n  return {\n    isSupported,\n    pattern,\n    intervalControls,\n    vibrate,\n    stop\n  };\n}\n\nfunction useVirtualList(list, options) {\n  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n  return {\n    list: currentList,\n    scrollTo,\n    containerProps: {\n      ref: containerRef,\n      onScroll: () => {\n        calculateRange();\n      },\n      style: containerStyle\n    },\n    wrapperProps\n  };\n}\nfunction useVirtualListResources(list) {\n  const containerRef = ref(null);\n  const size = useElementSize(containerRef);\n  const currentList = ref([]);\n  const source = shallowRef(list);\n  const state = ref({ start: 0, end: 10 });\n  return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n  return (containerSize) => {\n    if (typeof itemSize === \"number\")\n      return Math.ceil(containerSize / itemSize);\n    const { start = 0 } = state.value;\n    let sum = 0;\n    let capacity = 0;\n    for (let i = start; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      capacity = i;\n      if (sum > containerSize)\n        break;\n    }\n    return capacity - start;\n  };\n}\nfunction createGetOffset(source, itemSize) {\n  return (scrollDirection) => {\n    if (typeof itemSize === \"number\")\n      return Math.floor(scrollDirection / itemSize) + 1;\n    let sum = 0;\n    let offset = 0;\n    for (let i = 0; i < source.value.length; i++) {\n      const size = itemSize(i);\n      sum += size;\n      if (sum >= scrollDirection) {\n        offset = i;\n        break;\n      }\n    }\n    return offset + 1;\n  };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n  return () => {\n    const element = containerRef.value;\n    if (element) {\n      const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n      const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n      const from = offset - overscan;\n      const to = offset + viewCapacity + overscan;\n      state.value = {\n        start: from < 0 ? 0 : from,\n        end: to > source.value.length ? source.value.length : to\n      };\n      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n        data: ele,\n        index: index + state.value.start\n      }));\n    }\n  };\n}\nfunction createGetDistance(itemSize, source) {\n  return (index) => {\n    if (typeof itemSize === \"number\") {\n      const size2 = index * itemSize;\n      return size2;\n    }\n    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n    return size;\n  };\n}\nfunction useWatchForSizes(size, list, calculateRange) {\n  watch([size.width, size.height, list], () => {\n    calculateRange();\n  });\n}\nfunction createComputedTotalSize(itemSize, source) {\n  return computed(() => {\n    if (typeof itemSize === \"number\")\n      return source.value.length * itemSize;\n    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n  });\n}\nconst scrollToDictionaryForElementScrollKey = {\n  horizontal: \"scrollLeft\",\n  vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n  return (index) => {\n    if (containerRef.value) {\n      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n      calculateRange();\n    }\n  };\n}\nfunction useHorizontalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowX: \"auto\" };\n  const { itemWidth, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n  const getOffset = createGetOffset(source, itemWidth);\n  const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceLeft = createGetDistance(itemWidth, source);\n  const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n  const totalWidth = createComputedTotalSize(itemWidth, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        height: \"100%\",\n        width: `${totalWidth.value - offsetLeft.value}px`,\n        marginLeft: `${offsetLeft.value}px`,\n        display: \"flex\"\n      }\n    };\n  });\n  return {\n    scrollTo,\n    calculateRange,\n    wrapperProps,\n    containerStyle,\n    currentList,\n    containerRef\n  };\n}\nfunction useVerticalVirtualList(options, list) {\n  const resources = useVirtualListResources(list);\n  const { state, source, currentList, size, containerRef } = resources;\n  const containerStyle = { overflowY: \"auto\" };\n  const { itemHeight, overscan = 5 } = options;\n  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n  const getOffset = createGetOffset(source, itemHeight);\n  const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n  const getDistanceTop = createGetDistance(itemHeight, source);\n  const offsetTop = computed(() => getDistanceTop(state.value.start));\n  const totalHeight = createComputedTotalSize(itemHeight, source);\n  useWatchForSizes(size, list, calculateRange);\n  const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n  const wrapperProps = computed(() => {\n    return {\n      style: {\n        width: \"100%\",\n        height: `${totalHeight.value - offsetTop.value}px`,\n        marginTop: `${offsetTop.value}px`\n      }\n    };\n  });\n  return {\n    calculateRange,\n    scrollTo,\n    containerStyle,\n    wrapperProps,\n    currentList,\n    containerRef\n  };\n}\n\nfunction useWakeLock(options = {}) {\n  const {\n    navigator = defaultNavigator,\n    document = defaultDocument\n  } = options;\n  let wakeLock;\n  const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n  const isActive = ref(false);\n  async function onVisibilityChange() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    if (document && document.visibilityState === \"visible\")\n      wakeLock = await navigator.wakeLock.request(\"screen\");\n    isActive.value = !wakeLock.released;\n  }\n  if (document)\n    useEventListener(document, \"visibilitychange\", onVisibilityChange, { passive: true });\n  async function request(type) {\n    if (!isSupported.value)\n      return;\n    wakeLock = await navigator.wakeLock.request(type);\n    isActive.value = !wakeLock.released;\n  }\n  async function release() {\n    if (!isSupported.value || !wakeLock)\n      return;\n    await wakeLock.release();\n    isActive.value = !wakeLock.released;\n    wakeLock = null;\n  }\n  return {\n    isSupported,\n    isActive,\n    request,\n    release\n  };\n}\n\nfunction useWebNotification(options = {}) {\n  const {\n    window = defaultWindow,\n    requestPermissions: _requestForPermissions = true\n  } = options;\n  const defaultWebNotificationOptions = options;\n  const isSupported = useSupported(() => !!window && \"Notification\" in window);\n  const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n  const notification = ref(null);\n  const ensurePermissions = async () => {\n    if (!isSupported.value)\n      return;\n    if (!permissionGranted.value && Notification.permission !== \"denied\") {\n      const result = await Notification.requestPermission();\n      if (result === \"granted\")\n        permissionGranted.value = true;\n    }\n    return permissionGranted.value;\n  };\n  const { on: onClick, trigger: clickTrigger } = createEventHook();\n  const { on: onShow, trigger: showTrigger } = createEventHook();\n  const { on: onError, trigger: errorTrigger } = createEventHook();\n  const { on: onClose, trigger: closeTrigger } = createEventHook();\n  const show = async (overrides) => {\n    if (!isSupported.value || !permissionGranted.value)\n      return;\n    const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n    notification.value = new Notification(options2.title || \"\", options2);\n    notification.value.onclick = clickTrigger;\n    notification.value.onshow = showTrigger;\n    notification.value.onerror = errorTrigger;\n    notification.value.onclose = closeTrigger;\n    return notification.value;\n  };\n  const close = () => {\n    if (notification.value)\n      notification.value.close();\n    notification.value = null;\n  };\n  if (_requestForPermissions)\n    tryOnMounted(ensurePermissions);\n  tryOnScopeDispose(close);\n  if (isSupported.value && window) {\n    const document = window.document;\n    useEventListener(document, \"visibilitychange\", (e) => {\n      e.preventDefault();\n      if (document.visibilityState === \"visible\") {\n        close();\n      }\n    });\n  }\n  return {\n    isSupported,\n    notification,\n    ensurePermissions,\n    permissionGranted,\n    show,\n    close,\n    onClick,\n    onShow,\n    onError,\n    onClose\n  };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n  if (options === true)\n    return {};\n  return options;\n}\nfunction useWebSocket(url, options = {}) {\n  const {\n    onConnected,\n    onDisconnected,\n    onError,\n    onMessage,\n    immediate = true,\n    autoClose = true,\n    protocols = []\n  } = options;\n  const data = ref(null);\n  const status = ref(\"CLOSED\");\n  const wsRef = ref();\n  const urlRef = toRef(url);\n  let heartbeatPause;\n  let heartbeatResume;\n  let explicitlyClosed = false;\n  let retried = 0;\n  let bufferedData = [];\n  let pongTimeoutWait;\n  const _sendBuffer = () => {\n    if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n      for (const buffer of bufferedData)\n        wsRef.value.send(buffer);\n      bufferedData = [];\n    }\n  };\n  const resetHeartbeat = () => {\n    clearTimeout(pongTimeoutWait);\n    pongTimeoutWait = void 0;\n  };\n  const close = (code = 1e3, reason) => {\n    if (!isClient || !wsRef.value)\n      return;\n    explicitlyClosed = true;\n    resetHeartbeat();\n    heartbeatPause == null ? void 0 : heartbeatPause();\n    wsRef.value.close(code, reason);\n    wsRef.value = void 0;\n  };\n  const send = (data2, useBuffer = true) => {\n    if (!wsRef.value || status.value !== \"OPEN\") {\n      if (useBuffer)\n        bufferedData.push(data2);\n      return false;\n    }\n    _sendBuffer();\n    wsRef.value.send(data2);\n    return true;\n  };\n  const _init = () => {\n    if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n      return;\n    const ws = new WebSocket(urlRef.value, protocols);\n    wsRef.value = ws;\n    status.value = \"CONNECTING\";\n    ws.onopen = () => {\n      status.value = \"OPEN\";\n      onConnected == null ? void 0 : onConnected(ws);\n      heartbeatResume == null ? void 0 : heartbeatResume();\n      _sendBuffer();\n    };\n    ws.onclose = (ev) => {\n      status.value = \"CLOSED\";\n      onDisconnected == null ? void 0 : onDisconnected(ws, ev);\n      if (!explicitlyClosed && options.autoReconnect) {\n        const {\n          retries = -1,\n          delay = 1e3,\n          onFailed\n        } = resolveNestedOptions(options.autoReconnect);\n        retried += 1;\n        if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n          setTimeout(_init, delay);\n        else if (typeof retries === \"function\" && retries())\n          setTimeout(_init, delay);\n        else\n          onFailed == null ? void 0 : onFailed();\n      }\n    };\n    ws.onerror = (e) => {\n      onError == null ? void 0 : onError(ws, e);\n    };\n    ws.onmessage = (e) => {\n      if (options.heartbeat) {\n        resetHeartbeat();\n        const {\n          message = DEFAULT_PING_MESSAGE\n        } = resolveNestedOptions(options.heartbeat);\n        if (e.data === message)\n          return;\n      }\n      data.value = e.data;\n      onMessage == null ? void 0 : onMessage(ws, e);\n    };\n  };\n  if (options.heartbeat) {\n    const {\n      message = DEFAULT_PING_MESSAGE,\n      interval = 1e3,\n      pongTimeout = 1e3\n    } = resolveNestedOptions(options.heartbeat);\n    const { pause, resume } = useIntervalFn(\n      () => {\n        send(message, false);\n        if (pongTimeoutWait != null)\n          return;\n        pongTimeoutWait = setTimeout(() => {\n          close();\n          explicitlyClosed = false;\n        }, pongTimeout);\n      },\n      interval,\n      { immediate: false }\n    );\n    heartbeatPause = pause;\n    heartbeatResume = resume;\n  }\n  if (autoClose) {\n    if (isClient)\n      useEventListener(\"beforeunload\", () => close());\n    tryOnScopeDispose(close);\n  }\n  const open = () => {\n    if (!isClient && !isWorker)\n      return;\n    close();\n    explicitlyClosed = false;\n    retried = 0;\n    _init();\n  };\n  if (immediate)\n    open();\n  return {\n    data,\n    status,\n    close,\n    send,\n    open,\n    ws: wsRef\n  };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n  const {\n    window = defaultWindow\n  } = options != null ? options : {};\n  const data = ref(null);\n  const worker = shallowRef();\n  const post = (...args) => {\n    if (!worker.value)\n      return;\n    worker.value.postMessage(...args);\n  };\n  const terminate = function terminate2() {\n    if (!worker.value)\n      return;\n    worker.value.terminate();\n  };\n  if (window) {\n    if (typeof arg0 === \"string\")\n      worker.value = new Worker(arg0, workerOptions);\n    else if (typeof arg0 === \"function\")\n      worker.value = arg0();\n    else\n      worker.value = arg0;\n    worker.value.onmessage = (e) => {\n      data.value = e.data;\n    };\n    tryOnScopeDispose(() => {\n      if (worker.value)\n        worker.value.terminate();\n    });\n  }\n  return {\n    data,\n    post,\n    terminate,\n    worker\n  };\n}\n\nfunction jobRunner(userFunc) {\n  return (e) => {\n    const userFuncArgs = e.data[0];\n    return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n      postMessage([\"SUCCESS\", result]);\n    }).catch((error) => {\n      postMessage([\"ERROR\", error]);\n    });\n  };\n}\n\nfunction depsParser(deps) {\n  if (deps.length === 0)\n    return \"\";\n  const depsString = deps.map((dep) => `'${dep}'`).toString();\n  return `importScripts(${depsString})`;\n}\n\nfunction createWorkerBlobUrl(fn, deps) {\n  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;\n  const blob = new Blob([blobCode], { type: \"text/javascript\" });\n  const url = URL.createObjectURL(blob);\n  return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n  const {\n    dependencies = [],\n    timeout,\n    window = defaultWindow\n  } = options;\n  const worker = ref();\n  const workerStatus = ref(\"PENDING\");\n  const promise = ref({});\n  const timeoutId = ref();\n  const workerTerminate = (status = \"PENDING\") => {\n    if (worker.value && worker.value._url && window) {\n      worker.value.terminate();\n      URL.revokeObjectURL(worker.value._url);\n      promise.value = {};\n      worker.value = void 0;\n      window.clearTimeout(timeoutId.value);\n      workerStatus.value = status;\n    }\n  };\n  workerTerminate();\n  tryOnScopeDispose(workerTerminate);\n  const generateWorker = () => {\n    const blobUrl = createWorkerBlobUrl(fn, dependencies);\n    const newWorker = new Worker(blobUrl);\n    newWorker._url = blobUrl;\n    newWorker.onmessage = (e) => {\n      const { resolve = () => {\n      }, reject = () => {\n      } } = promise.value;\n      const [status, result] = e.data;\n      switch (status) {\n        case \"SUCCESS\":\n          resolve(result);\n          workerTerminate(status);\n          break;\n        default:\n          reject(result);\n          workerTerminate(\"ERROR\");\n          break;\n      }\n    };\n    newWorker.onerror = (e) => {\n      const { reject = () => {\n      } } = promise.value;\n      e.preventDefault();\n      reject(e);\n      workerTerminate(\"ERROR\");\n    };\n    if (timeout) {\n      timeoutId.value = setTimeout(\n        () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n        timeout\n      );\n    }\n    return newWorker;\n  };\n  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n    promise.value = {\n      resolve,\n      reject\n    };\n    worker.value && worker.value.postMessage([[...fnArgs]]);\n    workerStatus.value = \"RUNNING\";\n  });\n  const workerFn = (...fnArgs) => {\n    if (workerStatus.value === \"RUNNING\") {\n      console.error(\n        \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n      );\n      return Promise.reject();\n    }\n    worker.value = generateWorker();\n    return callWorker(...fnArgs);\n  };\n  return {\n    workerFn,\n    workerStatus,\n    workerTerminate\n  };\n}\n\nfunction useWindowFocus(options = {}) {\n  const { window = defaultWindow } = options;\n  if (!window)\n    return ref(false);\n  const focused = ref(window.document.hasFocus());\n  useEventListener(window, \"blur\", () => {\n    focused.value = false;\n  });\n  useEventListener(window, \"focus\", () => {\n    focused.value = true;\n  });\n  return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n  const { window = defaultWindow, behavior = \"auto\" } = options;\n  if (!window) {\n    return {\n      x: ref(0),\n      y: ref(0)\n    };\n  }\n  const internalX = ref(window.scrollX);\n  const internalY = ref(window.scrollY);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo({ left: x2, behavior });\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo({ top: y2, behavior });\n    }\n  });\n  useEventListener(\n    window,\n    \"scroll\",\n    () => {\n      internalX.value = window.scrollX;\n      internalY.value = window.scrollY;\n    },\n    {\n      capture: false,\n      passive: true\n    }\n  );\n  return { x, y };\n}\n\nfunction useWindowSize(options = {}) {\n  const {\n    window = defaultWindow,\n    initialWidth = Number.POSITIVE_INFINITY,\n    initialHeight = Number.POSITIVE_INFINITY,\n    listenOrientation = true,\n    includeScrollbar = true\n  } = options;\n  const width = ref(initialWidth);\n  const height = ref(initialHeight);\n  const update = () => {\n    if (window) {\n      if (includeScrollbar) {\n        width.value = window.innerWidth;\n        height.value = window.innerHeight;\n      } else {\n        width.value = window.document.documentElement.clientWidth;\n        height.value = window.document.documentElement.clientHeight;\n      }\n    }\n  };\n  update();\n  tryOnMounted(update);\n  useEventListener(\"resize\", update, { passive: true });\n  if (listenOrientation) {\n    const matches = useMediaQuery(\"(orientation: portrait)\");\n    watch(matches, () => update());\n  }\n  return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePrevious, useRafFn, useRefHistory, useResizeObserver, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import '../assets/NcEmptyContent-pSz7F6Oe.css';\nimport { n as e } from \"../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst s = {\n  name: \"NcEmptyContent\",\n  props: {\n    /**\n     * A header message about an empty content shown\n     * @example 'No comments'\n     */\n    name: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Desription of the empty content\n     * @example 'No comments yet, start the conversation!'\n     */\n    description: {\n      type: String,\n      default: \"\"\n    }\n  },\n  computed: {\n    hasName() {\n      return this.name !== \"\";\n    },\n    /**\n     * Check if a description is given as either property or slot\n     */\n    hasDescription() {\n      return this.description !== \"\" || this.$slots.description?.[0];\n    }\n  }\n};\nvar i = function() {\n  var t = this, n = t._self._c;\n  return n(\"div\", { staticClass: \"empty-content\", attrs: { role: \"note\" } }, [t.$slots.icon ? n(\"div\", { staticClass: \"empty-content__icon\", attrs: { \"aria-hidden\": \"true\" } }, [t._t(\"icon\")], 2) : t._e(), t._t(\"name\", function() {\n    return [t.hasName ? n(\"span\", { staticClass: \"empty-content__name\" }, [t._v(\" \" + t._s(t.name) + \" \")]) : t._e()];\n  }), t.hasDescription ? n(\"p\", { staticClass: \"empty-content__description\" }, [t._t(\"description\", function() {\n    return [t._v(\" \" + t._s(t.description) + \" \")];\n  })], 2) : t._e(), t.$slots.action ? n(\"div\", { staticClass: \"empty-content__action\" }, [t._t(\"action\")], 2) : t._e()], 2);\n}, a = [], o = /* @__PURE__ */ e(\n  s,\n  i,\n  a,\n  !1,\n  null,\n  \"458108e7\",\n  null,\n  null\n);\nconst _ = o.exports;\nexport {\n  _ as default\n};\n","/**\n * @copyright Copyright (c) 2021 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport type { IPreview, IRawActivity, IRichObject } from './types'\nimport moment from '@nextcloud/moment'\n\nexport default class ActivityModel {\n\n\t_activity: IRawActivity\n\n\t/**\n\t * Create the activity object\n\t *\n\t * @param {IRawActivity} rawActivity the activity object from the ocs response\n\t */\n\tconstructor(rawActivity: IRawActivity) {\n\t\tif (typeof rawActivity !== 'object') {\n\t\t\tthrow new Error('Received activity data is not an object.')\n\t\t}\n\n\t\t// Sanity checks\n\t\tif (typeof rawActivity.activity_id !== 'number') {\n\t\t\tthrow new Error('The activity_id argument is not a valid string')\n\t\t}\n\t\tif (typeof rawActivity.type !== 'string' || rawActivity.type.trim() === '') {\n\t\t\tthrow new Error('The activity_id argument is not a valid string')\n\t\t}\n\t\tif (typeof rawActivity.subject !== 'string' || rawActivity.subject.trim() === '') {\n\t\t\tthrow new Error('The activity_id argument is not a valid string')\n\t\t}\n\t\tif (typeof rawActivity.icon !== 'string' || rawActivity.icon.trim() === '') {\n\t\t\tthrow new Error('The activity_id argument is not a valid string')\n\t\t}\n\t\tif (typeof rawActivity.datetime !== 'string' || rawActivity.datetime.trim() === '') {\n\t\t\tthrow new Error('The activity_id argument is not a valid string')\n\t\t}\n\n\t\t// store state\n\t\tthis._activity = rawActivity\n\t}\n\n\t/**\n\t * get the activity id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget id(): number {\n\t\treturn this._activity.activity_id\n\t}\n\n\t/**\n\t * Get the app causing the activity\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget app(): string {\n\t\treturn this._activity.app\n\t}\n\n\t/**\n\t * Get the activity type\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget type(): string {\n\t\treturn this._activity.type\n\t}\n\n\t/**\n\t * Get the user ID of the user causing the activity or affected by the activity\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget user(): string {\n\t\treturn this._activity.user\n\t}\n\n\t/**\n\t * Get the activity subject\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget subject(): string {\n\t\treturn this._activity.subject\n\t}\n\n\t/**\n\t * Get the activity subject_rich template\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget subjectRichTemplate(): string {\n\t\treturn this._activity.subject_rich[0]\n\t}\n\n\t/**\n\t * Get the activity subject_rich objects\n\t *\n\t * @return {Record<string, IRichObject>}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget subjectRichObjects(): Record<string, IRichObject> {\n\t\tif (Array.isArray(this._activity.subject_rich[1])) {\n\t\t\treturn {}\n\t\t}\n\n\t\treturn this._activity.subject_rich[1] as Record<string, IRichObject>\n\t}\n\n\t/**\n\t * Get the activity message\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget message(): string {\n\t\treturn this._activity.message\n\t}\n\n\t/**\n\t * Get the activity message_rich template\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget messageRichTemplate(): string {\n\t\treturn this._activity.message_rich[0]\n\t}\n\n\t/**\n\t * Get the activity message_rich objects\n\t *\n\t * @return {Record<string, IRichObject>}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget messageRichObjects(): Record<string, IRichObject> {\n\t\tif (!Array.isArray(this._activity.message_rich[1])) {\n\t\t\treturn {}\n\t\t}\n\n\t\treturn this._activity.message_rich[1] as Record<string, IRichObject>\n\t}\n\n\t/**\n\t * Get the object_type\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget objectType(): string {\n\t\treturn this._activity.object_type\n\t}\n\n\t/**\n\t * Get the activity object_id\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget objectId(): number {\n\t\treturn this._activity.object_id\n\t}\n\n\t/**\n\t * Get the activity object_name\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget objectName(): string {\n\t\treturn this._activity.object_name\n\t}\n\n\t/**\n\t * Get the activity link\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget link(): string {\n\t\treturn this._activity.link\n\t}\n\n\t/**\n\t * Get the activity icon\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget icon(): string {\n\t\treturn this._activity.icon\n\t}\n\n\t/**\n\t * Get the activity datetime\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget datetime(): string {\n\t\treturn this._activity.datetime\n\t}\n\n\t/**\n\t * Get the activity formatted date from the current date\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget dateFromNow(): string {\n\t\treturn moment(this._activity.datetime).fromNow()\n\t}\n\n\t/**\n\t * Get the activity formatted datetime\n\t *\n\t * @return {string}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget formattedDate(): string {\n\t\treturn moment(this._activity.datetime).format('LLL')\n\t}\n\n\t/**\n\t * Get the activity timestamp\n\t *\n\t * @return {number}\n\t * @readonly\n\t * @memberof ActivityModel\n\t */\n\tget timestamp(): number {\n\t\treturn moment(this._activity.datetime).unix()\n\t}\n\n\t/**\n\t * Get previews of affected files\n\t */\n\tget previews(): IPreview[] {\n\t\treturn this._activity.previews ?? []\n\t}\n\n}\n","/*!\n* tabbable 6.2.0\n* @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE\n*/\n// NOTE: separate `:not()` selectors has broader browser support than the newer\n//  `:not([inert], [inert] *)` (Feb 2023)\n// CAREFUL: JSDom does not support `:not([inert] *)` as a selector; using it causes\n//  the entire query to fail, resulting in no nodes found, which will break a lot\n//  of things... so we have to rely on JS to identify nodes inside an inert container\nvar candidateSelectors = ['input:not([inert])', 'select:not([inert])', 'textarea:not([inert])', 'a[href]:not([inert])', 'button:not([inert])', '[tabindex]:not(slot):not([inert])', 'audio[controls]:not([inert])', 'video[controls]:not([inert])', '[contenteditable]:not([contenteditable=\"false\"]):not([inert])', 'details>summary:first-of-type:not([inert])', 'details:not([inert])'];\nvar candidateSelector = /* #__PURE__ */candidateSelectors.join(',');\nvar NoElement = typeof Element === 'undefined';\nvar matches = NoElement ? function () {} : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\nvar getRootNode = !NoElement && Element.prototype.getRootNode ? function (element) {\n  var _element$getRootNode;\n  return element === null || element === void 0 ? void 0 : (_element$getRootNode = element.getRootNode) === null || _element$getRootNode === void 0 ? void 0 : _element$getRootNode.call(element);\n} : function (element) {\n  return element === null || element === void 0 ? void 0 : element.ownerDocument;\n};\n\n/**\n * Determines if a node is inert or in an inert ancestor.\n * @param {Element} [node]\n * @param {boolean} [lookUp] If true and `node` is not inert, looks up at ancestors to\n *  see if any of them are inert. If false, only `node` itself is considered.\n * @returns {boolean} True if inert itself or by way of being in an inert ancestor.\n *  False if `node` is falsy.\n */\nvar isInert = function isInert(node, lookUp) {\n  var _node$getAttribute;\n  if (lookUp === void 0) {\n    lookUp = true;\n  }\n  // CAREFUL: JSDom does not support inert at all, so we can't use the `HTMLElement.inert`\n  //  JS API property; we have to check the attribute, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's an active element\n  var inertAtt = node === null || node === void 0 ? void 0 : (_node$getAttribute = node.getAttribute) === null || _node$getAttribute === void 0 ? void 0 : _node$getAttribute.call(node, 'inert');\n  var inert = inertAtt === '' || inertAtt === 'true';\n\n  // NOTE: this could also be handled with `node.matches('[inert], :is([inert] *)')`\n  //  if it weren't for `matches()` not being a function on shadow roots; the following\n  //  code works for any kind of node\n  // CAREFUL: JSDom does not appear to support certain selectors like `:not([inert] *)`\n  //  so it likely would not support `:is([inert] *)` either...\n  var result = inert || lookUp && node && isInert(node.parentNode); // recursive\n\n  return result;\n};\n\n/**\n * Determines if a node's content is editable.\n * @param {Element} [node]\n * @returns True if it's content-editable; false if it's not or `node` is falsy.\n */\nvar isContentEditable = function isContentEditable(node) {\n  var _node$getAttribute2;\n  // CAREFUL: JSDom does not support the `HTMLElement.isContentEditable` API so we have\n  //  to use the attribute directly to check for this, which can either be empty or 'true';\n  //  if it's `null` (not specified) or 'false', it's a non-editable element\n  var attValue = node === null || node === void 0 ? void 0 : (_node$getAttribute2 = node.getAttribute) === null || _node$getAttribute2 === void 0 ? void 0 : _node$getAttribute2.call(node, 'contenteditable');\n  return attValue === '' || attValue === 'true';\n};\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nvar getCandidates = function getCandidates(el, includeContainer, filter) {\n  // even if `includeContainer=false`, we still have to check it for inertness because\n  //  if it's inert, all its children are inert\n  if (isInert(el)) {\n    return [];\n  }\n  var candidates = Array.prototype.slice.apply(el.querySelectorAll(candidateSelector));\n  if (includeContainer && matches.call(el, candidateSelector)) {\n    candidates.unshift(el);\n  }\n  candidates = candidates.filter(filter);\n  return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidateScope\n * @property {Element} scopeParent contains inner candidates\n * @property {Element[]} candidates list of candidates found in the scope parent\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n *  if a function, implies shadow support is enabled and either returns the shadow root of an element\n *  or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidateScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidateScope>}\n */\nvar getCandidatesIteratively = function getCandidatesIteratively(elements, includeContainer, options) {\n  var candidates = [];\n  var elementsToCheck = Array.from(elements);\n  while (elementsToCheck.length) {\n    var element = elementsToCheck.shift();\n    if (isInert(element, false)) {\n      // no need to look up since we're drilling down\n      // anything inside this container will also be inert\n      continue;\n    }\n    if (element.tagName === 'SLOT') {\n      // add shadow dom slot scope (slot itself cannot be focusable)\n      var assigned = element.assignedElements();\n      var content = assigned.length ? assigned : element.children;\n      var nestedCandidates = getCandidatesIteratively(content, true, options);\n      if (options.flatten) {\n        candidates.push.apply(candidates, nestedCandidates);\n      } else {\n        candidates.push({\n          scopeParent: element,\n          candidates: nestedCandidates\n        });\n      }\n    } else {\n      // check candidate element\n      var validCandidate = matches.call(element, candidateSelector);\n      if (validCandidate && options.filter(element) && (includeContainer || !elements.includes(element))) {\n        candidates.push(element);\n      }\n\n      // iterate over shadow content if possible\n      var shadowRoot = element.shadowRoot ||\n      // check for an undisclosed shadow\n      typeof options.getShadowRoot === 'function' && options.getShadowRoot(element);\n\n      // no inert look up because we're already drilling down and checking for inertness\n      //  on the way down, so all containers to this root node should have already been\n      //  vetted as non-inert\n      var validShadowRoot = !isInert(shadowRoot, false) && (!options.shadowRootFilter || options.shadowRootFilter(element));\n      if (shadowRoot && validShadowRoot) {\n        // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n        //  shadow exists, so look at light dom children as fallback BUT create a scope for any\n        //  child candidates found because they're likely slotted elements (elements that are\n        //  children of the web component element (which has the shadow), in the light dom, but\n        //  slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n        //  _after_ we return from this recursive call\n        var _nestedCandidates = getCandidatesIteratively(shadowRoot === true ? element.children : shadowRoot.children, true, options);\n        if (options.flatten) {\n          candidates.push.apply(candidates, _nestedCandidates);\n        } else {\n          candidates.push({\n            scopeParent: element,\n            candidates: _nestedCandidates\n          });\n        }\n      } else {\n        // there's not shadow so just dig into the element's (light dom) children\n        //  __without__ giving the element special scope treatment\n        elementsToCheck.unshift.apply(elementsToCheck, element.children);\n      }\n    }\n  }\n  return candidates;\n};\n\n/**\n * @private\n * Determines if the node has an explicitly specified `tabindex` attribute.\n * @param {HTMLElement} node\n * @returns {boolean} True if so; false if not.\n */\nvar hasTabIndex = function hasTabIndex(node) {\n  return !isNaN(parseInt(node.getAttribute('tabindex'), 10));\n};\n\n/**\n * Determine the tab index of a given node.\n * @param {HTMLElement} node\n * @returns {number} Tab order (negative, 0, or positive number).\n * @throws {Error} If `node` is falsy.\n */\nvar getTabIndex = function getTabIndex(node) {\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (node.tabIndex < 0) {\n    // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n    // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n    // yet they are still part of the regular tab order; in FF, they get a default\n    // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n    // order, consider their tab index to be 0.\n    // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n    // so if they don't have a tabindex attribute specifically set, assume it's 0.\n    if ((/^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) || isContentEditable(node)) && !hasTabIndex(node)) {\n      return 0;\n    }\n  }\n  return node.tabIndex;\n};\n\n/**\n * Determine the tab index of a given node __for sort order purposes__.\n * @param {HTMLElement} node\n * @param {boolean} [isScope] True for a custom element with shadow root or slot that, by default,\n *  has tabIndex -1, but needs to be sorted by document order in order for its content to be\n *  inserted into the correct sort position.\n * @returns {number} Tab order (negative, 0, or positive number).\n */\nvar getSortOrderTabIndex = function getSortOrderTabIndex(node, isScope) {\n  var tabIndex = getTabIndex(node);\n  if (tabIndex < 0 && isScope && !hasTabIndex(node)) {\n    return 0;\n  }\n  return tabIndex;\n};\nvar sortOrderedTabbables = function sortOrderedTabbables(a, b) {\n  return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n};\nvar isInput = function isInput(node) {\n  return node.tagName === 'INPUT';\n};\nvar isHiddenInput = function isHiddenInput(node) {\n  return isInput(node) && node.type === 'hidden';\n};\nvar isDetailsWithSummary = function isDetailsWithSummary(node) {\n  var r = node.tagName === 'DETAILS' && Array.prototype.slice.apply(node.children).some(function (child) {\n    return child.tagName === 'SUMMARY';\n  });\n  return r;\n};\nvar getCheckedRadio = function getCheckedRadio(nodes, form) {\n  for (var i = 0; i < nodes.length; i++) {\n    if (nodes[i].checked && nodes[i].form === form) {\n      return nodes[i];\n    }\n  }\n};\nvar isTabbableRadio = function isTabbableRadio(node) {\n  if (!node.name) {\n    return true;\n  }\n  var radioScope = node.form || getRootNode(node);\n  var queryRadios = function queryRadios(name) {\n    return radioScope.querySelectorAll('input[type=\"radio\"][name=\"' + name + '\"]');\n  };\n  var radioSet;\n  if (typeof window !== 'undefined' && typeof window.CSS !== 'undefined' && typeof window.CSS.escape === 'function') {\n    radioSet = queryRadios(window.CSS.escape(node.name));\n  } else {\n    try {\n      radioSet = queryRadios(node.name);\n    } catch (err) {\n      // eslint-disable-next-line no-console\n      console.error('Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s', err.message);\n      return false;\n    }\n  }\n  var checked = getCheckedRadio(radioSet, node.form);\n  return !checked || checked === node;\n};\nvar isRadio = function isRadio(node) {\n  return isInput(node) && node.type === 'radio';\n};\nvar isNonTabbableRadio = function isNonTabbableRadio(node) {\n  return isRadio(node) && !isTabbableRadio(node);\n};\n\n// determines if a node is ultimately attached to the window's document\nvar isNodeAttached = function isNodeAttached(node) {\n  var _nodeRoot;\n  // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n  //  (but NOT _the_ document; see second 'If' comment below for more).\n  // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n  //  is attached, and the one we need to check if it's in the document or not (because the\n  //  shadow, and all nodes it contains, is never considered in the document since shadows\n  //  behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n  //  is hidden, or is not in the document itself but is detached, it will affect the shadow's\n  //  visibility, including all the nodes it contains). The host could be any normal node,\n  //  or a custom element (i.e. web component). Either way, that's the one that is considered\n  //  part of the document, not the shadow root, nor any of its children (i.e. the node being\n  //  tested).\n  // To further complicate things, we have to look all the way up until we find a shadow HOST\n  //  that is attached (or find none) because the node might be in nested shadows...\n  // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n  //  document (per the docs) and while it's a Document-type object, that document does not\n  //  appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n  //  to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n  //  using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n  //  node is actually detached.\n  // NOTE: If `nodeRootHost` or `node` happens to be the `document` itself (which is possible\n  //  if a tabbable/focusable node was quickly added to the DOM, focused, and then removed\n  //  from the DOM as in https://github.com/focus-trap/focus-trap-react/issues/905), then\n  //  `ownerDocument` will be `null`, hence the optional chaining on it.\n  var nodeRoot = node && getRootNode(node);\n  var nodeRootHost = (_nodeRoot = nodeRoot) === null || _nodeRoot === void 0 ? void 0 : _nodeRoot.host;\n\n  // in some cases, a detached node will return itself as the root instead of a document or\n  //  shadow root object, in which case, we shouldn't try to look further up the host chain\n  var attached = false;\n  if (nodeRoot && nodeRoot !== node) {\n    var _nodeRootHost, _nodeRootHost$ownerDo, _node$ownerDocument;\n    attached = !!((_nodeRootHost = nodeRootHost) !== null && _nodeRootHost !== void 0 && (_nodeRootHost$ownerDo = _nodeRootHost.ownerDocument) !== null && _nodeRootHost$ownerDo !== void 0 && _nodeRootHost$ownerDo.contains(nodeRootHost) || node !== null && node !== void 0 && (_node$ownerDocument = node.ownerDocument) !== null && _node$ownerDocument !== void 0 && _node$ownerDocument.contains(node));\n    while (!attached && nodeRootHost) {\n      var _nodeRoot2, _nodeRootHost2, _nodeRootHost2$ownerD;\n      // since it's not attached and we have a root host, the node MUST be in a nested shadow DOM,\n      //  which means we need to get the host's host and check if that parent host is contained\n      //  in (i.e. attached to) the document\n      nodeRoot = getRootNode(nodeRootHost);\n      nodeRootHost = (_nodeRoot2 = nodeRoot) === null || _nodeRoot2 === void 0 ? void 0 : _nodeRoot2.host;\n      attached = !!((_nodeRootHost2 = nodeRootHost) !== null && _nodeRootHost2 !== void 0 && (_nodeRootHost2$ownerD = _nodeRootHost2.ownerDocument) !== null && _nodeRootHost2$ownerD !== void 0 && _nodeRootHost2$ownerD.contains(nodeRootHost));\n    }\n  }\n  return attached;\n};\nvar isZeroArea = function isZeroArea(node) {\n  var _node$getBoundingClie = node.getBoundingClientRect(),\n    width = _node$getBoundingClie.width,\n    height = _node$getBoundingClie.height;\n  return width === 0 && height === 0;\n};\nvar isHidden = function isHidden(node, _ref) {\n  var displayCheck = _ref.displayCheck,\n    getShadowRoot = _ref.getShadowRoot;\n  // NOTE: visibility will be `undefined` if node is detached from the document\n  //  (see notes about this further down), which means we will consider it visible\n  //  (this is legacy behavior from a very long way back)\n  // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n  //  _visibility_ check, not a _display_ check\n  if (getComputedStyle(node).visibility === 'hidden') {\n    return true;\n  }\n  var isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n  var nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n  if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n    return true;\n  }\n  if (!displayCheck || displayCheck === 'full' || displayCheck === 'legacy-full') {\n    if (typeof getShadowRoot === 'function') {\n      // figure out if we should consider the node to be in an undisclosed shadow and use the\n      //  'non-zero-area' fallback\n      var originalNode = node;\n      while (node) {\n        var parentElement = node.parentElement;\n        var rootNode = getRootNode(node);\n        if (parentElement && !parentElement.shadowRoot && getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n        ) {\n          // node has an undisclosed shadow which means we can only treat it as a black box, so we\n          //  fall back to a non-zero-area test\n          return isZeroArea(node);\n        } else if (node.assignedSlot) {\n          // iterate up slot\n          node = node.assignedSlot;\n        } else if (!parentElement && rootNode !== node.ownerDocument) {\n          // cross shadow boundary\n          node = rootNode.host;\n        } else {\n          // iterate up normal dom\n          node = parentElement;\n        }\n      }\n      node = originalNode;\n    }\n    // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n    //  (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n    //  it might be a falsy value, which means shadow DOM support is disabled\n\n    // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n    //  now we can just test to see if it would normally be visible or not, provided it's\n    //  attached to the main document.\n    // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n    //  `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n    if (isNodeAttached(node)) {\n      // this works wherever the node is: if there's at least one client rect, it's\n      //  somehow displayed; it also covers the CSS 'display: contents' case where the\n      //  node itself is hidden in place of its contents; and there's no need to search\n      //  up the hierarchy either\n      return !node.getClientRects().length;\n    }\n\n    // Else, the node isn't attached to the document, which means the `getClientRects()`\n    //  API will __always__ return zero rects (this can happen, for example, if React\n    //  is used to render nodes onto a detached tree, as confirmed in this thread:\n    //  https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n    //\n    // It also means that even window.getComputedStyle(node).display will return `undefined`\n    //  because styles are only computed for nodes that are in the document.\n    //\n    // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n    //  somehow. Though it was never stated officially, anyone who has ever used tabbable\n    //  APIs on nodes in detached containers has actually implicitly used tabbable in what\n    //  was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n    //  considering __everything__ to be visible because of the innability to determine styles.\n    //\n    // v6.0.0: As of this major release, the default 'full' option __no longer treats detached\n    //  nodes as visible with the 'none' fallback.__\n    if (displayCheck !== 'legacy-full') {\n      return true; // hidden\n    }\n    // else, fallback to 'none' mode and consider the node visible\n  } else if (displayCheck === 'non-zero-area') {\n    // NOTE: Even though this tests that the node's client rect is non-zero to determine\n    //  whether it's displayed, and that a detached node will __always__ have a zero-area\n    //  client rect, we don't special-case for whether the node is attached or not. In\n    //  this mode, we do want to consider nodes that have a zero area to be hidden at all\n    //  times, and that includes attached or not.\n    return isZeroArea(node);\n  }\n\n  // visible, as far as we can tell, or per current `displayCheck=none` mode, we assume\n  //  it's visible\n  return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n//  unless they are in the _first_ <legend> element of the top-most disabled\n//  fieldset\nvar isDisabledFromFieldset = function isDisabledFromFieldset(node) {\n  if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n    var parentNode = node.parentElement;\n    // check if `node` is contained in a disabled <fieldset>\n    while (parentNode) {\n      if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n        // look for the first <legend> among the children of the disabled <fieldset>\n        for (var i = 0; i < parentNode.children.length; i++) {\n          var child = parentNode.children.item(i);\n          // when the first <legend> (in document order) is found\n          if (child.tagName === 'LEGEND') {\n            // if its parent <fieldset> is not nested in another disabled <fieldset>,\n            // return whether `node` is a descendant of its first <legend>\n            return matches.call(parentNode, 'fieldset[disabled] *') ? true : !child.contains(node);\n          }\n        }\n        // the disabled <fieldset> containing `node` has no <legend>\n        return true;\n      }\n      parentNode = parentNode.parentElement;\n    }\n  }\n\n  // else, node's tabbable/focusable state should not be affected by a fieldset's\n  //  enabled/disabled state\n  return false;\n};\nvar isNodeMatchingSelectorFocusable = function isNodeMatchingSelectorFocusable(options, node) {\n  if (node.disabled ||\n  // we must do an inert look up to filter out any elements inside an inert ancestor\n  //  because we're limited in the type of selectors we can use in JSDom (see related\n  //  note related to `candidateSelectors`)\n  isInert(node) || isHiddenInput(node) || isHidden(node, options) ||\n  // For a details element with a summary, the summary element gets the focus\n  isDetailsWithSummary(node) || isDisabledFromFieldset(node)) {\n    return false;\n  }\n  return true;\n};\nvar isNodeMatchingSelectorTabbable = function isNodeMatchingSelectorTabbable(options, node) {\n  if (isNonTabbableRadio(node) || getTabIndex(node) < 0 || !isNodeMatchingSelectorFocusable(options, node)) {\n    return false;\n  }\n  return true;\n};\nvar isValidShadowRootTabbable = function isValidShadowRootTabbable(shadowHostNode) {\n  var tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n  if (isNaN(tabIndex) || tabIndex >= 0) {\n    return true;\n  }\n  // If a custom element has an explicit negative tabindex,\n  // browsers will not allow tab targeting said element's children.\n  return false;\n};\n\n/**\n * @param {Array.<Element|CandidateScope>} candidates\n * @returns Element[]\n */\nvar sortByOrder = function sortByOrder(candidates) {\n  var regularTabbables = [];\n  var orderedTabbables = [];\n  candidates.forEach(function (item, i) {\n    var isScope = !!item.scopeParent;\n    var element = isScope ? item.scopeParent : item;\n    var candidateTabindex = getSortOrderTabIndex(element, isScope);\n    var elements = isScope ? sortByOrder(item.candidates) : element;\n    if (candidateTabindex === 0) {\n      isScope ? regularTabbables.push.apply(regularTabbables, elements) : regularTabbables.push(element);\n    } else {\n      orderedTabbables.push({\n        documentOrder: i,\n        tabIndex: candidateTabindex,\n        item: item,\n        isScope: isScope,\n        content: elements\n      });\n    }\n  });\n  return orderedTabbables.sort(sortOrderedTabbables).reduce(function (acc, sortable) {\n    sortable.isScope ? acc.push.apply(acc, sortable.content) : acc.push(sortable.content);\n    return acc;\n  }, []).concat(regularTabbables);\n};\nvar tabbable = function tabbable(container, options) {\n  options = options || {};\n  var candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively([container], options.includeContainer, {\n      filter: isNodeMatchingSelectorTabbable.bind(null, options),\n      flatten: false,\n      getShadowRoot: options.getShadowRoot,\n      shadowRootFilter: isValidShadowRootTabbable\n    });\n  } else {\n    candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorTabbable.bind(null, options));\n  }\n  return sortByOrder(candidates);\n};\nvar focusable = function focusable(container, options) {\n  options = options || {};\n  var candidates;\n  if (options.getShadowRoot) {\n    candidates = getCandidatesIteratively([container], options.includeContainer, {\n      filter: isNodeMatchingSelectorFocusable.bind(null, options),\n      flatten: true,\n      getShadowRoot: options.getShadowRoot\n    });\n  } else {\n    candidates = getCandidates(container, options.includeContainer, isNodeMatchingSelectorFocusable.bind(null, options));\n  }\n  return candidates;\n};\nvar isTabbable = function isTabbable(node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, candidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorTabbable(options, node);\n};\nvar focusableCandidateSelector = /* #__PURE__ */candidateSelectors.concat('iframe').join(',');\nvar isFocusable = function isFocusable(node, options) {\n  options = options || {};\n  if (!node) {\n    throw new Error('No node provided');\n  }\n  if (matches.call(node, focusableCandidateSelector) === false) {\n    return false;\n  }\n  return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { focusable, getTabIndex, isFocusable, isTabbable, tabbable };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n* focus-trap 7.5.4\n* @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE\n*/\nimport { isFocusable, tabbable, focusable, isTabbable, getTabIndex } from 'tabbable';\n\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _toPrimitive(input, hint) {\n  if (typeof input !== \"object\" || input === null) return input;\n  var prim = input[Symbol.toPrimitive];\n  if (prim !== undefined) {\n    var res = prim.call(input, hint || \"default\");\n    if (typeof res !== \"object\") return res;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n  var key = _toPrimitive(arg, \"string\");\n  return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar activeFocusTraps = {\n  activateTrap: function activateTrap(trapStack, trap) {\n    if (trapStack.length > 0) {\n      var activeTrap = trapStack[trapStack.length - 1];\n      if (activeTrap !== trap) {\n        activeTrap.pause();\n      }\n    }\n    var trapIndex = trapStack.indexOf(trap);\n    if (trapIndex === -1) {\n      trapStack.push(trap);\n    } else {\n      // move this existing trap to the front of the queue\n      trapStack.splice(trapIndex, 1);\n      trapStack.push(trap);\n    }\n  },\n  deactivateTrap: function deactivateTrap(trapStack, trap) {\n    var trapIndex = trapStack.indexOf(trap);\n    if (trapIndex !== -1) {\n      trapStack.splice(trapIndex, 1);\n    }\n    if (trapStack.length > 0) {\n      trapStack[trapStack.length - 1].unpause();\n    }\n  }\n};\nvar isSelectableInput = function isSelectableInput(node) {\n  return node.tagName && node.tagName.toLowerCase() === 'input' && typeof node.select === 'function';\n};\nvar isEscapeEvent = function isEscapeEvent(e) {\n  return (e === null || e === void 0 ? void 0 : e.key) === 'Escape' || (e === null || e === void 0 ? void 0 : e.key) === 'Esc' || (e === null || e === void 0 ? void 0 : e.keyCode) === 27;\n};\nvar isTabEvent = function isTabEvent(e) {\n  return (e === null || e === void 0 ? void 0 : e.key) === 'Tab' || (e === null || e === void 0 ? void 0 : e.keyCode) === 9;\n};\n\n// checks for TAB by default\nvar isKeyForward = function isKeyForward(e) {\n  return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nvar isKeyBackward = function isKeyBackward(e) {\n  return isTabEvent(e) && e.shiftKey;\n};\nvar delay = function delay(fn) {\n  return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n//  of Array.findIndex() for our needs\nvar findIndex = function findIndex(arr, fn) {\n  var idx = -1;\n  arr.every(function (value, i) {\n    if (fn(value)) {\n      idx = i;\n      return false; // break\n    }\n\n    return true; // next\n  });\n\n  return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n *  the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nvar valueOrHandler = function valueOrHandler(value) {\n  for (var _len = arguments.length, params = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    params[_key - 1] = arguments[_key];\n  }\n  return typeof value === 'function' ? value.apply(void 0, params) : value;\n};\nvar getActualTarget = function getActualTarget(event) {\n  // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n  //  shadow host. However, event.target.composedPath() will be an array of\n  //  nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n  //  outer-most (the host HTML document). If we have access to composedPath(),\n  //  then use its first element; otherwise, fall back to event.target (and\n  //  this only works for an _open_ shadow DOM; otherwise,\n  //  composedPath()[0] === event.target always).\n  return event.target.shadowRoot && typeof event.composedPath === 'function' ? event.composedPath()[0] : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n//  current instance use the same stack if `userOptions.trapStack` isn't specified\nvar internalTrapStack = [];\nvar createFocusTrap = function createFocusTrap(elements, userOptions) {\n  // SSR: a live trap shouldn't be created in this type of environment so this\n  //  should be safe code to execute if the `document` option isn't specified\n  var doc = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.document) || document;\n  var trapStack = (userOptions === null || userOptions === void 0 ? void 0 : userOptions.trapStack) || internalTrapStack;\n  var config = _objectSpread2({\n    returnFocusOnDeactivate: true,\n    escapeDeactivates: true,\n    delayInitialFocus: true,\n    isKeyForward: isKeyForward,\n    isKeyBackward: isKeyBackward\n  }, userOptions);\n  var state = {\n    // containers given to createFocusTrap()\n    // @type {Array<HTMLElement>}\n    containers: [],\n    // list of objects identifying tabbable nodes in `containers` in the trap\n    // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n    //  is active, but the trap should never get to a state where there isn't at least one group\n    //  with at least one tabbable node in it (that would lead to an error condition that would\n    //  result in an error being thrown)\n    // @type {Array<{\n    //   container: HTMLElement,\n    //   tabbableNodes: Array<HTMLElement>, // empty if none\n    //   focusableNodes: Array<HTMLElement>, // empty if none\n    //   posTabIndexesFound: boolean,\n    //   firstTabbableNode: HTMLElement|undefined,\n    //   lastTabbableNode: HTMLElement|undefined,\n    //   firstDomTabbableNode: HTMLElement|undefined,\n    //   lastDomTabbableNode: HTMLElement|undefined,\n    //   nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n    // }>}\n    containerGroups: [],\n    // same order/length as `containers` list\n\n    // references to objects in `containerGroups`, but only those that actually have\n    //  tabbable nodes in them\n    // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n    //  the same length\n    tabbableGroups: [],\n    nodeFocusedBeforeActivation: null,\n    mostRecentlyFocusedNode: null,\n    active: false,\n    paused: false,\n    // timer ID for when delayInitialFocus is true and initial focus in this trap\n    //  has been delayed during activation\n    delayInitialFocusTimer: undefined,\n    // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n    recentNavEvent: undefined\n  };\n  var trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n  /**\n   * Gets a configuration option value.\n   * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n   *  value will be taken from this object. Otherwise, value will be taken from base configuration.\n   * @param {string} optionName Name of the option whose value is sought.\n   * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n   *  IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n   */\n  var getOption = function getOption(configOverrideOptions, optionName, configOptionName) {\n    return configOverrideOptions && configOverrideOptions[optionName] !== undefined ? configOverrideOptions[optionName] : config[configOptionName || optionName];\n  };\n\n  /**\n   * Finds the index of the container that contains the element.\n   * @param {HTMLElement} element\n   * @param {Event} [event] If available, and `element` isn't directly found in any container,\n   *  the event's composed path is used to see if includes any known trap containers in the\n   *  case where the element is inside a Shadow DOM.\n   * @returns {number} Index of the container in either `state.containers` or\n   *  `state.containerGroups` (the order/length of these lists are the same); -1\n   *  if the element isn't found.\n   */\n  var findContainerIndex = function findContainerIndex(element, event) {\n    var composedPath = typeof (event === null || event === void 0 ? void 0 : event.composedPath) === 'function' ? event.composedPath() : undefined;\n    // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n    //  nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n    //  and we still need to find the element in there\n    return state.containerGroups.findIndex(function (_ref) {\n      var container = _ref.container,\n        tabbableNodes = _ref.tabbableNodes;\n      return container.contains(element) || ( // fall back to explicit tabbable search which will take into consideration any\n      //  web components if the `tabbableOptions.getShadowRoot` option was used for\n      //  the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n      //  look inside web components even if open)\n      composedPath === null || composedPath === void 0 ? void 0 : composedPath.includes(container)) || tabbableNodes.find(function (node) {\n        return node === element;\n      });\n    });\n  };\n\n  /**\n   * Gets the node for the given option, which is expected to be an option that\n   *  can be either a DOM node, a string that is a selector to get a node, `false`\n   *  (if a node is explicitly NOT given), or a function that returns any of these\n   *  values.\n   * @param {string} optionName\n   * @returns {undefined | false | HTMLElement | SVGElement} Returns\n   *  `undefined` if the option is not specified; `false` if the option\n   *  resolved to `false` (node explicitly not given); otherwise, the resolved\n   *  DOM node.\n   * @throws {Error} If the option is set, not `false`, and is not, or does not\n   *  resolve to a node.\n   */\n  var getNodeForOption = function getNodeForOption(optionName) {\n    var optionValue = config[optionName];\n    if (typeof optionValue === 'function') {\n      for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        params[_key2 - 1] = arguments[_key2];\n      }\n      optionValue = optionValue.apply(void 0, params);\n    }\n    if (optionValue === true) {\n      optionValue = undefined; // use default value\n    }\n\n    if (!optionValue) {\n      if (optionValue === undefined || optionValue === false) {\n        return optionValue;\n      }\n      // else, empty string (invalid), null (invalid), 0 (invalid)\n\n      throw new Error(\"`\".concat(optionName, \"` was specified but was not a node, or did not return a node\"));\n    }\n    var node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n    if (typeof optionValue === 'string') {\n      node = doc.querySelector(optionValue); // resolve to node, or null if fails\n      if (!node) {\n        throw new Error(\"`\".concat(optionName, \"` as selector refers to no known node\"));\n      }\n    }\n    return node;\n  };\n  var getInitialFocusNode = function getInitialFocusNode() {\n    var node = getNodeForOption('initialFocus');\n\n    // false explicitly indicates we want no initialFocus at all\n    if (node === false) {\n      return false;\n    }\n    if (node === undefined || !isFocusable(node, config.tabbableOptions)) {\n      // option not specified nor focusable: use fallback options\n      if (findContainerIndex(doc.activeElement) >= 0) {\n        node = doc.activeElement;\n      } else {\n        var firstTabbableGroup = state.tabbableGroups[0];\n        var firstTabbableNode = firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n        // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n        node = firstTabbableNode || getNodeForOption('fallbackFocus');\n      }\n    }\n    if (!node) {\n      throw new Error('Your focus-trap needs to have at least one focusable element');\n    }\n    return node;\n  };\n  var updateTabbableNodes = function updateTabbableNodes() {\n    state.containerGroups = state.containers.map(function (container) {\n      var tabbableNodes = tabbable(container, config.tabbableOptions);\n\n      // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n      //  are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n      //  are focusable but not tabbable\n      var focusableNodes = focusable(container, config.tabbableOptions);\n      var firstTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n      var lastTabbableNode = tabbableNodes.length > 0 ? tabbableNodes[tabbableNodes.length - 1] : undefined;\n      var firstDomTabbableNode = focusableNodes.find(function (node) {\n        return isTabbable(node);\n      });\n      var lastDomTabbableNode = focusableNodes.slice().reverse().find(function (node) {\n        return isTabbable(node);\n      });\n      var posTabIndexesFound = !!tabbableNodes.find(function (node) {\n        return getTabIndex(node) > 0;\n      });\n      return {\n        container: container,\n        tabbableNodes: tabbableNodes,\n        focusableNodes: focusableNodes,\n        /** True if at least one node with positive `tabindex` was found in this container. */\n        posTabIndexesFound: posTabIndexesFound,\n        /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n        firstTabbableNode: firstTabbableNode,\n        /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n        lastTabbableNode: lastTabbableNode,\n        // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n        //  would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n        //  because that API doesn't work with Shadow DOM as well as it should (@see\n        //  https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n        //  to address an edge case related to positive tabindex support, this seems like a much easier,\n        //  \"close enough most of the time\" alternative for positive tabindexes which should generally\n        //  be avoided anyway...\n        /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n        firstDomTabbableNode: firstDomTabbableNode,\n        /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n        lastDomTabbableNode: lastDomTabbableNode,\n        /**\n         * Finds the __tabbable__ node that follows the given node in the specified direction,\n         *  in this container, if any.\n         * @param {HTMLElement} node\n         * @param {boolean} [forward] True if going in forward tab order; false if going\n         *  in reverse.\n         * @returns {HTMLElement|undefined} The next tabbable node, if any.\n         */\n        nextTabbableNode: function nextTabbableNode(node) {\n          var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n          var nodeIdx = tabbableNodes.indexOf(node);\n          if (nodeIdx < 0) {\n            // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n            //  since `node` should at least have been focusable, we assume that's the case and mimic\n            //  what browsers do, which is set focus to the next node in __document position order__,\n            //  regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n            //  above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n            //  basic DOM order\n            if (forward) {\n              return focusableNodes.slice(focusableNodes.indexOf(node) + 1).find(function (el) {\n                return isTabbable(el);\n              });\n            }\n            return focusableNodes.slice(0, focusableNodes.indexOf(node)).reverse().find(function (el) {\n              return isTabbable(el);\n            });\n          }\n          return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n        }\n      };\n    });\n    state.tabbableGroups = state.containerGroups.filter(function (group) {\n      return group.tabbableNodes.length > 0;\n    });\n\n    // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n    if (state.tabbableGroups.length <= 0 && !getNodeForOption('fallbackFocus') // returning false not supported for this option\n    ) {\n      throw new Error('Your focus-trap must have at least one container with at least one tabbable node in it at all times');\n    }\n\n    // NOTE: Positive tabindexes are only properly supported in single-container traps because\n    //  doing it across multiple containers where tabindexes could be all over the place\n    //  would require Tabbable to support multiple containers, would require additional\n    //  specialized Shadow DOM support, and would require Tabbable's multi-container support\n    //  to look at those containers in document position order rather than user-provided\n    //  order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n    //  https://github.com/focus-trap/focus-trap/issues/375 for more details.\n    if (state.containerGroups.find(function (g) {\n      return g.posTabIndexesFound;\n    }) && state.containerGroups.length > 1) {\n      throw new Error(\"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\");\n    }\n  };\n\n  /**\n   * Gets the current activeElement. If it's a web-component and has open shadow-root\n   * it will recursively search inside shadow roots for the \"true\" activeElement.\n   *\n   * @param {Document | ShadowRoot} el\n   *\n   * @returns {HTMLElement} The element that currently has the focus\n   **/\n  var getActiveElement = function getActiveElement(el) {\n    var activeElement = el.activeElement;\n    if (!activeElement) {\n      return;\n    }\n    if (activeElement.shadowRoot && activeElement.shadowRoot.activeElement !== null) {\n      return getActiveElement(activeElement.shadowRoot);\n    }\n    return activeElement;\n  };\n  var tryFocus = function tryFocus(node) {\n    if (node === false) {\n      return;\n    }\n    if (node === getActiveElement(document)) {\n      return;\n    }\n    if (!node || !node.focus) {\n      tryFocus(getInitialFocusNode());\n      return;\n    }\n    node.focus({\n      preventScroll: !!config.preventScroll\n    });\n    // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n    state.mostRecentlyFocusedNode = node;\n    if (isSelectableInput(node)) {\n      node.select();\n    }\n  };\n  var getReturnFocusNode = function getReturnFocusNode(previousActiveElement) {\n    var node = getNodeForOption('setReturnFocus', previousActiveElement);\n    return node ? node : node === false ? false : previousActiveElement;\n  };\n\n  /**\n   * Finds the next node (in either direction) where focus should move according to a\n   *  keyboard focus-in event.\n   * @param {Object} params\n   * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n   * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n   *  will be used to determine the `target`). Ignored if `target` is specified.\n   * @param {boolean} [params.isBackward] True if focus should move backward.\n   * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n   *  determined given the current state of the trap.\n   */\n  var findNextNavNode = function findNextNavNode(_ref2) {\n    var target = _ref2.target,\n      event = _ref2.event,\n      _ref2$isBackward = _ref2.isBackward,\n      isBackward = _ref2$isBackward === void 0 ? false : _ref2$isBackward;\n    target = target || getActualTarget(event);\n    updateTabbableNodes();\n    var destinationNode = null;\n    if (state.tabbableGroups.length > 0) {\n      // make sure the target is actually contained in a group\n      // NOTE: the target may also be the container itself if it's focusable\n      //  with tabIndex='-1' and was given initial focus\n      var containerIndex = findContainerIndex(target, event);\n      var containerGroup = containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n      if (containerIndex < 0) {\n        // target not found in any group: quite possible focus has escaped the trap,\n        //  so bring it back into...\n        if (isBackward) {\n          // ...the last node in the last group\n          destinationNode = state.tabbableGroups[state.tabbableGroups.length - 1].lastTabbableNode;\n        } else {\n          // ...the first node in the first group\n          destinationNode = state.tabbableGroups[0].firstTabbableNode;\n        }\n      } else if (isBackward) {\n        // REVERSE\n\n        // is the target the first tabbable node in a group?\n        var startOfGroupIndex = findIndex(state.tabbableGroups, function (_ref3) {\n          var firstTabbableNode = _ref3.firstTabbableNode;\n          return target === firstTabbableNode;\n        });\n        if (startOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target, false))) {\n          // an exception case where the target is either the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle shift+tab as if focus were on the container's\n          //  first tabbable node, and go to the last tabbable node of the LAST group\n          startOfGroupIndex = containerIndex;\n        }\n        if (startOfGroupIndex >= 0) {\n          // YES: then shift+tab should go to the last tabbable node in the\n          //  previous group (and wrap around to the last tabbable node of\n          //  the LAST group if it's the first tabbable node of the FIRST group)\n          var destinationGroupIndex = startOfGroupIndex === 0 ? state.tabbableGroups.length - 1 : startOfGroupIndex - 1;\n          var destinationGroup = state.tabbableGroups[destinationGroupIndex];\n          destinationNode = getTabIndex(target) >= 0 ? destinationGroup.lastTabbableNode : destinationGroup.lastDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target, false);\n        }\n      } else {\n        // FORWARD\n\n        // is the target the last tabbable node in a group?\n        var lastOfGroupIndex = findIndex(state.tabbableGroups, function (_ref4) {\n          var lastTabbableNode = _ref4.lastTabbableNode;\n          return target === lastTabbableNode;\n        });\n        if (lastOfGroupIndex < 0 && (containerGroup.container === target || isFocusable(target, config.tabbableOptions) && !isTabbable(target, config.tabbableOptions) && !containerGroup.nextTabbableNode(target))) {\n          // an exception case where the target is the container itself, or\n          //  a non-tabbable node that was given focus (i.e. tabindex is negative\n          //  and user clicked on it or node was programmatically given focus)\n          //  and is not followed by any other tabbable node, in which\n          //  case, we should handle tab as if focus were on the container's\n          //  last tabbable node, and go to the first tabbable node of the FIRST group\n          lastOfGroupIndex = containerIndex;\n        }\n        if (lastOfGroupIndex >= 0) {\n          // YES: then tab should go to the first tabbable node in the next\n          //  group (and wrap around to the first tabbable node of the FIRST\n          //  group if it's the last tabbable node of the LAST group)\n          var _destinationGroupIndex = lastOfGroupIndex === state.tabbableGroups.length - 1 ? 0 : lastOfGroupIndex + 1;\n          var _destinationGroup = state.tabbableGroups[_destinationGroupIndex];\n          destinationNode = getTabIndex(target) >= 0 ? _destinationGroup.firstTabbableNode : _destinationGroup.firstDomTabbableNode;\n        } else if (!isTabEvent(event)) {\n          // user must have customized the nav keys so we have to move focus manually _within_\n          //  the active group: do this based on the order determined by tabbable()\n          destinationNode = containerGroup.nextTabbableNode(target);\n        }\n      }\n    } else {\n      // no groups available\n      // NOTE: the fallbackFocus option does not support returning false to opt-out\n      destinationNode = getNodeForOption('fallbackFocus');\n    }\n    return destinationNode;\n  };\n\n  // This needs to be done on mousedown and touchstart instead of click\n  // so that it precedes the focus event.\n  var checkPointerDown = function checkPointerDown(e) {\n    var target = getActualTarget(e);\n    if (findContainerIndex(target, e) >= 0) {\n      // allow the click since it ocurred inside the trap\n      return;\n    }\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      // immediately deactivate the trap\n      trap.deactivate({\n        // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n        //  which will result in the outside click setting focus to the node\n        //  that was clicked (and if not focusable, to \"nothing\"); by setting\n        //  `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n        //  on activation (or the configured `setReturnFocus` node), whether the\n        //  outside click was on a focusable node or not\n        returnFocus: config.returnFocusOnDeactivate\n      });\n      return;\n    }\n\n    // This is needed for mobile devices.\n    // (If we'll only let `click` events through,\n    // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      // allow the click outside the trap to take place\n      return;\n    }\n\n    // otherwise, prevent the click\n    e.preventDefault();\n  };\n\n  // In case focus escapes the trap for some strange reason, pull it back in.\n  // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n  //  scrolling if the node that got focused was out of view; there's nothing we can do to\n  //  prevent that from happening by the time we discover that focus escaped\n  var checkFocusIn = function checkFocusIn(event) {\n    var target = getActualTarget(event);\n    var targetContained = findContainerIndex(target, event) >= 0;\n\n    // In Firefox when you Tab out of an iframe the Document is briefly focused.\n    if (targetContained || target instanceof Document) {\n      if (targetContained) {\n        state.mostRecentlyFocusedNode = target;\n      }\n    } else {\n      // escaped! pull it back in to where it just left\n      event.stopImmediatePropagation();\n\n      // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n      //  it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n      //  toward a node with a positive tab index\n      var nextNode; // next node to focus, if we find one\n      var navAcrossContainers = true;\n      if (state.mostRecentlyFocusedNode) {\n        if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n          // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n          var mruContainerIdx = findContainerIndex(state.mostRecentlyFocusedNode);\n          // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n          //  and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n          //  with at least one tabbable node in order to function, so this could be the other container\n          //  with nothing tabbable in it)\n          var tabbableNodes = state.containerGroups[mruContainerIdx].tabbableNodes;\n          if (tabbableNodes.length > 0) {\n            // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n            var mruTabIdx = tabbableNodes.findIndex(function (node) {\n              return node === state.mostRecentlyFocusedNode;\n            });\n            if (mruTabIdx >= 0) {\n              if (config.isKeyForward(state.recentNavEvent)) {\n                if (mruTabIdx + 1 < tabbableNodes.length) {\n                  nextNode = tabbableNodes[mruTabIdx + 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              } else {\n                if (mruTabIdx - 1 >= 0) {\n                  nextNode = tabbableNodes[mruTabIdx - 1];\n                  navAcrossContainers = false;\n                }\n                // else, don't wrap within the container as focus should move to next/previous\n                //  container\n              }\n              // else, don't find in container order without considering direction too\n            }\n          }\n          // else, no tabbable nodes in that container (which means we must have at least one other\n          //  container with at least one tabbable node in it, otherwise focus-trap would've thrown\n          //  an error the last time updateTabbableNodes() was run): find next node among all known\n          //  containers\n        } else {\n          // check to see if there's at least one tabbable node with a positive tab index inside\n          //  the trap because focus seems to escape when navigating backward from a tabbable node\n          //  with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n          //  the greatest positive tab index like it should)\n          if (!state.containerGroups.some(function (g) {\n            return g.tabbableNodes.some(function (n) {\n              return getTabIndex(n) > 0;\n            });\n          })) {\n            // no containers with tabbable nodes with positive tab indexes which means the focus\n            //  escaped for some other reason and we should just execute the fallback to the\n            //  MRU node or initial focus node, if any\n            navAcrossContainers = false;\n          }\n        }\n      } else {\n        // no MRU node means we're likely in some initial condition when the trap has just\n        //  been activated and initial focus hasn't been given yet, in which case we should\n        //  fall through to trying to focus the initial focus node, which is what should\n        //  happen below at this point in the logic\n        navAcrossContainers = false;\n      }\n      if (navAcrossContainers) {\n        nextNode = findNextNavNode({\n          // move FROM the MRU node, not event-related node (which will be the node that is\n          //  outside the trap causing the focus escape we're trying to fix)\n          target: state.mostRecentlyFocusedNode,\n          isBackward: config.isKeyBackward(state.recentNavEvent)\n        });\n      }\n      if (nextNode) {\n        tryFocus(nextNode);\n      } else {\n        tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n      }\n    }\n    state.recentNavEvent = undefined; // clear\n  };\n\n  // Hijack key nav events on the first and last focusable nodes of the trap,\n  // in order to prevent focus from escaping. If it escapes for even a\n  // moment it can end up scrolling the page and causing confusion so we\n  // kind of need to capture the action at the keydown phase.\n  var checkKeyNav = function checkKeyNav(event) {\n    var isBackward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    state.recentNavEvent = event;\n    var destinationNode = findNextNavNode({\n      event: event,\n      isBackward: isBackward\n    });\n    if (destinationNode) {\n      if (isTabEvent(event)) {\n        // since tab natively moves focus, we wouldn't have a destination node unless we\n        //  were on the edge of a container and had to move to the next/previous edge, in\n        //  which case we want to prevent default to keep the browser from moving focus\n        //  to where it normally would\n        event.preventDefault();\n      }\n      tryFocus(destinationNode);\n    }\n    // else, let the browser take care of [shift+]tab and move the focus\n  };\n\n  var checkKey = function checkKey(event) {\n    if (isEscapeEvent(event) && valueOrHandler(config.escapeDeactivates, event) !== false) {\n      event.preventDefault();\n      trap.deactivate();\n      return;\n    }\n    if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n      checkKeyNav(event, config.isKeyBackward(event));\n    }\n  };\n  var checkClick = function checkClick(e) {\n    var target = getActualTarget(e);\n    if (findContainerIndex(target, e) >= 0) {\n      return;\n    }\n    if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n      return;\n    }\n    if (valueOrHandler(config.allowOutsideClick, e)) {\n      return;\n    }\n    e.preventDefault();\n    e.stopImmediatePropagation();\n  };\n\n  //\n  // EVENT LISTENERS\n  //\n\n  var addListeners = function addListeners() {\n    if (!state.active) {\n      return;\n    }\n\n    // There can be only one listening focus trap at a time\n    activeFocusTraps.activateTrap(trapStack, trap);\n\n    // Delay ensures that the focused element doesn't capture the event\n    // that caused the focus trap activation.\n    state.delayInitialFocusTimer = config.delayInitialFocus ? delay(function () {\n      tryFocus(getInitialFocusNode());\n    }) : tryFocus(getInitialFocusNode());\n    doc.addEventListener('focusin', checkFocusIn, true);\n    doc.addEventListener('mousedown', checkPointerDown, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('touchstart', checkPointerDown, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('click', checkClick, {\n      capture: true,\n      passive: false\n    });\n    doc.addEventListener('keydown', checkKey, {\n      capture: true,\n      passive: false\n    });\n    return trap;\n  };\n  var removeListeners = function removeListeners() {\n    if (!state.active) {\n      return;\n    }\n    doc.removeEventListener('focusin', checkFocusIn, true);\n    doc.removeEventListener('mousedown', checkPointerDown, true);\n    doc.removeEventListener('touchstart', checkPointerDown, true);\n    doc.removeEventListener('click', checkClick, true);\n    doc.removeEventListener('keydown', checkKey, true);\n    return trap;\n  };\n\n  //\n  // MUTATION OBSERVER\n  //\n\n  var checkDomRemoval = function checkDomRemoval(mutations) {\n    var isFocusedNodeRemoved = mutations.some(function (mutation) {\n      var removedNodes = Array.from(mutation.removedNodes);\n      return removedNodes.some(function (node) {\n        return node === state.mostRecentlyFocusedNode;\n      });\n    });\n\n    // If the currently focused is removed then browsers will move focus to the\n    // <body> element. If this happens, try to move focus back into the trap.\n    if (isFocusedNodeRemoved) {\n      tryFocus(getInitialFocusNode());\n    }\n  };\n\n  // Use MutationObserver - if supported - to detect if focused node is removed\n  // from the DOM.\n  var mutationObserver = typeof window !== 'undefined' && 'MutationObserver' in window ? new MutationObserver(checkDomRemoval) : undefined;\n  var updateObservedNodes = function updateObservedNodes() {\n    if (!mutationObserver) {\n      return;\n    }\n    mutationObserver.disconnect();\n    if (state.active && !state.paused) {\n      state.containers.map(function (container) {\n        mutationObserver.observe(container, {\n          subtree: true,\n          childList: true\n        });\n      });\n    }\n  };\n\n  //\n  // TRAP DEFINITION\n  //\n\n  trap = {\n    get active() {\n      return state.active;\n    },\n    get paused() {\n      return state.paused;\n    },\n    activate: function activate(activateOptions) {\n      if (state.active) {\n        return this;\n      }\n      var onActivate = getOption(activateOptions, 'onActivate');\n      var onPostActivate = getOption(activateOptions, 'onPostActivate');\n      var checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n      if (!checkCanFocusTrap) {\n        updateTabbableNodes();\n      }\n      state.active = true;\n      state.paused = false;\n      state.nodeFocusedBeforeActivation = doc.activeElement;\n      onActivate === null || onActivate === void 0 || onActivate();\n      var finishActivation = function finishActivation() {\n        if (checkCanFocusTrap) {\n          updateTabbableNodes();\n        }\n        addListeners();\n        updateObservedNodes();\n        onPostActivate === null || onPostActivate === void 0 || onPostActivate();\n      };\n      if (checkCanFocusTrap) {\n        checkCanFocusTrap(state.containers.concat()).then(finishActivation, finishActivation);\n        return this;\n      }\n      finishActivation();\n      return this;\n    },\n    deactivate: function deactivate(deactivateOptions) {\n      if (!state.active) {\n        return this;\n      }\n      var options = _objectSpread2({\n        onDeactivate: config.onDeactivate,\n        onPostDeactivate: config.onPostDeactivate,\n        checkCanReturnFocus: config.checkCanReturnFocus\n      }, deactivateOptions);\n      clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n      state.delayInitialFocusTimer = undefined;\n      removeListeners();\n      state.active = false;\n      state.paused = false;\n      updateObservedNodes();\n      activeFocusTraps.deactivateTrap(trapStack, trap);\n      var onDeactivate = getOption(options, 'onDeactivate');\n      var onPostDeactivate = getOption(options, 'onPostDeactivate');\n      var checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n      var returnFocus = getOption(options, 'returnFocus', 'returnFocusOnDeactivate');\n      onDeactivate === null || onDeactivate === void 0 || onDeactivate();\n      var finishDeactivation = function finishDeactivation() {\n        delay(function () {\n          if (returnFocus) {\n            tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n          }\n          onPostDeactivate === null || onPostDeactivate === void 0 || onPostDeactivate();\n        });\n      };\n      if (returnFocus && checkCanReturnFocus) {\n        checkCanReturnFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation)).then(finishDeactivation, finishDeactivation);\n        return this;\n      }\n      finishDeactivation();\n      return this;\n    },\n    pause: function pause(pauseOptions) {\n      if (state.paused || !state.active) {\n        return this;\n      }\n      var onPause = getOption(pauseOptions, 'onPause');\n      var onPostPause = getOption(pauseOptions, 'onPostPause');\n      state.paused = true;\n      onPause === null || onPause === void 0 || onPause();\n      removeListeners();\n      updateObservedNodes();\n      onPostPause === null || onPostPause === void 0 || onPostPause();\n      return this;\n    },\n    unpause: function unpause(unpauseOptions) {\n      if (!state.paused || !state.active) {\n        return this;\n      }\n      var onUnpause = getOption(unpauseOptions, 'onUnpause');\n      var onPostUnpause = getOption(unpauseOptions, 'onPostUnpause');\n      state.paused = false;\n      onUnpause === null || onUnpause === void 0 || onUnpause();\n      updateTabbableNodes();\n      addListeners();\n      updateObservedNodes();\n      onPostUnpause === null || onPostUnpause === void 0 || onPostUnpause();\n      return this;\n    },\n    updateContainerElements: function updateContainerElements(containerElements) {\n      var elementsAsArray = [].concat(containerElements).filter(Boolean);\n      state.containers = elementsAsArray.map(function (element) {\n        return typeof element === 'string' ? doc.querySelector(element) : element;\n      });\n      if (state.active) {\n        updateTabbableNodes();\n      }\n      updateObservedNodes();\n      return this;\n    }\n  };\n\n  // initialize container elements\n  trap.updateContainerElements(elements);\n  return trap;\n};\n\nexport { createFocusTrap };\n//# sourceMappingURL=focus-trap.esm.js.map\n","/**\n * @copyright Copyright (c) 2022 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst n = function() {\n  return Object.assign(window, { _nc_focus_trap: window._nc_focus_trap || [] }), window._nc_focus_trap;\n};\nexport {\n  n as g\n};\n","import '../assets/NcPopover-MK4GcuPY.css';\nimport s, { defineComponent as a } from \"vue\";\nimport { Dropdown as i } from \"floating-vue\";\nimport { createFocusTrap as p } from \"focus-trap\";\nimport { g as l } from \"./focusTrap-Py2bQ9-r.mjs\";\nimport { n } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst u = a({\n  name: \"NcPopoverTriggerProvider\",\n  provide() {\n    return {\n      \"NcPopover:trigger:shown\": () => this.shown,\n      \"NcPopover:trigger:attrs\": () => this.triggerAttrs\n    };\n  },\n  props: {\n    shown: {\n      type: Boolean,\n      required: !0\n    },\n    popupRole: {\n      type: String,\n      default: void 0\n    }\n  },\n  computed: {\n    triggerAttrs() {\n      return {\n        \"aria-haspopup\": this.popupRole,\n        \"aria-expanded\": this.shown.toString()\n      };\n    }\n  },\n  render() {\n    return this.$scopedSlots.default?.({\n      attrs: this.triggerAttrs\n    });\n  }\n}), c = null, d = null;\nvar g = /* @__PURE__ */ n(\n  u,\n  c,\n  d,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst h = g.exports, f = {\n  name: \"NcPopover\",\n  components: {\n    Dropdown: i,\n    NcPopoverTriggerProvider: h\n  },\n  inheritAttrs: !1,\n  props: {\n    /**\n     * Show or hide the popper\n     * @see https://floating-vue.starpad.dev/api/#shown\n     */\n    shown: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Popup role\n     * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-haspopup#values\n     */\n    popupRole: {\n      type: String,\n      default: void 0,\n      validator: (t) => [\"menu\", \"listbox\", \"tree\", \"grid\", \"dialog\", \"true\"].includes(t)\n    },\n    popoverBaseClass: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Enable popover focus trap\n     */\n    focusTrap: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Set element to return focus to after focus trap deactivation\n     *\n     * @type {import('focus-trap').FocusTargetValueOrFalse}\n     */\n    setReturnFocus: {\n      default: void 0,\n      type: [HTMLElement, SVGElement, String, Boolean]\n    }\n  },\n  emits: [\n    \"after-show\",\n    \"after-hide\",\n    /**\n     * @see https://floating-vue.starpad.dev/api/#update-shown\n     */\n    \"update:shown\"\n  ],\n  data() {\n    return {\n      internalShown: this.shown\n    };\n  },\n  watch: {\n    shown(t) {\n      this.internalShown = t;\n    },\n    internalShown(t) {\n      this.$emit(\"update:shown\", t);\n    }\n  },\n  mounted() {\n    this.checkTriggerA11y();\n  },\n  beforeDestroy() {\n    this.clearFocusTrap(), this.clearEscapeStopPropagation();\n  },\n  methods: {\n    /**\n     * Check if the trigger has all required a11y attributes.\n     * Important to check custom trigger button.\n     */\n    checkTriggerA11y() {\n      window.OC?.debug && (this.getPopoverTriggerContainerElement().querySelector(\"[aria-expanded]\") || s.util.warn(\"It looks like you are using a custom button as a <NcPopover> or other popover #trigger. If you are not using <NcButton> as a trigger, you need to bind attrs from the #trigger slot props to your custom button. See <NcPopover> docs for an example.\"));\n    },\n    /**\n     * Remove incorrect aria-describedby attribute from the trigger.\n     * @see https://github.com/Akryum/floating-vue/blob/8d4f7125aae0e3ea00ba4093d6d2001ab15058f1/packages/floating-vue/src/components/Popper.ts#L734\n     */\n    removeFloatingVueAriaDescribedBy() {\n      const e = this.getPopoverTriggerContainerElement().querySelectorAll(\"[data-popper-shown]\");\n      for (const r of e)\n        r.removeAttribute(\"aria-describedby\");\n    },\n    /**\n     * @return {HTMLElement|undefined}\n     */\n    getPopoverContentElement() {\n      return this.$refs.popover?.$refs.popperContent?.$el;\n    },\n    /**\n     * @return {HTMLElement|undefined}\n     */\n    getPopoverTriggerContainerElement() {\n      return this.$refs.popover.$refs.reference;\n    },\n    /**\n     * Add focus trap for accessibility.\n     */\n    async useFocusTrap() {\n      if (await this.$nextTick(), !this.focusTrap)\n        return;\n      const t = this.getPopoverContentElement();\n      t && (this.$focusTrap = p(t, {\n        // Prevents to lose focus using esc key\n        // Focus will be release when popover be hide\n        escapeDeactivates: !1,\n        allowOutsideClick: !0,\n        setReturnFocus: this.setReturnFocus,\n        trapStack: l()\n      }), this.$focusTrap.activate());\n    },\n    /**\n     * Remove focus trap\n     *\n     * @param {object} options The configuration options for focusTrap\n     */\n    clearFocusTrap(t = {}) {\n      try {\n        this.$focusTrap?.deactivate(t), this.$focusTrap = null;\n      } catch (e) {\n        console.warn(e);\n      }\n    },\n    /**\n     * Add stopPropagation for Escape.\n     * It prevents global Escape handling after closing popover.\n     *\n     * Manual event handling is used here instead of v-on because there is no direct access to the node.\n     * Alternative - wrap <template #popover> in a div wrapper.\n     */\n    addEscapeStopPropagation() {\n      this.getPopoverContentElement()?.addEventListener(\"keydown\", this.stopKeydownEscapeHandler);\n    },\n    /**\n     * Remove stop Escape handler\n     */\n    clearEscapeStopPropagation() {\n      this.getPopoverContentElement()?.removeEventListener(\"keydown\", this.stopKeydownEscapeHandler);\n    },\n    /**\n     * @param {KeyboardEvent} event - native keydown event\n     */\n    stopKeydownEscapeHandler(t) {\n      t.type === \"keydown\" && t.key === \"Escape\" && t.stopPropagation();\n    },\n    afterShow() {\n      this.removeFloatingVueAriaDescribedBy(), this.$nextTick(() => {\n        this.$emit(\"after-show\"), this.useFocusTrap(), this.addEscapeStopPropagation();\n      });\n    },\n    afterHide() {\n      this.$emit(\"after-hide\"), this.clearFocusTrap(), this.clearEscapeStopPropagation();\n    }\n  }\n};\nvar m = function() {\n  var e = this, r = e._self._c;\n  return r(\"Dropdown\", e._g(e._b({ ref: \"popover\", attrs: { distance: 10, \"arrow-padding\": 10, \"no-auto-focus\": !0, \"popper-class\": e.popoverBaseClass, shown: e.internalShown }, on: { \"update:shown\": function(o) {\n    e.internalShown = o;\n  }, \"apply-show\": e.afterShow, \"apply-hide\": e.afterHide }, scopedSlots: e._u([{ key: \"popper\", fn: function() {\n    return [e._t(\"default\")];\n  }, proxy: !0 }], null, !0) }, \"Dropdown\", e.$attrs, !1), e.$listeners), [r(\"NcPopoverTriggerProvider\", { attrs: { shown: e.internalShown, \"popup-role\": e.popupRole }, scopedSlots: e._u([{ key: \"default\", fn: function(o) {\n    return [e._t(\"trigger\", null, null, o)];\n  } }], null, !0) })], 1);\n}, w = [], v = /* @__PURE__ */ n(\n  f,\n  m,\n  w,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst E = v.exports;\nexport {\n  E as N\n};\n","import { n as l } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst n = {\n  name: \"DotsHorizontalIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar r = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon dots-horizontal-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(i) {\n    return t.$emit(\"click\", i);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, s = [], a = /* @__PURE__ */ l(\n  n,\n  r,\n  s,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as D\n};\n","import '../assets/NcActions-mt8BQ_bn.css';\nimport F from \"../Components/NcButton.mjs\";\nimport { N as k } from \"./NcPopover-93ns_0K4.mjs\";\nimport { G as M } from \"./GenRandomId-VodkdWbp.mjs\";\nimport { g as S } from \"./focusTrap-Py2bQ9-r.mjs\";\nimport { r as $, o as E, a as B } from \"./_l10n-9dioj9MT.mjs\";\nimport O, { computed as R } from \"vue\";\nimport { D as L } from \"./DotsHorizontal-IbmXTXRA.mjs\";\nimport { n as _ } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\n$(E);\nconst m = \".focusable\", D = {\n  name: \"NcActions\",\n  components: {\n    NcButton: F,\n    DotsHorizontal: L,\n    NcPopover: k\n  },\n  provide() {\n    return {\n      /**\n       * NcActions can be used as:\n       * - Application menu (has menu role)\n       * - Navigation (has no specific role, should be used an element with navigation role)\n       * - Popover with plain text or text inputs (has no specific role)\n       * Depending on the usage (used items), the menu and its items should have different roles for a11y.\n       * Provide the role for NcAction* components in the NcActions content.\n       * @type {import('vue').ComputedRef<boolean>}\n       */\n      \"NcActions:isSemanticMenu\": R(() => this.actionsMenuSemanticType === \"menu\")\n    };\n  },\n  props: {\n    /**\n     * Specify the open state of the popover menu\n     */\n    open: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * This disables the internal open management,\n     * so the actions menu only respects the `open` prop.\n     * This is e.g. necessary for the NcAvatar component\n     * to only open the actions menu after loading it's entries has finished.\n     */\n    manualOpen: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Force the actions to display in a three dot menu\n     */\n    forceMenu: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Force the name to show for single actions\n     */\n    forceName: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Specify the menu name\n     */\n    menuName: {\n      type: String,\n      default: null\n    },\n    /**\n     * Apply primary styling for this menu\n     */\n    primary: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Specifies the button type used for trigger and single actions buttons\n     * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n     * the default button style will be applied.\n     */\n    type: {\n      type: String,\n      validator(t) {\n        return [\"primary\", \"secondary\", \"tertiary\", \"tertiary-no-background\", \"tertiary-on-primary\", \"error\", \"warning\", \"success\"].indexOf(t) !== -1;\n      },\n      default: null\n    },\n    /**\n     * Icon to show for the toggle menu button\n     * when more than one action is inside the actions component.\n     * Only replace the default three-dot icon if really necessary.\n     */\n    defaultIcon: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Aria label for the actions menu.\n     *\n     * If `menuName` is defined this will not be used to prevent\n     * any accessible name conflicts. This ensures that the\n     * element can be activated via voice input.\n     */\n    ariaLabel: {\n      type: String,\n      default: B(\"Actions\")\n    },\n    /**\n     * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n     * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n     * otherwise root element will inherit incorrect aria-hidden.\n     */\n    ariaHidden: {\n      type: Boolean,\n      default: null\n    },\n    /**\n     * Wanted direction of the menu\n     */\n    placement: {\n      type: String,\n      default: \"bottom\"\n    },\n    /**\n     * DOM element for the actions' popover boundaries\n     */\n    boundariesElement: {\n      type: Element,\n      default: () => document.querySelector(\"body\")\n    },\n    /**\n     * Selector for the actions' popover container\n     */\n    container: {\n      type: [String, Object, Element, Boolean],\n      default: \"body\"\n    },\n    /**\n     * Disabled state of the main button (single action or menu toggle)\n     */\n    disabled: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Display x items inline out of the dropdown menu\n     * Will be ignored if `forceMenu` is set\n     */\n    inline: {\n      type: Number,\n      default: 0\n    }\n  },\n  emits: [\n    \"open\",\n    \"update:open\",\n    \"close\",\n    \"focus\",\n    \"blur\",\n    \"click\"\n  ],\n  data() {\n    return {\n      opened: this.open,\n      focusIndex: 0,\n      randomId: `menu-${M()}`,\n      /**\n       * @type {'menu'|'navigation'|'dialog'|'tooltip'|'unknown'}\n       */\n      actionsMenuSemanticType: \"unknown\",\n      externalFocusTrapStack: []\n    };\n  },\n  computed: {\n    triggerBtnType() {\n      return this.type || (this.primary ? \"primary\" : this.menuName ? \"secondary\" : \"tertiary\");\n    },\n    /**\n     * A11y roles and keyboard navigation configuration depending on the semantic type\n     */\n    config() {\n      return {\n        menu: {\n          popupRole: \"menu\",\n          withArrowNavigation: !0,\n          withTabNavigation: !1,\n          withFocusTrap: !1\n        },\n        navigation: {\n          popupRole: void 0,\n          withArrowNavigation: !1,\n          withTabNavigation: !0,\n          withFocusTrap: !1\n        },\n        dialog: {\n          popupRole: \"dialog\",\n          withArrowNavigation: !1,\n          withTabNavigation: !0,\n          withFocusTrap: !0\n        },\n        tooltip: {\n          popupRole: void 0,\n          withArrowNavigation: !1,\n          withTabNavigation: !1,\n          withFocusTrap: !1\n        },\n        // Due to Vue limitations, we sometimes cannot determine the true type\n        // As a fallback use both arrow navigation and focus trap\n        unknown: {\n          popupRole: void 0,\n          role: void 0,\n          withArrowNavigation: !0,\n          withTabNavigation: !1,\n          withFocusTrap: !0\n        }\n      }[this.actionsMenuSemanticType];\n    },\n    withFocusTrap() {\n      return this.config.withFocusTrap;\n    }\n  },\n  watch: {\n    // Watch parent prop\n    open(t) {\n      t !== this.opened && (this.opened = t);\n    },\n    opened() {\n      this.intersectIntoCurrentFocusTrapStack();\n    }\n  },\n  methods: {\n    /**\n     * Get the name of the action component\n     *\n     * @param {import('vue').VNode} action - a vnode with a NcAction* component instance\n     * @return {string} the name of the action component\n     */\n    getActionName(t) {\n      return t?.componentOptions?.Ctor?.extendOptions?.name ?? t?.componentOptions?.tag;\n    },\n    /**\n     * When the component has its own focus trap, then it is managed by global trap stack by focus-trap.\n     *\n     * However if the component has no focus trap and is used inside another focus trap - there is an issue.\n     * By default popover content is rendered in body or other container, which is likely outside the current focus trap containers.\n     * It results in broken behavior from focus-trap.\n     *\n     * We need to pause all the focus traps for opening popover and then unpause them back after closing.\n     */\n    intersectIntoCurrentFocusTrapStack() {\n      if (!this.config.withFocusTrap)\n        if (this.opened) {\n          this.externalFocusTrapStack = [...S()];\n          for (const t of this.externalFocusTrapStack)\n            t.pause();\n        } else {\n          for (const t of this.externalFocusTrapStack)\n            t.unpause();\n          this.externalFocusTrapStack = [];\n        }\n    },\n    /**\n     * Do we have exactly one Action and\n     * is it allowed as a standalone element?\n     *\n     * @param {import('vue').VNode} action The action to check\n     * @return {boolean}\n     */\n    isValidSingleAction(t) {\n      return [\"NcActionButton\", \"NcActionLink\", \"NcActionRouter\"].includes(this.getActionName(t));\n    },\n    /**\n     * Check whether a icon prop value is an URL or not\n     * @param {string} url The icon prop value\n     */\n    isIconUrl(t) {\n      try {\n        return !!new URL(t, t.startsWith(\"/\") ? window.location.origin : void 0);\n      } catch {\n        return !1;\n      }\n    },\n    // MENU STATE MANAGEMENT\n    openMenu(t) {\n      this.opened || (this.opened = !0, this.$emit(\"update:open\", !0), this.$emit(\"open\"));\n    },\n    async closeMenu(t = !0) {\n      this.opened && (await this.$nextTick(), this.opened = !1, this.$refs.popover.clearFocusTrap({ returnFocus: t }), this.$emit(\"update:open\", !1), this.$emit(\"close\"), this.focusIndex = 0, t && this.$refs.menuButton.$el.focus());\n    },\n    onOpen(t) {\n      this.$nextTick(() => {\n        this.focusFirstAction(t);\n      });\n    },\n    // MENU KEYS & FOCUS MANAGEMENT\n    /**\n     * @return {HTMLElement|null}\n     */\n    getCurrentActiveMenuItemElement() {\n      return this.$refs.menu.querySelector(\"li.active\");\n    },\n    /**\n     * @return {NodeListOf<HTMLElement>}\n     */\n    getFocusableMenuItemElements() {\n      return this.$refs.menu.querySelectorAll(m);\n    },\n    /**\n     * Focus nearest focusable item on mouse move.\n     * DO NOT change the focus if the target is already focused\n     * this will prevent issues with input being unfocused\n     * on mouse move\n     * @param {PointerEvent} event - The mouse move event\n     */\n    onMouseFocusAction(t) {\n      if (document.activeElement === t.target)\n        return;\n      const n = t.target.closest(\"li\");\n      if (n && this.$refs.menu.contains(n)) {\n        const i = n.querySelector(m);\n        if (i) {\n          const s = [...this.getFocusableMenuItemElements()].indexOf(i);\n          s > -1 && (this.focusIndex = s, this.focusAction());\n        }\n      }\n    },\n    /**\n     * Dispatches the keydown listener to different handlers\n     *\n     * @param {object} event The keydown event\n     */\n    onKeydown(t) {\n      if (t.key === \"Tab\") {\n        if (this.config.withFocusTrap)\n          return;\n        if (!this.config.withTabNavigation) {\n          this.closeMenu(!0);\n          return;\n        }\n        t.preventDefault();\n        const n = this.getFocusableMenuItemElements(), i = [...n].indexOf(document.activeElement);\n        if (i === -1)\n          return;\n        const o = t.shiftKey ? i - 1 : i + 1;\n        (o < 0 || o === n.length) && this.closeMenu(!0), this.focusIndex = o, this.focusAction();\n        return;\n      }\n      this.config.withArrowNavigation && (t.key === \"ArrowUp\" && this.focusPreviousAction(t), t.key === \"ArrowDown\" && this.focusNextAction(t), t.key === \"PageUp\" && this.focusFirstAction(t), t.key === \"PageDown\" && this.focusLastAction(t)), t.key === \"Escape\" && (this.closeMenu(), t.preventDefault());\n    },\n    onTriggerKeydown(t) {\n      t.key === \"Escape\" && this.actionsMenuSemanticType === \"tooltip\" && this.closeMenu();\n    },\n    removeCurrentActive() {\n      const t = this.$refs.menu.querySelector(\"li.active\");\n      t && t.classList.remove(\"active\");\n    },\n    focusAction() {\n      const t = this.getFocusableMenuItemElements()[this.focusIndex];\n      if (t) {\n        this.removeCurrentActive();\n        const n = t.closest(\"li.action\");\n        t.focus(), n && n.classList.add(\"active\");\n      }\n    },\n    focusPreviousAction(t) {\n      this.opened && (this.focusIndex === 0 ? this.focusLastAction(t) : (this.preventIfEvent(t), this.focusIndex = this.focusIndex - 1), this.focusAction());\n    },\n    focusNextAction(t) {\n      if (this.opened) {\n        const n = this.getFocusableMenuItemElements().length - 1;\n        this.focusIndex === n ? this.focusFirstAction(t) : (this.preventIfEvent(t), this.focusIndex = this.focusIndex + 1), this.focusAction();\n      }\n    },\n    focusFirstAction(t) {\n      if (this.opened) {\n        this.preventIfEvent(t);\n        const n = [...this.getFocusableMenuItemElements()].findIndex((i) => i.getAttribute(\"aria-checked\") === \"true\" && i.getAttribute(\"role\") === \"menuitemradio\");\n        this.focusIndex = n > -1 ? n : 0, this.focusAction();\n      }\n    },\n    focusLastAction(t) {\n      this.opened && (this.preventIfEvent(t), this.focusIndex = this.getFocusableMenuItemElements().length - 1, this.focusAction());\n    },\n    preventIfEvent(t) {\n      t && (t.preventDefault(), t.stopPropagation());\n    },\n    onFocus(t) {\n      this.$emit(\"focus\", t);\n    },\n    onBlur(t) {\n      this.$emit(\"blur\", t), this.actionsMenuSemanticType === \"tooltip\" && this.$refs.menu && this.getFocusableMenuItemElements().length === 0 && this.closeMenu(!1);\n    },\n    onClick(t) {\n      this.$emit(\"click\", t);\n    }\n  },\n  /**\n   * The render function to display the component\n   *\n   * @param {Function} h The function to create VNodes\n   * @return {object|undefined} The created VNode\n   */\n  render(t) {\n    const n = (this.$slots.default || []).filter((e) => this.getActionName(e));\n    if (n.length === 0)\n      return;\n    let i = n.filter(this.isValidSingleAction);\n    this.forceMenu && i.length > 0 && this.inline > 0 && (O.util.warn(\"Specifying forceMenu will ignore any inline actions rendering.\"), i = []);\n    const o = i.slice(0, this.inline), s = n.filter((e) => !o.includes(e)), g = [\"NcActionButton\", \"NcActionButtonGroup\", \"NcActionCheckbox\", \"NcActionRadio\"], y = [\"NcActionInput\", \"NcActionTextEditable\"], A = [\"NcActionLink\", \"NcActionRouter\"], b = s.some((e) => y.includes(this.getActionName(e))), w = s.some((e) => g.includes(this.getActionName(e))), I = s.some((e) => A.includes(this.getActionName(e)));\n    b ? this.actionsMenuSemanticType = \"dialog\" : w ? this.actionsMenuSemanticType = \"menu\" : I ? this.actionsMenuSemanticType = \"navigation\" : n.filter((c) => this.getActionName(c).startsWith(\"NcAction\")).length === n.length ? this.actionsMenuSemanticType = \"tooltip\" : this.actionsMenuSemanticType = \"unknown\";\n    const f = (e) => {\n      const c = e?.componentOptions?.propsData?.icon, r = e?.data?.scopedSlots?.icon()?.[0] ?? (this.isIconUrl(c) ? t(\"img\", { class: \"action-item__menutoggle__icon\", attrs: { src: c, alt: \"\" } }) : t(\"span\", { class: [\"icon\", c] })), T = e?.data?.attrs || {}, u = e?.componentOptions?.listeners?.click, l = e?.componentOptions?.children?.[0]?.text?.trim?.(), N = e?.componentOptions?.propsData?.ariaLabel || l, d = this.forceName ? l : \"\";\n      let p = e?.componentOptions?.propsData?.title;\n      this.forceName || p || (p = l);\n      const a = { ...e?.componentOptions?.propsData ?? {} }, v = [\"submit\", \"reset\"].includes(a.type) ? a.modelValue : \"button\";\n      return delete a.modelValue, delete a.type, t(\n        \"NcButton\",\n        {\n          class: [\n            \"action-item action-item--single\",\n            e?.data?.staticClass,\n            e?.data?.class\n          ],\n          attrs: {\n            ...T,\n            \"aria-label\": N,\n            title: p\n          },\n          ref: e?.data?.ref,\n          props: {\n            // If it has a menuName, we use a secondary button\n            type: this.type || (d ? \"secondary\" : \"tertiary\"),\n            disabled: this.disabled || e?.componentOptions?.propsData?.disabled,\n            pressed: e?.componentOptions?.propsData?.modelValue,\n            nativeType: v,\n            ...a\n          },\n          on: {\n            focus: this.onFocus,\n            blur: this.onBlur,\n            // forward any pressed state from NcButton just like NcActionButton does\n            \"update:pressed\": e?.componentOptions?.listeners?.[\"update:modelValue\"] ?? (() => {\n            }),\n            // If we have a click listener,\n            // we bind it to execute on click and forward the click event\n            ...!!u && {\n              click: (x) => {\n                u && u(x);\n              }\n            }\n          }\n        },\n        [\n          t(\"template\", { slot: \"icon\" }, [r]),\n          d\n        ]\n      );\n    }, h = (e) => {\n      const c = this.$slots.icon?.[0] || (this.defaultIcon ? t(\"span\", { class: [\"icon\", this.defaultIcon] }) : t(\"DotsHorizontal\", {\n        props: {\n          size: 20\n        }\n      })), r = `${this.randomId}-trigger`;\n      return t(\n        \"NcPopover\",\n        {\n          ref: \"popover\",\n          props: {\n            delay: 0,\n            handleResize: !0,\n            shown: this.opened,\n            placement: this.placement,\n            boundary: this.boundariesElement,\n            container: this.container,\n            popoverBaseClass: \"action-item__popper\",\n            popupRole: this.config.popupRole,\n            setReturnFocus: this.config.withFocusTrap ? this.$refs.menuButton?.$el : null,\n            focusTrap: this.config.withFocusTrap\n          },\n          // For some reason the popover component\n          // does not react to props given under the 'props' key,\n          // so we use both 'attrs' and 'props'\n          attrs: {\n            delay: 0,\n            handleResize: !0,\n            shown: this.opened,\n            placement: this.placement,\n            boundary: this.boundariesElement,\n            container: this.container,\n            ...this.manualOpen && { triggers: [] }\n          },\n          on: {\n            show: this.openMenu,\n            \"after-show\": this.onOpen,\n            hide: this.closeMenu\n          }\n        },\n        [\n          t(\"NcButton\", {\n            class: \"action-item__menutoggle\",\n            props: {\n              type: this.triggerBtnType,\n              disabled: this.disabled\n            },\n            slot: \"trigger\",\n            ref: \"menuButton\",\n            attrs: {\n              id: r,\n              \"aria-label\": this.menuName ? null : this.ariaLabel,\n              // 'aria-controls' should only present together with a valid aria-haspopup\n              \"aria-controls\": this.opened && this.config.popupRole ? this.randomId : null\n            },\n            on: {\n              focus: this.onFocus,\n              blur: this.onBlur,\n              click: this.onClick,\n              keydown: this.onTriggerKeydown\n            }\n          }, [\n            t(\"template\", { slot: \"icon\" }, [c]),\n            this.menuName\n          ]),\n          t(\"div\", {\n            class: {\n              open: this.opened\n            },\n            attrs: {\n              tabindex: \"-1\"\n            },\n            on: {\n              keydown: this.onKeydown,\n              mousemove: this.onMouseFocusAction\n            },\n            ref: \"menu\"\n          }, [\n            t(\"ul\", {\n              attrs: {\n                id: this.randomId,\n                tabindex: \"-1\",\n                role: this.config.popupRole,\n                // Dialog must have a label\n                \"aria-labelledby\": this.actionsMenuSemanticType === \"dialog\" ? r : void 0,\n                \"aria-modal\": this.actionsMenuSemanticType === \"dialog\" ? \"true\" : void 0\n              }\n            }, [\n              e\n            ])\n          ])\n        ]\n      );\n    };\n    return n.length === 1 && i.length === 1 && !this.forceMenu ? f(n[0]) : (this.$nextTick(() => {\n      this.opened && this.$refs.menu && (this.$refs.menu.querySelector(\"li.active\") || []).length === 0 && this.focusFirstAction();\n    }), o.length > 0 && this.inline > 0 ? t(\n      \"div\",\n      {\n        class: [\n          \"action-items\",\n          `action-item--${this.triggerBtnType}`\n        ]\n      },\n      [\n        // Render inline actions\n        ...o.map(f),\n        // render the rest within the popover menu\n        s.length > 0 ? t(\n          \"div\",\n          {\n            class: [\n              \"action-item\",\n              {\n                \"action-item--open\": this.opened\n              }\n            ]\n          },\n          [\n            h(s)\n          ]\n        ) : null\n      ]\n    ) : t(\n      \"div\",\n      {\n        class: [\n          \"action-item action-item--default-popover\",\n          `action-item--${this.triggerBtnType}`,\n          {\n            \"action-item--open\": this.opened\n          }\n        ]\n      },\n      [\n        h(n)\n      ]\n    ));\n  }\n}, C = null, P = null;\nvar V = /* @__PURE__ */ _(\n  D,\n  C,\n  P,\n  !1,\n  null,\n  \"4131bd38\",\n  null,\n  null\n);\nconst J = V.exports;\nexport {\n  J as N\n};\n","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst t = {\n  beforeUpdate() {\n    this.text = this.getText();\n  },\n  data() {\n    return {\n      // $slots are not reactive.\n      // We need to update  the content manually\n      text: this.getText()\n    };\n  },\n  computed: {\n    isLongText() {\n      return this.text && this.text.trim().length > 20;\n    }\n  },\n  methods: {\n    getText() {\n      return this.$slots.default ? this.$slots.default[0].text.trim() : \"\";\n    }\n  }\n};\nexport {\n  t as A\n};\n","import { A as n } from \"./actionGlobal-fRayfdEK.mjs\";\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst o = function(i, t) {\n  let e = i.$parent;\n  for (; e; ) {\n    if (e.$options.name === t)\n      return e;\n    e = e.$parent;\n  }\n};\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst r = {\n  mixins: [n],\n  props: {\n    /**\n     * Icon to show with the action, can be either a CSS class or an URL\n     */\n    icon: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * The main text content of the entry.\n     */\n    name: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * The title attribute of the element.\n     */\n    title: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Whether we close the Actions menu after the click\n     */\n    closeAfterClick: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Aria label for the button. Not needed if the button has text.\n     */\n    ariaLabel: {\n      type: String,\n      default: null\n    },\n    /**\n     * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n     * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n     * otherwise root element will inherit incorrect aria-hidden.\n     */\n    ariaHidden: {\n      type: Boolean,\n      default: null\n    }\n  },\n  emits: [\n    \"click\"\n  ],\n  computed: {\n    /**\n     * Check if icon prop is an URL\n     * @return {boolean} Whether the icon prop is an URL\n     */\n    isIconUrl() {\n      try {\n        return !!new URL(this.icon, this.icon.startsWith(\"/\") ? window.location.origin : void 0);\n      } catch {\n        return !1;\n      }\n    }\n  },\n  methods: {\n    onClick(i) {\n      if (this.$emit(\"click\", i), this.closeAfterClick) {\n        const t = o(this, \"NcActions\");\n        t && t.closeMenu && t.closeMenu(!1);\n      }\n    }\n  }\n};\nexport {\n  r as A\n};\n","import '../assets/NcActionLink-zdzQgwtH.css';\nimport { A as a } from \"../chunks/actionText-bMy_49i8.mjs\";\nimport { n as i } from \"../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst r = {\n  name: \"NcActionLink\",\n  mixins: [a],\n  inject: {\n    isInSemanticMenu: {\n      from: \"NcActions:isSemanticMenu\",\n      default: !1\n    }\n  },\n  props: {\n    /**\n     * destionation to link to\n     */\n    href: {\n      type: String,\n      default: \"#\",\n      required: !0,\n      validator: (e) => {\n        try {\n          return new URL(e);\n        } catch {\n          return e.startsWith(\"#\") || e.startsWith(\"/\");\n        }\n      }\n    },\n    /**\n     * download the link instead of opening\n     */\n    download: {\n      type: String,\n      default: null\n    },\n    /**\n     * target to open the link\n     */\n    target: {\n      type: String,\n      default: \"_self\",\n      validator: (e) => e && (!e.startsWith(\"_\") || [\"_blank\", \"_self\", \"_parent\", \"_top\"].indexOf(e) > -1)\n    },\n    /**\n     * Declares a native tooltip when not null\n     */\n    title: {\n      type: String,\n      default: null\n    },\n    /**\n     * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n     * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n     * otherwise root element will inherit incorrect aria-hidden.\n     */\n    ariaHidden: {\n      type: Boolean,\n      default: null\n    }\n  }\n};\nvar s = function() {\n  var t = this, n = t._self._c;\n  return n(\"li\", { staticClass: \"action\", attrs: { role: t.isInSemanticMenu && \"presentation\" } }, [n(\"a\", { staticClass: \"action-link focusable\", attrs: { download: t.download, href: t.href, \"aria-label\": t.ariaLabel, target: t.target, title: t.title, rel: \"nofollow noreferrer noopener\", role: t.isInSemanticMenu && \"menuitem\" }, on: { click: t.onClick } }, [t._t(\"icon\", function() {\n    return [n(\"span\", { staticClass: \"action-link__icon\", class: [t.isIconUrl ? \"action-link__icon--url\" : t.icon], style: { backgroundImage: t.isIconUrl ? `url(${t.icon})` : null }, attrs: { \"aria-hidden\": \"true\" } })];\n  }), t.name ? n(\"span\", { staticClass: \"action-link__longtext-wrapper\" }, [n(\"strong\", { staticClass: \"action-link__name\" }, [t._v(\" \" + t._s(t.name) + \" \")]), n(\"br\"), n(\"span\", { staticClass: \"action-link__longtext\", domProps: { textContent: t._s(t.text) } })]) : t.isLongText ? n(\"span\", { staticClass: \"action-link__longtext\", domProps: { textContent: t._s(t.text) } }) : n(\"span\", { staticClass: \"action-link__text\" }, [t._v(t._s(t.text))]), t._e()], 2)]);\n}, o = [], l = /* @__PURE__ */ i(\n  r,\n  s,\n  o,\n  !1,\n  null,\n  \"c0bc0588\",\n  null,\n  null\n);\nconst u = l.exports;\nexport {\n  u as default\n};\n","const R = (n, e) => u(n, \"\", e), g = (n) => \"/remote.php/\" + n, U = (n, e) => {\n  var o;\n  return ((o = e == null ? void 0 : e.baseURL) != null ? o : w()) + g(n);\n}, v = (n, e, o) => {\n  var c;\n  const i = Object.assign({\n    ocsVersion: 2\n  }, o || {}).ocsVersion === 1 ? 1 : 2;\n  return ((c = o == null ? void 0 : o.baseURL) != null ? c : w()) + \"/ocs/v\" + i + \".php\" + d(n, e, o);\n}, d = (n, e, o) => {\n  const c = Object.assign({\n    escape: !0\n  }, o || {}), s = function(i, r) {\n    return r = r || {}, i.replace(\n      /{([^{}]*)}/g,\n      function(l, t) {\n        const a = r[t];\n        return c.escape ? encodeURIComponent(typeof a == \"string\" || typeof a == \"number\" ? a.toString() : l) : typeof a == \"string\" || typeof a == \"number\" ? a.toString() : l;\n      }\n    );\n  };\n  return n.charAt(0) !== \"/\" && (n = \"/\" + n), s(n, e || {});\n}, _ = (n, e, o) => {\n  var c, s, i;\n  const r = Object.assign({\n    noRewrite: !1\n  }, o || {}), l = (c = o == null ? void 0 : o.baseURL) != null ? c : f();\n  return ((i = (s = window == null ? void 0 : window.OC) == null ? void 0 : s.config) == null ? void 0 : i.modRewriteWorking) === !0 && !r.noRewrite ? l + d(n, e, o) : l + \"/index.php\" + d(n, e, o);\n}, h = (n, e) => e.indexOf(\".\") === -1 ? u(n, \"img\", e + \".svg\") : u(n, \"img\", e), u = (n, e, o) => {\n  var c, s, i;\n  const r = (i = (s = (c = window == null ? void 0 : window.OC) == null ? void 0 : c.coreApps) == null ? void 0 : s.includes(n)) != null ? i : !1, l = o.slice(-3) === \"php\";\n  let t = f();\n  return l && !r ? (t += \"/index.php/apps/\".concat(n), e && (t += \"/\".concat(encodeURI(e))), o !== \"index.php\" && (t += \"/\".concat(o))) : !l && !r ? (t = b(n), e && (t += \"/\".concat(e, \"/\")), t.at(-1) !== \"/\" && (t += \"/\"), t += o) : ((n === \"settings\" || n === \"core\" || n === \"search\") && e === \"ajax\" && (t += \"/index.php\"), n && (t += \"/\".concat(n)), e && (t += \"/\".concat(e)), t += \"/\".concat(o)), t;\n}, w = () => window.location.protocol + \"//\" + window.location.host + f();\nfunction f() {\n  let n = window._oc_webroot;\n  if (typeof n > \"u\") {\n    n = location.pathname;\n    const e = n.indexOf(\"/index.php/\");\n    if (e !== -1)\n      n = n.slice(0, e);\n    else {\n      const o = n.indexOf(\"/\", 1);\n      n = n.slice(0, o > 0 ? o : void 0);\n    }\n  }\n  return n;\n}\nfunction b(n) {\n  var e, o;\n  return (o = ((e = window._oc_appswebroots) != null ? e : {})[n]) != null ? o : \"\";\n}\nexport {\n  u as generateFilePath,\n  v as generateOcsUrl,\n  U as generateRemoteUrl,\n  _ as generateUrl,\n  b as getAppRootUrl,\n  w as getBaseUrl,\n  f as getRootUrl,\n  h as imagePath,\n  R as linkTo\n};\n","import { loadState as i } from \"@nextcloud/initial-state\";\nfunction e() {\n  try {\n    return i(\"core\", \"capabilities\");\n  } catch {\n    return console.debug(\"Could not find capabilities initial state fall back to _oc_capabilities\"), \"_oc_capabilities\" in window ? window._oc_capabilities : {};\n  }\n}\nexport {\n  e as getCapabilities\n};\n","import '../assets/NcUserStatusIcon-62u43_6P.css';\nimport o from \"vue\";\nimport l from \"@nextcloud/axios\";\nimport { generateOcsUrl as c } from \"@nextcloud/router\";\nimport { getCapabilities as u } from \"@nextcloud/capabilities\";\nimport { r, J as d, a as e, K as h } from \"./_l10n-9dioj9MT.mjs\";\nimport { n as v } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst f = `<!-- This icon is part of Material UI Icons. Copyright 2020 Google Inc., Apache-2.0 License -->\n<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<path fill=\"var(--color-success)\" d=\"M4.8 11.2h6.4V4.8H4.8v6.4zM8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\" />\n</svg>\n`, n = `<!-- This icon is part of Material UI Icons. Copyright 2020 Google Inc., Apache-2.0 License -->\n<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<path fill=\"none\" d=\"M-4-4h24v24H-4z\" />\n\t<path fill=\"var(--color-warning)\" d=\"M6.9.1C3 .6-.1 4-.1 8c0 4.4 3.6 8 8 8 4 0 7.4-3 8-6.9-1.2 1.3-2.9 2.1-4.7 2.1-3.5 0-6.4-2.9-6.4-6.4 0-1.9.8-3.6 2.1-4.7z\" />\n</svg>\n`, p = `<!-- This icon is part of Material UI Icons. Copyright 2020 Google Inc., Apache-2.0 License -->\n<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<path fill=\"none\" d=\"M-4-4h24v24H-4V-4z\" />\n\t<path fill=\"var(--color-error)\" d=\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8z\" />\n\t<path fill=\"#fdffff\" d=\"M5 6.5h6c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5H5c-.8 0-1.5-.7-1.5-1.5S4.2 6.5 5 6.5z\" />\n</svg>\n`, i = `<!-- This icon is part of Material UI Icons. Copyright 2020 Google Inc., Apache-2.0 License -->\n<svg viewBox=\"0 0 16 16\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<path fill=\"none\" d=\"M-4-4h24v24H-4V-4z\" />\n\t<path d=\"M8 0C3.6 0 0 3.6 0 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm0 3.2c2.7 0 4.8 2.1 4.8 4.8s-2.1 4.8-4.8 4.8S3.2 10.7 3.2 8 5.3 3.2 8 3.2z\" />\n</svg>\n`;\nr(d);\n/**\n * @copyright 2023 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst g = (t) => {\n  switch (t) {\n    case \"away\":\n      return e(\"away\");\n    case \"busy\":\n      return e(\"busy\");\n    case \"dnd\":\n      return e(\"do not disturb\");\n    case \"online\":\n      return e(\"online\");\n    case \"invisible\":\n      return e(\"invisible\");\n    case \"offline\":\n      return e(\"offline\");\n    default:\n      return t;\n  }\n};\nr(h);\nconst m = {\n  name: \"NcUserStatusIcon\",\n  props: {\n    /**\n     * Set the user id to fetch the status\n     */\n    user: {\n      type: String,\n      default: null\n    },\n    /**\n     * Set the status\n     *\n     * @type {'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'}\n     */\n    status: {\n      type: String,\n      default: null,\n      validator: (t) => [\n        \"online\",\n        \"away\",\n        \"busy\",\n        \"dnd\",\n        \"invisible\",\n        \"offline\"\n      ].includes(t)\n    },\n    /**\n     * Set the `aria-hidden` attribute\n     *\n     * @type {'true' | 'false'}\n     */\n    ariaHidden: {\n      type: String,\n      default: null,\n      validator: (t) => [\n        \"true\",\n        \"false\"\n      ].includes(t)\n    }\n  },\n  data() {\n    return {\n      fetchedUserStatus: null\n    };\n  },\n  computed: {\n    activeStatus() {\n      return this.status ?? this.fetchedUserStatus;\n    },\n    activeSvg() {\n      return {\n        online: f,\n        away: n,\n        busy: n,\n        dnd: p,\n        invisible: i,\n        offline: i\n      }[this.activeStatus] ?? null;\n    },\n    ariaLabel() {\n      return this.ariaHidden === \"true\" ? null : e(\"User status: {status}\", { status: g(this.activeStatus) });\n    }\n  },\n  watch: {\n    user: {\n      immediate: !0,\n      async handler(t, s) {\n        if (!t || !u()?.user_status?.enabled) {\n          this.fetchedUserStatus = null;\n          return;\n        }\n        try {\n          const { data: a } = await l.get(c(\"/apps/user_status/api/v1/statuses/{user}\", { user: t }));\n          this.fetchedUserStatus = a.ocs?.data?.status;\n        } catch {\n          this.fetchedUserStatus = null;\n        }\n      }\n    }\n  },\n  mounted() {\n    !this.user && !this.status && o.util.warn(\"[NcUserStatusIcon] The `user` or `status` prop should be set.\");\n  }\n};\nvar w = function() {\n  var s = this, a = s._self._c;\n  return s.activeStatus ? a(\"span\", { staticClass: \"user-status-icon\", class: {\n    \"user-status-icon--invisible\": [\"invisible\", \"offline\"].includes(s.status)\n  }, attrs: { role: \"img\", \"aria-hidden\": s.ariaHidden, \"aria-label\": s.ariaLabel }, domProps: { innerHTML: s._s(s.activeSvg) } }) : s._e();\n}, S = [], b = /* @__PURE__ */ v(\n  m,\n  w,\n  S,\n  !1,\n  null,\n  \"b17810e4\",\n  null,\n  null\n);\nconst z = b.exports;\nexport {\n  z as N,\n  g\n};\n","import { r as h, t as f, a as n } from \"./_l10n-9dioj9MT.mjs\";\nh(f);\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Grigorii K. Shartsev <me@shgk.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nclass e {\n  /**\n   * @param {number} r The red value\n   * @param {number} g The green value\n   * @param {number} b The blue value\n   * @param {string} [name] The name of the color\n   */\n  constructor(t, r, l, c) {\n    this.r = t, this.g = r, this.b = l, c && (this.name = c);\n  }\n  get color() {\n    const t = (r) => `00${r.toString(16)}`.slice(-2);\n    return `#${t(this.r)}${t(this.g)}${t(this.b)}`;\n  }\n}\nfunction b(o, t) {\n  const r = new Array(3);\n  return r[0] = (t[1].r - t[0].r) / o, r[1] = (t[1].g - t[0].g) / o, r[2] = (t[1].b - t[0].b) / o, r;\n}\nfunction u(o, t, r) {\n  const l = [];\n  l.push(t);\n  const c = b(o, [t, r]);\n  for (let a = 1; a < o; a++) {\n    const i = Math.floor(t.r + c[0] * a), s = Math.floor(t.g + c[1] * a), w = Math.floor(t.b + c[2] * a);\n    l.push(new e(i, s, w));\n  }\n  return l;\n}\nconst g = [\n  new e(182, 70, 157, n(\"Purple\")),\n  new e(\n    191,\n    103,\n    139,\n    n(\"Rosy brown\")\n    // TRANSLATORS: A color name for RGB(191, 103, 139)\n  ),\n  new e(\n    201,\n    136,\n    121,\n    n(\"Feldspar\")\n    // TRANSLATORS: A color name for RGB(201, 136, 121)\n  ),\n  new e(\n    211,\n    169,\n    103,\n    n(\"Whiskey\")\n    // TRANSLATORS: A color name for RGB(211, 169, 103)\n  ),\n  new e(\n    221,\n    203,\n    85,\n    n(\"Gold\")\n  ),\n  new e(\n    165,\n    184,\n    114,\n    n(\"Olivine\")\n    // TRANSLATORS: A color name for RGB(165, 184, 114)\n  ),\n  new e(\n    110,\n    166,\n    143,\n    n(\"Acapulco\")\n    // TRANSLATORS: A color name for RGB(110, 166, 143)\n  ),\n  new e(\n    55,\n    148,\n    172,\n    n(\"Boston Blue\")\n    // TRANSLATORS: A color name for RGB(55, 148, 172)\n  ),\n  new e(\n    0,\n    130,\n    201,\n    n(\"Nextcloud blue\")\n  ),\n  new e(\n    45,\n    115,\n    190,\n    n(\"Mariner\")\n    // TRANSLATORS: A color name for RGB(45, 115, 190)\n  ),\n  new e(\n    91,\n    100,\n    179,\n    n(\"Blue Violet\")\n    // TRANSLATORS: A color name for RGB(91, 100, 179)\n  ),\n  new e(\n    136,\n    85,\n    168,\n    n(\"Deluge\")\n    // TRANSLATORS: A color name for RGB(136, 85, 168)\n  )\n];\nfunction x(o) {\n  if (o || (o = 6), o === 4)\n    return g;\n  const t = new e(182, 70, 157, n(\"Purple\")), r = new e(221, 203, 85, n(\"Gold\")), l = new e(0, 130, 201, n(\"Nextcloud blue\")), c = u(o, t, r), a = u(o, r, l), i = u(o, l, t);\n  return c.concat(a).concat(i);\n}\nexport {\n  e as C,\n  x as G,\n  g as d\n};\n","(function() {\n  var base64map\n      = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\n  crypt = {\n    // Bit-wise rotation left\n    rotl: function(n, b) {\n      return (n << b) | (n >>> (32 - b));\n    },\n\n    // Bit-wise rotation right\n    rotr: function(n, b) {\n      return (n << (32 - b)) | (n >>> b);\n    },\n\n    // Swap big-endian to little-endian and vice versa\n    endian: function(n) {\n      // If number given, swap endian\n      if (n.constructor == Number) {\n        return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00;\n      }\n\n      // Else, assume array and swap all items\n      for (var i = 0; i < n.length; i++)\n        n[i] = crypt.endian(n[i]);\n      return n;\n    },\n\n    // Generate an array of any length of random bytes\n    randomBytes: function(n) {\n      for (var bytes = []; n > 0; n--)\n        bytes.push(Math.floor(Math.random() * 256));\n      return bytes;\n    },\n\n    // Convert a byte array to big-endian 32-bit words\n    bytesToWords: function(bytes) {\n      for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)\n        words[b >>> 5] |= bytes[i] << (24 - b % 32);\n      return words;\n    },\n\n    // Convert big-endian 32-bit words to a byte array\n    wordsToBytes: function(words) {\n      for (var bytes = [], b = 0; b < words.length * 32; b += 8)\n        bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a hex string\n    bytesToHex: function(bytes) {\n      for (var hex = [], i = 0; i < bytes.length; i++) {\n        hex.push((bytes[i] >>> 4).toString(16));\n        hex.push((bytes[i] & 0xF).toString(16));\n      }\n      return hex.join('');\n    },\n\n    // Convert a hex string to a byte array\n    hexToBytes: function(hex) {\n      for (var bytes = [], c = 0; c < hex.length; c += 2)\n        bytes.push(parseInt(hex.substr(c, 2), 16));\n      return bytes;\n    },\n\n    // Convert a byte array to a base-64 string\n    bytesToBase64: function(bytes) {\n      for (var base64 = [], i = 0; i < bytes.length; i += 3) {\n        var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];\n        for (var j = 0; j < 4; j++)\n          if (i * 8 + j * 6 <= bytes.length * 8)\n            base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F));\n          else\n            base64.push('=');\n      }\n      return base64.join('');\n    },\n\n    // Convert a base-64 string to a byte array\n    base64ToBytes: function(base64) {\n      // Remove non-base-64 characters\n      base64 = base64.replace(/[^A-Z0-9+\\/]/ig, '');\n\n      for (var bytes = [], i = 0, imod4 = 0; i < base64.length;\n          imod4 = ++i % 4) {\n        if (imod4 == 0) continue;\n        bytes.push(((base64map.indexOf(base64.charAt(i - 1))\n            & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2))\n            | (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));\n      }\n      return bytes;\n    }\n  };\n\n  module.exports = crypt;\n})();\n","var charenc = {\n  // UTF-8 encoding\n  utf8: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));\n    }\n  },\n\n  // Binary encoding\n  bin: {\n    // Convert a string to a byte array\n    stringToBytes: function(str) {\n      for (var bytes = [], i = 0; i < str.length; i++)\n        bytes.push(str.charCodeAt(i) & 0xFF);\n      return bytes;\n    },\n\n    // Convert a byte array to a string\n    bytesToString: function(bytes) {\n      for (var str = [], i = 0; i < bytes.length; i++)\n        str.push(String.fromCharCode(bytes[i]));\n      return str.join('');\n    }\n  }\n};\n\nmodule.exports = charenc;\n","/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n  return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","(function(){\r\n  var crypt = require('crypt'),\r\n      utf8 = require('charenc').utf8,\r\n      isBuffer = require('is-buffer'),\r\n      bin = require('charenc').bin,\r\n\r\n  // The core\r\n  md5 = function (message, options) {\r\n    // Convert to byte array\r\n    if (message.constructor == String)\r\n      if (options && options.encoding === 'binary')\r\n        message = bin.stringToBytes(message);\r\n      else\r\n        message = utf8.stringToBytes(message);\r\n    else if (isBuffer(message))\r\n      message = Array.prototype.slice.call(message, 0);\r\n    else if (!Array.isArray(message) && message.constructor !== Uint8Array)\r\n      message = message.toString();\r\n    // else, assume byte array already\r\n\r\n    var m = crypt.bytesToWords(message),\r\n        l = message.length * 8,\r\n        a =  1732584193,\r\n        b = -271733879,\r\n        c = -1732584194,\r\n        d =  271733878;\r\n\r\n    // Swap endian\r\n    for (var i = 0; i < m.length; i++) {\r\n      m[i] = ((m[i] <<  8) | (m[i] >>> 24)) & 0x00FF00FF |\r\n             ((m[i] << 24) | (m[i] >>>  8)) & 0xFF00FF00;\r\n    }\r\n\r\n    // Padding\r\n    m[l >>> 5] |= 0x80 << (l % 32);\r\n    m[(((l + 64) >>> 9) << 4) + 14] = l;\r\n\r\n    // Method shortcuts\r\n    var FF = md5._ff,\r\n        GG = md5._gg,\r\n        HH = md5._hh,\r\n        II = md5._ii;\r\n\r\n    for (var i = 0; i < m.length; i += 16) {\r\n\r\n      var aa = a,\r\n          bb = b,\r\n          cc = c,\r\n          dd = d;\r\n\r\n      a = FF(a, b, c, d, m[i+ 0],  7, -680876936);\r\n      d = FF(d, a, b, c, m[i+ 1], 12, -389564586);\r\n      c = FF(c, d, a, b, m[i+ 2], 17,  606105819);\r\n      b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);\r\n      a = FF(a, b, c, d, m[i+ 4],  7, -176418897);\r\n      d = FF(d, a, b, c, m[i+ 5], 12,  1200080426);\r\n      c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);\r\n      b = FF(b, c, d, a, m[i+ 7], 22, -45705983);\r\n      a = FF(a, b, c, d, m[i+ 8],  7,  1770035416);\r\n      d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);\r\n      c = FF(c, d, a, b, m[i+10], 17, -42063);\r\n      b = FF(b, c, d, a, m[i+11], 22, -1990404162);\r\n      a = FF(a, b, c, d, m[i+12],  7,  1804603682);\r\n      d = FF(d, a, b, c, m[i+13], 12, -40341101);\r\n      c = FF(c, d, a, b, m[i+14], 17, -1502002290);\r\n      b = FF(b, c, d, a, m[i+15], 22,  1236535329);\r\n\r\n      a = GG(a, b, c, d, m[i+ 1],  5, -165796510);\r\n      d = GG(d, a, b, c, m[i+ 6],  9, -1069501632);\r\n      c = GG(c, d, a, b, m[i+11], 14,  643717713);\r\n      b = GG(b, c, d, a, m[i+ 0], 20, -373897302);\r\n      a = GG(a, b, c, d, m[i+ 5],  5, -701558691);\r\n      d = GG(d, a, b, c, m[i+10],  9,  38016083);\r\n      c = GG(c, d, a, b, m[i+15], 14, -660478335);\r\n      b = GG(b, c, d, a, m[i+ 4], 20, -405537848);\r\n      a = GG(a, b, c, d, m[i+ 9],  5,  568446438);\r\n      d = GG(d, a, b, c, m[i+14],  9, -1019803690);\r\n      c = GG(c, d, a, b, m[i+ 3], 14, -187363961);\r\n      b = GG(b, c, d, a, m[i+ 8], 20,  1163531501);\r\n      a = GG(a, b, c, d, m[i+13],  5, -1444681467);\r\n      d = GG(d, a, b, c, m[i+ 2],  9, -51403784);\r\n      c = GG(c, d, a, b, m[i+ 7], 14,  1735328473);\r\n      b = GG(b, c, d, a, m[i+12], 20, -1926607734);\r\n\r\n      a = HH(a, b, c, d, m[i+ 5],  4, -378558);\r\n      d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);\r\n      c = HH(c, d, a, b, m[i+11], 16,  1839030562);\r\n      b = HH(b, c, d, a, m[i+14], 23, -35309556);\r\n      a = HH(a, b, c, d, m[i+ 1],  4, -1530992060);\r\n      d = HH(d, a, b, c, m[i+ 4], 11,  1272893353);\r\n      c = HH(c, d, a, b, m[i+ 7], 16, -155497632);\r\n      b = HH(b, c, d, a, m[i+10], 23, -1094730640);\r\n      a = HH(a, b, c, d, m[i+13],  4,  681279174);\r\n      d = HH(d, a, b, c, m[i+ 0], 11, -358537222);\r\n      c = HH(c, d, a, b, m[i+ 3], 16, -722521979);\r\n      b = HH(b, c, d, a, m[i+ 6], 23,  76029189);\r\n      a = HH(a, b, c, d, m[i+ 9],  4, -640364487);\r\n      d = HH(d, a, b, c, m[i+12], 11, -421815835);\r\n      c = HH(c, d, a, b, m[i+15], 16,  530742520);\r\n      b = HH(b, c, d, a, m[i+ 2], 23, -995338651);\r\n\r\n      a = II(a, b, c, d, m[i+ 0],  6, -198630844);\r\n      d = II(d, a, b, c, m[i+ 7], 10,  1126891415);\r\n      c = II(c, d, a, b, m[i+14], 15, -1416354905);\r\n      b = II(b, c, d, a, m[i+ 5], 21, -57434055);\r\n      a = II(a, b, c, d, m[i+12],  6,  1700485571);\r\n      d = II(d, a, b, c, m[i+ 3], 10, -1894986606);\r\n      c = II(c, d, a, b, m[i+10], 15, -1051523);\r\n      b = II(b, c, d, a, m[i+ 1], 21, -2054922799);\r\n      a = II(a, b, c, d, m[i+ 8],  6,  1873313359);\r\n      d = II(d, a, b, c, m[i+15], 10, -30611744);\r\n      c = II(c, d, a, b, m[i+ 6], 15, -1560198380);\r\n      b = II(b, c, d, a, m[i+13], 21,  1309151649);\r\n      a = II(a, b, c, d, m[i+ 4],  6, -145523070);\r\n      d = II(d, a, b, c, m[i+11], 10, -1120210379);\r\n      c = II(c, d, a, b, m[i+ 2], 15,  718787259);\r\n      b = II(b, c, d, a, m[i+ 9], 21, -343485551);\r\n\r\n      a = (a + aa) >>> 0;\r\n      b = (b + bb) >>> 0;\r\n      c = (c + cc) >>> 0;\r\n      d = (d + dd) >>> 0;\r\n    }\r\n\r\n    return crypt.endian([a, b, c, d]);\r\n  };\r\n\r\n  // Auxiliary functions\r\n  md5._ff  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & c | ~b & d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._gg  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b & d | c & ~d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._hh  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (b ^ c ^ d) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n  md5._ii  = function (a, b, c, d, x, s, t) {\r\n    var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;\r\n    return ((n << s) | (n >>> (32 - s))) + b;\r\n  };\r\n\r\n  // Package private blocksize\r\n  md5._blocksize = 16;\r\n  md5._digestsize = 16;\r\n\r\n  module.exports = function (message, options) {\r\n    if (message === undefined || message === null)\r\n      throw new Error('Illegal argument ' + message);\r\n\r\n    var digestbytes = crypt.wordsToBytes(md5(message, options));\r\n    return options && options.asBytes ? digestbytes :\r\n        options && options.asString ? bin.bytesToString(digestbytes) :\r\n        crypt.bytesToHex(digestbytes);\r\n  };\r\n\r\n})();\r\n","import { G as i } from \"./GenColors-DI6G7se8.mjs\";\nimport p from \"md5\";\n/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst h = function(a) {\n  let t = a.toLowerCase();\n  t.match(/^([0-9a-f]{4}-?){8}$/) === null && (t = p(t)), t = t.replace(/[^0-9a-f]/g, \"\");\n  const e = 6, l = i(e);\n  function f(r, c) {\n    let s = 0;\n    const o = [];\n    for (let n = 0; n < r.length; n++)\n      o.push(parseInt(r.charAt(n), 16) % 16);\n    for (const n in o)\n      s += o[n];\n    return parseInt(parseInt(s, 10) % c, 10);\n  }\n  return l[f(t, e * 3)];\n};\nexport {\n  h as u\n};\n","import { ref as s, readonly as n } from \"vue\";\n/**\n * @copyright Copyright (c) 2023 Grigorii K. Shartsev <me@shgk.me>\n *\n * @author Grigorii K. Shartsev <me@shgk.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst r = () => window.outerHeight === screen.height, e = s(r());\nwindow.addEventListener(\"resize\", () => {\n  e.value = r();\n});\nfunction c() {\n  return n(e);\n}\nconst o = n(e);\nexport {\n  o as isFullscreenState,\n  c as useIsFullscreen\n};\n","// THIS FILE IS AUTOMATICALLY GENERATED DO NOT EDIT DIRECTLY\n// See update-tlds.js for encoding/decoding format\n// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\nconst encodedTlds = 'aaa1rp3barth4b0ott3vie4c1le2ogado5udhabi7c0ademy5centure6ountant0s9o1tor4d0s1ult4e0g1ro2tna4f0l1rica5g0akhan5ency5i0g1rbus3force5tel5kdn3l0faromeo7ibaba4pay4lfinanz6state5y2sace3tom5m0azon4ericanexpress7family11x2fam3ica3sterdam8nalytics7droid5quan4z2o0l2partments8p0le4q0uarelle8r0ab1mco4chi3my2pa2t0e3s0da2ia2sociates9t0hleta5torney7u0ction5di0ble3o3spost5thor3o0s4vianca6w0s2x0a2z0ure5ba0by2idu3namex3narepublic11d1k2r0celona5laycard4s5efoot5gains6seball5ketball8uhaus5yern5b0c1t1va3cg1n2d1e0ats2uty4er2ntley5rlin4st0buy5t2f1g1h0arti5i0ble3d1ke2ng0o3o1z2j1lack0friday9ockbuster8g1omberg7ue3m0s1w2n0pparibas9o0ats3ehringer8fa2m1nd2o0k0ing5sch2tik2on4t1utique6x2r0adesco6idgestone9oadway5ker3ther5ussels7s1t1uild0ers6siness6y1zz3v1w1y1z0h3ca0b1fe2l0l1vinklein9m0era3p2non3petown5ital0one8r0avan4ds2e0er0s4s2sa1e1h1ino4t0ering5holic7ba1n1re2s2c1d1enter4o1rn3f0a1d2g1h0anel2nel4rity4se2t2eap3intai5ristmas6ome4urch5i0priani6rcle4sco3tadel4i0c2y0eats7k1l0aims4eaning6ick2nic1que6othing5ud3ub0med6m1n1o0ach3des3ffee4llege4ogne5m0cast4mbank4unity6pany2re3uter5sec4ndos3struction8ulting7tact3ractors9oking0channel11l1p2rsica5untry4pon0s4rses6pa2r0edit0card4union9icket5own3s1uise0s6u0isinella9v1w1x1y0mru3ou3z2dabur3d1nce3ta1e1ing3sun4y2clk3ds2e0al0er2s3gree4livery5l1oitte5ta3mocrat6ntal2ist5si0gn4v2hl2iamonds6et2gital5rect0ory7scount3ver5h2y2j1k1m1np2o0cs1tor4g1mains5t1wnload7rive4tv2ubai3nlop4pont4rban5vag2r2z2earth3t2c0o2deka3u0cation8e1g1mail3erck5nergy4gineer0ing9terprises10pson4quipment8r0icsson6ni3s0q1tate5t0isalat7u0rovision8s2vents5xchange6pert3osed4ress5traspace10fage2il1rwinds6th3mily4n0s2rm0ers5shion4t3edex3edback6rrari3ero6i0at2delity5o2lm2nal1nce1ial7re0stone6mdale6sh0ing5t0ness6j1k1lickr3ghts4r2orist4wers5y2m1o0o0d0network8tball6rd1ex2sale4um3undation8x2r0ee1senius7l1ogans4ntdoor4ier7tr2ujitsu5n0d2rniture7tbol5yi3ga0l0lery3o1up4me0s3p1rden4y2b0iz3d0n2e0a1nt0ing5orge5f1g0ee3h1i0ft0s3ves2ing5l0ass3e1obal2o4m0ail3bh2o1x2n1odaddy5ld0point6f2o0dyear5g0le4p1t1v2p1q1r0ainger5phics5tis4een3ipe3ocery4up4s1t1u0ardian6cci3ge2ide2tars5ru3w1y2hair2mburg5ngout5us3bo2dfc0bank7ealth0care8lp1sinki6re1mes5gtv3iphop4samitsu7tachi5v2k0t2m1n1ockey4ldings5iday5medepot5goods5s0ense7nda3rse3spital5t0ing5t0eles2s3mail5use3w2r1sbc3t1u0ghes5yatt3undai7ibm2cbc2e1u2d1e0ee3fm2kano4l1m0amat4db2mo0bilien9n0c1dustries8finiti5o2g1k1stitute6urance4e4t0ernational10uit4vestments10o1piranga7q1r0ish4s0maili5t0anbul7t0au2v3jaguar4va3cb2e0ep2tzt3welry6io2ll2m0p2nj2o0bs1urg4t1y2p0morgan6rs3uegos4niper7kaufen5ddi3e0rryhotels6logistics9properties14fh2g1h1i0a1ds2m1nder2le4tchen5wi3m1n1oeln3matsu5sher5p0mg2n2r0d1ed3uokgroup8w1y0oto4z2la0caixa5mborghini8er3ncaster5ia3d0rover6xess5salle5t0ino3robe5w0yer5b1c1ds2ease3clerc5frak4gal2o2xus4gbt3i0dl2fe0insurance9style7ghting6ke2lly3mited4o2ncoln4de2k2psy3ve1ing5k1lc1p2oan0s3cker3us3l1ndon4tte1o3ve3pl0financial11r1s1t0d0a3u0ndbeck6xe1ury5v1y2ma0cys3drid4if1son4keup4n0agement7go3p1rket0ing3s4riott5shalls7serati6ttel5ba2c0kinsey7d1e0d0ia3et2lbourne7me1orial6n0u2rckmsd7g1h1iami3crosoft7l1ni1t2t0subishi9k1l0b1s2m0a2n1o0bi0le4da2e1i1m1nash3ey2ster5rmon3tgage6scow4to0rcycles9v0ie4p1q1r1s0d2t0n1r2u0seum3ic3tual5v1w1x1y1z2na0b1goya4me2tura4vy3ba2c1e0c1t0bank4flix4work5ustar5w0s2xt0direct7us4f0l2g0o2hk2i0co2ke1on3nja3ssan1y5l1o0kia3rthwesternmutual14on4w0ruz3tv4p1r0a1w2tt2u1yc2z2obi1server7ffice5kinawa6layan0group9dnavy5lo3m0ega4ne1g1l0ine5oo2pen3racle3nge4g0anic5igins6saka4tsuka4t2vh3pa0ge2nasonic7ris2s1tners4s1y3ssagens7y2ccw3e0t2f0izer5g1h0armacy6d1ilips5one2to0graphy6s4ysio5ics1tet2ures6d1n0g1k2oneer5zza4k1l0ace2y0station9umbing5s3m1n0c2ohl2ker3litie5rn2st3r0america6xi3ess3ime3o0d0uctions8f1gressive8mo2perties3y5tection8u0dential9s1t1ub2w0c2y2qa1pon3uebec3st5racing4dio4e0ad1lestate6tor2y4cipes5d0stone5umbrella9hab3ise0n3t2liance6n0t0als5pair3ort3ublican8st0aurant8view0s5xroth6ich0ardli6oh3l1o1p2o0cher3ks3deo3gers4om3s0vp3u0gby3hr2n2w0e2yukyu6sa0arland6fe0ty4kura4le1on3msclub4ung5ndvik0coromant12ofi4p1rl2s1ve2xo3b0i1s2c0a1b1haeffler7midt4olarships8ol3ule3warz5ience5ot3d1e0arch3t2cure1ity6ek2lect4ner3rvices6ven3w1x0y3fr2g1h0angrila6rp2w2ell3ia1ksha5oes2p0ping5uji3w0time7i0lk2na1gles5te3j1k0i0n2y0pe4l0ing4m0art3ile4n0cf3o0ccer3ial4ftbank4ware6hu2lar2utions7ng1y2y2pa0ce3ort2t3r0l2s1t0ada2ples4r1tebank4farm7c0group6ockholm6rage3e3ream4udio2y3yle4u0cks3pplies3y2ort5rf1gery5zuki5v1watch4iss4x1y0dney4stems6z2tab1ipei4lk2obao4rget4tamotors6r2too4x0i3c0i2d0k2eam2ch0nology8l1masek5nnis4va3f1g1h0d1eater2re6iaa2ckets5enda4ffany5ps2res2ol4j0maxx4x2k0maxx5l1m0all4n1o0day3kyo3ols3p1ray3shiba5tal3urs3wn2yota3s3r0ade1ing4ining5vel0channel7ers0insurance16ust3v2t1ube2i1nes3shu4v0s2w1z2ua1bank3s2g1k1nicom3versity8o2ol2ps2s1y1z2va0cations7na1guard7c1e0gas3ntures6risign5mögensberater2ung14sicherung10t2g1i0ajes4deo3g1king4llas4n1p1rgin4sa1ion4va1o3laanderen9n1odka3lkswagen7vo3te1ing3o2yage5u0elos6wales2mart4ter4ng0gou5tch0es6eather0channel12bcam3er2site5d0ding5ibo2r3f1hoswho6ien2ki2lliamhill9n0dows4e1ners6me2olterskluwer11odside6rk0s2ld3w2s1tc1f3xbox3erox4finity6ihuan4n2xx2yz3yachts4hoo3maxun5ndex5e1odobashi7ga2kohama6u0tube6t1un3za0ppos4ra3ero3ip2m1one3uerich6w2';\n// Internationalized domain names containing non-ASCII\nconst encodedUtlds = 'ελ1υ2бг1ел3дети4ею2католик6ом3мкд2он1сква6онлайн5рг3рус2ф2сайт3рб3укр3қаз3հայ3ישראל5קום3ابوظبي5تصالات6رامكو5لاردن4بحرين5جزائر5سعودية6عليان5مغرب5مارات5یران5بارت2زار4يتك3ھارت5تونس4سودان3رية5شبكة4عراق2ب2مان4فلسطين6قطر3كاثوليك6وم3مصر2ليسيا5وريتانيا7قع4همراه5پاکستان7ڀارت4कॉम3नेट3भारत0म्3ोत5संगठन5বাংলা5ভারত2ৰত4ਭਾਰਤ4ભારત4ଭାରତ4இந்தியா6லங்கை6சிங்கப்பூர்11భారత్5ಭಾರತ4ഭാരതം5ලංකා4คอม3ไทย3ລາວ3გე2みんな3アマゾン4クラウド4グーグル4コム2ストア3セール3ファッション6ポイント4世界2中信1国1國1文网3亚马逊3企业2佛山2信息2健康2八卦2公司1益2台湾1灣2商城1店1标2嘉里0大酒店5在线2大拿2天主教3娱乐2家電2广东2微博2慈善2我爱你3手机2招聘2政务1府2新加坡2闻2时尚2書籍2机构2淡马锡3游戏2澳門2点看2移动2组织机构4网址1店1站1络2联通2谷歌2购物2通販2集团2電訊盈科4飞利浦3食品2餐厅2香格里拉3港2닷넷1컴2삼성2한국2';\n\n/**\n * @template A\n * @template B\n * @param {A} target\n * @param {B} properties\n * @return {A & B}\n */\nconst assign = (target, properties) => {\n  for (const key in properties) {\n    target[key] = properties[key];\n  }\n  return target;\n};\n\n/**\n * Finite State Machine generation utilities\n */\n\n/**\n * @template T\n * @typedef {{ [group: string]: T[] }} Collections\n */\n\n/**\n * @typedef {{ [group: string]: true }} Flags\n */\n\n// Keys in scanner Collections instances\nconst numeric = 'numeric';\nconst ascii = 'ascii';\nconst alpha = 'alpha';\nconst asciinumeric = 'asciinumeric';\nconst alphanumeric = 'alphanumeric';\nconst domain = 'domain';\nconst emoji = 'emoji';\nconst scheme = 'scheme';\nconst slashscheme = 'slashscheme';\nconst whitespace = 'whitespace';\n\n/**\n * @template T\n * @param {string} name\n * @param {Collections<T>} groups to register in\n * @returns {T[]} Current list of tokens in the given collection\n */\nfunction registerGroup(name, groups) {\n  if (!(name in groups)) {\n    groups[name] = [];\n  }\n  return groups[name];\n}\n\n/**\n * @template T\n * @param {T} t token to add\n * @param {Collections<T>} groups\n * @param {Flags} flags\n */\nfunction addToGroups(t, flags, groups) {\n  if (flags[numeric]) {\n    flags[asciinumeric] = true;\n    flags[alphanumeric] = true;\n  }\n  if (flags[ascii]) {\n    flags[asciinumeric] = true;\n    flags[alpha] = true;\n  }\n  if (flags[asciinumeric]) {\n    flags[alphanumeric] = true;\n  }\n  if (flags[alpha]) {\n    flags[alphanumeric] = true;\n  }\n  if (flags[alphanumeric]) {\n    flags[domain] = true;\n  }\n  if (flags[emoji]) {\n    flags[domain] = true;\n  }\n  for (const k in flags) {\n    const group = registerGroup(k, groups);\n    if (group.indexOf(t) < 0) {\n      group.push(t);\n    }\n  }\n}\n\n/**\n * @template T\n * @param {T} t token to check\n * @param {Collections<T>} groups\n * @returns {Flags} group flags that contain this token\n */\nfunction flagsForToken(t, groups) {\n  const result = {};\n  for (const c in groups) {\n    if (groups[c].indexOf(t) >= 0) {\n      result[c] = true;\n    }\n  }\n  return result;\n}\n\n/**\n * @template T\n * @typedef {null | T } Transition\n */\n\n/**\n * Define a basic state machine state. j is the list of character transitions,\n * jr is the list of regex-match transitions, jd is the default state to\n * transition to t is the accepting token type, if any. If this is the terminal\n * state, then it does not emit a token.\n *\n * The template type T represents the type of the token this state accepts. This\n * should be a string (such as of the token exports in `text.js`) or a\n * MultiToken subclass (from `multi.js`)\n *\n * @template T\n * @param {T} [token] Token that this state emits\n */\nfunction State(token) {\n  if (token === void 0) {\n    token = null;\n  }\n  // this.n = null; // DEBUG: State name\n  /** @type {{ [input: string]: State<T> }} j */\n  this.j = {}; // IMPLEMENTATION 1\n  // this.j = []; // IMPLEMENTATION 2\n  /** @type {[RegExp, State<T>][]} jr */\n  this.jr = [];\n  /** @type {?State<T>} jd */\n  this.jd = null;\n  /** @type {?T} t */\n  this.t = token;\n}\n\n/**\n * Scanner token groups\n * @type Collections<string>\n */\nState.groups = {};\nState.prototype = {\n  accepts() {\n    return !!this.t;\n  },\n  /**\n   * Follow an existing transition from the given input to the next state.\n   * Does not mutate.\n   * @param {string} input character or token type to transition on\n   * @returns {?State<T>} the next state, if any\n   */\n  go(input) {\n    const state = this;\n    const nextState = state.j[input];\n    if (nextState) {\n      return nextState;\n    }\n    for (let i = 0; i < state.jr.length; i++) {\n      const regex = state.jr[i][0];\n      const nextState = state.jr[i][1]; // note: might be empty to prevent default jump\n      if (nextState && regex.test(input)) {\n        return nextState;\n      }\n    }\n    // Nowhere left to jump! Return default, if any\n    return state.jd;\n  },\n  /**\n   * Whether the state has a transition for the given input. Set the second\n   * argument to true to only look for an exact match (and not a default or\n   * regular-expression-based transition)\n   * @param {string} input\n   * @param {boolean} exactOnly\n   */\n  has(input, exactOnly) {\n    if (exactOnly === void 0) {\n      exactOnly = false;\n    }\n    return exactOnly ? input in this.j : !!this.go(input);\n  },\n  /**\n   * Short for \"transition all\"; create a transition from the array of items\n   * in the given list to the same final resulting state.\n   * @param {string | string[]} inputs Group of inputs to transition on\n   * @param {Transition<T> | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of token groups\n   */\n  ta(inputs, next, flags, groups) {\n    for (let i = 0; i < inputs.length; i++) {\n      this.tt(inputs[i], next, flags, groups);\n    }\n  },\n  /**\n   * Short for \"take regexp transition\"; defines a transition for this state\n   * when it encounters a token which matches the given regular expression\n   * @param {RegExp} regexp Regular expression transition (populate first)\n   * @param {T | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of token groups\n   * @returns {State<T>} taken after the given input\n   */\n  tr(regexp, next, flags, groups) {\n    groups = groups || State.groups;\n    let nextState;\n    if (next && next.j) {\n      nextState = next;\n    } else {\n      // Token with maybe token groups\n      nextState = new State(next);\n      if (flags && groups) {\n        addToGroups(next, flags, groups);\n      }\n    }\n    this.jr.push([regexp, nextState]);\n    return nextState;\n  },\n  /**\n   * Short for \"take transitions\", will take as many sequential transitions as\n   * the length of the given input and returns the\n   * resulting final state.\n   * @param {string | string[]} input\n   * @param {T | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of token groups\n   * @returns {State<T>} taken after the given input\n   */\n  ts(input, next, flags, groups) {\n    let state = this;\n    const len = input.length;\n    if (!len) {\n      return state;\n    }\n    for (let i = 0; i < len - 1; i++) {\n      state = state.tt(input[i]);\n    }\n    return state.tt(input[len - 1], next, flags, groups);\n  },\n  /**\n   * Short for \"take transition\", this is a method for building/working with\n   * state machines.\n   *\n   * If a state already exists for the given input, returns it.\n   *\n   * If a token is specified, that state will emit that token when reached by\n   * the linkify engine.\n   *\n   * If no state exists, it will be initialized with some default transitions\n   * that resemble existing default transitions.\n   *\n   * If a state is given for the second argument, that state will be\n   * transitioned to on the given input regardless of what that input\n   * previously did.\n   *\n   * Specify a token group flags to define groups that this token belongs to.\n   * The token will be added to corresponding entires in the given groups\n   * object.\n   *\n   * @param {string} input character, token type to transition on\n   * @param {T | State<T>} [next] Transition options\n   * @param {Flags} [flags] Collections flags to add token to\n   * @param {Collections<T>} [groups] Master list of groups\n   * @returns {State<T>} taken after the given input\n   */\n  tt(input, next, flags, groups) {\n    groups = groups || State.groups;\n    const state = this;\n\n    // Check if existing state given, just a basic transition\n    if (next && next.j) {\n      state.j[input] = next;\n      return next;\n    }\n    const t = next;\n\n    // Take the transition with the usual default mechanisms and use that as\n    // a template for creating the next state\n    let nextState,\n      templateState = state.go(input);\n    if (templateState) {\n      nextState = new State();\n      assign(nextState.j, templateState.j);\n      nextState.jr.push.apply(nextState.jr, templateState.jr);\n      nextState.jd = templateState.jd;\n      nextState.t = templateState.t;\n    } else {\n      nextState = new State();\n    }\n    if (t) {\n      // Ensure newly token is in the same groups as the old token\n      if (groups) {\n        if (nextState.t && typeof nextState.t === 'string') {\n          const allFlags = assign(flagsForToken(nextState.t, groups), flags);\n          addToGroups(t, allFlags, groups);\n        } else if (flags) {\n          addToGroups(t, flags, groups);\n        }\n      }\n      nextState.t = t; // overwrite anything that was previously there\n    }\n\n    state.j[input] = nextState;\n    return nextState;\n  }\n};\n\n// Helper functions to improve minification (not exported outside linkifyjs module)\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ta = (state, input, next, flags, groups) => state.ta(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {RegExp} regexp\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst tr = (state, regexp, next, flags, groups) => state.tr(regexp, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string | string[]} input\n * @param {T | State<T>} [next]\n * @param {Flags} [flags]\n * @param {Collections<T>} [groups]\n */\nconst ts = (state, input, next, flags, groups) => state.ts(input, next, flags, groups);\n\n/**\n * @template T\n * @param {State<T>} state\n * @param {string} input\n * @param {T | State<T>} [next]\n * @param {Collections<T>} [groups]\n * @param {Flags} [flags]\n */\nconst tt = (state, input, next, flags, groups) => state.tt(input, next, flags, groups);\n\n/******************************************************************************\nText Tokens\nIdentifiers for token outputs from the regexp scanner\n******************************************************************************/\n\n// A valid web domain token\nconst WORD = 'WORD'; // only contains a-z\nconst UWORD = 'UWORD'; // contains letters other than a-z, used for IDN\n\n// Special case of word\nconst LOCALHOST = 'LOCALHOST';\n\n// Valid top-level domain, special case of WORD (see tlds.js)\nconst TLD = 'TLD';\n\n// Valid IDN TLD, special case of UWORD (see tlds.js)\nconst UTLD = 'UTLD';\n\n// The scheme portion of a web URI protocol. Supported types include: `mailto`,\n// `file`, and user-defined custom protocols. Limited to schemes that contain\n// only letters\nconst SCHEME = 'SCHEME';\n\n// Similar to SCHEME, except makes distinction for schemes that must always be\n// followed by `://`, not just `:`. Supported types include `http`, `https`,\n// `ftp`, `ftps`\nconst SLASH_SCHEME = 'SLASH_SCHEME';\n\n// Any sequence of digits 0-9\nconst NUM = 'NUM';\n\n// Any number of consecutive whitespace characters that are not newline\nconst WS = 'WS';\n\n// New line (unix style)\nconst NL$1 = 'NL'; // \\n\n\n// Opening/closing bracket classes\nconst OPENBRACE = 'OPENBRACE'; // {\nconst OPENBRACKET = 'OPENBRACKET'; // [\nconst OPENANGLEBRACKET = 'OPENANGLEBRACKET'; // <\nconst OPENPAREN = 'OPENPAREN'; // (\nconst CLOSEBRACE = 'CLOSEBRACE'; // }\nconst CLOSEBRACKET = 'CLOSEBRACKET'; // ]\nconst CLOSEANGLEBRACKET = 'CLOSEANGLEBRACKET'; // >\nconst CLOSEPAREN = 'CLOSEPAREN'; // )\n\n// Various symbols\nconst AMPERSAND = 'AMPERSAND'; // &\nconst APOSTROPHE = 'APOSTROPHE'; // '\nconst ASTERISK = 'ASTERISK'; // *\nconst AT = 'AT'; // @\nconst BACKSLASH = 'BACKSLASH'; // \\\nconst BACKTICK = 'BACKTICK'; // `\nconst CARET = 'CARET'; // ^\nconst COLON = 'COLON'; // :\nconst COMMA = 'COMMA'; // ,\nconst DOLLAR = 'DOLLAR'; // $\nconst DOT = 'DOT'; // .\nconst EQUALS = 'EQUALS'; // =\nconst EXCLAMATION = 'EXCLAMATION'; // !\nconst HYPHEN = 'HYPHEN'; // -\nconst PERCENT = 'PERCENT'; // %\nconst PIPE = 'PIPE'; // |\nconst PLUS = 'PLUS'; // +\nconst POUND = 'POUND'; // #\nconst QUERY = 'QUERY'; // ?\nconst QUOTE = 'QUOTE'; // \"\n\nconst SEMI = 'SEMI'; // ;\nconst SLASH = 'SLASH'; // /\nconst TILDE = 'TILDE'; // ~\nconst UNDERSCORE = 'UNDERSCORE'; // _\n\n// Emoji symbol\nconst EMOJI$1 = 'EMOJI';\n\n// Default token - anything that is not one of the above\nconst SYM = 'SYM';\n\nvar tk = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tWORD: WORD,\n\tUWORD: UWORD,\n\tLOCALHOST: LOCALHOST,\n\tTLD: TLD,\n\tUTLD: UTLD,\n\tSCHEME: SCHEME,\n\tSLASH_SCHEME: SLASH_SCHEME,\n\tNUM: NUM,\n\tWS: WS,\n\tNL: NL$1,\n\tOPENBRACE: OPENBRACE,\n\tOPENBRACKET: OPENBRACKET,\n\tOPENANGLEBRACKET: OPENANGLEBRACKET,\n\tOPENPAREN: OPENPAREN,\n\tCLOSEBRACE: CLOSEBRACE,\n\tCLOSEBRACKET: CLOSEBRACKET,\n\tCLOSEANGLEBRACKET: CLOSEANGLEBRACKET,\n\tCLOSEPAREN: CLOSEPAREN,\n\tAMPERSAND: AMPERSAND,\n\tAPOSTROPHE: APOSTROPHE,\n\tASTERISK: ASTERISK,\n\tAT: AT,\n\tBACKSLASH: BACKSLASH,\n\tBACKTICK: BACKTICK,\n\tCARET: CARET,\n\tCOLON: COLON,\n\tCOMMA: COMMA,\n\tDOLLAR: DOLLAR,\n\tDOT: DOT,\n\tEQUALS: EQUALS,\n\tEXCLAMATION: EXCLAMATION,\n\tHYPHEN: HYPHEN,\n\tPERCENT: PERCENT,\n\tPIPE: PIPE,\n\tPLUS: PLUS,\n\tPOUND: POUND,\n\tQUERY: QUERY,\n\tQUOTE: QUOTE,\n\tSEMI: SEMI,\n\tSLASH: SLASH,\n\tTILDE: TILDE,\n\tUNDERSCORE: UNDERSCORE,\n\tEMOJI: EMOJI$1,\n\tSYM: SYM\n});\n\n// Note that these two Unicode ones expand into a really big one with Babel\nconst ASCII_LETTER = /[a-z]/;\nconst LETTER = /\\p{L}/u; // Any Unicode character with letter data type\nconst EMOJI = /\\p{Emoji}/u; // Any Unicode emoji character\nconst EMOJI_VARIATION$1 = /\\ufe0f/;\nconst DIGIT = /\\d/;\nconst SPACE = /\\s/;\n\nvar regexp = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tASCII_LETTER: ASCII_LETTER,\n\tLETTER: LETTER,\n\tEMOJI: EMOJI,\n\tEMOJI_VARIATION: EMOJI_VARIATION$1,\n\tDIGIT: DIGIT,\n\tSPACE: SPACE\n});\n\n/**\n\tThe scanner provides an interface that takes a string of text as input, and\n\toutputs an array of tokens instances that can be used for easy URL parsing.\n*/\nconst NL = '\\n'; // New line character\nconst EMOJI_VARIATION = '\\ufe0f'; // Variation selector, follows heart and others\nconst EMOJI_JOINER = '\\u200d'; // zero-width joiner\n\nlet tlds = null,\n  utlds = null; // don't change so only have to be computed once\n\n/**\n * Scanner output token:\n * - `t` is the token name (e.g., 'NUM', 'EMOJI', 'TLD')\n * - `v` is the value of the token (e.g., '123', '❤️', 'com')\n * - `s` is the start index of the token in the original string\n * - `e` is the end index of the token in the original string\n * @typedef {{t: string, v: string, s: number, e: number}} Token\n */\n\n/**\n * @template T\n * @typedef {{ [collection: string]: T[] }} Collections\n */\n\n/**\n * Initialize the scanner character-based state machine for the given start\n * state\n * @param {[string, boolean][]} customSchemes List of custom schemes, where each\n * item is a length-2 tuple with the first element set to the string scheme, and\n * the second element set to `true` if the `://` after the scheme is optional\n */\nfunction init$2(customSchemes) {\n  if (customSchemes === void 0) {\n    customSchemes = [];\n  }\n  // Frequently used states (name argument removed during minification)\n  /** @type Collections<string> */\n  const groups = {}; // of tokens\n  State.groups = groups;\n  /** @type State<string> */\n  const Start = new State();\n  if (tlds == null) {\n    tlds = decodeTlds(encodedTlds);\n  }\n  if (utlds == null) {\n    utlds = decodeTlds(encodedUtlds);\n  }\n\n  // States for special URL symbols that accept immediately after start\n  tt(Start, \"'\", APOSTROPHE);\n  tt(Start, '{', OPENBRACE);\n  tt(Start, '[', OPENBRACKET);\n  tt(Start, '<', OPENANGLEBRACKET);\n  tt(Start, '(', OPENPAREN);\n  tt(Start, '}', CLOSEBRACE);\n  tt(Start, ']', CLOSEBRACKET);\n  tt(Start, '>', CLOSEANGLEBRACKET);\n  tt(Start, ')', CLOSEPAREN);\n  tt(Start, '&', AMPERSAND);\n  tt(Start, '*', ASTERISK);\n  tt(Start, '@', AT);\n  tt(Start, '`', BACKTICK);\n  tt(Start, '^', CARET);\n  tt(Start, ':', COLON);\n  tt(Start, ',', COMMA);\n  tt(Start, '$', DOLLAR);\n  tt(Start, '.', DOT);\n  tt(Start, '=', EQUALS);\n  tt(Start, '!', EXCLAMATION);\n  tt(Start, '-', HYPHEN);\n  tt(Start, '%', PERCENT);\n  tt(Start, '|', PIPE);\n  tt(Start, '+', PLUS);\n  tt(Start, '#', POUND);\n  tt(Start, '?', QUERY);\n  tt(Start, '\"', QUOTE);\n  tt(Start, '/', SLASH);\n  tt(Start, ';', SEMI);\n  tt(Start, '~', TILDE);\n  tt(Start, '_', UNDERSCORE);\n  tt(Start, '\\\\', BACKSLASH);\n  const Num = tr(Start, DIGIT, NUM, {\n    [numeric]: true\n  });\n  tr(Num, DIGIT, Num);\n\n  // State which emits a word token\n  const Word = tr(Start, ASCII_LETTER, WORD, {\n    [ascii]: true\n  });\n  tr(Word, ASCII_LETTER, Word);\n\n  // Same as previous, but specific to non-fsm.ascii alphabet words\n  const UWord = tr(Start, LETTER, UWORD, {\n    [alpha]: true\n  });\n  tr(UWord, ASCII_LETTER); // Non-accepting\n  tr(UWord, LETTER, UWord);\n\n  // Whitespace jumps\n  // Tokens of only non-newline whitespace are arbitrarily long\n  // If any whitespace except newline, more whitespace!\n  const Ws = tr(Start, SPACE, WS, {\n    [whitespace]: true\n  });\n  tt(Start, NL, NL$1, {\n    [whitespace]: true\n  });\n  tt(Ws, NL); // non-accepting state to avoid mixing whitespaces\n  tr(Ws, SPACE, Ws);\n\n  // Emoji tokens. They are not grouped by the scanner except in cases where a\n  // zero-width joiner is present\n  const Emoji = tr(Start, EMOJI, EMOJI$1, {\n    [emoji]: true\n  });\n  tr(Emoji, EMOJI, Emoji);\n  tt(Emoji, EMOJI_VARIATION, Emoji);\n  // tt(Start, EMOJI_VARIATION, Emoji); // This one is sketchy\n\n  const EmojiJoiner = tt(Emoji, EMOJI_JOINER);\n  tr(EmojiJoiner, EMOJI, Emoji);\n  // tt(EmojiJoiner, EMOJI_VARIATION, Emoji); // also sketchy\n\n  // Generates states for top-level domains\n  // Note that this is most accurate when tlds are in alphabetical order\n  const wordjr = [[ASCII_LETTER, Word]];\n  const uwordjr = [[ASCII_LETTER, null], [LETTER, UWord]];\n  for (let i = 0; i < tlds.length; i++) {\n    fastts(Start, tlds[i], TLD, WORD, wordjr);\n  }\n  for (let i = 0; i < utlds.length; i++) {\n    fastts(Start, utlds[i], UTLD, UWORD, uwordjr);\n  }\n  addToGroups(TLD, {\n    tld: true,\n    ascii: true\n  }, groups);\n  addToGroups(UTLD, {\n    utld: true,\n    alpha: true\n  }, groups);\n\n  // Collect the states generated by different protocols. NOTE: If any new TLDs\n  // get added that are also protocols, set the token to be the same as the\n  // protocol to ensure parsing works as expected.\n  fastts(Start, 'file', SCHEME, WORD, wordjr);\n  fastts(Start, 'mailto', SCHEME, WORD, wordjr);\n  fastts(Start, 'http', SLASH_SCHEME, WORD, wordjr);\n  fastts(Start, 'https', SLASH_SCHEME, WORD, wordjr);\n  fastts(Start, 'ftp', SLASH_SCHEME, WORD, wordjr);\n  fastts(Start, 'ftps', SLASH_SCHEME, WORD, wordjr);\n  addToGroups(SCHEME, {\n    scheme: true,\n    ascii: true\n  }, groups);\n  addToGroups(SLASH_SCHEME, {\n    slashscheme: true,\n    ascii: true\n  }, groups);\n\n  // Register custom schemes. Assumes each scheme is asciinumeric with hyphens\n  customSchemes = customSchemes.sort((a, b) => a[0] > b[0] ? 1 : -1);\n  for (let i = 0; i < customSchemes.length; i++) {\n    const sch = customSchemes[i][0];\n    const optionalSlashSlash = customSchemes[i][1];\n    const flags = optionalSlashSlash ? {\n      [scheme]: true\n    } : {\n      [slashscheme]: true\n    };\n    if (sch.indexOf('-') >= 0) {\n      flags[domain] = true;\n    } else if (!ASCII_LETTER.test(sch)) {\n      flags[numeric] = true; // numbers only\n    } else if (DIGIT.test(sch)) {\n      flags[asciinumeric] = true;\n    } else {\n      flags[ascii] = true;\n    }\n    ts(Start, sch, sch, flags);\n  }\n\n  // Localhost token\n  ts(Start, 'localhost', LOCALHOST, {\n    ascii: true\n  });\n\n  // Set default transition for start state (some symbol)\n  Start.jd = new State(SYM);\n  return {\n    start: Start,\n    tokens: assign({\n      groups\n    }, tk)\n  };\n}\n\n/**\n\tGiven a string, returns an array of TOKEN instances representing the\n\tcomposition of that string.\n\n\t@method run\n\t@param {State<string>} start scanner starting state\n\t@param {string} str input string to scan\n\t@return {Token[]} list of tokens, each with a type and value\n*/\nfunction run$1(start, str) {\n  // State machine is not case sensitive, so input is tokenized in lowercased\n  // form (still returns regular case). Uses selective `toLowerCase` because\n  // lowercasing the entire string causes the length and character position to\n  // vary in some non-English strings with V8-based runtimes.\n  const iterable = stringToArray(str.replace(/[A-Z]/g, c => c.toLowerCase()));\n  const charCount = iterable.length; // <= len if there are emojis, etc\n  const tokens = []; // return value\n\n  // cursor through the string itself, accounting for characters that have\n  // width with length 2 such as emojis\n  let cursor = 0;\n\n  // Cursor through the array-representation of the string\n  let charCursor = 0;\n\n  // Tokenize the string\n  while (charCursor < charCount) {\n    let state = start;\n    let nextState = null;\n    let tokenLength = 0;\n    let latestAccepting = null;\n    let sinceAccepts = -1;\n    let charsSinceAccepts = -1;\n    while (charCursor < charCount && (nextState = state.go(iterable[charCursor]))) {\n      state = nextState;\n\n      // Keep track of the latest accepting state\n      if (state.accepts()) {\n        sinceAccepts = 0;\n        charsSinceAccepts = 0;\n        latestAccepting = state;\n      } else if (sinceAccepts >= 0) {\n        sinceAccepts += iterable[charCursor].length;\n        charsSinceAccepts++;\n      }\n      tokenLength += iterable[charCursor].length;\n      cursor += iterable[charCursor].length;\n      charCursor++;\n    }\n\n    // Roll back to the latest accepting state\n    cursor -= sinceAccepts;\n    charCursor -= charsSinceAccepts;\n    tokenLength -= sinceAccepts;\n\n    // No more jumps, just make a new token from the last accepting one\n    tokens.push({\n      t: latestAccepting.t,\n      // token type/name\n      v: str.slice(cursor - tokenLength, cursor),\n      // string value\n      s: cursor - tokenLength,\n      // start index\n      e: cursor // end index (excluding)\n    });\n  }\n\n  return tokens;\n}\n\n/**\n * Convert a String to an Array of characters, taking into account that some\n * characters like emojis take up two string indexes.\n *\n * Adapted from core-js (MIT license)\n * https://github.com/zloirock/core-js/blob/2d69cf5f99ab3ea3463c395df81e5a15b68f49d9/packages/core-js/internals/string-multibyte.js\n *\n * @function stringToArray\n * @param {string} str\n * @returns {string[]}\n */\nfunction stringToArray(str) {\n  const result = [];\n  const len = str.length;\n  let index = 0;\n  while (index < len) {\n    let first = str.charCodeAt(index);\n    let second;\n    let char = first < 0xd800 || first > 0xdbff || index + 1 === len || (second = str.charCodeAt(index + 1)) < 0xdc00 || second > 0xdfff ? str[index] // single character\n    : str.slice(index, index + 2); // two-index characters\n    result.push(char);\n    index += char.length;\n  }\n  return result;\n}\n\n/**\n * Fast version of ts function for when transition defaults are well known\n * @param {State<string>} state\n * @param {string} input\n * @param {string} t\n * @param {string} defaultt\n * @param {[RegExp, State<string>][]} jr\n * @returns {State<string>}\n */\nfunction fastts(state, input, t, defaultt, jr) {\n  let next;\n  const len = input.length;\n  for (let i = 0; i < len - 1; i++) {\n    const char = input[i];\n    if (state.j[char]) {\n      next = state.j[char];\n    } else {\n      next = new State(defaultt);\n      next.jr = jr.slice();\n      state.j[char] = next;\n    }\n    state = next;\n  }\n  next = new State(t);\n  next.jr = jr.slice();\n  state.j[input[len - 1]] = next;\n  return next;\n}\n\n/**\n * Converts a string of Top-Level Domain names encoded in update-tlds.js back\n * into a list of strings.\n * @param {str} encoded encoded TLDs string\n * @returns {str[]} original TLDs list\n */\nfunction decodeTlds(encoded) {\n  const words = [];\n  const stack = [];\n  let i = 0;\n  let digits = '0123456789';\n  while (i < encoded.length) {\n    let popDigitCount = 0;\n    while (digits.indexOf(encoded[i + popDigitCount]) >= 0) {\n      popDigitCount++; // encountered some digits, have to pop to go one level up trie\n    }\n\n    if (popDigitCount > 0) {\n      words.push(stack.join('')); // whatever preceded the pop digits must be a word\n      for (let popCount = parseInt(encoded.substring(i, i + popDigitCount), 10); popCount > 0; popCount--) {\n        stack.pop();\n      }\n      i += popDigitCount;\n    } else {\n      stack.push(encoded[i]); // drop down a level into the trie\n      i++;\n    }\n  }\n  return words;\n}\n\n/**\n * An object where each key is a valid DOM Event Name such as `click` or `focus`\n * and each value is an event handler function.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Element#events\n * @typedef {?{ [event: string]: Function }} EventListeners\n */\n\n/**\n * All formatted properties required to render a link, including `tagName`,\n * `attributes`, `content` and `eventListeners`.\n * @typedef {{ tagName: any, attributes: {[attr: string]: any}, content: string,\n * eventListeners: EventListeners }} IntermediateRepresentation\n */\n\n/**\n * Specify either an object described by the template type `O` or a function.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `O`\n * @template O\n * @typedef {O | ((value: string, type: string, token: MultiToken) => O)} OptObj\n */\n\n/**\n * Specify either a function described by template type `F` or an object.\n *\n * Each key in the object should be a link type (`'url'`, `'hashtag`', etc.). Each\n * value should be a function with template type `F` that is called when the\n * corresponding link type is encountered.\n * @template F\n * @typedef {F | { [type: string]: F}} OptFn\n */\n\n/**\n * Specify either a value with template type `V`, a function that returns `V` or\n * an object where each value resolves to `V`.\n *\n * The function takes a string value (usually the link's href attribute), the\n * link type (`'url'`, `'hashtag`', etc.) and an internal token representation\n * of the link. It should return an object of the template type `V`\n *\n * For the object, each key should be a link type (`'url'`, `'hashtag`', etc.).\n * Each value should either have type `V` or a function that returns V. This\n * function similarly takes a string value and a token.\n *\n * Example valid types for `Opt<string>`:\n *\n * ```js\n * 'hello'\n * (value, type, token) => 'world'\n * { url: 'hello', email: (value, token) => 'world'}\n * ```\n * @template V\n * @typedef {V | ((value: string, type: string, token: MultiToken) => V) | { [type: string]: V | ((value: string, token: MultiToken) => V) }} Opt\n */\n\n/**\n * See available options: https://linkify.js.org/docs/options.html\n * @typedef {{\n * \tdefaultProtocol?: string,\n *  events?: OptObj<EventListeners>,\n * \tformat?: Opt<string>,\n * \tformatHref?: Opt<string>,\n * \tnl2br?: boolean,\n * \ttagName?: Opt<any>,\n * \ttarget?: Opt<string>,\n * \trel?: Opt<string>,\n * \tvalidate?: Opt<boolean>,\n * \ttruncate?: Opt<number>,\n * \tclassName?: Opt<string>,\n * \tattributes?: OptObj<({ [attr: string]: any })>,\n *  ignoreTags?: string[],\n * \trender?: OptFn<((ir: IntermediateRepresentation) => any)>\n * }} Opts\n */\n\n/**\n * @type Required<Opts>\n */\nconst defaults = {\n  defaultProtocol: 'http',\n  events: null,\n  format: noop,\n  formatHref: noop,\n  nl2br: false,\n  tagName: 'a',\n  target: null,\n  rel: null,\n  validate: true,\n  truncate: Infinity,\n  className: null,\n  attributes: null,\n  ignoreTags: [],\n  render: null\n};\n\n/**\n * Utility class for linkify interfaces to apply specified\n * {@link Opts formatting and rendering options}.\n *\n * @param {Opts | Options} [opts] Option value overrides.\n * @param {(ir: IntermediateRepresentation) => any} [defaultRender] (For\n *   internal use) default render function that determines how to generate an\n *   HTML element based on a link token's derived tagName, attributes and HTML.\n *   Similar to render option\n */\nfunction Options(opts, defaultRender) {\n  if (defaultRender === void 0) {\n    defaultRender = null;\n  }\n  let o = assign({}, defaults);\n  if (opts) {\n    o = assign(o, opts instanceof Options ? opts.o : opts);\n  }\n\n  // Ensure all ignored tags are uppercase\n  const ignoredTags = o.ignoreTags;\n  const uppercaseIgnoredTags = [];\n  for (let i = 0; i < ignoredTags.length; i++) {\n    uppercaseIgnoredTags.push(ignoredTags[i].toUpperCase());\n  }\n  /** @protected */\n  this.o = o;\n  if (defaultRender) {\n    this.defaultRender = defaultRender;\n  }\n  this.ignoreTags = uppercaseIgnoredTags;\n}\nOptions.prototype = {\n  o: defaults,\n  /**\n   * @type string[]\n   */\n  ignoreTags: [],\n  /**\n   * @param {IntermediateRepresentation} ir\n   * @returns {any}\n   */\n  defaultRender(ir) {\n    return ir;\n  },\n  /**\n   * Returns true or false based on whether a token should be displayed as a\n   * link based on the user options.\n   * @param {MultiToken} token\n   * @returns {boolean}\n   */\n  check(token) {\n    return this.get('validate', token.toString(), token);\n  },\n  // Private methods\n\n  /**\n   * Resolve an option's value based on the value of the option and the given\n   * params. If operator and token are specified and the target option is\n   * callable, automatically calls the function with the given argument.\n   * @template {keyof Opts} K\n   * @param {K} key Name of option to use\n   * @param {string} [operator] will be passed to the target option if it's a\n   * function. If not specified, RAW function value gets returned\n   * @param {MultiToken} [token] The token from linkify.tokenize\n   * @returns {Opts[K] | any}\n   */\n  get(key, operator, token) {\n    const isCallable = operator != null;\n    let option = this.o[key];\n    if (!option) {\n      return option;\n    }\n    if (typeof option === 'object') {\n      option = token.t in option ? option[token.t] : defaults[key];\n      if (typeof option === 'function' && isCallable) {\n        option = option(operator, token);\n      }\n    } else if (typeof option === 'function' && isCallable) {\n      option = option(operator, token.t, token);\n    }\n    return option;\n  },\n  /**\n   * @template {keyof Opts} L\n   * @param {L} key Name of options object to use\n   * @param {string} [operator]\n   * @param {MultiToken} [token]\n   * @returns {Opts[L] | any}\n   */\n  getObj(key, operator, token) {\n    let obj = this.o[key];\n    if (typeof obj === 'function' && operator != null) {\n      obj = obj(operator, token.t, token);\n    }\n    return obj;\n  },\n  /**\n   * Convert the given token to a rendered element that may be added to the\n   * calling-interface's DOM\n   * @param {MultiToken} token Token to render to an HTML element\n   * @returns {any} Render result; e.g., HTML string, DOM element, React\n   *   Component, etc.\n   */\n  render(token) {\n    const ir = token.render(this); // intermediate representation\n    const renderFn = this.get('render', null, token) || this.defaultRender;\n    return renderFn(ir, token.t, token);\n  }\n};\nfunction noop(val) {\n  return val;\n}\n\nvar options = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tdefaults: defaults,\n\tOptions: Options,\n\tassign: assign\n});\n\n/******************************************************************************\n\tMulti-Tokens\n\tTokens composed of arrays of TextTokens\n******************************************************************************/\n\n/**\n * @param {string} value\n * @param {Token[]} tokens\n */\nfunction MultiToken(value, tokens) {\n  this.t = 'token';\n  this.v = value;\n  this.tk = tokens;\n}\n\n/**\n * Abstract class used for manufacturing tokens of text tokens. That is rather\n * than the value for a token being a small string of text, it's value an array\n * of text tokens.\n *\n * Used for grouping together URLs, emails, hashtags, and other potential\n * creations.\n * @class MultiToken\n * @property {string} t\n * @property {string} v\n * @property {Token[]} tk\n * @abstract\n */\nMultiToken.prototype = {\n  isLink: false,\n  /**\n   * Return the string this token represents.\n   * @return {string}\n   */\n  toString() {\n    return this.v;\n  },\n  /**\n   * What should the value for this token be in the `href` HTML attribute?\n   * Returns the `.toString` value by default.\n   * @param {string} [scheme]\n   * @return {string}\n  */\n  toHref(scheme) {\n    return this.toString();\n  },\n  /**\n   * @param {Options} options Formatting options\n   * @returns {string}\n   */\n  toFormattedString(options) {\n    const val = this.toString();\n    const truncate = options.get('truncate', val, this);\n    const formatted = options.get('format', val, this);\n    return truncate && formatted.length > truncate ? formatted.substring(0, truncate) + '…' : formatted;\n  },\n  /**\n   *\n   * @param {Options} options\n   * @returns {string}\n   */\n  toFormattedHref(options) {\n    return options.get('formatHref', this.toHref(options.get('defaultProtocol')), this);\n  },\n  /**\n   * The start index of this token in the original input string\n   * @returns {number}\n   */\n  startIndex() {\n    return this.tk[0].s;\n  },\n  /**\n   * The end index of this token in the original input string (up to this\n   * index but not including it)\n   * @returns {number}\n   */\n  endIndex() {\n    return this.tk[this.tk.length - 1].e;\n  },\n  /**\n  \tReturns an object  of relevant values for this token, which includes keys\n  \t* type - Kind of token ('url', 'email', etc.)\n  \t* value - Original text\n  \t* href - The value that should be added to the anchor tag's href\n  \t\tattribute\n  \t\t@method toObject\n  \t@param {string} [protocol] `'http'` by default\n  */\n  toObject(protocol) {\n    if (protocol === void 0) {\n      protocol = defaults.defaultProtocol;\n    }\n    return {\n      type: this.t,\n      value: this.toString(),\n      isLink: this.isLink,\n      href: this.toHref(protocol),\n      start: this.startIndex(),\n      end: this.endIndex()\n    };\n  },\n  /**\n   *\n   * @param {Options} options Formatting option\n   */\n  toFormattedObject(options) {\n    return {\n      type: this.t,\n      value: this.toFormattedString(options),\n      isLink: this.isLink,\n      href: this.toFormattedHref(options),\n      start: this.startIndex(),\n      end: this.endIndex()\n    };\n  },\n  /**\n   * Whether this token should be rendered as a link according to the given options\n   * @param {Options} options\n   * @returns {boolean}\n   */\n  validate(options) {\n    return options.get('validate', this.toString(), this);\n  },\n  /**\n   * Return an object that represents how this link should be rendered.\n   * @param {Options} options Formattinng options\n   */\n  render(options) {\n    const token = this;\n    const href = this.toHref(options.get('defaultProtocol'));\n    const formattedHref = options.get('formatHref', href, this);\n    const tagName = options.get('tagName', href, token);\n    const content = this.toFormattedString(options);\n    const attributes = {};\n    const className = options.get('className', href, token);\n    const target = options.get('target', href, token);\n    const rel = options.get('rel', href, token);\n    const attrs = options.getObj('attributes', href, token);\n    const eventListeners = options.getObj('events', href, token);\n    attributes.href = formattedHref;\n    if (className) {\n      attributes.class = className;\n    }\n    if (target) {\n      attributes.target = target;\n    }\n    if (rel) {\n      attributes.rel = rel;\n    }\n    if (attrs) {\n      assign(attributes, attrs);\n    }\n    return {\n      tagName,\n      attributes,\n      content,\n      eventListeners\n    };\n  }\n};\n\n/**\n * Create a new token that can be emitted by the parser state machine\n * @param {string} type readable type of the token\n * @param {object} props properties to assign or override, including isLink = true or false\n * @returns {new (value: string, tokens: Token[]) => MultiToken} new token class\n */\nfunction createTokenClass(type, props) {\n  class Token extends MultiToken {\n    constructor(value, tokens) {\n      super(value, tokens);\n      this.t = type;\n    }\n  }\n  for (const p in props) {\n    Token.prototype[p] = props[p];\n  }\n  Token.t = type;\n  return Token;\n}\n\n/**\n\tRepresents a list of tokens making up a valid email address\n*/\nconst Email = createTokenClass('email', {\n  isLink: true,\n  toHref() {\n    return 'mailto:' + this.toString();\n  }\n});\n\n/**\n\tRepresents some plain text\n*/\nconst Text = createTokenClass('text');\n\n/**\n\tMulti-linebreak token - represents a line break\n\t@class Nl\n*/\nconst Nl = createTokenClass('nl');\n\n/**\n\tRepresents a list of text tokens making up a valid URL\n\t@class Url\n*/\nconst Url = createTokenClass('url', {\n  isLink: true,\n  /**\n  \tLowercases relevant parts of the domain and adds the protocol if\n  \trequired. Note that this will not escape unsafe HTML characters in the\n  \tURL.\n  \t\t@param {string} [scheme] default scheme (e.g., 'https')\n  \t@return {string} the full href\n  */\n  toHref(scheme) {\n    if (scheme === void 0) {\n      scheme = defaults.defaultProtocol;\n    }\n    // Check if already has a prefix scheme\n    return this.hasProtocol() ? this.v : `${scheme}://${this.v}`;\n  },\n  /**\n   * Check whether this URL token has a protocol\n   * @return {boolean}\n   */\n  hasProtocol() {\n    const tokens = this.tk;\n    return tokens.length >= 2 && tokens[0].t !== LOCALHOST && tokens[1].t === COLON;\n  }\n});\n\nvar multi = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tMultiToken: MultiToken,\n\tBase: MultiToken,\n\tcreateTokenClass: createTokenClass,\n\tEmail: Email,\n\tText: Text,\n\tNl: Nl,\n\tUrl: Url\n});\n\n/**\n\tNot exactly parser, more like the second-stage scanner (although we can\n\ttheoretically hotswap the code here with a real parser in the future... but\n\tfor a little URL-finding utility abstract syntax trees may be a little\n\toverkill).\n\n\tURL format: http://en.wikipedia.org/wiki/URI_scheme\n\tEmail format: http://en.wikipedia.org/wiki/EmailAddress (links to RFC in\n\treference)\n\n\t@module linkify\n\t@submodule parser\n\t@main run\n*/\nconst makeState = arg => new State(arg);\n\n/**\n * Generate the parser multi token-based state machine\n * @param {{ groups: Collections<string> }} tokens\n */\nfunction init$1(_ref) {\n  let {\n    groups\n  } = _ref;\n  // Types of characters the URL can definitely end in\n  const qsAccepting = groups.domain.concat([AMPERSAND, ASTERISK, AT, BACKSLASH, BACKTICK, CARET, DOLLAR, EQUALS, HYPHEN, NUM, PERCENT, PIPE, PLUS, POUND, SLASH, SYM, TILDE, UNDERSCORE]);\n\n  // Types of tokens that can follow a URL and be part of the query string\n  // but cannot be the very last characters\n  // Characters that cannot appear in the URL at all should be excluded\n  const qsNonAccepting = [APOSTROPHE, CLOSEANGLEBRACKET, CLOSEBRACE, CLOSEBRACKET, CLOSEPAREN, COLON, COMMA, DOT, EXCLAMATION, OPENANGLEBRACKET, OPENBRACE, OPENBRACKET, OPENPAREN, QUERY, QUOTE, SEMI];\n\n  // For addresses without the mailto prefix\n  // Tokens allowed in the localpart of the email\n  const localpartAccepting = [AMPERSAND, APOSTROPHE, ASTERISK, BACKSLASH, BACKTICK, CARET, CLOSEBRACE, DOLLAR, EQUALS, HYPHEN, OPENBRACE, PERCENT, PIPE, PLUS, POUND, QUERY, SLASH, SYM, TILDE, UNDERSCORE];\n\n  // The universal starting state.\n  /**\n   * @type State<Token>\n   */\n  const Start = makeState();\n  const Localpart = tt(Start, TILDE); // Local part of the email address\n  ta(Localpart, localpartAccepting, Localpart);\n  ta(Localpart, groups.domain, Localpart);\n  const Domain = makeState(),\n    Scheme = makeState(),\n    SlashScheme = makeState();\n  ta(Start, groups.domain, Domain); // parsed string ends with a potential domain name (A)\n  ta(Start, groups.scheme, Scheme); // e.g., 'mailto'\n  ta(Start, groups.slashscheme, SlashScheme); // e.g., 'http'\n\n  ta(Domain, localpartAccepting, Localpart);\n  ta(Domain, groups.domain, Domain);\n  const LocalpartAt = tt(Domain, AT); // Local part of the email address plus @\n\n  tt(Localpart, AT, LocalpartAt); // close to an email address now\n\n  // Local part of an email address can be e.g. 'http' or 'mailto'\n  tt(Scheme, AT, LocalpartAt);\n  tt(SlashScheme, AT, LocalpartAt);\n  const LocalpartDot = tt(Localpart, DOT); // Local part of the email address plus '.' (localpart cannot end in .)\n  ta(LocalpartDot, localpartAccepting, Localpart);\n  ta(LocalpartDot, groups.domain, Localpart);\n  const EmailDomain = makeState();\n  ta(LocalpartAt, groups.domain, EmailDomain); // parsed string starts with local email info + @ with a potential domain name\n  ta(EmailDomain, groups.domain, EmailDomain);\n  const EmailDomainDot = tt(EmailDomain, DOT); // domain followed by DOT\n  ta(EmailDomainDot, groups.domain, EmailDomain);\n  const Email$1 = makeState(Email); // Possible email address (could have more tlds)\n  ta(EmailDomainDot, groups.tld, Email$1);\n  ta(EmailDomainDot, groups.utld, Email$1);\n  tt(LocalpartAt, LOCALHOST, Email$1);\n\n  // Hyphen can jump back to a domain name\n  const EmailDomainHyphen = tt(EmailDomain, HYPHEN); // parsed string starts with local email info + @ with a potential domain name\n  ta(EmailDomainHyphen, groups.domain, EmailDomain);\n  ta(Email$1, groups.domain, EmailDomain);\n  tt(Email$1, DOT, EmailDomainDot);\n  tt(Email$1, HYPHEN, EmailDomainHyphen);\n\n  // Final possible email states\n  const EmailColon = tt(Email$1, COLON); // URL followed by colon (potential port number here)\n  /*const EmailColonPort = */\n  ta(EmailColon, groups.numeric, Email); // URL followed by colon and port numner\n\n  // Account for dots and hyphens. Hyphens are usually parts of domain names\n  // (but not TLDs)\n  const DomainHyphen = tt(Domain, HYPHEN); // domain followed by hyphen\n  const DomainDot = tt(Domain, DOT); // domain followed by DOT\n  ta(DomainHyphen, groups.domain, Domain);\n  ta(DomainDot, localpartAccepting, Localpart);\n  ta(DomainDot, groups.domain, Domain);\n  const DomainDotTld = makeState(Url); // Simplest possible URL with no query string\n  ta(DomainDot, groups.tld, DomainDotTld);\n  ta(DomainDot, groups.utld, DomainDotTld);\n  ta(DomainDotTld, groups.domain, Domain);\n  ta(DomainDotTld, localpartAccepting, Localpart);\n  tt(DomainDotTld, DOT, DomainDot);\n  tt(DomainDotTld, HYPHEN, DomainHyphen);\n  tt(DomainDotTld, AT, LocalpartAt);\n  const DomainDotTldColon = tt(DomainDotTld, COLON); // URL followed by colon (potential port number here)\n  const DomainDotTldColonPort = makeState(Url); // TLD followed by a port number\n  ta(DomainDotTldColon, groups.numeric, DomainDotTldColonPort);\n\n  // Long URL with optional port and maybe query string\n  const Url$1 = makeState(Url);\n\n  // URL with extra symbols at the end, followed by an opening bracket\n  const UrlNonaccept = makeState(); // URL followed by some symbols (will not be part of the final URL)\n\n  // Query strings\n  ta(Url$1, qsAccepting, Url$1);\n  ta(Url$1, qsNonAccepting, UrlNonaccept);\n  ta(UrlNonaccept, qsAccepting, Url$1);\n  ta(UrlNonaccept, qsNonAccepting, UrlNonaccept);\n\n  // Become real URLs after `SLASH` or `COLON NUM SLASH`\n  // Here works with or without scheme:// prefix\n  tt(DomainDotTld, SLASH, Url$1);\n  tt(DomainDotTldColonPort, SLASH, Url$1);\n\n  // Note that domains that begin with schemes are treated slighly differently\n  const SchemeColon = tt(Scheme, COLON); // e.g., 'mailto:'\n  const SlashSchemeColon = tt(SlashScheme, COLON); // e.g., 'http:'\n  const SlashSchemeColonSlash = tt(SlashSchemeColon, SLASH); // e.g., 'http:/'\n\n  const UriPrefix = tt(SlashSchemeColonSlash, SLASH); // e.g., 'http://'\n\n  // Scheme states can transition to domain states\n  ta(Scheme, groups.domain, Domain);\n  tt(Scheme, DOT, DomainDot);\n  tt(Scheme, HYPHEN, DomainHyphen);\n  ta(SlashScheme, groups.domain, Domain);\n  tt(SlashScheme, DOT, DomainDot);\n  tt(SlashScheme, HYPHEN, DomainHyphen);\n\n  // Force URL with scheme prefix followed by anything sane\n  ta(SchemeColon, groups.domain, Url$1);\n  tt(SchemeColon, SLASH, Url$1);\n  ta(UriPrefix, groups.domain, Url$1);\n  ta(UriPrefix, qsAccepting, Url$1);\n  tt(UriPrefix, SLASH, Url$1);\n\n  // URL, followed by an opening bracket\n  const UrlOpenbrace = tt(Url$1, OPENBRACE); // URL followed by {\n  const UrlOpenbracket = tt(Url$1, OPENBRACKET); // URL followed by [\n  const UrlOpenanglebracket = tt(Url$1, OPENANGLEBRACKET); // URL followed by <\n  const UrlOpenparen = tt(Url$1, OPENPAREN); // URL followed by (\n\n  tt(UrlNonaccept, OPENBRACE, UrlOpenbrace);\n  tt(UrlNonaccept, OPENBRACKET, UrlOpenbracket);\n  tt(UrlNonaccept, OPENANGLEBRACKET, UrlOpenanglebracket);\n  tt(UrlNonaccept, OPENPAREN, UrlOpenparen);\n\n  // Closing bracket component. This character WILL be included in the URL\n  tt(UrlOpenbrace, CLOSEBRACE, Url$1);\n  tt(UrlOpenbracket, CLOSEBRACKET, Url$1);\n  tt(UrlOpenanglebracket, CLOSEANGLEBRACKET, Url$1);\n  tt(UrlOpenparen, CLOSEPAREN, Url$1);\n  tt(UrlOpenbrace, CLOSEBRACE, Url$1);\n\n  // URL that beings with an opening bracket, followed by a symbols.\n  // Note that the final state can still be `UrlOpenbrace` (if the URL only\n  // has a single opening bracket for some reason).\n  const UrlOpenbraceQ = makeState(Url); // URL followed by { and some symbols that the URL can end it\n  const UrlOpenbracketQ = makeState(Url); // URL followed by [ and some symbols that the URL can end it\n  const UrlOpenanglebracketQ = makeState(Url); // URL followed by < and some symbols that the URL can end it\n  const UrlOpenparenQ = makeState(Url); // URL followed by ( and some symbols that the URL can end it\n  ta(UrlOpenbrace, qsAccepting, UrlOpenbraceQ);\n  ta(UrlOpenbracket, qsAccepting, UrlOpenbracketQ);\n  ta(UrlOpenanglebracket, qsAccepting, UrlOpenanglebracketQ);\n  ta(UrlOpenparen, qsAccepting, UrlOpenparenQ);\n  const UrlOpenbraceSyms = makeState(); // UrlOpenbrace followed by some symbols it cannot end it\n  const UrlOpenbracketSyms = makeState(); // UrlOpenbracketQ followed by some symbols it cannot end it\n  const UrlOpenanglebracketSyms = makeState(); // UrlOpenanglebracketQ followed by some symbols it cannot end it\n  const UrlOpenparenSyms = makeState(); // UrlOpenparenQ followed by some symbols it cannot end it\n  ta(UrlOpenbrace, qsNonAccepting);\n  ta(UrlOpenbracket, qsNonAccepting);\n  ta(UrlOpenanglebracket, qsNonAccepting);\n  ta(UrlOpenparen, qsNonAccepting);\n\n  // URL that begins with an opening bracket, followed by some symbols\n  ta(UrlOpenbraceQ, qsAccepting, UrlOpenbraceQ);\n  ta(UrlOpenbracketQ, qsAccepting, UrlOpenbracketQ);\n  ta(UrlOpenanglebracketQ, qsAccepting, UrlOpenanglebracketQ);\n  ta(UrlOpenparenQ, qsAccepting, UrlOpenparenQ);\n  ta(UrlOpenbraceQ, qsNonAccepting, UrlOpenbraceQ);\n  ta(UrlOpenbracketQ, qsNonAccepting, UrlOpenbracketQ);\n  ta(UrlOpenanglebracketQ, qsNonAccepting, UrlOpenanglebracketQ);\n  ta(UrlOpenparenQ, qsNonAccepting, UrlOpenparenQ);\n  ta(UrlOpenbraceSyms, qsAccepting, UrlOpenbraceSyms);\n  ta(UrlOpenbracketSyms, qsAccepting, UrlOpenbracketQ);\n  ta(UrlOpenanglebracketSyms, qsAccepting, UrlOpenanglebracketQ);\n  ta(UrlOpenparenSyms, qsAccepting, UrlOpenparenQ);\n  ta(UrlOpenbraceSyms, qsNonAccepting, UrlOpenbraceSyms);\n  ta(UrlOpenbracketSyms, qsNonAccepting, UrlOpenbracketSyms);\n  ta(UrlOpenanglebracketSyms, qsNonAccepting, UrlOpenanglebracketSyms);\n  ta(UrlOpenparenSyms, qsNonAccepting, UrlOpenparenSyms);\n\n  // Close brace/bracket to become regular URL\n  tt(UrlOpenbracketQ, CLOSEBRACKET, Url$1);\n  tt(UrlOpenanglebracketQ, CLOSEANGLEBRACKET, Url$1);\n  tt(UrlOpenparenQ, CLOSEPAREN, Url$1);\n  tt(UrlOpenbraceQ, CLOSEBRACE, Url$1);\n  tt(UrlOpenbracketSyms, CLOSEBRACKET, Url$1);\n  tt(UrlOpenanglebracketSyms, CLOSEANGLEBRACKET, Url$1);\n  tt(UrlOpenparenSyms, CLOSEPAREN, Url$1);\n  tt(UrlOpenbraceSyms, CLOSEPAREN, Url$1);\n  tt(Start, LOCALHOST, DomainDotTld); // localhost is a valid URL state\n  tt(Start, NL$1, Nl); // single new line\n\n  return {\n    start: Start,\n    tokens: tk\n  };\n}\n\n/**\n * Run the parser state machine on a list of scanned string-based tokens to\n * create a list of multi tokens, each of which represents a URL, email address,\n * plain text, etc.\n *\n * @param {State<MultiToken>} start parser start state\n * @param {string} input the original input used to generate the given tokens\n * @param {Token[]} tokens list of scanned tokens\n * @returns {MultiToken[]}\n */\nfunction run(start, input, tokens) {\n  let len = tokens.length;\n  let cursor = 0;\n  let multis = [];\n  let textTokens = [];\n  while (cursor < len) {\n    let state = start;\n    let secondState = null;\n    let nextState = null;\n    let multiLength = 0;\n    let latestAccepting = null;\n    let sinceAccepts = -1;\n    while (cursor < len && !(secondState = state.go(tokens[cursor].t))) {\n      // Starting tokens with nowhere to jump to.\n      // Consider these to be just plain text\n      textTokens.push(tokens[cursor++]);\n    }\n    while (cursor < len && (nextState = secondState || state.go(tokens[cursor].t))) {\n      // Get the next state\n      secondState = null;\n      state = nextState;\n\n      // Keep track of the latest accepting state\n      if (state.accepts()) {\n        sinceAccepts = 0;\n        latestAccepting = state;\n      } else if (sinceAccepts >= 0) {\n        sinceAccepts++;\n      }\n      cursor++;\n      multiLength++;\n    }\n    if (sinceAccepts < 0) {\n      // No accepting state was found, part of a regular text token add\n      // the first text token to the text tokens array and try again from\n      // the next\n      cursor -= multiLength;\n      if (cursor < len) {\n        textTokens.push(tokens[cursor]);\n        cursor++;\n      }\n    } else {\n      // Accepting state!\n      // First close off the textTokens (if available)\n      if (textTokens.length > 0) {\n        multis.push(initMultiToken(Text, input, textTokens));\n        textTokens = [];\n      }\n\n      // Roll back to the latest accepting state\n      cursor -= sinceAccepts;\n      multiLength -= sinceAccepts;\n\n      // Create a new multitoken\n      const Multi = latestAccepting.t;\n      const subtokens = tokens.slice(cursor - multiLength, cursor);\n      multis.push(initMultiToken(Multi, input, subtokens));\n    }\n  }\n\n  // Finally close off the textTokens (if available)\n  if (textTokens.length > 0) {\n    multis.push(initMultiToken(Text, input, textTokens));\n  }\n  return multis;\n}\n\n/**\n * Utility function for instantiating a new multitoken with all the relevant\n * fields during parsing.\n * @param {new (value: string, tokens: Token[]) => MultiToken} Multi class to instantiate\n * @param {string} input original input string\n * @param {Token[]} tokens consecutive tokens scanned from input string\n * @returns {MultiToken}\n */\nfunction initMultiToken(Multi, input, tokens) {\n  const startIdx = tokens[0].s;\n  const endIdx = tokens[tokens.length - 1].e;\n  const value = input.slice(startIdx, endIdx);\n  return new Multi(value, tokens);\n}\n\nconst warn = typeof console !== 'undefined' && console && console.warn || (() => {});\nconst warnAdvice = 'until manual call of linkify.init(). Register all schemes and plugins before invoking linkify the first time.';\n\n// Side-effect initialization state\nconst INIT = {\n  scanner: null,\n  parser: null,\n  tokenQueue: [],\n  pluginQueue: [],\n  customSchemes: [],\n  initialized: false\n};\n\n/**\n * @typedef {{\n * \tstart: State<string>,\n * \ttokens: { groups: Collections<string> } & typeof tk\n * }} ScannerInit\n */\n\n/**\n * @typedef {{\n * \tstart: State<MultiToken>,\n * \ttokens: typeof multi\n * }} ParserInit\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit }) => void} TokenPlugin\n */\n\n/**\n * @typedef {(arg: { scanner: ScannerInit, parser: ParserInit }) => void} Plugin\n */\n\n/**\n * De-register all plugins and reset the internal state-machine. Used for\n * testing; not required in practice.\n * @private\n */\nfunction reset() {\n  State.groups = {};\n  INIT.scanner = null;\n  INIT.parser = null;\n  INIT.tokenQueue = [];\n  INIT.pluginQueue = [];\n  INIT.customSchemes = [];\n  INIT.initialized = false;\n}\n\n/**\n * Register a token plugin to allow the scanner to recognize additional token\n * types before the parser state machine is constructed from the results.\n * @param {string} name of plugin to register\n * @param {TokenPlugin} plugin function that accepts the scanner state machine\n * and available scanner tokens and collections and extends the state machine to\n * recognize additional tokens or groups.\n */\nfunction registerTokenPlugin(name, plugin) {\n  if (typeof plugin !== 'function') {\n    throw new Error(`linkifyjs: Invalid token plugin ${plugin} (expects function)`);\n  }\n  for (let i = 0; i < INIT.tokenQueue.length; i++) {\n    if (name === INIT.tokenQueue[i][0]) {\n      warn(`linkifyjs: token plugin \"${name}\" already registered - will be overwritten`);\n      INIT.tokenQueue[i] = [name, plugin];\n      return;\n    }\n  }\n  INIT.tokenQueue.push([name, plugin]);\n  if (INIT.initialized) {\n    warn(`linkifyjs: already initialized - will not register token plugin \"${name}\" ${warnAdvice}`);\n  }\n}\n\n/**\n * Register a linkify plugin\n * @param {string} name of plugin to register\n * @param {Plugin} plugin function that accepts the parser state machine and\n * extends the parser to recognize additional link types\n */\nfunction registerPlugin(name, plugin) {\n  if (typeof plugin !== 'function') {\n    throw new Error(`linkifyjs: Invalid plugin ${plugin} (expects function)`);\n  }\n  for (let i = 0; i < INIT.pluginQueue.length; i++) {\n    if (name === INIT.pluginQueue[i][0]) {\n      warn(`linkifyjs: plugin \"${name}\" already registered - will be overwritten`);\n      INIT.pluginQueue[i] = [name, plugin];\n      return;\n    }\n  }\n  INIT.pluginQueue.push([name, plugin]);\n  if (INIT.initialized) {\n    warn(`linkifyjs: already initialized - will not register plugin \"${name}\" ${warnAdvice}`);\n  }\n}\n\n/**\n * Detect URLs with the following additional protocol. Anything with format\n * \"protocol://...\" will be considered a link. If `optionalSlashSlash` is set to\n * `true`, anything with format \"protocol:...\" will be considered a link.\n * @param {string} protocol\n * @param {boolean} [optionalSlashSlash]\n */\nfunction registerCustomProtocol(scheme, optionalSlashSlash) {\n  if (optionalSlashSlash === void 0) {\n    optionalSlashSlash = false;\n  }\n  if (INIT.initialized) {\n    warn(`linkifyjs: already initialized - will not register custom scheme \"${scheme}\" ${warnAdvice}`);\n  }\n  if (!/^[0-9a-z]+(-[0-9a-z]+)*$/.test(scheme)) {\n    throw new Error('linkifyjs: incorrect scheme format.\\n 1. Must only contain digits, lowercase ASCII letters or \"-\"\\n 2. Cannot start or end with \"-\"\\n 3. \"-\" cannot repeat');\n  }\n  INIT.customSchemes.push([scheme, optionalSlashSlash]);\n}\n\n/**\n * Initialize the linkify state machine. Called automatically the first time\n * linkify is called on a string, but may be called manually as well.\n */\nfunction init() {\n  // Initialize scanner state machine and plugins\n  INIT.scanner = init$2(INIT.customSchemes);\n  for (let i = 0; i < INIT.tokenQueue.length; i++) {\n    INIT.tokenQueue[i][1]({\n      scanner: INIT.scanner\n    });\n  }\n\n  // Initialize parser state machine and plugins\n  INIT.parser = init$1(INIT.scanner.tokens);\n  for (let i = 0; i < INIT.pluginQueue.length; i++) {\n    INIT.pluginQueue[i][1]({\n      scanner: INIT.scanner,\n      parser: INIT.parser\n    });\n  }\n  INIT.initialized = true;\n}\n\n/**\n * Parse a string into tokens that represent linkable and non-linkable sub-components\n * @param {string} str\n * @return {MultiToken[]} tokens\n */\nfunction tokenize(str) {\n  if (!INIT.initialized) {\n    init();\n  }\n  return run(INIT.parser.start, str, run$1(INIT.scanner.start, str));\n}\n\n/**\n * Find a list of linkable items in the given string.\n * @param {string} str string to find links in\n * @param {string | Opts} [type] either formatting options or specific type of\n * links to find, e.g., 'url' or 'email'\n * @param {Opts} [opts] formatting options for final output. Cannot be specified\n * if opts already provided in `type` argument\n*/\nfunction find(str, type, opts) {\n  if (type === void 0) {\n    type = null;\n  }\n  if (opts === void 0) {\n    opts = null;\n  }\n  if (type && typeof type === 'object') {\n    if (opts) {\n      throw Error(`linkifyjs: Invalid link type ${type}; must be a string`);\n    }\n    opts = type;\n    type = null;\n  }\n  const options = new Options(opts);\n  const tokens = tokenize(str);\n  const filtered = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    if (token.isLink && (!type || token.t === type)) {\n      filtered.push(token.toFormattedObject(options));\n    }\n  }\n  return filtered;\n}\n\n/**\n * Is the given string valid linkable text of some sort. Note that this does not\n * trim the text for you.\n *\n * Optionally pass in a second `type` param, which is the type of link to test\n * for.\n *\n * For example,\n *\n *     linkify.test(str, 'email');\n *\n * Returns `true` if str is a valid email.\n * @param {string} str string to test for links\n * @param {string} [type] optional specific link type to look for\n * @returns boolean true/false\n */\nfunction test(str, type) {\n  if (type === void 0) {\n    type = null;\n  }\n  const tokens = tokenize(str);\n  return tokens.length === 1 && tokens[0].isLink && (!type || tokens[0].t === type);\n}\n\nexport { MultiToken, Options, State, createTokenClass, find, init, multi, options, regexp, registerCustomProtocol, registerPlugin, registerTokenPlugin, reset, stringToArray, test, tokenize };\n","import { Options, tokenize } from 'linkifyjs';\n\n/**\n\tConvert strings of text into linkable HTML text\n*/\nfunction escapeText(text) {\n  return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n}\nfunction escapeAttr(href) {\n  return href.replace(/\"/g, '&quot;');\n}\nfunction attributesToString(attributes) {\n  const result = [];\n  for (const attr in attributes) {\n    let val = attributes[attr] + '';\n    result.push(`${attr}=\"${escapeAttr(val)}\"`);\n  }\n  return result.join(' ');\n}\nfunction defaultRender(_ref) {\n  let {\n    tagName,\n    attributes,\n    content\n  } = _ref;\n  return `<${tagName} ${attributesToString(attributes)}>${escapeText(content)}</${tagName}>`;\n}\n\n/**\n * Convert a plan text string to an HTML string with links. Expects that the\n * given strings does not contain any HTML entities. Use the linkify-html\n * interface if you need to parse HTML entities.\n *\n * @param {string} str string to linkify\n * @param {import('linkifyjs').Opts} [opts] overridable options\n * @returns {string}\n */\nfunction linkifyStr(str, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  opts = new Options(opts, defaultRender);\n  const tokens = tokenize(str);\n  const result = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    if (token.t === 'nl' && opts.get('nl2br')) {\n      result.push('<br>\\n');\n    } else if (!token.isLink || !opts.check(token)) {\n      result.push(escapeText(token.toString()));\n    } else {\n      result.push(opts.render(token));\n    }\n  }\n  return result.join('');\n}\nif (!String.prototype.linkify) {\n  Object.defineProperty(String.prototype, 'linkify', {\n    writable: false,\n    value: function linkify(options) {\n      return linkifyStr(this, options);\n    }\n  });\n}\n\nexport { linkifyStr as default };\n","'use strict';\n\n(function (global) {\n\n    // minimal symbol polyfill for IE11 and others\n    if (typeof Symbol !== 'function') {\n        var Symbol = function(name) {\n            return name;\n        }\n\n        Symbol.nonNative = true;\n    }\n\n    const STATE_PLAINTEXT = Symbol('plaintext');\n    const STATE_HTML      = Symbol('html');\n    const STATE_COMMENT   = Symbol('comment');\n\n    const ALLOWED_TAGS_REGEX  = /<(\\w*)>/g;\n    const NORMALIZE_TAG_REGEX = /<\\/?([^\\s\\/>]+)/;\n\n    function striptags(html, allowable_tags, tag_replacement) {\n        html            = html || '';\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return striptags_internal(html, context);\n    }\n\n    function init_striptags_stream(allowable_tags, tag_replacement) {\n        allowable_tags  = allowable_tags || [];\n        tag_replacement = tag_replacement || '';\n\n        let context = init_context(allowable_tags, tag_replacement);\n\n        return function striptags_stream(html) {\n            return striptags_internal(html || '', context);\n        };\n    }\n\n    striptags.init_streaming_mode = init_striptags_stream;\n\n    function init_context(allowable_tags, tag_replacement) {\n        allowable_tags = parse_allowable_tags(allowable_tags);\n\n        return {\n            allowable_tags : allowable_tags,\n            tag_replacement: tag_replacement,\n\n            state         : STATE_PLAINTEXT,\n            tag_buffer    : '',\n            depth         : 0,\n            in_quote_char : ''\n        };\n    }\n\n    function striptags_internal(html, context) {\n        if (typeof html != \"string\") {\n            throw new TypeError(\"'html' parameter must be a string\");\n        }\n\n        let allowable_tags  = context.allowable_tags;\n        let tag_replacement = context.tag_replacement;\n\n        let state         = context.state;\n        let tag_buffer    = context.tag_buffer;\n        let depth         = context.depth;\n        let in_quote_char = context.in_quote_char;\n        let output        = '';\n\n        for (let idx = 0, length = html.length; idx < length; idx++) {\n            let char = html[idx];\n\n            if (state === STATE_PLAINTEXT) {\n                switch (char) {\n                    case '<':\n                        state       = STATE_HTML;\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        output += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_HTML) {\n                switch (char) {\n                    case '<':\n                        // ignore '<' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // we're seeing a nested '<'\n                        depth++;\n                        break;\n\n                    case '>':\n                        // ignore '>' if inside a quote\n                        if (in_quote_char) {\n                            break;\n                        }\n\n                        // something like this is happening: '<<>>'\n                        if (depth) {\n                            depth--;\n\n                            break;\n                        }\n\n                        // this is closing the tag in tag_buffer\n                        in_quote_char = '';\n                        state         = STATE_PLAINTEXT;\n                        tag_buffer   += '>';\n\n                        if (allowable_tags.has(normalize_tag(tag_buffer))) {\n                            output += tag_buffer;\n                        } else {\n                            output += tag_replacement;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    case '\"':\n                    case '\\'':\n                        // catch both single and double quotes\n\n                        if (char === in_quote_char) {\n                            in_quote_char = '';\n                        } else {\n                            in_quote_char = in_quote_char || char;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case '-':\n                        if (tag_buffer === '<!-') {\n                            state = STATE_COMMENT;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    case ' ':\n                    case '\\n':\n                        if (tag_buffer === '<') {\n                            state      = STATE_PLAINTEXT;\n                            output    += '< ';\n                            tag_buffer = '';\n\n                            break;\n                        }\n\n                        tag_buffer += char;\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n\n            else if (state === STATE_COMMENT) {\n                switch (char) {\n                    case '>':\n                        if (tag_buffer.slice(-2) == '--') {\n                            // close the comment\n                            state = STATE_PLAINTEXT;\n                        }\n\n                        tag_buffer = '';\n                        break;\n\n                    default:\n                        tag_buffer += char;\n                        break;\n                }\n            }\n        }\n\n        // save the context for future iterations\n        context.state         = state;\n        context.tag_buffer    = tag_buffer;\n        context.depth         = depth;\n        context.in_quote_char = in_quote_char;\n\n        return output;\n    }\n\n    function parse_allowable_tags(allowable_tags) {\n        let tag_set = new Set();\n\n        if (typeof allowable_tags === 'string') {\n            let match;\n\n            while ((match = ALLOWED_TAGS_REGEX.exec(allowable_tags))) {\n                tag_set.add(match[1]);\n            }\n        }\n\n        else if (!Symbol.nonNative &&\n                 typeof allowable_tags[Symbol.iterator] === 'function') {\n\n            tag_set = new Set(allowable_tags);\n        }\n\n        else if (typeof allowable_tags.forEach === 'function') {\n            // IE11 compatible\n            allowable_tags.forEach(tag_set.add, tag_set);\n        }\n\n        return tag_set;\n    }\n\n    function normalize_tag(tag_buffer) {\n        let match = NORMALIZE_TAG_REGEX.exec(tag_buffer);\n\n        return match ? match[1].toLowerCase() : null;\n    }\n\n    if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(function module_factory() { return striptags; });\n    }\n\n    else if (typeof module === 'object' && module.exports) {\n        // Node\n        module.exports = striptags;\n    }\n\n    else {\n        // Browser\n        global.striptags = striptags;\n    }\n}(this));\n","import Vue from 'vue'\nimport { getCurrentInstance } from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n  var vm\n  var provide = {}\n  var app = {\n    config: Vue.config,\n    use: Vue.use.bind(Vue),\n    mixin: Vue.mixin.bind(Vue),\n    component: Vue.component.bind(Vue),\n    provide: function (key, value) {\n      provide[key] = value\n      return this\n    },\n    directive: function (name, dir) {\n      if (dir) {\n        Vue.directive(name, dir)\n        return app\n      } else {\n        return Vue.directive(name)\n      }\n    },\n    mount: function (el, hydrating) {\n      if (!vm) {\n        vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n        vm.$mount(el, hydrating)\n        return vm\n      } else {\n        return vm\n      }\n    },\n    unmount: function () {\n      if (vm) {\n        vm.$destroy()\n        vm = undefined\n      }\n    },\n  }\n  return app\n}\n\nexport {\n  Vue,\n  Vue2,\n  isVue2,\n  isVue3,\n  install,\n  warn\n}\n\n// Vue 3 components mock\nfunction createMockComponent(name) {\n  return {\n    setup() {\n      throw new Error('[vue-demi] ' + name + ' is not supported in Vue 2. It\\'s provided to avoid compiler errors.')\n    }\n  }\n}\nexport var Fragment = /*#__PURE__*/ createMockComponent('Fragment')\nexport var Transition = /*#__PURE__*/ createMockComponent('Transition')\nexport var TransitionGroup = /*#__PURE__*/ createMockComponent('TransitionGroup')\nexport var Teleport = /*#__PURE__*/ createMockComponent('Teleport')\nexport var Suspense = /*#__PURE__*/ createMockComponent('Suspense')\nexport var KeepAlive = /*#__PURE__*/ createMockComponent('KeepAlive')\n\nexport * from 'vue'\n\n// Not implemented https://github.com/vuejs/core/pull/8111, falls back to getCurrentInstance()\nexport function hasInjectionContext() {\n  return !!getCurrentInstance()\n}\n","import { defineComponent, ref, h, watch, computed, reactive, shallowRef, nextTick, getCurrentInstance, onMounted, isVue2, watchEffect, toRefs } from 'vue-demi';\nimport { onClickOutside as onClickOutside$1, useActiveElement, useBattery, useBrowserLocation, useClipboard, useDark, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDocumentVisibility, useStorage as useStorage$1, isClient as isClient$1, useDraggable, useElementBounding, useElementSize as useElementSize$1, useElementVisibility as useElementVisibility$1, useEyeDropper, useFullscreen, useGeolocation, useIdle, useMouse, useMouseInElement, useMousePressed, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, usePointer, usePointerLock, usePreferredColorScheme, usePreferredContrast, usePreferredDark as usePreferredDark$1, usePreferredLanguages, usePreferredReducedMotion, useTimeAgo, useTimestamp, useVirtualList, useWindowFocus, useWindowSize } from '@vueuse/core';\nimport { toValue, isClient, noop, isObject, tryOnScopeDispose, isIOS, directiveHooks, pausableWatch, tryOnMounted, toRef, useToggle, notNullish, promiseTimeout, until, useDebounceFn, useThrottleFn } from '@vueuse/shared';\n\nconst OnClickOutside = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"OnClickOutside\",\n  props: [\"as\", \"options\"],\n  emits: [\"trigger\"],\n  setup(props, { slots, emit }) {\n    const target = ref();\n    onClickOutside$1(target, (e) => {\n      emit(\"trigger\", e);\n    }, props.options);\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\n  }\n});\n\nfunction unrefElement(elRef) {\n  var _a;\n  const plain = toValue(elRef);\n  return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain;\n}\n\nconst defaultWindow = isClient ? window : void 0;\n\nfunction useEventListener(...args) {\n  let target;\n  let events;\n  let listeners;\n  let options;\n  if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n    [events, listeners, options] = args;\n    target = defaultWindow;\n  } else {\n    [target, events, listeners, options] = args;\n  }\n  if (!target)\n    return noop;\n  if (!Array.isArray(events))\n    events = [events];\n  if (!Array.isArray(listeners))\n    listeners = [listeners];\n  const cleanups = [];\n  const cleanup = () => {\n    cleanups.forEach((fn) => fn());\n    cleanups.length = 0;\n  };\n  const register = (el, event, listener, options2) => {\n    el.addEventListener(event, listener, options2);\n    return () => el.removeEventListener(event, listener, options2);\n  };\n  const stopWatch = watch(\n    () => [unrefElement(target), toValue(options)],\n    ([el, options2]) => {\n      cleanup();\n      if (!el)\n        return;\n      const optionsClone = isObject(options2) ? { ...options2 } : options2;\n      cleanups.push(\n        ...events.flatMap((event) => {\n          return listeners.map((listener) => register(el, event, listener, optionsClone));\n        })\n      );\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    stopWatch();\n    cleanup();\n  };\n  tryOnScopeDispose(stop);\n  return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n  const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n  if (!window)\n    return noop;\n  if (isIOS && !_iOSWorkaround) {\n    _iOSWorkaround = true;\n    Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n    window.document.documentElement.addEventListener(\"click\", noop);\n  }\n  let shouldListen = true;\n  const shouldIgnore = (event) => {\n    return ignore.some((target2) => {\n      if (typeof target2 === \"string\") {\n        return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n      } else {\n        const el = unrefElement(target2);\n        return el && (event.target === el || event.composedPath().includes(el));\n      }\n    });\n  };\n  const listener = (event) => {\n    const el = unrefElement(target);\n    if (!el || el === event.target || event.composedPath().includes(el))\n      return;\n    if (event.detail === 0)\n      shouldListen = !shouldIgnore(event);\n    if (!shouldListen) {\n      shouldListen = true;\n      return;\n    }\n    handler(event);\n  };\n  const cleanup = [\n    useEventListener(window, \"click\", listener, { passive: true, capture }),\n    useEventListener(window, \"pointerdown\", (e) => {\n      const el = unrefElement(target);\n      shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n    }, { passive: true }),\n    detectIframe && useEventListener(window, \"blur\", (event) => {\n      setTimeout(() => {\n        var _a;\n        const el = unrefElement(target);\n        if (((_a = window.document.activeElement) == null ? void 0 : _a.tagName) === \"IFRAME\" && !(el == null ? void 0 : el.contains(window.document.activeElement)))\n          handler(event);\n      }, 0);\n    })\n  ].filter(Boolean);\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nconst vOnClickOutside = {\n  [directiveHooks.mounted](el, binding) {\n    const capture = !binding.modifiers.bubble;\n    if (typeof binding.value === \"function\") {\n      el.__onClickOutside_stop = onClickOutside(el, binding.value, { capture });\n    } else {\n      const [handler, options] = binding.value;\n      el.__onClickOutside_stop = onClickOutside(el, handler, Object.assign({ capture }, options));\n    }\n  },\n  [directiveHooks.unmounted](el) {\n    el.__onClickOutside_stop();\n  }\n};\n\nfunction createKeyPredicate(keyFilter) {\n  if (typeof keyFilter === \"function\")\n    return keyFilter;\n  else if (typeof keyFilter === \"string\")\n    return (event) => event.key === keyFilter;\n  else if (Array.isArray(keyFilter))\n    return (event) => keyFilter.includes(event.key);\n  return () => true;\n}\nfunction onKeyStroke(...args) {\n  let key;\n  let handler;\n  let options = {};\n  if (args.length === 3) {\n    key = args[0];\n    handler = args[1];\n    options = args[2];\n  } else if (args.length === 2) {\n    if (typeof args[1] === \"object\") {\n      key = true;\n      handler = args[0];\n      options = args[1];\n    } else {\n      key = args[0];\n      handler = args[1];\n    }\n  } else {\n    key = true;\n    handler = args[0];\n  }\n  const {\n    target = defaultWindow,\n    eventName = \"keydown\",\n    passive = false,\n    dedupe = false\n  } = options;\n  const predicate = createKeyPredicate(key);\n  const listener = (e) => {\n    if (e.repeat && toValue(dedupe))\n      return;\n    if (predicate(e))\n      handler(e);\n  };\n  return useEventListener(target, eventName, listener, passive);\n}\n\nconst vOnKeyStroke = {\n  [directiveHooks.mounted](el, binding) {\n    var _a, _b;\n    const keys = (_b = (_a = binding.arg) == null ? void 0 : _a.split(\",\")) != null ? _b : true;\n    if (typeof binding.value === \"function\") {\n      onKeyStroke(keys, binding.value, {\n        target: el\n      });\n    } else {\n      const [handler, options] = binding.value;\n      onKeyStroke(keys, handler, {\n        target: el,\n        ...options\n      });\n    }\n  }\n};\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n  var _a, _b;\n  const elementRef = computed(() => unrefElement(target));\n  let timeout;\n  let posStart;\n  function clear() {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = void 0;\n    }\n    posStart = void 0;\n  }\n  function onDown(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    clear();\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    posStart = {\n      x: ev.x,\n      y: ev.y\n    };\n    timeout = setTimeout(\n      () => handler(ev),\n      (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY\n    );\n  }\n  function onMove(ev) {\n    var _a2, _b2, _c, _d;\n    if (((_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.self) && ev.target !== elementRef.value)\n      return;\n    if (!posStart || (options == null ? void 0 : options.distanceThreshold) === false)\n      return;\n    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)\n      ev.preventDefault();\n    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)\n      ev.stopPropagation();\n    const dx = ev.x - posStart.x;\n    const dy = ev.y - posStart.y;\n    const distance = Math.sqrt(dx * dx + dy * dy);\n    if (distance >= ((_d = options == null ? void 0 : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n      clear();\n  }\n  const listenerOptions = {\n    capture: (_a = options == null ? void 0 : options.modifiers) == null ? void 0 : _a.capture,\n    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once\n  };\n  const cleanup = [\n    useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n    useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n    useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], clear, listenerOptions)\n  ];\n  const stop = () => cleanup.forEach((fn) => fn());\n  return stop;\n}\n\nconst OnLongPress = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"OnLongPress\",\n  props: [\"as\", \"options\"],\n  emits: [\"trigger\"],\n  setup(props, { slots, emit }) {\n    const target = ref();\n    onLongPress(\n      target,\n      (e) => {\n        emit(\"trigger\", e);\n      },\n      props.options\n    );\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default());\n    };\n  }\n});\n\nconst vOnLongPress = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      onLongPress(el, binding.value, { modifiers: binding.modifiers });\n    else\n      onLongPress(el, ...binding.value);\n  }\n};\n\nconst UseActiveElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseActiveElement\",\n  setup(props, { slots }) {\n    const data = reactive({\n      element: useActiveElement()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseBattery = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseBattery\",\n  setup(props, { slots }) {\n    const data = reactive(useBattery(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseBrowserLocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseBrowserLocation\",\n  setup(props, { slots }) {\n    const data = reactive(useBrowserLocation());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseClipboard = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseClipboard\",\n  props: [\n    \"source\",\n    \"read\",\n    \"navigator\",\n    \"copiedDuring\",\n    \"legacy\"\n  ],\n  setup(props, { slots }) {\n    const data = reactive(useClipboard(props));\n    return () => {\n      var _a;\n      return (_a = slots.default) == null ? void 0 : _a.call(slots, data);\n    };\n  }\n});\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n  if (!(globalKey in _global))\n    _global[globalKey] = _global[globalKey] || {};\n  return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n  return handlers[key] || fallback;\n}\n\nfunction guessSerializerType(rawInit) {\n  return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n  boolean: {\n    read: (v) => v === \"true\",\n    write: (v) => String(v)\n  },\n  object: {\n    read: (v) => JSON.parse(v),\n    write: (v) => JSON.stringify(v)\n  },\n  number: {\n    read: (v) => Number.parseFloat(v),\n    write: (v) => String(v)\n  },\n  any: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  string: {\n    read: (v) => v,\n    write: (v) => String(v)\n  },\n  map: {\n    read: (v) => new Map(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v.entries()))\n  },\n  set: {\n    read: (v) => new Set(JSON.parse(v)),\n    write: (v) => JSON.stringify(Array.from(v))\n  },\n  date: {\n    read: (v) => new Date(v),\n    write: (v) => v.toISOString()\n  }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n  var _a;\n  const {\n    flush = \"pre\",\n    deep = true,\n    listenToStorageChanges = true,\n    writeDefaults = true,\n    mergeDefaults = false,\n    shallow,\n    window = defaultWindow,\n    eventFilter,\n    onError = (e) => {\n      console.error(e);\n    },\n    initOnMounted\n  } = options;\n  const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n  if (!storage) {\n    try {\n      storage = getSSRHandler(\"getDefaultStorage\", () => {\n        var _a2;\n        return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n      })();\n    } catch (e) {\n      onError(e);\n    }\n  }\n  if (!storage)\n    return data;\n  const rawInit = toValue(defaults);\n  const type = guessSerializerType(rawInit);\n  const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n  const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n    data,\n    () => write(data.value),\n    { flush, deep, eventFilter }\n  );\n  if (window && listenToStorageChanges) {\n    tryOnMounted(() => {\n      useEventListener(window, \"storage\", update);\n      useEventListener(window, customStorageEventName, updateFromCustomEvent);\n      if (initOnMounted)\n        update();\n    });\n  }\n  if (!initOnMounted)\n    update();\n  function dispatchWriteEvent(oldValue, newValue) {\n    if (window) {\n      window.dispatchEvent(new CustomEvent(customStorageEventName, {\n        detail: {\n          key,\n          oldValue,\n          newValue,\n          storageArea: storage\n        }\n      }));\n    }\n  }\n  function write(v) {\n    try {\n      const oldValue = storage.getItem(key);\n      if (v == null) {\n        dispatchWriteEvent(oldValue, null);\n        storage.removeItem(key);\n      } else {\n        const serialized = serializer.write(v);\n        if (oldValue !== serialized) {\n          storage.setItem(key, serialized);\n          dispatchWriteEvent(oldValue, serialized);\n        }\n      }\n    } catch (e) {\n      onError(e);\n    }\n  }\n  function read(event) {\n    const rawValue = event ? event.newValue : storage.getItem(key);\n    if (rawValue == null) {\n      if (writeDefaults && rawInit != null)\n        storage.setItem(key, serializer.write(rawInit));\n      return rawInit;\n    } else if (!event && mergeDefaults) {\n      const value = serializer.read(rawValue);\n      if (typeof mergeDefaults === \"function\")\n        return mergeDefaults(value, rawInit);\n      else if (type === \"object\" && !Array.isArray(value))\n        return { ...rawInit, ...value };\n      return value;\n    } else if (typeof rawValue !== \"string\") {\n      return rawValue;\n    } else {\n      return serializer.read(rawValue);\n    }\n  }\n  function update(event) {\n    if (event && event.storageArea !== storage)\n      return;\n    if (event && event.key == null) {\n      data.value = rawInit;\n      return;\n    }\n    if (event && event.key !== key)\n      return;\n    pauseWatch();\n    try {\n      if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n        data.value = read(event);\n    } catch (e) {\n      onError(e);\n    } finally {\n      if (event)\n        nextTick(resumeWatch);\n      else\n        resumeWatch();\n    }\n  }\n  function updateFromCustomEvent(event) {\n    update(event.detail);\n  }\n  return data;\n}\n\nfunction useMounted() {\n  const isMounted = ref(false);\n  const instance = getCurrentInstance();\n  if (instance) {\n    onMounted(() => {\n      isMounted.value = true;\n    }, isVue2 ? null : instance);\n  }\n  return isMounted;\n}\n\nfunction useSupported(callback) {\n  const isMounted = useMounted();\n  return computed(() => {\n    isMounted.value;\n    return Boolean(callback());\n  });\n}\n\nfunction useMediaQuery(query, options = {}) {\n  const { window = defaultWindow } = options;\n  const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n  let mediaQuery;\n  const matches = ref(false);\n  const handler = (event) => {\n    matches.value = event.matches;\n  };\n  const cleanup = () => {\n    if (!mediaQuery)\n      return;\n    if (\"removeEventListener\" in mediaQuery)\n      mediaQuery.removeEventListener(\"change\", handler);\n    else\n      mediaQuery.removeListener(handler);\n  };\n  const stopWatch = watchEffect(() => {\n    if (!isSupported.value)\n      return;\n    cleanup();\n    mediaQuery = window.matchMedia(toValue(query));\n    if (\"addEventListener\" in mediaQuery)\n      mediaQuery.addEventListener(\"change\", handler);\n    else\n      mediaQuery.addListener(handler);\n    matches.value = mediaQuery.matches;\n  });\n  tryOnScopeDispose(() => {\n    stopWatch();\n    cleanup();\n    mediaQuery = void 0;\n  });\n  return matches;\n}\n\nfunction usePreferredDark(options) {\n  return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction useColorMode(options = {}) {\n  const {\n    selector = \"html\",\n    attribute = \"class\",\n    initialValue = \"auto\",\n    window = defaultWindow,\n    storage,\n    storageKey = \"vueuse-color-scheme\",\n    listenToStorageChanges = true,\n    storageRef,\n    emitAuto,\n    disableTransition = true\n  } = options;\n  const modes = {\n    auto: \"\",\n    light: \"light\",\n    dark: \"dark\",\n    ...options.modes || {}\n  };\n  const preferredDark = usePreferredDark({ window });\n  const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n  const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n  const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n  const updateHTMLAttrs = getSSRHandler(\n    \"updateHTMLAttrs\",\n    (selector2, attribute2, value) => {\n      const el = typeof selector2 === \"string\" ? window == null ? void 0 : window.document.querySelector(selector2) : unrefElement(selector2);\n      if (!el)\n        return;\n      let style;\n      if (disableTransition) {\n        style = window.document.createElement(\"style\");\n        const styleString = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n        style.appendChild(document.createTextNode(styleString));\n        window.document.head.appendChild(style);\n      }\n      if (attribute2 === \"class\") {\n        const current = value.split(/\\s/g);\n        Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n          if (current.includes(v))\n            el.classList.add(v);\n          else\n            el.classList.remove(v);\n        });\n      } else {\n        el.setAttribute(attribute2, value);\n      }\n      if (disableTransition) {\n        window.getComputedStyle(style).opacity;\n        document.head.removeChild(style);\n      }\n    }\n  );\n  function defaultOnChanged(mode) {\n    var _a;\n    updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n  }\n  function onChanged(mode) {\n    if (options.onChanged)\n      options.onChanged(mode, defaultOnChanged);\n    else\n      defaultOnChanged(mode);\n  }\n  watch(state, onChanged, { flush: \"post\", immediate: true });\n  tryOnMounted(() => onChanged(state.value));\n  const auto = computed({\n    get() {\n      return emitAuto ? store.value : state.value;\n    },\n    set(v) {\n      store.value = v;\n    }\n  });\n  try {\n    return Object.assign(auto, { store, system, state });\n  } catch (e) {\n    return auto;\n  }\n}\n\nconst UseColorMode = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseColorMode\",\n  props: [\"selector\", \"attribute\", \"modes\", \"onChanged\", \"storageKey\", \"storage\", \"emitAuto\"],\n  setup(props, { slots }) {\n    const mode = useColorMode(props);\n    const data = reactive({\n      mode,\n      system: mode.system,\n      store: mode.store\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDark\",\n  props: [\"selector\", \"attribute\", \"valueDark\", \"valueLight\", \"onChanged\", \"storageKey\", \"storage\"],\n  setup(props, { slots }) {\n    const isDark = useDark(props);\n    const data = reactive({\n      isDark,\n      toggleDark: useToggle(isDark)\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDeviceMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDeviceMotion\",\n  setup(props, { slots }) {\n    const data = reactive(useDeviceMotion());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDeviceOrientation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDeviceOrientation\",\n  setup(props, { slots }) {\n    const data = reactive(useDeviceOrientation());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDevicePixelRatio = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDevicePixelRatio\",\n  setup(props, { slots }) {\n    const data = reactive({\n      pixelRatio: useDevicePixelRatio()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDevicesList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDevicesList\",\n  props: [\"onUpdated\", \"requestPermissions\", \"constraints\"],\n  setup(props, { slots }) {\n    const data = reactive(useDevicesList(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDocumentVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDocumentVisibility\",\n  setup(props, { slots }) {\n    const data = reactive({\n      visibility: useDocumentVisibility()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseDraggable = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseDraggable\",\n  props: [\n    \"storageKey\",\n    \"storageType\",\n    \"initialValue\",\n    \"exact\",\n    \"preventDefault\",\n    \"stopPropagation\",\n    \"pointerTypes\",\n    \"as\",\n    \"handle\",\n    \"axis\",\n    \"onStart\",\n    \"onMove\",\n    \"onEnd\",\n    \"disabled\"\n  ],\n  setup(props, { slots }) {\n    const target = ref();\n    const handle = computed(() => {\n      var _a;\n      return (_a = props.handle) != null ? _a : target.value;\n    });\n    const disabled = computed(() => !!props.disabled);\n    const storageValue = props.storageKey && useStorage$1(\n      props.storageKey,\n      toValue(props.initialValue) || { x: 0, y: 0 },\n      isClient$1 ? props.storageType === \"session\" ? sessionStorage : localStorage : void 0\n    );\n    const initialValue = storageValue || props.initialValue || { x: 0, y: 0 };\n    const onEnd = (position, event) => {\n      var _a;\n      (_a = props.onEnd) == null ? void 0 : _a.call(props, position, event);\n      if (!storageValue)\n        return;\n      storageValue.value.x = position.x;\n      storageValue.value.y = position.y;\n    };\n    const data = reactive(useDraggable(target, {\n      ...props,\n      handle,\n      initialValue,\n      onEnd,\n      disabled\n    }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target, style: `touch-action:none;${data.style}` }, slots.default(data));\n    };\n  }\n});\n\nconst UseElementBounding = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementBounding\",\n  props: [\"box\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useElementBounding(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useElementHover(el, options = {}) {\n  const {\n    delayEnter = 0,\n    delayLeave = 0,\n    window = defaultWindow\n  } = options;\n  const isHovered = ref(false);\n  let timer;\n  const toggle = (entering) => {\n    const delay = entering ? delayEnter : delayLeave;\n    if (timer) {\n      clearTimeout(timer);\n      timer = void 0;\n    }\n    if (delay)\n      timer = setTimeout(() => isHovered.value = entering, delay);\n    else\n      isHovered.value = entering;\n  };\n  if (!window)\n    return isHovered;\n  useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n  useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n  return isHovered;\n}\n\nconst vElementHover = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const isHovered = useElementHover(el);\n      watch(isHovered, (v) => binding.value(v));\n    }\n  }\n};\n\nconst UseElementSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementSize\",\n  props: [\"width\", \"height\", \"box\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useElementSize$1(target, { width: props.width, height: props.height }, { box: props.box }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useResizeObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...observerOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => Array.isArray(target) ? target.map((el) => unrefElement(el)) : [unrefElement(target)]);\n  const stopWatch = watch(\n    targets,\n    (els) => {\n      cleanup();\n      if (isSupported.value && window) {\n        observer = new ResizeObserver(callback);\n        for (const _el of els)\n          _el && observer.observe(_el, observerOptions);\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop\n  };\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n  const { window = defaultWindow, box = \"content-box\" } = options;\n  const isSVG = computed(() => {\n    var _a, _b;\n    return (_b = (_a = unrefElement(target)) == null ? void 0 : _a.namespaceURI) == null ? void 0 : _b.includes(\"svg\");\n  });\n  const width = ref(initialSize.width);\n  const height = ref(initialSize.height);\n  const { stop: stop1 } = useResizeObserver(\n    target,\n    ([entry]) => {\n      const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n      if (window && isSVG.value) {\n        const $elem = unrefElement(target);\n        if ($elem) {\n          const styles = window.getComputedStyle($elem);\n          width.value = Number.parseFloat(styles.width);\n          height.value = Number.parseFloat(styles.height);\n        }\n      } else {\n        if (boxSize) {\n          const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];\n          width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n          height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n        } else {\n          width.value = entry.contentRect.width;\n          height.value = entry.contentRect.height;\n        }\n      }\n    },\n    options\n  );\n  tryOnMounted(() => {\n    const ele = unrefElement(target);\n    if (ele) {\n      width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n      height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n    }\n  });\n  const stop2 = watch(\n    () => unrefElement(target),\n    (ele) => {\n      width.value = ele ? initialSize.width : 0;\n      height.value = ele ? initialSize.height : 0;\n    }\n  );\n  function stop() {\n    stop1();\n    stop2();\n  }\n  return {\n    width,\n    height,\n    stop\n  };\n}\n\nconst vElementSize = {\n  [directiveHooks.mounted](el, binding) {\n    var _a;\n    const handler = typeof binding.value === \"function\" ? binding.value : (_a = binding.value) == null ? void 0 : _a[0];\n    const options = typeof binding.value === \"function\" ? [] : binding.value.slice(1);\n    const { width, height } = useElementSize(el, ...options);\n    watch([width, height], ([width2, height2]) => handler({ width: width2, height: height2 }));\n  }\n};\n\nconst UseElementVisibility = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseElementVisibility\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive({\n      isVisible: useElementVisibility$1(target)\n    });\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n  const {\n    root,\n    rootMargin = \"0px\",\n    threshold = 0.1,\n    window = defaultWindow,\n    immediate = true\n  } = options;\n  const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n  const targets = computed(() => {\n    const _target = toValue(target);\n    return (Array.isArray(_target) ? _target : [_target]).map(unrefElement).filter(notNullish);\n  });\n  let cleanup = noop;\n  const isActive = ref(immediate);\n  const stopWatch = isSupported.value ? watch(\n    () => [targets.value, unrefElement(root), isActive.value],\n    ([targets2, root2]) => {\n      cleanup();\n      if (!isActive.value)\n        return;\n      if (!targets2.length)\n        return;\n      const observer = new IntersectionObserver(\n        callback,\n        {\n          root: unrefElement(root2),\n          rootMargin,\n          threshold\n        }\n      );\n      targets2.forEach((el) => el && observer.observe(el));\n      cleanup = () => {\n        observer.disconnect();\n        cleanup = noop;\n      };\n    },\n    { immediate, flush: \"post\" }\n  ) : noop;\n  const stop = () => {\n    cleanup();\n    stopWatch();\n    isActive.value = false;\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    isActive,\n    pause() {\n      cleanup();\n      isActive.value = false;\n    },\n    resume() {\n      isActive.value = true;\n    },\n    stop\n  };\n}\n\nfunction useElementVisibility(element, options = {}) {\n  const { window = defaultWindow, scrollTarget, threshold = 0 } = options;\n  const elementIsVisible = ref(false);\n  useIntersectionObserver(\n    element,\n    (intersectionObserverEntries) => {\n      let isIntersecting = elementIsVisible.value;\n      let latestTime = 0;\n      for (const entry of intersectionObserverEntries) {\n        if (entry.time >= latestTime) {\n          latestTime = entry.time;\n          isIntersecting = entry.isIntersecting;\n        }\n      }\n      elementIsVisible.value = isIntersecting;\n    },\n    {\n      root: scrollTarget,\n      window,\n      threshold\n    }\n  );\n  return elementIsVisible;\n}\n\nconst vElementVisibility = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const handler = binding.value;\n      const isVisible = useElementVisibility(el);\n      watch(isVisible, (v) => handler(v), { immediate: true });\n    } else {\n      const [handler, options] = binding.value;\n      const isVisible = useElementVisibility(el, options);\n      watch(isVisible, (v) => handler(v), { immediate: true });\n    }\n  }\n};\n\nconst UseEyeDropper = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseEyeDropper\",\n  props: {\n    sRGBHex: String\n  },\n  setup(props, { slots }) {\n    const data = reactive(useEyeDropper());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseFullscreen = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseFullscreen\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useFullscreen(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseGeolocation = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseGeolocation\",\n  props: [\"enableHighAccuracy\", \"maximumAge\", \"timeout\", \"navigator\"],\n  setup(props, { slots }) {\n    const data = reactive(useGeolocation(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseIdle = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseIdle\",\n  props: [\"timeout\", \"events\", \"listenForVisibilityChange\", \"initialState\"],\n  setup(props, { slots }) {\n    const data = reactive(useIdle(props.timeout, props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nfunction useAsyncState(promise, initialState, options) {\n  const {\n    immediate = true,\n    delay = 0,\n    onError = noop,\n    onSuccess = noop,\n    resetOnExecute = true,\n    shallow = true,\n    throwError\n  } = options != null ? options : {};\n  const state = shallow ? shallowRef(initialState) : ref(initialState);\n  const isReady = ref(false);\n  const isLoading = ref(false);\n  const error = shallowRef(void 0);\n  async function execute(delay2 = 0, ...args) {\n    if (resetOnExecute)\n      state.value = initialState;\n    error.value = void 0;\n    isReady.value = false;\n    isLoading.value = true;\n    if (delay2 > 0)\n      await promiseTimeout(delay2);\n    const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n    try {\n      const data = await _promise;\n      state.value = data;\n      isReady.value = true;\n      onSuccess(data);\n    } catch (e) {\n      error.value = e;\n      onError(e);\n      if (throwError)\n        throw e;\n    } finally {\n      isLoading.value = false;\n    }\n    return state.value;\n  }\n  if (immediate)\n    execute(delay);\n  const shell = {\n    state,\n    isReady,\n    isLoading,\n    error,\n    execute\n  };\n  function waitUntilIsLoaded() {\n    return new Promise((resolve, reject) => {\n      until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n    });\n  }\n  return {\n    ...shell,\n    then(onFulfilled, onRejected) {\n      return waitUntilIsLoaded().then(onFulfilled, onRejected);\n    }\n  };\n}\n\nasync function loadImage(options) {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy } = options;\n    img.src = src;\n    if (srcset)\n      img.srcset = srcset;\n    if (sizes)\n      img.sizes = sizes;\n    if (clazz)\n      img.className = clazz;\n    if (loading)\n      img.loading = loading;\n    if (crossorigin)\n      img.crossOrigin = crossorigin;\n    if (referrerPolicy)\n      img.referrerPolicy = referrerPolicy;\n    img.onload = () => resolve(img);\n    img.onerror = reject;\n  });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n  const state = useAsyncState(\n    () => loadImage(toValue(options)),\n    void 0,\n    {\n      resetOnExecute: true,\n      ...asyncStateOptions\n    }\n  );\n  watch(\n    () => toValue(options),\n    () => state.execute(asyncStateOptions.delay),\n    { deep: true }\n  );\n  return state;\n}\n\nconst UseImage = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseImage\",\n  props: [\n    \"src\",\n    \"srcset\",\n    \"sizes\",\n    \"as\",\n    \"alt\",\n    \"class\",\n    \"loading\",\n    \"crossorigin\",\n    \"referrerPolicy\"\n  ],\n  setup(props, { slots }) {\n    const data = reactive(useImage(props));\n    return () => {\n      if (data.isLoading && slots.loading)\n        return slots.loading(data);\n      else if (data.error && slots.error)\n        return slots.error(data.error);\n      if (slots.default)\n        return slots.default(data);\n      return h(props.as || \"img\", props);\n    };\n  }\n});\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n  const {\n    throttle = 0,\n    idle = 200,\n    onStop = noop,\n    onScroll = noop,\n    offset = {\n      left: 0,\n      right: 0,\n      top: 0,\n      bottom: 0\n    },\n    eventListenerOptions = {\n      capture: false,\n      passive: true\n    },\n    behavior = \"auto\",\n    window = defaultWindow,\n    onError = (e) => {\n      console.error(e);\n    }\n  } = options;\n  const internalX = ref(0);\n  const internalY = ref(0);\n  const x = computed({\n    get() {\n      return internalX.value;\n    },\n    set(x2) {\n      scrollTo(x2, void 0);\n    }\n  });\n  const y = computed({\n    get() {\n      return internalY.value;\n    },\n    set(y2) {\n      scrollTo(void 0, y2);\n    }\n  });\n  function scrollTo(_x, _y) {\n    var _a, _b, _c;\n    if (!window)\n      return;\n    const _element = toValue(element);\n    if (!_element)\n      return;\n    (_c = _element instanceof Document ? window.document.body : _element) == null ? void 0 : _c.scrollTo({\n      top: (_a = toValue(_y)) != null ? _a : y.value,\n      left: (_b = toValue(_x)) != null ? _b : x.value,\n      behavior: toValue(behavior)\n    });\n  }\n  const isScrolling = ref(false);\n  const arrivedState = reactive({\n    left: true,\n    right: false,\n    top: true,\n    bottom: false\n  });\n  const directions = reactive({\n    left: false,\n    right: false,\n    top: false,\n    bottom: false\n  });\n  const onScrollEnd = (e) => {\n    if (!isScrolling.value)\n      return;\n    isScrolling.value = false;\n    directions.left = false;\n    directions.right = false;\n    directions.top = false;\n    directions.bottom = false;\n    onStop(e);\n  };\n  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n  const setArrivedState = (target) => {\n    var _a;\n    if (!window)\n      return;\n    const el = ((_a = target == null ? void 0 : target.document) == null ? void 0 : _a.documentElement) || (target == null ? void 0 : target.documentElement) || unrefElement(target);\n    const { display, flexDirection } = getComputedStyle(el);\n    const scrollLeft = el.scrollLeft;\n    directions.left = scrollLeft < internalX.value;\n    directions.right = scrollLeft > internalX.value;\n    const left = Math.abs(scrollLeft) <= (offset.left || 0);\n    const right = Math.abs(scrollLeft) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"row-reverse\") {\n      arrivedState.left = right;\n      arrivedState.right = left;\n    } else {\n      arrivedState.left = left;\n      arrivedState.right = right;\n    }\n    internalX.value = scrollLeft;\n    let scrollTop = el.scrollTop;\n    if (target === window.document && !scrollTop)\n      scrollTop = window.document.body.scrollTop;\n    directions.top = scrollTop < internalY.value;\n    directions.bottom = scrollTop > internalY.value;\n    const top = Math.abs(scrollTop) <= (offset.top || 0);\n    const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n    if (display === \"flex\" && flexDirection === \"column-reverse\") {\n      arrivedState.top = bottom;\n      arrivedState.bottom = top;\n    } else {\n      arrivedState.top = top;\n      arrivedState.bottom = bottom;\n    }\n    internalY.value = scrollTop;\n  };\n  const onScrollHandler = (e) => {\n    var _a;\n    if (!window)\n      return;\n    const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n    setArrivedState(eventTarget);\n    isScrolling.value = true;\n    onScrollEndDebounced(e);\n    onScroll(e);\n  };\n  useEventListener(\n    element,\n    \"scroll\",\n    throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n    eventListenerOptions\n  );\n  tryOnMounted(() => {\n    try {\n      const _element = toValue(element);\n      if (!_element)\n        return;\n      setArrivedState(_element);\n    } catch (e) {\n      onError(e);\n    }\n  });\n  useEventListener(\n    element,\n    \"scrollend\",\n    onScrollEnd,\n    eventListenerOptions\n  );\n  return {\n    x,\n    y,\n    isScrolling,\n    arrivedState,\n    directions,\n    measure() {\n      const _element = toValue(element);\n      if (window && _element)\n        setArrivedState(_element);\n    }\n  };\n}\n\nfunction resolveElement(el) {\n  if (typeof Window !== \"undefined\" && el instanceof Window)\n    return el.document.documentElement;\n  if (typeof Document !== \"undefined\" && el instanceof Document)\n    return el.documentElement;\n  return el;\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n  var _a;\n  const {\n    direction = \"bottom\",\n    interval = 100,\n    canLoadMore = () => true\n  } = options;\n  const state = reactive(useScroll(\n    element,\n    {\n      ...options,\n      offset: {\n        [direction]: (_a = options.distance) != null ? _a : 0,\n        ...options.offset\n      }\n    }\n  ));\n  const promise = ref();\n  const isLoading = computed(() => !!promise.value);\n  const observedElement = computed(() => {\n    return resolveElement(toValue(element));\n  });\n  const isElementVisible = useElementVisibility(observedElement);\n  function checkAndLoad() {\n    state.measure();\n    if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n      return;\n    const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n    const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n    if (state.arrivedState[direction] || isNarrower) {\n      if (!promise.value) {\n        promise.value = Promise.all([\n          onLoadMore(state),\n          new Promise((resolve) => setTimeout(resolve, interval))\n        ]).finally(() => {\n          promise.value = null;\n          nextTick(() => checkAndLoad());\n        });\n      }\n    }\n  }\n  watch(\n    () => [state.arrivedState[direction], isElementVisible.value],\n    checkAndLoad,\n    { immediate: true }\n  );\n  return {\n    isLoading\n  };\n}\n\nconst vInfiniteScroll = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useInfiniteScroll(el, binding.value);\n    else\n      useInfiniteScroll(el, ...binding.value);\n  }\n};\n\nconst vIntersectionObserver = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\")\n      useIntersectionObserver(el, binding.value);\n    else\n      useIntersectionObserver(el, ...binding.value);\n  }\n};\n\nconst UseMouse = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMouse\",\n  props: [\"touch\", \"resetOnTouchEnds\", \"initialValue\"],\n  setup(props, { slots }) {\n    const data = reactive(useMouse(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseMouseInElement = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMouseElement\",\n  props: [\"handleOutside\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useMouseInElement(target, props));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseMousePressed = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseMousePressed\",\n  props: [\"touch\", \"initialValue\", \"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(useMousePressed({ ...props, target }));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UseNetwork = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseNetwork\",\n  setup(props, { slots }) {\n    const data = reactive(useNetwork());\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseNow = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseNow\",\n  props: [\"interval\"],\n  setup(props, { slots }) {\n    const data = reactive(useNow({ ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseObjectUrl = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseObjectUrl\",\n  props: [\n    \"object\"\n  ],\n  setup(props, { slots }) {\n    const object = toRef(props, \"object\");\n    const url = useObjectUrl(object);\n    return () => {\n      if (slots.default && url.value)\n        return slots.default(url);\n    };\n  }\n});\n\nconst UseOffsetPagination = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseOffsetPagination\",\n  props: [\n    \"total\",\n    \"page\",\n    \"pageSize\",\n    \"onPageChange\",\n    \"onPageSizeChange\",\n    \"onPageCountChange\"\n  ],\n  emits: [\n    \"page-change\",\n    \"page-size-change\",\n    \"page-count-change\"\n  ],\n  setup(props, { slots, emit }) {\n    const data = reactive(useOffsetPagination({\n      ...props,\n      onPageChange(...args) {\n        var _a;\n        (_a = props.onPageChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-change\", ...args);\n      },\n      onPageSizeChange(...args) {\n        var _a;\n        (_a = props.onPageSizeChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-size-change\", ...args);\n      },\n      onPageCountChange(...args) {\n        var _a;\n        (_a = props.onPageCountChange) == null ? void 0 : _a.call(props, ...args);\n        emit(\"page-count-change\", ...args);\n      }\n    }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseOnline = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseOnline\",\n  setup(props, { slots }) {\n    const data = reactive({\n      isOnline: useOnline()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePageLeave = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePageLeave\",\n  setup(props, { slots }) {\n    const data = reactive({\n      isLeft: usePageLeave()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePointer = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePointer\",\n  props: [\n    \"pointerTypes\",\n    \"initialValue\",\n    \"target\"\n  ],\n  setup(props, { slots }) {\n    const el = ref(null);\n    const data = reactive(usePointer({\n      ...props,\n      target: props.target === \"self\" ? el : defaultWindow\n    }));\n    return () => {\n      if (slots.default)\n        return slots.default(data, { ref: el });\n    };\n  }\n});\n\nconst UsePointerLock = /* #__PURE__ */ defineComponent({\n  name: \"UsePointerLock\",\n  props: [\"as\"],\n  setup(props, { slots }) {\n    const target = ref();\n    const data = reactive(usePointerLock(target));\n    return () => {\n      if (slots.default)\n        return h(props.as || \"div\", { ref: target }, slots.default(data));\n    };\n  }\n});\n\nconst UsePreferredColorScheme = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredColorScheme\",\n  setup(props, { slots }) {\n    const data = reactive({\n      colorScheme: usePreferredColorScheme()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredContrast = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredContrast\",\n  setup(props, { slots }) {\n    const data = reactive({\n      contrast: usePreferredContrast()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredDark = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredDark\",\n  setup(props, { slots }) {\n    const data = reactive({\n      prefersDark: usePreferredDark$1()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredLanguages = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredLanguages\",\n  setup(props, { slots }) {\n    const data = reactive({\n      languages: usePreferredLanguages()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UsePreferredReducedMotion = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UsePreferredReducedMotion\",\n  setup(props, { slots }) {\n    const data = reactive({\n      motion: usePreferredReducedMotion()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nfunction useMutationObserver(target, callback, options = {}) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer;\n  const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = void 0;\n    }\n  };\n  const targets = computed(() => {\n    const value = toValue(target);\n    const items = (Array.isArray(value) ? value : [value]).map(unrefElement).filter(notNullish);\n    return new Set(items);\n  });\n  const stopWatch = watch(\n    () => targets.value,\n    (targets2) => {\n      cleanup();\n      if (isSupported.value && window && targets2.size) {\n        observer = new MutationObserver(callback);\n        targets2.forEach((el) => observer.observe(el, mutationOptions));\n      }\n    },\n    { immediate: true, flush: \"post\" }\n  );\n  const takeRecords = () => {\n    return observer == null ? void 0 : observer.takeRecords();\n  };\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n  tryOnScopeDispose(stop);\n  return {\n    isSupported,\n    stop,\n    takeRecords\n  };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n  const { window = defaultWindow, initialValue = \"\", observe = false } = options;\n  const variable = ref(initialValue);\n  const elRef = computed(() => {\n    var _a;\n    return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement);\n  });\n  function updateCssVar() {\n    var _a;\n    const key = toValue(prop);\n    const el = toValue(elRef);\n    if (el && window) {\n      const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? void 0 : _a.trim();\n      variable.value = value || initialValue;\n    }\n  }\n  if (observe) {\n    useMutationObserver(elRef, updateCssVar, {\n      attributeFilter: [\"style\", \"class\"],\n      window\n    });\n  }\n  watch(\n    [elRef, () => toValue(prop)],\n    updateCssVar,\n    { immediate: true }\n  );\n  watch(\n    variable,\n    (val) => {\n      var _a;\n      if ((_a = elRef.value) == null ? void 0 : _a.style)\n        elRef.value.style.setProperty(toValue(prop), val);\n    }\n  );\n  return variable;\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n  const top = ref(\"\");\n  const right = ref(\"\");\n  const bottom = ref(\"\");\n  const left = ref(\"\");\n  if (isClient) {\n    const topCssVar = useCssVar(topVarName);\n    const rightCssVar = useCssVar(rightVarName);\n    const bottomCssVar = useCssVar(bottomVarName);\n    const leftCssVar = useCssVar(leftVarName);\n    topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n    rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n    bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n    leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n    update();\n    useEventListener(\"resize\", useDebounceFn(update));\n  }\n  function update() {\n    top.value = getValue(topVarName);\n    right.value = getValue(rightVarName);\n    bottom.value = getValue(bottomVarName);\n    left.value = getValue(leftVarName);\n  }\n  return {\n    top,\n    right,\n    bottom,\n    left,\n    update\n  };\n}\nfunction getValue(position) {\n  return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nconst UseScreenSafeArea = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseScreenSafeArea\",\n  props: {\n    top: Boolean,\n    right: Boolean,\n    bottom: Boolean,\n    left: Boolean\n  },\n  setup(props, { slots }) {\n    const {\n      top,\n      right,\n      bottom,\n      left\n    } = useScreenSafeArea();\n    return () => {\n      if (slots.default) {\n        return h(\"div\", {\n          style: {\n            paddingTop: props.top ? top.value : \"\",\n            paddingRight: props.right ? right.value : \"\",\n            paddingBottom: props.bottom ? bottom.value : \"\",\n            paddingLeft: props.left ? left.value : \"\",\n            boxSizing: \"border-box\",\n            maxHeight: \"100vh\",\n            maxWidth: \"100vw\",\n            overflow: \"auto\"\n          }\n        }, slots.default());\n      }\n    };\n  }\n});\n\nconst vScroll = {\n  [directiveHooks.mounted](el, binding) {\n    if (typeof binding.value === \"function\") {\n      const handler = binding.value;\n      const state = useScroll(el, {\n        onScroll() {\n          handler(state);\n        },\n        onStop() {\n          handler(state);\n        }\n      });\n    } else {\n      const [handler, options] = binding.value;\n      const state = useScroll(el, {\n        ...options,\n        onScroll(e) {\n          var _a;\n          (_a = options.onScroll) == null ? void 0 : _a.call(options, e);\n          handler(state);\n        },\n        onStop(e) {\n          var _a;\n          (_a = options.onStop) == null ? void 0 : _a.call(options, e);\n          handler(state);\n        }\n      });\n    }\n  }\n};\n\nfunction checkOverflowScroll(ele) {\n  const style = window.getComputedStyle(ele);\n  if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n    return true;\n  } else {\n    const parent = ele.parentNode;\n    if (!parent || parent.tagName === \"BODY\")\n      return false;\n    return checkOverflowScroll(parent);\n  }\n}\nfunction preventDefault(rawEvent) {\n  const e = rawEvent || window.event;\n  const _target = e.target;\n  if (checkOverflowScroll(_target))\n    return false;\n  if (e.touches.length > 1)\n    return true;\n  if (e.preventDefault)\n    e.preventDefault();\n  return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n  const isLocked = ref(initialState);\n  let stopTouchMoveListener = null;\n  watch(toRef(element), (el) => {\n    const target = resolveElement(toValue(el));\n    if (target) {\n      const ele = target;\n      if (!elInitialOverflow.get(ele))\n        elInitialOverflow.set(ele, ele.style.overflow);\n      if (isLocked.value)\n        ele.style.overflow = \"hidden\";\n    }\n  }, {\n    immediate: true\n  });\n  const lock = () => {\n    const el = resolveElement(toValue(element));\n    if (!el || isLocked.value)\n      return;\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        el,\n        \"touchmove\",\n        (e) => {\n          preventDefault(e);\n        },\n        { passive: false }\n      );\n    }\n    el.style.overflow = \"hidden\";\n    isLocked.value = true;\n  };\n  const unlock = () => {\n    var _a;\n    const el = resolveElement(toValue(element));\n    if (!el || !isLocked.value)\n      return;\n    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());\n    el.style.overflow = (_a = elInitialOverflow.get(el)) != null ? _a : \"\";\n    elInitialOverflow.delete(el);\n    isLocked.value = false;\n  };\n  tryOnScopeDispose(unlock);\n  return computed({\n    get() {\n      return isLocked.value;\n    },\n    set(v) {\n      if (v)\n        lock();\n      else\n        unlock();\n    }\n  });\n}\n\nfunction onScrollLock() {\n  let isMounted = false;\n  const state = ref(false);\n  return (el, binding) => {\n    state.value = binding.value;\n    if (isMounted)\n      return;\n    isMounted = true;\n    const isLocked = useScrollLock(el, binding.value);\n    watch(state, (v) => isLocked.value = v);\n  };\n}\nconst vScrollLock = onScrollLock();\n\nconst UseTimeAgo = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseTimeAgo\",\n  props: [\"time\", \"updateInterval\", \"max\", \"fullDateFormatter\", \"messages\", \"showSecond\"],\n  setup(props, { slots }) {\n    const data = reactive(useTimeAgo(() => props.time, { ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseTimestamp = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseTimestamp\",\n  props: [\"immediate\", \"interval\", \"offset\"],\n  setup(props, { slots }) {\n    const data = reactive(useTimestamp({ ...props, controls: true }));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseVirtualList = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseVirtualList\",\n  props: [\n    \"list\",\n    \"options\",\n    \"height\"\n  ],\n  setup(props, { slots, expose }) {\n    const { list: listRef } = toRefs(props);\n    const { list, containerProps, wrapperProps, scrollTo } = useVirtualList(listRef, props.options);\n    expose({ scrollTo });\n    if (containerProps.style && typeof containerProps.style === \"object\" && !Array.isArray(containerProps.style))\n      containerProps.style.height = props.height || \"300px\";\n    return () => h(\"div\", { ...containerProps }, [\n      h(\"div\", { ...wrapperProps.value }, list.value.map((item) => h(\"div\", { style: { overflow: \"hidden\", height: item.height } }, slots.default ? slots.default(item) : \"Please set content!\")))\n    ]);\n  }\n});\n\nconst UseWindowFocus = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseWindowFocus\",\n  setup(props, { slots }) {\n    const data = reactive({\n      focused: useWindowFocus()\n    });\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nconst UseWindowSize = /* @__PURE__ */ /* #__PURE__ */ defineComponent({\n  name: \"UseWindowSize\",\n  props: [\"initialWidth\", \"initialHeight\"],\n  setup(props, { slots }) {\n    const data = reactive(useWindowSize(props));\n    return () => {\n      if (slots.default)\n        return slots.default(data);\n    };\n  }\n});\n\nexport { OnClickOutside, OnLongPress, UseActiveElement, UseBattery, UseBrowserLocation, UseClipboard, UseColorMode, UseDark, UseDeviceMotion, UseDeviceOrientation, UseDevicePixelRatio, UseDevicesList, UseDocumentVisibility, UseDraggable, UseElementBounding, UseElementSize, UseElementVisibility, UseEyeDropper, UseFullscreen, UseGeolocation, UseIdle, UseImage, UseMouse, UseMouseInElement, UseMousePressed, UseNetwork, UseNow, UseObjectUrl, UseOffsetPagination, UseOnline, UsePageLeave, UsePointer, UsePointerLock, UsePreferredColorScheme, UsePreferredContrast, UsePreferredDark, UsePreferredLanguages, UsePreferredReducedMotion, UseScreenSafeArea, UseTimeAgo, UseTimestamp, UseVirtualList, UseWindowFocus, UseWindowSize, vOnClickOutside as VOnClickOutside, vOnLongPress as VOnLongPress, vElementHover, vElementSize, vElementVisibility, vInfiniteScroll, vIntersectionObserver, vOnClickOutside, vOnKeyStroke, vOnLongPress, vScroll, vScrollLock };\n","import '../assets/NcMentionBubble-YYl1ib_F.css';\nimport '../assets/NcAvatar-5H9cqcD1.css';\nimport { N as m } from \"./NcActions-4NCnCJdf.mjs\";\nimport v from \"../Components/NcActionLink.mjs\";\nimport S from \"../Components/NcButton.mjs\";\nimport g from \"../Components/NcLoadingIcon.mjs\";\nimport { N as y, g as U } from \"./NcUserStatusIcon-q3okK462.mjs\";\nimport { u as l } from \"./usernameToColor-exoSzo-C.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport { generateOcsUrl as _, generateUrl as d } from \"@nextcloud/router\";\n/* empty css                                                                          */\nimport { n as N } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport \"linkify-string\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nimport { getCurrentUser as u } from \"@nextcloud/auth\";\nimport h from \"@nextcloud/axios\";\nimport { getCapabilities as M } from \"@nextcloud/capabilities\";\nimport { r as A, n as L, a as r } from \"./_l10n-9dioj9MT.mjs\";\nimport { D as w } from \"./DotsHorizontal-IbmXTXRA.mjs\";\nimport { subscribe as n, unsubscribe as o } from \"@nextcloud/event-bus\";\nimport { getBuilder as b } from \"@nextcloud/browser-storage\";\nimport { vOnClickOutside as x } from \"@vueuse/components\";\n/**\n * @copyright Copyright (c) 2020 Georg Ehrke <georg-nextcloud@ehrke.email>\n *\n * @author Georg Ehrke <georg-nextcloud@ehrke.email>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst C = {\n  data() {\n    return {\n      hasStatus: !1,\n      userStatus: {\n        status: null,\n        message: null,\n        icon: null\n      }\n    };\n  },\n  methods: {\n    /**\n     * Fetches the user-status from the server\n     *\n     * @param {string} userId UserId of the user to fetch the status for\n     *\n     * @return {Promise<void>}\n     */\n    async fetchUserStatus(s) {\n      if (!s)\n        return;\n      const t = M();\n      if (!(!Object.prototype.hasOwnProperty.call(t, \"user_status\") || !t.user_status.enabled) && u())\n        try {\n          const { data: e } = await h.get(_(\"apps/user_status/api/v1/statuses/{userId}\", { userId: s })), {\n            status: a,\n            message: i,\n            icon: f\n          } = e.ocs.data;\n          this.userStatus.status = a, this.userStatus.message = i || \"\", this.userStatus.icon = f || \"\", this.hasStatus = !0;\n        } catch (e) {\n          if (e.response.status === 404 && e.response.data.ocs?.data?.length === 0)\n            return;\n          console.error(e);\n        }\n    }\n  }\n};\nA(L);\nconst p = b(\"nextcloud\").persist().build();\nfunction I(s) {\n  const t = p.getItem(\"user-has-avatar.\" + s);\n  return typeof t == \"string\" ? !!t : null;\n}\nfunction c(s, t) {\n  s && p.setItem(\"user-has-avatar.\" + s, t);\n}\nconst D = {\n  name: \"NcAvatar\",\n  directives: {\n    ClickOutside: x\n  },\n  components: {\n    DotsHorizontal: w,\n    NcActions: m,\n    NcActionLink: v,\n    NcButton: S,\n    NcLoadingIcon: g,\n    NcUserStatusIcon: y\n  },\n  mixins: [C],\n  props: {\n    /**\n     * Set a custom url to the avatar image\n     * either the url, user or displayName property must be defined\n     */\n    url: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Set a css icon-class for an icon to be used instead of the avatar.\n     */\n    iconClass: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Set the user id to fetch the avatar\n     * either the url, user or displayName property must be defined\n     */\n    user: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Whether or not to display the user-status\n     */\n    showUserStatus: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Whether or not to the status-icon should be used instead of online/away\n     */\n    showUserStatusCompact: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * When the user status was preloaded via another source it can be handed in with this property to save the request.\n     * If this property is not set the status will be fetched automatically.\n     * If a preloaded no-status is available provide this object with properties \"status\", \"icon\" and \"message\" set to null.\n     */\n    preloadedUserStatus: {\n      type: Object,\n      default: void 0\n    },\n    /**\n     * Is the user a guest user (then we have to user a different endpoint)\n     */\n    isGuest: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Set a display name that will be rendered as a tooltip\n     * either the url, user or displayName property must be defined\n     * specify just the displayname to generate a placeholder avatar without\n     * trying to fetch the avatar based on the user id\n     */\n    displayName: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Set a size in px for the rendered avatar\n     */\n    size: {\n      type: Number,\n      default: 32\n    },\n    /**\n     * Placeholder avatars will be automatically generated when this is set to true\n     */\n    allowPlaceholder: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Disable the tooltip\n     */\n    disableTooltip: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Disable the menu\n     */\n    disableMenu: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Declares a custom tooltip when not null\n     * Fallback will be the displayName\n     *\n     * requires disableTooltip not to be set to true\n     */\n    tooltipMessage: {\n      type: String,\n      default: null\n    },\n    /**\n     * Declares username is not a user's name, when true.\n     * Prevents loading user's avatar from server and forces generating colored initials,\n     * i.e. if the user is a group\n     */\n    isNoUser: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Selector for the popover menu container\n     */\n    menuContainer: {\n      type: [String, Object, Element, Boolean],\n      default: \"body\"\n    }\n  },\n  data() {\n    return {\n      avatarUrlLoaded: null,\n      avatarSrcSetLoaded: null,\n      userDoesNotExist: !1,\n      isAvatarLoaded: !1,\n      isMenuLoaded: !1,\n      contactsMenuLoading: !1,\n      contactsMenuActions: [],\n      contactsMenuOpenState: !1\n    };\n  },\n  computed: {\n    avatarAriaLabel() {\n      if (this.hasMenu)\n        return this.canDisplayUserStatus || this.showUserStatusIconOnAvatar ? r(\"Avatar of {displayName}, {status}\", { displayName: this.displayName ?? this.user, status: U(this.userStatus.status) }) : r(\"Avatar of {displayName}\", { displayName: this.displayName ?? this.user });\n    },\n    canDisplayUserStatus() {\n      return this.showUserStatus && this.hasStatus && [\"online\", \"away\", \"busy\", \"dnd\"].includes(this.userStatus.status);\n    },\n    showUserStatusIconOnAvatar() {\n      return this.showUserStatus && this.showUserStatusCompact && this.hasStatus && this.userStatus.status !== \"dnd\" && this.userStatus.icon;\n    },\n    /**\n     * The user identifier, either the display name if set or the user property\n     * If both properties are not set an empty string is returned\n     */\n    userIdentifier() {\n      return this.isDisplayNameDefined ? this.displayName : this.isUserDefined ? this.user : \"\";\n    },\n    isUserDefined() {\n      return typeof this.user < \"u\";\n    },\n    isDisplayNameDefined() {\n      return typeof this.displayName < \"u\";\n    },\n    isUrlDefined() {\n      return typeof this.url < \"u\";\n    },\n    hasMenu() {\n      return this.disableMenu ? !1 : this.isMenuLoaded ? this.menu.length > 0 : !(this.user === u()?.uid || this.userDoesNotExist || this.url);\n    },\n    /**\n     * True if initials should be shown as the user icon fallback\n     */\n    showInitials() {\n      return this.allowPlaceholder && this.userDoesNotExist && !(this.iconClass || this.$slots.icon);\n    },\n    avatarStyle() {\n      return {\n        \"--size\": this.size + \"px\",\n        lineHeight: this.size + \"px\",\n        fontSize: Math.round(this.size * 0.45) + \"px\"\n      };\n    },\n    initialsWrapperStyle() {\n      const { r: s, g: t, b: e } = l(this.userIdentifier);\n      return {\n        backgroundColor: `rgba(${s}, ${t}, ${e}, 0.1)`\n      };\n    },\n    initialsStyle() {\n      const { r: s, g: t, b: e } = l(this.userIdentifier);\n      return {\n        color: `rgb(${s}, ${t}, ${e})`\n      };\n    },\n    tooltip() {\n      return this.disableTooltip ? !1 : this.tooltipMessage ? this.tooltipMessage : this.displayName;\n    },\n    /**\n     * Get the (max. two) initials of the user as uppcase string\n     */\n    initials() {\n      let s = \"?\";\n      if (this.showInitials) {\n        const t = this.userIdentifier.trim();\n        if (t === \"\")\n          return \"?\";\n        const e = t.match(/[\\p{L}\\p{N}\\s]/gu).join(\"\"), a = e.lastIndexOf(\" \");\n        s = String.fromCodePoint(e.codePointAt(0)), a !== -1 && (s = s.concat(String.fromCodePoint(e.codePointAt(a + 1))));\n      }\n      return s.toLocaleUpperCase();\n    },\n    menu() {\n      const s = this.contactsMenuActions.map((e) => ({\n        href: e.hyperlink,\n        icon: e.icon,\n        text: e.title\n      }));\n      function t(e) {\n        const a = document.createTextNode(e), i = document.createElement(\"p\");\n        return i.appendChild(a), i.innerHTML;\n      }\n      return this.showUserStatus && (this.userStatus.icon || this.userStatus.message) ? [{\n        href: \"#\",\n        icon: `data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><text x='0' y='14' font-size='14'>${t(this.userStatus.icon)}</text></svg>`,\n        text: `${this.userStatus.message}`\n      }].concat(s) : s;\n    }\n  },\n  watch: {\n    url() {\n      this.userDoesNotExist = !1, this.loadAvatarUrl();\n    },\n    user() {\n      this.userDoesNotExist = !1, this.isMenuLoaded = !1, this.loadAvatarUrl();\n    }\n  },\n  mounted() {\n    this.loadAvatarUrl(), n(\"settings:avatar:updated\", this.loadAvatarUrl), n(\"settings:display-name:updated\", this.loadAvatarUrl), this.showUserStatus && this.user && !this.isNoUser && (this.preloadedUserStatus ? (this.userStatus.status = this.preloadedUserStatus.status || \"\", this.userStatus.message = this.preloadedUserStatus.message || \"\", this.userStatus.icon = this.preloadedUserStatus.icon || \"\", this.hasStatus = this.preloadedUserStatus.status !== null) : this.fetchUserStatus(this.user), n(\"user_status:status.updated\", this.handleUserStatusUpdated));\n  },\n  beforeDestroy() {\n    o(\"settings:avatar:updated\", this.loadAvatarUrl), o(\"settings:display-name:updated\", this.loadAvatarUrl), this.showUserStatus && this.user && !this.isNoUser && o(\"user_status:status.updated\", this.handleUserStatusUpdated);\n  },\n  methods: {\n    t: r,\n    handleUserStatusUpdated(s) {\n      this.user === s.userId && (this.userStatus = {\n        status: s.status,\n        icon: s.icon,\n        message: s.message\n      });\n    },\n    /**\n     * Toggle the popover menu on click or enter\n     * @param {KeyboardEvent|MouseEvent} event the UI event\n     */\n    async toggleMenu(s) {\n      s.type === \"keydown\" && s.key !== \"Enter\" || (this.contactsMenuOpenState || await this.fetchContactsMenu(), this.contactsMenuOpenState = !this.contactsMenuOpenState);\n    },\n    closeMenu() {\n      this.contactsMenuOpenState = !1;\n    },\n    async fetchContactsMenu() {\n      this.contactsMenuLoading = !0;\n      try {\n        const s = encodeURIComponent(this.user), { data: t } = await h.post(d(\"contactsmenu/findOne\"), `shareType=0&shareWith=${s}`);\n        this.contactsMenuActions = t.topAction ? [t.topAction].concat(t.actions) : t.actions;\n      } catch {\n        this.contactsMenuOpenState = !1;\n      }\n      this.contactsMenuLoading = !1, this.isMenuLoaded = !0;\n    },\n    /**\n     * Handle avatar loading if user or url defined\n     */\n    loadAvatarUrl() {\n      if (this.isAvatarLoaded = !1, !this.isUrlDefined && (!this.isUserDefined || this.isNoUser)) {\n        this.isAvatarLoaded = !0, this.userDoesNotExist = !0;\n        return;\n      }\n      if (this.isUrlDefined) {\n        this.updateImageIfValid(this.url);\n        return;\n      }\n      if (this.size <= 64) {\n        const s = this.avatarUrlGenerator(this.user, 64), t = [\n          s + \" 1x\",\n          this.avatarUrlGenerator(this.user, 512) + \" 8x\"\n        ].join(\", \");\n        this.updateImageIfValid(s, t);\n      } else {\n        const s = this.avatarUrlGenerator(this.user, 512);\n        this.updateImageIfValid(s);\n      }\n    },\n    /**\n     * Generate an avatar url from the server's avatar endpoint\n     *\n     * @param {string} user the user id\n     * @param {number} size the desired size\n     * @return {string}\n     */\n    avatarUrlGenerator(s, t) {\n      const e = window.getComputedStyle(document.body).getPropertyValue(\"--background-invert-if-dark\") === \"invert(100%)\";\n      let a = \"/avatar/{user}/{size}\" + (e ? \"/dark\" : \"\");\n      this.isGuest && (a = \"/avatar/guest/{user}/{size}\" + (e ? \"/dark\" : \"\"));\n      let i = d(\n        a,\n        {\n          user: s,\n          size: t\n        }\n      );\n      return s === u()?.uid && typeof oc_userconfig < \"u\" && (i += \"?v=\" + oc_userconfig.avatar.version), i;\n    },\n    /**\n     * Check if the provided url is valid and update Avatar if so\n     *\n     * @param {string} url the avatar url\n     * @param {Array} srcset the avatar srcset\n     */\n    updateImageIfValid(s, t = null) {\n      const e = I(this.user);\n      if (this.isUserDefined && typeof e == \"boolean\") {\n        this.isAvatarLoaded = !0, this.avatarUrlLoaded = s, t && (this.avatarSrcSetLoaded = t), e === !1 && (this.userDoesNotExist = !0);\n        return;\n      }\n      const a = new Image();\n      a.onload = () => {\n        this.avatarUrlLoaded = s, t && (this.avatarSrcSetLoaded = t), this.isAvatarLoaded = !0, c(this.user, !0);\n      }, a.onerror = () => {\n        console.debug(\"Invalid avatar url\", s), this.avatarUrlLoaded = null, this.avatarSrcSetLoaded = null, this.userDoesNotExist = !0, this.isAvatarLoaded = !1, c(this.user, !1);\n      }, t && (a.srcset = t), a.src = s;\n    }\n  }\n};\nvar k = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", { directives: [{ name: \"click-outside\", rawName: \"v-click-outside\", value: t.closeMenu, expression: \"closeMenu\" }], ref: \"main\", staticClass: \"avatardiv popovermenu-wrapper\", class: {\n    \"avatardiv--unknown\": t.userDoesNotExist,\n    \"avatardiv--with-menu\": t.hasMenu,\n    \"avatardiv--with-menu-loading\": t.contactsMenuLoading\n  }, style: t.avatarStyle }, [t._t(\"icon\", function() {\n    return [t.iconClass ? e(\"span\", { staticClass: \"avatar-class-icon\", class: t.iconClass }) : t.isAvatarLoaded && !t.userDoesNotExist ? e(\"img\", { attrs: { src: t.avatarUrlLoaded, srcset: t.avatarSrcSetLoaded, alt: \"\" } }) : t._e()];\n  }), t.hasMenu && t.menu.length === 0 ? e(\"NcButton\", { staticClass: \"action-item action-item__menutoggle\", attrs: { type: \"tertiary-no-background\", \"aria-label\": t.avatarAriaLabel, title: t.tooltip }, on: { click: t.toggleMenu }, scopedSlots: t._u([{ key: \"icon\", fn: function() {\n    return [t.contactsMenuLoading ? e(\"NcLoadingIcon\") : e(\"DotsHorizontal\", { attrs: { size: 20 } })];\n  }, proxy: !0 }], null, !1, 2617833509) }) : t.hasMenu ? e(\"NcActions\", { attrs: { \"force-menu\": \"\", \"manual-open\": \"\", type: \"tertiary-no-background\", container: t.menuContainer, open: t.contactsMenuOpenState, \"aria-label\": t.avatarAriaLabel, title: t.tooltip }, on: { \"update:open\": function(a) {\n    t.contactsMenuOpenState = a;\n  }, click: t.toggleMenu }, scopedSlots: t._u([t.contactsMenuLoading ? { key: \"icon\", fn: function() {\n    return [e(\"NcLoadingIcon\")];\n  }, proxy: !0 } : null], null, !0) }, t._l(t.menu, function(a, i) {\n    return e(\"NcActionLink\", { key: i, attrs: { href: a.href, icon: a.icon } }, [t._v(\" \" + t._s(a.text) + \" \")]);\n  }), 1) : t._e(), t.showUserStatusIconOnAvatar ? e(\"span\", { staticClass: \"avatardiv__user-status avatardiv__user-status--icon\" }, [t._v(\" \" + t._s(t.userStatus.icon) + \" \")]) : t.canDisplayUserStatus ? e(\"NcUserStatusIcon\", { staticClass: \"avatardiv__user-status\", attrs: { status: t.userStatus.status, \"aria-hidden\": String(t.hasMenu) } }) : t._e(), t.showInitials ? e(\"span\", { staticClass: \"avatardiv__initials-wrapper\", style: t.initialsWrapperStyle }, [e(\"span\", { staticClass: \"avatardiv__initials\", style: t.initialsStyle }, [t._v(\" \" + t._s(t.initials) + \" \")])]) : t._e()], 2);\n}, O = [], z = /* @__PURE__ */ N(\n  D,\n  k,\n  O,\n  !1,\n  null,\n  \"de3f465f\",\n  null,\n  null\n);\nconst it = z.exports;\nexport {\n  it as N,\n  C as u\n};\n","import { ref as T, unref as f, computed as i, watch as g, onMounted as y, onUnmounted as D } from \"vue\";\nimport { getCanonicalLocale as _ } from \"@nextcloud/l10n\";\nimport { r as S, j as b, a as c } from \"./_l10n-9dioj9MT.mjs\";\nimport { n as F } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nS(b);\n/**\n * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @author Ferdinand Thiessen <opensource@fthiessen.de>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst I = {\n  long: c(\"a few seconds ago\"),\n  short: c(\"seconds ago\"),\n  // FOR TRANSLATORS: Shorter version of 'a few seconds ago'\n  narrow: c(\"sec. ago\")\n  // FOR TRANSLATORS: If possible in your language an even shorter version of 'a few seconds ago'\n};\nfunction N(a = Date.now(), e = {}) {\n  const r = T(Date.now());\n  let n = null;\n  const d = T({\n    timeStyle: \"medium\",\n    dateStyle: \"short\",\n    relativeTime: \"long\",\n    ignoreSeconds: !1,\n    ...f(e)\n  }), o = i(() => ({ ...f(e), ...d.value })), v = i(() => new Date(f(a))), h = i(() => new Intl.DateTimeFormat(_(), o.value.format).format(v.value)), M = i(() => {\n    if (o.value.relativeTime !== !1) {\n      const t = new Intl.RelativeTimeFormat(_(), { numeric: \"auto\", style: o.value.relativeTime }), m = (v.value - r.value) / 1e3;\n      if (Math.abs(m) <= 90)\n        return o.value.ignoreSeconds ? I[o.value.relativeTime] : t.format(Math.round(m), \"second\");\n      const l = m / 60;\n      if (Math.abs(l) <= 90)\n        return t.format(Math.round(l), \"minute\");\n      const u = l / 60;\n      if (Math.abs(u) <= 24)\n        return t.format(Math.round(u), \"hour\");\n      const s = u / 24;\n      if (Math.abs(s) <= 6)\n        return t.format(Math.round(s), \"day\");\n      const p = s / 7;\n      if (Math.abs(p) <= 4)\n        return t.format(Math.round(p), \"week\");\n      const w = s / 30;\n      return Math.abs(w) <= 12 ? t.format(Math.round(w), \"month\") : t.format(Math.round(s / 365), \"year\");\n    }\n    return h;\n  });\n  return g([o], (t) => {\n    window.clearInterval(n), n = void 0, t.relativeTime && (n = window.setInterval(() => {\n      r.value = /* @__PURE__ */ new Date();\n    }, 1e3));\n  }), y(() => {\n    o.value.relativeTime !== !1 && (n = window.setInterval(() => {\n      r.value = /* @__PURE__ */ new Date();\n    }, 1e3));\n  }), D(() => {\n    window.clearInterval(n);\n  }), {\n    formattedTime: M,\n    formattedFullTime: h,\n    options: d\n  };\n}\nconst C = {\n  name: \"NcDateTime\",\n  props: {\n    /**\n     * The timestamp to display, either an unix timestamp (in milliseconds) or a Date object\n     */\n    timestamp: {\n      type: [Date, Number],\n      required: !0\n    },\n    /**\n     * The format used for displaying, or if relative time is used the format used for the title (optional)\n     *\n     * @type {Intl.DateTimeFormatOptions}\n     */\n    format: {\n      type: Object,\n      default: () => ({ timeStyle: \"medium\", dateStyle: \"short\" })\n    },\n    /**\n     * Wether to display the timestamp as time from now (optional)\n     *\n     * - `false`: Disable relative time\n     * - `'long'`: Long text, like *2 seconds ago* (default)\n     * - `'short'`: Short text, like *2 sec. ago*\n     * - `'narrow'`: Even shorter text (same as `'short'` on some languages)\n     */\n    relativeTime: {\n      type: [Boolean, String],\n      default: \"long\",\n      validator: (a) => a === !1 || [\"long\", \"short\", \"narrow\"].includes(a)\n    },\n    /**\n     * Ignore seconds when displaying the relative time and just show `a few seconds ago`\n     */\n    ignoreSeconds: {\n      type: Boolean,\n      default: !1\n    }\n  },\n  setup(a) {\n    const e = i(() => a.timestamp), { formattedTime: r, formattedFullTime: n } = N(e, a);\n    return {\n      formattedTime: r,\n      formattedFullTime: n\n    };\n  }\n};\nvar O = function() {\n  var e = this, r = e._self._c;\n  return r(\"span\", { staticClass: \"nc-datetime\", attrs: { \"data-timestamp\": e.timestamp, title: e.formattedFullTime } }, [e._v(e._s(e.formattedTime))]);\n}, j = [], k = /* @__PURE__ */ F(\n  C,\n  O,\n  j,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst z = k.exports;\nexport {\n  z as N,\n  N as u\n};\n","window._vue_richtext_widgets || (window._vue_richtext_widgets = {});\nconst s = (e) => !!window._vue_richtext_widgets[e], o = (e, t, r = (i) => {\n}) => {\n  if (window._vue_richtext_widgets[e]) {\n    console.error(\"Widget for id \" + e + \" already registered\");\n    return;\n  }\n  window._vue_richtext_widgets[e] = {\n    id: e,\n    callback: t,\n    onDestroy: r\n  };\n}, c = (e, { richObjectType: t, richObject: r, accessible: i, interactive: n }) => {\n  if (t !== \"open-graph\") {\n    if (!window._vue_richtext_widgets[t]) {\n      console.error(\"Widget for rich object type \" + t + \" not registered\");\n      return;\n    }\n    window._vue_richtext_widgets[t].callback(e, { richObjectType: t, richObject: r, accessible: i, interactive: n });\n  }\n}, u = (e, t) => {\n  e !== \"open-graph\" && window._vue_richtext_widgets[e] && window._vue_richtext_widgets[e].onDestroy(t);\n};\nwindow._registerWidget = o;\nwindow._vue_richtext_custom_picker_elements || (window._vue_richtext_custom_picker_elements = {});\nclass w {\n  /**\n   * @param {HTMLElement} element The HTML element\n   * @param {object} object The object\n   */\n  constructor(t, r) {\n    this.element = t, this.object = r;\n  }\n}\nconst l = (e) => !!window._vue_richtext_custom_picker_elements[e], d = (e) => {\n  const t = window._vue_richtext_custom_picker_elements[e]?.size;\n  return [\"small\", \"normal\", \"large\", \"full\"].includes(t) ? t : null;\n}, _ = (e, t, r = (n) => {\n}, i = \"large\") => {\n  if (window._vue_richtext_custom_picker_elements[e]) {\n    console.error(\"Custom reference picker element for id \" + e + \" already registered\");\n    return;\n  }\n  window._vue_richtext_custom_picker_elements[e] = {\n    id: e,\n    callback: t,\n    onDestroy: r,\n    size: i\n  };\n}, m = (e, { providerId: t, accessible: r }) => {\n  if (!window._vue_richtext_custom_picker_elements[t]) {\n    console.error(\"Custom reference picker element for reference provider ID \" + t + \" not registered\");\n    return;\n  }\n  return window._vue_richtext_custom_picker_elements[t].callback(e, { providerId: t, accessible: r });\n}, g = (e, t, r) => {\n  window._vue_richtext_custom_picker_elements[e] && window._vue_richtext_custom_picker_elements[e].onDestroy(t, r);\n};\nwindow._registerCustomPickerElement = _;\nexport {\n  w as NcCustomPickerRenderResult,\n  g as destroyCustomPickerElement,\n  u as destroyWidget,\n  d as getCustomPickerElementSize,\n  l as isCustomPickerElementRegistered,\n  s as isWidgetRegistered,\n  _ as registerCustomPickerElement,\n  o as registerWidget,\n  m as renderCustomPickerElement,\n  c as renderWidget\n};\n","import { n as r } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\n/**\n * @copyright Copyright (c) 2020 Raimund Schlüßler <raimund.schluessler@mailbox.org>\n *\n * @author Raimund Schlüßler <raimund.schluessler@mailbox.org>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst l = (e, t) => {\n  const s = [];\n  let h = 0, n = e.toLowerCase().indexOf(t.toLowerCase(), h), i = 0;\n  for (; n > -1 && i < e.length; )\n    h = n + t.length, s.push({ start: n, end: h }), n = e.toLowerCase().indexOf(t.toLowerCase(), h), i++;\n  return s;\n}, a = {\n  name: \"NcHighlight\",\n  props: {\n    /**\n     * The string to display\n     */\n    text: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * The string to match and highlight\n     */\n    search: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * The ranges to highlight, takes precedence over the search prop.\n     */\n    highlight: {\n      type: Array,\n      default: () => []\n    }\n  },\n  computed: {\n    /**\n     * The indice ranges which should be highlighted.\n     * If an array with ranges is provided, we use it. Otherwise\n     * we calculate it based on the provided substring to highlight.\n     *\n     * @return {Array} The array of ranges to highlight\n     */\n    ranges() {\n      let e = [];\n      return !this.search && this.highlight.length === 0 || (this.highlight.length > 0 ? e = this.highlight : e = l(this.text, this.search), e.forEach((t, s) => {\n        t.end < t.start && (e[s] = {\n          start: t.end,\n          end: t.start\n        });\n      }), e = e.reduce((t, s) => (s.start < this.text.length && s.end > 0 && t.push({\n        start: s.start < 0 ? 0 : s.start,\n        end: s.end > this.text.length ? this.text.length : s.end\n      }), t), []), e.sort((t, s) => t.start - s.start), e = e.reduce((t, s) => {\n        if (!t.length)\n          t.push(s);\n        else {\n          const h = t.length - 1;\n          t[h].end >= s.start ? t[h] = {\n            start: t[h].start,\n            end: Math.max(t[h].end, s.end)\n          } : t.push(s);\n        }\n        return t;\n      }, [])), e;\n    },\n    /**\n     * Calculate the different chunks to show based on the ranges to highlight.\n     *\n     * @return {Array} The chunks\n     */\n    chunks() {\n      if (this.ranges.length === 0)\n        return [{\n          start: 0,\n          end: this.text.length,\n          highlight: !1,\n          text: this.text\n        }];\n      const e = [];\n      let t = 0, s = 0;\n      for (; t < this.text.length; ) {\n        const h = this.ranges[s];\n        if (h.start === t) {\n          e.push({\n            ...h,\n            highlight: !0,\n            text: this.text.slice(h.start, h.end)\n          }), s++, t = h.end, s >= this.ranges.length && t < this.text.length && (e.push({\n            start: t,\n            end: this.text.length,\n            highlight: !1,\n            text: this.text.slice(t)\n          }), t = this.text.length);\n          continue;\n        }\n        e.push({\n          start: t,\n          end: h.start,\n          highlight: !1,\n          text: this.text.slice(t, h.start)\n        }), t = h.start;\n      }\n      return e;\n    }\n  },\n  /**\n   * The render function to display the component\n   *\n   * @param {Function} h The function to create VNodes\n   * @return {object} The created VNode\n   */\n  render(e) {\n    return this.ranges.length ? e(\"span\", {}, this.chunks.map((t) => t.highlight ? e(\"strong\", {}, t.text) : t.text)) : e(\"span\", {}, this.text);\n  }\n}, u = null, o = null;\nvar c = /* @__PURE__ */ r(\n  a,\n  u,\n  o,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst d = c.exports;\nexport {\n  l as F,\n  d as 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.VueSelect=t():e.VueSelect=t()}(\"undefined\"!=typeof self?self:this,(function(){return(()=>{var e={646:e=>{e.exports=function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}},713:e=>{e.exports=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}},860:e=>{e.exports=function(e){if(Symbol.iterator in Object(e)||\"[object Arguments]\"===Object.prototype.toString.call(e))return Array.from(e)}},206:e=>{e.exports=function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance\")}},319:(e,t,n)=>{var o=n(646),i=n(860),s=n(206);e.exports=function(e){return o(e)||i(e)||s()}},8:e=>{function t(n){return\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?e.exports=t=function(e){return typeof e}:e.exports=t=function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},t(n)}e.exports=t}},t={};function n(o){var i=t[o];if(void 0!==i)return i.exports;var s=t[o]={exports:{}};return e[o](s,s.exports,n),s.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var o in t)n.o(t,o)&&!n.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})};var o={};return(()=>{\"use strict\";n.r(o),n.d(o,{VueSelect:()=>m,default:()=>_,mixins:()=>O});var e=n(319),t=n.n(e),i=n(8),s=n.n(i),r=n(713),a=n.n(r);const l={props:{autoscroll:{type:Boolean,default:!0}},watch:{typeAheadPointer:function(){this.autoscroll&&this.maybeAdjustScroll()},open:function(e){var t=this;this.autoscroll&&e&&this.$nextTick((function(){return t.maybeAdjustScroll()}))}},methods:{maybeAdjustScroll:function(){var e,t=(null===(e=this.$refs.dropdownMenu)||void 0===e?void 0:e.children[this.typeAheadPointer])||!1;if(t){var n=this.getDropdownViewport(),o=t.getBoundingClientRect(),i=o.top,s=o.bottom,r=o.height;if(i<n.top)return this.$refs.dropdownMenu.scrollTop=t.offsetTop;if(s>n.bottom)return this.$refs.dropdownMenu.scrollTop=t.offsetTop-(n.height-r)}},getDropdownViewport:function(){return this.$refs.dropdownMenu?this.$refs.dropdownMenu.getBoundingClientRect():{height:0,top:0,bottom:0}}}},c={data:function(){return{typeAheadPointer:-1}},watch:{filteredOptions:function(){if(this.resetFocusOnOptionsChange)for(var e=0;e<this.filteredOptions.length;e++)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},open:function(e){e&&this.typeAheadToLastSelected()},selectedValue:function(){this.open&&this.typeAheadToLastSelected()}},methods:{typeAheadUp:function(){for(var e=this.typeAheadPointer-1;e>=0;e--)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadDown:function(){for(var e=this.typeAheadPointer+1;e<this.filteredOptions.length;e++)if(this.selectable(this.filteredOptions[e])){this.typeAheadPointer=e;break}},typeAheadSelect:function(){var e=this.filteredOptions[this.typeAheadPointer];e&&this.selectable(e)&&this.select(e)},typeAheadToLastSelected:function(){var e=0!==this.selectedValue.length?this.filteredOptions.indexOf(this.selectedValue[this.selectedValue.length-1]):-1;-1!==e&&(this.typeAheadPointer=e)}}},u={props:{loading:{type:Boolean,default:!1}},data:function(){return{mutableLoading:!1}},watch:{search:function(){this.$emit(\"search\",this.search,this.toggleLoading)},loading:function(e){this.mutableLoading=e}},methods:{toggleLoading:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this.mutableLoading=null==e?!this.mutableLoading:e}}};function p(e,t,n,o,i,s,r,a){var l,c=\"function\"==typeof e?e.options:e;if(t&&(c.render=t,c.staticRenderFns=n,c._compiled=!0),o&&(c.functional=!0),s&&(c._scopeId=\"data-v-\"+s),r?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||\"undefined\"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},c._ssrRegister=l):i&&(l=a?function(){i.call(this,(c.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(c.functional){c._injectStyles=l;var u=c.render;c.render=function(e,t){return l.call(t),u(e,t)}}else{var p=c.beforeCreate;c.beforeCreate=p?[].concat(p,l):[l]}return{exports:e,options:c}}const d={Deselect:p({},(function(){var e=this.$createElement,t=this._self._c||e;return t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",width:\"10\",height:\"10\"}},[t(\"path\",{attrs:{d:\"M6.895455 5l2.842897-2.842898c.348864-.348863.348864-.914488 0-1.263636L9.106534.261648c-.348864-.348864-.914489-.348864-1.263636 0L5 3.104545 2.157102.261648c-.348863-.348864-.914488-.348864-1.263636 0L.261648.893466c-.348864.348864-.348864.914489 0 1.263636L3.104545 5 .261648 7.842898c-.348864.348863-.348864.914488 0 1.263636l.631818.631818c.348864.348864.914773.348864 1.263636 0L5 6.895455l2.842898 2.842897c.348863.348864.914772.348864 1.263636 0l.631818-.631818c.348864-.348864.348864-.914489 0-1.263636L6.895455 5z\"}})])}),[],!1,null,null,null).exports,OpenIndicator:p({},(function(){var e=this.$createElement,t=this._self._c||e;return t(\"svg\",{attrs:{xmlns:\"http://www.w3.org/2000/svg\",width:\"14\",height:\"10\"}},[t(\"path\",{attrs:{d:\"M9.211364 7.59931l4.48338-4.867229c.407008-.441854.407008-1.158247 0-1.60046l-.73712-.80023c-.407008-.441854-1.066904-.441854-1.474243 0L7 5.198617 2.51662.33139c-.407008-.441853-1.066904-.441853-1.474243 0l-.737121.80023c-.407008.441854-.407008 1.158248 0 1.600461l4.48338 4.867228L7 10l2.211364-2.40069z\"}})])}),[],!1,null,null,null).exports},h={inserted:function(e,t,n){var o=n.context;if(o.appendToBody){document.body.appendChild(e);var i=o.$refs.toggle.getBoundingClientRect(),s=i.height,r=i.top,a=i.left,l=i.width,c=window.scrollX||window.pageXOffset,u=window.scrollY||window.pageYOffset;e.unbindPosition=o.calculatePosition(e,o,{width:l+\"px\",left:c+a+\"px\",top:u+r+s+\"px\"})}},unbind:function(e,t,n){n.context.appendToBody&&(e.unbindPosition&&\"function\"==typeof e.unbindPosition&&e.unbindPosition(),e.parentNode&&e.parentNode.removeChild(e))}};const f=function(e){var t={};return Object.keys(e).sort().forEach((function(n){t[n]=e[n]})),JSON.stringify(t)};var y=0;const b=function(){return++y};function g(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function v(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?g(Object(n),!0).forEach((function(t){a()(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):g(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}const m=p({components:v({},d),directives:{appendToBody:h},mixins:[l,c,u],props:{value:{},components:{type:Object,default:function(){return{}}},options:{type:Array,default:function(){return[]}},limit:{type:Number,default:null},disabled:{type:Boolean,default:!1},clearable:{type:Boolean,default:!0},deselectFromDropdown:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},multiple:{type:Boolean,default:!1},placeholder:{type:String,default:\"\"},transition:{type:String,default:\"vs__fade\"},clearSearchOnSelect:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},label:{type:String,default:\"label\"},ariaLabelCombobox:{type:String,default:\"Search for options\"},ariaLabelListbox:{type:String,default:\"Options\"},ariaLabelClearSelected:{type:String,default:\"Clear selected\"},ariaLabelDeselectOption:{type:Function,default:function(e){return\"Deselect \".concat(e)}},autocomplete:{type:String,default:\"off\"},reduce:{type:Function,default:function(e){return e}},selectable:{type:Function,default:function(e){return!0}},getOptionLabel:{type:Function,default:function(e){return\"object\"===s()(e)?e.hasOwnProperty(this.label)?e[this.label]:console.warn('[vue-select warn]: Label key \"option.'.concat(this.label,'\" does not')+\" exist in options object \".concat(JSON.stringify(e),\".\\n\")+\"https://vue-select.org/api/props.html#getoptionlabel\"):e}},getOptionKey:{type:Function,default:function(e){if(\"object\"!==s()(e))return e;try{return e.hasOwnProperty(\"id\")?e.id:f(e)}catch(t){return console.warn(\"[vue-select warn]: Could not stringify this option to generate unique key. Please provide'getOptionKey' prop to return a unique key for each option.\\nhttps://vue-select.org/api/props.html#getoptionkey\",e,t)}}},onTab:{type:Function,default:function(){this.selectOnTab&&!this.isComposing&&this.typeAheadSelect()}},taggable:{type:Boolean,default:!1},tabindex:{type:Number,default:null},pushTags:{type:Boolean,default:!1},filterable:{type:Boolean,default:!0},filterBy:{type:Function,default:function(e,t,n){return(t||\"\").toLocaleLowerCase().indexOf(n.toLocaleLowerCase())>-1}},filter:{type:Function,default:function(e,t){var n=this;return e.filter((function(e){var o=n.getOptionLabel(e);return\"number\"==typeof o&&(o=o.toString()),n.filterBy(e,o,t)}))}},createOption:{type:Function,default:function(e){return\"object\"===s()(this.optionList[0])?a()({},this.label,e):e}},resetFocusOnOptionsChange:{type:Boolean,default:!0},resetOnOptionsChange:{default:!1,validator:function(e){return[\"function\",\"boolean\"].includes(s()(e))}},clearSearchOnBlur:{type:Function,default:function(e){var t=e.clearSearchOnSelect,n=e.multiple;return t&&!n}},noDrop:{type:Boolean,default:!1},inputId:{type:String},dir:{type:String,default:\"auto\"},selectOnTab:{type:Boolean,default:!1},selectOnKeyCodes:{type:Array,default:function(){return[13]}},searchInputQuerySelector:{type:String,default:\"[type=search]\"},mapKeydown:{type:Function,default:function(e,t){return e}},appendToBody:{type:Boolean,default:!1},calculatePosition:{type:Function,default:function(e,t,n){var o=n.width,i=n.top,s=n.left;e.style.top=i,e.style.left=s,e.style.width=o}},dropdownShouldOpen:{type:Function,default:function(e){var t=e.noDrop,n=e.open,o=e.mutableLoading;return!t&&(n&&!o)}},keyboardFocusBorder:{type:Boolean,default:!1},uid:{type:[String,Number],default:function(){return b()}}},data:function(){return{search:\"\",open:!1,isComposing:!1,isKeyboardNavigation:!1,pushedTags:[],_value:[]}},computed:{isTrackingValues:function(){return void 0===this.value||this.$options.propsData.hasOwnProperty(\"reduce\")},selectedValue:function(){var e=this.value;return this.isTrackingValues&&(e=this.$data._value),null!=e&&\"\"!==e?[].concat(e):[]},optionList:function(){return this.options.concat(this.pushTags?this.pushedTags:[])},searchEl:function(){return this.$scopedSlots.search?this.$refs.selectedOptions.querySelector(this.searchInputQuerySelector):this.$refs.search},scope:function(){var e=this,t={search:this.search,loading:this.loading,searching:this.searching,filteredOptions:this.filteredOptions};return{search:{attributes:v({id:this.inputId,disabled:this.disabled,placeholder:this.searchPlaceholder,tabindex:this.tabindex,readonly:!this.searchable,role:\"combobox\",\"aria-autocomplete\":\"list\",\"aria-label\":this.ariaLabelCombobox,\"aria-controls\":\"vs\".concat(this.uid,\"__listbox\"),\"aria-owns\":\"vs\".concat(this.uid,\"__listbox\"),\"aria-expanded\":this.dropdownOpen.toString(),ref:\"search\",type:\"search\",autocomplete:this.autocomplete,value:this.search},this.dropdownOpen&&this.filteredOptions[this.typeAheadPointer]?{\"aria-activedescendant\":\"vs\".concat(this.uid,\"__option-\").concat(this.typeAheadPointer)}:{}),events:{compositionstart:function(){return e.isComposing=!0},compositionend:function(){return e.isComposing=!1},keydown:this.onSearchKeyDown,keypress:this.onSearchKeyPress,blur:this.onSearchBlur,focus:this.onSearchFocus,input:function(t){return e.search=t.target.value}}},spinner:{loading:this.mutableLoading},noOptions:{search:this.search,loading:this.mutableLoading,searching:this.searching},openIndicator:{attributes:{ref:\"openIndicator\",role:\"presentation\",class:\"vs__open-indicator\"}},listHeader:t,listFooter:t,header:v({},t,{deselect:this.deselect}),footer:v({},t,{deselect:this.deselect})}},childComponents:function(){return v({},d,{},this.components)},stateClasses:function(){return{\"vs--open\":this.dropdownOpen,\"vs--single\":!this.multiple,\"vs--multiple\":this.multiple,\"vs--searching\":this.searching&&!this.noDrop,\"vs--searchable\":this.searchable&&!this.noDrop,\"vs--unsearchable\":!this.searchable,\"vs--loading\":this.mutableLoading,\"vs--disabled\":this.disabled}},searching:function(){return!!this.search},dropdownOpen:function(){return this.dropdownShouldOpen(this)},searchPlaceholder:function(){return this.isValueEmpty&&this.placeholder?this.placeholder:void 0},filteredOptions:function(){var e=this,t=function(t){return null!==e.limit?t.slice(0,e.limit):t},n=[].concat(this.optionList);if(!this.filterable&&!this.taggable)return t(n);var o=this.search.length?this.filter(n,this.search,this):n;if(this.taggable&&this.search.length){var i=this.createOption(this.search);this.optionExists(i)||o.unshift(i)}return t(o)},isValueEmpty:function(){return 0===this.selectedValue.length},showClearButton:function(){return!this.multiple&&this.clearable&&!this.open&&!this.isValueEmpty}},watch:{options:function(e,t){var n=this;!this.taggable&&(\"function\"==typeof n.resetOnOptionsChange?n.resetOnOptionsChange(e,t,n.selectedValue):n.resetOnOptionsChange)&&this.clearSelection(),this.value&&this.isTrackingValues&&this.setInternalValueFromOptions(this.value)},value:{immediate:!0,handler:function(e){this.isTrackingValues&&this.setInternalValueFromOptions(e)}},multiple:function(){this.clearSelection()},open:function(e){this.$emit(e?\"open\":\"close\")},search:function(e){e.length&&(this.open=!0)}},created:function(){this.mutableLoading=this.loading,this.$on(\"option:created\",this.pushTag)},methods:{setInternalValueFromOptions:function(e){var t=this;Array.isArray(e)?this.$data._value=e.map((function(e){return t.findOptionFromReducedValue(e)})):this.$data._value=this.findOptionFromReducedValue(e)},select:function(e){this.$emit(\"option:selecting\",e),this.isOptionSelected(e)?this.deselectFromDropdown&&(this.clearable||this.multiple&&this.selectedValue.length>1)&&this.deselect(e):(this.taggable&&!this.optionExists(e)&&this.$emit(\"option:created\",e),this.multiple&&(e=this.selectedValue.concat(e)),this.updateValue(e),this.$emit(\"option:selected\",e)),this.onAfterSelect(e)},deselect:function(e){var t=this;this.$emit(\"option:deselecting\",e),this.updateValue(this.selectedValue.filter((function(n){return!t.optionComparator(n,e)}))),this.$emit(\"option:deselected\",e)},keyboardDeselect:function(e,t){var n,o;this.deselect(e);var i=null===(n=this.$refs.deselectButtons)||void 0===n?void 0:n[t+1],s=null===(o=this.$refs.deselectButtons)||void 0===o?void 0:o[t-1],r=null!=i?i:s;r?r.focus():this.searchEl.focus()},clearSelection:function(){this.updateValue(this.multiple?[]:null),this.searchEl.focus()},onAfterSelect:function(e){var t=this;this.closeOnSelect&&(this.open=!this.open),this.clearSearchOnSelect&&(this.search=\"\"),this.noDrop&&this.multiple&&this.$nextTick((function(){return t.$refs.search.focus()}))},updateValue:function(e){var t=this;void 0===this.value&&(this.$data._value=e),null!==e&&(e=Array.isArray(e)?e.map((function(e){return t.reduce(e)})):this.reduce(e)),this.$emit(\"input\",e)},toggleDropdown:function(e){var n=e.target!==this.searchEl;n&&e.preventDefault();var o=[].concat(t()(this.$refs.deselectButtons||[]),t()([this.$refs.clearButton]||0));void 0===this.searchEl||o.filter(Boolean).some((function(t){return t.contains(e.target)||t===e.target}))?e.preventDefault():this.open&&n?this.searchEl.blur():this.disabled||(this.open=!0,this.searchEl.focus())},isOptionSelected:function(e){var t=this;return this.selectedValue.some((function(n){return t.optionComparator(n,e)}))},isOptionDeselectable:function(e){return this.isOptionSelected(e)&&this.deselectFromDropdown},hasKeyboardFocusBorder:function(e){return!(!this.keyboardFocusBorder||!this.isKeyboardNavigation)&&e===this.typeAheadPointer},optionComparator:function(e,t){return this.getOptionKey(e)===this.getOptionKey(t)},findOptionFromReducedValue:function(e){var n=this,o=[].concat(t()(this.options),t()(this.pushedTags)).filter((function(t){return JSON.stringify(n.reduce(t))===JSON.stringify(e)}));return 1===o.length?o[0]:o.find((function(e){return n.optionComparator(e,n.$data._value)}))||e},closeSearchOptions:function(){this.open=!1,this.$emit(\"search:blur\")},maybeDeleteValue:function(){if(!this.searchEl.value.length&&this.selectedValue&&this.selectedValue.length&&this.clearable){var e=null;this.multiple&&(e=t()(this.selectedValue.slice(0,this.selectedValue.length-1))),this.updateValue(e)}},optionExists:function(e){var t=this;return this.optionList.some((function(n){return t.optionComparator(n,e)}))},optionAriaSelected:function(e){return this.selectable(e)?String(this.isOptionSelected(e)):null},normalizeOptionForSlot:function(e){return\"object\"===s()(e)?e:a()({},this.label,e)},pushTag:function(e){this.pushedTags.push(e)},onEscape:function(){this.search.length?this.search=\"\":this.open=!1},onSearchBlur:function(){if(!this.mousedown||this.searching){var e=this.clearSearchOnSelect,t=this.multiple;return this.clearSearchOnBlur({clearSearchOnSelect:e,multiple:t})&&(this.search=\"\"),void this.closeSearchOptions()}this.mousedown=!1,0!==this.search.length||0!==this.options.length||this.closeSearchOptions()},onSearchFocus:function(){this.open=!0,this.$emit(\"search:focus\")},onMousedown:function(){this.mousedown=!0},onMouseUp:function(){this.mousedown=!1},onMouseMove:function(e,t){this.isKeyboardNavigation=!1,this.selectable(e)&&(this.typeAheadPointer=t)},onSearchKeyDown:function(e){var t=this,n=function(e){if(e.preventDefault(),t.open)return!t.isComposing&&t.typeAheadSelect();t.open=!0},o={8:function(e){return t.maybeDeleteValue()},9:function(e){return t.onTab()},27:function(e){return t.onEscape()},38:function(e){if(e.preventDefault(),t.isKeyboardNavigation=!0,t.open)return t.typeAheadUp();t.open=!0},40:function(e){if(e.preventDefault(),t.isKeyboardNavigation=!0,t.open)return t.typeAheadDown();t.open=!0}};this.selectOnKeyCodes.forEach((function(e){return o[e]=n}));var i=this.mapKeydown(o,this);if(\"function\"==typeof i[e.keyCode])return i[e.keyCode](e)},onSearchKeyPress:function(e){this.open||32!==e.keyCode||(e.preventDefault(),this.open=!0)}}},(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n(\"div\",{staticClass:\"v-select\",class:e.stateClasses,attrs:{id:\"v-select-\"+e.uid,dir:e.dir}},[e._t(\"header\",null,null,e.scope.header),e._v(\" \"),n(\"div\",{ref:\"toggle\",staticClass:\"vs__dropdown-toggle\"},[n(\"div\",{ref:\"selectedOptions\",staticClass:\"vs__selected-options\",on:{mousedown:e.toggleDropdown}},[e._l(e.selectedValue,(function(t,o){return e._t(\"selected-option-container\",[n(\"span\",{key:e.getOptionKey(t),staticClass:\"vs__selected\"},[e._t(\"selected-option\",[e._v(\"\\n            \"+e._s(e.getOptionLabel(t))+\"\\n          \")],null,e.normalizeOptionForSlot(t)),e._v(\" \"),e.multiple?n(\"button\",{ref:\"deselectButtons\",refInFor:!0,staticClass:\"vs__deselect\",attrs:{disabled:e.disabled,type:\"button\",title:e.ariaLabelDeselectOption(e.getOptionLabel(t)),\"aria-label\":e.ariaLabelDeselectOption(e.getOptionLabel(t))},on:{mousedown:function(n){return n.stopPropagation(),e.deselect(t)},keydown:function(n){return!n.type.indexOf(\"key\")&&e._k(n.keyCode,\"enter\",13,n.key,\"Enter\")?null:e.keyboardDeselect(t,o)}}},[n(e.childComponents.Deselect,{tag:\"component\"})],1):e._e()],2)],{option:e.normalizeOptionForSlot(t),deselect:e.deselect,multiple:e.multiple,disabled:e.disabled})})),e._v(\" \"),e._t(\"search\",[n(\"input\",e._g(e._b({staticClass:\"vs__search\"},\"input\",e.scope.search.attributes,!1),e.scope.search.events))],null,e.scope.search)],2),e._v(\" \"),n(\"div\",{ref:\"actions\",staticClass:\"vs__actions\"},[n(\"button\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.showClearButton,expression:\"showClearButton\"}],ref:\"clearButton\",staticClass:\"vs__clear\",attrs:{disabled:e.disabled,type:\"button\",title:e.ariaLabelClearSelected,\"aria-label\":e.ariaLabelClearSelected},on:{click:e.clearSelection}},[n(e.childComponents.Deselect,{tag:\"component\"})],1),e._v(\" \"),e.noDrop?e._e():n(\"button\",{ref:\"openIndicatorButton\",staticClass:\"vs__open-indicator-button\",attrs:{type:\"button\",tabindex:\"-1\",\"aria-labelledby\":\"vs\"+e.uid+\"__listbox\",\"aria-controls\":\"vs\"+e.uid+\"__listbox\",\"aria-expanded\":e.dropdownOpen.toString()},on:{mousedown:e.toggleDropdown}},[e._t(\"open-indicator\",[n(e.childComponents.OpenIndicator,e._b({tag:\"component\"},\"component\",e.scope.openIndicator.attributes,!1))],null,e.scope.openIndicator)],2),e._v(\" \"),e._t(\"spinner\",[n(\"div\",{directives:[{name:\"show\",rawName:\"v-show\",value:e.mutableLoading,expression:\"mutableLoading\"}],staticClass:\"vs__spinner\"},[e._v(\"Loading...\")])],null,e.scope.spinner)],2)]),e._v(\" \"),n(\"transition\",{attrs:{name:e.transition}},[e.dropdownOpen?n(\"ul\",{directives:[{name:\"append-to-body\",rawName:\"v-append-to-body\"}],key:\"vs\"+e.uid+\"__listbox\",ref:\"dropdownMenu\",staticClass:\"vs__dropdown-menu\",attrs:{id:\"vs\"+e.uid+\"__listbox\",role:\"listbox\",\"aria-label\":e.ariaLabelListbox,\"aria-multiselectable\":e.multiple,tabindex:\"-1\"},on:{mousedown:function(t){return t.preventDefault(),e.onMousedown(t)},mouseup:e.onMouseUp}},[e._t(\"list-header\",null,null,e.scope.listHeader),e._v(\" \"),e._l(e.filteredOptions,(function(t,o){return n(\"li\",{key:e.getOptionKey(t),staticClass:\"vs__dropdown-option\",class:{\"vs__dropdown-option--deselect\":e.isOptionDeselectable(t)&&o===e.typeAheadPointer,\"vs__dropdown-option--selected\":e.isOptionSelected(t),\"vs__dropdown-option--highlight\":o===e.typeAheadPointer,\"vs__dropdown-option--kb-focus\":e.hasKeyboardFocusBorder(o),\"vs__dropdown-option--disabled\":!e.selectable(t)},attrs:{id:\"vs\"+e.uid+\"__option-\"+o,role:\"option\",\"aria-selected\":e.optionAriaSelected(t)},on:{mousemove:function(n){return e.onMouseMove(t,o)},click:function(n){n.preventDefault(),n.stopPropagation(),e.selectable(t)&&e.select(t)}}},[e._t(\"option\",[e._v(\"\\n          \"+e._s(e.getOptionLabel(t))+\"\\n        \")],null,e.normalizeOptionForSlot(t))],2)})),e._v(\" \"),0===e.filteredOptions.length?n(\"li\",{staticClass:\"vs__no-options\"},[e._t(\"no-options\",[e._v(\"\\n          Sorry, no matching options.\\n        \")],null,e.scope.noOptions)],2):e._e(),e._v(\" \"),e._t(\"list-footer\",null,null,e.scope.listFooter)],2):n(\"ul\",{staticStyle:{display:\"none\",visibility:\"hidden\"},attrs:{id:\"vs\"+e.uid+\"__listbox\",role:\"listbox\",\"aria-label\":e.ariaLabelListbox}})]),e._v(\" \"),e._t(\"footer\",null,null,e.scope.footer)],2)}),[],!1,null,null,null).exports,O={ajax:u,pointer:c,pointerScroll:l},_=m})(),o})()}));\n//# sourceMappingURL=vue-select.js.map","const sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  return {\n    ...rect,\n    top: rect.y,\n    left: rect.x,\n    right: rect.x + rect.width,\n    bottom: rect.y + rect.height\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { rectToClientRect, computePosition as computePosition$1 } from '@floating-ui/core';\nexport { arrow, autoPlacement, detectOverflow, flip, hide, inline, limitShift, offset, shift, size } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getDocumentElement, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentIFrame = win.frameElement;\n    while (currentIFrame && offsetParent && offsetWin !== win) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentIFrame = getWindow(currentIFrame).frameElement;\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  if (offsetParent === documentElement) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\nfunction getWindowScrollBarX(element) {\n  // If <html> has a CSS width greater than the viewport, then this will be\n  // incorrect for RTL.\n  return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  return getCssDimensions(element);\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  return {\n    x: rect.left + scroll.scrollLeft - offsets.x,\n    y: rect.top + scroll.scrollTop - offsets.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  return element.offsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const window = getWindow(element);\n  if (!isHTMLElement(element)) {\n    return window;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) {\n    return window;\n  }\n  return offsetParent || getContainingBlock(element) || window;\n}\n\nconst getElementRects = async function (_ref) {\n  let {\n    reference,\n    floating,\n    strategy\n  } = _ref;\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  return {\n    reference: getRectRelativeToOffsetParent(reference, await getOffsetParentFn(floating), strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      ...(await getDimensionsFn(floating))\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    clearTimeout(timeoutId);\n    io && io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 100);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          resizeObserver && resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo && cleanupIo();\n    resizeObserver && resizeObserver.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a reference element when it is given a certain CSS positioning\n * strategy.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { autoUpdate, computePosition, platform };\n","import { n as i } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst l = {\n  name: \"ChevronDownIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar r = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon chevron-down-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(n) {\n    return t.$emit(\"click\", n);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, s = [], a = /* @__PURE__ */ i(\n  l,\n  r,\n  s,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as C\n};\n","import { n as i } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst s = {\n  name: \"CloseIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar n = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon close-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(l) {\n    return t.$emit(\"click\", l);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, r = [], a = /* @__PURE__ */ i(\n  s,\n  n,\n  r,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as C\n};\n","import '../assets/NcEllipsisedOption-eoI10kvc.css';\nimport { N as i, F as r } from \"../chunks/index-2phCrsSH.mjs\";\nimport { n as a } from \"../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst n = {\n  name: \"NcEllipsisedOption\",\n  components: {\n    NcHighlight: i\n  },\n  props: {\n    name: {\n      type: String,\n      default: \"\"\n    },\n    search: {\n      type: String,\n      default: \"\"\n    }\n  },\n  computed: {\n    needsTruncate() {\n      return this.name && this.name.length >= 10;\n    },\n    /**\n     * Index at which to split the name if it is longer than 10 characters.\n     *\n     * @return {number} The position at which to split\n     */\n    split() {\n      return this.name.length - Math.min(Math.floor(this.name.length / 2), 10);\n    },\n    part1() {\n      return this.needsTruncate ? this.name.slice(0, this.split) : this.name;\n    },\n    part2() {\n      return this.needsTruncate ? this.name.slice(this.split) : \"\";\n    },\n    /**\n     * The ranges to highlight. Since we split the string for ellipsising,\n     * the Highlight component cannot figure this out itself and needs the ranges provided.\n     *\n     * @return {Array} The array with the ranges to highlight\n     */\n    highlight1() {\n      return this.search ? r(this.name, this.search) : [];\n    },\n    /**\n     * We shift the ranges for the second part by the position of the split.\n     * Ranges out of the string length are discarded by the Highlight component,\n     * so we don't need to take care of this here.\n     *\n     * @return {Array} The array with the ranges to highlight\n     */\n    highlight2() {\n      return this.highlight1.map((s) => ({\n        start: s.start - this.split,\n        end: s.end - this.split\n      }));\n    }\n  }\n};\nvar h = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", { staticClass: \"name-parts\", attrs: { title: t.name } }, [e(\"NcHighlight\", { staticClass: \"name-parts__first\", attrs: { text: t.part1, search: t.search, highlight: t.highlight1 } }), t.part2 ? e(\"NcHighlight\", { staticClass: \"name-parts__last\", attrs: { text: t.part2, search: t.search, highlight: t.highlight2 } }) : t._e()], 1);\n}, l = [], c = /* @__PURE__ */ a(\n  n,\n  h,\n  l,\n  !1,\n  null,\n  \"08c4259e\",\n  null,\n  null\n);\nconst g = c.exports;\nexport {\n  g as default\n};\n","import '../assets/NcMentionBubble-YYl1ib_F.css';\nimport '../assets/NcListItemIcon-PQ2s6ZqX.css';\nimport { N as i, u as r } from \"./NcAvatar-MHywJkM4.mjs\";\nimport { N as n } from \"./index-2phCrsSH.mjs\";\nimport { N as o } from \"./NcIconSvgWrapper-CvnWKK7h.mjs\";\nimport \"../Composables/useIsFullscreen.mjs\";\nimport \"../Composables/useIsMobile.mjs\";\nimport \"@nextcloud/router\";\n/* empty css                                                                          */\nimport { n as c } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport \"linkify-string\";\nimport \"escape-html\";\nimport \"striptags\";\nimport \"vue\";\nconst l = 8, e = 32, u = {\n  name: \"NcListItemIcon\",\n  components: {\n    NcAvatar: i,\n    NcHighlight: n,\n    NcIconSvgWrapper: o\n  },\n  mixins: [\n    r\n  ],\n  props: {\n    /**\n     * Default first line text\n     */\n    name: {\n      type: String,\n      required: !0\n    },\n    /**\n     * Secondary optional line\n     * Only visible on size of 32 and above\n     */\n    subname: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Icon class to be displayed at the end of the component\n     */\n    icon: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * SVG icon to be displayed at the end of the component\n     */\n    iconSvg: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Descriptive name for the icon\n     */\n    iconName: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Search within the highlight of name/subname\n     */\n    search: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Set a size in px that will define the avatar height/width\n     * and therefore, the height of the component\n     */\n    avatarSize: {\n      type: Number,\n      default: e\n    },\n    /**\n     * Disable the margins of this component.\n     * Useful for integration in `NcSelect` for example\n     */\n    noMargin: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * See the [Avatar](#Avatar) displayName prop\n     * Fallback to name\n     */\n    displayName: {\n      type: String,\n      default: null\n    },\n    /**\n     * See the [Avatar](#Avatar) isNoUser prop\n     * Enable/disable the UserStatus fetching\n     */\n    isNoUser: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Unique list item ID\n     */\n    id: {\n      type: String,\n      default: null\n    }\n  },\n  data() {\n    return {\n      margin: l\n    };\n  },\n  computed: {\n    hasIcon() {\n      return this.icon !== \"\";\n    },\n    hasIconSvg() {\n      return this.iconSvg !== \"\";\n    },\n    isValidSubname() {\n      return this.subname?.trim?.() !== \"\";\n    },\n    isSizeBigEnough() {\n      return this.avatarSize >= e;\n    },\n    cssVars() {\n      const a = this.noMargin ? 0 : this.margin;\n      return {\n        \"--height\": this.avatarSize + 2 * a + \"px\",\n        \"--margin\": this.margin + \"px\"\n      };\n    },\n    /**\n     * Seperates the search property into two parts, the first one is the search part on the name, the second on the subname.\n     * @return {[string, string]}\n     */\n    searchParts() {\n      const a = /^([^<]*)<([^>]+)>?$/, t = this.search.match(a);\n      return this.isNoUser || !t ? [this.search, this.search] : [t[1].trim(), t[2]];\n    }\n  },\n  beforeMount() {\n    !this.isNoUser && !this.subname && this.fetchUserStatus(this.user);\n  }\n};\nvar m = function() {\n  var t = this, s = t._self._c;\n  return s(\"span\", t._g({ staticClass: \"option\", style: t.cssVars, attrs: { id: t.id } }, t.$listeners), [s(\"NcAvatar\", t._b({ staticClass: \"option__avatar\", attrs: { \"disable-menu\": !0, \"disable-tooltip\": !0, \"display-name\": t.displayName || t.name, \"is-no-user\": t.isNoUser, size: t.avatarSize } }, \"NcAvatar\", t.$attrs, !1)), s(\"div\", { staticClass: \"option__details\" }, [s(\"NcHighlight\", { staticClass: \"option__lineone\", attrs: { text: t.name, search: t.searchParts[0] } }), t.isValidSubname && t.isSizeBigEnough ? s(\"NcHighlight\", { staticClass: \"option__linetwo\", attrs: { text: t.subname, search: t.searchParts[1] } }) : t.hasStatus ? s(\"span\", [s(\"span\", [t._v(t._s(t.userStatus.icon))]), s(\"span\", [t._v(t._s(t.userStatus.message))])]) : t._e()], 1), t._t(\"default\", function() {\n    return [t.hasIconSvg ? s(\"NcIconSvgWrapper\", { staticClass: \"option__icon\", attrs: { svg: t.iconSvg, name: t.iconName } }) : t.hasIcon ? s(\"span\", { staticClass: \"icon option__icon\", class: t.icon, attrs: { \"aria-label\": t.iconName } }) : t._e()];\n  })], 2);\n}, p = [], h = /* @__PURE__ */ c(\n  u,\n  m,\n  p,\n  !1,\n  null,\n  \"562c32c6\",\n  null,\n  null\n);\nconst x = h.exports;\nexport {\n  x as N\n};\n","import '../assets/NcSelect-OGgZlx4Q.css';\nimport \"@nextcloud/vue-select/dist/vue-select.css\";\nimport u from \"vue\";\nimport { VueSelect as o } from \"@nextcloud/vue-select\";\nimport { autoUpdate as f, computePosition as d, offset as m, flip as b, shift as y, limitShift as h } from \"@floating-ui/dom\";\nimport { r as g, b as L, a as n } from \"./_l10n-9dioj9MT.mjs\";\nimport { C as _ } from \"./ChevronDown-suAKKmeb.mjs\";\nimport { C as S } from \"./Close-QtH6_3PP.mjs\";\nimport C from \"../Components/NcEllipsisedOption.mjs\";\nimport { N as v } from \"./NcListItemIcon-NPSUuwgH.mjs\";\nimport O from \"../Components/NcLoadingIcon.mjs\";\nimport { G as c } from \"./GenRandomId-VodkdWbp.mjs\";\nimport { n as N } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\ng(L);\nconst B = {\n  name: \"NcSelect\",\n  components: {\n    ChevronDown: _,\n    NcEllipsisedOption: C,\n    NcListItemIcon: v,\n    NcLoadingIcon: O,\n    VueSelect: o\n  },\n  props: {\n    // Add VueSelect props to $props\n    ...o.props,\n    ...o.mixins.reduce((l, e) => ({ ...l, ...e.props }), {}),\n    /**\n     * `aria-label` for the clear input button\n     */\n    ariaLabelClearSelected: {\n      type: String,\n      default: n(\"Clear selected\")\n    },\n    /**\n     * `aria-label` for the search input\n     *\n     * A descriptive `inputLabel` is preferred as this is not visible.\n     */\n    ariaLabelCombobox: {\n      type: String,\n      default: null\n    },\n    /**\n     * `aria-label` for the listbox element\n     */\n    ariaLabelListbox: {\n      type: String,\n      default: n(\"Options\")\n    },\n    /**\n     * Allows to customize the `aria-label` for the deselect-option button\n     * The default is \"Deselect \" + optionLabel\n     * @type {(optionLabel: string) => string}\n     */\n    ariaLabelDeselectOption: {\n      type: Function,\n      default: (l) => n(\"Deselect {option}\", { option: l })\n    },\n    /**\n     * Append the dropdown element to the end of the body\n     * and size/position it dynamically.\n     *\n     * @see https://vue-select.org/api/props.html#appendtobody\n     */\n    appendToBody: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * When `appendToBody` is true, this function is responsible for\n     * positioning the drop down list.\n     *\n     * If a function is returned from `calculatePosition`, it will\n     * be called when the drop down list is removed from the DOM.\n     * This allows for any garbage collection you may need to do.\n     *\n     * @see https://vue-select.org/api/props.html#calculateposition\n     */\n    calculatePosition: {\n      type: Function,\n      default: null\n    },\n    /**\n     * Close the dropdown when selecting an option\n     *\n     * @see https://vue-select.org/api/props.html#closeonselect\n     */\n    closeOnSelect: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Replace default vue-select components\n     *\n     * @see https://vue-select.org/api/props.html#components\n     */\n    components: {\n      type: Object,\n      default: () => ({\n        Deselect: {\n          render: (l) => l(S, {\n            props: {\n              size: 20,\n              fillColor: \"var(--vs-controls-color)\"\n            },\n            style: {\n              cursor: \"pointer\"\n            }\n          })\n        }\n      })\n    },\n    /**\n     * Sets the maximum number of options to display in the dropdown list\n     */\n    limit: {\n      type: Number,\n      default: null\n    },\n    /**\n     * Disable the component\n     *\n     * @see https://vue-select.org/api/props.html#disabled\n     */\n    disabled: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Determines whether the dropdown should be open.\n     * Receives the component instance as the only argument.\n     *\n     * @see https://vue-select.org/api/props.html#dropdownshouldopen\n     */\n    dropdownShouldOpen: {\n      type: Function,\n      default: ({ noDrop: l, open: e }) => l ? !1 : e\n    },\n    /**\n     * Callback to determine if the provided option should\n     * match the current search text. Used to determine\n     * if the option should be displayed.\n     *\n     * Defaults to the internal vue-select function documented at the link\n     * below\n     *\n     * Enabling `userSelect` will automatically set this to filter by the\n     * `displayName` and `subname` properties of the user option object\n     * unless this prop is set explicitly\n     *\n     * @see https://vue-select.org/api/props.html#filterby\n     */\n    filterBy: {\n      type: Function,\n      default: null\n    },\n    /**\n     * Class for the `input`\n     *\n     * Necessary for use in NcActionInput\n     */\n    inputClass: {\n      type: [String, Object],\n      default: null\n    },\n    /**\n     * Input element id\n     */\n    inputId: {\n      type: String,\n      default: () => `select-input-${c()}`\n    },\n    /**\n     * Visible label for the input element\n     *\n     * @todo Set default for @nextcloud/vue 9\n     */\n    inputLabel: {\n      type: String,\n      default: null\n    },\n    /**\n     * Pass true if you are using an external label\n     */\n    labelOutside: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Display a visible border around dropdown options\n     * which have keyboard focus\n     */\n    keyboardFocusBorder: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Key of the displayed label for object options\n     *\n     * Defaults to the internal vue-select string documented at the link\n     * below\n     *\n     * Enabling `userSelect` will automatically set this to `'displayName'`\n     * unless this prop is set explicitly\n     *\n     * @see https://vue-select.org/api/props.html#label\n     */\n    label: {\n      type: String,\n      default: null\n    },\n    /**\n     * Show the loading icon\n     *\n     * @see https://vue-select.org/api/props.html#loading\n     */\n    loading: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Allow selection of multiple options\n     *\n     * @see https://vue-select.org/api/props.html#multiple\n     */\n    multiple: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Disable automatic wrapping when selected options overflow the width\n     */\n    noWrap: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Array of options\n     *\n     * @type {Array<string | number | Record<string | number, any>>}\n     *\n     * @see https://vue-select.org/api/props.html#options\n     */\n    options: {\n      type: Array,\n      default: () => []\n    },\n    /**\n     * Placeholder text\n     *\n     * @see https://vue-select.org/api/props.html#placeholder\n     */\n    placeholder: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Customized component's response to keydown events while the search input has focus\n     *\n     * @see https://vue-select.org/guide/keydown.html#mapkeydown\n     */\n    mapKeydown: {\n      type: Function,\n      /**\n       * Patched Vue-Select keydown events handlers map to stop Escape propagation in open select\n       *\n       * @param {Record<number, Function>} map - Mapped keyCode to handlers { <keyCode>:<callback> }\n       * @param {import('@nextcloud/vue-select').VueSelect} vm - VueSelect instance\n       * @return {Record<number, Function>} patched keydown event handlers\n       */\n      default(l, e) {\n        return {\n          ...l,\n          /**\n           * Patched Escape handler to stop propagation from open select\n           *\n           * @param {KeyboardEvent} event - default keydown event handler\n           */\n          27: (a) => {\n            e.open && a.stopPropagation(), l[27](a);\n          }\n        };\n      }\n    },\n    /**\n     * A unique identifier used to generate IDs and DOM attributes. Must be unique for every instance of the component.\n     *\n     * @see https://vue-select.org/api/props.html#uid\n     */\n    uid: {\n      type: String,\n      default: () => c()\n    },\n    /**\n     * When `appendToBody` is true, this sets the placement of the dropdown\n     *\n     * @type {'bottom' | 'top'}\n     */\n    placement: {\n      type: String,\n      default: \"bottom\"\n    },\n    /**\n     * If false, the focused dropdown option will not be reset when filtered\n     * options change\n     */\n    resetFocusOnOptionsChange: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Enable the user selector with avatars\n     *\n     * Objects must contain the data expected by the\n     * [NcListItemIcon](#/Components/NcListItemIcon) and\n     * [NcAvatar](#/Components/NcAvatar) components\n     */\n    userSelect: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Currently selected value\n     *\n     * The `v-model` directive may be used for two-way data binding\n     *\n     * @type {string | number | Record<string | number, any> | Array<any>}\n     *\n     * @see https://vue-select.org/api/props.html#value\n     */\n    value: {\n      type: [String, Number, Object, Array],\n      default: null\n    },\n    /**\n     * Enable if a value is required for native form validation\n     */\n    required: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Any available prop\n     *\n     * @see https://vue-select.org/api/props.html\n     */\n    // Not an actual prop but needed to show in vue-styleguidist docs\n    // eslint-disable-next-line\n    \" \": {}\n  },\n  emits: [\n    /**\n     * All events from https://vue-select.org/api/events.html\n     */\n    // Not an actual event but needed to show in vue-styleguidist docs\n    \" \"\n  ],\n  data() {\n    return {\n      search: \"\"\n    };\n  },\n  computed: {\n    inputRequired() {\n      return this.required ? this.value === null || Array.isArray(this.value) && this.value.length === 0 : null;\n    },\n    localCalculatePosition() {\n      return this.calculatePosition !== null ? this.calculatePosition : (l, e, { width: a }) => {\n        l.style.width = a;\n        const t = {\n          name: \"addClass\",\n          fn(s) {\n            return l.classList.add(\"vs__dropdown-menu--floating\"), {};\n          }\n        }, r = {\n          name: \"togglePlacementClass\",\n          fn({ placement: s }) {\n            return e.$el.classList.toggle(\n              \"select--drop-up\",\n              s === \"top\"\n            ), l.classList.toggle(\n              \"vs__dropdown-menu--floating-placement-top\",\n              s === \"top\"\n            ), {};\n          }\n        }, i = () => {\n          d(e.$refs.toggle, l, {\n            placement: this.placement,\n            middleware: [\n              m(-1),\n              t,\n              r,\n              // Match popperjs default collision prevention behavior by appending the following middleware in order\n              b(),\n              y({ limiter: h() })\n            ]\n          }).then(({ x: s, y: p }) => {\n            Object.assign(l.style, {\n              left: `${s}px`,\n              top: `${p}px`,\n              width: `${e.$refs.toggle.getBoundingClientRect().width}px`\n            });\n          });\n        };\n        return f(\n          e.$refs.toggle,\n          l,\n          i\n        );\n      };\n    },\n    localFilterBy() {\n      const l = /[^<]*<([^>]+)/;\n      return this.filterBy !== null ? this.filterBy : this.userSelect ? (e, a, t) => {\n        const r = t.match(l);\n        return r && e.subname?.toLocaleLowerCase?.()?.indexOf(r[1].toLocaleLowerCase()) > -1 || `${a} ${e.subname}`.toLocaleLowerCase().indexOf(t.toLocaleLowerCase()) > -1;\n      } : o.props.filterBy.default;\n    },\n    localLabel() {\n      return this.label !== null ? this.label : this.userSelect ? \"displayName\" : o.props.label.default;\n    },\n    propsToForward() {\n      const l = [\n        ...Object.keys(o.props),\n        ...o.mixins.flatMap((t) => Object.keys(t.props ?? {}))\n      ];\n      return {\n        ...Object.fromEntries(\n          Object.entries(this.$props).filter(([t, r]) => l.includes(t))\n        ),\n        // Custom overrides of vue-select props\n        calculatePosition: this.localCalculatePosition,\n        filterBy: this.localFilterBy,\n        label: this.localLabel\n      };\n    }\n  },\n  mounted() {\n    !this.labelOutside && !this.inputLabel && !this.ariaLabelCombobox && u.util.warn(\"[NcSelect] An `inputLabel` or `ariaLabelCombobox` should be set. If an external label is used, `labelOutside` should be set to `true`.\"), this.inputLabel && this.ariaLabelCombobox && u.util.warn(\"[NcSelect] Only one of `inputLabel` or `ariaLabelCombobox` should to be set.\");\n  },\n  methods: {\n    t: n\n  }\n};\nvar w = function() {\n  var e = this, a = e._self._c;\n  return a(\"VueSelect\", e._g(e._b({ staticClass: \"select\", class: {\n    \"select--no-wrap\": e.noWrap,\n    \"user-select\": e.userSelect\n  }, on: { search: (t) => e.search = t }, scopedSlots: e._u([!e.labelOutside && e.inputLabel ? { key: \"header\", fn: function() {\n    return [a(\"label\", { staticClass: \"select__label\", attrs: { for: e.inputId } }, [e._v(\" \" + e._s(e.inputLabel) + \" \")])];\n  }, proxy: !0 } : null, { key: \"search\", fn: function({ attributes: t, events: r }) {\n    return [a(\"input\", e._g(e._b({ class: [\"vs__search\", e.inputClass], attrs: { required: e.inputRequired } }, \"input\", t, !1), r))];\n  } }, { key: \"open-indicator\", fn: function({ attributes: t }) {\n    return [a(\"ChevronDown\", e._b({ style: {\n      cursor: e.disabled ? null : \"pointer\"\n    }, attrs: { \"fill-color\": \"var(--vs-controls-color)\", size: 26 } }, \"ChevronDown\", t, !1))];\n  } }, { key: \"option\", fn: function(t) {\n    return [e.userSelect ? a(\"NcListItemIcon\", e._b({ attrs: { \"avatar-size\": 24, name: t[e.localLabel], search: e.search } }, \"NcListItemIcon\", t, !1)) : a(\"NcEllipsisedOption\", { attrs: { name: String(t[e.localLabel]), search: e.search } })];\n  } }, { key: \"selected-option\", fn: function(t) {\n    return [e.userSelect ? a(\"NcListItemIcon\", e._b({ attrs: { \"avatar-size\": 24, name: t[e.localLabel], search: e.search } }, \"NcListItemIcon\", t, !1)) : a(\"NcEllipsisedOption\", { attrs: { name: String(t[e.localLabel]), search: e.search } })];\n  } }, { key: \"spinner\", fn: function(t) {\n    return [t.loading ? a(\"NcLoadingIcon\") : e._e()];\n  } }, { key: \"no-options\", fn: function() {\n    return [e._v(\" \" + e._s(e.t(\"No results\")) + \" \")];\n  }, proxy: !0 }, e._l(e.$scopedSlots, function(t, r) {\n    return { key: r, fn: function(i) {\n      return [e._t(r, null, null, i)];\n    } };\n  })], null, !0) }, \"VueSelect\", e.propsToForward, !1), e.$listeners));\n}, x = [], I = /* @__PURE__ */ N(\n  B,\n  w,\n  x,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst G = I.exports;\nexport {\n  G as N\n};\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is a node.\n * @param {unknown} this\n *   The given context.\n * @param {unknown} [node]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean}\n *   Whether this is a node and passes a test.\n *\n * @typedef {Record<string, unknown> | Node} Props\n *   Object to check for equivalence.\n *\n *   Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array<Props | TestFunction | string> | Props | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary node.\n *\n * @callback TestFunction\n *   Check if a node passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Node} node\n *   A node.\n * @param {number | undefined} [index]\n *   The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n *   The node’s parent.\n * @returns {boolean | undefined | void}\n *   Whether this node passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n *   Thing to check, typically `Node`.\n * @param {Test} test\n *   A check for a specific node.\n * @param {number | null | undefined} index\n *   The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n *   The node’s parent.\n * @param {unknown} context\n *   Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n *   Whether `node` is a node and passes a test.\n */\nexport const is =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((node?: null | undefined) => false) &\n   *   ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [node]\n     * @param {Test} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parent | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (node, test, index, parent, context) {\n      const check = convert(test)\n\n      if (\n        index !== undefined &&\n        index !== null &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite index')\n      }\n\n      if (\n        parent !== undefined &&\n        parent !== null &&\n        (!is(parent) || !parent.children)\n      ) {\n        throw new Error('Expected parent node')\n      }\n\n      if (\n        (parent === undefined || parent === null) !==\n        (index === undefined || index === null)\n      ) {\n        throw new Error('Expected both parent and index')\n      }\n\n      return looksLikeANode(node)\n        ? check.call(context, node, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n *   *   when nullish, checks if `node` is a `Node`.\n *   *   when `string`, works like passing `(node) => node.type === test`.\n *   *   when `function` checks if function passed the node is true.\n *   *   when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n *   *   when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n *   An assertion.\n */\nexport const convert =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends string>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n   *   (<Condition extends Props>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n   *   (<Condition extends TestFunction>(test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate<Condition, Node>) &\n   *   ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return ok\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      if (typeof test === 'object') {\n        return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n      }\n\n      if (typeof test === 'string') {\n        return typeFactory(test)\n      }\n\n      throw new Error('Expected function, string, or object as test')\n    }\n  )\n\n/**\n * @param {Array<Props | TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convert(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n  const checkAsRecord = /** @type {Record<string, unknown>} */ (check)\n\n  return castFactory(all)\n\n  /**\n   * @param {Node} node\n   * @returns {boolean}\n   */\n  function all(node) {\n    const nodeAsRecord = /** @type {Record<string, unknown>} */ (\n      /** @type {unknown} */ (node)\n    )\n\n    /** @type {string} */\n    let key\n\n    for (key in check) {\n      if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n    }\n\n    return true\n  }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n  return castFactory(type)\n\n  /**\n   * @param {Node} node\n   */\n  function type(node) {\n    return node && node.type === check\n  }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeANode(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\nfunction ok() {\n  return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n  return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {InternalAncestor<InclusiveDescendant<Tree>, Child>} Ancestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n *   Union of the action types.\n *\n * @typedef {number} Index\n *   Move to the sibling at `index` next (after node itself is completely\n *   traversed).\n *\n *   Useful if mutating the tree, such as removing the node the visitor is\n *   currently on, or any of its previous siblings.\n *   Results less than 0 or greater than or equal to `children.length` stop\n *   traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n *   List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n *   Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform the parent of node (the last of `ancestors`).\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of an ancestor still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Array<VisitedParents>} ancestors\n *   Ancestors of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Matches<InclusiveDescendant<Tree>, Check>, Ancestor<Tree, Matches<InclusiveDescendant<Tree>, Check>>>} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Tree type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly<ActionTuple>} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} test\n *   `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n *   Handle each node.\n * @param {boolean | null | undefined} [reverse]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n  /** @type {Test} */\n  let check\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    // @ts-expect-error no visitor given, so `visitor` is test.\n    visitor = test\n  } else {\n    // @ts-expect-error visitor given, so `test` isn’t a visitor.\n    check = test\n  }\n\n  const is = convert(check)\n  const step = reverse ? -1 : 1\n\n  factory(tree, undefined, [])()\n\n  /**\n   * @param {UnistNode} node\n   * @param {number | undefined} index\n   * @param {Array<UnistParent>} parents\n   */\n  function factory(node, index, parents) {\n    const value = /** @type {Record<string, unknown>} */ (\n      node && typeof node === 'object' ? node : {}\n    )\n\n    if (typeof value.type === 'string') {\n      const name =\n        // `hast`\n        typeof value.tagName === 'string'\n          ? value.tagName\n          : // `xast`\n          typeof value.name === 'string'\n          ? value.name\n          : undefined\n\n      Object.defineProperty(visit, 'name', {\n        value:\n          'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n      })\n    }\n\n    return visit\n\n    function visit() {\n      /** @type {Readonly<ActionTuple>} */\n      let result = empty\n      /** @type {Readonly<ActionTuple>} */\n      let subresult\n      /** @type {number} */\n      let offset\n      /** @type {Array<UnistParent>} */\n      let grandparents\n\n      if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n        // @ts-expect-error: `visitor` is now a visitor.\n        result = toResult(visitor(node, parents))\n\n        if (result[0] === EXIT) {\n          return result\n        }\n      }\n\n      if ('children' in node && node.children) {\n        const nodeAsParent = /** @type {UnistParent} */ (node)\n\n        if (nodeAsParent.children && result[0] !== SKIP) {\n          offset = (reverse ? nodeAsParent.children.length : -1) + step\n          grandparents = parents.concat(nodeAsParent)\n\n          while (offset > -1 && offset < nodeAsParent.children.length) {\n            const child = nodeAsParent.children[offset]\n\n            subresult = factory(child, offset, grandparents)()\n\n            if (subresult[0] === EXIT) {\n              return subresult\n            }\n\n            offset =\n              typeof subresult[1] === 'number' ? subresult[1] : offset + step\n          }\n        }\n      }\n\n      return result\n    }\n  }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n *   Valid return values from visitors.\n * @returns {Readonly<ActionTuple>}\n *   Clean result.\n */\nfunction toResult(value) {\n  if (Array.isArray(value)) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude<import('unist-util-is').Test, undefined> | undefined} Test\n *   Test from `unist-util-is`.\n *\n *   Note: we have remove and add `undefined`, because otherwise when generating\n *   automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n *   which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n *   Fn extends (value: any) => value is infer Thing\n *   ? Thing\n *   : Fallback\n * )} Predicate\n *   Get the value of a type guard `Fn`.\n * @template Fn\n *   Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n *   Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n *   Check extends null | undefined // No test.\n *   ? Value\n *   : Value extends {type: Check} // String (type) test.\n *   ? Value\n *   : Value extends Check // Partial test.\n *   ? Value\n *   : Check extends Function // Function test.\n *   ? Predicate<Check, Value> extends Value\n *     ? Predicate<Check, Value>\n *     : never\n *   : never // Some other test?\n * )} MatchesOne\n *   Check whether a node matches a primitive check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n *   Check extends Array<any>\n *   ? MatchesOne<Value, Check[keyof Check]>\n *   : MatchesOne<Value, Check>\n * )} Matches\n *   Check whether a node matches a check in the type system.\n * @template Value\n *   Value; typically unist `Node`.\n * @template Check\n *   Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n *   Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n *   Increment a number in the type system.\n * @template {Uint} [I=0]\n *   Index.\n */\n\n/**\n * @typedef {(\n *   Node extends UnistParent\n *   ? Node extends {children: Array<infer Children>}\n *     ? Child extends Children ? Node : never\n *     : never\n *   : never\n * )} InternalParent\n *   Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {InternalParent<InclusiveDescendant<Tree>, Child>} Parent\n *   Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n */\n\n/**\n * @typedef {(\n *   Depth extends Max\n *   ? never\n *   :\n *     | InternalParent<Node, Child>\n *     | InternalAncestor<Node, InternalParent<Node, Child>, Max, Increment<Depth>>\n * )} InternalAncestor\n *   Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n *   All node types in a tree.\n * @template {UnistNode} Child\n *   Node to search for.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @typedef {(\n *   Tree extends UnistParent\n *     ? Depth extends Max\n *       ? Tree\n *       : Tree | InclusiveDescendant<Tree['children'][number], Max, Increment<Depth>>\n *     : Tree\n * )} InclusiveDescendant\n *   Collect all (inclusive) descendants of `Tree`.\n *\n *   > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n *   > recurse without actually running into an infinite loop, which the\n *   > previous version did.\n *   >\n *   > Practically, a max of `2` is typically enough assuming a `Root` is\n *   > passed, but it doesn’t improve performance.\n *   > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n *   > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n *   Tree type.\n * @template {Uint} [Max=10]\n *   Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n *   Current depth.\n */\n\n/**\n * @callback Visitor\n *   Handle a node (matching `test`, if given).\n *\n *   Visitors are free to transform `node`.\n *   They can also transform `parent`.\n *\n *   Replacing `node` itself, if `SKIP` is not returned, still causes its\n *   descendants to be walked (which is a bug).\n *\n *   When adding or removing previous siblings of `node` (or next siblings, in\n *   case of reverse), the `Visitor` should return a new `Index` to specify the\n *   sibling to traverse after `node` is traversed.\n *   Adding or removing next siblings of `node` (or previous siblings, in case\n *   of reverse) is handled as expected without needing to return a new `Index`.\n *\n *   Removing the children property of `parent` still results in them being\n *   traversed.\n * @param {Visited} node\n *   Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n *   Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n *   Parent of `node`.\n * @returns {VisitorResult}\n *   What to do next.\n *\n *   An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n *   An `Action` is treated as a tuple of `[Action]`.\n *\n *   Passing a tuple back only makes sense if the `Action` is `SKIP`.\n *   When the `Action` is `EXIT`, that action can be returned.\n *   When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n *   Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n *   Ancestor type.\n */\n\n/**\n * @typedef {Visitor<Visited, Parent<Ancestor, Visited>>} BuildVisitorFromMatch\n *   Build a typed `Visitor` function from a node and all possible parents.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n *   Node type.\n * @template {UnistParent} Ancestor\n *   Parent type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromMatch<\n *     Matches<Descendant, Check>,\n *     Extract<Descendant, UnistParent>\n *   >\n * )} BuildVisitorFromDescendants\n *   Build a typed `Visitor` function from a list of descendants and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n *   Node type.\n * @template {Test} Check\n *   Test type.\n */\n\n/**\n * @typedef {(\n *   BuildVisitorFromDescendants<\n *     InclusiveDescendant<Tree>,\n *     Check\n *   >\n * )} BuildVisitor\n *   Build a typed `Visitor` function from a tree and a test.\n *\n *   It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n *   Node type.\n * @template {Test} [Check=Test]\n *   Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor<Tree, Check>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor<Tree>} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n *   Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n *   `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n *   Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n *   Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n *   Nothing.\n *\n * @template {UnistNode} Tree\n *   Node type.\n * @template {Test} Check\n *   `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n  /** @type {boolean | null | undefined} */\n  let reverse\n  /** @type {Test} */\n  let test\n  /** @type {Visitor} */\n  let visitor\n\n  if (\n    typeof testOrVisitor === 'function' &&\n    typeof visitorOrReverse !== 'function'\n  ) {\n    test = undefined\n    visitor = testOrVisitor\n    reverse = visitorOrReverse\n  } else {\n    // @ts-expect-error: assume the overload with test was given.\n    test = testOrVisitor\n    // @ts-expect-error: assume the overload with test was given.\n    visitor = visitorOrReverse\n    reverse = maybeReverse\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  /**\n   * @param {UnistNode} node\n   * @param {Array<UnistParent>} parents\n   */\n  function overload(node, parents) {\n    const parent = parents[parents.length - 1]\n    const index = parent ? parent.children.indexOf(node) : undefined\n    return visitor(node, index, parent)\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n */\n\n/**\n * @typedef {Array<Node> | string} ChildrenOrValue\n *   List to use as `children` or value to use as `value`.\n *\n * @typedef {Record<string, unknown>} Props\n *   Other fields to add to the node.\n */\n\n/**\n * Build a node.\n *\n * @template {string} T\n * @template {Props} P\n * @template {Array<Node>} C\n *\n * @overload\n * @param {T} type\n * @returns {{type: T}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @returns {{type: T} & P}\n *\n * @overload\n * @param {T} type\n * @param {string} value\n * @returns {{type: T, value: string}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @param {string} value\n * @returns {{type: T, value: string} & P}\n *\n * @overload\n * @param {T} type\n * @param {C} children\n * @returns {{type: T, children: C}}\n *\n * @overload\n * @param {T} type\n * @param {P} props\n * @param {C} children\n * @returns {{type: T, children: C} & P}\n *\n * @param {string} type\n *   Node type.\n * @param {ChildrenOrValue | Props | null | undefined} [props]\n *   Fields assigned to node (default: `undefined`).\n * @param {ChildrenOrValue | null | undefined} [value]\n *   Children of node or value of `node` (cast to string).\n * @returns {Node}\n *   Built node.\n */\nexport function u(type, props, value) {\n  /** @type {Node} */\n  const node = {type: String(type)}\n\n  if (\n    (value === undefined || value === null) &&\n    (typeof props === 'string' || Array.isArray(props))\n  ) {\n    value = props\n  } else {\n    Object.assign(node, props)\n  }\n\n  if (Array.isArray(value)) {\n    // @ts-expect-error: create a parent.\n    node.children = value\n  } else if (value !== undefined && value !== null) {\n    // @ts-expect-error: create a literal.\n    node.value = String(value)\n  }\n\n  return node\n}\n","import { visit as a, SKIP as h } from \"unist-util-visit\";\nimport { u as c } from \"unist-builder\";\nimport { getBaseUrl as u } from \"@nextcloud/router\";\nconst k = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig, f = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig, g = {\n  name: \"NcLink\",\n  props: {\n    href: {\n      type: String,\n      required: !0\n    }\n  },\n  render(r) {\n    return r(\"a\", {\n      attrs: {\n        href: this.href,\n        rel: \"noopener noreferrer\",\n        target: \"_blank\",\n        class: \"rich-text--external-link\"\n      }\n    }, [this.href.trim()]);\n  }\n}, _ = function({ autolink: r, useMarkdown: t, useExtendedMarkdown: n }) {\n  return function(i) {\n    n || !t || !r || a(i, (o) => o.type === \"text\", (o, e, p) => {\n      let l = m(o.value);\n      return l = l.map((s) => typeof s == \"string\" ? c(\"text\", s) : c(\"link\", {\n        url: s.props.href\n      }, [c(\"text\", s.props.href)])).filter((s) => s), p.children.splice(e, 1, ...l.flat()), [h, e + l.flat().length];\n    });\n  };\n}, m = (r) => {\n  let t = f.exec(r);\n  const n = [];\n  let i = 0;\n  for (; t !== null; ) {\n    let e = t[2], p, l = r.substring(i, t.index + t[1].length);\n    e[0] === \" \" && (l += e[0], e = e.substring(1).trim());\n    const s = e[e.length - 1];\n    (s === \".\" || s === \",\" || s === \";\" || t[0][0] === \"(\" && s === \")\") && (e = e.substring(0, e.length - 1), p = s), n.push(l), n.push({ component: g, props: { href: e } }), p && n.push(p), i = t.index + t[0].length, t = f.exec(r);\n  }\n  n.push(r.substring(i));\n  const o = n.map((e) => typeof e == \"string\" ? e : e.props.href).join(\"\");\n  return r === o ? n : (console.error(\"Failed to reassemble the chunked text: \" + r), r);\n}, R = (r, t) => {\n  if (!r || !t.includes(u()))\n    return null;\n  const n = r.getRoutes().map((i) => new RegExp(i.regex.source.slice(1, -1), i.regex.flags));\n  for (const i of n) {\n    const o = t.search(i);\n    if (o !== -1)\n      return t.slice(o);\n  }\n};\nexport {\n  k as U,\n  R as g,\n  m as p,\n  _ as r\n};\n","import { n as i } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst r = {\n  name: \"AlertCircleOutlineIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar n = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon alert-circle-outline-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(l) {\n    return t.$emit(\"click\", l);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, s = [], a = /* @__PURE__ */ i(\n  r,\n  n,\n  s,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as A\n};\n","import { n as l } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst n = {\n  name: \"CheckIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar r = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon check-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(i) {\n    return t.$emit(\"click\", i);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, s = [], a = /* @__PURE__ */ l(\n  n,\n  r,\n  s,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as C\n};\n","import '../assets/NcInputField-L2Lld_iG.css';\nimport l from \"./NcButton.mjs\";\nimport { G as a } from \"../chunks/GenRandomId-VodkdWbp.mjs\";\nimport { A as s } from \"../chunks/AlertCircleOutline-XY0EPUmQ.mjs\";\nimport { C as n } from \"../chunks/Check-qy5XrF1J.mjs\";\nimport { n as r } from \"../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst u = {\n  name: \"NcInputField\",\n  components: {\n    NcButton: l,\n    AlertCircle: s,\n    Check: n\n  },\n  inheritAttrs: !1,\n  props: {\n    /**\n     * The value of the input field\n     * If type is 'number' and a number is passed as value than the type of `update:value` will also be 'number'\n     */\n    value: {\n      type: [String, Number],\n      required: !0\n    },\n    /**\n     * The type of the input element\n     */\n    type: {\n      type: String,\n      default: \"text\",\n      validator: (t) => [\n        \"text\",\n        \"password\",\n        \"email\",\n        \"tel\",\n        \"url\",\n        \"search\",\n        \"number\"\n      ].includes(t)\n    },\n    /**\n     * The input label, always provide one for accessibility purposes.\n     * This will also be used as a placeholder unless the placeholder\n     * prop is populated with a different string.\n     *\n     * Note: If the background color is not `--color-main-background` consider using an external label instead (see `labelOutside`).\n     */\n    label: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Pass in true if you want to use an external label. This is useful\n     * if you need a label that looks different from the one provided by\n     * this component\n     */\n    labelOutside: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * The placeholder of the input. This defaults as the string that's\n     * passed into the label prop. In order to remove the placeholder,\n     * pass in an empty string.\n     */\n    placeholder: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Controls whether to display the trailing button.\n     */\n    showTrailingButton: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Label of the trailing button\n     *\n     * Required when showTrailingButton is set\n     */\n    trailingButtonLabel: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Toggles the success state of the component. Adds a checkmark icon.\n     * this cannot be used together with canClear.\n     */\n    success: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Toggles the error state of the component. Adds an error icon.\n     * this cannot be used together with canClear.\n     */\n    error: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Additional helper text message\n     *\n     * This will be displayed beneath the input field. In case the field is\n     * also marked as having an error, the text will be displayed in red.\n     */\n    helperText: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Disable the input field\n     */\n    disabled: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Specifies whether the input should have a pill form.\n     * By default, input has rounded corners.\n     */\n    pill: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Class to add to the input field.\n     * Necessary to use NcInputField in the NcActionInput component.\n     */\n    inputClass: {\n      type: [Object, String],\n      default: \"\"\n    }\n  },\n  emits: [\n    \"update:value\",\n    \"trailing-button-click\"\n  ],\n  computed: {\n    computedId() {\n      return this.$attrs.id && this.$attrs.id !== \"\" ? this.$attrs.id : this.inputName;\n    },\n    inputName() {\n      return \"input\" + a();\n    },\n    hasLeadingIcon() {\n      return this.$slots.default;\n    },\n    hasTrailingIcon() {\n      return this.success;\n    },\n    hasPlaceholder() {\n      return this.placeholder !== \"\" && this.placeholder !== void 0;\n    },\n    computedPlaceholder() {\n      return this.hasPlaceholder ? this.placeholder : this.label;\n    },\n    isValidLabel() {\n      const t = this.label || this.labelOutside;\n      return t || console.warn(\"You need to add a label to the NcInputField component. Either use the prop label or use an external one, as per the example in the documentation.\"), t;\n    },\n    ariaDescribedby() {\n      const t = [];\n      return this.helperText.length > 0 && t.push(`${this.inputName}-helper-text`), this.$attrs[\"aria-describedby\"] && t.push(this.$attrs[\"aria-describedby\"]), t.join(\" \") || null;\n    }\n  },\n  methods: {\n    /**\n     * Focus the input element\n     *\n     * @public\n     */\n    focus() {\n      this.$refs.input.focus();\n    },\n    /**\n     * Select all the text in the input\n     *\n     * @public\n     */\n    select() {\n      this.$refs.input.select();\n    },\n    handleInput(t) {\n      this.$emit(\"update:value\", this.type === \"number\" && typeof this.value == \"number\" ? parseFloat(t.target.value, 10) : t.target.value);\n    },\n    handleTrailingButtonClick(t) {\n      this.$emit(\"trailing-button-click\", t);\n    }\n  }\n};\nvar o = function() {\n  var e = this, i = e._self._c;\n  return i(\"div\", { staticClass: \"input-field\", class: { \"input-field--disabled\": e.disabled } }, [i(\"div\", { staticClass: \"input-field__main-wrapper\" }, [i(\"input\", e._g(e._b({ ref: \"input\", staticClass: \"input-field__input\", class: [\n    e.inputClass,\n    {\n      \"input-field__input--trailing-icon\": e.showTrailingButton || e.hasTrailingIcon,\n      \"input-field__input--leading-icon\": e.hasLeadingIcon,\n      \"input-field__input--label-outside\": e.labelOutside,\n      \"input-field__input--success\": e.success,\n      \"input-field__input--error\": e.error,\n      \"input-field__input--pill\": e.pill\n    }\n  ], attrs: { id: e.computedId, type: e.type, disabled: e.disabled, placeholder: e.computedPlaceholder, \"aria-describedby\": e.ariaDescribedby, \"aria-live\": \"polite\" }, domProps: { value: e.value.toString() }, on: { input: e.handleInput } }, \"input\", e.$attrs, !1), e.$listeners)), !e.labelOutside && e.isValidLabel ? i(\"label\", { staticClass: \"input-field__label\", class: [{\n    \"input-field__label--trailing-icon\": e.showTrailingButton || e.hasTrailingIcon,\n    \"input-field__label--leading-icon\": e.hasLeadingIcon\n  }], attrs: { for: e.computedId } }, [e._v(\" \" + e._s(e.label) + \" \")]) : e._e(), i(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.hasLeadingIcon, expression: \"hasLeadingIcon\" }], staticClass: \"input-field__icon input-field__icon--leading\" }, [e._t(\"default\")], 2), e.showTrailingButton ? i(\"NcButton\", { staticClass: \"input-field__trailing-button\", class: [{\n    \"input-field__trailing-button--pill\": e.pill\n  }], attrs: { type: \"tertiary-no-background\", \"aria-label\": e.trailingButtonLabel, disabled: e.disabled }, on: { click: e.handleTrailingButtonClick }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [e._t(\"trailing-button-icon\")];\n  }, proxy: !0 }], null, !0) }) : e.success || e.error ? i(\"div\", { staticClass: \"input-field__icon input-field__icon--trailing\" }, [e.success ? i(\"Check\", { staticStyle: { color: \"var(--color-success-text)\" }, attrs: { size: 20 } }) : e.error ? i(\"AlertCircle\", { staticStyle: { color: \"var(--color-error-text)\" }, attrs: { size: 20 } }) : e._e()], 1) : e._e()], 1), e.helperText.length > 0 ? i(\"p\", { staticClass: \"input-field__helper-text-message\", class: {\n    \"input-field__helper-text-message--error\": e.error,\n    \"input-field__helper-text-message--success\": e.success\n  }, attrs: { id: `${e.inputName}-helper-text` } }, [e.success ? i(\"Check\", { staticClass: \"input-field__helper-text-message__icon\", attrs: { size: 18 } }) : e.error ? i(\"AlertCircle\", { staticClass: \"input-field__helper-text-message__icon\", attrs: { size: 18 } }) : e._e(), e._v(\" \" + e._s(e.helperText) + \" \")], 1) : e._e()]);\n}, d = [], c = /* @__PURE__ */ r(\n  u,\n  o,\n  d,\n  !1,\n  null,\n  \"b312d183\",\n  null,\n  null\n);\nconst m = c.exports;\nexport {\n  m as default\n};\n","import i from \"../Components/NcInputField.mjs\";\nimport { C as o } from \"./Close-QtH6_3PP.mjs\";\nimport { A as a } from \"./ArrowRight-16bLxoZc.mjs\";\nimport { n as s } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport { r as c, c as u, d as p, a as r } from \"./_l10n-9dioj9MT.mjs\";\nconst d = {\n  name: \"UndoVariantIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar f = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon undo-variant-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(l) {\n    return t.$emit(\"click\", l);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M13.5,7A6.5,6.5 0 0,1 20,13.5A6.5,6.5 0 0,1 13.5,20H10V18H13.5C16,18 18,16 18,13.5C18,11 16,9 13.5,9H7.83L10.91,12.09L9.5,13.5L4,8L9.5,2.5L10.92,3.91L7.83,7H13.5M6,18H8V20H6V18Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, _ = [], m = /* @__PURE__ */ s(\n  d,\n  f,\n  _,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst g = m.exports;\nc(p, u);\nconst h = new Set(Object.keys(i.props)), v = {\n  name: \"NcTextField\",\n  components: {\n    NcInputField: i,\n    Close: o,\n    ArrowRight: a,\n    Undo: g\n  },\n  // Allow forwarding all attributes\n  inheritAttrs: !1,\n  props: {\n    /**\n     * Any [NcInputField](#/Components/NcFields?id=ncinputfield) props\n     */\n    // Not an actual prop but needed to show in vue-styleguidist docs\n    // eslint-disable-next-line\n    \" \": {},\n    // Reuse all the props from NcInputField for better typing and documentation\n    ...i.props,\n    /**\n     * The `aria-label` to set on the trailing button\n     * If no explicit value is set it will default to the one matching the `trailingButtonIcon`:\n     * @default 'Clear text'|'Save changes'|'Undo changes'\n     */\n    trailingButtonLabel: {\n      type: String,\n      default: \"\"\n    },\n    // Custom props\n    /**\n     * Specifies which material design icon should be used for the trailing\n     * button.\n     * @type {'close'|'arrowRight'|'undo'}\n     */\n    trailingButtonIcon: {\n      type: String,\n      default: \"close\",\n      validator: (n) => [\n        \"close\",\n        \"arrowRight\",\n        \"undo\"\n      ].includes(n)\n    }\n  },\n  emits: [\n    \"update:value\"\n  ],\n  computed: {\n    propsAndAttrsToForward() {\n      const n = {\n        undo: r(\"Undo changes\"),\n        close: r(\"Clear text\"),\n        arrowRight: r(\"Save changes\")\n      };\n      return {\n        // Proxy all the HTML attributes\n        ...this.$attrs,\n        // Proxy original NcInputField's props\n        ...Object.fromEntries(\n          Object.entries(this.$props).filter(([t]) => h.has(t))\n        ),\n        // Adjust aria-label for predefined trailing buttons\n        trailingButtonLabel: this.trailingButtonLabel || n[this.trailingButtonIcon]\n      };\n    }\n  },\n  methods: {\n    /**\n     * Focus the input element\n     *\n     * @public\n     */\n    focus() {\n      this.$refs.inputField.focus();\n    },\n    /**\n     * Select all the text in the input\n     *\n     * @public\n     */\n    select() {\n      this.$refs.inputField.select();\n    },\n    handleInput(n) {\n      this.$emit(\"update:value\", n.target.value);\n    }\n  }\n};\nvar F = function() {\n  var t = this, e = t._self._c;\n  return e(\"NcInputField\", t._g(t._b({ ref: \"inputField\", on: { input: t.handleInput }, scopedSlots: t._u([t.type !== \"search\" ? { key: \"trailing-button-icon\", fn: function() {\n    return [t.trailingButtonIcon === \"close\" ? e(\"Close\", { attrs: { size: 20 } }) : t.trailingButtonIcon === \"arrowRight\" ? e(\"ArrowRight\", { attrs: { size: 20 } }) : t.trailingButtonIcon === \"undo\" ? e(\"Undo\", { attrs: { size: 20 } }) : t._e()];\n  }, proxy: !0 } : null], null, !0) }, \"NcInputField\", t.propsAndAttrsToForward, !1), t.$listeners), [t._t(\"default\")], 2);\n}, b = [], C = /* @__PURE__ */ s(\n  v,\n  F,\n  b,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst y = C.exports;\nexport {\n  y as N\n};\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nconst e = (t) => {\n  t.mounted ? Array.isArray(t.mounted) || (t.mounted = [t.mounted]) : t.mounted = [], t.mounted.push(function() {\n    this.$el.setAttribute(\"data-v-07cf345\", \"\");\n  });\n};\nexport {\n  e as S\n};\n","import { n as l } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nconst n = {\n  name: \"ChevronRightIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar r = function() {\n  var t = this, e = t._self._c;\n  return e(\"span\", t._b({ staticClass: \"material-design-icon chevron-right-icon\", attrs: { \"aria-hidden\": t.title ? null : !0, \"aria-label\": t.title, role: \"img\" }, on: { click: function(i) {\n    return t.$emit(\"click\", i);\n  } } }, \"span\", t.$attrs, !1), [e(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: t.fillColor, width: t.size, height: t.size, viewBox: \"0 0 24 24\" } }, [e(\"path\", { attrs: { d: \"M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z\" } }, [t.title ? e(\"title\", [t._v(t._s(t.title))]) : t._e()])])]);\n}, s = [], a = /* @__PURE__ */ l(\n  n,\n  r,\n  s,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst _ = a.exports;\nexport {\n  _ as C\n};\n","import '../assets/NcModal-sIK5sUoC.css';\nimport { S as c } from \"../chunks/ScopeComponent-fOJOJbfW.mjs\";\nimport { g as r } from \"../chunks/focusTrap-Py2bQ9-r.mjs\";\nimport { r as u, F as d, G as p, a as i } from \"../chunks/_l10n-9dioj9MT.mjs\";\nimport { G as h } from \"../chunks/GenRandomId-VodkdWbp.mjs\";\nimport { N as f } from \"../chunks/NcActions-4NCnCJdf.mjs\";\nimport m from \"./NcButton.mjs\";\nimport \"../Directives/Tooltip.mjs\";\nimport { n as l } from \"../chunks/_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport { C as y } from \"../chunks/ChevronRight-9owhU_17.mjs\";\nimport { C as _ } from \"../chunks/Close-QtH6_3PP.mjs\";\nimport { createFocusTrap as w } from \"focus-trap\";\nimport { useSwipe as v } from \"@vueuse/core\";\nimport { VTooltip as g } from \"floating-vue\";\nu(p, d);\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nfunction C(s, e) {\n  let t, a, o = e, n;\n  this.start = function() {\n    n = !0, a = /* @__PURE__ */ new Date(), t = setTimeout(s, o);\n  }, this.pause = function() {\n    n = !1, clearTimeout(t), o -= /* @__PURE__ */ new Date() - a;\n  }, this.clear = function() {\n    n = !1, clearTimeout(t), o = 0;\n  }, this.getTimeLeft = function() {\n    return n && (this.pause(), this.start()), o;\n  }, this.getStateRunning = function() {\n    return n;\n  }, this.start();\n}\nconst S = {\n  name: \"ChevronLeftIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar b = function() {\n  var e = this, t = e._self._c;\n  return t(\"span\", e._b({ staticClass: \"material-design-icon chevron-left-icon\", attrs: { \"aria-hidden\": e.title ? null : !0, \"aria-label\": e.title, role: \"img\" }, on: { click: function(a) {\n    return e.$emit(\"click\", a);\n  } } }, \"span\", e.$attrs, !1), [t(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { d: \"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\" } }, [e.title ? t(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, k = [], T = /* @__PURE__ */ l(\n  S,\n  b,\n  k,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst x = T.exports, N = {\n  name: \"PauseIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar B = function() {\n  var e = this, t = e._self._c;\n  return t(\"span\", e._b({ staticClass: \"material-design-icon pause-icon\", attrs: { \"aria-hidden\": e.title ? null : !0, \"aria-label\": e.title, role: \"img\" }, on: { click: function(a) {\n    return e.$emit(\"click\", a);\n  } } }, \"span\", e.$attrs, !1), [t(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { d: \"M14,19H18V5H14M6,19H10V5H6V19Z\" } }, [e.title ? t(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, $ = [], P = /* @__PURE__ */ l(\n  N,\n  B,\n  $,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst z = P.exports, L = {\n  name: \"PlayIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar F = function() {\n  var e = this, t = e._self._c;\n  return t(\"span\", e._b({ staticClass: \"material-design-icon play-icon\", attrs: { \"aria-hidden\": e.title ? null : !0, \"aria-label\": e.title, role: \"img\" }, on: { click: function(a) {\n    return e.$emit(\"click\", a);\n  } } }, \"span\", e.$attrs, !1), [t(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [t(\"path\", { attrs: { d: \"M8,5.14V19.14L19,12.14L8,5.14Z\" } }, [e.title ? t(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, M = [], A = /* @__PURE__ */ l(\n  L,\n  F,\n  M,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst E = A.exports, R = {\n  name: \"NcModal\",\n  components: {\n    NcActions: f,\n    ChevronLeft: x,\n    ChevronRight: y,\n    Close: _,\n    Pause: z,\n    Play: E,\n    NcButton: m\n  },\n  directives: {\n    tooltip: g\n  },\n  props: {\n    /**\n     * Name to be shown with the modal\n     */\n    name: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * Declare if a previous slide is available\n     */\n    hasPrevious: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Declare if a next slide is available\n     */\n    hasNext: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Declare if hiding the modal should be animated\n     */\n    outTransition: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Declare if the slideshow functionality should be enabled\n     */\n    enableSlideshow: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Declare the slide interval\n     */\n    slideshowDelay: {\n      type: Number,\n      default: 5e3\n    },\n    /**\n     * Allow to pause an ongoing slideshow\n     */\n    slideshowPaused: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Enable swipe between slides\n     */\n    enableSwipe: {\n      type: Boolean,\n      default: !0\n    },\n    spreadNavigation: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Defines the modal size.\n     * Default is 'normal'.\n     * Available are 'small', 'normal', 'large' and 'full'.\n     * All sizes except 'small' change automatically to full-screen on mobile.\n     */\n    size: {\n      type: String,\n      default: \"normal\",\n      validator: (s) => [\"small\", \"normal\", \"large\", \"full\"].includes(s)\n    },\n    /**\n     * Declare if the modal can be closed\n     */\n    canClose: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Close the modal if the user clicked outside of the modal\n     * Only relevant if `canClose` is set to true.\n     */\n    closeOnClickOutside: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Makes the modal backdrop black if true\n     * Will be overwritten if some buttons are shown outside\n     */\n    dark: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Selector for the modal container, pass `null` to prevent automatic container mounting\n     */\n    container: {\n      type: [String, null],\n      default: \"body\"\n    },\n    /**\n     * Pass in false if you want the modal 'close' button to be displayed\n     * outside the modal boundaries, in the top right corner of the window\n     */\n    closeButtonContained: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * Additional elements to add to the focus trap\n     */\n    additionalTrapElements: {\n      type: Array,\n      default: () => []\n    },\n    /**\n     * Display x items inline\n     *\n     * @see Actions component usage\n     */\n    inlineActions: {\n      type: Number,\n      default: 0\n    },\n    show: {\n      type: Boolean,\n      default: void 0\n    },\n    /**\n     * Set element to return focus to after focus trap deactivation\n     *\n     * @type {import('focus-trap').FocusTargetValueOrFalse}\n     */\n    setReturnFocus: {\n      default: void 0,\n      type: [HTMLElement, SVGElement, String, Boolean]\n    }\n  },\n  emits: [\n    \"previous\",\n    \"next\",\n    \"close\",\n    \"update:show\"\n  ],\n  data() {\n    return {\n      mc: null,\n      playing: !1,\n      slideshowTimeout: null,\n      iconSize: 24,\n      focusTrap: null,\n      randId: h(),\n      internalShow: !0\n    };\n  },\n  computed: {\n    showModal() {\n      return this.show === void 0 ? this.internalShow : this.show;\n    },\n    modalTransitionName() {\n      return `modal-${this.outTransition ? \"out\" : \"in\"}`;\n    },\n    playPauseName() {\n      return this.playing ? i(\"Pause slideshow\") : i(\"Start slideshow\");\n    },\n    cssVariables() {\n      return {\n        \"--slideshow-duration\": this.slideshowDelay + \"ms\",\n        \"--icon-size\": this.iconSize + \"px\"\n      };\n    },\n    closeButtonAriaLabel() {\n      return i(\"Close\");\n    },\n    prevButtonAriaLabel() {\n      return i(\"Previous\");\n    },\n    nextButtonAriaLabel() {\n      return i(\"Next\");\n    }\n  },\n  watch: {\n    /**\n     * Handle play/pause of an ongoing slideshow\n     *\n     * @param {boolean} paused is the player paused\n     */\n    slideshowPaused(s) {\n      this.slideshowTimeout && (s ? this.slideshowTimeout.pause() : this.slideshowTimeout.start());\n    },\n    additionalTrapElements(s) {\n      if (this.focusTrap) {\n        const e = this.$refs.mask;\n        this.focusTrap.updateContainerElements([e, ...s]);\n      }\n    }\n  },\n  beforeMount() {\n    window.addEventListener(\"keydown\", this.handleKeydown);\n  },\n  beforeDestroy() {\n    window.removeEventListener(\"keydown\", this.handleKeydown), this.mc.stop();\n  },\n  mounted() {\n    this.useFocusTrap(), this.mc = v(this.$refs.mask, {\n      onSwipeEnd: this.handleSwipe\n    }), this.container && (this.container === \"body\" ? document.body.insertBefore(this.$el, document.body.lastChild) : document.querySelector(this.container).appendChild(this.$el));\n  },\n  destroyed() {\n    this.clearFocusTrap(), this.$el.remove();\n  },\n  methods: {\n    t: i,\n    // Events emitters\n    previous(s) {\n      this.hasPrevious && (s && this.resetSlideshow(), this.$emit(\"previous\", s));\n    },\n    next(s) {\n      this.hasNext && (s && this.resetSlideshow(), this.$emit(\"next\", s));\n    },\n    close(s) {\n      this.canClose && (this.internalShow = !1, this.$emit(\"update:show\", !1), setTimeout(() => {\n        this.$emit(\"close\", s);\n      }, 300));\n    },\n    /**\n     * Handle click on modal wrapper\n     * If `closeOnClickOutside` is set the modal will be closed\n     *\n     * @param {MouseEvent} event The click event\n     */\n    handleClickModalWrapper(s) {\n      this.closeOnClickOutside && this.close(s);\n    },\n    /**\n     * @param {KeyboardEvent} event - keyboard event\n     */\n    handleKeydown(s) {\n      if (s.key === \"Escape\") {\n        const t = r();\n        return t.length > 0 && t[t.length - 1] !== this.focusTrap ? void 0 : this.close(s);\n      }\n      const e = {\n        ArrowLeft: this.previous,\n        ArrowRight: this.next\n      };\n      if (e[s.key])\n        return document.activeElement && !this.$el.contains(document.activeElement) ? void 0 : e[s.key](s);\n    },\n    /**\n     * handle the swipe event\n     *\n     * @param {TouchEvent} e The touch event\n     * @param {import('@vueuse/core').SwipeDirection} direction Swipe direction\n     */\n    handleSwipe(s, e) {\n      this.enableSwipe && (e === \"left\" ? this.next(s) : e === \"right\" && this.previous(s));\n    },\n    /**\n     * Toggle the slideshow state\n     */\n    togglePlayPause() {\n      this.playing = !this.playing, this.playing ? this.handleSlideshow() : this.clearSlideshowTimeout();\n    },\n    /**\n     * Reset the slideshow timer and keep going if it was on\n     */\n    resetSlideshow() {\n      this.playing = !this.playing, this.clearSlideshowTimeout(), this.$nextTick(function() {\n        this.togglePlayPause();\n      });\n    },\n    /**\n     * Handle the slideshow timer and next event\n     */\n    handleSlideshow() {\n      this.playing = !0, this.hasNext ? this.slideshowTimeout = new C(() => {\n        this.next(), this.handleSlideshow();\n      }, this.slideshowDelay) : (this.playing = !1, this.clearSlideshowTimeout());\n    },\n    /**\n     * Clear slideshowTimeout if ongoing\n     */\n    clearSlideshowTimeout() {\n      this.slideshowTimeout && this.slideshowTimeout.clear();\n    },\n    /**\n     * Add focus trap for accessibility.\n     */\n    async useFocusTrap() {\n      if (!this.showModal || this.focusTrap)\n        return;\n      const s = this.$refs.mask;\n      await this.$nextTick();\n      const e = {\n        allowOutsideClick: !0,\n        fallbackFocus: s,\n        trapStack: r(),\n        // Esc can be used without stop in content or additionalTrapElements where it should not deacxtivate modal's focus trap.\n        // Focus trap is deactivated on modal close anyway.\n        escapeDeactivates: !1,\n        setReturnFocus: this.setReturnFocus\n      };\n      this.focusTrap = w([s, ...this.additionalTrapElements], e), this.focusTrap.activate();\n    },\n    clearFocusTrap() {\n      this.focusTrap && (this.focusTrap?.deactivate(), this.focusTrap = null);\n    }\n  }\n};\nvar I = function() {\n  var e = this, t = e._self._c;\n  return t(\"transition\", { attrs: { name: \"fade\", appear: \"\" }, on: { \"after-enter\": e.useFocusTrap, \"before-leave\": e.clearFocusTrap } }, [t(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.showModal, expression: \"showModal\" }], ref: \"mask\", staticClass: \"modal-mask\", class: { \"modal-mask--dark\": e.dark || !e.closeButtonContained || e.hasPrevious || e.hasNext }, style: e.cssVariables, attrs: { role: \"dialog\", \"aria-modal\": \"true\", \"aria-labelledby\": \"modal-name-\" + e.randId, \"aria-describedby\": \"modal-description-\" + e.randId, tabindex: \"-1\" } }, [t(\"transition\", { attrs: { name: \"fade-visibility\", appear: \"\" } }, [t(\"div\", { staticClass: \"modal-header\" }, [e.name.trim() !== \"\" ? t(\"h2\", { staticClass: \"modal-name\", attrs: { id: \"modal-name-\" + e.randId } }, [e._v(\" \" + e._s(e.name) + \" \")]) : e._e(), t(\"div\", { staticClass: \"icons-menu\" }, [e.hasNext && e.enableSlideshow ? t(\"button\", { directives: [{ name: \"tooltip\", rawName: \"v-tooltip.auto\", value: e.playPauseName, expression: \"playPauseName\", modifiers: { auto: !0 } }], staticClass: \"play-pause-icons\", class: { \"play-pause-icons--paused\": e.slideshowPaused }, attrs: { type: \"button\" }, on: { click: e.togglePlayPause } }, [e.playing ? t(\"Pause\", { staticClass: \"play-pause-icons__pause\", attrs: { size: e.iconSize } }) : t(\"Play\", { staticClass: \"play-pause-icons__play\", attrs: { size: e.iconSize } }), t(\"span\", { staticClass: \"hidden-visually\" }, [e._v(\" \" + e._s(e.playPauseName) + \" \")]), e.playing ? t(\"svg\", { staticClass: \"progress-ring\", attrs: { height: \"50\", width: \"50\" } }, [t(\"circle\", { staticClass: \"progress-ring__circle\", attrs: { stroke: \"white\", \"stroke-width\": \"2\", fill: \"transparent\", r: \"15\", cx: \"25\", cy: \"25\" } })]) : e._e()], 1) : e._e(), t(\"NcActions\", { staticClass: \"header-actions\", attrs: { inline: e.inlineActions } }, [e._t(\"actions\")], 2), e.canClose && !e.closeButtonContained ? t(\"NcButton\", { staticClass: \"header-close\", attrs: { \"aria-label\": e.closeButtonAriaLabel, type: \"tertiary\" }, on: { click: e.close }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [t(\"Close\", { attrs: { size: e.iconSize } })];\n  }, proxy: !0 }], null, !1, 1841713362) }) : e._e()], 1)])]), t(\"transition\", { attrs: { name: e.modalTransitionName, appear: \"\" } }, [t(\"div\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.showModal, expression: \"showModal\" }], staticClass: \"modal-wrapper\", class: [\n    `modal-wrapper--${e.size}`,\n    { \"modal-wrapper--spread-navigation\": e.spreadNavigation }\n  ], on: { mousedown: function(a) {\n    return a.target !== a.currentTarget ? null : e.handleClickModalWrapper.apply(null, arguments);\n  } } }, [t(\"transition\", { attrs: { name: \"fade-visibility\", appear: \"\" } }, [t(\"NcButton\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.hasPrevious, expression: \"hasPrevious\" }], staticClass: \"prev\", attrs: { type: \"tertiary-no-background\", \"aria-label\": e.prevButtonAriaLabel }, on: { click: e.previous }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [t(\"ChevronLeft\", { attrs: { size: 40 } })];\n  }, proxy: !0 }]) })], 1), t(\"div\", { staticClass: \"modal-container\", attrs: { id: \"modal-description-\" + e.randId } }, [e.canClose && e.closeButtonContained ? t(\"NcButton\", { staticClass: \"modal-container__close\", attrs: { type: \"tertiary\", \"aria-label\": e.closeButtonAriaLabel }, on: { click: e.close }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [t(\"Close\", { attrs: { size: 20 } })];\n  }, proxy: !0 }], null, !1, 2121748766) }) : e._e(), t(\"div\", { staticClass: \"modal-container__content\" }, [e._t(\"default\")], 2)], 1), t(\"transition\", { attrs: { name: \"fade-visibility\", appear: \"\" } }, [t(\"NcButton\", { directives: [{ name: \"show\", rawName: \"v-show\", value: e.hasNext, expression: \"hasNext\" }], staticClass: \"next\", attrs: { type: \"tertiary-no-background\", \"aria-label\": e.nextButtonAriaLabel }, on: { click: e.next }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [t(\"ChevronRight\", { attrs: { size: 40 } })];\n  }, proxy: !0 }]) })], 1)], 1)])], 1)]);\n}, V = [], D = /* @__PURE__ */ l(\n  R,\n  I,\n  V,\n  !1,\n  null,\n  \"1ea9d450\",\n  null,\n  null\n);\nconst H = D.exports;\n/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\nc(H);\nexport {\n  H as default\n};\n","import '../assets/referencePickerModal-A0PlFUEI.css';\nimport { isWidgetRegistered as bt, destroyWidget as Rt, renderWidget as Pt, isCustomPickerElementRegistered as z, destroyCustomPickerElement as Ct, renderCustomPickerElement as Et, getCustomPickerElementSize as St } from \"../Functions/registerReference.mjs\";\nimport { n as N } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport { r as W, O as kt, a as S, P as xt, Q as Ge, R as $t, u as Nt, S as Lt, G as Ot, T as Tt } from \"./_l10n-9dioj9MT.mjs\";\nimport me from \"@nextcloud/axios\";\nimport { loadState as Qe } from \"@nextcloud/initial-state\";\nimport { imagePath as At, generateOcsUrl as Z } from \"@nextcloud/router\";\nimport ye from \"../Components/NcEmptyContent.mjs\";\nimport { N as Ke } from \"./index-2phCrsSH.mjs\";\nimport { N as Je } from \"./NcSelect-Hw3T6JKO.mjs\";\nimport { g as It } from \"./autolink-oKM43mOC.mjs\";\nimport { useResizeObserver as Vt } from \"@vueuse/core\";\nimport jt from \"../Components/NcLoadingIcon.mjs\";\nimport { N as Bt } from \"./NcTextField-u76gJqK3.mjs\";\nimport { D as qt } from \"./DotsHorizontal-IbmXTXRA.mjs\";\nimport Mt from \"../Components/NcButton.mjs\";\nimport Ut from \"../Components/NcModal.mjs\";\nimport { emit as Dt } from \"@nextcloud/event-bus\";\nimport { A as zt } from \"./ArrowLeft-uW5eNVkY.mjs\";\nimport { C as Wt } from \"./Close-QtH6_3PP.mjs\";\nimport Ft from \"vue\";\n/*!\n  * vue-router v3.6.5\n  * (c) 2022 Evan You\n  * @license MIT\n  */\nfunction I(t, e) {\n  if (!t)\n    throw new Error(\"[vue-router] \" + e);\n}\nfunction P(t, e) {\n  t || typeof console < \"u\" && console.warn(\"[vue-router] \" + e);\n}\nfunction k(t, e) {\n  for (var r in e)\n    t[r] = e[r];\n  return t;\n}\nvar Ht = /[!'()*]/g, Gt = function(t) {\n  return \"%\" + t.charCodeAt(0).toString(16);\n}, Qt = /%2C/g, j = function(t) {\n  return encodeURIComponent(t).replace(Ht, Gt).replace(Qt, \",\");\n};\nfunction fe(t) {\n  try {\n    return decodeURIComponent(t);\n  } catch {\n    process.env.NODE_ENV !== \"production\" && P(!1, 'Error decoding \"' + t + '\". Leaving it intact.');\n  }\n  return t;\n}\nfunction Kt(t, e, r) {\n  e === void 0 && (e = {});\n  var n = r || Jt, i;\n  try {\n    i = n(t || \"\");\n  } catch (a) {\n    process.env.NODE_ENV !== \"production\" && P(!1, a.message), i = {};\n  }\n  for (var s in e) {\n    var o = e[s];\n    i[s] = Array.isArray(o) ? o.map(ke) : ke(o);\n  }\n  return i;\n}\nvar ke = function(t) {\n  return t == null || typeof t == \"object\" ? t : String(t);\n};\nfunction Jt(t) {\n  var e = {};\n  return t = t.trim().replace(/^(\\?|#|&)/, \"\"), t && t.split(\"&\").forEach(function(r) {\n    var n = r.replace(/\\+/g, \" \").split(\"=\"), i = fe(n.shift()), s = n.length > 0 ? fe(n.join(\"=\")) : null;\n    e[i] === void 0 ? e[i] = s : Array.isArray(e[i]) ? e[i].push(s) : e[i] = [e[i], s];\n  }), e;\n}\nfunction Xt(t) {\n  var e = t ? Object.keys(t).map(function(r) {\n    var n = t[r];\n    if (n === void 0)\n      return \"\";\n    if (n === null)\n      return j(r);\n    if (Array.isArray(n)) {\n      var i = [];\n      return n.forEach(function(s) {\n        s !== void 0 && (s === null ? i.push(j(r)) : i.push(j(r) + \"=\" + j(s)));\n      }), i.join(\"&\");\n    }\n    return j(r) + \"=\" + j(n);\n  }).filter(function(r) {\n    return r.length > 0;\n  }).join(\"&\") : null;\n  return e ? \"?\" + e : \"\";\n}\nvar ee = /\\/?$/;\nfunction te(t, e, r, n) {\n  var i = n && n.options.stringifyQuery, s = e.query || {};\n  try {\n    s = he(s);\n  } catch {\n  }\n  var o = {\n    name: e.name || t && t.name,\n    meta: t && t.meta || {},\n    path: e.path || \"/\",\n    hash: e.hash || \"\",\n    query: s,\n    params: e.params || {},\n    fullPath: xe(e, i),\n    matched: t ? Yt(t) : []\n  };\n  return r && (o.redirectedFrom = xe(r, i)), Object.freeze(o);\n}\nfunction he(t) {\n  if (Array.isArray(t))\n    return t.map(he);\n  if (t && typeof t == \"object\") {\n    var e = {};\n    for (var r in t)\n      e[r] = he(t[r]);\n    return e;\n  } else\n    return t;\n}\nvar A = te(null, {\n  path: \"/\"\n});\nfunction Yt(t) {\n  for (var e = []; t; )\n    e.unshift(t), t = t.parent;\n  return e;\n}\nfunction xe(t, e) {\n  var r = t.path, n = t.query;\n  n === void 0 && (n = {});\n  var i = t.hash;\n  i === void 0 && (i = \"\");\n  var s = e || Xt;\n  return (r || \"/\") + s(n) + i;\n}\nfunction Xe(t, e, r) {\n  return e === A ? t === e : e ? t.path && e.path ? t.path.replace(ee, \"\") === e.path.replace(ee, \"\") && (r || t.hash === e.hash && Q(t.query, e.query)) : t.name && e.name ? t.name === e.name && (r || t.hash === e.hash && Q(t.query, e.query) && Q(t.params, e.params)) : !1 : !1;\n}\nfunction Q(t, e) {\n  if (t === void 0 && (t = {}), e === void 0 && (e = {}), !t || !e)\n    return t === e;\n  var r = Object.keys(t).sort(), n = Object.keys(e).sort();\n  return r.length !== n.length ? !1 : r.every(function(i, s) {\n    var o = t[i], a = n[s];\n    if (a !== i)\n      return !1;\n    var c = e[i];\n    return o == null || c == null ? o === c : typeof o == \"object\" && typeof c == \"object\" ? Q(o, c) : String(o) === String(c);\n  });\n}\nfunction Zt(t, e) {\n  return t.path.replace(ee, \"/\").indexOf(\n    e.path.replace(ee, \"/\")\n  ) === 0 && (!e.hash || t.hash === e.hash) && er(t.query, e.query);\n}\nfunction er(t, e) {\n  for (var r in e)\n    if (!(r in t))\n      return !1;\n  return !0;\n}\nfunction Ye(t) {\n  for (var e = 0; e < t.matched.length; e++) {\n    var r = t.matched[e];\n    for (var n in r.instances) {\n      var i = r.instances[n], s = r.enteredCbs[n];\n      if (!(!i || !s)) {\n        delete r.enteredCbs[n];\n        for (var o = 0; o < s.length; o++)\n          i._isBeingDestroyed || s[o](i);\n      }\n    }\n  }\n}\nvar tr = {\n  name: \"RouterView\",\n  functional: !0,\n  props: {\n    name: {\n      type: String,\n      default: \"default\"\n    }\n  },\n  render: function(e, r) {\n    var n = r.props, i = r.children, s = r.parent, o = r.data;\n    o.routerView = !0;\n    for (var a = s.$createElement, c = n.name, u = s.$route, d = s._routerViewCache || (s._routerViewCache = {}), m = 0, h = !1; s && s._routerRoot !== s; ) {\n      var v = s.$vnode ? s.$vnode.data : {};\n      v.routerView && m++, v.keepAlive && s._directInactive && s._inactive && (h = !0), s = s.$parent;\n    }\n    if (o.routerViewDepth = m, h) {\n      var p = d[c], l = p && p.component;\n      return l ? (p.configProps && $e(l, o, p.route, p.configProps), a(l, o, i)) : a();\n    }\n    var f = u.matched[m], y = f && f.components[c];\n    if (!f || !y)\n      return d[c] = null, a();\n    d[c] = { component: y }, o.registerRouteInstance = function(g, b) {\n      var R = f.instances[c];\n      (b && R !== g || !b && R === g) && (f.instances[c] = b);\n    }, (o.hook || (o.hook = {})).prepatch = function(g, b) {\n      f.instances[c] = b.componentInstance;\n    }, o.hook.init = function(g) {\n      g.data.keepAlive && g.componentInstance && g.componentInstance !== f.instances[c] && (f.instances[c] = g.componentInstance), Ye(u);\n    };\n    var _ = f.props && f.props[c];\n    return _ && (k(d[c], {\n      route: u,\n      configProps: _\n    }), $e(y, o, u, _)), a(y, o, i);\n  }\n};\nfunction $e(t, e, r, n) {\n  var i = e.props = rr(r, n);\n  if (i) {\n    i = e.props = k({}, i);\n    var s = e.attrs = e.attrs || {};\n    for (var o in i)\n      (!t.props || !(o in t.props)) && (s[o] = i[o], delete i[o]);\n  }\n}\nfunction rr(t, e) {\n  switch (typeof e) {\n    case \"undefined\":\n      return;\n    case \"object\":\n      return e;\n    case \"function\":\n      return e(t);\n    case \"boolean\":\n      return e ? t.params : void 0;\n    default:\n      process.env.NODE_ENV !== \"production\" && P(\n        !1,\n        'props in \"' + t.path + '\" is a ' + typeof e + \", expecting an object, function or boolean.\"\n      );\n  }\n}\nfunction Ze(t, e, r) {\n  var n = t.charAt(0);\n  if (n === \"/\")\n    return t;\n  if (n === \"?\" || n === \"#\")\n    return e + t;\n  var i = e.split(\"/\");\n  (!r || !i[i.length - 1]) && i.pop();\n  for (var s = t.replace(/^\\//, \"\").split(\"/\"), o = 0; o < s.length; o++) {\n    var a = s[o];\n    a === \"..\" ? i.pop() : a !== \".\" && i.push(a);\n  }\n  return i[0] !== \"\" && i.unshift(\"\"), i.join(\"/\");\n}\nfunction nr(t) {\n  var e = \"\", r = \"\", n = t.indexOf(\"#\");\n  n >= 0 && (e = t.slice(n), t = t.slice(0, n));\n  var i = t.indexOf(\"?\");\n  return i >= 0 && (r = t.slice(i + 1), t = t.slice(0, i)), {\n    path: t,\n    query: r,\n    hash: e\n  };\n}\nfunction L(t) {\n  return t.replace(/\\/(?:\\s*\\/)+/g, \"/\");\n}\nvar re = Array.isArray || function(t) {\n  return Object.prototype.toString.call(t) == \"[object Array]\";\n}, q = rt, ir = ge, sr = ur, or = et, ar = tt, cr = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  \"(\\\\\\\\.)\",\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  \"([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))\"\n].join(\"|\"), \"g\");\nfunction ge(t, e) {\n  for (var r = [], n = 0, i = 0, s = \"\", o = e && e.delimiter || \"/\", a; (a = cr.exec(t)) != null; ) {\n    var c = a[0], u = a[1], d = a.index;\n    if (s += t.slice(i, d), i = d + c.length, u) {\n      s += u[1];\n      continue;\n    }\n    var m = t[i], h = a[2], v = a[3], p = a[4], l = a[5], f = a[6], y = a[7];\n    s && (r.push(s), s = \"\");\n    var _ = h != null && m != null && m !== h, g = f === \"+\" || f === \"*\", b = f === \"?\" || f === \"*\", R = a[2] || o, C = p || l;\n    r.push({\n      name: v || n++,\n      prefix: h || \"\",\n      delimiter: R,\n      optional: b,\n      repeat: g,\n      partial: _,\n      asterisk: !!y,\n      pattern: C ? hr(C) : y ? \".*\" : \"[^\" + K(R) + \"]+?\"\n    });\n  }\n  return i < t.length && (s += t.substr(i)), s && r.push(s), r;\n}\nfunction ur(t, e) {\n  return et(ge(t, e), e);\n}\nfunction lr(t) {\n  return encodeURI(t).replace(/[\\/?#]/g, function(e) {\n    return \"%\" + e.charCodeAt(0).toString(16).toUpperCase();\n  });\n}\nfunction fr(t) {\n  return encodeURI(t).replace(/[?#]/g, function(e) {\n    return \"%\" + e.charCodeAt(0).toString(16).toUpperCase();\n  });\n}\nfunction et(t, e) {\n  for (var r = new Array(t.length), n = 0; n < t.length; n++)\n    typeof t[n] == \"object\" && (r[n] = new RegExp(\"^(?:\" + t[n].pattern + \")$\", we(e)));\n  return function(i, s) {\n    for (var o = \"\", a = i || {}, c = s || {}, u = c.pretty ? lr : encodeURIComponent, d = 0; d < t.length; d++) {\n      var m = t[d];\n      if (typeof m == \"string\") {\n        o += m;\n        continue;\n      }\n      var h = a[m.name], v;\n      if (h == null)\n        if (m.optional) {\n          m.partial && (o += m.prefix);\n          continue;\n        } else\n          throw new TypeError('Expected \"' + m.name + '\" to be defined');\n      if (re(h)) {\n        if (!m.repeat)\n          throw new TypeError('Expected \"' + m.name + '\" to not repeat, but received `' + JSON.stringify(h) + \"`\");\n        if (h.length === 0) {\n          if (m.optional)\n            continue;\n          throw new TypeError('Expected \"' + m.name + '\" to not be empty');\n        }\n        for (var p = 0; p < h.length; p++) {\n          if (v = u(h[p]), !r[d].test(v))\n            throw new TypeError('Expected all \"' + m.name + '\" to match \"' + m.pattern + '\", but received `' + JSON.stringify(v) + \"`\");\n          o += (p === 0 ? m.prefix : m.delimiter) + v;\n        }\n        continue;\n      }\n      if (v = m.asterisk ? fr(h) : u(h), !r[d].test(v))\n        throw new TypeError('Expected \"' + m.name + '\" to match \"' + m.pattern + '\", but received \"' + v + '\"');\n      o += m.prefix + v;\n    }\n    return o;\n  };\n}\nfunction K(t) {\n  return t.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, \"\\\\$1\");\n}\nfunction hr(t) {\n  return t.replace(/([=!:$\\/()])/g, \"\\\\$1\");\n}\nfunction _e(t, e) {\n  return t.keys = e, t;\n}\nfunction we(t) {\n  return t && t.sensitive ? \"\" : \"i\";\n}\nfunction pr(t, e) {\n  var r = t.source.match(/\\((?!\\?)/g);\n  if (r)\n    for (var n = 0; n < r.length; n++)\n      e.push({\n        name: n,\n        prefix: null,\n        delimiter: null,\n        optional: !1,\n        repeat: !1,\n        partial: !1,\n        asterisk: !1,\n        pattern: null\n      });\n  return _e(t, e);\n}\nfunction dr(t, e, r) {\n  for (var n = [], i = 0; i < t.length; i++)\n    n.push(rt(t[i], e, r).source);\n  var s = new RegExp(\"(?:\" + n.join(\"|\") + \")\", we(r));\n  return _e(s, e);\n}\nfunction vr(t, e, r) {\n  return tt(ge(t, r), e, r);\n}\nfunction tt(t, e, r) {\n  re(e) || (r = /** @type {!Object} */\n  e || r, e = []), r = r || {};\n  for (var n = r.strict, i = r.end !== !1, s = \"\", o = 0; o < t.length; o++) {\n    var a = t[o];\n    if (typeof a == \"string\")\n      s += K(a);\n    else {\n      var c = K(a.prefix), u = \"(?:\" + a.pattern + \")\";\n      e.push(a), a.repeat && (u += \"(?:\" + c + u + \")*\"), a.optional ? a.partial ? u = c + \"(\" + u + \")?\" : u = \"(?:\" + c + \"(\" + u + \"))?\" : u = c + \"(\" + u + \")\", s += u;\n    }\n  }\n  var d = K(r.delimiter || \"/\"), m = s.slice(-d.length) === d;\n  return n || (s = (m ? s.slice(0, -d.length) : s) + \"(?:\" + d + \"(?=$))?\"), i ? s += \"$\" : s += n && m ? \"\" : \"(?=\" + d + \"|$)\", _e(new RegExp(\"^\" + s, we(r)), e);\n}\nfunction rt(t, e, r) {\n  return re(e) || (r = /** @type {!Object} */\n  e || r, e = []), r = r || {}, t instanceof RegExp ? pr(\n    t,\n    /** @type {!Array} */\n    e\n  ) : re(t) ? dr(\n    /** @type {!Array} */\n    t,\n    /** @type {!Array} */\n    e,\n    r\n  ) : vr(\n    /** @type {string} */\n    t,\n    /** @type {!Array} */\n    e,\n    r\n  );\n}\nq.parse = ir;\nq.compile = sr;\nq.tokensToFunction = or;\nq.tokensToRegExp = ar;\nvar Ne = /* @__PURE__ */ Object.create(null);\nfunction J(t, e, r) {\n  e = e || {};\n  try {\n    var n = Ne[t] || (Ne[t] = q.compile(t));\n    return typeof e.pathMatch == \"string\" && (e[0] = e.pathMatch), n(e, { pretty: !0 });\n  } catch (i) {\n    return process.env.NODE_ENV !== \"production\" && P(typeof e.pathMatch == \"string\", \"missing param for \" + r + \": \" + i.message), \"\";\n  } finally {\n    delete e[0];\n  }\n}\nfunction be(t, e, r, n) {\n  var i = typeof t == \"string\" ? { path: t } : t;\n  if (i._normalized)\n    return i;\n  if (i.name) {\n    i = k({}, t);\n    var s = i.params;\n    return s && typeof s == \"object\" && (i.params = k({}, s)), i;\n  }\n  if (!i.path && i.params && e) {\n    i = k({}, i), i._normalized = !0;\n    var o = k(k({}, e.params), i.params);\n    if (e.name)\n      i.name = e.name, i.params = o;\n    else if (e.matched.length) {\n      var a = e.matched[e.matched.length - 1].path;\n      i.path = J(a, o, \"path \" + e.path);\n    } else\n      process.env.NODE_ENV !== \"production\" && P(!1, \"relative params navigation requires a current route.\");\n    return i;\n  }\n  var c = nr(i.path || \"\"), u = e && e.path || \"/\", d = c.path ? Ze(c.path, u, r || i.append) : u, m = Kt(\n    c.query,\n    i.query,\n    n && n.options.parseQuery\n  ), h = i.hash || c.hash;\n  return h && h.charAt(0) !== \"#\" && (h = \"#\" + h), {\n    _normalized: !0,\n    path: d,\n    query: m,\n    hash: h\n  };\n}\nvar mr = [String, Object], yr = [String, Array], Le = function() {\n}, Oe, Te, Ae, nt = {\n  name: \"RouterLink\",\n  props: {\n    to: {\n      type: mr,\n      required: !0\n    },\n    tag: {\n      type: String,\n      default: \"a\"\n    },\n    custom: Boolean,\n    exact: Boolean,\n    exactPath: Boolean,\n    append: Boolean,\n    replace: Boolean,\n    activeClass: String,\n    exactActiveClass: String,\n    ariaCurrentValue: {\n      type: String,\n      default: \"page\"\n    },\n    event: {\n      type: yr,\n      default: \"click\"\n    }\n  },\n  render: function(e) {\n    var r = this, n = this.$router, i = this.$route, s = n.resolve(\n      this.to,\n      i,\n      this.append\n    ), o = s.location, a = s.route, c = s.href, u = {}, d = n.options.linkActiveClass, m = n.options.linkExactActiveClass, h = d ?? \"router-link-active\", v = m ?? \"router-link-exact-active\", p = this.activeClass == null ? h : this.activeClass, l = this.exactActiveClass == null ? v : this.exactActiveClass, f = a.redirectedFrom ? te(null, be(a.redirectedFrom), null, n) : a;\n    u[l] = Xe(i, f, this.exactPath), u[p] = this.exact || this.exactPath ? u[l] : Zt(i, f);\n    var y = u[l] ? this.ariaCurrentValue : null, _ = function(le) {\n      Ie(le) && (r.replace ? n.replace(o, Le) : n.push(o, Le));\n    }, g = { click: Ie };\n    Array.isArray(this.event) ? this.event.forEach(function(le) {\n      g[le] = _;\n    }) : g[this.event] = _;\n    var b = { class: u }, R = !this.$scopedSlots.$hasNormal && this.$scopedSlots.default && this.$scopedSlots.default({\n      href: c,\n      route: a,\n      navigate: _,\n      isActive: u[p],\n      isExactActive: u[l]\n    });\n    if (R) {\n      if (process.env.NODE_ENV !== \"production\" && !this.custom && (!Oe && P(!1, `In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot=\"{ navigate, href }\" custom></router-link>\n`), Oe = !0), R.length === 1)\n        return R[0];\n      if (R.length > 1 || !R.length)\n        return process.env.NODE_ENV !== \"production\" && P(\n          !1,\n          '<router-link> with to=\"' + this.to + `\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.`\n        ), R.length === 0 ? e() : e(\"span\", {}, R);\n    }\n    if (process.env.NODE_ENV !== \"production\" && (\"tag\" in this.$options.propsData && !Te && (P(\n      !1,\n      \"<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n    ), Te = !0), \"event\" in this.$options.propsData && !Ae && (P(\n      !1,\n      \"<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link.\"\n    ), Ae = !0)), this.tag === \"a\")\n      b.on = g, b.attrs = { href: c, \"aria-current\": y };\n    else {\n      var C = it(this.$slots.default);\n      if (C) {\n        C.isStatic = !1;\n        var E = C.data = k({}, C.data);\n        E.on = E.on || {};\n        for (var $ in E.on) {\n          var M = E.on[$];\n          $ in g && (E.on[$] = Array.isArray(M) ? M : [M]);\n        }\n        for (var H in g)\n          H in E.on ? E.on[H].push(g[H]) : E.on[H] = _;\n        var Se = C.data.attrs = k({}, C.data.attrs);\n        Se.href = c, Se[\"aria-current\"] = y;\n      } else\n        b.on = g;\n    }\n    return e(this.tag, b, this.$slots.default);\n  }\n};\nfunction Ie(t) {\n  if (!(t.metaKey || t.altKey || t.ctrlKey || t.shiftKey) && !t.defaultPrevented && !(t.button !== void 0 && t.button !== 0)) {\n    if (t.currentTarget && t.currentTarget.getAttribute) {\n      var e = t.currentTarget.getAttribute(\"target\");\n      if (/\\b_blank\\b/i.test(e))\n        return;\n    }\n    return t.preventDefault && t.preventDefault(), !0;\n  }\n}\nfunction it(t) {\n  if (t) {\n    for (var e, r = 0; r < t.length; r++)\n      if (e = t[r], e.tag === \"a\" || e.children && (e = it(e.children)))\n        return e;\n  }\n}\nvar ne;\nfunction ie(t) {\n  if (!(ie.installed && ne === t)) {\n    ie.installed = !0, ne = t;\n    var e = function(i) {\n      return i !== void 0;\n    }, r = function(i, s) {\n      var o = i.$options._parentVnode;\n      e(o) && e(o = o.data) && e(o = o.registerRouteInstance) && o(i, s);\n    };\n    t.mixin({\n      beforeCreate: function() {\n        e(this.$options.router) ? (this._routerRoot = this, this._router = this.$options.router, this._router.init(this), t.util.defineReactive(this, \"_route\", this._router.history.current)) : this._routerRoot = this.$parent && this.$parent._routerRoot || this, r(this, this);\n      },\n      destroyed: function() {\n        r(this);\n      }\n    }), Object.defineProperty(t.prototype, \"$router\", {\n      get: function() {\n        return this._routerRoot._router;\n      }\n    }), Object.defineProperty(t.prototype, \"$route\", {\n      get: function() {\n        return this._routerRoot._route;\n      }\n    }), t.component(\"RouterView\", tr), t.component(\"RouterLink\", nt);\n    var n = t.config.optionMergeStrategies;\n    n.beforeRouteEnter = n.beforeRouteLeave = n.beforeRouteUpdate = n.created;\n  }\n}\nvar F = typeof window < \"u\";\nfunction G(t, e, r, n, i) {\n  var s = e || [], o = r || /* @__PURE__ */ Object.create(null), a = n || /* @__PURE__ */ Object.create(null);\n  t.forEach(function(h) {\n    pe(s, o, a, h, i);\n  });\n  for (var c = 0, u = s.length; c < u; c++)\n    s[c] === \"*\" && (s.push(s.splice(c, 1)[0]), u--, c--);\n  if (process.env.NODE_ENV === \"development\") {\n    var d = s.filter(function(h) {\n      return h && h.charAt(0) !== \"*\" && h.charAt(0) !== \"/\";\n    });\n    if (d.length > 0) {\n      var m = d.map(function(h) {\n        return \"- \" + h;\n      }).join(`\n`);\n      P(!1, `Non-nested routes must include a leading slash character. Fix the following routes: \n` + m);\n    }\n  }\n  return {\n    pathList: s,\n    pathMap: o,\n    nameMap: a\n  };\n}\nfunction pe(t, e, r, n, i, s) {\n  var o = n.path, a = n.name;\n  process.env.NODE_ENV !== \"production\" && (I(o != null, '\"path\" is required in a route configuration.'), I(\n    typeof n.component != \"string\",\n    'route config \"component\" for path: ' + String(\n      o || a\n    ) + \" cannot be a string id. Use an actual component instead.\"\n  ), P(\n    // eslint-disable-next-line no-control-regex\n    !/[^\\u0000-\\u007F]+/.test(o),\n    'Route with path \"' + o + '\" contains unencoded characters, make sure your path is correctly encoded before passing it to the router. Use encodeURI to encode static segments of your path.'\n  ));\n  var c = n.pathToRegexpOptions || {}, u = _r(o, i, c.strict);\n  typeof n.caseSensitive == \"boolean\" && (c.sensitive = n.caseSensitive);\n  var d = {\n    path: u,\n    regex: gr(u, c),\n    components: n.components || { default: n.component },\n    alias: n.alias ? typeof n.alias == \"string\" ? [n.alias] : n.alias : [],\n    instances: {},\n    enteredCbs: {},\n    name: a,\n    parent: i,\n    matchAs: s,\n    redirect: n.redirect,\n    beforeEnter: n.beforeEnter,\n    meta: n.meta || {},\n    props: n.props == null ? {} : n.components ? n.props : { default: n.props }\n  };\n  if (n.children && (process.env.NODE_ENV !== \"production\" && n.name && !n.redirect && n.children.some(function(l) {\n    return /^\\/?$/.test(l.path);\n  }) && P(\n    !1,\n    \"Named Route '\" + n.name + `' has a default child route. When navigating to this named route (:to=\"{name: '` + n.name + `'}\"), the default child route will not be rendered. Remove the name from this route and use the name of the default child route for named links instead.`\n  ), n.children.forEach(function(l) {\n    var f = s ? L(s + \"/\" + l.path) : void 0;\n    pe(t, e, r, l, d, f);\n  })), e[d.path] || (t.push(d.path), e[d.path] = d), n.alias !== void 0)\n    for (var m = Array.isArray(n.alias) ? n.alias : [n.alias], h = 0; h < m.length; ++h) {\n      var v = m[h];\n      if (process.env.NODE_ENV !== \"production\" && v === o) {\n        P(\n          !1,\n          'Found an alias with the same value as the path: \"' + o + '\". You have to remove that alias. It will be ignored in development.'\n        );\n        continue;\n      }\n      var p = {\n        path: v,\n        children: n.children\n      };\n      pe(\n        t,\n        e,\n        r,\n        p,\n        i,\n        d.path || \"/\"\n        // matchAs\n      );\n    }\n  a && (r[a] ? process.env.NODE_ENV !== \"production\" && !s && P(\n    !1,\n    'Duplicate named routes definition: { name: \"' + a + '\", path: \"' + d.path + '\" }'\n  ) : r[a] = d);\n}\nfunction gr(t, e) {\n  var r = q(t, [], e);\n  if (process.env.NODE_ENV !== \"production\") {\n    var n = /* @__PURE__ */ Object.create(null);\n    r.keys.forEach(function(i) {\n      P(\n        !n[i.name],\n        'Duplicate param keys in route with path: \"' + t + '\"'\n      ), n[i.name] = !0;\n    });\n  }\n  return r;\n}\nfunction _r(t, e, r) {\n  return r || (t = t.replace(/\\/$/, \"\")), t[0] === \"/\" || e == null ? t : L(e.path + \"/\" + t);\n}\nfunction wr(t, e) {\n  var r = G(t), n = r.pathList, i = r.pathMap, s = r.nameMap;\n  function o(v) {\n    G(v, n, i, s);\n  }\n  function a(v, p) {\n    var l = typeof v != \"object\" ? s[v] : void 0;\n    G([p || v], n, i, s, l), l && l.alias.length && G(\n      // $flow-disable-line route is defined if parent is\n      l.alias.map(function(f) {\n        return { path: f, children: [p] };\n      }),\n      n,\n      i,\n      s,\n      l\n    );\n  }\n  function c() {\n    return n.map(function(v) {\n      return i[v];\n    });\n  }\n  function u(v, p, l) {\n    var f = be(v, p, !1, e), y = f.name;\n    if (y) {\n      var _ = s[y];\n      if (process.env.NODE_ENV !== \"production\" && P(_, \"Route with name '\" + y + \"' does not exist\"), !_)\n        return h(null, f);\n      var g = _.regex.keys.filter(function($) {\n        return !$.optional;\n      }).map(function($) {\n        return $.name;\n      });\n      if (typeof f.params != \"object\" && (f.params = {}), p && typeof p.params == \"object\")\n        for (var b in p.params)\n          !(b in f.params) && g.indexOf(b) > -1 && (f.params[b] = p.params[b]);\n      return f.path = J(_.path, f.params, 'named route \"' + y + '\"'), h(_, f, l);\n    } else if (f.path) {\n      f.params = {};\n      for (var R = 0; R < n.length; R++) {\n        var C = n[R], E = i[C];\n        if (br(E.regex, f.path, f.params))\n          return h(E, f, l);\n      }\n    }\n    return h(null, f);\n  }\n  function d(v, p) {\n    var l = v.redirect, f = typeof l == \"function\" ? l(te(v, p, null, e)) : l;\n    if (typeof f == \"string\" && (f = { path: f }), !f || typeof f != \"object\")\n      return process.env.NODE_ENV !== \"production\" && P(\n        !1,\n        \"invalid redirect option: \" + JSON.stringify(f)\n      ), h(null, p);\n    var y = f, _ = y.name, g = y.path, b = p.query, R = p.hash, C = p.params;\n    if (b = y.hasOwnProperty(\"query\") ? y.query : b, R = y.hasOwnProperty(\"hash\") ? y.hash : R, C = y.hasOwnProperty(\"params\") ? y.params : C, _) {\n      var E = s[_];\n      return process.env.NODE_ENV !== \"production\" && I(E, 'redirect failed: named route \"' + _ + '\" not found.'), u({\n        _normalized: !0,\n        name: _,\n        query: b,\n        hash: R,\n        params: C\n      }, void 0, p);\n    } else if (g) {\n      var $ = Rr(g, v), M = J($, C, 'redirect route with path \"' + $ + '\"');\n      return u({\n        _normalized: !0,\n        path: M,\n        query: b,\n        hash: R\n      }, void 0, p);\n    } else\n      return process.env.NODE_ENV !== \"production\" && P(!1, \"invalid redirect option: \" + JSON.stringify(f)), h(null, p);\n  }\n  function m(v, p, l) {\n    var f = J(l, p.params, 'aliased route with path \"' + l + '\"'), y = u({\n      _normalized: !0,\n      path: f\n    });\n    if (y) {\n      var _ = y.matched, g = _[_.length - 1];\n      return p.params = y.params, h(g, p);\n    }\n    return h(null, p);\n  }\n  function h(v, p, l) {\n    return v && v.redirect ? d(v, l || p) : v && v.matchAs ? m(v, p, v.matchAs) : te(v, p, l, e);\n  }\n  return {\n    match: u,\n    addRoute: a,\n    getRoutes: c,\n    addRoutes: o\n  };\n}\nfunction br(t, e, r) {\n  var n = e.match(t);\n  if (n) {\n    if (!r)\n      return !0;\n  } else\n    return !1;\n  for (var i = 1, s = n.length; i < s; ++i) {\n    var o = t.keys[i - 1];\n    o && (r[o.name || \"pathMatch\"] = typeof n[i] == \"string\" ? fe(n[i]) : n[i]);\n  }\n  return !0;\n}\nfunction Rr(t, e) {\n  return Ze(t, e.parent ? e.parent.path : \"/\", !0);\n}\nvar Pr = F && window.performance && window.performance.now ? window.performance : Date;\nfunction st() {\n  return Pr.now().toFixed(3);\n}\nvar ot = st();\nfunction ae() {\n  return ot;\n}\nfunction at(t) {\n  return ot = t;\n}\nvar ct = /* @__PURE__ */ Object.create(null);\nfunction ut() {\n  \"scrollRestoration\" in window.history && (window.history.scrollRestoration = \"manual\");\n  var t = window.location.protocol + \"//\" + window.location.host, e = window.location.href.replace(t, \"\"), r = k({}, window.history.state);\n  return r.key = ae(), window.history.replaceState(r, \"\", e), window.addEventListener(\"popstate\", Ve), function() {\n    window.removeEventListener(\"popstate\", Ve);\n  };\n}\nfunction O(t, e, r, n) {\n  if (t.app) {\n    var i = t.options.scrollBehavior;\n    i && (process.env.NODE_ENV !== \"production\" && I(typeof i == \"function\", \"scrollBehavior must be a function\"), t.app.$nextTick(function() {\n      var s = Cr(), o = i.call(\n        t,\n        e,\n        r,\n        n ? s : null\n      );\n      o && (typeof o.then == \"function\" ? o.then(function(a) {\n        qe(a, s);\n      }).catch(function(a) {\n        process.env.NODE_ENV !== \"production\" && I(!1, a.toString());\n      }) : qe(o, s));\n    }));\n  }\n}\nfunction lt() {\n  var t = ae();\n  t && (ct[t] = {\n    x: window.pageXOffset,\n    y: window.pageYOffset\n  });\n}\nfunction Ve(t) {\n  lt(), t.state && t.state.key && at(t.state.key);\n}\nfunction Cr() {\n  var t = ae();\n  if (t)\n    return ct[t];\n}\nfunction Er(t, e) {\n  var r = document.documentElement, n = r.getBoundingClientRect(), i = t.getBoundingClientRect();\n  return {\n    x: i.left - n.left - e.x,\n    y: i.top - n.top - e.y\n  };\n}\nfunction je(t) {\n  return B(t.x) || B(t.y);\n}\nfunction Be(t) {\n  return {\n    x: B(t.x) ? t.x : window.pageXOffset,\n    y: B(t.y) ? t.y : window.pageYOffset\n  };\n}\nfunction Sr(t) {\n  return {\n    x: B(t.x) ? t.x : 0,\n    y: B(t.y) ? t.y : 0\n  };\n}\nfunction B(t) {\n  return typeof t == \"number\";\n}\nvar kr = /^#\\d/;\nfunction qe(t, e) {\n  var r = typeof t == \"object\";\n  if (r && typeof t.selector == \"string\") {\n    var n = kr.test(t.selector) ? document.getElementById(t.selector.slice(1)) : document.querySelector(t.selector);\n    if (n) {\n      var i = t.offset && typeof t.offset == \"object\" ? t.offset : {};\n      i = Sr(i), e = Er(n, i);\n    } else\n      je(t) && (e = Be(t));\n  } else\n    r && je(t) && (e = Be(t));\n  e && (\"scrollBehavior\" in document.documentElement.style ? window.scrollTo({\n    left: e.x,\n    top: e.y,\n    // $flow-disable-line\n    behavior: t.behavior\n  }) : window.scrollTo(e.x, e.y));\n}\nvar T = F && function() {\n  var t = window.navigator.userAgent;\n  return (t.indexOf(\"Android 2.\") !== -1 || t.indexOf(\"Android 4.0\") !== -1) && t.indexOf(\"Mobile Safari\") !== -1 && t.indexOf(\"Chrome\") === -1 && t.indexOf(\"Windows Phone\") === -1 ? !1 : window.history && typeof window.history.pushState == \"function\";\n}();\nfunction se(t, e) {\n  lt();\n  var r = window.history;\n  try {\n    if (e) {\n      var n = k({}, r.state);\n      n.key = ae(), r.replaceState(n, \"\", t);\n    } else\n      r.pushState({ key: at(st()) }, \"\", t);\n  } catch {\n    window.location[e ? \"replace\" : \"assign\"](t);\n  }\n}\nfunction de(t) {\n  se(t, !0);\n}\nvar V = {\n  redirected: 2,\n  aborted: 4,\n  cancelled: 8,\n  duplicated: 16\n};\nfunction xr(t, e) {\n  return ce(\n    t,\n    e,\n    V.redirected,\n    'Redirected when going from \"' + t.fullPath + '\" to \"' + Or(\n      e\n    ) + '\" via a navigation guard.'\n  );\n}\nfunction $r(t, e) {\n  var r = ce(\n    t,\n    e,\n    V.duplicated,\n    'Avoided redundant navigation to current location: \"' + t.fullPath + '\".'\n  );\n  return r.name = \"NavigationDuplicated\", r;\n}\nfunction Me(t, e) {\n  return ce(\n    t,\n    e,\n    V.cancelled,\n    'Navigation cancelled from \"' + t.fullPath + '\" to \"' + e.fullPath + '\" with a new navigation.'\n  );\n}\nfunction Nr(t, e) {\n  return ce(\n    t,\n    e,\n    V.aborted,\n    'Navigation aborted from \"' + t.fullPath + '\" to \"' + e.fullPath + '\" via a navigation guard.'\n  );\n}\nfunction ce(t, e, r, n) {\n  var i = new Error(n);\n  return i._isRouter = !0, i.from = t, i.to = e, i.type = r, i;\n}\nvar Lr = [\"params\", \"query\", \"hash\"];\nfunction Or(t) {\n  if (typeof t == \"string\")\n    return t;\n  if (\"path\" in t)\n    return t.path;\n  var e = {};\n  return Lr.forEach(function(r) {\n    r in t && (e[r] = t[r]);\n  }), JSON.stringify(e, null, 2);\n}\nfunction oe(t) {\n  return Object.prototype.toString.call(t).indexOf(\"Error\") > -1;\n}\nfunction ue(t, e) {\n  return oe(t) && t._isRouter && (e == null || t.type === e);\n}\nfunction Ue(t, e, r) {\n  var n = function(i) {\n    i >= t.length ? r() : t[i] ? e(t[i], function() {\n      n(i + 1);\n    }) : n(i + 1);\n  };\n  n(0);\n}\nfunction Tr(t) {\n  return function(e, r, n) {\n    var i = !1, s = 0, o = null;\n    ft(t, function(a, c, u, d) {\n      if (typeof a == \"function\" && a.cid === void 0) {\n        i = !0, s++;\n        var m = De(function(l) {\n          Ir(l) && (l = l.default), a.resolved = typeof l == \"function\" ? l : ne.extend(l), u.components[d] = l, s--, s <= 0 && n();\n        }), h = De(function(l) {\n          var f = \"Failed to resolve async component \" + d + \": \" + l;\n          process.env.NODE_ENV !== \"production\" && P(!1, f), o || (o = oe(l) ? l : new Error(f), n(o));\n        }), v;\n        try {\n          v = a(m, h);\n        } catch (l) {\n          h(l);\n        }\n        if (v)\n          if (typeof v.then == \"function\")\n            v.then(m, h);\n          else {\n            var p = v.component;\n            p && typeof p.then == \"function\" && p.then(m, h);\n          }\n      }\n    }), i || n();\n  };\n}\nfunction ft(t, e) {\n  return ht(t.map(function(r) {\n    return Object.keys(r.components).map(function(n) {\n      return e(\n        r.components[n],\n        r.instances[n],\n        r,\n        n\n      );\n    });\n  }));\n}\nfunction ht(t) {\n  return Array.prototype.concat.apply([], t);\n}\nvar Ar = typeof Symbol == \"function\" && typeof Symbol.toStringTag == \"symbol\";\nfunction Ir(t) {\n  return t.__esModule || Ar && t[Symbol.toStringTag] === \"Module\";\n}\nfunction De(t) {\n  var e = !1;\n  return function() {\n    for (var r = [], n = arguments.length; n--; )\n      r[n] = arguments[n];\n    if (!e)\n      return e = !0, t.apply(this, r);\n  };\n}\nvar x = function(e, r) {\n  this.router = e, this.base = Vr(r), this.current = A, this.pending = null, this.ready = !1, this.readyCbs = [], this.readyErrorCbs = [], this.errorCbs = [], this.listeners = [];\n};\nx.prototype.listen = function(e) {\n  this.cb = e;\n};\nx.prototype.onReady = function(e, r) {\n  this.ready ? e() : (this.readyCbs.push(e), r && this.readyErrorCbs.push(r));\n};\nx.prototype.onError = function(e) {\n  this.errorCbs.push(e);\n};\nx.prototype.transitionTo = function(e, r, n) {\n  var i = this, s;\n  try {\n    s = this.router.match(e, this.current);\n  } catch (a) {\n    throw this.errorCbs.forEach(function(c) {\n      c(a);\n    }), a;\n  }\n  var o = this.current;\n  this.confirmTransition(\n    s,\n    function() {\n      i.updateRoute(s), r && r(s), i.ensureURL(), i.router.afterHooks.forEach(function(a) {\n        a && a(s, o);\n      }), i.ready || (i.ready = !0, i.readyCbs.forEach(function(a) {\n        a(s);\n      }));\n    },\n    function(a) {\n      n && n(a), a && !i.ready && (!ue(a, V.redirected) || o !== A) && (i.ready = !0, i.readyErrorCbs.forEach(function(c) {\n        c(a);\n      }));\n    }\n  );\n};\nx.prototype.confirmTransition = function(e, r, n) {\n  var i = this, s = this.current;\n  this.pending = e;\n  var o = function(l) {\n    !ue(l) && oe(l) && (i.errorCbs.length ? i.errorCbs.forEach(function(f) {\n      f(l);\n    }) : (process.env.NODE_ENV !== \"production\" && P(!1, \"uncaught error during route navigation:\"), console.error(l))), n && n(l);\n  }, a = e.matched.length - 1, c = s.matched.length - 1;\n  if (Xe(e, s) && // in the case the route map has been dynamically appended to\n  a === c && e.matched[a] === s.matched[c])\n    return this.ensureURL(), e.hash && O(this.router, s, e, !1), o($r(s, e));\n  var u = jr(\n    this.current.matched,\n    e.matched\n  ), d = u.updated, m = u.deactivated, h = u.activated, v = [].concat(\n    // in-component leave guards\n    qr(m),\n    // global before hooks\n    this.router.beforeHooks,\n    // in-component update hooks\n    Mr(d),\n    // in-config enter guards\n    h.map(function(l) {\n      return l.beforeEnter;\n    }),\n    // async components\n    Tr(h)\n  ), p = function(l, f) {\n    if (i.pending !== e)\n      return o(Me(s, e));\n    try {\n      l(e, s, function(y) {\n        y === !1 ? (i.ensureURL(!0), o(Nr(s, e))) : oe(y) ? (i.ensureURL(!0), o(y)) : typeof y == \"string\" || typeof y == \"object\" && (typeof y.path == \"string\" || typeof y.name == \"string\") ? (o(xr(s, e)), typeof y == \"object\" && y.replace ? i.replace(y) : i.push(y)) : f(y);\n      });\n    } catch (y) {\n      o(y);\n    }\n  };\n  Ue(v, p, function() {\n    var l = Ur(h), f = l.concat(i.router.resolveHooks);\n    Ue(f, p, function() {\n      if (i.pending !== e)\n        return o(Me(s, e));\n      i.pending = null, r(e), i.router.app && i.router.app.$nextTick(function() {\n        Ye(e);\n      });\n    });\n  });\n};\nx.prototype.updateRoute = function(e) {\n  this.current = e, this.cb && this.cb(e);\n};\nx.prototype.setupListeners = function() {\n};\nx.prototype.teardown = function() {\n  this.listeners.forEach(function(e) {\n    e();\n  }), this.listeners = [], this.current = A, this.pending = null;\n};\nfunction Vr(t) {\n  if (!t)\n    if (F) {\n      var e = document.querySelector(\"base\");\n      t = e && e.getAttribute(\"href\") || \"/\", t = t.replace(/^https?:\\/\\/[^\\/]+/, \"\");\n    } else\n      t = \"/\";\n  return t.charAt(0) !== \"/\" && (t = \"/\" + t), t.replace(/\\/$/, \"\");\n}\nfunction jr(t, e) {\n  var r, n = Math.max(t.length, e.length);\n  for (r = 0; r < n && t[r] === e[r]; r++)\n    ;\n  return {\n    updated: e.slice(0, r),\n    activated: e.slice(r),\n    deactivated: t.slice(r)\n  };\n}\nfunction Re(t, e, r, n) {\n  var i = ft(t, function(s, o, a, c) {\n    var u = Br(s, e);\n    if (u)\n      return Array.isArray(u) ? u.map(function(d) {\n        return r(d, o, a, c);\n      }) : r(u, o, a, c);\n  });\n  return ht(n ? i.reverse() : i);\n}\nfunction Br(t, e) {\n  return typeof t != \"function\" && (t = ne.extend(t)), t.options[e];\n}\nfunction qr(t) {\n  return Re(t, \"beforeRouteLeave\", pt, !0);\n}\nfunction Mr(t) {\n  return Re(t, \"beforeRouteUpdate\", pt);\n}\nfunction pt(t, e) {\n  if (e)\n    return function() {\n      return t.apply(e, arguments);\n    };\n}\nfunction Ur(t) {\n  return Re(\n    t,\n    \"beforeRouteEnter\",\n    function(e, r, n, i) {\n      return Dr(e, n, i);\n    }\n  );\n}\nfunction Dr(t, e, r) {\n  return function(i, s, o) {\n    return t(i, s, function(a) {\n      typeof a == \"function\" && (e.enteredCbs[r] || (e.enteredCbs[r] = []), e.enteredCbs[r].push(a)), o(a);\n    });\n  };\n}\nvar dt = /* @__PURE__ */ function(t) {\n  function e(r, n) {\n    t.call(this, r, n), this._startLocation = D(this.base);\n  }\n  return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.setupListeners = function() {\n    var n = this;\n    if (!(this.listeners.length > 0)) {\n      var i = this.router, s = i.options.scrollBehavior, o = T && s;\n      o && this.listeners.push(ut());\n      var a = function() {\n        var c = n.current, u = D(n.base);\n        n.current === A && u === n._startLocation || n.transitionTo(u, function(d) {\n          o && O(i, d, c, !0);\n        });\n      };\n      window.addEventListener(\"popstate\", a), this.listeners.push(function() {\n        window.removeEventListener(\"popstate\", a);\n      });\n    }\n  }, e.prototype.go = function(n) {\n    window.history.go(n);\n  }, e.prototype.push = function(n, i, s) {\n    var o = this, a = this, c = a.current;\n    this.transitionTo(n, function(u) {\n      se(L(o.base + u.fullPath)), O(o.router, u, c, !1), i && i(u);\n    }, s);\n  }, e.prototype.replace = function(n, i, s) {\n    var o = this, a = this, c = a.current;\n    this.transitionTo(n, function(u) {\n      de(L(o.base + u.fullPath)), O(o.router, u, c, !1), i && i(u);\n    }, s);\n  }, e.prototype.ensureURL = function(n) {\n    if (D(this.base) !== this.current.fullPath) {\n      var i = L(this.base + this.current.fullPath);\n      n ? se(i) : de(i);\n    }\n  }, e.prototype.getCurrentLocation = function() {\n    return D(this.base);\n  }, e;\n}(x);\nfunction D(t) {\n  var e = window.location.pathname, r = e.toLowerCase(), n = t.toLowerCase();\n  return t && (r === n || r.indexOf(L(n + \"/\")) === 0) && (e = e.slice(t.length)), (e || \"/\") + window.location.search + window.location.hash;\n}\nvar vt = /* @__PURE__ */ function(t) {\n  function e(r, n, i) {\n    t.call(this, r, n), !(i && zr(this.base)) && ze();\n  }\n  return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.setupListeners = function() {\n    var n = this;\n    if (!(this.listeners.length > 0)) {\n      var i = this.router, s = i.options.scrollBehavior, o = T && s;\n      o && this.listeners.push(ut());\n      var a = function() {\n        var u = n.current;\n        ze() && n.transitionTo(X(), function(d) {\n          o && O(n.router, d, u, !0), T || Y(d.fullPath);\n        });\n      }, c = T ? \"popstate\" : \"hashchange\";\n      window.addEventListener(\n        c,\n        a\n      ), this.listeners.push(function() {\n        window.removeEventListener(c, a);\n      });\n    }\n  }, e.prototype.push = function(n, i, s) {\n    var o = this, a = this, c = a.current;\n    this.transitionTo(\n      n,\n      function(u) {\n        We(u.fullPath), O(o.router, u, c, !1), i && i(u);\n      },\n      s\n    );\n  }, e.prototype.replace = function(n, i, s) {\n    var o = this, a = this, c = a.current;\n    this.transitionTo(\n      n,\n      function(u) {\n        Y(u.fullPath), O(o.router, u, c, !1), i && i(u);\n      },\n      s\n    );\n  }, e.prototype.go = function(n) {\n    window.history.go(n);\n  }, e.prototype.ensureURL = function(n) {\n    var i = this.current.fullPath;\n    X() !== i && (n ? We(i) : Y(i));\n  }, e.prototype.getCurrentLocation = function() {\n    return X();\n  }, e;\n}(x);\nfunction zr(t) {\n  var e = D(t);\n  if (!/^\\/#/.test(e))\n    return window.location.replace(L(t + \"/#\" + e)), !0;\n}\nfunction ze() {\n  var t = X();\n  return t.charAt(0) === \"/\" ? !0 : (Y(\"/\" + t), !1);\n}\nfunction X() {\n  var t = window.location.href, e = t.indexOf(\"#\");\n  return e < 0 ? \"\" : (t = t.slice(e + 1), t);\n}\nfunction ve(t) {\n  var e = window.location.href, r = e.indexOf(\"#\"), n = r >= 0 ? e.slice(0, r) : e;\n  return n + \"#\" + t;\n}\nfunction We(t) {\n  T ? se(ve(t)) : window.location.hash = t;\n}\nfunction Y(t) {\n  T ? de(ve(t)) : window.location.replace(ve(t));\n}\nvar Wr = /* @__PURE__ */ function(t) {\n  function e(r, n) {\n    t.call(this, r, n), this.stack = [], this.index = -1;\n  }\n  return t && (e.__proto__ = t), e.prototype = Object.create(t && t.prototype), e.prototype.constructor = e, e.prototype.push = function(n, i, s) {\n    var o = this;\n    this.transitionTo(\n      n,\n      function(a) {\n        o.stack = o.stack.slice(0, o.index + 1).concat(a), o.index++, i && i(a);\n      },\n      s\n    );\n  }, e.prototype.replace = function(n, i, s) {\n    var o = this;\n    this.transitionTo(\n      n,\n      function(a) {\n        o.stack = o.stack.slice(0, o.index).concat(a), i && i(a);\n      },\n      s\n    );\n  }, e.prototype.go = function(n) {\n    var i = this, s = this.index + n;\n    if (!(s < 0 || s >= this.stack.length)) {\n      var o = this.stack[s];\n      this.confirmTransition(\n        o,\n        function() {\n          var a = i.current;\n          i.index = s, i.updateRoute(o), i.router.afterHooks.forEach(function(c) {\n            c && c(o, a);\n          });\n        },\n        function(a) {\n          ue(a, V.duplicated) && (i.index = s);\n        }\n      );\n    }\n  }, e.prototype.getCurrentLocation = function() {\n    var n = this.stack[this.stack.length - 1];\n    return n ? n.fullPath : \"/\";\n  }, e.prototype.ensureURL = function() {\n  }, e;\n}(x), w = function t(e) {\n  e === void 0 && (e = {}), process.env.NODE_ENV !== \"production\" && P(this instanceof t, \"Router must be called with the new operator.\"), this.app = null, this.apps = [], this.options = e, this.beforeHooks = [], this.resolveHooks = [], this.afterHooks = [], this.matcher = wr(e.routes || [], this);\n  var r = e.mode || \"hash\";\n  switch (this.fallback = r === \"history\" && !T && e.fallback !== !1, this.fallback && (r = \"hash\"), F || (r = \"abstract\"), this.mode = r, r) {\n    case \"history\":\n      this.history = new dt(this, e.base);\n      break;\n    case \"hash\":\n      this.history = new vt(this, e.base, this.fallback);\n      break;\n    case \"abstract\":\n      this.history = new Wr(this, e.base);\n      break;\n    default:\n      process.env.NODE_ENV !== \"production\" && I(!1, \"invalid mode: \" + r);\n  }\n}, mt = { currentRoute: { configurable: !0 } };\nw.prototype.match = function(e, r, n) {\n  return this.matcher.match(e, r, n);\n};\nmt.currentRoute.get = function() {\n  return this.history && this.history.current;\n};\nw.prototype.init = function(e) {\n  var r = this;\n  if (process.env.NODE_ENV !== \"production\" && I(\n    ie.installed,\n    \"not installed. Make sure to call `Vue.use(VueRouter)` before creating root instance.\"\n  ), this.apps.push(e), e.$once(\"hook:destroyed\", function() {\n    var o = r.apps.indexOf(e);\n    o > -1 && r.apps.splice(o, 1), r.app === e && (r.app = r.apps[0] || null), r.app || r.history.teardown();\n  }), !this.app) {\n    this.app = e;\n    var n = this.history;\n    if (n instanceof dt || n instanceof vt) {\n      var i = function(o) {\n        var a = n.current, c = r.options.scrollBehavior, u = T && c;\n        u && \"fullPath\" in o && O(r, o, a, !1);\n      }, s = function(o) {\n        n.setupListeners(), i(o);\n      };\n      n.transitionTo(\n        n.getCurrentLocation(),\n        s,\n        s\n      );\n    }\n    n.listen(function(o) {\n      r.apps.forEach(function(a) {\n        a._route = o;\n      });\n    });\n  }\n};\nw.prototype.beforeEach = function(e) {\n  return Pe(this.beforeHooks, e);\n};\nw.prototype.beforeResolve = function(e) {\n  return Pe(this.resolveHooks, e);\n};\nw.prototype.afterEach = function(e) {\n  return Pe(this.afterHooks, e);\n};\nw.prototype.onReady = function(e, r) {\n  this.history.onReady(e, r);\n};\nw.prototype.onError = function(e) {\n  this.history.onError(e);\n};\nw.prototype.push = function(e, r, n) {\n  var i = this;\n  if (!r && !n && typeof Promise < \"u\")\n    return new Promise(function(s, o) {\n      i.history.push(e, s, o);\n    });\n  this.history.push(e, r, n);\n};\nw.prototype.replace = function(e, r, n) {\n  var i = this;\n  if (!r && !n && typeof Promise < \"u\")\n    return new Promise(function(s, o) {\n      i.history.replace(e, s, o);\n    });\n  this.history.replace(e, r, n);\n};\nw.prototype.go = function(e) {\n  this.history.go(e);\n};\nw.prototype.back = function() {\n  this.go(-1);\n};\nw.prototype.forward = function() {\n  this.go(1);\n};\nw.prototype.getMatchedComponents = function(e) {\n  var r = e ? e.matched ? e : this.resolve(e).route : this.currentRoute;\n  return r ? [].concat.apply(\n    [],\n    r.matched.map(function(n) {\n      return Object.keys(n.components).map(function(i) {\n        return n.components[i];\n      });\n    })\n  ) : [];\n};\nw.prototype.resolve = function(e, r, n) {\n  r = r || this.history.current;\n  var i = be(e, r, n, this), s = this.match(i, r), o = s.redirectedFrom || s.fullPath, a = this.history.base, c = Fr(a, o, this.mode);\n  return {\n    location: i,\n    route: s,\n    href: c,\n    // for backwards compat\n    normalizedTo: i,\n    resolved: s\n  };\n};\nw.prototype.getRoutes = function() {\n  return this.matcher.getRoutes();\n};\nw.prototype.addRoute = function(e, r) {\n  this.matcher.addRoute(e, r), this.history.current !== A && this.history.transitionTo(this.history.getCurrentLocation());\n};\nw.prototype.addRoutes = function(e) {\n  process.env.NODE_ENV !== \"production\" && P(!1, \"router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.\"), this.matcher.addRoutes(e), this.history.current !== A && this.history.transitionTo(this.history.getCurrentLocation());\n};\nObject.defineProperties(w.prototype, mt);\nfunction Pe(t, e) {\n  return t.push(e), function() {\n    var r = t.indexOf(e);\n    r > -1 && t.splice(r, 1);\n  };\n}\nfunction Fr(t, e, r) {\n  var n = r === \"hash\" ? \"#\" + e : e;\n  return t ? L(t + \"/\" + n) : n;\n}\nw.install = ie;\nw.version = \"3.6.5\";\nw.isNavigationFailure = ue;\nw.NavigationFailureType = V;\nw.START_LOCATION = A;\nF && window.Vue && window.Vue.use(w);\nconst Hr = {\n  name: \"NcReferenceWidget\",\n  props: {\n    reference: {\n      type: Object,\n      required: !0\n    }\n  },\n  data() {\n    return {\n      compact: 3\n    };\n  },\n  computed: {\n    hasCustomWidget() {\n      return bt(this.reference.richObjectType);\n    },\n    noAccess() {\n      return this.reference && !this.reference.accessible;\n    },\n    descriptionStyle() {\n      if (this.compact === 0)\n        return {\n          display: \"none\"\n        };\n      const t = this.compact < 4 ? this.compact : 3;\n      return {\n        lineClamp: t,\n        webkitLineClamp: t\n      };\n    },\n    compactLink() {\n      const t = this.reference.openGraphObject.link;\n      return t ? t.startsWith(\"https://\") ? t.substring(8) : t.startsWith(\"http://\") ? t.substring(7) : t : \"\";\n    },\n    route() {\n      return It(this.$router, this.reference.openGraphObject.link);\n    },\n    referenceWidgetLinkComponent() {\n      return this.route ? nt : \"a\";\n    },\n    referenceWidgetLinkProps() {\n      return this.route ? { to: this.route } : { href: this.reference.openGraphObject.link, target: \"_blank\" };\n    }\n  },\n  mounted() {\n    this.renderWidget(), Vt(this.$el, (t) => {\n      t[0].contentRect.width < 450 ? this.compact = 0 : t[0].contentRect.width < 550 ? this.compact = 1 : t[0].contentRect.width < 650 ? this.compact = 2 : this.compact = 3;\n    });\n  },\n  beforeDestroy() {\n    Rt(this.reference.richObjectType, this.$el);\n  },\n  methods: {\n    renderWidget() {\n      this.$refs.customWidget && (this.$refs.customWidget.innerHTML = \"\"), this?.reference?.richObjectType !== \"open-graph\" && this.$nextTick(() => {\n        Pt(this.$refs.customWidget, this.reference);\n      });\n    }\n  }\n};\nvar Gr = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", [e.reference && e.hasCustomWidget ? r(\"div\", { staticClass: \"widget-custom\" }, [r(\"div\", { ref: \"customWidget\" })]) : !e.noAccess && e.reference && e.reference.openGraphObject && !e.hasCustomWidget ? r(e.referenceWidgetLinkComponent, e._b({ tag: \"component\", staticClass: \"widget-default\", attrs: { rel: \"noopener noreferrer\" } }, \"component\", e.referenceWidgetLinkProps, !1), [e.reference.openGraphObject.thumb ? r(\"img\", { staticClass: \"widget-default--image\", attrs: { src: e.reference.openGraphObject.thumb } }) : e._e(), r(\"div\", { staticClass: \"widget-default--details\" }, [r(\"p\", { staticClass: \"widget-default--name\" }, [e._v(e._s(e.reference.openGraphObject.name))]), r(\"p\", { staticClass: \"widget-default--description\", style: e.descriptionStyle }, [e._v(e._s(e.reference.openGraphObject.description))]), r(\"p\", { staticClass: \"widget-default--link\" }, [e._v(e._s(e.compactLink))])])]) : e._e()], 1);\n}, Qr = [], Kr = /* @__PURE__ */ N(\n  Hr,\n  Gr,\n  Qr,\n  !1,\n  null,\n  \"38b1d56a\",\n  null,\n  null\n);\nconst Jr = Kr.exports, Xr = {\n  name: \"NcCustomPickerElement\",\n  props: {\n    /**\n     * The reference provider\n     */\n    provider: {\n      type: Object,\n      required: !0\n    }\n  },\n  emits: [\n    \"cancel\",\n    \"submit\"\n  ],\n  data() {\n    return {\n      isRegistered: z(this.provider.id),\n      renderResult: null\n    };\n  },\n  mounted() {\n    this.isRegistered && this.renderElement();\n  },\n  beforeDestroy() {\n    this.isRegistered && Ct(this.provider.id, this.$el, this.renderResult);\n  },\n  methods: {\n    renderElement() {\n      this.$refs.domElement && (this.$refs.domElement.innerHTML = \"\");\n      const t = Et(this.$refs.domElement, { providerId: this.provider.id, accessible: !1 });\n      Promise.resolve(t).then((e) => {\n        this.renderResult = e, this.renderResult.object?._isVue && this.renderResult.object?.$on && (this.renderResult.object.$on(\"submit\", this.onSubmit), this.renderResult.object.$on(\"cancel\", this.onCancel)), this.renderResult.element.addEventListener(\"submit\", (r) => {\n          this.onSubmit(r.detail);\n        }), this.renderResult.element.addEventListener(\"cancel\", this.onCancel);\n      });\n    },\n    onSubmit(t) {\n      this.$emit(\"submit\", t);\n    },\n    onCancel() {\n      this.$emit(\"cancel\");\n    }\n  }\n};\nvar Yr = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", { ref: \"domElement\" });\n}, Zr = [], en = /* @__PURE__ */ N(\n  Xr,\n  Yr,\n  Zr,\n  !1,\n  null,\n  \"25f1cef8\",\n  null,\n  null\n);\nconst tn = en.exports;\nW(kt);\nconst yt = \"any-link\", gt = {\n  id: yt,\n  title: S(\"Any link\"),\n  icon_url: At(\"core\", \"filetypes/link.svg\")\n};\nwindow._vue_richtext_reference_providers || (window._vue_richtext_reference_providers = Qe(\"core\", \"reference-provider-list\", []));\nwindow._vue_richtext_reference_provider_timestamps || (window._vue_richtext_reference_provider_timestamps = Qe(\"core\", \"reference-provider-timestamps\", {}));\nfunction rn(t) {\n  return t === yt ? gt : _t().find((e) => e.id === t);\n}\nfunction _t() {\n  return window._vue_richtext_reference_providers.filter((t) => {\n    const e = !!t.search_providers_ids && t.search_providers_ids.length > 0 || z(t.id);\n    return e || console.debug(\"[smart picker]\", t.id, \"reference provider is discoverable but does not have any related search provider or custom picker component registered\"), e;\n  });\n}\nfunction nn(t) {\n  const e = window._vue_richtext_reference_provider_timestamps;\n  return t.sort((r, n) => r.order === n.order ? 0 : r.order > n.order ? 1 : -1).sort((r, n) => {\n    const i = e[r.id], s = e[n.id];\n    return i === s ? 0 : s === void 0 ? -1 : i === void 0 ? 1 : i > s ? -1 : 1;\n  });\n}\nfunction sn(t, e = null) {\n  const r = _t(), n = t.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\"), i = new RegExp(n, \"i\"), o = nn(r).filter((c) => c.title.match(i)), a = e ? o.slice(0, e) : o;\n  return (t === \"\" || a.length === 0) && a.push(gt), a;\n}\nfunction on(t) {\n  const e = Math.floor(Date.now() / 1e3), r = {\n    timestamp: e\n  }, n = Z(\"references/provider/{providerId}\", { providerId: t });\n  me.put(n, r).then((i) => {\n    window._vue_richtext_reference_provider_timestamps[t] = e;\n  });\n}\nlet Fe = 0;\nfunction wt(t, e) {\n  return function() {\n    const r = this, n = arguments;\n    clearTimeout(Fe), Fe = setTimeout(function() {\n      t.apply(r, n);\n    }, e || 0);\n  };\n}\nfunction Ce(t) {\n  try {\n    return !!new URL(t);\n  } catch {\n    return !1;\n  }\n}\nW(Ge, xt);\nconst an = {\n  name: \"LinkVariantIcon\",\n  emits: [\"click\"],\n  props: {\n    title: {\n      type: String\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n};\nvar cn = function() {\n  var e = this, r = e._self._c;\n  return r(\"span\", e._b({ staticClass: \"material-design-icon link-variant-icon\", attrs: { \"aria-hidden\": e.title ? null : !0, \"aria-label\": e.title, role: \"img\" }, on: { click: function(n) {\n    return e.$emit(\"click\", n);\n  } } }, \"span\", e.$attrs, !1), [r(\"svg\", { staticClass: \"material-design-icon__svg\", attrs: { fill: e.fillColor, width: e.size, height: e.size, viewBox: \"0 0 24 24\" } }, [r(\"path\", { attrs: { d: \"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\" } }, [e.title ? r(\"title\", [e._v(e._s(e.title))]) : e._e()])])]);\n}, un = [], ln = /* @__PURE__ */ N(\n  an,\n  cn,\n  un,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst Ee = ln.exports, fn = {\n  name: \"NcProviderList\",\n  components: {\n    NcSelect: Je,\n    NcHighlight: Ke,\n    NcEmptyContent: ye,\n    LinkVariantIcon: Ee\n  },\n  emits: [\n    \"select-provider\",\n    \"submit\"\n  ],\n  data() {\n    return {\n      selectedProvider: null,\n      query: \"\",\n      multiselectPlaceholder: S(\"Select provider\"),\n      providerIconAlt: S(\"Provider icon\")\n    };\n  },\n  computed: {\n    options() {\n      const t = [];\n      return this.query !== \"\" && Ce(this.query) && t.push({\n        id: this.query,\n        title: this.query,\n        isLink: !0\n      }), t.push(...sn(this.query)), t;\n    }\n  },\n  methods: {\n    focus() {\n      setTimeout(() => {\n        this.$refs[\"provider-select\"]?.$el?.querySelector(\"#provider-select-input\")?.focus();\n      }, 300);\n    },\n    onProviderSelected(t) {\n      t !== null && (t.isLink ? this.$emit(\"submit\", t.title) : this.$emit(\"select-provider\", t), this.selectedProvider = null);\n    },\n    onSearch(t, e) {\n      this.query = t;\n    }\n  }\n};\nvar hn = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", { staticClass: \"provider-list\" }, [r(\"NcSelect\", { ref: \"provider-select\", staticClass: \"provider-list--select\", attrs: { \"input-id\": \"provider-select-input\", label: \"title\", placeholder: e.multiselectPlaceholder, options: e.options, \"append-to-body\": !1, \"clear-search-on-select\": !0, \"clear-search-on-blur\": () => !1, filterable: !1 }, on: { search: e.onSearch, input: e.onProviderSelected }, scopedSlots: e._u([{ key: \"option\", fn: function(n) {\n    return [n.isLink ? r(\"div\", { staticClass: \"provider\" }, [r(\"LinkVariantIcon\", { staticClass: \"link-icon\", attrs: { size: 20 } }), r(\"span\", [e._v(e._s(n.title))])], 1) : r(\"div\", { staticClass: \"provider\" }, [r(\"img\", { staticClass: \"provider-icon\", attrs: { src: n.icon_url, alt: e.providerIconAlt } }), r(\"NcHighlight\", { staticClass: \"option-text\", attrs: { search: e.query, text: n.title } })], 1)];\n  } }]), model: { value: e.selectedProvider, callback: function(n) {\n    e.selectedProvider = n;\n  }, expression: \"selectedProvider\" } }), r(\"NcEmptyContent\", { staticClass: \"provider-list--empty-content\", scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [r(\"LinkVariantIcon\")];\n  }, proxy: !0 }]) })], 1);\n}, pn = [], dn = /* @__PURE__ */ N(\n  fn,\n  hn,\n  pn,\n  !1,\n  null,\n  \"e880790e\",\n  null,\n  null\n);\nconst vn = dn.exports;\nW($t);\nconst mn = {\n  name: \"NcRawLinkInput\",\n  components: {\n    LinkVariantIcon: Ee,\n    NcEmptyContent: ye,\n    NcLoadingIcon: jt,\n    NcReferenceWidget: Jr,\n    NcTextField: Bt\n  },\n  props: {\n    /**\n     * The reference provider\n     */\n    provider: {\n      type: Object,\n      required: !0\n    }\n  },\n  emits: [\n    \"submit\"\n  ],\n  data() {\n    return {\n      inputValue: \"\",\n      loading: !1,\n      reference: null,\n      abortController: null,\n      inputPlaceholder: S(\"Enter link\")\n    };\n  },\n  computed: {\n    isLinkValid() {\n      return Ce(this.inputValue);\n    }\n  },\n  methods: {\n    focus() {\n      this.$refs[\"url-input\"].$el.getElementsByTagName(\"input\")[0]?.focus();\n    },\n    onSubmit(t) {\n      const e = t.target.value;\n      this.isLinkValid && this.$emit(\"submit\", e);\n    },\n    onClear() {\n      this.inputValue = \"\", this.reference = null;\n    },\n    onInput() {\n      this.reference = null, this.abortController && this.abortController.abort(), this.isLinkValid && wt(() => {\n        this.updateReference();\n      }, 500)();\n    },\n    updateReference() {\n      this.loading = !0, this.abortController = new AbortController(), me.get(Z(\"references/resolve\", 2) + \"?reference=\" + encodeURIComponent(this.inputValue), {\n        signal: this.abortController.signal\n      }).then((t) => {\n        this.reference = t.data.ocs.data.references[this.inputValue];\n      }).catch((t) => {\n        console.error(t);\n      }).then(() => {\n        this.loading = !1;\n      });\n    }\n  }\n};\nvar yn = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", { staticClass: \"raw-link\" }, [r(\"div\", { staticClass: \"input-wrapper\" }, [r(\"NcTextField\", { ref: \"url-input\", attrs: { value: e.inputValue, \"show-trailing-button\": e.inputValue !== \"\", label: e.inputPlaceholder }, on: { \"update:value\": [function(n) {\n    e.inputValue = n;\n  }, e.onInput], \"trailing-button-click\": e.onClear }, nativeOn: { keyup: function(n) {\n    return !n.type.indexOf(\"key\") && e._k(n.keyCode, \"enter\", 13, n.key, \"Enter\") ? null : e.onSubmit.apply(null, arguments);\n  } } }, [e.loading ? r(\"NcLoadingIcon\", { attrs: { size: 16 } }) : r(\"LinkVariantIcon\", { attrs: { size: 16 } })], 1)], 1), e.reference !== null ? r(\"NcReferenceWidget\", { staticClass: \"reference-widget\", attrs: { reference: e.reference } }) : r(\"NcEmptyContent\", { staticClass: \"raw-link--empty-content\", scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [e.provider.icon_url ? r(\"img\", { staticClass: \"provider-icon\", attrs: { src: e.provider.icon_url } }) : r(\"LinkVariantIcon\")];\n  }, proxy: !0 }]) })], 1);\n}, gn = [], _n = /* @__PURE__ */ N(\n  mn,\n  yn,\n  gn,\n  !1,\n  null,\n  \"d0ba247a\",\n  null,\n  null\n);\nconst wn = _n.exports, bn = {\n  name: \"NcSearchResult\",\n  components: {\n    NcHighlight: Ke\n  },\n  props: {\n    /**\n     * Unified search result entry\n     */\n    entry: {\n      type: Object,\n      required: !0\n    },\n    /**\n     * The query that led to getting this result\n     * Used to highlight the entry text\n     */\n    query: {\n      type: String,\n      required: !0\n    }\n  }\n};\nvar Rn = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", { staticClass: \"result\" }, [e.entry.icon ? r(\"div\", { staticClass: \"result--icon-class\", class: { [e.entry.icon]: !0, rounded: e.entry.rounded } }) : r(\"img\", { staticClass: \"result--image\", class: { rounded: e.entry.rounded }, attrs: { src: e.entry.thumbnailUrl } }), r(\"div\", { staticClass: \"result--content\" }, [r(\"span\", { staticClass: \"result--content--name\" }, [r(\"NcHighlight\", { attrs: { search: e.query, text: e.entry.title } })], 1), r(\"span\", { staticClass: \"result--content--subline\" }, [r(\"NcHighlight\", { attrs: { search: e.query, text: e.entry.subline } })], 1)])]);\n}, Pn = [], Cn = /* @__PURE__ */ N(\n  bn,\n  Rn,\n  Pn,\n  !1,\n  null,\n  \"7a394a58\",\n  null,\n  null\n);\nconst En = Cn.exports;\nW(Lt, Ge, Nt);\nconst He = 5, Sn = {\n  name: \"NcSearch\",\n  components: {\n    LinkVariantIcon: Ee,\n    DotsHorizontalIcon: qt,\n    NcEmptyContent: ye,\n    NcSelect: Je,\n    NcSearchResult: En\n  },\n  props: {\n    /**\n     * The selected reference provider\n     */\n    provider: {\n      type: Object,\n      required: !0\n    },\n    showEmptyContent: {\n      type: Boolean,\n      default: !0\n    },\n    searchPlaceholder: {\n      type: String,\n      default: null\n    }\n  },\n  emits: [\n    \"submit\"\n  ],\n  data() {\n    return {\n      searchQuery: \"\",\n      selectedResult: null,\n      resultsBySearchProvider: {},\n      searching: !1,\n      searchingMoreOf: null,\n      abortController: null,\n      noOptionsText: S(\"Start typing to search\"),\n      providerIconAlt: S(\"Provider icon\")\n    };\n  },\n  computed: {\n    mySearchPlaceholder() {\n      return this.searchPlaceholder || S(\"Search\");\n    },\n    searchProviderIds() {\n      return this.provider.search_providers_ids;\n    },\n    options() {\n      if (this.searchQuery === \"\")\n        return [];\n      const t = [];\n      return Ce(this.searchQuery) && t.push(this.rawLinkEntry), t.push(...this.formattedSearchResults), t;\n    },\n    rawLinkEntry() {\n      return {\n        id: \"rawLinkEntry\",\n        resourceUrl: this.searchQuery,\n        isRawLink: !0\n      };\n    },\n    formattedSearchResults() {\n      const t = [];\n      return this.searchProviderIds.forEach((e) => {\n        if (this.resultsBySearchProvider[e].entries.length > 0) {\n          (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[e].entries.length > 1) && t.push({\n            id: \"groupTitle-\" + e,\n            name: this.resultsBySearchProvider[e].name,\n            isCustomGroupTitle: !0,\n            providerId: e\n          });\n          const r = this.resultsBySearchProvider[e].entries.map((n, i) => ({\n            id: \"provider-\" + e + \"-entry-\" + i,\n            ...n\n          }));\n          t.push(...r), this.resultsBySearchProvider[e].isPaginated && t.push({\n            id: \"moreOf-\" + e,\n            name: this.resultsBySearchProvider[e].name,\n            isMore: !0,\n            providerId: e,\n            isLoading: this.searchingMoreOf === e\n          });\n        }\n      }), t;\n    }\n  },\n  mounted() {\n    this.resetResults();\n  },\n  beforeDestroy() {\n    this.cancelSearchRequests();\n  },\n  methods: {\n    t: S,\n    resetResults() {\n      const t = {};\n      this.searchProviderIds.forEach((e) => {\n        t[e] = {\n          entries: []\n        };\n      }), this.resultsBySearchProvider = t;\n    },\n    focus() {\n      setTimeout(() => {\n        this.$refs[\"search-select\"]?.$el?.querySelector(\"#search-select-input\")?.focus();\n      }, 300);\n    },\n    cancelSearchRequests() {\n      this.abortController && this.abortController.abort();\n    },\n    onSearchInput(t, e) {\n      this.searchQuery = t, wt(() => {\n        this.updateSearch();\n      }, 500)();\n    },\n    onSelectResultSelected(t) {\n      t !== null && (t.resourceUrl ? (this.cancelSearchRequests(), this.$emit(\"submit\", t.resourceUrl)) : t.isMore && this.searchMoreOf(t.providerId).then(() => {\n        this.selectedResult = null;\n      }));\n    },\n    searchMoreOf(t) {\n      return this.searchingMoreOf = t, this.cancelSearchRequests(), this.searchProviders(t);\n    },\n    updateSearch() {\n      if (this.cancelSearchRequests(), this.resetResults(), this.searchQuery === \"\") {\n        this.searching = !1;\n        return;\n      }\n      return this.searchProviders();\n    },\n    searchProviders(t = null) {\n      this.abortController = new AbortController(), this.searching = !0;\n      const e = t === null ? [...this.searchProviderIds].map((r) => this.searchOneProvider(r)) : [this.searchOneProvider(t, this.resultsBySearchProvider[t]?.cursor ?? null)];\n      return Promise.allSettled(e).then((r) => {\n        !!r.find((i) => i.status === \"rejected\" && (i.reason.name === \"CanceledError\" || i.reason.code === \"ERR_CANCELED\")) || (this.searching = !1, this.searchingMoreOf = null);\n      });\n    },\n    searchOneProvider(t, e = null) {\n      const r = e === null ? Z(\"search/providers/{providerId}/search?term={term}&limit={limit}\", { providerId: t, term: this.searchQuery, limit: He }) : Z(\"search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}\", { providerId: t, term: this.searchQuery, limit: He, cursor: e });\n      return me.get(r, {\n        signal: this.abortController.signal\n      }).then((n) => {\n        const i = n.data.ocs.data;\n        this.resultsBySearchProvider[t].name = i.name, this.resultsBySearchProvider[t].cursor = i.cursor, this.resultsBySearchProvider[t].isPaginated = i.isPaginated, this.resultsBySearchProvider[t].entries.push(...i.entries);\n      });\n    }\n  }\n};\nvar kn = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", { staticClass: \"smart-picker-search\", class: { \"with-empty-content\": e.showEmptyContent } }, [r(\"NcSelect\", { ref: \"search-select\", staticClass: \"smart-picker-search--select\", attrs: { \"input-id\": \"search-select-input\", label: \"name\", placeholder: e.mySearchPlaceholder, options: e.options, \"append-to-body\": !1, \"close-on-select\": !1, \"clear-search-on-select\": !1, \"clear-search-on-blur\": () => !1, \"reset-focus-on-options-change\": !1, filterable: !1, autoscroll: !0, \"reset-on-options-change\": !1, loading: e.searching }, on: { search: e.onSearchInput, input: e.onSelectResultSelected }, scopedSlots: e._u([{ key: \"option\", fn: function(n) {\n    return [n.isRawLink ? r(\"div\", { staticClass: \"custom-option\" }, [r(\"LinkVariantIcon\", { staticClass: \"option-simple-icon\", attrs: { size: 20 } }), r(\"span\", { staticClass: \"option-text\" }, [e._v(\" \" + e._s(e.t(\"Raw link {options}\", { options: n.resourceUrl })) + \" \")])], 1) : n.resourceUrl ? r(\"NcSearchResult\", { staticClass: \"search-result\", attrs: { entry: n, query: e.searchQuery } }) : n.isCustomGroupTitle ? r(\"span\", { staticClass: \"custom-option group-name\" }, [e.provider.icon_url ? r(\"img\", { staticClass: \"provider-icon group-name-icon\", attrs: { src: e.provider.icon_url } }) : e._e(), r(\"span\", { staticClass: \"option-text\" }, [r(\"strong\", [e._v(e._s(n.name))])])]) : n.isMore ? r(\"span\", { class: { \"custom-option\": !0 } }, [n.isLoading ? r(\"span\", { staticClass: \"option-simple-icon icon-loading-small\" }) : r(\"DotsHorizontalIcon\", { staticClass: \"option-simple-icon\", attrs: { size: 20 } }), r(\"span\", { staticClass: \"option-text\" }, [e._v(\" \" + e._s(e.t('Load more \"{options}\"', { options: n.name })) + \" \")])], 1) : e._e()];\n  } }, { key: \"no-options\", fn: function() {\n    return [e._v(\" \" + e._s(e.noOptionsText) + \" \")];\n  }, proxy: !0 }]), model: { value: e.selectedResult, callback: function(n) {\n    e.selectedResult = n;\n  }, expression: \"selectedResult\" } }), e.showEmptyContent ? r(\"NcEmptyContent\", { staticClass: \"smart-picker-search--empty-content\", scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [e.provider.icon_url ? r(\"img\", { staticClass: \"provider-icon\", attrs: { alt: e.providerIconAlt, src: e.provider.icon_url } }) : r(\"LinkVariantIcon\")];\n  }, proxy: !0 }], null, !1, 2922132592) }) : e._e()], 1);\n}, xn = [], $n = /* @__PURE__ */ N(\n  Sn,\n  kn,\n  xn,\n  !1,\n  null,\n  \"97d196f0\",\n  null,\n  null\n);\nconst Nn = $n.exports, U = {\n  providerList: 1,\n  standardLinkInput: 2,\n  searchInput: 3,\n  customElement: 4\n}, Ln = {\n  name: \"NcReferencePicker\",\n  components: {\n    NcCustomPickerElement: tn,\n    NcProviderList: vn,\n    NcRawLinkInput: wn,\n    NcSearch: Nn\n  },\n  props: {\n    /**\n     * Provider to select on creation\n     * Default: null. Show the provider list\n     */\n    initialProvider: {\n      type: Object,\n      default: () => null\n    },\n    /**\n     * Optional width in pixels\n     * Default: 100%\n     */\n    width: {\n      type: Number,\n      default: null\n    },\n    /**\n     * Focus on the provider list select input on creation\n     * Default: true\n     */\n    focusOnCreate: {\n      type: Boolean,\n      default: !0\n    }\n  },\n  emits: [\n    \"cancel\",\n    \"cancel-raw-link\",\n    \"cancel-search\",\n    \"provider-selected\",\n    \"submit\"\n  ],\n  data() {\n    return {\n      MODES: U,\n      selectedProvider: this.initialProvider\n    };\n  },\n  computed: {\n    mode() {\n      return this.selectedProvider === null ? U.providerList : z(this.selectedProvider.id) ? U.customElement : this.selectedProvider.search_providers_ids ? U.searchInput : U.standardLinkInput;\n    },\n    pickerWrapperStyle() {\n      return {\n        width: this.width ? this.width + \"px\" : void 0\n      };\n    }\n  },\n  mounted() {\n    this.focusOnCreate && (this.initialProvider ? setTimeout(() => {\n      this.$refs[\"url-input\"]?.focus();\n    }, 300) : this.$nextTick(() => {\n      this.$refs[\"provider-list\"]?.focus();\n    }));\n  },\n  methods: {\n    onEscapePressed() {\n      this.selectedProvider !== null ? this.deselectProvider() : this.cancelProviderSelection();\n    },\n    onProviderSelected(t) {\n      this.selectedProvider = t, this.$emit(\"provider-selected\", t), this.$nextTick(() => {\n        this.$refs[\"url-input\"]?.focus();\n      });\n    },\n    cancelCustomElement() {\n      this.deselectProvider();\n    },\n    cancelSearch() {\n      this.$emit(\"cancel-search\", this.selectedProvider?.title), this.deselectProvider();\n    },\n    cancelRawLinkInput() {\n      this.$emit(\"cancel-raw-link\", this.selectedProvider?.title), this.deselectProvider();\n    },\n    cancelProviderSelection() {\n      this.$emit(\"cancel\");\n    },\n    submitLink(t) {\n      this.selectedProvider !== null && on(this.selectedProvider.id), this.$emit(\"submit\", t), this.deselectProvider();\n    },\n    deselectProvider() {\n      this.selectedProvider = null, this.$emit(\"provider-selected\", null), setTimeout(() => {\n        this.$refs[\"provider-list\"]?.focus();\n      }, 300);\n    }\n  }\n};\nvar On = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", { staticClass: \"reference-picker\", style: e.pickerWrapperStyle, attrs: { tabindex: \"-1\" }, on: { keydown: function(n) {\n    return !n.type.indexOf(\"key\") && e._k(n.keyCode, \"esc\", 27, n.key, [\"Esc\", \"Escape\"]) ? null : (n.stopPropagation(), n.preventDefault(), e.onEscapePressed.apply(null, arguments));\n  } } }, [e.mode === e.MODES.providerList ? r(\"NcProviderList\", { ref: \"provider-list\", on: { \"select-provider\": e.onProviderSelected, submit: e.submitLink, cancel: e.cancelProviderSelection } }) : e.mode === e.MODES.standardLinkInput ? r(\"NcRawLinkInput\", { ref: \"url-input\", attrs: { provider: e.selectedProvider }, on: { submit: e.submitLink, cancel: e.cancelRawLinkInput } }) : e.mode === e.MODES.searchInput ? r(\"NcSearch\", { ref: \"url-input\", attrs: { provider: e.selectedProvider }, on: { cancel: e.cancelSearch, submit: e.submitLink } }) : e.mode === e.MODES.customElement ? r(\"div\", { staticClass: \"custom-element-wrapper\" }, [r(\"NcCustomPickerElement\", { attrs: { provider: e.selectedProvider }, on: { submit: e.submitLink, cancel: e.cancelCustomElement } })], 1) : e._e()], 1);\n}, Tn = [], An = /* @__PURE__ */ N(\n  Ln,\n  On,\n  Tn,\n  !1,\n  null,\n  \"12c38c93\",\n  null,\n  null\n);\nconst In = An.exports;\nW(Tt, Ot);\nconst Vn = {\n  name: \"NcReferencePickerModal\",\n  components: {\n    NcReferencePicker: In,\n    NcModal: Ut,\n    NcButton: Mt,\n    ArrowLeftIcon: zt,\n    CloseIcon: Wt\n  },\n  props: {\n    /**\n     * Provider to select on creation\n     * Show the provider list if no initial one is provided\n     */\n    initialProvider: {\n      type: Object,\n      default: () => null\n    },\n    /**\n     * Focus on the input item on create\n     */\n    focusOnCreate: {\n      type: Boolean,\n      default: !0\n    },\n    /**\n     * If true, add the modal content to the Viewer trap elements via the event-bus\n     */\n    isInsideViewer: {\n      type: Boolean,\n      default: !1\n    }\n  },\n  emits: [\n    \"cancel\",\n    \"submit\"\n  ],\n  data() {\n    return {\n      show: !0,\n      selectedProvider: this.initialProvider,\n      backButtonTitle: S(\"Back to provider selection\"),\n      closeButtonTitle: S(\"Close\"),\n      closeButtonLabel: S(\"Close Smart Picker\")\n    };\n  },\n  computed: {\n    isProviderSelected() {\n      return this.selectedProvider !== null;\n    },\n    showBackButton() {\n      return this.initialProvider === null && this.isProviderSelected;\n    },\n    modalSize() {\n      return this.isProviderSelected && z(this.selectedProvider.id) ? St(this.selectedProvider.id) ?? \"large\" : \"normal\";\n    },\n    showModalName() {\n      return !this.isProviderSelected || !z(this.selectedProvider.id);\n    },\n    modalName() {\n      return this.isProviderSelected ? this.selectedProvider.title : S(\"Smart Picker\");\n    }\n  },\n  mounted() {\n    if (this.isInsideViewer) {\n      const t = this.$refs.modal_content;\n      Dt(\"viewer:trapElements:changed\", t);\n    }\n  },\n  methods: {\n    onCancel() {\n      this.show = !1, this.$emit(\"cancel\");\n    },\n    onSubmit(t) {\n      this.show = !1, this.$emit(\"submit\", t);\n    },\n    onProviderSelect(t) {\n      this.selectedProvider = t, t === null && this.initialProvider !== null && this.onCancel();\n    },\n    onBackClicked() {\n      this.$refs.referencePicker.deselectProvider();\n    }\n  }\n};\nvar jn = function() {\n  var e = this, r = e._self._c;\n  return e.show ? r(\"NcModal\", { staticClass: \"reference-picker-modal\", attrs: { size: e.modalSize, \"can-close\": !1 }, on: { close: e.onCancel } }, [r(\"div\", { ref: \"modal_content\", staticClass: \"reference-picker-modal--content\" }, [e.showBackButton ? r(\"NcButton\", { staticClass: \"back-button\", attrs: { \"aria-label\": e.backButtonTitle, title: e.backButtonTitle }, on: { click: e.onBackClicked }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [r(\"ArrowLeftIcon\")];\n  }, proxy: !0 }], null, !1, 3001860362) }) : e._e(), r(\"NcButton\", { staticClass: \"close-button\", attrs: { \"aria-label\": e.closeButtonLabel, title: e.closeButtonTitle, type: \"tertiary\" }, on: { click: e.onCancel }, scopedSlots: e._u([{ key: \"icon\", fn: function() {\n    return [r(\"CloseIcon\")];\n  }, proxy: !0 }], null, !1, 2491825086) }), e.showModalName ? r(\"h2\", [e._v(\" \" + e._s(e.modalName) + \" \")]) : e._e(), r(\"NcReferencePicker\", { ref: \"referencePicker\", attrs: { \"initial-provider\": e.initialProvider, \"focus-on-create\": e.focusOnCreate }, on: { \"provider-selected\": e.onProviderSelect, submit: e.onSubmit, cancel: e.onCancel } })], 1)]) : e._e();\n}, Bn = [], qn = /* @__PURE__ */ N(\n  Vn,\n  jn,\n  Bn,\n  !1,\n  null,\n  \"ab09ebaa\",\n  null,\n  null\n);\nconst Mn = qn.exports;\nasync function ai(t = null, e = void 0) {\n  return await new Promise((r, n) => {\n    const i = \"referencePickerModal\", s = document.createElement(\"div\");\n    s.id = i, document.body.append(s);\n    const o = t === null ? null : rn(t) ?? null, a = Ft.extend(Mn), c = new a({\n      propsData: {\n        initialProvider: o,\n        isInsideViewer: e\n      }\n    }).$mount(s);\n    c.$on(\"cancel\", () => {\n      c.$destroy(), n(new Error(\"User cancellation\"));\n    }), c.$on(\"submit\", (u) => {\n      c.$destroy(), r(u);\n    });\n  });\n}\nexport {\n  nt as L,\n  Jr as N,\n  yt as a,\n  rn as b,\n  _t as c,\n  sn as d,\n  In as e,\n  Mn as f,\n  ai as g,\n  Nn as h,\n  nn as s\n};\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n *   Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n  if (error) {\n    throw error\n  }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","/**\n * @typedef {(error?: Error|null|undefined, ...output: Array<any>) => void} Callback\n * @typedef {(...input: Array<any>) => any} Middleware\n *\n * @typedef {(...input: Array<any>) => void} Run\n *   Call all middleware.\n * @typedef {(fn: Middleware) => Pipeline} Use\n *   Add `fn` (middleware) to the list.\n * @typedef {{run: Run, use: Use}} Pipeline\n *   Middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n */\nexport function trough() {\n  /** @type {Array<Middleware>} */\n  const fns = []\n  /** @type {Pipeline} */\n  const pipeline = {run, use}\n\n  return pipeline\n\n  /** @type {Run} */\n  function run(...values) {\n    let middlewareIndex = -1\n    /** @type {Callback} */\n    const callback = values.pop()\n\n    if (typeof callback !== 'function') {\n      throw new TypeError('Expected function as last argument, not ' + callback)\n    }\n\n    next(null, ...values)\n\n    /**\n     * Run the next `fn`, or we’re done.\n     *\n     * @param {Error|null|undefined} error\n     * @param {Array<any>} output\n     */\n    function next(error, ...output) {\n      const fn = fns[++middlewareIndex]\n      let index = -1\n\n      if (error) {\n        callback(error)\n        return\n      }\n\n      // Copy non-nullish input into values.\n      while (++index < values.length) {\n        if (output[index] === null || output[index] === undefined) {\n          output[index] = values[index]\n        }\n      }\n\n      // Save the newly created `output` for the next call.\n      values = output\n\n      // Next or done.\n      if (fn) {\n        wrap(fn, next)(...output)\n      } else {\n        callback(null, ...output)\n      }\n    }\n  }\n\n  /** @type {Use} */\n  function use(middelware) {\n    if (typeof middelware !== 'function') {\n      throw new TypeError(\n        'Expected `middelware` to be a function, not ' + middelware\n      )\n    }\n\n    fns.push(middelware)\n    return pipeline\n  }\n}\n\n/**\n * Wrap `middleware`.\n * Can be sync or async; return a promise, receive a callback, or return new\n * values and errors.\n *\n * @param {Middleware} middleware\n * @param {Callback} callback\n */\nexport function wrap(middleware, callback) {\n  /** @type {boolean} */\n  let called\n\n  return wrapped\n\n  /**\n   * Call `middleware`.\n   * @this {any}\n   * @param {Array<any>} parameters\n   * @returns {void}\n   */\n  function wrapped(...parameters) {\n    const fnExpectsCallback = middleware.length > parameters.length\n    /** @type {any} */\n    let result\n\n    if (fnExpectsCallback) {\n      parameters.push(done)\n    }\n\n    try {\n      result = middleware.apply(this, parameters)\n    } catch (error) {\n      const exception = /** @type {Error} */ (error)\n\n      // Well, this is quite the pickle.\n      // `middleware` received a callback and called it synchronously, but that\n      // threw an error.\n      // The only thing left to do is to throw the thing instead.\n      if (fnExpectsCallback && called) {\n        throw exception\n      }\n\n      return done(exception)\n    }\n\n    if (!fnExpectsCallback) {\n      if (result instanceof Promise) {\n        result.then(then, done)\n      } else if (result instanceof Error) {\n        done(result)\n      } else {\n        then(result)\n      }\n    }\n  }\n\n  /**\n   * Call `callback`, only once.\n   * @type {Callback}\n   */\n  function done(error, ...output) {\n    if (!called) {\n      called = true\n      callback(error, ...output)\n    }\n  }\n\n  /**\n   * Call `done` with one value.\n   *\n   * @param {any} [value]\n   */\n  function then(value) {\n    done(null, value)\n  }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n *   Node, position, or point.\n * @returns {string}\n *   Pretty printed positional info of a node (`string`).\n *\n *   In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n *   or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n *   column, `s` for `start`, and `e` for end.\n *   An empty string (`''`) is returned if the given value is neither `node`,\n *   `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n  // Nothing.\n  if (!value || typeof value !== 'object') {\n    return ''\n  }\n\n  // Node.\n  if ('position' in value || 'type' in value) {\n    return position(value.position)\n  }\n\n  // Position.\n  if ('start' in value || 'end' in value) {\n    return position(value)\n  }\n\n  // Point.\n  if ('line' in value || 'column' in value) {\n    return point(value)\n  }\n\n  // ?\n  return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n  return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n  return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n  return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n *   Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n *   Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n *   Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n *   Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n *   Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n  /**\n   * Create a message for `reason`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Options | null | undefined} [options]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns\n   *   Instance of `VFileMessage`.\n   */\n  // eslint-disable-next-line complexity\n  constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n    super()\n\n    if (typeof optionsOrParentOrPlace === 'string') {\n      origin = optionsOrParentOrPlace\n      optionsOrParentOrPlace = undefined\n    }\n\n    /** @type {string} */\n    let reason = ''\n    /** @type {Options} */\n    let options = {}\n    let legacyCause = false\n\n    if (optionsOrParentOrPlace) {\n      // Point.\n      if (\n        'line' in optionsOrParentOrPlace &&\n        'column' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Position.\n      else if (\n        'start' in optionsOrParentOrPlace &&\n        'end' in optionsOrParentOrPlace\n      ) {\n        options = {place: optionsOrParentOrPlace}\n      }\n      // Node.\n      else if ('type' in optionsOrParentOrPlace) {\n        options = {\n          ancestors: [optionsOrParentOrPlace],\n          place: optionsOrParentOrPlace.position\n        }\n      }\n      // Options.\n      else {\n        options = {...optionsOrParentOrPlace}\n      }\n    }\n\n    if (typeof causeOrReason === 'string') {\n      reason = causeOrReason\n    }\n    // Error.\n    else if (!options.cause && causeOrReason) {\n      legacyCause = true\n      reason = causeOrReason.message\n      options.cause = causeOrReason\n    }\n\n    if (!options.ruleId && !options.source && typeof origin === 'string') {\n      const index = origin.indexOf(':')\n\n      if (index === -1) {\n        options.ruleId = origin\n      } else {\n        options.source = origin.slice(0, index)\n        options.ruleId = origin.slice(index + 1)\n      }\n    }\n\n    if (!options.place && options.ancestors && options.ancestors) {\n      const parent = options.ancestors[options.ancestors.length - 1]\n\n      if (parent) {\n        options.place = parent.position\n      }\n    }\n\n    const start =\n      options.place && 'start' in options.place\n        ? options.place.start\n        : options.place\n\n    /* eslint-disable no-unused-expressions */\n    /**\n     * Stack of ancestor nodes surrounding the message.\n     *\n     * @type {Array<Node> | undefined}\n     */\n    this.ancestors = options.ancestors || undefined\n\n    /**\n     * Original error cause of the message.\n     *\n     * @type {Error | undefined}\n     */\n    this.cause = options.cause || undefined\n\n    /**\n     * Starting column of message.\n     *\n     * @type {number | undefined}\n     */\n    this.column = start ? start.column : undefined\n\n    /**\n     * State of problem.\n     *\n     * * `true` — error, file not usable\n     * * `false` — warning, change may be needed\n     * * `undefined` — change likely not needed\n     *\n     * @type {boolean | null | undefined}\n     */\n    this.fatal = undefined\n\n    /**\n     * Path of a file (used throughout the `VFile` ecosystem).\n     *\n     * @type {string | undefined}\n     */\n    this.file\n\n    // Field from `Error`.\n    /**\n     * Reason for message.\n     *\n     * @type {string}\n     */\n    this.message = reason\n\n    /**\n     * Starting line of error.\n     *\n     * @type {number | undefined}\n     */\n    this.line = start ? start.line : undefined\n\n    // Field from `Error`.\n    /**\n     * Serialized positional info of message.\n     *\n     * On normal errors, this would be something like `ParseError`, buit in\n     * `VFile` messages we use this space to show where an error happened.\n     */\n    this.name = stringifyPosition(options.place) || '1:1'\n\n    /**\n     * Place of message.\n     *\n     * @type {Point | Position | undefined}\n     */\n    this.place = options.place || undefined\n\n    /**\n     * Reason for message, should use markdown.\n     *\n     * @type {string}\n     */\n    this.reason = this.message\n\n    /**\n     * Category of message (example: `'my-rule'`).\n     *\n     * @type {string | undefined}\n     */\n    this.ruleId = options.ruleId || undefined\n\n    /**\n     * Namespace of message (example: `'my-package'`).\n     *\n     * @type {string | undefined}\n     */\n    this.source = options.source || undefined\n\n    // Field from `Error`.\n    /**\n     * Stack of message.\n     *\n     * This is used by normal errors to show where something happened in\n     * programming code, irrelevant for `VFile` messages,\n     *\n     * @type {string}\n     */\n    this.stack =\n      legacyCause && options.cause && typeof options.cause.stack === 'string'\n        ? options.cause.stack\n        : ''\n\n    // The following fields are “well known”.\n    // Not standard.\n    // Feel free to add other non-standard fields to your messages.\n\n    /**\n     * Specify the source value that’s being reported, which is deemed\n     * incorrect.\n     *\n     * @type {string | undefined}\n     */\n    this.actual\n\n    /**\n     * Suggest acceptable values that can be used instead of `actual`.\n     *\n     * @type {Array<string> | undefined}\n     */\n    this.expected\n\n    /**\n     * Long form description of the message (you should use markdown).\n     *\n     * @type {string | undefined}\n     */\n    this.note\n\n    /**\n     * Link to docs for the message.\n     *\n     * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n     * > to `new URL(x)`.\n     *\n     * @type {string | undefined}\n     */\n    this.url\n    /* eslint-enable no-unused-expressions */\n  }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\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\nexport const path = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n *   File path.\n * @param {string | null | undefined} [ext]\n *   Extension to strip.\n * @returns {string}\n *   Stem or basename.\n */\nfunction basename(path, ext) {\n  if (ext !== undefined && typeof ext !== 'string') {\n    throw new TypeError('\"ext\" argument must be a string')\n  }\n\n  assertPath(path)\n  let start = 0\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let seenNonSlash\n\n  if (ext === undefined || ext.length === 0 || ext.length > path.length) {\n    while (index--) {\n      if (path.codePointAt(index) === 47 /* `/` */) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now.\n        if (seenNonSlash) {\n          start = index + 1\n          break\n        }\n      } else if (end < 0) {\n        // We saw the first non-path separator, mark this as the end of our\n        // path component.\n        seenNonSlash = true\n        end = index + 1\n      }\n    }\n\n    return end < 0 ? '' : path.slice(start, end)\n  }\n\n  if (ext === path) {\n    return ''\n  }\n\n  let firstNonSlashEnd = -1\n  let extIndex = ext.length - 1\n\n  while (index--) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (seenNonSlash) {\n        start = index + 1\n        break\n      }\n    } else {\n      if (firstNonSlashEnd < 0) {\n        // We saw the first non-path separator, remember this index in case\n        // we need it if the extension ends up not matching.\n        seenNonSlash = true\n        firstNonSlashEnd = index + 1\n      }\n\n      if (extIndex > -1) {\n        // Try to match the explicit extension.\n        if (path.codePointAt(index) === ext.codePointAt(extIndex--)) {\n          if (extIndex < 0) {\n            // We matched the extension, so mark this as the end of our path\n            // component\n            end = index\n          }\n        } else {\n          // Extension does not match, so our result is the entire path\n          // component\n          extIndex = -1\n          end = firstNonSlashEnd\n        }\n      }\n    }\n  }\n\n  if (start === end) {\n    end = firstNonSlashEnd\n  } else if (end < 0) {\n    end = path.length\n  }\n\n  return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\nfunction dirname(path) {\n  assertPath(path)\n\n  if (path.length === 0) {\n    return '.'\n  }\n\n  let end = -1\n  let index = path.length\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  // Prefix `--` is important to not run on `0`.\n  while (--index) {\n    if (path.codePointAt(index) === 47 /* `/` */) {\n      if (unmatchedSlash) {\n        end = index\n        break\n      }\n    } else if (!unmatchedSlash) {\n      // We saw the first non-path separator\n      unmatchedSlash = true\n    }\n  }\n\n  return end < 0\n    ? path.codePointAt(0) === 47 /* `/` */\n      ? '/'\n      : '.'\n    : end === 1 && path.codePointAt(0) === 47 /* `/` */\n    ? '//'\n    : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   Extname.\n */\nfunction extname(path) {\n  assertPath(path)\n\n  let index = path.length\n\n  let end = -1\n  let startPart = 0\n  let startDot = -1\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find.\n  let preDotState = 0\n  /** @type {boolean | undefined} */\n  let unmatchedSlash\n\n  while (index--) {\n    const code = path.codePointAt(index)\n\n    if (code === 47 /* `/` */) {\n      // If we reached a path separator that was not part of a set of path\n      // separators at the end of the string, stop now.\n      if (unmatchedSlash) {\n        startPart = index + 1\n        break\n      }\n\n      continue\n    }\n\n    if (end < 0) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension.\n      unmatchedSlash = true\n      end = index + 1\n    }\n\n    if (code === 46 /* `.` */) {\n      // If this is our first dot, mark it as the start of our extension.\n      if (startDot < 0) {\n        startDot = index\n      } else if (preDotState !== 1) {\n        preDotState = 1\n      }\n    } else if (startDot > -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension.\n      preDotState = -1\n    }\n  }\n\n  if (\n    startDot < 0 ||\n    end < 0 ||\n    // We saw a non-dot character immediately before the dot.\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly `..`.\n    (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n  ) {\n    return ''\n  }\n\n  return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n *   Path segments.\n * @returns {string}\n *   File path.\n */\nfunction join(...segments) {\n  let index = -1\n  /** @type {string | undefined} */\n  let joined\n\n  while (++index < segments.length) {\n    assertPath(segments[index])\n\n    if (segments[index]) {\n      joined =\n        joined === undefined ? segments[index] : joined + '/' + segments[index]\n    }\n  }\n\n  return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n *   File path.\n * @returns {string}\n *   File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n  assertPath(path)\n\n  const absolute = path.codePointAt(0) === 47 /* `/` */\n\n  // Normalize the path according to POSIX rules.\n  let value = normalizeString(path, !absolute)\n\n  if (value.length === 0 && !absolute) {\n    value = '.'\n  }\n\n  if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n    value += '/'\n  }\n\n  return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n *   File path.\n * @param {boolean} allowAboveRoot\n *   Whether `..` can move above root.\n * @returns {string}\n *   File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n  let result = ''\n  let lastSegmentLength = 0\n  let lastSlash = -1\n  let dots = 0\n  let index = -1\n  /** @type {number | undefined} */\n  let code\n  /** @type {number} */\n  let lastSlashIndex\n\n  while (++index <= path.length) {\n    if (index < path.length) {\n      code = path.codePointAt(index)\n    } else if (code === 47 /* `/` */) {\n      break\n    } else {\n      code = 47 /* `/` */\n    }\n\n    if (code === 47 /* `/` */) {\n      if (lastSlash === index - 1 || dots === 1) {\n        // Empty.\n      } else if (lastSlash !== index - 1 && dots === 2) {\n        if (\n          result.length < 2 ||\n          lastSegmentLength !== 2 ||\n          result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n          result.codePointAt(result.length - 2) !== 46 /* `.` */\n        ) {\n          if (result.length > 2) {\n            lastSlashIndex = result.lastIndexOf('/')\n\n            if (lastSlashIndex !== result.length - 1) {\n              if (lastSlashIndex < 0) {\n                result = ''\n                lastSegmentLength = 0\n              } else {\n                result = result.slice(0, lastSlashIndex)\n                lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n              }\n\n              lastSlash = index\n              dots = 0\n              continue\n            }\n          } else if (result.length > 0) {\n            result = ''\n            lastSegmentLength = 0\n            lastSlash = index\n            dots = 0\n            continue\n          }\n        }\n\n        if (allowAboveRoot) {\n          result = result.length > 0 ? result + '/..' : '..'\n          lastSegmentLength = 2\n        }\n      } else {\n        if (result.length > 0) {\n          result += '/' + path.slice(lastSlash + 1, index)\n        } else {\n          result = path.slice(lastSlash + 1, index)\n        }\n\n        lastSegmentLength = index - lastSlash - 1\n      }\n\n      lastSlash = index\n      dots = 0\n    } else if (code === 46 /* `.` */ && dots > -1) {\n      dots++\n    } else {\n      dots = -1\n    }\n  }\n\n  return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n *   File path.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError(\n      'Path must be a string. Received ' + JSON.stringify(path)\n    )\n  }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const proc = {cwd}\n\nfunction cwd() {\n  return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n *   File path or URL.\n * @returns {fileUrlOrPath is URL}\n *   Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n  return Boolean(\n    fileUrlOrPath !== null &&\n      typeof fileUrlOrPath === 'object' &&\n      'href' in fileUrlOrPath &&\n      fileUrlOrPath.href &&\n      'protocol' in fileUrlOrPath &&\n      fileUrlOrPath.protocol &&\n      // @ts-expect-error: indexing is fine.\n      fileUrlOrPath.auth === undefined\n  )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n *   File URL.\n * @returns {string}\n *   File URL.\n */\nexport function urlToPath(path) {\n  if (typeof path === 'string') {\n    path = new URL(path)\n  } else if (!isUrl(path)) {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'The \"path\" argument must be of type string or an instance of URL. Received `' +\n        path +\n        '`'\n    )\n    error.code = 'ERR_INVALID_ARG_TYPE'\n    throw error\n  }\n\n  if (path.protocol !== 'file:') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError('The URL must be of scheme file')\n    error.code = 'ERR_INVALID_URL_SCHEME'\n    throw error\n  }\n\n  return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n *   URL.\n * @returns {string}\n *   File path.\n */\nfunction getPathFromURLPosix(url) {\n  if (url.hostname !== '') {\n    /** @type {NodeJS.ErrnoException} */\n    const error = new TypeError(\n      'File URL host must be \"localhost\" or empty on darwin'\n    )\n    error.code = 'ERR_INVALID_FILE_URL_HOST'\n    throw error\n  }\n\n  const pathname = url.pathname\n  let index = -1\n\n  while (++index < pathname.length) {\n    if (\n      pathname.codePointAt(index) === 37 /* `%` */ &&\n      pathname.codePointAt(index + 1) === 50 /* `2` */\n    ) {\n      const third = pathname.codePointAt(index + 2)\n      if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n        /** @type {NodeJS.ErrnoException} */\n        const error = new TypeError(\n          'File URL path must not include encoded / characters'\n        )\n        error.code = 'ERR_INVALID_FILE_URL_PATH'\n        throw error\n      }\n    }\n  }\n\n  return decodeURIComponent(pathname)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n * @typedef {import('vfile-message').Options} MessageOptions\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Value} Value\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef {Options | URL | VFile | Value} Compatible\n *   Things that can be passed to the constructor.\n *\n * @typedef VFileCoreOptions\n *   Set multiple values.\n * @property {string | null | undefined} [basename]\n *   Set `basename` (name).\n * @property {string | null | undefined} [cwd]\n *   Set `cwd` (working directory).\n * @property {Data | null | undefined} [data]\n *   Set `data` (associated info).\n * @property {string | null | undefined} [dirname]\n *   Set `dirname` (path w/o basename).\n * @property {string | null | undefined} [extname]\n *   Set `extname` (extension with dot).\n * @property {Array<string> | null | undefined} [history]\n *   Set `history` (paths the file moved between).\n * @property {URL | string | null | undefined} [path]\n *   Set `path` (current path).\n * @property {string | null | undefined} [stem]\n *   Set `stem` (name without extension).\n * @property {Value | null | undefined} [value]\n *   Set `value` (the contents of the file).\n *\n * @typedef Map\n *   Raw source map.\n *\n *   See:\n *   <https://github.com/mozilla/source-map/blob/60adcb0/source-map.d.ts#L15-L23>.\n * @property {number} version\n *   Which version of the source map spec this map is following.\n * @property {Array<string>} sources\n *   An array of URLs to the original source files.\n * @property {Array<string>} names\n *   An array of identifiers which can be referenced by individual mappings.\n * @property {string | undefined} [sourceRoot]\n *   The URL root from which all sources are relative.\n * @property {Array<string> | undefined} [sourcesContent]\n *   An array of contents of the original source files.\n * @property {string} mappings\n *   A string of base64 VLQs which contain the actual mappings.\n * @property {string} file\n *   The generated file this source map is associated with.\n *\n * @typedef {Record<string, unknown> & VFileCoreOptions} Options\n *   Configuration.\n *\n *   A bunch of keys that will be shallow copied over to the new file.\n *\n * @typedef {Record<string, unknown>} ReporterSettings\n *   Configuration for reporters.\n */\n\n/**\n * @template [Settings=ReporterSettings]\n *   Options type.\n * @callback Reporter\n *   Type for a reporter.\n * @param {Array<VFile>} files\n *   Files to report.\n * @param {Settings} options\n *   Configuration.\n * @returns {string}\n *   Report.\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {path} from 'vfile/do-not-use-conditional-minpath'\nimport {proc} from 'vfile/do-not-use-conditional-minproc'\nimport {urlToPath, isUrl} from 'vfile/do-not-use-conditional-minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n  'history',\n  'path',\n  'basename',\n  'stem',\n  'extname',\n  'dirname'\n])\n\nexport class VFile {\n  /**\n   * Create a new virtual file.\n   *\n   * `options` is treated as:\n   *\n   * *   `string` or `Uint8Array` — `{value: options}`\n   * *   `URL` — `{path: options}`\n   * *   `VFile` — shallow copies its data over to the new file\n   * *   `object` — all fields are shallow copied over to the new file\n   *\n   * Path related fields are set in the following order (least specific to\n   * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n   * `dirname`.\n   *\n   * You cannot set `dirname` or `extname` without setting either `history`,\n   * `path`, `basename`, or `stem` too.\n   *\n   * @param {Compatible | null | undefined} [value]\n   *   File value.\n   * @returns\n   *   New instance.\n   */\n  constructor(value) {\n    /** @type {Options | VFile} */\n    let options\n\n    if (!value) {\n      options = {}\n    } else if (isUrl(value)) {\n      options = {path: value}\n    } else if (typeof value === 'string' || isUint8Array(value)) {\n      options = {value}\n    } else {\n      options = value\n    }\n\n    /* eslint-disable no-unused-expressions */\n\n    /**\n     * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n     *\n     * @type {string}\n     */\n    this.cwd = proc.cwd()\n\n    /**\n     * Place to store custom info (default: `{}`).\n     *\n     * It’s OK to store custom data directly on the file but moving it to\n     * `data` is recommended.\n     *\n     * @type {Data}\n     */\n    this.data = {}\n\n    /**\n     * List of file paths the file moved between.\n     *\n     * The first is the original path and the last is the current path.\n     *\n     * @type {Array<string>}\n     */\n    this.history = []\n\n    /**\n     * List of messages associated with the file.\n     *\n     * @type {Array<VFileMessage>}\n     */\n    this.messages = []\n\n    /**\n     * Raw value.\n     *\n     * @type {Value}\n     */\n    this.value\n\n    // The below are non-standard, they are “well-known”.\n    // As in, used in several tools.\n    /**\n     * Source map.\n     *\n     * This type is equivalent to the `RawSourceMap` type from the `source-map`\n     * module.\n     *\n     * @type {Map | null | undefined}\n     */\n    this.map\n\n    /**\n     * Custom, non-string, compiled, representation.\n     *\n     * This is used by unified to store non-string results.\n     * One example is when turning markdown into React nodes.\n     *\n     * @type {unknown}\n     */\n    this.result\n\n    /**\n     * Whether a file was saved to disk.\n     *\n     * This is used by vfile reporters.\n     *\n     * @type {boolean}\n     */\n    this.stored\n    /* eslint-enable no-unused-expressions */\n\n    // Set path related properties in the correct order.\n    let index = -1\n\n    while (++index < order.length) {\n      const prop = order[index]\n\n      // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n      // `vfile`s too.\n      if (\n        prop in options &&\n        options[prop] !== undefined &&\n        options[prop] !== null\n      ) {\n        // @ts-expect-error: TS doesn’t understand basic reality.\n        this[prop] = prop === 'history' ? [...options[prop]] : options[prop]\n      }\n    }\n\n    /** @type {string} */\n    let prop\n\n    // Set non-path related properties.\n    for (prop in options) {\n      // @ts-expect-error: fine to set other things.\n      if (!order.includes(prop)) {\n        // @ts-expect-error: fine to set other things.\n        this[prop] = options[prop]\n      }\n    }\n  }\n\n  /**\n   * Get the basename (including extname) (example: `'index.min.js'`).\n   *\n   * @returns {string | undefined}\n   *   Basename.\n   */\n  get basename() {\n    return typeof this.path === 'string' ? path.basename(this.path) : undefined\n  }\n\n  /**\n   * Set basename (including extname) (`'index.min.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} basename\n   *   Basename.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set basename(basename) {\n    assertNonEmpty(basename, 'basename')\n    assertPart(basename, 'basename')\n    this.path = path.join(this.dirname || '', basename)\n  }\n\n  /**\n   * Get the parent path (example: `'~'`).\n   *\n   * @returns {string | undefined}\n   *   Dirname.\n   */\n  get dirname() {\n    return typeof this.path === 'string' ? path.dirname(this.path) : undefined\n  }\n\n  /**\n   * Set the parent path (example: `'~'`).\n   *\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} dirname\n   *   Dirname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set dirname(dirname) {\n    assertPath(this.basename, 'dirname')\n    this.path = path.join(dirname || '', this.basename)\n  }\n\n  /**\n   * Get the extname (including dot) (example: `'.js'`).\n   *\n   * @returns {string | undefined}\n   *   Extname.\n   */\n  get extname() {\n    return typeof this.path === 'string' ? path.extname(this.path) : undefined\n  }\n\n  /**\n   * Set the extname (including dot) (example: `'.js'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be set if there’s no `path` yet.\n   *\n   * @param {string | undefined} extname\n   *   Extname.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set extname(extname) {\n    assertPart(extname, 'extname')\n    assertPath(this.dirname, 'extname')\n\n    if (extname) {\n      if (extname.codePointAt(0) !== 46 /* `.` */) {\n        throw new Error('`extname` must start with `.`')\n      }\n\n      if (extname.includes('.', 1)) {\n        throw new Error('`extname` cannot contain multiple dots')\n      }\n    }\n\n    this.path = path.join(this.dirname, this.stem + (extname || ''))\n  }\n\n  /**\n   * Get the full path (example: `'~/index.min.js'`).\n   *\n   * @returns {string}\n   *   Path.\n   */\n  get path() {\n    return this.history[this.history.length - 1]\n  }\n\n  /**\n   * Set the full path (example: `'~/index.min.js'`).\n   *\n   * Cannot be nullified.\n   * You can set a file URL (a `URL` object with a `file:` protocol) which will\n   * be turned into a path with `url.fileURLToPath`.\n   *\n   * @param {URL | string} path\n   *   Path.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set path(path) {\n    if (isUrl(path)) {\n      path = urlToPath(path)\n    }\n\n    assertNonEmpty(path, 'path')\n\n    if (this.path !== path) {\n      this.history.push(path)\n    }\n  }\n\n  /**\n   * Get the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * @returns {string | undefined}\n   *   Stem.\n   */\n  get stem() {\n    return typeof this.path === 'string'\n      ? path.basename(this.path, this.extname)\n      : undefined\n  }\n\n  /**\n   * Set the stem (basename w/o extname) (example: `'index.min'`).\n   *\n   * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n   * on windows).\n   * Cannot be nullified (use `file.path = file.dirname` instead).\n   *\n   * @param {string} stem\n   *   Stem.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  set stem(stem) {\n    assertNonEmpty(stem, 'stem')\n    assertPart(stem, 'stem')\n    this.path = path.join(this.dirname || '', stem + (this.extname || ''))\n  }\n\n  // Normal prototypal methods.\n  /**\n   * Create a fatal message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `true` (error; file not usable)\n   * and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {never}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {never}\n   *   Never.\n   * @throws {VFileMessage}\n   *   Message.\n   */\n  fail(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = true\n\n    throw message\n  }\n\n  /**\n   * Create an info message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `undefined` (info; change\n   * likely not needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  info(causeOrReason, optionsOrParentOrPlace, origin) {\n    // @ts-expect-error: the overloads are fine.\n    const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n    message.fatal = undefined\n\n    return message\n  }\n\n  /**\n   * Create a message for `reason` associated with the file.\n   *\n   * The `fatal` field of the message is set to `false` (warning; change may be\n   * needed) and the `file` field is set to the current file path.\n   * The message is added to the `messages` field on `file`.\n   *\n   * > 🪦 **Note**: also has obsolete signatures.\n   *\n   * @overload\n   * @param {string} reason\n   * @param {MessageOptions | null | undefined} [options]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {string} reason\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Node | NodeLike | null | undefined} parent\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {Point | Position | null | undefined} place\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @overload\n   * @param {Error | VFileMessage} cause\n   * @param {string | null | undefined} [origin]\n   * @returns {VFileMessage}\n   *\n   * @param {Error | VFileMessage | string} causeOrReason\n   *   Reason for message, should use markdown.\n   * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n   *   Configuration (optional).\n   * @param {string | null | undefined} [origin]\n   *   Place in code where the message originates (example:\n   *   `'my-package:my-rule'` or `'my-rule'`).\n   * @returns {VFileMessage}\n   *   Message.\n   */\n  message(causeOrReason, optionsOrParentOrPlace, origin) {\n    const message = new VFileMessage(\n      // @ts-expect-error: the overloads are fine.\n      causeOrReason,\n      optionsOrParentOrPlace,\n      origin\n    )\n\n    if (this.path) {\n      message.name = this.path + ':' + message.name\n      message.file = this.path\n    }\n\n    message.fatal = false\n\n    this.messages.push(message)\n\n    return message\n  }\n\n  /**\n   * Serialize the file.\n   *\n   * > **Note**: which encodings are supported depends on the engine.\n   * > For info on Node.js, see:\n   * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n   *\n   * @param {string | null | undefined} [encoding='utf8']\n   *   Character encoding to understand `value` as when it’s a `Uint8Array`\n   *   (default: `'utf-8'`).\n   * @returns {string}\n   *   Serialized file.\n   */\n  toString(encoding) {\n    if (this.value === undefined) {\n      return ''\n    }\n\n    if (typeof this.value === 'string') {\n      return this.value\n    }\n\n    const decoder = new TextDecoder(encoding || undefined)\n    return decoder.decode(this.value)\n  }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n *   File path part.\n * @param {string} name\n *   Part name.\n * @returns {undefined}\n *   Nothing.\n */\nfunction assertPart(part, name) {\n  if (part && part.includes(path.sep)) {\n    throw new Error(\n      '`' + name + '` cannot be a path: did not expect `' + path.sep + '`'\n    )\n  }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n *   Thing.\n * @param {string} name\n *   Part name.\n * @returns {asserts part is string}\n *   Nothing.\n */\nfunction assertNonEmpty(part, name) {\n  if (!part) {\n    throw new Error('`' + name + '` cannot be empty')\n  }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n *   Path.\n * @param {string} name\n *   Dependency name.\n * @returns {asserts path is string}\n *   Nothing.\n */\nfunction assertPath(path, name) {\n  if (!path) {\n    throw new Error('Setting `' + name + '` requires `path` to be set too')\n  }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","export const CallableInstance =\n  /**\n   * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n   */\n  (\n    /** @type {unknown} */\n    (\n      /**\n       * @this {Function}\n       * @param {string | symbol} property\n       * @returns {(...parameters: Array<unknown>) => unknown}\n       */\n      function (property) {\n        const self = this\n        const constr = self.constructor\n        const proto = /** @type {Record<string | symbol, Function>} */ (\n          // Prototypes do exist.\n          // type-coverage:ignore-next-line\n          constr.prototype\n        )\n        const func = proto[property]\n        /** @type {(...parameters: Array<unknown>) => unknown} */\n        const apply = function () {\n          return func.apply(apply, arguments)\n        }\n\n        Object.setPrototypeOf(apply, proto)\n\n        const names = Object.getOwnPropertyNames(func)\n\n        for (const p of names) {\n          const descriptor = Object.getOwnPropertyDescriptor(func, p)\n          if (descriptor) Object.defineProperty(apply, p, descriptor)\n        }\n\n        return apply\n      }\n    )\n  )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n *   Acceptable results from compilers.\n *\n *   To register custom results, add them to\n *   {@link CompileResultMap `CompileResultMap`}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n *   The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n *   A **compiler** handles the compiling of a syntax tree to something else\n *   (in most cases, text) (TypeScript type).\n *\n *   It is used in the stringify phase and called with a {@link Node `Node`}\n *   and {@link VFile `VFile`} representation of the document to compile.\n *   It should return the textual representation of the given tree (typically\n *   `string`).\n *\n *   > 👉 **Note**: unified typically compiles by serializing: most compilers\n *   > return `string` (or `Uint8Array`).\n *   > Some compilers, such as the one configured with\n *   > [`rehype-react`][rehype-react], return other values (in this case, a\n *   > React tree).\n *   > If you’re using a compiler that doesn’t serialize, expect different\n *   > result values.\n *   >\n *   > To register custom results in TypeScript, add them to\n *   > {@link CompileResultMap `CompileResultMap`}.\n *\n *   [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n *   Tree to compile.\n * @param {VFile} file\n *   File associated with `tree`.\n * @returns {Result}\n *   New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n *   something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The node that the parser yields (default: `Node`)\n * @callback Parser\n *   A **parser** handles the parsing of text to a syntax tree.\n *\n *   It is used in the parse phase and is called with a `string` and\n *   {@link VFile `VFile`} of the document to parse.\n *   It must return the syntax tree representation of the given file\n *   ({@link Node `Node`}).\n * @param {string} document\n *   Document to parse.\n * @param {VFile} file\n *   File associated with `document`.\n * @returns {Tree}\n *   Node representing the given file.\n */\n\n/**\n * @typedef {(\n *   Plugin<Array<any>, any, any> |\n *   PluginTuple<Array<any>, any, any> |\n *   Preset\n * )} Pluggable\n *   Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n *   List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n//  <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n *   Value that is expected as input (default: `Node`).\n *\n *   *   If the plugin returns a {@link Transformer `Transformer`}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@link Parser `Parser`}, this should be\n *       `string`.\n *   *   If the plugin sets a {@link Compiler `Compiler`}, this should be the\n *       node it expects.\n * @template [Output=Input]\n *   Value that is yielded as output (default: `Input`).\n *\n *   *   If the plugin returns a {@link Transformer `Transformer`}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@link Parser `Parser`}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@link Compiler `Compiler`}, this should be\n *       result it yields.\n * @typedef {(\n *   (this: Processor, ...parameters: PluginParameters) =>\n *     Input extends string ? // Parser.\n *        Output extends Node | undefined ? undefined | void : never :\n *     Output extends CompileResults ? // Compiler.\n *        Input extends Node | undefined ? undefined | void : never :\n *     Transformer<\n *       Input extends Node ? Input : Node,\n *       Output extends Node ? Output : Node\n *     > | undefined | void\n * )} Plugin\n *   Single plugin.\n *\n *   Plugins configure the processors they are applied on in the following\n *   ways:\n *\n *   *   they change the processor, such as the parser, the compiler, or by\n *       configuring data\n *   *   they specify how to handle trees and files\n *\n *   In practice, they are functions that can receive options and configure the\n *   processor (`this`).\n *\n *   > 👉 **Note**: plugins are called when the processor is *frozen*, not when\n *   > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n *   Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n *   Value that is expected as input (optional).\n *\n *   *   If the plugin returns a {@link Transformer `Transformer`}, this\n *       should be the node it expects.\n *   *   If the plugin sets a {@link Parser `Parser`}, this should be\n *       `string`.\n *   *   If the plugin sets a {@link Compiler `Compiler`}, this should be the\n *       node it expects.\n * @template [Output=undefined] (optional).\n *   Value that is yielded as output.\n *\n *   *   If the plugin returns a {@link Transformer `Transformer`}, this\n *       should be the node that that yields.\n *   *   If the plugin sets a {@link Parser `Parser`}, this should be the\n *       node that it yields.\n *   *   If the plugin sets a {@link Compiler `Compiler`}, this should be\n *       result it yields.\n * @typedef {(\n *   [\n *     plugin: Plugin<TupleParameters, Input, Output>,\n *     ...parameters: TupleParameters\n *   ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n *   Sharable configuration.\n *\n *   They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n *   List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n *   Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n *   The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n *   Callback called when the process is done.\n *\n *   Called with either an error or a result.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {File | undefined} [file]\n *   Processed file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n *   The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n *   Callback called when transformers are done.\n *\n *   Called with either an error or results.\n * @param {Error | undefined} [error]\n *   Fatal error (optional).\n * @param {Tree | undefined} [tree]\n *   Transformed tree (optional).\n * @param {VFile | undefined} [file]\n *   File (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n *   Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n *   Callback passed to transforms.\n *\n *   If the signature of a `transformer` accepts a third argument, the\n *   transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n *   Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n *   New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n *   New, changed, file (optional).\n * @returns {undefined}\n *   Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n *   Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n *   Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n *   Transformers handle syntax trees and files.\n *\n *   They are functions that are called each time a syntax tree and file are\n *   passed through the run phase.\n *   When an error occurs in them (either because it’s thrown, returned,\n *   rejected, or passed to `next`), the process stops.\n *\n *   The run phase is handled by [`trough`][trough], see its documentation for\n *   the exact semantics of these functions.\n *\n *   > 👉 **Note**: you should likely ignore `next`: don’t accept it.\n *   > it supports callback-style async work.\n *   > But promises are likely easier to reason about.\n *\n *   [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n *   Tree to handle.\n * @param {VFile} file\n *   File to handle.\n * @param {TransformCallback<Output>} next\n *   Callback.\n * @returns {(\n *   Promise<Output | undefined | void> |\n *   Promise<never> | // For some reason this is needed separately.\n *   Output |\n *   Error |\n *   undefined |\n *   void\n * )}\n *   If you accept `next`, nothing.\n *   Otherwise:\n *\n *   *   `Error` — fatal error to stop the process\n *   *   `Promise<undefined>` or `undefined` — the next transformer keeps using\n *       same tree\n *   *   `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n *   Output of `parse`.\n * @template {Node | undefined} HeadTree\n *   Input for `run`.\n * @template {Node | undefined} TailTree\n *   Output for `run`.\n * @template {Node | undefined} CompileTree\n *   Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n *   Output of `stringify`.\n * @template {Node | string | undefined} Input\n *   Input of plugin.\n * @template Output\n *   Output of plugin (optional).\n * @typedef {(\n *   Input extends string\n *     ? Output extends Node | undefined\n *       ? // Parser.\n *         Processor<\n *           Output extends undefined ? ParseTree : Output,\n *           HeadTree,\n *           TailTree,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Output extends CompileResults\n *     ? Input extends Node | undefined\n *       ? // Compiler.\n *         Processor<\n *           ParseTree,\n *           HeadTree,\n *           TailTree,\n *           Input extends undefined ? CompileTree : Input,\n *           Output extends undefined ? CompileResult : Output\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : Input extends Node | undefined\n *     ? Output extends Node | undefined\n *       ? // Transform.\n *         Processor<\n *           ParseTree,\n *           HeadTree extends undefined ? Input : HeadTree,\n *           Output extends undefined ? TailTree : Output,\n *           CompileTree,\n *           CompileResult\n *         >\n *       : // Unknown.\n *         Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n *     : // Unknown.\n *       Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n *   Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n *   Node type that the transformer yields.\n * @typedef {(\n *   Result extends Value | undefined ?\n *     VFile :\n *     VFile & {result: Result}\n *   )} VFileWithOutput\n *   Type to generate a {@link VFile `VFile`} corresponding to a compiler result.\n *\n *   If a result that is not acceptable on a `VFile` is used, that will\n *   be stored on the `result` field of {@link VFile `VFile`}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n *   Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n *   Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n *   Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n *   Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n *   Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n  /**\n   * Create a processor.\n   */\n  constructor() {\n    // If `Processor()` is called (w/o new), `copy` is called instead.\n    super('copy')\n\n    /**\n     * Compiler to use (deprecated).\n     *\n     * @deprecated\n     *   Use `compiler` instead.\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.Compiler = undefined\n\n    /**\n     * Parser to use (deprecated).\n     *\n     * @deprecated\n     *   Use `parser` instead.\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.Parser = undefined\n\n    // Note: the following fields are considered private.\n    // However, they are needed for tests, and TSC generates an untyped\n    // `private freezeIndex` field for, which trips `type-coverage` up.\n    // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n    /**\n     * Internal list of configured plugins.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Array<PluginTuple<Array<unknown>>>}\n     */\n    this.attachers = []\n\n    /**\n     * Compiler to use.\n     *\n     * @type {(\n     *   Compiler<\n     *     CompileTree extends undefined ? Node : CompileTree,\n     *     CompileResult extends undefined ? CompileResults : CompileResult\n     *   > |\n     *   undefined\n     * )}\n     */\n    this.compiler = undefined\n\n    /**\n     * Internal state to track where we are while freezing.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {number}\n     */\n    this.freezeIndex = -1\n\n    /**\n     * Internal state to track whether we’re frozen.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {boolean | undefined}\n     */\n    this.frozen = undefined\n\n    /**\n     * Internal state.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Data}\n     */\n    this.namespace = {}\n\n    /**\n     * Parser to use.\n     *\n     * @type {(\n     *   Parser<ParseTree extends undefined ? Node : ParseTree> |\n     *   undefined\n     * )}\n     */\n    this.parser = undefined\n\n    /**\n     * Internal list of configured transformers.\n     *\n     * @deprecated\n     *   This is a private internal property and should not be used.\n     * @type {Pipeline}\n     */\n    this.transformers = trough()\n  }\n\n  /**\n   * Copy a processor.\n   *\n   * @deprecated\n   *   This is a private internal method and should not be used.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   New *unfrozen* processor ({@link Processor `Processor`}) that is\n   *   configured to work the same as its ancestor.\n   *   When the descendant processor is configured in the future it does not\n   *   affect the ancestral processor.\n   */\n  copy() {\n    // Cast as the type parameters will be the same after attaching.\n    const destination =\n      /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n        new Processor()\n      )\n    let index = -1\n\n    while (++index < this.attachers.length) {\n      const attacher = this.attachers[index]\n      destination.use(...attacher)\n    }\n\n    destination.data(extend(true, {}, this.namespace))\n\n    return destination\n  }\n\n  /**\n   * Configure the processor with info available to all plugins.\n   * Information is stored in an object.\n   *\n   * Typically, options can be given to a specific plugin, but sometimes it\n   * makes sense to have information shared with several plugins.\n   * For example, a list of HTML elements that are self-closing, which is\n   * needed during all phases.\n   *\n   * > 👉 **Note**: setting information cannot occur on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * > 👉 **Note**: to register custom data in TypeScript, augment the\n   * > {@link Data `Data`} interface.\n   *\n   * @example\n   *   This example show how to get and set info:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   const processor = unified().data('alpha', 'bravo')\n   *\n   *   processor.data('alpha') // => 'bravo'\n   *\n   *   processor.data() // => {alpha: 'bravo'}\n   *\n   *   processor.data({charlie: 'delta'})\n   *\n   *   processor.data() // => {charlie: 'delta'}\n   *   ```\n   *\n   * @template {keyof Data} Key\n   *\n   * @overload\n   * @returns {Data}\n   *\n   * @overload\n   * @param {Data} dataset\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Key} key\n   * @returns {Data[Key]}\n   *\n   * @overload\n   * @param {Key} key\n   * @param {Data[Key]} value\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @param {Data | Key} [key]\n   *   Key to get or set, or entire dataset to set, or nothing to get the\n   *   entire dataset (optional).\n   * @param {Data[Key]} [value]\n   *   Value to set (optional).\n   * @returns {unknown}\n   *   The current processor when setting, the value at `key` when getting, or\n   *   the entire dataset when getting without key.\n   */\n  data(key, value) {\n    if (typeof key === 'string') {\n      // Set `key`.\n      if (arguments.length === 2) {\n        assertUnfrozen('data', this.frozen)\n        this.namespace[key] = value\n        return this\n      }\n\n      // Get `key`.\n      return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n    }\n\n    // Set space.\n    if (key) {\n      assertUnfrozen('data', this.frozen)\n      this.namespace = key\n      return this\n    }\n\n    // Get space.\n    return this.namespace\n  }\n\n  /**\n   * Freeze a processor.\n   *\n   * Frozen processors are meant to be extended and not to be configured\n   * directly.\n   *\n   * When a processor is frozen it cannot be unfrozen.\n   * New processors working the same way can be created by calling the\n   * processor.\n   *\n   * It’s possible to freeze processors explicitly by calling `.freeze()`.\n   * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n   * `.stringify()`, `.process()`, or `.processSync()` are called.\n   *\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   The current processor.\n   */\n  freeze() {\n    if (this.frozen) {\n      return this\n    }\n\n    // Cast so that we can type plugins easier.\n    // Plugins are supposed to be usable on different processors, not just on\n    // this exact processor.\n    const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n    while (++this.freezeIndex < this.attachers.length) {\n      const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n      if (options[0] === false) {\n        continue\n      }\n\n      if (options[0] === true) {\n        options[0] = undefined\n      }\n\n      const transformer = attacher.call(self, ...options)\n\n      if (typeof transformer === 'function') {\n        this.transformers.use(transformer)\n      }\n    }\n\n    this.frozen = true\n    this.freezeIndex = Number.POSITIVE_INFINITY\n\n    return this\n  }\n\n  /**\n   * Parse text to a syntax tree.\n   *\n   * > 👉 **Note**: `parse` freezes the processor if not already *frozen*.\n   *\n   * > 👉 **Note**: `parse` performs the parse phase, not the run phase or other\n   * > phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   file to parse (optional); typically `string` or `VFile`; any value\n   *   accepted as `x` in `new VFile(x)`.\n   * @returns {ParseTree extends undefined ? Node : ParseTree}\n   *   Syntax tree representing `file`.\n   */\n  parse(file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const parser = this.parser || this.Parser\n    assertParser('parse', parser)\n    return parser(String(realFile), realFile)\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * > 👉 **Note**: `process` freezes the processor if not already *frozen*.\n   *\n   * > 👉 **Note**: `process` performs the parse, run, and stringify phases.\n   *\n   * @overload\n   * @param {Compatible | undefined} file\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<VFileWithOutput<CompileResult>>}\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`]; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n   *   Callback (optional).\n   * @returns {Promise<VFile> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise a promise, rejected with a fatal error or resolved with the\n   *   processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > 👉 **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@link CompileResultMap `CompileResultMap`}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  process(file, done) {\n    const self = this\n\n    this.freeze()\n    assertParser('process', this.parser || this.Parser)\n    assertCompiler('process', this.compiler || this.Compiler)\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n     * @param {(error: Error | undefined) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      const realFile = vfile(file)\n      // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n      // input of the first transform).\n      const parseTree =\n        /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n          /** @type {unknown} */ (self.parse(realFile))\n        )\n\n      self.run(parseTree, realFile, function (error, tree, file) {\n        if (error || !tree || !file) {\n          return realDone(error)\n        }\n\n        // Assume `TailTree` (the output of the last transform) matches\n        // `CompileTree` (the input of the compiler).\n        const compileTree =\n          /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n            /** @type {unknown} */ (tree)\n          )\n\n        const compileResult = self.stringify(compileTree, file)\n\n        if (looksLikeAValue(compileResult)) {\n          file.value = compileResult\n        } else {\n          file.result = compileResult\n        }\n\n        realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n      })\n\n      /**\n       * @param {Error | undefined} error\n       * @param {VFileWithOutput<CompileResult> | undefined} [file]\n       * @returns {undefined}\n       */\n      function realDone(error, file) {\n        if (error || !file) {\n          reject(error)\n        } else if (resolve) {\n          resolve(file)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Process the given file as configured on the processor.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > 👉 **Note**: `processSync` freezes the processor if not already *frozen*.\n   *\n   * > 👉 **Note**: `processSync` performs the parse, run, and stringify phases.\n   *\n   * @param {Compatible | undefined} [file]\n   *   File (optional); typically `string` or `VFile`; any value accepted as\n   *   `x` in `new VFile(x)`.\n   * @returns {VFileWithOutput<CompileResult>}\n   *   The processed file.\n   *\n   *   The parsed, transformed, and compiled value is available at\n   *   `file.value` (see note).\n   *\n   *   > 👉 **Note**: unified typically compiles by serializing: most\n   *   > compilers return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@link CompileResultMap `CompileResultMap`}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  processSync(file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {VFileWithOutput<CompileResult> | undefined} */\n    let result\n\n    this.freeze()\n    assertParser('processSync', this.parser || this.Parser)\n    assertCompiler('processSync', this.compiler || this.Compiler)\n\n    this.process(file, realDone)\n    assertDone('processSync', 'process', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n\n    return result\n\n    /**\n     * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n     */\n    function realDone(error, file) {\n      complete = true\n      bail(error)\n      result = file\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * > 👉 **Note**: `run` freezes the processor if not already *frozen*.\n   *\n   * > 👉 **Note**: `run` performs the run phase, not other phases.\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} file\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n   * @returns {undefined}\n   *\n   * @overload\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   * @param {Compatible | undefined} [file]\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {(\n   *   RunCallback<TailTree extends undefined ? Node : TailTree> |\n   *   Compatible\n   * )} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n   *   Callback (optional).\n   * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n   *   Nothing if `done` is given.\n   *   Otherwise, a promise rejected with a fatal error or resolved with the\n   *   transformed tree.\n   */\n  run(tree, file, done) {\n    assertNode(tree)\n    this.freeze()\n\n    const transformers = this.transformers\n\n    if (!done && typeof file === 'function') {\n      done = file\n      file = undefined\n    }\n\n    return done ? executor(undefined, done) : new Promise(executor)\n\n    // Note: `void`s needed for TS.\n    /**\n     * @param {(\n     *   ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n     *   undefined\n     * )} resolve\n     * @param {(error: Error) => undefined | void} reject\n     * @returns {undefined}\n     */\n    function executor(resolve, reject) {\n      assert(\n        typeof file !== 'function',\n        '`file` can’t be a `done` anymore, we checked'\n      )\n      const realFile = vfile(file)\n      transformers.run(tree, realFile, realDone)\n\n      /**\n       * @param {Error | undefined} error\n       * @param {Node} outputTree\n       * @param {VFile} file\n       * @returns {undefined}\n       */\n      function realDone(error, outputTree, file) {\n        const resultingTree =\n          /** @type {TailTree extends undefined ? Node : TailTree} */ (\n            outputTree || tree\n          )\n\n        if (error) {\n          reject(error)\n        } else if (resolve) {\n          resolve(resultingTree)\n        } else {\n          assert(done, '`done` is defined if `resolve` is not')\n          done(undefined, resultingTree, file)\n        }\n      }\n    }\n  }\n\n  /**\n   * Run *transformers* on a syntax tree.\n   *\n   * An error is thrown if asynchronous transforms are configured.\n   *\n   * > 👉 **Note**: `runSync` freezes the processor if not already *frozen*.\n   *\n   * > 👉 **Note**: `runSync` performs the run phase, not other phases.\n   *\n   * @param {HeadTree extends undefined ? Node : HeadTree} tree\n   *   Tree to transform and inspect.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {TailTree extends undefined ? Node : TailTree}\n   *   Transformed tree.\n   */\n  runSync(tree, file) {\n    /** @type {boolean} */\n    let complete = false\n    /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n    let result\n\n    this.run(tree, file, realDone)\n\n    assertDone('runSync', 'run', complete)\n    assert(result, 'we either bailed on an error or have a tree')\n    return result\n\n    /**\n     * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n     */\n    function realDone(error, tree) {\n      bail(error)\n      result = tree\n      complete = true\n    }\n  }\n\n  /**\n   * Compile a syntax tree.\n   *\n   * > 👉 **Note**: `stringify` freezes the processor if not already *frozen*.\n   *\n   * > 👉 **Note**: `stringify` performs the stringify phase, not the run phase\n   * > or other phases.\n   *\n   * @param {CompileTree extends undefined ? Node : CompileTree} tree\n   *   Tree to compile.\n   * @param {Compatible | undefined} [file]\n   *   File associated with `node` (optional); any value accepted as `x` in\n   *   `new VFile(x)`.\n   * @returns {CompileResult extends undefined ? Value : CompileResult}\n   *   Textual representation of the tree (see note).\n   *\n   *   > 👉 **Note**: unified typically compiles by serializing: most compilers\n   *   > return `string` (or `Uint8Array`).\n   *   > Some compilers, such as the one configured with\n   *   > [`rehype-react`][rehype-react], return other values (in this case, a\n   *   > React tree).\n   *   > If you’re using a compiler that doesn’t serialize, expect different\n   *   > result values.\n   *   >\n   *   > To register custom results in TypeScript, add them to\n   *   > {@link CompileResultMap `CompileResultMap`}.\n   *\n   *   [rehype-react]: https://github.com/rehypejs/rehype-react\n   */\n  stringify(tree, file) {\n    this.freeze()\n    const realFile = vfile(file)\n    const compiler = this.compiler || this.Compiler\n    assertCompiler('stringify', compiler)\n    assertNode(tree)\n\n    return compiler(tree, realFile)\n  }\n\n  /**\n   * Configure the processor to use a plugin, a list of usable values, or a\n   * preset.\n   *\n   * If the processor is already using a plugin, the previous plugin\n   * configuration is changed based on the options that are passed in.\n   * In other words, the plugin is not added a second time.\n   *\n   * > 👉 **Note**: `use` cannot be called on *frozen* processors.\n   * > Call the processor first to create a new unfrozen processor.\n   *\n   * @example\n   *   There are many ways to pass plugins to `.use()`.\n   *   This example gives an overview:\n   *\n   *   ```js\n   *   import {unified} from 'unified'\n   *\n   *   unified()\n   *     // Plugin with options:\n   *     .use(pluginA, {x: true, y: true})\n   *     // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n   *     .use(pluginA, {y: false, z: true})\n   *     // Plugins:\n   *     .use([pluginB, pluginC])\n   *     // Two plugins, the second with options:\n   *     .use([pluginD, [pluginE, {}]])\n   *     // Preset with plugins and settings:\n   *     .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n   *     // Settings only:\n   *     .use({settings: {position: false}})\n   *   ```\n   *\n   * @template {Array<unknown>} [Parameters=[]]\n   * @template {Node | string | undefined} [Input=undefined]\n   * @template [Output=Input]\n   *\n   * @overload\n   * @param {Preset | null | undefined} [preset]\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {PluggableList} list\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *\n   * @overload\n   * @param {Plugin<Parameters, Input, Output>} plugin\n   * @param {...(Parameters | [boolean])} parameters\n   * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n   *\n   * @param {PluggableList | Plugin | Preset | null | undefined} value\n   *   Usable value.\n   * @param {...unknown} parameters\n   *   Parameters, when a plugin is given as a usable value.\n   * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n   *   Current processor.\n   */\n  use(value, ...parameters) {\n    const attachers = this.attachers\n    const namespace = this.namespace\n\n    assertUnfrozen('use', this.frozen)\n\n    if (value === null || value === undefined) {\n      // Empty.\n    } else if (typeof value === 'function') {\n      addPlugin(value, parameters)\n    } else if (typeof value === 'object') {\n      if (Array.isArray(value)) {\n        addList(value)\n      } else {\n        addPreset(value)\n      }\n    } else {\n      throw new TypeError('Expected usable value, not `' + value + '`')\n    }\n\n    return this\n\n    /**\n     * @param {Pluggable} value\n     * @returns {undefined}\n     */\n    function add(value) {\n      if (typeof value === 'function') {\n        addPlugin(value, [])\n      } else if (typeof value === 'object') {\n        if (Array.isArray(value)) {\n          const [plugin, ...parameters] =\n            /** @type {PluginTuple<Array<unknown>>} */ (value)\n          addPlugin(plugin, parameters)\n        } else {\n          addPreset(value)\n        }\n      } else {\n        throw new TypeError('Expected usable value, not `' + value + '`')\n      }\n    }\n\n    /**\n     * @param {Preset} result\n     * @returns {undefined}\n     */\n    function addPreset(result) {\n      if (!('plugins' in result) && !('settings' in result)) {\n        throw new Error(\n          'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n        )\n      }\n\n      addList(result.plugins)\n\n      if (result.settings) {\n        namespace.settings = extend(true, namespace.settings, result.settings)\n      }\n    }\n\n    /**\n     * @param {PluggableList | null | undefined} plugins\n     * @returns {undefined}\n     */\n    function addList(plugins) {\n      let index = -1\n\n      if (plugins === null || plugins === undefined) {\n        // Empty.\n      } else if (Array.isArray(plugins)) {\n        while (++index < plugins.length) {\n          const thing = plugins[index]\n          add(thing)\n        }\n      } else {\n        throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n      }\n    }\n\n    /**\n     * @param {Plugin} plugin\n     * @param {Array<unknown>} parameters\n     * @returns {undefined}\n     */\n    function addPlugin(plugin, parameters) {\n      let index = -1\n      let entryIndex = -1\n\n      while (++index < attachers.length) {\n        if (attachers[index][0] === plugin) {\n          entryIndex = index\n          break\n        }\n      }\n\n      if (entryIndex === -1) {\n        attachers.push([plugin, ...parameters])\n      }\n      // Only set if there was at least a `primary` value, otherwise we’d change\n      // `arguments.length`.\n      else if (parameters.length > 0) {\n        let [primary, ...rest] = parameters\n        const currentPrimary = attachers[entryIndex][1]\n        if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n          primary = extend(true, currentPrimary, primary)\n        }\n\n        attachers[entryIndex] = [plugin, primary, ...rest]\n      }\n    }\n  }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n *   This example shows how a new processor can be created (from `remark`) and linked\n *   to **stdin**(4) and **stdout**(4).\n *\n *   ```js\n *   import process from 'node:process'\n *   import concatStream from 'concat-stream'\n *   import {remark} from 'remark'\n *\n *   process.stdin.pipe(\n *     concatStream(function (buf) {\n *       process.stdout.write(String(remark().processSync(buf)))\n *     })\n *   )\n *   ```\n *\n * @returns\n *   New *unfrozen* processor (`processor`).\n *\n *   This processor is configured to work the same as its ancestor.\n *   When the descendant processor is configured in the future it does not\n *   affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `parser`')\n  }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n  if (typeof value !== 'function') {\n    throw new TypeError('Cannot `' + name + '` without `compiler`')\n  }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n  if (frozen) {\n    throw new Error(\n      'Cannot call `' +\n        name +\n        '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n    )\n  }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n  // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n  // type-coverage:ignore-next-line\n  if (!isPlainObj(node) || typeof node.type !== 'string') {\n    throw new TypeError('Expected node, got `' + node + '`')\n    // Fine.\n  }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n  if (!complete) {\n    throw new Error(\n      '`' + name + '` finished async. Use `' + asyncName + '` instead'\n    )\n  }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n  return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'message' in value &&\n      'messages' in value\n  )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n  return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n *   thing.\n * @returns {value is Uint8Array}\n *   Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n  return Boolean(\n    value &&\n      typeof value === 'object' &&\n      'byteLength' in value &&\n      'byteOffset' in value\n  )\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s (default: `true`).\n * @property {boolean | null | undefined} [includeHtml=true]\n *   Whether to use `value` of HTML (default: `true`).\n */\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} [value]\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const settings = options || emptyOptions\n  const includeImageAlt =\n    typeof settings.includeImageAlt === 'boolean'\n      ? settings.includeImageAlt\n      : true\n  const includeHtml =\n    typeof settings.includeHtml === 'boolean' ? settings.includeHtml : true\n\n  return one(value, includeImageAlt, includeHtml)\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt, includeHtml) {\n  if (node(value)) {\n    if ('value' in value) {\n      return value.type === 'html' && !includeHtml ? '' : value.value\n    }\n\n    if (includeImageAlt && 'alt' in value && value.alt) {\n      return value.alt\n    }\n\n    if ('children' in value) {\n      return all(value.children, includeImageAlt, includeHtml)\n    }\n  }\n\n  if (Array.isArray(value)) {\n    return all(value, includeImageAlt, includeHtml)\n  }\n\n  return ''\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @param {boolean} includeHtml\n *   Include HTML.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt, includeHtml) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt, includeHtml)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Nodes}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {number} start\n *   Index to remove/insert at (can be negative).\n * @param {number} remove\n *   Number of items to remove.\n * @param {Array<T>} items\n *   Items to inject into `list`.\n * @returns {undefined}\n *   Nothing.\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {Array<unknown>} */\n  let parameters\n\n  // Make start between zero and `end` (included).\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n  remove = remove > 0 ? remove : 0\n\n  // No need to chunk the items if there’s only a couple (10k) items.\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove)\n    // @ts-expect-error Hush, it’s fine.\n    list.splice(...parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) list.splice(start, remove)\n\n    // Insert the items in chunks to not cause stack overflows.\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0)\n      // @ts-expect-error Hush, it’s fine.\n      list.splice(...parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n *   Item type.\n * @param {Array<T>} list\n *   List to operate on.\n * @param {Array<T>} items\n *   Items to add to `list`.\n * @returns {Array<T>}\n *   Either `list` or `items`.\n */\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n  return items\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Handles} Handles\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine multiple syntax extensions into one.\n *\n * @param {Array<Extension>} extensions\n *   List of syntax extensions.\n * @returns {NormalizedExtension}\n *   A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all\n *   Extension to merge into.\n * @param {Extension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {keyof Extension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    /** @type {Record<string, unknown>} */\n    const left = maybe || (all[hook] = {})\n    /** @type {Record<string, unknown> | undefined} */\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    if (right) {\n      for (code in right) {\n        if (!hasOwnProperty.call(left, code)) left[code] = []\n        const value = right[code]\n        constructs(\n          // @ts-expect-error Looks like a list.\n          left[code],\n          Array.isArray(value) ? value : value ? [value] : []\n        )\n      }\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {Array<unknown>} existing\n * @param {Array<unknown>} list\n * @returns {undefined}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {Array<unknown>} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine multiple HTML extensions into one.\n *\n * @param {Array<HtmlExtension>} htmlExtensions\n *   List of HTML extensions.\n * @returns {HtmlExtension}\n *   A single combined HTML extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all\n *   Extension to merge into.\n * @param {HtmlExtension} extension\n *   Extension to merge.\n * @returns {undefined}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {keyof HtmlExtension} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {keyof Handles} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        // @ts-expect-error assume document vs regular handler are managed correctly.\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n *   Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base);\n  if (\n  // C0 except for HT, LF, FF, CR, space.\n  code < 9 || code === 11 || code > 13 && code < 32 ||\n  // Control character (DEL) of C0, and C1 controls.\n  code > 126 && code < 160 ||\n  // Lone high surrogates and low surrogates.\n  code > 55_295 && code < 57_344 ||\n  // Noncharacters.\n  code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n  (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n  // Out of range\n  code > 1_114_111) {\n    return \"\\uFFFD\";\n  }\n  return String.fromCodePoint(code);\n}","/**\n * Normalize an identifier (as found in references, definitions).\n *\n * Collapses markdown whitespace, trim, and then lower- and uppercase.\n *\n * Some characters are considered “uppercase”, such as U+03F4 (`ϴ`), but if their\n * lowercase counterpart (U+03B8 (`θ`)) is uppercased will result in a different\n * uppercase character (U+0398 (`Θ`)).\n * So, to get a canonical form, we perform both lower- and uppercase.\n *\n * Using uppercase last makes sure keys will never interact with default\n * prototypal values (such as `constructor`): nothing in the prototype of\n * `Object` is uppercase.\n *\n * @param {string} value\n *   Identifier to normalize.\n * @returns {string}\n *   Normalized identifier.\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value\n      // Collapse markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ')\n      // Trim.\n      .replace(/^ | $/g, '')\n      // Some characters are considered “uppercase”, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nconst unicodePunctuationInternal = regexCheck(/\\p{P}/u)\n\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  )\n}\n\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiDigit = regexCheck(/\\d/)\n\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2\n}\n\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32)\n}\n\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32\n}\n\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param {Code} code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport function unicodePunctuation(code) {\n  return asciiPunctuation(code) || unicodePunctuationInternal(code)\n}\n\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n *\n * @param code\n *   Code.\n * @returns {boolean}\n *   Whether it matches.\n */\nexport const unicodeWhitespace = regexCheck(/\\s/)\n\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => boolean}\n */\nfunction regexCheck(regex) {\n  return check\n\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code\n   *   Character code.\n   * @returns {boolean}\n   *   Whether the character code matches the bound regex.\n   */\n  function check(code) {\n    return code !== null && code > -1 && regex.test(String.fromCharCode(code))\n  }\n}\n","import {asciiAlphanumeric} from 'micromark-util-character'\nimport {encode} from 'micromark-util-encode'\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n *   URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n *   Allowed protocols.\n * @returns {string}\n *   Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n  const value = encode(normalizeUri(url || ''))\n  if (!protocol) {\n    return value\n  }\n  const colon = value.indexOf(':')\n  const questionMark = value.indexOf('?')\n  const numberSign = value.indexOf('#')\n  const slash = value.indexOf('/')\n  if (\n    // If there is no protocol, it’s relative.\n    colon < 0 ||\n    // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n    (slash > -1 && colon > slash) ||\n    (questionMark > -1 && colon > questionMark) ||\n    (numberSign > -1 && colon > numberSign) ||\n    // It is a protocol, it should be allowed.\n    protocol.test(value.slice(0, colon))\n  ) {\n    return value\n  }\n  return ''\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n *   URI to normalize.\n * @returns {string}\n *   Normalized URI.\n */\nexport function normalizeUri(value) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n  let start = 0\n  let skip = 0\n  while (++index < value.length) {\n    const code = value.charCodeAt(index)\n    /** @type {string} */\n    let replace = ''\n\n    // A correct percent encoded value.\n    if (\n      code === 37 &&\n      asciiAlphanumeric(value.charCodeAt(index + 1)) &&\n      asciiAlphanumeric(value.charCodeAt(index + 2))\n    ) {\n      skip = 2\n    }\n    // ASCII.\n    else if (code < 128) {\n      if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n        replace = String.fromCharCode(code)\n      }\n    }\n    // Astral.\n    else if (code > 55_295 && code < 57_344) {\n      const next = value.charCodeAt(index + 1)\n\n      // A correct surrogate pair.\n      if (code < 56_320 && next > 56_319 && next < 57_344) {\n        replace = String.fromCharCode(code, next)\n        skip = 1\n      }\n      // Lone surrogate.\n      else {\n        replace = '\\uFFFD'\n      }\n    }\n    // Unicode.\n    else {\n      replace = String.fromCharCode(code)\n    }\n    if (replace) {\n      result.push(value.slice(start, index), encodeURIComponent(replace))\n      start = index + skip + 1\n      replace = ''\n    }\n    if (skip) {\n      index += skip\n      skip = 0\n    }\n  }\n  return result.join('') + value.slice(start)\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownSpace} from 'micromark-util-character'\n\n// To do: implement `spaceOrTab`, `spaceOrTabMinMax`, `spaceOrTabWithOptions`.\n\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   spaces in markdown are often optional, in which case this factory can be\n *     used and `ok` will be switched to whether spaces were found or not\n * *   one line ending or space can be detected with `markdownSpace(code)` right\n *     before using `factorySpace`\n *\n * ###### Examples\n *\n * Where `␉` represents a tab (plus how much it expands) and `␠` represents a\n * single space.\n *\n * ```markdown\n * ␉\n * ␠␠␠␠\n * ␉␠\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {TokenType} type\n *   Type (`' \\t'`).\n * @param {number | undefined} [max=Infinity]\n *   Max (exclusive).\n * @returns {State}\n *   Start state.\n */\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n    return ok(code)\n  }\n\n  /** @type {State} */\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n    effects.exit(type)\n    return ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n  let previous\n  return contentStart\n\n  /** @type {State} */\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n\n  /** @type {State} */\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n\n  /** @type {State} */\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n    if (previous) {\n      previous.next = token\n    }\n    previous = token\n    return data(code)\n  }\n\n  /** @type {State} */\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    }\n\n    // Data.\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[Construct, ContainerState]} StackItem\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\nexport const document = {\n  tokenize: initializeDocument\n}\n\n/** @type {Construct} */\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext | undefined} */\n  let childFlow\n  /** @type {Token | undefined} */\n  let childToken\n  /** @type {number} */\n  let lineStartOffset\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    }\n\n    // Done.\n    return checkNewContainers(code)\n  }\n\n  /** @type {State} */\n  function documentContinue(code) {\n    continued++\n\n    // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n      if (childFlow) {\n        closeFlow()\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the flow chunk.\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      let index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n    return start(code)\n  }\n\n  /** @type {State} */\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      }\n\n      // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      }\n\n      // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n      // To do: next major: remove `_gfmTableDynamicInterruptHack` (no longer\n      // needed in micromark-extension-gfm-table@1.0.6).\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    }\n\n    // Check if there is a new container.\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n\n  /** @type {State} */\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n\n  /** @type {State} */\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n\n  /** @type {State} */\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState])\n    // Try another.\n    return documentContinued(code)\n  }\n\n  /** @type {State} */\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n\n  /** @type {State} */\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow'))\n      // Get ready for the next line.\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n    effects.consume(code)\n    return flowContinue\n  }\n\n  /**\n   * @param {Token} token\n   * @param {boolean | undefined} [eof]\n   * @returns {undefined}\n   */\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream)\n\n    // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n      while (index--) {\n        if (\n          // The token starts before the line ending…\n          childFlow.events[index][1].start.offset < lineStartOffset &&\n          // …and either is not ended yet…\n          (!childFlow.events[index][1].end ||\n            // …or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return\n        }\n      }\n\n      // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean | undefined} */\n      let seen\n      /** @type {Point | undefined} */\n      let point\n\n      // Find the previous chunk (the one before the lazy line).\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n          seen = true\n        }\n      }\n      exitContainers(continued)\n\n      // Fix positions.\n      index = indexBeforeExits\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      }\n\n      // Inject the exits earlier (they’re still also at the end).\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      )\n\n      // Discard the duplicate exits.\n      self.events.length = index\n    }\n  }\n\n  /**\n   * @param {number} size\n   * @returns {undefined}\n   */\n  function exitContainers(size) {\n    let index = stack.length\n\n    // Exit open containers.\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n    stack.length = size\n  }\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContainer(effects, ok, nok) {\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\n\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n *   Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n *   Group.\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {Array<{resolveAll?: Resolver | undefined}>} constructs\n *   List of constructs, optionally with `resolveAll`s.\n * @param {Array<Event>} events\n *   List of events.\n * @param {TokenizeContext} context\n *   Context used by `tokenize`.\n * @returns {Array<Event>}\n *   Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Array<Resolver>} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n  let index = -1\n  /** @type {number} */\n  let open\n  /** @type {Token} */\n  let group\n  /** @type {Token} */\n  let text\n  /** @type {Token} */\n  let openingSequence\n  /** @type {Token} */\n  let closingSequence\n  /** @type {number} */\n  let use\n  /** @type {Array<Event>} */\n  let nextEvents\n  /** @type {number} */\n  let offset\n\n  // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (\n      events[index][0] === 'enter' &&\n      events[index][1].type === 'attentionSequence' &&\n      events[index][1]._close\n    ) {\n      open = index\n\n      // Now walk back to find an opener.\n      while (open--) {\n        // Find a token that can open the closer.\n        if (\n          events[open][0] === 'exit' &&\n          events[open][1].type === 'attentionSequence' &&\n          events[open][1]._open &&\n          // If the markers are the same:\n          context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n            context.sliceSerialize(events[index][1]).charCodeAt(0)\n        ) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if (\n            (events[open][1]._close || events[index][1]._open) &&\n            (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n            !(\n              (events[open][1].end.offset -\n                events[open][1].start.offset +\n                events[index][1].end.offset -\n                events[index][1].start.offset) %\n              3\n            )\n          ) {\n            continue\n          }\n\n          // Number of markers to use from the sequence.\n          use =\n            events[open][1].end.offset - events[open][1].start.offset > 1 &&\n            events[index][1].end.offset - events[index][1].start.offset > 1\n              ? 2\n              : 1\n          const start = Object.assign({}, events[open][1].end)\n          const end = Object.assign({}, events[index][1].start)\n          movePoint(start, -use)\n          movePoint(end, use)\n          openingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start,\n            end: Object.assign({}, events[open][1].end)\n          }\n          closingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: Object.assign({}, events[index][1].start),\n            end\n          }\n          text = {\n            type: use > 1 ? 'strongText' : 'emphasisText',\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          }\n          group = {\n            type: use > 1 ? 'strong' : 'emphasis',\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          }\n          events[open][1].end = Object.assign({}, openingSequence.start)\n          events[index][1].start = Object.assign({}, closingSequence.end)\n          nextEvents = []\n\n          // If there are more markers in the opening, add them before.\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context]\n            ])\n          }\n\n          // Opening.\n          nextEvents = push(nextEvents, [\n            ['enter', group, context],\n            ['enter', openingSequence, context],\n            ['exit', openingSequence, context],\n            ['enter', text, context]\n          ])\n\n          // Always populated by defaults.\n\n          // Between.\n          nextEvents = push(\n            nextEvents,\n            resolveAll(\n              context.parser.constructs.insideSpan.null,\n              events.slice(open + 1, index),\n              context\n            )\n          )\n\n          // Closing.\n          nextEvents = push(nextEvents, [\n            ['exit', text, context],\n            ['enter', closingSequence, context],\n            ['exit', closingSequence, context],\n            ['exit', group, context]\n          ])\n\n          // If there are more markers in the closing, add them after.\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2\n            nextEvents = push(nextEvents, [\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context]\n            ])\n          } else {\n            offset = 0\n          }\n          splice(events, open - 1, index - open + 3, nextEvents)\n          index = open + nextEvents.length - offset - 2\n          break\n        }\n      }\n    }\n  }\n\n  // Remove remaining sequences.\n  index = -1\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data'\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null\n  const previous = this.previous\n  const before = classifyCharacter(previous)\n\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Before a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    marker = code\n    effects.enter('attentionSequence')\n    return inside(code)\n  }\n\n  /**\n   * In a sequence.\n   *\n   * ```markdown\n   * > | **\n   *     ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    const token = effects.exit('attentionSequence')\n\n    // To do: next major: move this to resolver, just like `markdown-rs`.\n    const after = classifyCharacter(code)\n\n    // Always populated by defaults.\n\n    const open =\n      !after || (after === 2 && before) || attentionMarkers.includes(code)\n    const close =\n      !before || (before === 2 && after) || attentionMarkers.includes(previous)\n    token._open = Boolean(marker === 42 ? open : open && (before || !close))\n    token._close = Boolean(marker === 42 ? close : close && (after || !open))\n    return ok(code)\n  }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {undefined}\n */\nfunction movePoint(point, offset) {\n  point.column += offset\n  point.offset += offset\n  point._bufferIndex += offset\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiAtext,\n  asciiControl\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of an autolink.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *      ^\n   * > | a<user@example.com>b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('autolink')\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.enter('autolinkProtocol')\n    return open\n  }\n\n  /**\n   * After `<`, at protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *       ^\n   * > | a<user@example.com>b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return schemeOrEmailAtext\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * At second byte of protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeOrEmailAtext(code) {\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n      // Count the previous alphabetical from `open` too.\n      size = 1\n      return schemeInsideOrEmailAtext(code)\n    }\n    return emailAtext(code)\n  }\n\n  /**\n   * In ambiguous protocol or atext.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *        ^\n   * > | a<user@example.com>b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code)\n      size = 0\n      return urlInside\n    }\n\n    // ASCII alphanumeric and `+`, `-`, and `.`.\n    if (\n      (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n      size++ < 32\n    ) {\n      effects.consume(code)\n      return schemeInsideOrEmailAtext\n    }\n    size = 0\n    return emailAtext(code)\n  }\n\n  /**\n   * After protocol, in URL.\n   *\n   * ```markdown\n   * > | a<https://example.com>b\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit('autolinkProtocol')\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n\n    // ASCII control, space, or `<`.\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return urlInside\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code)\n      return emailAtSignOrDot\n    }\n    if (asciiAtext(code)) {\n      effects.consume(code)\n      return emailAtext\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label, after at-sign or dot.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                 ^       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are allowed.\n   *\n   * ```markdown\n   * > | a<user.name@example.com>b\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n    if (code === 62) {\n      // Exit, then change the token type.\n      effects.exit('autolinkProtocol').type = 'autolinkEmail'\n      effects.enter('autolinkMarker')\n      effects.consume(code)\n      effects.exit('autolinkMarker')\n      effects.exit('autolink')\n      return ok\n    }\n    return emailValue(code)\n  }\n\n  /**\n   * In label, where `.` and `>` are *not* allowed.\n   *\n   * Though, this is also used in `emailLabel` to parse other values.\n   *\n   * ```markdown\n   * > | a<user.name@ex-ample.com>b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailValue(code) {\n    // ASCII alphanumeric or `-`.\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      const next = code === 45 ? emailValue : emailLabel\n      effects.consume(code)\n      return next\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of blank line.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *     ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'linePrefix')(code)\n      : after(code)\n  }\n\n  /**\n   * At eof/eol, after optional whitespace.\n   *\n   * > 👉 **Note**: `␠` represents a space character.\n   *\n   * ```markdown\n   * > | ␠␠␊\n   *       ^\n   * > | ␊\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of block quote.\n   *\n   * ```markdown\n   * > | > a\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState\n      if (!state.open) {\n        effects.enter('blockQuote', {\n          _container: true\n        })\n        state.open = true\n      }\n      effects.enter('blockQuotePrefix')\n      effects.enter('blockQuoteMarker')\n      effects.consume(code)\n      effects.exit('blockQuoteMarker')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>`, before optional whitespace.\n   *\n   * ```markdown\n   * > | > a\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter('blockQuotePrefixWhitespace')\n      effects.consume(code)\n      effects.exit('blockQuotePrefixWhitespace')\n      effects.exit('blockQuotePrefix')\n      return ok\n    }\n    effects.exit('blockQuotePrefix')\n    return ok(code)\n  }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n *   | > a\n * > | > b\n *     ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  const self = this\n  return contStart\n\n  /**\n   * Start of block quote continuation.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contStart(code) {\n    if (markdownSpace(code)) {\n      // Always populated by defaults.\n\n      return factorySpace(\n        effects,\n        contBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return contBefore(code)\n  }\n\n  /**\n   * At `>`, after optional whitespace.\n   *\n   * Also used to parse the first block quote opening.\n   *\n   * ```markdown\n   *   | > a\n   * > | > b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function contBefore(code) {\n    return effects.attempt(blockQuote, ok, nok)(code)\n  }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n  effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {asciiPunctuation} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of character escape.\n   *\n   * ```markdown\n   * > | a\\*b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    effects.exit('escapeMarker')\n    return inside\n  }\n\n  /**\n   * After `\\`, at punctuation.\n   *\n   * ```markdown\n   * > | a\\*b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // ASCII punctuation.\n    if (asciiPunctuation(code)) {\n      effects.enter('characterEscapeValue')\n      effects.consume(code)\n      effects.exit('characterEscapeValue')\n      effects.exit('characterEscape')\n      return ok\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n  asciiAlphanumeric,\n  asciiDigit,\n  asciiHexDigit\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this\n  let size = 0\n  /** @type {number} */\n  let max\n  /** @type {(code: Code) => boolean} */\n  let test\n  return start\n\n  /**\n   * Start of character reference.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *      ^\n   * > | a&#123;b\n   *      ^\n   * > | a&#x9;b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('characterReference')\n    effects.enter('characterReferenceMarker')\n    effects.consume(code)\n    effects.exit('characterReferenceMarker')\n    return open\n  }\n\n  /**\n   * After `&`, at `#` for numeric references or alphanumeric for named\n   * references.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^\n   * > | a&#123;b\n   *       ^\n   * > | a&#x9;b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 35) {\n      effects.enter('characterReferenceMarkerNumeric')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerNumeric')\n      return numeric\n    }\n    effects.enter('characterReferenceValue')\n    max = 31\n    test = asciiAlphanumeric\n    return value(code)\n  }\n\n  /**\n   * After `#`, at `x` for hexadecimals or digit for decimals.\n   *\n   * ```markdown\n   * > | a&#123;b\n   *        ^\n   * > | a&#x9;b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter('characterReferenceMarkerHexadecimal')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerHexadecimal')\n      effects.enter('characterReferenceValue')\n      max = 6\n      test = asciiHexDigit\n      return value\n    }\n    effects.enter('characterReferenceValue')\n    max = 7\n    test = asciiDigit\n    return value(code)\n  }\n\n  /**\n   * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n   *\n   * The character reference kind defines what and how many characters are\n   * allowed.\n   *\n   * ```markdown\n   * > | a&amp;b\n   *       ^^^\n   * > | a&#123;b\n   *        ^^^\n   * > | a&#x9;b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function value(code) {\n    if (code === 59 && size) {\n      const token = effects.exit('characterReferenceValue')\n      if (\n        test === asciiAlphanumeric &&\n        !decodeNamedCharacterReference(self.sliceSerialize(token))\n      ) {\n        return nok(code)\n      }\n\n      // To do: `markdown-rs` uses a different name:\n      // `CharacterReferenceMarkerSemi`.\n      effects.enter('characterReferenceMarker')\n      effects.consume(code)\n      effects.exit('characterReferenceMarker')\n      effects.exit('characterReference')\n      return ok\n    }\n    if (test(code) && size++ < max) {\n      effects.consume(code)\n      return value\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nconst nonLazyContinuation = {\n  tokenize: tokenizeNonLazyContinuation,\n  partial: true\n}\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this\n  /** @type {Construct} */\n  const closeStart = {\n    tokenize: tokenizeCloseStart,\n    partial: true\n  }\n  let initialPrefix = 0\n  let sizeOpen = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of code.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse whitespace like `markdown-rs`.\n    return beforeSequenceOpen(code)\n  }\n\n  /**\n   * In opening fence, after prefix, at sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *     ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeSequenceOpen(code) {\n    const tail = self.events[self.events.length - 1]\n    initialPrefix =\n      tail && tail[1].type === 'linePrefix'\n        ? tail[2].sliceSerialize(tail[1], true).length\n        : 0\n    marker = code\n    effects.enter('codeFenced')\n    effects.enter('codeFencedFence')\n    effects.enter('codeFencedFenceSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening fence sequence.\n   *\n   * ```markdown\n   * > | ~~~js\n   *      ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === marker) {\n      sizeOpen++\n      effects.consume(code)\n      return sequenceOpen\n    }\n    if (sizeOpen < 3) {\n      return nok(code)\n    }\n    effects.exit('codeFencedFenceSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, infoBefore, 'whitespace')(code)\n      : infoBefore(code)\n  }\n\n  /**\n   * In opening fence, after the sequence (and optional whitespace), before info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function infoBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFencedFence')\n      return self.interrupt\n        ? ok(code)\n        : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFencedFenceInfo')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return info(code)\n  }\n\n  /**\n   * In info.\n   *\n   * ```markdown\n   * > | ~~~js\n   *        ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function info(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return infoBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return factorySpace(effects, metaBefore, 'whitespace')(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return info\n  }\n\n  /**\n   * In opening fence, after info and whitespace, before meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function metaBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return infoBefore(code)\n    }\n    effects.enter('codeFencedFenceMeta')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return meta(code)\n  }\n\n  /**\n   * In meta.\n   *\n   * ```markdown\n   * > | ~~~js eval\n   *           ^\n   *   | alert(1)\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceMeta')\n      return infoBefore(code)\n    }\n    if (code === 96 && code === marker) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return meta\n  }\n\n  /**\n   * At eol/eof in code, before a non-lazy closing fence or content.\n   *\n   * ```markdown\n   * > | ~~~js\n   *          ^\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function atNonLazyBreak(code) {\n    return effects.attempt(closeStart, after, contentBefore)(code)\n  }\n\n  /**\n   * Before code content, not a closing fence, at eol.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *             ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentBefore(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return contentStart\n  }\n\n  /**\n   * Before code content, not a closing fence.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentStart(code) {\n    return initialPrefix > 0 && markdownSpace(code)\n      ? factorySpace(\n          effects,\n          beforeContentChunk,\n          'linePrefix',\n          initialPrefix + 1\n        )(code)\n      : beforeContentChunk(code)\n  }\n\n  /**\n   * Before code content, after optional prefix.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeContentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return contentChunk(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   *   | ~~~js\n   * > | alert(1)\n   *     ^^^^^^^^\n   *   | ~~~\n   * ```\n   *\n   * @type {State}\n   */\n  function contentChunk(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return beforeContentChunk(code)\n    }\n    effects.consume(code)\n    return contentChunk\n  }\n\n  /**\n   * After code.\n   *\n   * ```markdown\n   *   | ~~~js\n   *   | alert(1)\n   * > | ~~~\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    effects.exit('codeFenced')\n    return ok(code)\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeCloseStart(effects, ok, nok) {\n    let size = 0\n    return startBefore\n\n    /**\n     *\n     *\n     * @type {State}\n     */\n    function startBefore(code) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return start\n    }\n\n    /**\n     * Before closing fence, at optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function start(code) {\n      // Always populated by defaults.\n\n      // To do: `enter` here or in next state?\n      effects.enter('codeFencedFence')\n      return markdownSpace(code)\n        ? factorySpace(\n            effects,\n            beforeSequenceClose,\n            'linePrefix',\n            self.parser.constructs.disable.null.includes('codeIndented')\n              ? undefined\n              : 4\n          )(code)\n        : beforeSequenceClose(code)\n    }\n\n    /**\n     * In closing fence, after optional whitespace, at sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function beforeSequenceClose(code) {\n      if (code === marker) {\n        effects.enter('codeFencedFenceSequence')\n        return sequenceClose(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * In closing fence sequence.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *     ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceClose(code) {\n      if (code === marker) {\n        size++\n        effects.consume(code)\n        return sequenceClose\n      }\n      if (size >= sizeOpen) {\n        effects.exit('codeFencedFenceSequence')\n        return markdownSpace(code)\n          ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code)\n          : sequenceCloseAfter(code)\n      }\n      return nok(code)\n    }\n\n    /**\n     * After closing fence sequence, after optional whitespace.\n     *\n     * ```markdown\n     *   | ~~~js\n     *   | alert(1)\n     * > | ~~~\n     *        ^\n     * ```\n     *\n     * @type {State}\n     */\n    function sequenceCloseAfter(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('codeFencedFence')\n        return ok(code)\n      }\n      return nok(code)\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineStart\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function lineStart(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {\n  tokenize: tokenizeFurtherStart,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of code (indented).\n   *\n   * > **Parsing note**: it is not needed to check if this first line is a\n   * > filled line (that it has a non-whitespace character), because blank lines\n   * > are parsed already, so we never run into that.\n   *\n   * ```markdown\n   * > |     aaa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: manually check if interrupting like `markdown-rs`.\n\n    effects.enter('codeIndented')\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? atBreak(code)\n      : nok(code)\n  }\n\n  /**\n   * At a break.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === null) {\n      return after(code)\n    }\n    if (markdownLineEnding(code)) {\n      return effects.attempt(furtherStart, atBreak, after)(code)\n    }\n    effects.enter('codeFlowValue')\n    return inside(code)\n  }\n\n  /**\n   * In code content.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return inside\n  }\n\n  /** @type {State} */\n  function after(code) {\n    effects.exit('codeIndented')\n    // To do: allow interrupting like `markdown-rs`.\n    // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n  const self = this\n  return furtherStart\n\n  /**\n   * At eol, trying to parse another indent.\n   *\n   * ```markdown\n   * > |     aaa\n   *            ^\n   *   |     bbb\n   * ```\n   *\n   * @type {State}\n   */\n  function furtherStart(code) {\n    // To do: improve `lazy` / `pierce` handling.\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return furtherStart\n    }\n\n    // To do: the code here in `micromark-js` is a bit different from\n    // `markdown-rs` because there it can attempt spaces.\n    // We can’t yet.\n    //\n    // To do: use an improved `space_or_tab` function like `markdown-rs`,\n    // so that we can drop the next state.\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n\n  /**\n   * At start, after 1 or 4 spaces.\n   *\n   * ```markdown\n   * > |     aaa\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? ok(code)\n      : markdownLineEnding(code)\n      ? furtherStart(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n}\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4\n  let headEnterIndex = 3\n  /** @type {number} */\n  let index\n  /** @type {number | undefined} */\n  let enter\n\n  // If we start and end with an EOL or a space.\n  if (\n    (events[headEnterIndex][1].type === 'lineEnding' ||\n      events[headEnterIndex][1].type === 'space') &&\n    (events[tailExitIndex][1].type === 'lineEnding' ||\n      events[tailExitIndex][1].type === 'space')\n  ) {\n    index = headEnterIndex\n\n    // And we have data.\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'codeTextData') {\n        // Then we have padding.\n        events[headEnterIndex][1].type = 'codeTextPadding'\n        events[tailExitIndex][1].type = 'codeTextPadding'\n        headEnterIndex += 2\n        tailExitIndex -= 2\n        break\n      }\n    }\n  }\n\n  // Merge adjacent spaces and data.\n  index = headEnterIndex - 1\n  tailExitIndex++\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n        enter = index\n      }\n    } else if (\n      index === tailExitIndex ||\n      events[index][1].type === 'lineEnding'\n    ) {\n      events[enter][1].type = 'codeTextData'\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end\n        events.splice(enter + 2, index - enter - 2)\n        tailExitIndex -= index - enter - 2\n        index = enter + 2\n      }\n      enter = undefined\n    }\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return (\n    code !== 96 ||\n    this.events[this.events.length - 1][1].type === 'characterEscape'\n  )\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this\n  let sizeOpen = 0\n  /** @type {number} */\n  let size\n  /** @type {Token} */\n  let token\n  return start\n\n  /**\n   * Start of code (text).\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * > | \\`a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('codeText')\n    effects.enter('codeTextSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 96) {\n      effects.consume(code)\n      sizeOpen++\n      return sequenceOpen\n    }\n    effects.exit('codeTextSequence')\n    return between(code)\n  }\n\n  /**\n   * Between something and something else.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function between(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code)\n    }\n\n    // To do: next major: don’t do spaces in resolve, but when compiling,\n    // like `markdown-rs`.\n    // Tabs don’t work, and virtual spaces don’t make sense.\n    if (code === 32) {\n      effects.enter('space')\n      effects.consume(code)\n      effects.exit('space')\n      return between\n    }\n\n    // Closing fence? Could also be data.\n    if (code === 96) {\n      token = effects.enter('codeTextSequence')\n      size = 0\n      return sequenceClose(code)\n    }\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return between\n    }\n\n    // Data.\n    effects.enter('codeTextData')\n    return data(code)\n  }\n\n  /**\n   * In data.\n   *\n   * ```markdown\n   * > | `a`\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (\n      code === null ||\n      code === 32 ||\n      code === 96 ||\n      markdownLineEnding(code)\n    ) {\n      effects.exit('codeTextData')\n      return between(code)\n    }\n    effects.consume(code)\n    return data\n  }\n\n  /**\n   * In closing sequence.\n   *\n   * ```markdown\n   * > | `a`\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceClose(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code)\n      size++\n      return sequenceClose\n    }\n\n    // Done!\n    if (size === sizeOpen) {\n      effects.exit('codeTextSequence')\n      effects.exit('codeText')\n      return ok(code)\n    }\n\n    // More or less accents: mark as data.\n    token.type = 'codeTextData'\n    return data(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n */\n\nimport {splice} from 'micromark-util-chunked'\n/**\n * Tokenize subcontent.\n *\n * @param {Array<Event>} events\n *   List of events.\n * @returns {boolean}\n *   Whether subtokens were found.\n */ // eslint-disable-next-line complexity\nexport function subtokenize(events) {\n  /** @type {Record<string, number>} */\n  const jumps = {}\n  let index = -1\n  /** @type {Event} */\n  let event\n  /** @type {number | undefined} */\n  let lineIndex\n  /** @type {number} */\n  let otherIndex\n  /** @type {Event} */\n  let otherEvent\n  /** @type {Array<Event>} */\n  let parameters\n  /** @type {Array<Event>} */\n  let subevents\n  /** @type {boolean | undefined} */\n  let more\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index]\n    }\n    event = events[index]\n\n    // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n    if (\n      index &&\n      event[1].type === 'chunkFlow' &&\n      events[index - 1][1].type === 'listItemPrefix'\n    ) {\n      subevents = event[1]._tokenizer.events\n      otherIndex = 0\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'lineEndingBlank'\n      ) {\n        otherIndex += 2\n      }\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'content'\n      ) {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === 'content') {\n            break\n          }\n          if (subevents[otherIndex][1].type === 'chunkText') {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true\n            otherIndex++\n          }\n        }\n      }\n    }\n\n    // Enter.\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index))\n        index = jumps[index]\n        more = true\n      }\n    }\n    // Exit.\n    else if (event[1]._container) {\n      otherIndex = index\n      lineIndex = undefined\n      while (otherIndex--) {\n        otherEvent = events[otherIndex]\n        if (\n          otherEvent[1].type === 'lineEnding' ||\n          otherEvent[1].type === 'lineEndingBlank'\n        ) {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events[lineIndex][1].type = 'lineEndingBlank'\n            }\n            otherEvent[1].type = 'lineEnding'\n            lineIndex = otherIndex\n          }\n        } else {\n          break\n        }\n      }\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events[lineIndex][1].start)\n\n        // Switch container exit w/ line endings.\n        parameters = events.slice(lineIndex, index)\n        parameters.unshift(event)\n        splice(events, lineIndex, index - lineIndex + 1, parameters)\n      }\n    }\n  }\n  return !more\n}\n\n/**\n * Tokenize embedded tokens.\n *\n * @param {Array<Event>} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\nfunction subcontent(events, eventIndex) {\n  const token = events[eventIndex][1]\n  const context = events[eventIndex][2]\n  let startPosition = eventIndex - 1\n  /** @type {Array<number>} */\n  const startPositions = []\n  const tokenizer =\n    token._tokenizer || context.parser[token.contentType](token.start)\n  const childEvents = tokenizer.events\n  /** @type {Array<[number, number]>} */\n  const jumps = []\n  /** @type {Record<string, number>} */\n  const gaps = {}\n  /** @type {Array<Chunk>} */\n  let stream\n  /** @type {Token | undefined} */\n  let previous\n  let index = -1\n  /** @type {Token | undefined} */\n  let current = token\n  let adjust = 0\n  let start = 0\n  const breaks = [start]\n\n  // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n  while (current) {\n    // Find the position of the event for this token.\n    while (events[++startPosition][1] !== current) {\n      // Empty.\n    }\n    startPositions.push(startPosition)\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current)\n      if (!current.next) {\n        stream.push(null)\n      }\n      if (previous) {\n        tokenizer.defineSkip(current.start)\n      }\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true\n      }\n      tokenizer.write(stream)\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined\n      }\n    }\n\n    // Unravel the next token.\n    previous = current\n    current = current.next\n  }\n\n  // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n  current = token\n  while (++index < childEvents.length) {\n    if (\n      // Find a void token that includes a break.\n      childEvents[index][0] === 'exit' &&\n      childEvents[index - 1][0] === 'enter' &&\n      childEvents[index][1].type === childEvents[index - 1][1].type &&\n      childEvents[index][1].start.line !== childEvents[index][1].end.line\n    ) {\n      start = index + 1\n      breaks.push(start)\n      // Help GC.\n      current._tokenizer = undefined\n      current.previous = undefined\n      current = current.next\n    }\n  }\n\n  // Help GC.\n  tokenizer.events = []\n\n  // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined\n    current.previous = undefined\n  } else {\n    breaks.pop()\n  }\n\n  // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n  index = breaks.length\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1])\n    const start = startPositions.pop()\n    jumps.unshift([start, start + slice.length - 1])\n    splice(events, start, 2, slice)\n  }\n  index = -1\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n    adjust += jumps[index][1] - jumps[index][0] - 1\n  }\n  return gaps\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n}\n\n/** @type {Construct} */\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n}\n\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\nfunction resolveContent(events) {\n  subtokenize(events)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token | undefined} */\n  let previous\n  return chunkStart\n\n  /**\n   * Before a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkStart(code) {\n    effects.enter('content')\n    previous = effects.enter('chunkContent', {\n      contentType: 'content'\n    })\n    return chunkInside(code)\n  }\n\n  /**\n   * In a content chunk.\n   *\n   * ```markdown\n   * > | abc\n   *     ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function chunkInside(code) {\n    if (code === null) {\n      return contentEnd(code)\n    }\n\n    // To do: in `markdown-rs`, each line is parsed on its own, and everything\n    // is stitched together resolving.\n    if (markdownLineEnding(code)) {\n      return effects.check(\n        continuationConstruct,\n        contentContinue,\n        contentEnd\n      )(code)\n    }\n\n    // Data.\n    effects.consume(code)\n    return chunkInside\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentEnd(code) {\n    effects.exit('chunkContent')\n    effects.exit('content')\n    return ok(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function contentContinue(code) {\n    effects.consume(code)\n    effects.exit('chunkContent')\n    previous.next = effects.enter('chunkContent', {\n      contentType: 'content',\n      previous\n    })\n    previous = previous.next\n    return chunkInside\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this\n  return startLookahead\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function startLookahead(code) {\n    effects.exit('chunkContent')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, prefixed, 'linePrefix')\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    // Always populated by defaults.\n\n    const tail = self.events[self.events.length - 1]\n    if (\n      !self.parser.constructs.disable.null.includes('codeIndented') &&\n      tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n    ) {\n      return ok(code)\n    }\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n/**\n * Parse destinations.\n *\n * ###### Examples\n *\n * ```markdown\n * <a>\n * <a\\>b>\n * <a b>\n * <a)>\n * a\n * a\\)b\n * a(b)c\n * a(b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type for whole (`<a>` or `b`).\n * @param {TokenType} literalType\n *   Type when enclosed (`<a>`).\n * @param {TokenType} literalMarkerType\n *   Type for enclosing (`<` and `>`).\n * @param {TokenType} rawType\n *   Type when not enclosed (`b`).\n * @param {TokenType} stringType\n *   Type for the value (`a` or `b`).\n * @param {number | undefined} [max=Infinity]\n *   Depth of nested parens (inclusive).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n\n  /**\n   * Start of destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *     ^\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return enclosedBefore\n    }\n\n    // ASCII control, space, closing paren.\n    if (code === null || code === 32 || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return raw(code)\n  }\n\n  /**\n   * After `<`, at an enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return enclosed(code)\n  }\n\n  /**\n   * In enclosed destination.\n   *\n   * ```markdown\n   * > | <aa>\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return enclosedBefore(code)\n    }\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? enclosedEscape : enclosed\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | <a\\*a>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function enclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return enclosed\n    }\n    return enclosed(code)\n  }\n\n  /**\n   * In raw destination.\n   *\n   * ```markdown\n   * > | aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function raw(code) {\n    if (\n      !balance &&\n      (code === null || code === 41 || markdownLineEndingOrSpace(code))\n    ) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n    if (balance < limit && code === 40) {\n      effects.consume(code)\n      balance++\n      return raw\n    }\n    if (code === 41) {\n      effects.consume(code)\n      balance--\n      return raw\n    }\n\n    // ASCII control (but *not* `\\0`) and space and `(`.\n    // Note: in `markdown-rs`, `\\0` exists in codes, in `micromark-js` it\n    // doesn’t.\n    if (code === null || code === 32 || code === 40 || asciiControl(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return code === 92 ? rawEscape : raw\n  }\n\n  /**\n   * After `\\`, at special character.\n   *\n   * ```markdown\n   * > | a\\*a\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function rawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return raw\n    }\n    return raw(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse labels.\n *\n * > 👉 **Note**: labels in markdown are capped at 999 characters in the string.\n *\n * ###### Examples\n *\n * ```markdown\n * [a]\n * [a\n * b]\n * [a\\]b]\n * ```\n *\n * @this {TokenizeContext}\n *   Tokenize context.\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole label (`[a]`).\n * @param {TokenType} markerType\n *   Type for the markers (`[` and `]`).\n * @param {TokenType} stringType\n *   Type for the identifier (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /**\n   * Start of label.\n   *\n   * ```markdown\n   * > | [a]\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n\n  /**\n   * In label, at something, before something else.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (\n      size > 999 ||\n      code === null ||\n      code === 91 ||\n      (code === 93 && !seen) ||\n      // To do: remove in the future once we’ve switched from\n      // `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n      // which doesn’t need this.\n      // Hidden footnotes hook.\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    // To do: indent? Link chunks and EOLs together?\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return labelInside(code)\n  }\n\n  /**\n   * In label, in text.\n   *\n   * ```markdown\n   * > | [a]\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    if (!seen) seen = !markdownSpace(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | [a\\*a]\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenType} TokenType\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/**\n * Parse titles.\n *\n * ###### Examples\n *\n * ```markdown\n * \"a\"\n * 'b'\n * (c)\n * \"a\n * b\"\n * 'a\n *     b'\n * (a\\)b)\n * ```\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @param {State} nok\n *   State switched to when unsuccessful.\n * @param {TokenType} type\n *   Type of the whole title (`\"a\"`, `'b'`, `(c)`).\n * @param {TokenType} markerType\n *   Type for the markers (`\"`, `'`, `(`, and `)`).\n * @param {TokenType} stringType\n *   Type for the value (`a`).\n * @returns {State}\n *   Start state.\n */ // eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of title.\n   *\n   * ```markdown\n   * > | \"a\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      effects.enter(type)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      marker = code === 40 ? 41 : code\n      return begin\n    }\n    return nok(code)\n  }\n\n  /**\n   * After opening marker.\n   *\n   * This is also used at the closing marker.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function begin(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n    effects.enter(stringType)\n    return atBreak(code)\n  }\n\n  /**\n   * At something, before something else.\n   *\n   * ```markdown\n   * > | \"a\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return begin(marker)\n    }\n    if (code === null) {\n      return nok(code)\n    }\n\n    // Note: blank lines can’t exist in content.\n    if (markdownLineEnding(code)) {\n      // To do: use `space_or_tab_eol_with_options`, connect.\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atBreak, 'linePrefix')\n    }\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return inside(code)\n  }\n\n  /**\n   *\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? escape : inside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * ```markdown\n   * > | \"a\\*b\"\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function escape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return inside\n    }\n    return inside(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/**\n * Parse spaces and tabs.\n *\n * There is no `nok` parameter:\n *\n * *   line endings or spaces in markdown are often optional, in which case this\n *     factory can be used and `ok` will be switched to whether spaces were found\n *     or not\n * *   one line ending or space can be detected with\n *     `markdownLineEndingOrSpace(code)` right before using `factoryWhitespace`\n *\n * @param {Effects} effects\n *   Context.\n * @param {State} ok\n *   State switched to when successful.\n * @returns {State}\n *   Start state.\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n    return ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n}\n\n/** @type {Construct} */\nconst titleBefore = {\n  tokenize: tokenizeTitleBefore,\n  partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this\n  /** @type {string} */\n  let identifier\n  return start\n\n  /**\n   * At start of a definition.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Do not interrupt paragraphs (but do follow definitions).\n    // To do: do `interrupt` the way `markdown-rs` does.\n    // To do: parse whitespace the way `markdown-rs` does.\n    effects.enter('definition')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `[`.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    // To do: parse whitespace the way `markdown-rs` does.\n\n    return factoryLabel.call(\n      self,\n      effects,\n      labelAfter,\n      // Note: we don’t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionLabel',\n      'definitionLabelMarker',\n      'definitionLabelString'\n    )(code)\n  }\n\n  /**\n   * After label.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(\n      self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n    )\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      return markerAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After marker.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function markerAfter(code) {\n    // Note: whitespace is optional.\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, destinationBefore)(code)\n      : destinationBefore(code)\n  }\n\n  /**\n   * Before destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationBefore(code) {\n    return factoryDestination(\n      effects,\n      destinationAfter,\n      // Note: we don’t need to reset the way `markdown-rs` does.\n      nok,\n      'definitionDestination',\n      'definitionDestinationLiteral',\n      'definitionDestinationLiteralMarker',\n      'definitionDestinationRaw',\n      'definitionDestinationString'\n    )(code)\n  }\n\n  /**\n   * After destination.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function destinationAfter(code) {\n    return effects.attempt(titleBefore, after, after)(code)\n  }\n\n  /**\n   * After definition.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, afterWhitespace, 'whitespace')(code)\n      : afterWhitespace(code)\n  }\n\n  /**\n   * After definition, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterWhitespace(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('definition')\n\n      // Note: we don’t care about uniqueness.\n      // It’s likely that that doesn’t happen very frequently.\n      // It is more likely that it wastes precious time.\n      self.parser.defined.push(identifier)\n\n      // To do: `markdown-rs` interrupt.\n      // // You’d be interrupting.\n      // tokenizer.interrupt = true\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n  return titleBefore\n\n  /**\n   * After destination, at whitespace.\n   *\n   * ```markdown\n   * > | [a]: b\n   *           ^\n   * > | [a]: b \"c\"\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, beforeMarker)(code)\n      : nok(code)\n  }\n\n  /**\n   * At title.\n   *\n   * ```markdown\n   *   | [a]: b\n   * > | \"c\"\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function beforeMarker(code) {\n    return factoryTitle(\n      effects,\n      titleAfter,\n      nok,\n      'definitionTitle',\n      'definitionTitleMarker',\n      'definitionTitleString'\n    )(code)\n  }\n\n  /**\n   * After title.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfter(code) {\n    return markdownSpace(code)\n      ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code)\n      : titleAfterOptionalWhitespace(code)\n  }\n\n  /**\n   * After title, after optional whitespace.\n   *\n   * ```markdown\n   * > | [a]: b \"c\"\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function titleAfterOptionalWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start\n\n  /**\n   * Start of a hard break (escape).\n   *\n   * ```markdown\n   * > | a\\\n   *      ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('hardBreakEscape')\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After `\\`, at eol.\n   *\n   * ```markdown\n   * > | a\\\n   *       ^\n   *   | b\n   * ```\n   *\n   *  @type {State}\n   */\n  function after(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit('hardBreakEscape')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2\n  let contentStart = 3\n  /** @type {Token} */\n  let content\n  /** @type {Token} */\n  let text\n\n  // Prefix whitespace, part of the opening.\n  if (events[contentStart][1].type === 'whitespace') {\n    contentStart += 2\n  }\n\n  // Suffix whitespace, part of the closing.\n  if (\n    contentEnd - 2 > contentStart &&\n    events[contentEnd][1].type === 'whitespace'\n  ) {\n    contentEnd -= 2\n  }\n  if (\n    events[contentEnd][1].type === 'atxHeadingSequence' &&\n    (contentStart === contentEnd - 1 ||\n      (contentEnd - 4 > contentStart &&\n        events[contentEnd - 2][1].type === 'whitespace'))\n  ) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n  }\n  if (contentEnd > contentStart) {\n    content = {\n      type: 'atxHeadingText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    }\n    text = {\n      type: 'chunkText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      contentType: 'text'\n    }\n    splice(events, contentStart, contentEnd - contentStart + 1, [\n      ['enter', content, context],\n      ['enter', text, context],\n      ['exit', text, context],\n      ['exit', content, context]\n    ])\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  let size = 0\n  return start\n\n  /**\n   * Start of a heading (atx).\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    effects.enter('atxHeading')\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at `#`.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('atxHeadingSequence')\n    return sequenceOpen(code)\n  }\n\n  /**\n   * In opening sequence.\n   *\n   * ```markdown\n   * > | ## aa\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceOpen(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code)\n      return sequenceOpen\n    }\n\n    // Always at least one `#`.\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingSequence')\n      return atBreak(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ## aa\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === 35) {\n      effects.enter('atxHeadingSequence')\n      return sequenceFurther(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('atxHeading')\n      // To do: interrupt like `markdown-rs`.\n      // // Feel free to interrupt.\n      // tokenizer.interrupt = false\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, 'whitespace')(code)\n    }\n\n    // To do: generate `data` tokens, add the `text` token later.\n    // Needs edit map, see: `markdown.rs`.\n    effects.enter('atxHeadingText')\n    return data(code)\n  }\n\n  /**\n   * In further sequence (after whitespace).\n   *\n   * Could be normal “visible” hashes in the heading or a final sequence.\n   *\n   * ```markdown\n   * > | ## aa ##\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequenceFurther(code) {\n    if (code === 35) {\n      effects.consume(code)\n      return sequenceFurther\n    }\n    effects.exit('atxHeadingSequence')\n    return atBreak(code)\n  }\n\n  /**\n   * In text.\n   *\n   * ```markdown\n   * > | ## aa\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingText')\n      return atBreak(code)\n    }\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * List of lowercase HTML “block” tag names.\n *\n * The list, when parsing HTML (flow), results in more relaxed rules (condition\n * 6).\n * Because they are known blocks, the HTML-like syntax doesn’t have to be\n * strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `search` was added in `CommonMark@0.31`.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'frame',\n  'frameset',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'search',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML “raw” tag names.\n *\n * The list, when parsing HTML (flow), results in HTML that can include lines\n * without exiting, until a closing tag also in this list is found (condition\n * 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * > 👉 **Note**: `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n\n/** @type {Construct} */\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {\n  tokenize: tokenizeBlankLineBefore,\n  partial: true\n}\nconst nonLazyContinuationStart = {\n  tokenize: tokenizeNonLazyContinuationStart,\n  partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n  let index = events.length\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n      break\n    }\n  }\n  if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start\n    // Add the prefix start to the HTML line token.\n    events[index + 1][1].start = events[index - 2][1].start\n    // Remove the line prefix.\n    events.splice(index - 2, 2)\n  }\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this\n  /** @type {number} */\n  let marker\n  /** @type {boolean} */\n  let closingTag\n  /** @type {string} */\n  let buffer\n  /** @type {number} */\n  let index\n  /** @type {Code} */\n  let markerB\n  return start\n\n  /**\n   * Start of HTML (flow).\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * At `<`, after optional whitespace.\n   *\n   * ```markdown\n   * > | <x />\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('htmlFlow')\n    effects.enter('htmlFlowData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | <x />\n   *      ^\n   * > | <!doctype>\n   *      ^\n   * > | <!--xxx-->\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      closingTag = true\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      marker = 3\n      // To do:\n      // tokenizer.concrete = true\n      // To do: use `markdown-rs` style interrupt.\n      // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *       ^\n   * > | <!--xxx-->\n   *       ^\n   * > | <![CDATA[>&<]]>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      marker = 2\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      marker = 5\n      index = 0\n      return cdataOpenInside\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      marker = 4\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!-`, inside a comment, at another `-`.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<![`, inside CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *        ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      if (index === value.length) {\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok : continuation\n      }\n      return cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | </x>\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * In tag name.\n   *\n   * ```markdown\n   * > | <ab>\n   *      ^^\n   * > | </ab>\n   *       ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagName(code) {\n    if (\n      code === null ||\n      code === 47 ||\n      code === 62 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      const slash = code === 47\n      const name = buffer.toLowerCase()\n      if (!slash && !closingTag && htmlRawNames.includes(name)) {\n        marker = 1\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        marker = 6\n        if (slash) {\n          effects.consume(code)\n          return basicSelfClosing\n        }\n\n        // // Do not form containers.\n        // tokenizer.concrete = true\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n      marker = 7\n      // Do not support complete HTML when interrupting.\n      return self.interrupt && !self.parser.lazy[self.now().line]\n        ? nok(code)\n        : closingTag\n        ? completeClosingTagAfter(code)\n        : completeAttributeNameBefore(code)\n    }\n\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      buffer += String.fromCharCode(code)\n      return tagName\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a basic tag name.\n   *\n   * ```markdown\n   * > | <div/>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code)\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return self.interrupt ? ok : continuation\n    }\n    return nok(code)\n  }\n\n  /**\n   * After closing slash of a complete tag name.\n   *\n   * ```markdown\n   * > | <x/>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeClosingTagAfter\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * At an attribute name.\n   *\n   * At first, this state is used after a complete tag name, after whitespace,\n   * where it expects optional attributes or the end of the tag.\n   * It is also reused after attributes, when expecting more optional\n   * attributes.\n   *\n   * ```markdown\n   * > | <a />\n   *        ^\n   * > | <a :b>\n   *        ^\n   * > | <a _b>\n   *        ^\n   * > | <a b>\n   *        ^\n   * > | <a >\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return completeEnd\n    }\n\n    // ASCII alphanumerical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameBefore\n    }\n    return completeEnd(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | <a :b>\n   *         ^\n   * > | <a _b>\n   *         ^\n   * > | <a b>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeName(code) {\n    // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n    return completeAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, at an optional initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b>\n   *         ^\n   * > | <a b=c>\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameAfter\n    }\n    return completeAttributeNameBefore(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * > | <a b=\"c\">\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      markerB = code\n      return completeAttributeValueQuoted\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n    return completeAttributeValueUnquoted(code)\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *           ^\n   * > | <a b='c'>\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuoted(code) {\n    if (code === markerB) {\n      effects.consume(code)\n      markerB = null\n      return completeAttributeValueQuotedAfter\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | <a b=c>\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 47 ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return completeAttributeNameAfter(code)\n    }\n    effects.consume(code)\n    return completeAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the\n   * end of the tag.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a complete tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | <a b=\"c\">\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `>` in a complete tag.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function completeAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      // // Do not form containers.\n      // tokenizer.concrete = true\n      return continuation(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * In continuation of any HTML kind.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuation(code) {\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationCommentInside\n    }\n    if (code === 60 && marker === 1) {\n      effects.consume(code)\n      return continuationRawTagOpen\n    }\n    if (code === 62 && marker === 4) {\n      effects.consume(code)\n      return continuationClose\n    }\n    if (code === 63 && marker === 3) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    if (code === 93 && marker === 5) {\n      effects.consume(code)\n      return continuationCdataInside\n    }\n    if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n      effects.exit('htmlFlowData')\n      return effects.check(\n        blankLineBefore,\n        continuationAfter,\n        continuationStart\n      )(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationStart(code)\n    }\n    effects.consume(code)\n    return continuation\n  }\n\n  /**\n   * In continuation, at eol.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStart(code) {\n    return effects.check(\n      nonLazyContinuationStart,\n      continuationStartNonLazy,\n      continuationAfter\n    )(code)\n  }\n\n  /**\n   * In continuation, at eol, before non-lazy content.\n   *\n   * ```markdown\n   * > | <x>\n   *        ^\n   *   | asd\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationStartNonLazy(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return continuationBefore\n  }\n\n  /**\n   * In continuation, before non-lazy content.\n   *\n   * ```markdown\n   *   | <x>\n   * > | asd\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationBefore(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return continuationStart(code)\n    }\n    effects.enter('htmlFlowData')\n    return continuation(code)\n  }\n\n  /**\n   * In comment continuation, after one `-`, expecting another.\n   *\n   * ```markdown\n   * > | <!--xxx-->\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `<`, at `/`.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code)\n      buffer = ''\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In raw continuation, after `</`, in a raw tag name.\n   *\n   * ```markdown\n   * > | <script>console.log(1)</script>\n   *                             ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationRawEndTag(code) {\n    if (code === 62) {\n      const name = buffer.toLowerCase()\n      if (htmlRawNames.includes(name)) {\n        effects.consume(code)\n        return continuationClose\n      }\n      return continuation(code)\n    }\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code)\n      // @ts-expect-error: not null.\n      buffer += String.fromCharCode(code)\n      return continuationRawEndTag\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In cdata continuation, after `]`, expecting `]>`.\n   *\n   * ```markdown\n   * > | <![CDATA[>&<]]>\n   *                  ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationCdataInside(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In declaration or instruction continuation, at `>`.\n   *\n   * ```markdown\n   * > | <!-->\n   *         ^\n   * > | <?>\n   *       ^\n   * > | <!q>\n   *        ^\n   * > | <!--ab-->\n   *             ^\n   * > | <![CDATA[>&<]]>\n   *                   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    // More dashes.\n    if (code === 45 && marker === 2) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n    return continuation(code)\n  }\n\n  /**\n   * In closed continuation: everything we get until the eol/eof is part of it.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return continuationAfter(code)\n    }\n    effects.consume(code)\n    return continuationClose\n  }\n\n  /**\n   * Done.\n   *\n   * ```markdown\n   * > | <!doctype>\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function continuationAfter(code) {\n    effects.exit('htmlFlow')\n    // // Feel free to interrupt.\n    // tokenizer.interrupt = false\n    // // No longer concrete.\n    // tokenizer.concrete = false\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * At eol, before continuation.\n   *\n   * ```markdown\n   * > | * ```js\n   *            ^\n   *   | b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * A continuation.\n   *\n   * ```markdown\n   *   | * ```js\n   * > | b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n  return start\n\n  /**\n   * Before eol, expecting blank line.\n   *\n   * ```markdown\n   * > | <div>\n   *          ^\n   *   |\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return effects.attempt(blankLine, ok, nok)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code> | undefined} */\n  let marker\n  /** @type {number} */\n  let index\n  /** @type {State} */\n  let returnState\n  return start\n\n  /**\n   * Start of HTML (text).\n   *\n   * ```markdown\n   * > | a <b> c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('htmlText')\n    effects.enter('htmlTextData')\n    effects.consume(code)\n    return open\n  }\n\n  /**\n   * After `<`, at tag name or other stuff.\n   *\n   * ```markdown\n   * > | a <b> c\n   *        ^\n   * > | a <!doctype> c\n   *        ^\n   * > | a <!--b--> c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instruction\n    }\n\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `<!`, at declaration, comment, or CDATA.\n   *\n   * ```markdown\n   * > | a <!doctype> c\n   *         ^\n   * > | a <!--b--> c\n   *         ^\n   * > | a <![CDATA[>&<]]> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentOpenInside\n    }\n    if (code === 91) {\n      effects.consume(code)\n      index = 0\n      return cdataOpenInside\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return declaration\n    }\n    return nok(code)\n  }\n\n  /**\n   * In a comment, after `<!-`, at another `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return nok(code)\n  }\n\n  /**\n   * In comment.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function comment(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 45) {\n      effects.consume(code)\n      return commentClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = comment\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return comment\n  }\n\n  /**\n   * In comment, after `-`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentEnd\n    }\n    return comment(code)\n  }\n\n  /**\n   * In comment, after `--`.\n   *\n   * ```markdown\n   * > | a <!--b--> c\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function commentEnd(code) {\n    return code === 62\n      ? end(code)\n      : code === 45\n      ? commentClose(code)\n      : comment(code)\n  }\n\n  /**\n   * After `<![`, in CDATA, expecting `CDATA[`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *          ^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataOpenInside(code) {\n    const value = 'CDATA['\n    if (code === value.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === value.length ? cdata : cdataOpenInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In CDATA.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                ^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdata(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = cdata\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return cdata\n  }\n\n  /**\n   * In CDATA, after `]`, at another `]`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In CDATA, after `]]`, at `>`.\n   *\n   * ```markdown\n   * > | a <![CDATA[>&<]]> b\n   *                     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code)\n    }\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n    return cdata(code)\n  }\n\n  /**\n   * In declaration.\n   *\n   * ```markdown\n   * > | a <!b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = declaration\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return declaration\n  }\n\n  /**\n   * In instruction.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instruction(code) {\n    if (code === null) {\n      return nok(code)\n    }\n    if (code === 63) {\n      effects.consume(code)\n      return instructionClose\n    }\n    if (markdownLineEnding(code)) {\n      returnState = instruction\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return instruction\n  }\n\n  /**\n   * In instruction, after `?`, at `>`.\n   *\n   * ```markdown\n   * > | a <?b?> c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code)\n  }\n\n  /**\n   * After `</`, in closing tag, at tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseStart(code) {\n    // ASCII alphabetical.\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `</x`, in a tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagClose(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n    return tagCloseBetween(code)\n  }\n\n  /**\n   * In closing tag, after tag name.\n   *\n   * ```markdown\n   * > | a </b> c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagCloseBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * After `<x`, in opening tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpen(code) {\n    // ASCII alphanumerical and `-`.\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In opening tag, after tag name.\n   *\n   * ```markdown\n   * > | a <b> c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return end\n    }\n\n    // ASCII alphabetical and `:` and `_`.\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenBetween\n    }\n    return end(code)\n  }\n\n  /**\n   * In attribute name.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeName(code) {\n    // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n    return tagOpenAttributeNameAfter(code)\n  }\n\n  /**\n   * After attribute name, before initializer, the end of the tag, or\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c> d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeNameAfter\n    }\n    return tagOpenBetween(code)\n  }\n\n  /**\n   * Before unquoted, double quoted, or single quoted attribute value, allowing\n   * whitespace.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return tagOpenAttributeValueQuoted\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore\n      return lineEndingBefore(code)\n    }\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * In double or single quoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      marker = undefined\n      return tagOpenAttributeValueQuotedAfter\n    }\n    if (code === null) {\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted\n      return lineEndingBefore(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueQuoted\n  }\n\n  /**\n   * In unquoted attribute value.\n   *\n   * ```markdown\n   * > | a <b c=d> e\n   *            ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  }\n\n  /**\n   * After double or single quoted attribute value, before whitespace or the end\n   * of the tag.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In certain circumstances of a tag where only an `>` is allowed.\n   *\n   * ```markdown\n   * > | a <b c=\"d\"> e\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code)\n      effects.exit('htmlTextData')\n      effects.exit('htmlText')\n      return ok\n    }\n    return nok(code)\n  }\n\n  /**\n   * At eol.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   * > | a <!--a\n   *            ^\n   *   | b-->\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingBefore(code) {\n    effects.exit('htmlTextData')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return lineEndingAfter\n  }\n\n  /**\n   * After eol, at optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfter(code) {\n    // Always populated by defaults.\n\n    return markdownSpace(code)\n      ? factorySpace(\n          effects,\n          lineEndingAfterPrefix,\n          'linePrefix',\n          self.parser.constructs.disable.null.includes('codeIndented')\n            ? undefined\n            : 4\n        )(code)\n      : lineEndingAfterPrefix(code)\n  }\n\n  /**\n   * After eol, after optional whitespace.\n   *\n   * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n   * > empty tokens.\n   *\n   * ```markdown\n   *   | a <!--a\n   * > | b-->\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function lineEndingAfterPrefix(code) {\n    effects.enter('htmlTextData')\n    return returnState(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n}\n/** @type {Construct} */\nconst referenceFullConstruct = {\n  tokenize: tokenizeReferenceFull\n}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n  tokenize: tokenizeReferenceCollapsed\n}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n  let index = -1\n  while (++index < events.length) {\n    const token = events[index][1]\n    if (\n      token.type === 'labelImage' ||\n      token.type === 'labelLink' ||\n      token.type === 'labelEnd'\n    ) {\n      // Remove the marker.\n      events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n      token.type = 'data'\n      index++\n    }\n  }\n  return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length\n  let offset = 0\n  /** @type {Token} */\n  let token\n  /** @type {number | undefined} */\n  let open\n  /** @type {number | undefined} */\n  let close\n  /** @type {Array<Event>} */\n  let media\n\n  // Find an opening.\n  while (index--) {\n    token = events[index][1]\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (\n        token.type === 'link' ||\n        (token.type === 'labelLink' && token._inactive)\n      ) {\n        break\n      }\n\n      // Mark other link openings as inactive, as we can’t have links in\n      // links.\n      if (events[index][0] === 'enter' && token.type === 'labelLink') {\n        token._inactive = true\n      }\n    } else if (close) {\n      if (\n        events[index][0] === 'enter' &&\n        (token.type === 'labelImage' || token.type === 'labelLink') &&\n        !token._balanced\n      ) {\n        open = index\n        if (token.type !== 'labelLink') {\n          offset = 2\n          break\n        }\n      }\n    } else if (token.type === 'labelEnd') {\n      close = index\n    }\n  }\n  const group = {\n    type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  const label = {\n    type: 'label',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  }\n  const text = {\n    type: 'labelText',\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  }\n  media = [\n    ['enter', group, context],\n    ['enter', label, context]\n  ]\n\n  // Opening marker.\n  media = push(media, events.slice(open + 1, open + offset + 3))\n\n  // Text open.\n  media = push(media, [['enter', text, context]])\n\n  // Always populated by defaults.\n\n  // Between.\n  media = push(\n    media,\n    resolveAll(\n      context.parser.constructs.insideSpan.null,\n      events.slice(open + offset + 4, close - 3),\n      context\n    )\n  )\n\n  // Text close, marker close, label close.\n  media = push(media, [\n    ['exit', text, context],\n    events[close - 2],\n    events[close - 1],\n    ['exit', label, context]\n  ])\n\n  // Reference, resource, or so.\n  media = push(media, events.slice(close + 1))\n\n  // Media close.\n  media = push(media, [['exit', group, context]])\n  splice(events, open, events.length, media)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {Token} */\n  let labelStart\n  /** @type {boolean} */\n  let defined\n\n  // Find an opening.\n  while (index--) {\n    if (\n      (self.events[index][1].type === 'labelImage' ||\n        self.events[index][1].type === 'labelLink') &&\n      !self.events[index][1]._balanced\n    ) {\n      labelStart = self.events[index][1]\n      break\n    }\n  }\n  return start\n\n  /**\n   * Start of label end.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // If there is not an okay opening.\n    if (!labelStart) {\n      return nok(code)\n    }\n\n    // If the corresponding label (link) start is marked as inactive,\n    // it means we’d be wrapping a link, like this:\n    //\n    // ```markdown\n    // > | a [b [c](d) e](f) g.\n    //                  ^\n    // ```\n    //\n    // We can’t have that, so it’s just balanced brackets.\n    if (labelStart._inactive) {\n      return labelEndNok(code)\n    }\n    defined = self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize({\n          start: labelStart.end,\n          end: self.now()\n        })\n      )\n    )\n    effects.enter('labelEnd')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelEnd')\n    return after\n  }\n\n  /**\n   * After `]`.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *       ^\n   * > | [a][b] c\n   *       ^\n   * > | [a][] b\n   *       ^\n   * > | [a] b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n    // an extension.\n\n    // Resource (`[asd](fgh)`)?\n    if (code === 40) {\n      return effects.attempt(\n        resourceConstruct,\n        labelEndOk,\n        defined ? labelEndOk : labelEndNok\n      )(code)\n    }\n\n    // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n    if (code === 91) {\n      return effects.attempt(\n        referenceFullConstruct,\n        labelEndOk,\n        defined ? referenceNotFull : labelEndNok\n      )(code)\n    }\n\n    // Shortcut (`[asd]`) reference?\n    return defined ? labelEndOk(code) : labelEndNok(code)\n  }\n\n  /**\n   * After `]`, at `[`, but not at a full reference.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] b\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceNotFull(code) {\n    return effects.attempt(\n      referenceCollapsedConstruct,\n      labelEndOk,\n      labelEndNok\n    )(code)\n  }\n\n  /**\n   * Done, we found something.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *           ^\n   * > | [a][b] c\n   *           ^\n   * > | [a][] b\n   *          ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndOk(code) {\n    // Note: `markdown-rs` does a bunch of stuff here.\n    return ok(code)\n  }\n\n  /**\n   * Done, it’s nothing.\n   *\n   * There was an okay opening, but we didn’t match anything.\n   *\n   * ```markdown\n   * > | [a](b c\n   *        ^\n   * > | [a][b c\n   *        ^\n   * > | [a] b\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEndNok(code) {\n    labelStart._balanced = true\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n  return resourceStart\n\n  /**\n   * At a resource.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceStart(code) {\n    effects.enter('resource')\n    effects.enter('resourceMarker')\n    effects.consume(code)\n    effects.exit('resourceMarker')\n    return resourceBefore\n  }\n\n  /**\n   * In resource, after `(`, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBefore(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceOpen)(code)\n      : resourceOpen(code)\n  }\n\n  /**\n   * In resource, after optional whitespace, at `)` or a destination.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceOpen(code) {\n    if (code === 41) {\n      return resourceEnd(code)\n    }\n    return factoryDestination(\n      effects,\n      resourceDestinationAfter,\n      resourceDestinationMissing,\n      'resourceDestination',\n      'resourceDestinationLiteral',\n      'resourceDestinationLiteralMarker',\n      'resourceDestinationRaw',\n      'resourceDestinationString',\n      32\n    )(code)\n  }\n\n  /**\n   * In resource, after destination, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b) c\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceBetween)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * At invalid destination.\n   *\n   * ```markdown\n   * > | [a](<<) b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceDestinationMissing(code) {\n    return nok(code)\n  }\n\n  /**\n   * In resource, after destination and whitespace, at `(` or title.\n   *\n   * ```markdown\n   * > | [a](b ) c\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceBetween(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        resourceTitleAfter,\n        nok,\n        'resourceTitle',\n        'resourceTitleMarker',\n        'resourceTitleString'\n      )(code)\n    }\n    return resourceEnd(code)\n  }\n\n  /**\n   * In resource, after title, at optional whitespace.\n   *\n   * ```markdown\n   * > | [a](b \"c\") d\n   *              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceTitleAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, resourceEnd)(code)\n      : resourceEnd(code)\n  }\n\n  /**\n   * In resource, at `)`.\n   *\n   * ```markdown\n   * > | [a](b) d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function resourceEnd(code) {\n    if (code === 41) {\n      effects.enter('resourceMarker')\n      effects.consume(code)\n      effects.exit('resourceMarker')\n      effects.exit('resource')\n      return ok\n    }\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n  const self = this\n  return referenceFull\n\n  /**\n   * In a reference (full), at the `[`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFull(code) {\n    return factoryLabel.call(\n      self,\n      effects,\n      referenceFullAfter,\n      referenceFullMissing,\n      'reference',\n      'referenceMarker',\n      'referenceString'\n    )(code)\n  }\n\n  /**\n   * In a reference (full), after `]`.\n   *\n   * ```markdown\n   * > | [a][b] d\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullAfter(code) {\n    return self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n      )\n    )\n      ? ok(code)\n      : nok(code)\n  }\n\n  /**\n   * In reference (full) that was missing.\n   *\n   * ```markdown\n   * > | [a][b d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceFullMissing(code) {\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n  return referenceCollapsedStart\n\n  /**\n   * In reference (collapsed), at `[`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function referenceCollapsedStart(code) {\n    // We only attempt a collapsed label if there’s a `[`.\n\n    effects.enter('reference')\n    effects.enter('referenceMarker')\n    effects.consume(code)\n    effects.exit('referenceMarker')\n    return referenceCollapsedOpen\n  }\n\n  /**\n   * In reference (collapsed), at `]`.\n   *\n   * > 👉 **Note**: we only get here if the label is defined.\n   *\n   * ```markdown\n   * > | [a][] d\n   *         ^\n   * ```\n   *\n   *  @type {State}\n   */\n  function referenceCollapsedOpen(code) {\n    if (code === 93) {\n      effects.enter('referenceMarker')\n      effects.consume(code)\n      effects.exit('referenceMarker')\n      effects.exit('reference')\n      return ok\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (image) start.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelImage')\n    effects.enter('labelImageMarker')\n    effects.consume(code)\n    effects.exit('labelImageMarker')\n    return open\n  }\n\n  /**\n   * After `!`, at `[`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (code === 91) {\n      effects.enter('labelMarker')\n      effects.consume(code)\n      effects.exit('labelMarker')\n      effects.exit('labelImage')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * After `![`.\n   *\n   * ```markdown\n   * > | a ![b] c\n   *         ^\n   * ```\n   *\n   * This is needed in because, when GFM footnotes are enabled, images never\n   * form when started with a `^`.\n   * Instead, links form:\n   *\n   * ```markdown\n   * ![^a](b)\n   *\n   * ![^a][b]\n   *\n   * [b]: c\n   * ```\n   *\n   * ```html\n   * <p>!<a href=\\\"b\\\">^a</a></p>\n   * <p>!<a href=\\\"c\\\">^a</a></p>\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // To do: use a new field to do this, this is still needed for\n    // `micromark-extension-gfm-footnote`, but the `label-start-link`\n    // behavior isn’t.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this\n  return start\n\n  /**\n   * Start of label (link) start.\n   *\n   * ```markdown\n   * > | a [b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('labelLink')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelLink')\n    return after\n  }\n\n  /** @type {State} */\n  function after(code) {\n    // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n    // remove.\n    // Hidden footnotes hook.\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, ok, 'linePrefix')\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * Start of thematic break.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('thematicBreak')\n    // To do: parse indent like `markdown-rs`.\n    return before(code)\n  }\n\n  /**\n   * After optional whitespace, at marker.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    marker = code\n    return atBreak(code)\n  }\n\n  /**\n   * After something, before something else.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter('thematicBreakSequence')\n      return sequence(code)\n    }\n    if (size >= 3 && (code === null || markdownLineEnding(code))) {\n      effects.exit('thematicBreak')\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   * > | ***\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      size++\n      return sequence\n    }\n    effects.exit('thematicBreakSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, atBreak, 'whitespace')(code)\n      : atBreak(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/** @type {Construct} */\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this\n  const tail = self.events[self.events.length - 1]\n  let initialSize =\n    tail && tail[1].type === 'linePrefix'\n      ? tail[2].sliceSerialize(tail[1], true).length\n      : 0\n  let size = 0\n  return start\n\n  /** @type {State} */\n  function start(code) {\n    const kind =\n      self.containerState.type ||\n      (code === 42 || code === 43 || code === 45\n        ? 'listUnordered'\n        : 'listOrdered')\n    if (\n      kind === 'listUnordered'\n        ? !self.containerState.marker || code === self.containerState.marker\n        : asciiDigit(code)\n    ) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind\n        effects.enter(kind, {\n          _container: true\n        })\n      }\n      if (kind === 'listUnordered') {\n        effects.enter('listItemPrefix')\n        return code === 42 || code === 45\n          ? effects.check(thematicBreak, nok, atMarker)(code)\n          : atMarker(code)\n      }\n      if (!self.interrupt || code === 49) {\n        effects.enter('listItemPrefix')\n        effects.enter('listItemValue')\n        return inside(code)\n      }\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code)\n      return inside\n    }\n    if (\n      (!self.interrupt || size < 2) &&\n      (self.containerState.marker\n        ? code === self.containerState.marker\n        : code === 41 || code === 46)\n    ) {\n      effects.exit('listItemValue')\n      return atMarker(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   **/\n  function atMarker(code) {\n    effects.enter('listItemMarker')\n    effects.consume(code)\n    effects.exit('listItemMarker')\n    self.containerState.marker = self.containerState.marker || code\n    return effects.check(\n      blankLine,\n      // Can’t be empty when interrupting.\n      self.interrupt ? nok : onBlank,\n      effects.attempt(\n        listItemPrefixWhitespaceConstruct,\n        endOfPrefix,\n        otherPrefix\n      )\n    )\n  }\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true\n    initialSize++\n    return endOfPrefix(code)\n  }\n\n  /** @type {State} */\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter('listItemPrefixWhitespace')\n      effects.consume(code)\n      effects.exit('listItemPrefixWhitespace')\n      return endOfPrefix\n    }\n    return nok(code)\n  }\n\n  /** @type {State} */\n  function endOfPrefix(code) {\n    self.containerState.size =\n      initialSize +\n      self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n    return ok(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this\n  self.containerState._closeFlow = undefined\n  return effects.check(blankLine, onBlank, notBlank)\n\n  /** @type {State} */\n  function onBlank(code) {\n    self.containerState.furtherBlankLines =\n      self.containerState.furtherBlankLines ||\n      self.containerState.initialBlankLine\n\n    // We have a blank line.\n    // Still, try to consume at most the items size.\n    return factorySpace(\n      effects,\n      ok,\n      'listItemIndent',\n      self.containerState.size + 1\n    )(code)\n  }\n\n  /** @type {State} */\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined\n      self.containerState.initialBlankLine = undefined\n      return notInCurrentItem(code)\n    }\n    self.containerState.furtherBlankLines = undefined\n    self.containerState.initialBlankLine = undefined\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n  }\n\n  /** @type {State} */\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true\n    // As we’re closing flow, we’re no longer interrupting.\n    self.interrupt = undefined\n    // Always populated by defaults.\n\n    return factorySpace(\n      effects,\n      effects.attempt(list, ok, nok),\n      'linePrefix',\n      self.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )(code)\n  }\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemIndent',\n    self.containerState.size + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'listItemIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n      ? ok(code)\n      : nok(code)\n  }\n}\n\n/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this\n\n  // Always populated by defaults.\n\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemPrefixWhitespace',\n    self.parser.constructs.disable.null.includes('codeIndented')\n      ? undefined\n      : 4 + 1\n  )\n\n  /** @type {State} */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return !markdownSpace(code) &&\n      tail &&\n      tail[1].type === 'listItemPrefixWhitespace'\n      ? ok(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n  // To do: resolve like `markdown-rs`.\n  let index = events.length\n  /** @type {number | undefined} */\n  let content\n  /** @type {number | undefined} */\n  let text\n  /** @type {number | undefined} */\n  let definition\n\n  // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === 'content') {\n        content = index\n        break\n      }\n      if (events[index][1].type === 'paragraph') {\n        text = index\n      }\n    }\n    // Exit\n    else {\n      if (events[index][1].type === 'content') {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1)\n      }\n      if (!definition && events[index][1].type === 'definition') {\n        definition = index\n      }\n    }\n  }\n  const heading = {\n    type: 'setextHeading',\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n\n  // Change the paragraph to setext heading text.\n  events[text][1].type = 'setextHeadingText'\n\n  // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context])\n    events.splice(definition + 1, 0, ['exit', events[content][1], context])\n    events[content][1].end = Object.assign({}, events[definition][1].end)\n  } else {\n    events[content][1] = heading\n  }\n\n  // Add the heading exit at the end.\n  events.push(['exit', heading, context])\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n\n  /**\n   * At start of heading (setext) underline.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length\n    /** @type {boolean | undefined} */\n    let paragraph\n    // Find an opening.\n    while (index--) {\n      // Skip enter/exit of line ending, line prefix, and content.\n      // We can now either have a definition or a paragraph.\n      if (\n        self.events[index][1].type !== 'lineEnding' &&\n        self.events[index][1].type !== 'linePrefix' &&\n        self.events[index][1].type !== 'content'\n      ) {\n        paragraph = self.events[index][1].type === 'paragraph'\n        break\n      }\n    }\n\n    // To do: handle lazy/pierce like `markdown-rs`.\n    // To do: parse indent like `markdown-rs`.\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter('setextHeadingLine')\n      marker = code\n      return before(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * After optional whitespace, at `-` or `=`.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function before(code) {\n    effects.enter('setextHeadingLineSequence')\n    return inside(code)\n  }\n\n  /**\n   * In sequence.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return inside\n    }\n    effects.exit('setextHeadingLineSequence')\n    return markdownSpace(code)\n      ? factorySpace(effects, after, 'lineSuffix')(code)\n      : after(code)\n  }\n\n  /**\n   * After sequence, after optional whitespace.\n   *\n   * ```markdown\n   *   | aa\n   * > | ==\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('setextHeadingLine')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Initializer}\n */\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding,\n    // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n\n  /** @type {State} */\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n\n  /** @type {State} */\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n\n/**\n * @param {'string' | 'text'} field\n * @returns {InitialConstruct}\n */\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Initializer}\n   */\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n\n    /** @type {State} */\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n\n    /** @type {State} */\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      }\n\n      // Data.\n      effects.consume(code)\n      return data\n    }\n\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n      const list = constructs[code]\n      let index = -1\n      if (list) {\n        // Always populated by defaults.\n\n        while (++index < list.length) {\n          const item = list[index]\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n      return false\n    }\n  }\n}\n\n/**\n * @param {Resolver | undefined} [extraResolver]\n * @returns {Resolver}\n */\nfunction createResolver(extraResolver) {\n  return resolveAllText\n\n  /** @type {Resolver} */\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number | undefined} */\n    let enter\n\n    // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n        enter = undefined\n      }\n    }\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean | undefined} */\n      let tabs\n      while (index--) {\n        const chunk = chunks[index]\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n          if (bufferIndex) break\n          bufferIndex = -1\n        }\n        // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n      eventIndex++\n    }\n  }\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenType} TokenType\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n */\n\n/**\n * @callback Restore\n * @returns {undefined}\n *\n * @typedef Info\n * @property {Restore} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {undefined}\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_bufferIndex' | '_index'> | undefined} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n  let chunks = []\n  /** @type {Array<Token>} */\n  let stack = []\n  /** @type {boolean | undefined} */\n  let consumed = true\n\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n\n  /**\n   * The state function.\n   *\n   * @type {State | undefined}\n   */\n  let state = initialize.tokenize.call(context, effects)\n\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n  let expectedCode\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n  return context\n\n  /** @type {TokenizeContext['write']} */\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main()\n\n    // Exit if we’re not done, resolve might change stuff.\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n    addResult(initialize, 0)\n\n    // Otherwise, resolve, and exit.\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  }\n\n  //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n\n  /** @type {TokenizeContext['sliceStream']} */\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n\n  /** @type {TokenizeContext['now']} */\n  function now() {\n    // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n    const {line, column, offset, _index, _bufferIndex} = point\n    return {\n      line,\n      column,\n      offset,\n      _index,\n      _bufferIndex\n    }\n  }\n\n  /** @type {TokenizeContext['defineSkip']} */\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  }\n\n  //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {undefined}\n   */\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index]\n\n      // If we’re in a buffer chunk, loop through it.\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {undefined}\n   */\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n\n  /** @type {Effects['consume']} */\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    }\n\n    // Not in a string chunk.\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++\n\n      // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    }\n\n    // Expose the previous character.\n    context.previous = code\n\n    // Mark as consumed.\n    consumed = true\n  }\n\n  /** @type {Effects['enter']} */\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n\n  /** @type {Effects['exit']} */\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n   */\n  function constructFactory(onreturn, fields) {\n    return hook\n\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Array<Construct> | Construct | ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State | undefined} [bogusState]\n     * @returns {State}\n     */\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n      let constructIndex\n      /** @type {Construct} */\n      let currentConstruct\n      /** @type {Info} */\n      let info\n      return Array.isArray(constructs) /* c8 ignore next 1 */\n        ? handleListOfConstructs(constructs)\n        : 'tokenize' in constructs\n        ? // @ts-expect-error Looks like a construct.\n          handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n      function handleMapOfConstructs(map) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n        if (list.length === 0) {\n          return bogusState\n        }\n        return handleConstruct(list[constructIndex])\n      }\n\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n      function handleConstruct(construct) {\n        return start\n\n        /** @type {State} */\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          // Always populated by defaults.\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a “live binding”, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n\n      /** @type {State} */\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n\n      /** @type {State} */\n      function nok(code) {\n        consumed = true\n        info.restore()\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n        return bogusState\n      }\n    }\n  }\n\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {undefined}\n   */\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n\n    /**\n     * Restore state.\n     *\n     * @returns {undefined}\n     */\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {undefined}\n   */\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'end' | 'start'>} token\n * @returns {Array<Chunk>}\n */\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n  let view\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n    if (startBufferIndex > -1) {\n      const head = view[0]\n      if (typeof head === 'string') {\n        view[0] = head.slice(startBufferIndex)\n      } else {\n        view.shift()\n      }\n    }\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n  return view\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean | undefined} [expandTabs=false]\n * @returns {string}\n */\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n  const result = []\n  /** @type {boolean | undefined} */\n  let atTab\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n    let value\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n        case -4: {\n          value = '\\n'\n          break\n        }\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n    atTab = chunk === -2\n    result.push(value)\n  }\n  return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\n\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n  [91]: definition\n}\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n  null: []\n}\n","/**\n * @typedef {import('micromark-util-types').Create} Create\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n */\n\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {string, text} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * @returns {ParseContext}\n */\nexport function parse(options) {\n  const settings = options || {}\n  const constructs =\n    /** @type {FullNormalizedExtension} */\n    combineExtensions([defaultConstructs, ...(settings.extensions || [])])\n\n  /** @type {ParseContext} */\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n\n  /**\n   * @param {InitialConstruct} initial\n   */\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {boolean | null | undefined} [end=false]\n * @returns {Array<Chunk>}\n */\n\nconst search = /[\\0\\t\\n\\r]/g\n\n/**\n * @returns {Preprocessor}\n */\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean | undefined} */\n  let start = true\n  /** @type {boolean | undefined} */\n  let atCarriageReturn\n  return preprocessor\n\n  /** @type {Preprocessor} */\n  // eslint-disable-next-line complexity\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray | null} */\n    let match\n    /** @type {number} */\n    let next\n    /** @type {number} */\n    let startPosition\n    /** @type {number} */\n    let endPosition\n    /** @type {Code} */\n    let code\n    value =\n      buffer +\n      (typeof value === 'string'\n        ? value.toString()\n        : new TextDecoder(encoding || undefined).decode(value))\n    startPosition = 0\n    buffer = ''\n    if (start) {\n      // To do: `markdown-rs` actually parses BOMs (byte order mark).\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n      start = undefined\n    }\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n            while (column++ < next) chunks.push(-1)\n            break\n          }\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n      startPosition = endPosition + 1\n    }\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n    return chunks\n  }\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n *   Value to decode.\n * @returns {string}\n *   Decoded value.\n */\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  }\n\n  // Reference.\n  const head = $2.charCodeAt(0)\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n  return decodeNamedCharacterReference($2) || $0\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parent} Parent\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n *\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Omit<Parent, 'children' | 'type'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | null | undefined | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {undefined | void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {undefined}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Fragment | Nodes>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {(this: CompileContext) => undefined} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {(this: CompileContext, node: Nodes, token: Token, onError?: OnEnterError) => undefined} enter\n *   Enter a node.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => undefined} exit\n *   Exit a node.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n * @property {CompileData} data\n *   Info passed around; key/value store.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse, postprocess, preprocess} from 'micromark'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n *   Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n *   Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {Root}\n *   mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n  if (typeof encoding !== 'string') {\n    options = encoding\n    encoding = undefined\n  }\n  return compiler(options)(\n    postprocess(\n      parse(options).document().write(preprocess()(value, encoding, true))\n    )\n  )\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  }\n  configure(config, (options || {}).mdastExtensions || [])\n\n  /** @type {CompileData} */\n  const data = {}\n  return compile\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    }\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      data\n    }\n    /** @type {Array<number>} */\n    const listStack = []\n    let index = -1\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          const tail = listStack.pop()\n          index = prepareList(events, tail, index)\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      const handler = config[events[index][0]]\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(\n          Object.assign(\n            {\n              sliceSerialize: events[index][2].sliceSerialize\n            },\n            context\n          ),\n          events[index][1]\n        )\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1]\n      const handler = tail[1] || defaultOnError\n      handler.call(context, undefined, tail[0])\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(\n        events.length > 0\n          ? events[0][1].start\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      ),\n      end: point(\n        events.length > 0\n          ? events[events.length - 2][1].end\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      )\n    }\n\n    // Call transforms.\n    index = -1\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree\n    }\n    return tree\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1\n    let containerBalance = -1\n    let listSpread = false\n    /** @type {Token | undefined} */\n    let listItem\n    /** @type {number | undefined} */\n    let lineIndex\n    /** @type {number | undefined} */\n    let firstBlankLineIndex\n    /** @type {boolean | undefined} */\n    let atMarker\n    while (++index <= length) {\n      const event = events[index]\n      switch (event[1].type) {\n        case 'listUnordered':\n        case 'listOrdered':\n        case 'blockQuote': {\n          if (event[0] === 'enter') {\n            containerBalance++\n          } else {\n            containerBalance--\n          }\n          atMarker = undefined\n          break\n        }\n        case 'lineEndingBlank': {\n          if (event[0] === 'enter') {\n            if (\n              listItem &&\n              !atMarker &&\n              !containerBalance &&\n              !firstBlankLineIndex\n            ) {\n              firstBlankLineIndex = index\n            }\n            atMarker = undefined\n          }\n          break\n        }\n        case 'linePrefix':\n        case 'listItemValue':\n        case 'listItemMarker':\n        case 'listItemPrefix':\n        case 'listItemPrefixWhitespace': {\n          // Empty.\n\n          break\n        }\n        default: {\n          atMarker = undefined\n        }\n      }\n      if (\n        (!containerBalance &&\n          event[0] === 'enter' &&\n          event[1].type === 'listItemPrefix') ||\n        (containerBalance === -1 &&\n          event[0] === 'exit' &&\n          (event[1].type === 'listUnordered' ||\n            event[1].type === 'listOrdered'))\n      ) {\n        if (listItem) {\n          let tailIndex = index\n          lineIndex = undefined\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex]\n            if (\n              tailEvent[1].type === 'lineEnding' ||\n              tailEvent[1].type === 'lineEndingBlank'\n            ) {\n              if (tailEvent[0] === 'exit') continue\n              if (lineIndex) {\n                events[lineIndex][1].type = 'lineEndingBlank'\n                listSpread = true\n              }\n              tailEvent[1].type = 'lineEnding'\n              lineIndex = tailIndex\n            } else if (\n              tailEvent[1].type === 'linePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n              tailEvent[1].type === 'blockQuoteMarker' ||\n              tailEvent[1].type === 'listItemIndent'\n            ) {\n              // Empty\n            } else {\n              break\n            }\n          }\n          if (\n            firstBlankLineIndex &&\n            (!lineIndex || firstBlankLineIndex < lineIndex)\n          ) {\n            listItem._spread = true\n          }\n\n          // Fix position.\n          listItem.end = Object.assign(\n            {},\n            lineIndex ? events[lineIndex][1].start : event[1].end\n          )\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n          index++\n          length++\n        }\n\n        // Create a new list item.\n        if (event[1].type === 'listItemPrefix') {\n          /** @type {Token} */\n          const item = {\n            type: 'listItem',\n            _spread: false,\n            start: Object.assign({}, event[1].start),\n            // @ts-expect-error: we’ll add `end` in a second.\n            end: undefined\n          }\n          listItem = item\n          events.splice(index, 0, ['enter', item, event[2]])\n          index++\n          length++\n          firstBlankLineIndex = undefined\n          atMarker = true\n        }\n      }\n    }\n    events[start][1]._spread = listSpread\n    return length\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Nodes} create\n   *   Create a node.\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function open(token) {\n      enter.call(this, create(token), token)\n      if (and) and.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {undefined}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    })\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Nodes} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1]\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    siblings.push(node)\n    this.stack.push(node)\n    this.tokenStack.push([token, errorHandler])\n    node.position = {\n      start: point(token.start),\n      // @ts-expect-error: `end` will be patched later.\n      end: undefined\n    }\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle | undefined} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {undefined}\n     */\n    function close(token) {\n      if (and) and.call(this, token)\n      exit.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop()\n    const open = this.tokenStack.pop()\n    if (!open) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({\n            start: token.start,\n            end: token.end\n          }) +\n          '): it’s not open'\n      )\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0])\n      } else {\n        const handler = open[1] || defaultOnError\n        handler.call(this, token, open[0])\n      }\n    }\n    node.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop())\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    this.data.expectingFirstListItemValue = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (this.data.expectingFirstListItemValue) {\n      const ancestor = this.stack[this.stack.length - 2]\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n      this.data.expectingFirstListItemValue = undefined\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.lang = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.meta = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (this.data.flowCodeInside) return\n    this.buffer()\n    this.data.flowCodeInside = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n    this.data.flowCodeInside = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.label = label\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length\n      node.depth = depth\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    this.data.setextHeadingSlurpLineEnding = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    this.data.setextHeadingSlurpLineEnding = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1]\n    /** @type {Array<Nodes>} */\n    const siblings = node.children\n    let tail = siblings[siblings.length - 1]\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text()\n      tail.position = {\n        start: point(token.start),\n        // @ts-expect-error: we’ll add `end` later.\n        end: undefined\n      }\n      siblings.push(tail)\n    }\n    this.stack.push(tail)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop()\n    tail.value += this.sliceSerialize(token)\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1]\n    // If we’re at a hard break, include the line ending in there.\n    if (this.data.atHardBreak) {\n      const tail = context.children[context.children.length - 1]\n      tail.position.end = point(token.end)\n      this.data.atHardBreak = undefined\n      return\n    }\n    if (\n      !this.data.setextHeadingSlurpLineEnding &&\n      config.canContainEols.includes(context.type)\n    ) {\n      onenterdata.call(this, token)\n      onexitdata.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    this.data.atHardBreak = true\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    this.data.referenceType = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n    // To do: clean.\n    if (this.data.inReference) {\n      /** @type {ReferenceType} */\n      const referenceType = this.data.referenceType || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    this.data.referenceType = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token)\n    const ancestor = this.stack[this.stack.length - 2]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string)\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1]\n    const value = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // Assume a reference.\n    this.data.inReference = true\n    if (node.type === 'link') {\n      /** @type {Array<PhrasingContent>} */\n      const children = fragment.children\n      node.children = children\n    } else {\n      node.alt = value\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    this.data.inReference = undefined\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    this.data.referenceType = 'collapsed'\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n    this.data.referenceType = 'full'\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    this.data.characterReferenceType = token.type\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token)\n    const type = this.data.characterReferenceType\n    /** @type {string} */\n    let value\n    if (type) {\n      value = decodeNumericCharacterReference(\n        data,\n        type === 'characterReferenceMarkerNumeric' ? 10 : 16\n      )\n      this.data.characterReferenceType = undefined\n    } else {\n      const result = decodeNamedCharacterReference(data)\n      value = result\n    }\n    const tail = this.stack.pop()\n    tail.value += value\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = 'mailto:' + this.sliceSerialize(token)\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    }\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    }\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    }\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    }\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    }\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    return {\n      type: 'heading',\n      // @ts-expect-error `depth` will be set later.\n      depth: 0,\n      children: []\n    }\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    }\n  }\n\n  /** @returns {Html} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    }\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    }\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      spread: token._spread,\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      spread: token._spread,\n      checked: null,\n      children: []\n    }\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    }\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    }\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    }\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    }\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Array<Extension> | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n  let index = -1\n  while (++index < extensions.length) {\n    const value = extensions[index]\n    if (Array.isArray(value)) {\n      configure(combined, value)\n    } else {\n      extension(combined, value)\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      switch (key) {\n        case 'canContainEols': {\n          const right = extension[key]\n          if (right) {\n            combined[key].push(...right)\n          }\n          break\n        }\n        case 'transforms': {\n          const right = extension[key]\n          if (right) {\n            combined[key].push(...right)\n          }\n          break\n        }\n        case 'enter':\n        case 'exit': {\n          const right = extension[key]\n          if (right) {\n            Object.assign(combined[key], right)\n          }\n          break\n        }\n        // No default\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error(\n      'Cannot close `' +\n        left.type +\n        '` (' +\n        stringifyPosition({\n          start: left.start,\n          end: left.end\n        }) +\n        '): a different token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is open'\n    )\n  } else {\n    throw new Error(\n      'Cannot close document, a token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is still open'\n    )\n  }\n}\n","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser<Root>} Parser\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkParse(options) {\n  /** @type {Processor} */\n  // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n  const self = this\n\n  self.parser = parser\n\n  /**\n   * @type {Parser}\n   */\n  function parser(doc) {\n    return fromMarkdown(doc, {\n      ...self.data('settings'),\n      ...options,\n      // Note: these options are not in the readme.\n      // The goal is for them to be set by plugins on `data` instead of being\n      // passed by users.\n      extensions: self.data('micromarkExtensions') || [],\n      mdastExtensions: self.data('fromMarkdownExtensions') || []\n    })\n  }\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n *   Value to search in.\n * @param {string} character\n *   Character (or substring) to look for.\n * @return {number}\n *   Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n  const source = String(value)\n\n  if (typeof character !== 'string') {\n    throw new TypeError('Expected character')\n  }\n\n  let count = 0\n  let index = source.indexOf(character)\n\n  while (index !== -1) {\n    count++\n    index = source.indexOf(character, index + character.length)\n  }\n\n  return count\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Text} Text\n * @typedef {import('unist-util-visit-parents').Test} Test\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef RegExpMatchObject\n *   Info on the match.\n * @property {number} index\n *   The index of the search at which the result was found.\n * @property {string} input\n *   A copy of the search string in the text node.\n * @property {[...Array<Parents>, Text]} stack\n *   All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n *   Pattern to find.\n *\n *   Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array<FindAndReplaceTuple>} FindAndReplaceList\n *   Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n *   Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n *   Thing to replace with.\n *\n * @callback ReplaceFunction\n *   Callback called when a search matches.\n * @param {...any} parameters\n *   The parameters are the result of corresponding search expression:\n *\n *   * `value` (`string`) — whole match\n *   * `...capture` (`Array<string>`) — matches from regex capture groups\n *   * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array<PhrasingContent> | PhrasingContent | string | false | null | undefined}\n *   Thing to replace with.\n *\n *   * when `null`, `undefined`, `''`, remove the match\n *   * …or when `false`, do not replace at all\n *   * …or when `string`, replace with a text node of that value\n *   * …or when `Node` or `Array<Node>`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n *   Normalized find and replace.\n *\n * @typedef {Array<Pair>} Pairs\n *   All find and replaced.\n *\n * @typedef Options\n *   Configuration.\n * @property {Test | null | undefined} [ignore]\n *   Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n *   Patterns to find.\n * @param {Options | null | undefined} [options]\n *   Configuration (when `find` is not `Find`).\n * @returns {undefined}\n *   Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n  const settings = options || {}\n  const ignored = convert(settings.ignore || [])\n  const pairs = toPairs(list)\n  let pairIndex = -1\n\n  while (++pairIndex < pairs.length) {\n    visitParents(tree, 'text', visitor)\n  }\n\n  /** @type {import('unist-util-visit-parents').BuildVisitor<Root, 'text'>} */\n  function visitor(node, parents) {\n    let index = -1\n    /** @type {Parents | undefined} */\n    let grandparent\n\n    while (++index < parents.length) {\n      const parent = parents[index]\n      /** @type {Array<Nodes> | undefined} */\n      const siblings = grandparent ? grandparent.children : undefined\n\n      if (\n        ignored(\n          parent,\n          siblings ? siblings.indexOf(parent) : undefined,\n          grandparent\n        )\n      ) {\n        return\n      }\n\n      grandparent = parent\n    }\n\n    if (grandparent) {\n      return handler(node, parents)\n    }\n  }\n\n  /**\n   * Handle a text node which is not in an ignored parent.\n   *\n   * @param {Text} node\n   *   Text node.\n   * @param {Array<Parents>} parents\n   *   Parents.\n   * @returns {VisitorResult}\n   *   Result.\n   */\n  function handler(node, parents) {\n    const parent = parents[parents.length - 1]\n    const find = pairs[pairIndex][0]\n    const replace = pairs[pairIndex][1]\n    let start = 0\n    /** @type {Array<Nodes>} */\n    const siblings = parent.children\n    const index = siblings.indexOf(node)\n    let change = false\n    /** @type {Array<PhrasingContent>} */\n    let nodes = []\n\n    find.lastIndex = 0\n\n    let match = find.exec(node.value)\n\n    while (match) {\n      const position = match.index\n      /** @type {RegExpMatchObject} */\n      const matchObject = {\n        index: match.index,\n        input: match.input,\n        stack: [...parents, node]\n      }\n      let value = replace(...match, matchObject)\n\n      if (typeof value === 'string') {\n        value = value.length > 0 ? {type: 'text', value} : undefined\n      }\n\n      // It wasn’t a match after all.\n      if (value === false) {\n        // False acts as if there was no match.\n        // So we need to reset `lastIndex`, which currently being at the end of\n        // the current match, to the beginning.\n        find.lastIndex = position + 1\n      } else {\n        if (start !== position) {\n          nodes.push({\n            type: 'text',\n            value: node.value.slice(start, position)\n          })\n        }\n\n        if (Array.isArray(value)) {\n          nodes.push(...value)\n        } else if (value) {\n          nodes.push(value)\n        }\n\n        start = position + match[0].length\n        change = true\n      }\n\n      if (!find.global) {\n        break\n      }\n\n      match = find.exec(node.value)\n    }\n\n    if (change) {\n      if (start < node.value.length) {\n        nodes.push({type: 'text', value: node.value.slice(start)})\n      }\n\n      parent.children.splice(index, 1, ...nodes)\n    } else {\n      nodes = [node]\n    }\n\n    return index + nodes.length\n  }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n *   Schema.\n * @returns {Pairs}\n *   Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n  /** @type {Pairs} */\n  const result = []\n\n  if (!Array.isArray(tupleOrList)) {\n    throw new TypeError('Expected find and replace tuple or list of tuples')\n  }\n\n  /** @type {FindAndReplaceList} */\n  // @ts-expect-error: correct.\n  const list =\n    !tupleOrList[0] || Array.isArray(tupleOrList[0])\n      ? tupleOrList\n      : [tupleOrList]\n\n  let index = -1\n\n  while (++index < list.length) {\n    const tuple = list[index]\n    result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n  }\n\n  return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n *   Find.\n * @returns {RegExp}\n *   Expression.\n */\nfunction toExpression(find) {\n  return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n *   Replace.\n * @returns {ReplaceFunction}\n *   Function.\n */\nfunction toFunction(replace) {\n  return typeof replace === 'function'\n    ? replace\n    : function () {\n        return replace\n      }\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-from-markdown').Transform} FromMarkdownTransform\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n *\n * @typedef {import('mdast-util-find-and-replace').RegExpMatchObject} RegExpMatchObject\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array<ConstructName>} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n  return {\n    transforms: [transformGfmAutolinkLiterals],\n    enter: {\n      literalAutolink: enterLiteralAutolink,\n      literalAutolinkEmail: enterLiteralAutolinkValue,\n      literalAutolinkHttp: enterLiteralAutolinkValue,\n      literalAutolinkWww: enterLiteralAutolinkValue\n    },\n    exit: {\n      literalAutolink: exitLiteralAutolink,\n      literalAutolinkEmail: exitLiteralAutolinkEmail,\n      literalAutolinkHttp: exitLiteralAutolinkHttp,\n      literalAutolinkWww: exitLiteralAutolinkWww\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '@',\n        before: '[+\\\\-.\\\\w]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: '.',\n        before: '[Ww]',\n        after: '[\\\\-.\\\\w]',\n        inConstruct,\n        notInConstruct\n      },\n      {\n        character: ':',\n        before: '[ps]',\n        after: '\\\\/',\n        inConstruct,\n        notInConstruct\n      }\n    ]\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n  this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n  this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n  this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n  this.config.exit.data.call(this, token)\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'link')\n  node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n  this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n  this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n  findAndReplace(\n    tree,\n    [\n      [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n      [/([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/g, findEmail]\n    ],\n    {ignore: ['link', 'linkReference']}\n  )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array<PhrasingContent> | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n  let prefix = ''\n\n  // Not an expected previous character.\n  if (!previous(match)) {\n    return false\n  }\n\n  // Treat `www` as part of the domain.\n  if (/^w/i.test(protocol)) {\n    domain = protocol + domain\n    protocol = ''\n    prefix = 'http://'\n  }\n\n  if (!isCorrectDomain(domain)) {\n    return false\n  }\n\n  const parts = splitUrl(domain + path)\n\n  if (!parts[0]) return false\n\n  /** @type {Link} */\n  const result = {\n    type: 'link',\n    title: null,\n    url: prefix + protocol + parts[0],\n    children: [{type: 'text', value: protocol + parts[0]}]\n  }\n\n  if (parts[1]) {\n    return [result, {type: 'text', value: parts[1]}]\n  }\n\n  return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n  if (\n    // Not an expected previous character.\n    !previous(match, true) ||\n    // Label ends in not allowed character.\n    /[-\\d_]$/.test(label)\n  ) {\n    return false\n  }\n\n  return {\n    type: 'link',\n    title: null,\n    url: 'mailto:' + atext + '@' + label,\n    children: [{type: 'text', value: atext + '@' + label}]\n  }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n  const parts = domain.split('.')\n\n  if (\n    parts.length < 2 ||\n    (parts[parts.length - 1] &&\n      (/_/.test(parts[parts.length - 1]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n    (parts[parts.length - 2] &&\n      (/_/.test(parts[parts.length - 2]) ||\n        !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n  ) {\n    return false\n  }\n\n  return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n  const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n  if (!trailExec) {\n    return [url, undefined]\n  }\n\n  url = url.slice(0, trailExec.index)\n\n  let trail = trailExec[0]\n  let closingParenIndex = trail.indexOf(')')\n  const openingParens = ccount(url, '(')\n  let closingParens = ccount(url, ')')\n\n  while (closingParenIndex !== -1 && openingParens > closingParens) {\n    url += trail.slice(0, closingParenIndex + 1)\n    trail = trail.slice(closingParenIndex + 1)\n    closingParenIndex = trail.indexOf(')')\n    closingParens++\n  }\n\n  return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n  const code = match.input.charCodeAt(match.index - 1)\n\n  return (\n    (match.index === 0 ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)) &&\n    (!email || code !== 47)\n  )\n}\n","/**\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n  return {\n    enter: {\n      gfmFootnoteDefinition: enterFootnoteDefinition,\n      gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n      gfmFootnoteCall: enterFootnoteCall,\n      gfmFootnoteCallString: enterFootnoteCallString\n    },\n    exit: {\n      gfmFootnoteDefinition: exitFootnoteDefinition,\n      gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n      gfmFootnoteCall: exitFootnoteCall,\n      gfmFootnoteCallString: exitFootnoteCallString\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n  return {\n    // This is on by default already.\n    unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n    handlers: {footnoteDefinition, footnoteReference}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n  this.enter(\n    {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n    token\n  )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteDefinition')\n  node.label = label\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n  this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n  this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n  const label = this.resume()\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'footnoteReference')\n  node.label = label\n  node.identifier = normalizeIdentifier(\n    this.sliceSerialize(token)\n  ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[^')\n  const exit = state.enter('footnoteReference')\n  const subexit = state.enter('reference')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      ...tracker.current(),\n      before: value,\n      after: ']'\n    })\n  )\n  subexit()\n  exit()\n  value += tracker.move(']')\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n  return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[^')\n  const exit = state.enter('footnoteDefinition')\n  const subexit = state.enter('label')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      ...tracker.current(),\n      before: value,\n      after: ']'\n    })\n  )\n  subexit()\n  value += tracker.move(\n    ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n  )\n  tracker.shift(4)\n  value += tracker.move(\n    state.indentLines(state.containerFlow(node, tracker.current()), map)\n  )\n  exit()\n\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n  if (index === 0) {\n    return line\n  }\n\n  return (blank ? '' : '    ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: <https://github.com/syntax-tree/mdast-util-to-markdown/blob/8ce8dbf/lib/unsafe.js#L14>\n *\n * @type {Array<ConstructName>}\n */\nconst constructsWithoutStrikethrough = [\n  'autolink',\n  'destinationLiteral',\n  'destinationRaw',\n  'reference',\n  'titleQuote',\n  'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n  return {\n    canContainEols: ['delete'],\n    enter: {strikethrough: enterStrikethrough},\n    exit: {strikethrough: exitStrikethrough}\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n  return {\n    unsafe: [\n      {\n        character: '~',\n        inConstruct: 'phrasing',\n        notInConstruct: constructsWithoutStrikethrough\n      }\n    ],\n    handlers: {delete: handleDelete}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n  this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n  const tracker = state.createTracker(info)\n  const exit = state.enter('strikethrough')\n  let value = tracker.move('~~')\n  value += state.containerPhrasing(node, {\n    ...tracker.current(),\n    before: value,\n    after: '~'\n  })\n  value += tracker.move('~~')\n  exit()\n  return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n  return '~'\n}\n","/**\n * @typedef Options\n *   Configuration (optional).\n * @property {string|null|ReadonlyArray<string|null|undefined>} [align]\n *   One style for all columns, or styles for their respective columns.\n *   Each style is either `'l'` (left), `'r'` (right), or `'c'` (center).\n *   Other values are treated as `''`, which doesn’t place the colon in the\n *   alignment row but does align left.\n *   *Only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean} [padding=true]\n *   Whether to add a space of padding between delimiters and cells.\n *\n *   When `true`, there is padding:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there is no padding:\n *\n *   ```markdown\n *   |Alpha|B    |\n *   |-----|-----|\n *   |C    |Delta|\n *   ```\n * @property {boolean} [delimiterStart=true]\n *   Whether to begin each row with the delimiter.\n *\n *   > 👉 **Note**: please don’t use this: it could create fragile structures\n *   > that aren’t understandable to some markdown parsers.\n *\n *   When `true`, there are starting delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no starting delimiters:\n *\n *   ```markdown\n *   Alpha | B     |\n *   ----- | ----- |\n *   C     | Delta |\n *   ```\n * @property {boolean} [delimiterEnd=true]\n *   Whether to end each row with the delimiter.\n *\n *   > 👉 **Note**: please don’t use this: it could create fragile structures\n *   > that aren’t understandable to some markdown parsers.\n *\n *   When `true`, there are ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   When `false`, there are no ending delimiters:\n *\n *   ```markdown\n *   | Alpha | B\n *   | ----- | -----\n *   | C     | Delta\n *   ```\n * @property {boolean} [alignDelimiters=true]\n *   Whether to align the delimiters.\n *   By default, they are aligned:\n *\n *   ```markdown\n *   | Alpha | B     |\n *   | ----- | ----- |\n *   | C     | Delta |\n *   ```\n *\n *   Pass `false` to make them staggered:\n *\n *   ```markdown\n *   | Alpha | B |\n *   | - | - |\n *   | C | Delta |\n *   ```\n * @property {(value: string) => number} [stringLength]\n *   Function to detect the length of table cell content.\n *   This is used when aligning the delimiters (`|`) between table cells.\n *   Full-width characters and emoji mess up delimiter alignment when viewing\n *   the markdown source.\n *   To fix this, you can pass this function, which receives the cell content\n *   and returns its “visible” size.\n *   Note that what is and isn’t visible depends on where the text is displayed.\n *\n *   Without such a function, the following:\n *\n *   ```js\n *   markdownTable([\n *     ['Alpha', 'Bravo'],\n *     ['中文', 'Charlie'],\n *     ['👩‍❤️‍👩', 'Delta']\n *   ])\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo |\n *   | - | - |\n *   | 中文 | Charlie |\n *   | 👩‍❤️‍👩 | Delta |\n *   ```\n *\n *   With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n *   ```js\n *   import stringWidth from 'string-width'\n *\n *   markdownTable(\n *     [\n *       ['Alpha', 'Bravo'],\n *       ['中文', 'Charlie'],\n *       ['👩‍❤️‍👩', 'Delta']\n *     ],\n *     {stringLength: stringWidth}\n *   )\n *   ```\n *\n *   Yields:\n *\n *   ```markdown\n *   | Alpha | Bravo   |\n *   | ----- | ------- |\n *   | 中文  | Charlie |\n *   | 👩‍❤️‍👩    | Delta   |\n *   ```\n */\n\n/**\n * @typedef {Options} MarkdownTableOptions\n * @todo\n *   Remove next major.\n */\n\n/**\n * Generate a markdown ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables)) table..\n *\n * @param {ReadonlyArray<ReadonlyArray<string|null|undefined>>} table\n *   Table data (matrix of strings).\n * @param {Options} [options]\n *   Configuration (optional).\n * @returns {string}\n */\nexport function markdownTable(table, options = {}) {\n  const align = (options.align || []).concat()\n  const stringLength = options.stringLength || defaultStringLength\n  /** @type {Array<number>} Character codes as symbols for alignment per column. */\n  const alignments = []\n  /** @type {Array<Array<string>>} Cells per row. */\n  const cellMatrix = []\n  /** @type {Array<Array<number>>} Sizes of each cell per row. */\n  const sizeMatrix = []\n  /** @type {Array<number>} */\n  const longestCellByColumn = []\n  let mostCellsPerRow = 0\n  let rowIndex = -1\n\n  // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n  // do superfluous work when aligning, so optimize for aligning.\n  while (++rowIndex < table.length) {\n    /** @type {Array<string>} */\n    const row = []\n    /** @type {Array<number>} */\n    const sizes = []\n    let columnIndex = -1\n\n    if (table[rowIndex].length > mostCellsPerRow) {\n      mostCellsPerRow = table[rowIndex].length\n    }\n\n    while (++columnIndex < table[rowIndex].length) {\n      const cell = serialize(table[rowIndex][columnIndex])\n\n      if (options.alignDelimiters !== false) {\n        const size = stringLength(cell)\n        sizes[columnIndex] = size\n\n        if (\n          longestCellByColumn[columnIndex] === undefined ||\n          size > longestCellByColumn[columnIndex]\n        ) {\n          longestCellByColumn[columnIndex] = size\n        }\n      }\n\n      row.push(cell)\n    }\n\n    cellMatrix[rowIndex] = row\n    sizeMatrix[rowIndex] = sizes\n  }\n\n  // Figure out which alignments to use.\n  let columnIndex = -1\n\n  if (typeof align === 'object' && 'length' in align) {\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = toAlignment(align[columnIndex])\n    }\n  } else {\n    const code = toAlignment(align)\n\n    while (++columnIndex < mostCellsPerRow) {\n      alignments[columnIndex] = code\n    }\n  }\n\n  // Inject the alignment row.\n  columnIndex = -1\n  /** @type {Array<string>} */\n  const row = []\n  /** @type {Array<number>} */\n  const sizes = []\n\n  while (++columnIndex < mostCellsPerRow) {\n    const code = alignments[columnIndex]\n    let before = ''\n    let after = ''\n\n    if (code === 99 /* `c` */) {\n      before = ':'\n      after = ':'\n    } else if (code === 108 /* `l` */) {\n      before = ':'\n    } else if (code === 114 /* `r` */) {\n      after = ':'\n    }\n\n    // There *must* be at least one hyphen-minus in each alignment cell.\n    let size =\n      options.alignDelimiters === false\n        ? 1\n        : Math.max(\n            1,\n            longestCellByColumn[columnIndex] - before.length - after.length\n          )\n\n    const cell = before + '-'.repeat(size) + after\n\n    if (options.alignDelimiters !== false) {\n      size = before.length + size + after.length\n\n      if (size > longestCellByColumn[columnIndex]) {\n        longestCellByColumn[columnIndex] = size\n      }\n\n      sizes[columnIndex] = size\n    }\n\n    row[columnIndex] = cell\n  }\n\n  // Inject the alignment row.\n  cellMatrix.splice(1, 0, row)\n  sizeMatrix.splice(1, 0, sizes)\n\n  rowIndex = -1\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (++rowIndex < cellMatrix.length) {\n    const row = cellMatrix[rowIndex]\n    const sizes = sizeMatrix[rowIndex]\n    columnIndex = -1\n    /** @type {Array<string>} */\n    const line = []\n\n    while (++columnIndex < mostCellsPerRow) {\n      const cell = row[columnIndex] || ''\n      let before = ''\n      let after = ''\n\n      if (options.alignDelimiters !== false) {\n        const size =\n          longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n        const code = alignments[columnIndex]\n\n        if (code === 114 /* `r` */) {\n          before = ' '.repeat(size)\n        } else if (code === 99 /* `c` */) {\n          if (size % 2) {\n            before = ' '.repeat(size / 2 + 0.5)\n            after = ' '.repeat(size / 2 - 0.5)\n          } else {\n            before = ' '.repeat(size / 2)\n            after = before\n          }\n        } else {\n          after = ' '.repeat(size)\n        }\n      }\n\n      if (options.delimiterStart !== false && !columnIndex) {\n        line.push('|')\n      }\n\n      if (\n        options.padding !== false &&\n        // Don’t add the opening space if we’re not aligning and the cell is\n        // empty: there will be a closing space.\n        !(options.alignDelimiters === false && cell === '') &&\n        (options.delimiterStart !== false || columnIndex)\n      ) {\n        line.push(' ')\n      }\n\n      if (options.alignDelimiters !== false) {\n        line.push(before)\n      }\n\n      line.push(cell)\n\n      if (options.alignDelimiters !== false) {\n        line.push(after)\n      }\n\n      if (options.padding !== false) {\n        line.push(' ')\n      }\n\n      if (\n        options.delimiterEnd !== false ||\n        columnIndex !== mostCellsPerRow - 1\n      ) {\n        line.push('|')\n      }\n    }\n\n    lines.push(\n      options.delimiterEnd === false\n        ? line.join('').replace(/ +$/, '')\n        : line.join('')\n    )\n  }\n\n  return lines.join('\\n')\n}\n\n/**\n * @param {string|null|undefined} [value]\n * @returns {string}\n */\nfunction serialize(value) {\n  return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string} value\n * @returns {number}\n */\nfunction defaultStringLength(value) {\n  return value.length\n}\n\n/**\n * @param {string|null|undefined} value\n * @returns {number}\n */\nfunction toAlignment(value) {\n  const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n  return code === 67 /* `C` */ || code === 99 /* `c` */\n    ? 99 /* `c` */\n    : code === 76 /* `L` */ || code === 108 /* `l` */\n    ? 108 /* `l` */\n    : code === 82 /* `R` */ || code === 114 /* `r` */\n    ? 114 /* `r` */\n    : 0\n}\n","/**\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n  const exit = state.enter('blockquote')\n  const tracker = state.createTracker(info)\n  tracker.move('> ')\n  tracker.shift(2)\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('../types.js').ConstructName} ConstructName\n * @typedef {import('../types.js').Unsafe} Unsafe\n */\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n  return (\n    listInScope(stack, pattern.inConstruct, true) &&\n    !listInScope(stack, pattern.notInConstruct, false)\n  )\n}\n\n/**\n * @param {Array<ConstructName>} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n  if (typeof list === 'string') {\n    list = [list]\n  }\n\n  if (!list || list.length === 0) {\n    return none\n  }\n\n  let index = -1\n\n  while (++index < list.length) {\n    if (stack.includes(list[index])) {\n      return true\n    }\n  }\n\n  return false\n}\n","/**\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n  let index = -1\n\n  while (++index < state.unsafe.length) {\n    // If we can’t put eols in this construct (setext headings, tables), use a\n    // space instead.\n    if (\n      state.unsafe[index].character === '\\n' &&\n      patternInScope(state.stack, state.unsafe[index])\n    ) {\n      return /[ \\t]/.test(info.before) ? '' : ' '\n    }\n  }\n\n  return '\\\\\\n'\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n *   Content to search in.\n * @param {string} substring\n *   Substring to look for, typically one character.\n * @returns {number}\n *   Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n  const source = String(value)\n  let index = source.indexOf(substring)\n  let expected = index\n  let count = 0\n  let max = 0\n\n  if (typeof substring !== 'string') {\n    throw new TypeError('Expected substring')\n  }\n\n  while (index !== -1) {\n    if (index === expected) {\n      if (++count > max) {\n        max = count\n      }\n    } else {\n      count = 1\n    }\n\n    expected = index + substring.length\n    index = source.indexOf(substring, expected)\n  }\n\n  return max\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n  return Boolean(\n    state.options.fences === false &&\n      node.value &&\n      // If there’s no info…\n      !node.lang &&\n      // And there’s a non-whitespace character…\n      /[^ \\r\\n]/.test(node.value) &&\n      // And the value doesn’t start or end in a blank…\n      !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n  )\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['fence'], null | undefined>}\n */\nexport function checkFence(state) {\n  const marker = state.options.fence || '`'\n\n  if (marker !== '`' && marker !== '~') {\n    throw new Error(\n      'Cannot serialize code with `' +\n        marker +\n        '` for `options.fence`, expected `` ` `` or `~`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n  const marker = checkFence(state)\n  const raw = node.value || ''\n  const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n  if (formatCodeAsIndented(node, state)) {\n    const exit = state.enter('codeIndented')\n    const value = state.indentLines(raw, map)\n    exit()\n    return value\n  }\n\n  const tracker = state.createTracker(info)\n  const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n  const exit = state.enter('codeFenced')\n  let value = tracker.move(sequence)\n\n  if (node.lang) {\n    const subexit = state.enter(`codeFencedLang${suffix}`)\n    value += tracker.move(\n      state.safe(node.lang, {\n        before: value,\n        after: ' ',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  if (node.lang && node.meta) {\n    const subexit = state.enter(`codeFencedMeta${suffix}`)\n    value += tracker.move(' ')\n    value += tracker.move(\n      state.safe(node.meta, {\n        before: value,\n        after: '\\n',\n        encode: ['`'],\n        ...tracker.current()\n      })\n    )\n    subexit()\n  }\n\n  value += tracker.move('\\n')\n\n  if (raw) {\n    value += tracker.move(raw + '\\n')\n  }\n\n  value += tracker.move(sequence)\n  exit()\n  return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n  return (blank ? '' : '    ') + line\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['quote'], null | undefined>}\n */\nexport function checkQuote(state) {\n  const marker = state.options.quote || '\"'\n\n  if (marker !== '\"' && marker !== \"'\") {\n    throw new Error(\n      'Cannot serialize title with `' +\n        marker +\n        '` for `options.quote`, expected `\"`, or `\\'`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('definition')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.safe(state.associationId(node), {\n      before: value,\n      after: ']',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(']: ')\n\n  subexit()\n\n  if (\n    // If there’s no url, or…\n    !node.url ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : '\\n',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  exit()\n\n  return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['emphasis'], null | undefined>}\n */\nexport function checkEmphasis(state) {\n  const marker = state.options.emphasis || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize emphasis with `' +\n        marker +\n        '` for `options.emphasis`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\n\nemphasis.peek = emphasisPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n  const marker = checkEmphasis(state)\n  const exit = state.enter('emphasis')\n  const tracker = state.createTracker(info)\n  let value = tracker.move(marker)\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: marker,\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(marker)\n  exit()\n  return value\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n  return state.options.emphasis || '*'\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../types.js').State} State\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n  let literalWithBreak = false\n\n  // Look for literals with a line break.\n  // Note that this also\n  visit(node, function (node) {\n    if (\n      ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n      node.type === 'break'\n    ) {\n      literalWithBreak = true\n      return EXIT\n    }\n  })\n\n  return Boolean(\n    (!node.depth || node.depth < 3) &&\n      toString(node) &&\n      (state.options.setext || literalWithBreak)\n  )\n}\n","/**\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n  const rank = Math.max(Math.min(6, node.depth || 1), 1)\n  const tracker = state.createTracker(info)\n\n  if (formatHeadingAsSetext(node, state)) {\n    const exit = state.enter('headingSetext')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...tracker.current(),\n      before: '\\n',\n      after: '\\n'\n    })\n    subexit()\n    exit()\n\n    return (\n      value +\n      '\\n' +\n      (rank === 1 ? '=' : '-').repeat(\n        // The whole size…\n        value.length -\n          // Minus the position of the character after the last EOL (or\n          // 0 if there is none)…\n          (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n      )\n    )\n  }\n\n  const sequence = '#'.repeat(rank)\n  const exit = state.enter('headingAtx')\n  const subexit = state.enter('phrasing')\n\n  // Note: for proper tracking, we should reset the output positions when there\n  // is no content returned, because then the space is not output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  tracker.move(sequence + ' ')\n\n  let value = state.containerPhrasing(node, {\n    before: '# ',\n    after: '\\n',\n    ...tracker.current()\n  })\n\n  if (/^[\\t ]/.test(value)) {\n    // To do: what effect has the character reference on tracking?\n    value =\n      '&#x' +\n      value.charCodeAt(0).toString(16).toUpperCase() +\n      ';' +\n      value.slice(1)\n  }\n\n  value = value ? sequence + ' ' + value : sequence\n\n  if (state.options.closeAtx) {\n    value += ' ' + sequence\n  }\n\n  subexit()\n  exit()\n\n  return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n  return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n  return '<'\n}\n","/**\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const exit = state.enter('image')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  value += tracker.move(\n    state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n  )\n  value += tracker.move('](')\n\n  subexit()\n\n  if (\n    // If there’s no url but there is a title…\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n  exit()\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n  return '!'\n}\n","/**\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('imageReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('![')\n  const alt = state.safe(node.alt, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(alt + '][')\n\n  subexit()\n  // Hide the fact that we’re in phrasing, because escapes don’t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !alt || alt !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n  return '!'\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').State} State\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n  let value = node.value || ''\n  let sequence = '`'\n  let index = -1\n\n  // If there is a single grave accent on its own in the code, use a fence of\n  // two.\n  // If there are two in a row, use one.\n  while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n    sequence += '`'\n  }\n\n  // If this is not just spaces or eols (tabs don’t count), and either the\n  // first or last character are a space, eol, or tick, then pad with spaces.\n  if (\n    /[^ \\r\\n]/.test(value) &&\n    ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n  ) {\n    value = ' ' + value + ' '\n  }\n\n  // We have a potential problem: certain characters after eols could result in\n  // blocks being seen.\n  // For example, if someone injected the string `'\\n# b'`, then that would\n  // result in an ATX heading.\n  // We can’t escape characters in `inlineCode`, but because eols are\n  // transformed to spaces when going from markdown to HTML anyway, we can swap\n  // them out.\n  while (++index < state.unsafe.length) {\n    const pattern = state.unsafe[index]\n    const expression = state.compilePattern(pattern)\n    /** @type {RegExpExecArray | null} */\n    let match\n\n    // Only look for `atBreak`s.\n    // Btw: note that `atBreak` patterns will always start the regex at LF or\n    // CR.\n    if (!pattern.atBreak) continue\n\n    while ((match = expression.exec(value))) {\n      let position = match.index\n\n      // Support CRLF (patterns only look for one of the characters).\n      if (\n        value.charCodeAt(position) === 10 /* `\\n` */ &&\n        value.charCodeAt(position - 1) === 13 /* `\\r` */\n      ) {\n        position--\n      }\n\n      value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n    }\n  }\n\n  return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n  return '`'\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../types.js').State} State\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n  const raw = toString(node)\n\n  return Boolean(\n    !state.options.resourceLink &&\n      // If there’s a url…\n      node.url &&\n      // And there’s a no title…\n      !node.title &&\n      // And the content of `node` is a single text node…\n      node.children &&\n      node.children.length === 1 &&\n      node.children[0].type === 'text' &&\n      // And if the url is the same as the content…\n      (raw === node.url || 'mailto:' + raw === node.url) &&\n      // And that starts w/ a protocol…\n      /^[a-z][a-z+.-]+:/i.test(node.url) &&\n      // And that doesn’t contain ASCII control codes (character escapes and\n      // references don’t work), space, or angle brackets…\n      !/[\\0- <>\\u007F]/.test(node.url)\n  )\n}\n","/**\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Exit} Exit\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n  const quote = checkQuote(state)\n  const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n  const tracker = state.createTracker(info)\n  /** @type {Exit} */\n  let exit\n  /** @type {Exit} */\n  let subexit\n\n  if (formatLinkAsAutolink(node, state)) {\n    // Hide the fact that we’re in phrasing, because escapes don’t work.\n    const stack = state.stack\n    state.stack = []\n    exit = state.enter('autolink')\n    let value = tracker.move('<')\n    value += tracker.move(\n      state.containerPhrasing(node, {\n        before: value,\n        after: '>',\n        ...tracker.current()\n      })\n    )\n    value += tracker.move('>')\n    exit()\n    state.stack = stack\n    return value\n  }\n\n  exit = state.enter('link')\n  subexit = state.enter('label')\n  let value = tracker.move('[')\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: '](',\n      ...tracker.current()\n    })\n  )\n  value += tracker.move('](')\n  subexit()\n\n  if (\n    // If there’s no url but there is a title…\n    (!node.url && node.title) ||\n    // If there are control characters or whitespace.\n    /[\\0- \\u007F]/.test(node.url)\n  ) {\n    subexit = state.enter('destinationLiteral')\n    value += tracker.move('<')\n    value += tracker.move(\n      state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n    )\n    value += tracker.move('>')\n  } else {\n    // No whitespace, raw is prettier.\n    subexit = state.enter('destinationRaw')\n    value += tracker.move(\n      state.safe(node.url, {\n        before: value,\n        after: node.title ? ' ' : ')',\n        ...tracker.current()\n      })\n    )\n  }\n\n  subexit()\n\n  if (node.title) {\n    subexit = state.enter(`title${suffix}`)\n    value += tracker.move(' ' + quote)\n    value += tracker.move(\n      state.safe(node.title, {\n        before: value,\n        after: quote,\n        ...tracker.current()\n      })\n    )\n    value += tracker.move(quote)\n    subexit()\n  }\n\n  value += tracker.move(')')\n\n  exit()\n  return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n  return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n  const type = node.referenceType\n  const exit = state.enter('linkReference')\n  let subexit = state.enter('label')\n  const tracker = state.createTracker(info)\n  let value = tracker.move('[')\n  const text = state.containerPhrasing(node, {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  value += tracker.move(text + '][')\n\n  subexit()\n  // Hide the fact that we’re in phrasing, because escapes don’t work.\n  const stack = state.stack\n  state.stack = []\n  subexit = state.enter('reference')\n  // Note: for proper tracking, we should reset the output positions when we end\n  // up making a `shortcut` reference, because then there is no brace output.\n  // Practically, in that case, there is no content, so it doesn’t matter that\n  // we’ve tracked one too many characters.\n  const reference = state.safe(state.associationId(node), {\n    before: value,\n    after: ']',\n    ...tracker.current()\n  })\n  subexit()\n  state.stack = stack\n  exit()\n\n  if (type === 'full' || !text || text !== reference) {\n    value += tracker.move(reference + ']')\n  } else if (type === 'shortcut') {\n    // Remove the unwanted `[`.\n    value = value.slice(0, -1)\n  } else {\n    value += tracker.move(']')\n  }\n\n  return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n  return '['\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBullet(state) {\n  const marker = state.options.bullet || '*'\n\n  if (marker !== '*' && marker !== '+' && marker !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bullet`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bullet'], null | undefined>}\n */\nexport function checkBulletOther(state) {\n  const bullet = checkBullet(state)\n  const bulletOther = state.options.bulletOther\n\n  if (!bulletOther) {\n    return bullet === '*' ? '-' : '*'\n  }\n\n  if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        bulletOther +\n        '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n    )\n  }\n\n  if (bulletOther === bullet) {\n    throw new Error(\n      'Expected `bullet` (`' +\n        bullet +\n        '`) and `bulletOther` (`' +\n        bulletOther +\n        '`) to be different'\n    )\n  }\n\n  return bulletOther\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['bulletOrdered'], null | undefined>}\n */\nexport function checkBulletOrdered(state) {\n  const marker = state.options.bulletOrdered || '.'\n\n  if (marker !== '.' && marker !== ')') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        marker +\n        '` for `options.bulletOrdered`, expected `.` or `)`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['rule'], null | undefined>}\n */\nexport function checkRule(state) {\n  const marker = state.options.rule || '*'\n\n  if (marker !== '*' && marker !== '-' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize rules with `' +\n        marker +\n        '` for `options.rule`, expected `*`, `-`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n  const exit = state.enter('list')\n  const bulletCurrent = state.bulletCurrent\n  /** @type {string} */\n  let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n  /** @type {string} */\n  const bulletOther = node.ordered\n    ? bullet === '.'\n      ? ')'\n      : '.'\n    : checkBulletOther(state)\n  let useDifferentMarker =\n    parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n  if (!node.ordered) {\n    const firstListItem = node.children ? node.children[0] : undefined\n\n    // If there’s an empty first list item directly in two list items,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * - *\n    // ```\n    //\n    // …because otherwise it would become one big thematic break.\n    if (\n      // Bullet could be used as a thematic break marker:\n      (bullet === '*' || bullet === '-') &&\n      // Empty first list item:\n      firstListItem &&\n      (!firstListItem.children || !firstListItem.children[0]) &&\n      // Directly in two other list items:\n      state.stack[state.stack.length - 1] === 'list' &&\n      state.stack[state.stack.length - 2] === 'listItem' &&\n      state.stack[state.stack.length - 3] === 'list' &&\n      state.stack[state.stack.length - 4] === 'listItem' &&\n      // That are each the first child.\n      state.indexStack[state.indexStack.length - 1] === 0 &&\n      state.indexStack[state.indexStack.length - 2] === 0 &&\n      state.indexStack[state.indexStack.length - 3] === 0\n    ) {\n      useDifferentMarker = true\n    }\n\n    // If there’s a thematic break at the start of the first list item,\n    // we have to use a different bullet:\n    //\n    // ```markdown\n    // * ---\n    // ```\n    //\n    // …because otherwise it would become one big thematic break.\n    if (checkRule(state) === bullet && firstListItem) {\n      let index = -1\n\n      while (++index < node.children.length) {\n        const item = node.children[index]\n\n        if (\n          item &&\n          item.type === 'listItem' &&\n          item.children &&\n          item.children[0] &&\n          item.children[0].type === 'thematicBreak'\n        ) {\n          useDifferentMarker = true\n          break\n        }\n      }\n    }\n  }\n\n  if (useDifferentMarker) {\n    bullet = bulletOther\n  }\n\n  state.bulletCurrent = bullet\n  const value = state.containerFlow(node, info)\n  state.bulletLastUsed = bullet\n  state.bulletCurrent = bulletCurrent\n  exit()\n  return value\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['listItemIndent'], null | undefined>}\n */\nexport function checkListItemIndent(state) {\n  const style = state.options.listItemIndent || 'one'\n\n  if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n    throw new Error(\n      'Cannot serialize items with `' +\n        style +\n        '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n    )\n  }\n\n  return style\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').Map} Map\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n  const listItemIndent = checkListItemIndent(state)\n  let bullet = state.bulletCurrent || checkBullet(state)\n\n  // Add the marker value for ordered lists.\n  if (parent && parent.type === 'list' && parent.ordered) {\n    bullet =\n      (typeof parent.start === 'number' && parent.start > -1\n        ? parent.start\n        : 1) +\n      (state.options.incrementListMarker === false\n        ? 0\n        : parent.children.indexOf(node)) +\n      bullet\n  }\n\n  let size = bullet.length + 1\n\n  if (\n    listItemIndent === 'tab' ||\n    (listItemIndent === 'mixed' &&\n      ((parent && parent.type === 'list' && parent.spread) || node.spread))\n  ) {\n    size = Math.ceil(size / 4) * 4\n  }\n\n  const tracker = state.createTracker(info)\n  tracker.move(bullet + ' '.repeat(size - bullet.length))\n  tracker.shift(size)\n  const exit = state.enter('listItem')\n  const value = state.indentLines(\n    state.containerFlow(node, tracker.current()),\n    map\n  )\n  exit()\n\n  return value\n\n  /** @type {Map} */\n  function map(line, index, blank) {\n    if (index) {\n      return (blank ? '' : ' '.repeat(size)) + line\n    }\n\n    return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n  }\n}\n","/**\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n  const exit = state.enter('paragraph')\n  const subexit = state.enter('phrasing')\n  const value = state.containerPhrasing(node, info)\n  subexit()\n  exit()\n  return value\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n *   Thing to check, typically `Node`.\n * @returns\n *   Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n  /** @type {(node?: unknown) => node is Exclude<PhrasingContent, Html>} */\n  (\n    convert([\n      'break',\n      'delete',\n      'emphasis',\n      // To do: next major: removed since footnotes were added to GFM.\n      'footnote',\n      'footnoteReference',\n      'image',\n      'imageReference',\n      'inlineCode',\n      // Enabled by `mdast-util-math`:\n      'inlineMath',\n      'link',\n      'linkReference',\n      // Enabled by `mdast-util-mdx`:\n      'mdxJsxTextElement',\n      // Enabled by `mdast-util-mdx`:\n      'mdxTextExpression',\n      'strong',\n      'text',\n      // Enabled by `mdast-util-directive`:\n      'textDirective'\n    ])\n  )\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Root} Root\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n  // Note: `html` nodes are ambiguous.\n  const hasPhrasing = node.children.some(function (d) {\n    return phrasing(d)\n  })\n  const fn = hasPhrasing ? state.containerPhrasing : state.containerFlow\n  return fn.call(state, node, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['strong'], null | undefined>}\n */\nexport function checkStrong(state) {\n  const marker = state.options.strong || '*'\n\n  if (marker !== '*' && marker !== '_') {\n    throw new Error(\n      'Cannot serialize strong with `' +\n        marker +\n        '` for `options.strong`, expected `*`, or `_`'\n    )\n  }\n\n  return marker\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkStrong} from '../util/check-strong.js'\n\nstrong.peek = strongPeek\n\n// To do: there are cases where emphasis cannot “form” depending on the\n// previous or next character of sequences.\n// There’s no way around that though, except for injecting zero-width stuff.\n// Do we need to safeguard against that?\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n  const marker = checkStrong(state)\n  const exit = state.enter('strong')\n  const tracker = state.createTracker(info)\n  let value = tracker.move(marker + marker)\n  value += tracker.move(\n    state.containerPhrasing(node, {\n      before: value,\n      after: marker,\n      ...tracker.current()\n    })\n  )\n  value += tracker.move(marker + marker)\n  exit()\n  return value\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n  return state.options.strong || '*'\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').Text} Text\n * @typedef {import('../types.js').Info} Info\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n  return state.safe(node.value, info)\n}\n","/**\n * @typedef {import('../types.js').Options} Options\n * @typedef {import('../types.js').State} State\n */\n\n/**\n * @param {State} state\n * @returns {Exclude<Options['ruleRepetition'], null | undefined>}\n */\nexport function checkRuleRepetition(state) {\n  const repetition = state.options.ruleRepetition || 3\n\n  if (repetition < 3) {\n    throw new Error(\n      'Cannot serialize rules with repetition `' +\n        repetition +\n        '` for `options.ruleRepetition`, expected `3` or more'\n    )\n  }\n\n  return repetition\n}\n","/**\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../types.js').State} State\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n  const value = (\n    checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n  ).repeat(checkRuleRepetition(state))\n\n  return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n  blockquote,\n  break: hardBreak,\n  code,\n  definition,\n  emphasis,\n  hardBreak,\n  heading,\n  html,\n  image,\n  imageReference,\n  inlineCode,\n  link,\n  linkReference,\n  list,\n  listItem,\n  paragraph,\n  root,\n  strong,\n  text,\n  thematicBreak\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n *   Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n *   Whether to add a space of padding between delimiters and cells (default:\n *   `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n *   Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n *   Function to detect the length of table cell content, used when aligning\n *   the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n  return {\n    enter: {\n      table: enterTable,\n      tableData: enterCell,\n      tableHeader: enterCell,\n      tableRow: enterRow\n    },\n    exit: {\n      codeText: exitCodeText,\n      table: exitTable,\n      tableData: exit,\n      tableHeader: exit,\n      tableRow: exit\n    }\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n  const align = token._align\n  assert(align, 'expected `_align` on table')\n  this.enter(\n    {\n      type: 'table',\n      align: align.map(function (d) {\n        return d === 'none' ? null : d\n      }),\n      children: []\n    },\n    token\n  )\n  this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n  this.exit(token)\n  this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n  this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n  this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n  this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n  let value = this.resume()\n\n  if (this.data.inTable) {\n    value = value.replace(/\\\\([\\\\|])/g, replace)\n  }\n\n  const node = this.stack[this.stack.length - 1]\n  assert(node.type === 'inlineCode')\n  node.value = value\n  this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n  // Pipes work, backslashes don’t (but can’t escape pipes).\n  return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n  const settings = options || {}\n  const padding = settings.tableCellPadding\n  const alignDelimiters = settings.tablePipeAlign\n  const stringLength = settings.stringLength\n  const around = padding ? ' ' : '|'\n\n  return {\n    unsafe: [\n      {character: '\\r', inConstruct: 'tableCell'},\n      {character: '\\n', inConstruct: 'tableCell'},\n      // A pipe, when followed by a tab or space (padding), or a dash or colon\n      // (unpadded delimiter row), could result in a table.\n      {atBreak: true, character: '|', after: '[\\t :-]'},\n      // A pipe in a cell must be encoded.\n      {character: '|', inConstruct: 'tableCell'},\n      // A colon must be followed by a dash, in which case it could start a\n      // delimiter row.\n      {atBreak: true, character: ':', after: '-'},\n      // A delimiter row can also start with a dash, when followed by more\n      // dashes, a colon, or a pipe.\n      // This is a stricter version than the built in check for lists, thematic\n      // breaks, and setex heading underlines though:\n      // <https://github.com/syntax-tree/mdast-util-to-markdown/blob/51a2038/lib/unsafe.js#L57>\n      {atBreak: true, character: '-', after: '[:|-]'}\n    ],\n    handlers: {\n      inlineCode: inlineCodeWithTable,\n      table: handleTable,\n      tableCell: handleTableCell,\n      tableRow: handleTableRow\n    }\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {Table} node\n   */\n  function handleTable(node, _, state, info) {\n    return serializeData(handleTableAsData(node, state, info), node.align)\n  }\n\n  /**\n   * This function isn’t really used normally, because we handle rows at the\n   * table level.\n   * But, if someone passes in a table row, this ensures we make somewhat sense.\n   *\n   * @type {ToMarkdownHandle}\n   * @param {TableRow} node\n   */\n  function handleTableRow(node, _, state, info) {\n    const row = handleTableRowAsData(node, state, info)\n    const value = serializeData([row])\n    // `markdown-table` will always add an align row\n    return value.slice(0, value.indexOf('\\n'))\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {TableCell} node\n   */\n  function handleTableCell(node, _, state, info) {\n    const exit = state.enter('tableCell')\n    const subexit = state.enter('phrasing')\n    const value = state.containerPhrasing(node, {\n      ...info,\n      before: around,\n      after: around\n    })\n    subexit()\n    exit()\n    return value\n  }\n\n  /**\n   * @param {Array<Array<string>>} matrix\n   * @param {Array<string | null | undefined> | null | undefined} [align]\n   */\n  function serializeData(matrix, align) {\n    return markdownTable(matrix, {\n      align,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      alignDelimiters,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      padding,\n      // @ts-expect-error: `markdown-table` types should support `null`.\n      stringLength\n    })\n  }\n\n  /**\n   * @param {Table} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<Array<string>>} */\n    const result = []\n    const subexit = state.enter('table')\n\n    while (++index < children.length) {\n      result[index] = handleTableRowAsData(children[index], state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @param {TableRow} node\n   * @param {State} state\n   * @param {Info} info\n   */\n  function handleTableRowAsData(node, state, info) {\n    const children = node.children\n    let index = -1\n    /** @type {Array<string>} */\n    const result = []\n    const subexit = state.enter('tableRow')\n\n    while (++index < children.length) {\n      // Note: the positional info as used here is incorrect.\n      // Making it correct would be impossible due to aligning cells?\n      // And it would need copy/pasting `markdown-table` into this project.\n      result[index] = handleTableCell(children[index], node, state, info)\n    }\n\n    subexit()\n\n    return result\n  }\n\n  /**\n   * @type {ToMarkdownHandle}\n   * @param {InlineCode} node\n   */\n  function inlineCodeWithTable(node, parent, state) {\n    let value = defaultHandlers.inlineCode(node, parent, state)\n\n    if (state.stack.includes('tableCell')) {\n      value = value.replace(/\\|/g, '\\\\$&')\n    }\n\n    return value\n  }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n *   Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n  return {\n    exit: {\n      taskListCheckValueChecked: exitCheck,\n      taskListCheckValueUnchecked: exitCheck,\n      paragraph: exitParagraphWithTaskListItem\n    }\n  }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n  return {\n    unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n    handlers: {listItem: listItemWithTaskListItem}\n  }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n  // We’re always in a paragraph, in a list item.\n  const node = this.stack[this.stack.length - 2]\n  assert(node.type === 'listItem')\n  node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n  const parent = this.stack[this.stack.length - 2]\n\n  if (\n    parent &&\n    parent.type === 'listItem' &&\n    typeof parent.checked === 'boolean'\n  ) {\n    const node = this.stack[this.stack.length - 1]\n    assert(node.type === 'paragraph')\n    const head = node.children[0]\n\n    if (head && head.type === 'text') {\n      const siblings = parent.children\n      let index = -1\n      /** @type {Paragraph | undefined} */\n      let firstParaghraph\n\n      while (++index < siblings.length) {\n        const sibling = siblings[index]\n        if (sibling.type === 'paragraph') {\n          firstParaghraph = sibling\n          break\n        }\n      }\n\n      if (firstParaghraph === node) {\n        // Must start with a space or a tab.\n        head.value = head.value.slice(1)\n\n        if (head.value.length === 0) {\n          node.children.shift()\n        } else if (\n          node.position &&\n          head.position &&\n          typeof head.position.start.offset === 'number'\n        ) {\n          head.position.start.column++\n          head.position.start.offset++\n          node.position.start = Object.assign({}, head.position.start)\n        }\n      }\n    }\n  }\n\n  this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n  const head = node.children[0]\n  const checkable =\n    typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n  const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n  const tracker = state.createTracker(info)\n\n  if (checkable) {\n    tracker.move(checkbox)\n  }\n\n  let value = defaultHandlers.listItem(node, parent, state, {\n    ...info,\n    ...tracker.current()\n  })\n\n  if (checkable) {\n    value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n  }\n\n  return value\n\n  /**\n   * @param {string} $0\n   * @returns {string}\n   */\n  function check($0) {\n    return $0 + checkbox\n  }\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n *   Configuration.\n */\n\nimport {\n  gfmAutolinkLiteralFromMarkdown,\n  gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n  gfmFootnoteFromMarkdown,\n  gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n  gfmStrikethroughFromMarkdown,\n  gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n  gfmTaskListItemFromMarkdown,\n  gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array<FromMarkdownExtension>}\n *   Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n  return [\n    gfmAutolinkLiteralFromMarkdown(),\n    gfmFootnoteFromMarkdown(),\n    gfmStrikethroughFromMarkdown(),\n    gfmTableFromMarkdown(),\n    gfmTaskListItemFromMarkdown()\n  ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration.\n * @returns {ToMarkdownExtension}\n *   Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n *   footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n  return {\n    extensions: [\n      gfmAutolinkLiteralToMarkdown(),\n      gfmFootnoteToMarkdown(),\n      gfmStrikethroughToMarkdown(),\n      gfmTableToMarkdown(options),\n      gfmTaskListItemToMarkdown()\n    ]\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiControl,\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\nconst wwwPrefix = {\n  tokenize: tokenizeWwwPrefix,\n  partial: true\n}\nconst domain = {\n  tokenize: tokenizeDomain,\n  partial: true\n}\nconst path = {\n  tokenize: tokenizePath,\n  partial: true\n}\nconst trail = {\n  tokenize: tokenizeTrail,\n  partial: true\n}\nconst emailDomainDotTrail = {\n  tokenize: tokenizeEmailDomainDotTrail,\n  partial: true\n}\nconst wwwAutolink = {\n  tokenize: tokenizeWwwAutolink,\n  previous: previousWww\n}\nconst protocolAutolink = {\n  tokenize: tokenizeProtocolAutolink,\n  previous: previousProtocol\n}\nconst emailAutolink = {\n  tokenize: tokenizeEmailAutolink,\n  previous: previousEmail\n}\n\n/** @type {ConstructRecord} */\nconst text = {}\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n  return {\n    text\n  }\n}\n\n/** @type {Code} */\nlet code = 48\n\n// Add alphanumerics.\nwhile (code < 123) {\n  text[code] = emailAutolink\n  code++\n  if (code === 58) code = 65\n  else if (code === 91) code = 97\n}\ntext[43] = emailAutolink\ntext[45] = emailAutolink\ntext[46] = emailAutolink\ntext[95] = emailAutolink\ntext[72] = [emailAutolink, protocolAutolink]\ntext[104] = [emailAutolink, protocolAutolink]\ntext[87] = [emailAutolink, wwwAutolink]\ntext[119] = [emailAutolink, wwwAutolink]\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n  const self = this\n  /** @type {boolean | undefined} */\n  let dot\n  /** @type {boolean} */\n  let data\n  return start\n\n  /**\n   * Start of email autolink literal.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    if (\n      !gfmAtext(code) ||\n      !previousEmail.call(self, self.previous) ||\n      previousUnbalanced(self.events)\n    ) {\n      return nok(code)\n    }\n    effects.enter('literalAutolink')\n    effects.enter('literalAutolinkEmail')\n    return atext(code)\n  }\n\n  /**\n   * In email atext.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function atext(code) {\n    if (gfmAtext(code)) {\n      effects.consume(code)\n      return atext\n    }\n    if (code === 64) {\n      effects.consume(code)\n      return emailDomain\n    }\n    return nok(code)\n  }\n\n  /**\n   * In email domain.\n   *\n   * The reference code is a bit overly complex as it handles the `@`, of which\n   * there may be just one.\n   * Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L318>\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *               ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomain(code) {\n    // Dot followed by alphanumerical (not `-` or `_`).\n    if (code === 46) {\n      return effects.check(\n        emailDomainDotTrail,\n        emailDomainAfter,\n        emailDomainDot\n      )(code)\n    }\n\n    // Alphanumerical, `-`, and `_`.\n    if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n      data = true\n      effects.consume(code)\n      return emailDomain\n    }\n\n    // To do: `/` if xmpp.\n\n    // Note: normally we’d truncate trailing punctuation from the link.\n    // However, email autolink literals cannot contain any of those markers,\n    // except for `.`, but that can only occur if it isn’t trailing.\n    // So we can ignore truncating!\n    return emailDomainAfter(code)\n  }\n\n  /**\n   * In email domain, on dot that is not a trail.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainDot(code) {\n    effects.consume(code)\n    dot = true\n    return emailDomain\n  }\n\n  /**\n   * After email domain.\n   *\n   * ```markdown\n   * > | a contact@example.org b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function emailDomainAfter(code) {\n    // Domain must not be empty, must include a dot, and must end in alphabetical.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L332>.\n    if (data && dot && asciiAlpha(self.previous)) {\n      effects.exit('literalAutolinkEmail')\n      effects.exit('literalAutolink')\n      return ok(code)\n    }\n    return nok(code)\n  }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n  const self = this\n  return wwwStart\n\n  /**\n   * Start of www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwStart(code) {\n    if (\n      (code !== 87 && code !== 119) ||\n      !previousWww.call(self, self.previous) ||\n      previousUnbalanced(self.events)\n    ) {\n      return nok(code)\n    }\n    effects.enter('literalAutolink')\n    effects.enter('literalAutolinkWww')\n    // Note: we *check*, so we can discard the `www.` we parsed.\n    // If it worked, we consider it as a part of the domain.\n    return effects.check(\n      wwwPrefix,\n      effects.attempt(domain, effects.attempt(path, wwwAfter), nok),\n      nok\n    )(code)\n  }\n\n  /**\n   * After a www autolink literal.\n   *\n   * ```markdown\n   * > | www.example.com/a?b#c\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwAfter(code) {\n    effects.exit('literalAutolinkWww')\n    effects.exit('literalAutolink')\n    return ok(code)\n  }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n *       ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n  const self = this\n  let buffer = ''\n  let seen = false\n  return protocolStart\n\n  /**\n   * Start of protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolStart(code) {\n    if (\n      (code === 72 || code === 104) &&\n      previousProtocol.call(self, self.previous) &&\n      !previousUnbalanced(self.events)\n    ) {\n      effects.enter('literalAutolink')\n      effects.enter('literalAutolinkHttp')\n      buffer += String.fromCodePoint(code)\n      effects.consume(code)\n      return protocolPrefixInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In protocol.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *     ^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolPrefixInside(code) {\n    // `5` is size of `https`\n    if (asciiAlpha(code) && buffer.length < 5) {\n      // @ts-expect-error: definitely number.\n      buffer += String.fromCodePoint(code)\n      effects.consume(code)\n      return protocolPrefixInside\n    }\n    if (code === 58) {\n      const protocol = buffer.toLowerCase()\n      if (protocol === 'http' || protocol === 'https') {\n        effects.consume(code)\n        return protocolSlashesInside\n      }\n    }\n    return nok(code)\n  }\n\n  /**\n   * In slashes.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *           ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolSlashesInside(code) {\n    if (code === 47) {\n      effects.consume(code)\n      if (seen) {\n        return afterProtocol\n      }\n      seen = true\n      return protocolSlashesInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * After protocol, before domain.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *             ^\n   * ```\n   *\n   * @type {State}\n   */\n  function afterProtocol(code) {\n    // To do: this is different from `markdown-rs`:\n    // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n    return code === null ||\n      asciiControl(code) ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code) ||\n      unicodePunctuation(code)\n      ? nok(code)\n      : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code)\n  }\n\n  /**\n   * After a protocol autolink literal.\n   *\n   * ```markdown\n   * > | https://example.com/a?b#c\n   *                              ^\n   * ```\n   *\n   * @type {State}\n   */\n  function protocolAfter(code) {\n    effects.exit('literalAutolinkHttp')\n    effects.exit('literalAutolink')\n    return ok(code)\n  }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n *       ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n  let size = 0\n  return wwwPrefixInside\n\n  /**\n   * In www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *     ^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixInside(code) {\n    if ((code === 87 || code === 119) && size < 3) {\n      size++\n      effects.consume(code)\n      return wwwPrefixInside\n    }\n    if (code === 46 && size === 3) {\n      effects.consume(code)\n      return wwwPrefixAfter\n    }\n    return nok(code)\n  }\n\n  /**\n   * After www prefix.\n   *\n   * ```markdown\n   * > | www.example.com\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function wwwPrefixAfter(code) {\n    // If there is *anything*, we can link.\n    return code === null ? nok(code) : ok(code)\n  }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n *               ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n  /** @type {boolean | undefined} */\n  let underscoreInLastSegment\n  /** @type {boolean | undefined} */\n  let underscoreInLastLastSegment\n  /** @type {boolean | undefined} */\n  let seen\n  return domainInside\n\n  /**\n   * In domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *             ^^^^^^^^^^^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainInside(code) {\n    // Check whether this marker, which is a trailing punctuation\n    // marker, optionally followed by more trailing markers, and then\n    // followed by an end.\n    if (code === 46 || code === 95) {\n      return effects.check(trail, domainAfter, domainAtPunctuation)(code)\n    }\n\n    // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n    // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n    // so that’s Unicode.\n    // Instead of some new production for Unicode alphanumerics, markdown\n    // already has that for Unicode punctuation and whitespace, so use those.\n    // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L12>.\n    if (\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code) ||\n      (code !== 45 && unicodePunctuation(code))\n    ) {\n      return domainAfter(code)\n    }\n    seen = true\n    effects.consume(code)\n    return domainInside\n  }\n\n  /**\n   * In domain, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com\n   *                    ^\n   * ```\n   *\n   * @type {State}\n   */\n  function domainAtPunctuation(code) {\n    // There is an underscore in the last segment of the domain\n    if (code === 95) {\n      underscoreInLastSegment = true\n    }\n    // Otherwise, it’s a `.`: save the last segment underscore in the\n    // penultimate segment slot.\n    else {\n      underscoreInLastLastSegment = underscoreInLastSegment\n      underscoreInLastSegment = undefined\n    }\n    effects.consume(code)\n    return domainInside\n  }\n\n  /**\n   * After domain.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^\n   * ```\n   *\n   * @type {State} */\n  function domainAfter(code) {\n    // Note: that’s GH says a dot is needed, but it’s not true:\n    // <https://github.com/github/cmark-gfm/issues/279>\n    if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n      return nok(code)\n    }\n    return ok(code)\n  }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n *                          ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n  let sizeOpen = 0\n  let sizeClose = 0\n  return pathInside\n\n  /**\n   * In path.\n   *\n   * ```markdown\n   * > | https://example.com/a\n   *                        ^^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathInside(code) {\n    if (code === 40) {\n      sizeOpen++\n      effects.consume(code)\n      return pathInside\n    }\n\n    // To do: `markdown-rs` also needs this.\n    // If this is a paren, and there are less closings than openings,\n    // we don’t check for a trail.\n    if (code === 41 && sizeClose < sizeOpen) {\n      return pathAtPunctuation(code)\n    }\n\n    // Check whether this trailing punctuation marker is optionally\n    // followed by more trailing markers, and then followed\n    // by an end.\n    if (\n      code === 33 ||\n      code === 34 ||\n      code === 38 ||\n      code === 39 ||\n      code === 41 ||\n      code === 42 ||\n      code === 44 ||\n      code === 46 ||\n      code === 58 ||\n      code === 59 ||\n      code === 60 ||\n      code === 63 ||\n      code === 93 ||\n      code === 95 ||\n      code === 126\n    ) {\n      return effects.check(trail, ok, pathAtPunctuation)(code)\n    }\n    if (\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    effects.consume(code)\n    return pathInside\n  }\n\n  /**\n   * In path, at potential trailing punctuation, that was not trailing.\n   *\n   * ```markdown\n   * > | https://example.com/a\"b\n   *                          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function pathAtPunctuation(code) {\n    // Count closing parens.\n    if (code === 41) {\n      sizeClose++\n    }\n    effects.consume(code)\n    return pathInside\n  }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n *                        ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n  return trail\n\n  /**\n   * In trail of domain or path.\n   *\n   * ```markdown\n   * > | https://example.com\").\n   *                        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trail(code) {\n    // Regular trailing punctuation.\n    if (\n      code === 33 ||\n      code === 34 ||\n      code === 39 ||\n      code === 41 ||\n      code === 42 ||\n      code === 44 ||\n      code === 46 ||\n      code === 58 ||\n      code === 59 ||\n      code === 63 ||\n      code === 95 ||\n      code === 126\n    ) {\n      effects.consume(code)\n      return trail\n    }\n\n    // `&` followed by one or more alphabeticals and then a `;`, is\n    // as a whole considered as trailing punctuation.\n    // In all other cases, it is considered as continuation of the URL.\n    if (code === 38) {\n      effects.consume(code)\n      return trailCharRefStart\n    }\n\n    // Needed because we allow literals after `[`, as we fix:\n    // <https://github.com/github/cmark-gfm/issues/278>.\n    // Check that it is not followed by `(` or `[`.\n    if (code === 93) {\n      effects.consume(code)\n      return trailBracketAfter\n    }\n    if (\n      // `<` is an end.\n      code === 60 ||\n      // So is whitespace.\n      code === null ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    return nok(code)\n  }\n\n  /**\n   * In trail, after `]`.\n   *\n   * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n   * > See end of <https://github.com/github/cmark-gfm/issues/278> for more.\n   *\n   * ```markdown\n   * > | https://example.com](\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailBracketAfter(code) {\n    // Whitespace or something that could start a resource or reference is the end.\n    // Switch back to trail otherwise.\n    if (\n      code === null ||\n      code === 40 ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code) ||\n      unicodeWhitespace(code)\n    ) {\n      return ok(code)\n    }\n    return trail(code)\n  }\n\n  /**\n   * In character-reference like trail, after `&`.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharRefStart(code) {\n    // When non-alpha, it’s not a trail.\n    return asciiAlpha(code) ? trailCharRefInside(code) : nok(code)\n  }\n\n  /**\n   * In character-reference like trail.\n   *\n   * ```markdown\n   * > | https://example.com&amp;).\n   *                         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function trailCharRefInside(code) {\n    // Switch back to trail if this is well-formed.\n    if (code === 59) {\n      effects.consume(code)\n      return trail\n    }\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return trailCharRefInside\n    }\n\n    // It’s not a trail.\n    return nok(code)\n  }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n *                        ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n  return start\n\n  /**\n   * Dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                    ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    // Must be dot.\n    effects.consume(code)\n    return after\n  }\n\n  /**\n   * After dot.\n   *\n   * ```markdown\n   * > | contact@example.org.\n   *                     ^   ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // Not a trail if alphanumeric.\n    return asciiAlphanumeric(code) ? nok(code) : ok(code)\n  }\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L156>.\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n  return (\n    code === null ||\n    code === 40 ||\n    code === 42 ||\n    code === 95 ||\n    code === 91 ||\n    code === 93 ||\n    code === 126 ||\n    markdownLineEndingOrSpace(code)\n  )\n}\n\n/**\n * See:\n * <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L214>.\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n  return !asciiAlpha(code)\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n  // Do not allow a slash “inside” atext.\n  // The reference code is a bit weird, but that’s what it results in.\n  // Source: <https://github.com/github/cmark-gfm/blob/ef1cfcb/extensions/autolink.c#L307>.\n  // Other than slash, every preceding character is allowed.\n  return !(code === 47 || gfmAtext(code))\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n  return (\n    code === 43 ||\n    code === 45 ||\n    code === 46 ||\n    code === 95 ||\n    asciiAlphanumeric(code)\n  )\n}\n\n/**\n * @param {Array<Event>} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n  let index = events.length\n  let result = false\n  while (index--) {\n    const token = events[index][1]\n    if (\n      (token.type === 'labelLink' || token.type === 'labelImage') &&\n      !token._balanced\n    ) {\n      result = true\n      break\n    }\n\n    // If we’ve seen this token, and it was marked as not having any unbalanced\n    // bracket before it, we can exit.\n    if (token._gfmAutolinkLiteralWalkedInto) {\n      result = false\n      break\n    }\n  }\n  if (events.length > 0 && !result) {\n    // Mark the last token as “walked into” w/o finding\n    // anything.\n    events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true\n  }\n  return result\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {blankLine} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nconst indent = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to\n *   enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n  /** @type {Extension} */\n  return {\n    document: {\n      [91]: {\n        tokenize: tokenizeDefinitionStart,\n        continuation: {\n          tokenize: tokenizeDefinitionContinuation\n        },\n        exit: gfmFootnoteDefinitionEnd\n      }\n    },\n    text: {\n      [91]: {\n        tokenize: tokenizeGfmFootnoteCall\n      },\n      [93]: {\n        add: 'after',\n        tokenize: tokenizePotentialGfmFootnoteCall,\n        resolveTo: resolveToPotentialGfmFootnoteCall\n      }\n    }\n  }\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  /** @type {Token} */\n  let labelStart\n\n  // Find an opening.\n  while (index--) {\n    const token = self.events[index][1]\n    if (token.type === 'labelImage') {\n      labelStart = token\n      break\n    }\n\n    // Exit if we’ve walked far enough.\n    if (\n      token.type === 'gfmFootnoteCall' ||\n      token.type === 'labelLink' ||\n      token.type === 'label' ||\n      token.type === 'image' ||\n      token.type === 'link'\n    ) {\n      break\n    }\n  }\n  return start\n\n  /**\n   * @type {State}\n   */\n  function start(code) {\n    if (!labelStart || !labelStart._balanced) {\n      return nok(code)\n    }\n    const id = normalizeIdentifier(\n      self.sliceSerialize({\n        start: labelStart.end,\n        end: self.now()\n      })\n    )\n    if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n      return nok(code)\n    }\n    effects.enter('gfmFootnoteCallLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallLabelMarker')\n    return ok(code)\n  }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n  let index = events.length\n  /** @type {Token | undefined} */\n  let labelStart\n\n  // Find an opening.\n  while (index--) {\n    if (\n      events[index][1].type === 'labelImage' &&\n      events[index][0] === 'enter'\n    ) {\n      labelStart = events[index][1]\n      break\n    }\n  }\n  // Change the `labelImageMarker` to a `data`.\n  events[index + 1][1].type = 'data'\n  events[index + 3][1].type = 'gfmFootnoteCallLabelMarker'\n\n  // The whole (without `!`):\n  /** @type {Token} */\n  const call = {\n    type: 'gfmFootnoteCall',\n    start: Object.assign({}, events[index + 3][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  // The `^` marker\n  /** @type {Token} */\n  const marker = {\n    type: 'gfmFootnoteCallMarker',\n    start: Object.assign({}, events[index + 3][1].end),\n    end: Object.assign({}, events[index + 3][1].end)\n  }\n  // Increment the end 1 character.\n  marker.end.column++\n  marker.end.offset++\n  marker.end._bufferIndex++\n  /** @type {Token} */\n  const string = {\n    type: 'gfmFootnoteCallString',\n    start: Object.assign({}, marker.end),\n    end: Object.assign({}, events[events.length - 1][1].start)\n  }\n  /** @type {Token} */\n  const chunk = {\n    type: 'chunkString',\n    contentType: 'string',\n    start: Object.assign({}, string.start),\n    end: Object.assign({}, string.end)\n  }\n\n  /** @type {Array<Event>} */\n  const replacement = [\n    // Take the `labelImageMarker` (now `data`, the `!`)\n    events[index + 1],\n    events[index + 2],\n    ['enter', call, context],\n    // The `[`\n    events[index + 3],\n    events[index + 4],\n    // The `^`.\n    ['enter', marker, context],\n    ['exit', marker, context],\n    // Everything in between.\n    ['enter', string, context],\n    ['enter', chunk, context],\n    ['exit', chunk, context],\n    ['exit', string, context],\n    // The ending (`]`, properly parsed and labelled).\n    events[events.length - 2],\n    events[events.length - 1],\n    ['exit', call, context]\n  ]\n  events.splice(index, events.length - index + 1, ...replacement)\n  return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n  const self = this\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  let size = 0\n  /** @type {boolean} */\n  let data\n\n  // Note: the implementation of `markdown-rs` is different, because it houses\n  // core *and* extensions in one project.\n  // Therefore, it can include footnote logic inside `label-end`.\n  // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n  // needed for labels.\n  return start\n\n  /**\n   * Start of footnote label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteCall')\n    effects.enter('gfmFootnoteCallLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallLabelMarker')\n    return callStart\n  }\n\n  /**\n   * After `[`, at `^`.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callStart(code) {\n    if (code !== 94) return nok(code)\n    effects.enter('gfmFootnoteCallMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteCallMarker')\n    effects.enter('gfmFootnoteCallString')\n    effects.enter('chunkString').contentType = 'string'\n    return callData\n  }\n\n  /**\n   * In label.\n   *\n   * ```markdown\n   * > | a [^b] c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callData(code) {\n    if (\n      // Too long.\n      size > 999 ||\n      // Closing brace with nothing.\n      (code === 93 && !data) ||\n      // Space or tab is not supported by GFM for some reason.\n      // `\\n` and `[` not being supported makes sense.\n      code === null ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit('chunkString')\n      const token = effects.exit('gfmFootnoteCallString')\n      if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n        return nok(code)\n      }\n      effects.enter('gfmFootnoteCallLabelMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteCallLabelMarker')\n      effects.exit('gfmFootnoteCall')\n      return ok\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true\n    }\n    size++\n    effects.consume(code)\n    return code === 92 ? callEscape : callData\n  }\n\n  /**\n   * On character after escape.\n   *\n   * ```markdown\n   * > | a [^b\\c] d\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function callEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return callData\n    }\n    return callData(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n  const self = this\n  const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = [])\n  /** @type {string} */\n  let identifier\n  let size = 0\n  /** @type {boolean | undefined} */\n  let data\n  return start\n\n  /**\n   * Start of GFM footnote definition.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function start(code) {\n    effects.enter('gfmFootnoteDefinition')._container = true\n    effects.enter('gfmFootnoteDefinitionLabel')\n    effects.enter('gfmFootnoteDefinitionLabelMarker')\n    effects.consume(code)\n    effects.exit('gfmFootnoteDefinitionLabelMarker')\n    return labelAtMarker\n  }\n\n  /**\n   * In label, at caret.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAtMarker(code) {\n    if (code === 94) {\n      effects.enter('gfmFootnoteDefinitionMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteDefinitionMarker')\n      effects.enter('gfmFootnoteDefinitionLabelString')\n      effects.enter('chunkString').contentType = 'string'\n      return labelInside\n    }\n    return nok(code)\n  }\n\n  /**\n   * In label.\n   *\n   * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n   * > definition labels.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelInside(code) {\n    if (\n      // Too long.\n      size > 999 ||\n      // Closing brace with nothing.\n      (code === 93 && !data) ||\n      // Space or tab is not supported by GFM for some reason.\n      // `\\n` and `[` not being supported makes sense.\n      code === null ||\n      code === 91 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return nok(code)\n    }\n    if (code === 93) {\n      effects.exit('chunkString')\n      const token = effects.exit('gfmFootnoteDefinitionLabelString')\n      identifier = normalizeIdentifier(self.sliceSerialize(token))\n      effects.enter('gfmFootnoteDefinitionLabelMarker')\n      effects.consume(code)\n      effects.exit('gfmFootnoteDefinitionLabelMarker')\n      effects.exit('gfmFootnoteDefinitionLabel')\n      return labelAfter\n    }\n    if (!markdownLineEndingOrSpace(code)) {\n      data = true\n    }\n    size++\n    effects.consume(code)\n    return code === 92 ? labelEscape : labelInside\n  }\n\n  /**\n   * After `\\`, at a special character.\n   *\n   * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n   * > <https://github.com/github/cmark-gfm/issues/240>\n   *\n   * ```markdown\n   * > | [^a\\*b]: c\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return labelInside\n    }\n    return labelInside(code)\n  }\n\n  /**\n   * After definition label.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function labelAfter(code) {\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker')\n      if (!defined.includes(identifier)) {\n        defined.push(identifier)\n      }\n\n      // Any whitespace after the marker is eaten, forming indented code\n      // is not possible.\n      // No space is also fine, just like a block quote marker.\n      return factorySpace(\n        effects,\n        whitespaceAfter,\n        'gfmFootnoteDefinitionWhitespace'\n      )\n    }\n    return nok(code)\n  }\n\n  /**\n   * After definition prefix.\n   *\n   * ```markdown\n   * > | [^a]: b\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function whitespaceAfter(code) {\n    // `markdown-rs` has a wrapping token for the prefix that is closed here.\n    return ok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n  /// Start of footnote definition continuation.\n  ///\n  /// ```markdown\n  ///   | [^a]: b\n  /// > |     c\n  ///     ^\n  /// ```\n  //\n  // Either a blank line, which is okay, or an indented thing.\n  return effects.check(blankLine, ok, effects.attempt(indent, ok, nok))\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n  effects.exit('gfmFootnoteDefinition')\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'gfmFootnoteDefinitionIndent',\n    4 + 1\n  )\n\n  /**\n   * @type {State}\n   */\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'gfmFootnoteDefinitionIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === 4\n      ? ok(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [singleTilde=true]\n *   Whether to support strikethrough with a single tilde (default: `true`).\n *\n *   Single tildes work on github.com, but are technically prohibited by the\n *   GFM spec.\n */\n\nimport {splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n *   Configuration.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions`, to\n *   enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n  const options_ = options || {}\n  let single = options_.singleTilde\n  const tokenizer = {\n    tokenize: tokenizeStrikethrough,\n    resolveAll: resolveAllStrikethrough\n  }\n  if (single === null || single === undefined) {\n    single = true\n  }\n  return {\n    text: {\n      [126]: tokenizer\n    },\n    insideSpan: {\n      null: [tokenizer]\n    },\n    attentionMarkers: {\n      null: [126]\n    }\n  }\n\n  /**\n   * Take events and resolve strikethrough.\n   *\n   * @type {Resolver}\n   */\n  function resolveAllStrikethrough(events, context) {\n    let index = -1\n\n    // Walk through all events.\n    while (++index < events.length) {\n      // Find a token that can close.\n      if (\n        events[index][0] === 'enter' &&\n        events[index][1].type === 'strikethroughSequenceTemporary' &&\n        events[index][1]._close\n      ) {\n        let open = index\n\n        // Now walk back to find an opener.\n        while (open--) {\n          // Find a token that can open the closer.\n          if (\n            events[open][0] === 'exit' &&\n            events[open][1].type === 'strikethroughSequenceTemporary' &&\n            events[open][1]._open &&\n            // If the sizes are the same:\n            events[index][1].end.offset - events[index][1].start.offset ===\n              events[open][1].end.offset - events[open][1].start.offset\n          ) {\n            events[index][1].type = 'strikethroughSequence'\n            events[open][1].type = 'strikethroughSequence'\n\n            /** @type {Token} */\n            const strikethrough = {\n              type: 'strikethrough',\n              start: Object.assign({}, events[open][1].start),\n              end: Object.assign({}, events[index][1].end)\n            }\n\n            /** @type {Token} */\n            const text = {\n              type: 'strikethroughText',\n              start: Object.assign({}, events[open][1].end),\n              end: Object.assign({}, events[index][1].start)\n            }\n\n            // Opening.\n            /** @type {Array<Event>} */\n            const nextEvents = [\n              ['enter', strikethrough, context],\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context],\n              ['enter', text, context]\n            ]\n            const insideSpan = context.parser.constructs.insideSpan.null\n            if (insideSpan) {\n              // Between.\n              splice(\n                nextEvents,\n                nextEvents.length,\n                0,\n                resolveAll(insideSpan, events.slice(open + 1, index), context)\n              )\n            }\n\n            // Closing.\n            splice(nextEvents, nextEvents.length, 0, [\n              ['exit', text, context],\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context],\n              ['exit', strikethrough, context]\n            ])\n            splice(events, open - 1, index - open + 3, nextEvents)\n            index = open + nextEvents.length - 2\n            break\n          }\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      if (events[index][1].type === 'strikethroughSequenceTemporary') {\n        events[index][1].type = 'data'\n      }\n    }\n    return events\n  }\n\n  /**\n   * @this {TokenizeContext}\n   * @type {Tokenizer}\n   */\n  function tokenizeStrikethrough(effects, ok, nok) {\n    const previous = this.previous\n    const events = this.events\n    let size = 0\n    return start\n\n    /** @type {State} */\n    function start(code) {\n      if (\n        previous === 126 &&\n        events[events.length - 1][1].type !== 'characterEscape'\n      ) {\n        return nok(code)\n      }\n      effects.enter('strikethroughSequenceTemporary')\n      return more(code)\n    }\n\n    /** @type {State} */\n    function more(code) {\n      const before = classifyCharacter(previous)\n      if (code === 126) {\n        // If this is the third marker, exit.\n        if (size > 1) return nok(code)\n        effects.consume(code)\n        size++\n        return more\n      }\n      if (size < 2 && !single) return nok(code)\n      const token = effects.exit('strikethroughSequenceTemporary')\n      const after = classifyCharacter(code)\n      token._open = !after || (after === 2 && Boolean(before))\n      token._close = !before || (before === 2 && Boolean(after))\n      return ok(code)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array<Event>]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n  /**\n   * Create a new edit map.\n   */\n  constructor() {\n    /**\n     * Record of changes.\n     *\n     * @type {Array<Change>}\n     */\n    this.map = []\n  }\n\n  /**\n   * Create an edit: a remove and/or add at a certain place.\n   *\n   * @param {number} index\n   * @param {number} remove\n   * @param {Array<Event>} add\n   * @returns {undefined}\n   */\n  add(index, remove, add) {\n    addImpl(this, index, remove, add)\n  }\n\n  // To do: add this when moving to `micromark`.\n  // /**\n  //  * Create an edit: but insert `add` before existing additions.\n  //  *\n  //  * @param {number} index\n  //  * @param {number} remove\n  //  * @param {Array<Event>} add\n  //  * @returns {undefined}\n  //  */\n  // addBefore(index, remove, add) {\n  //   addImpl(this, index, remove, add, true)\n  // }\n\n  /**\n   * Done, change the events.\n   *\n   * @param {Array<Event>} events\n   * @returns {undefined}\n   */\n  consume(events) {\n    this.map.sort(function (a, b) {\n      return a[0] - b[0]\n    })\n\n    /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n    if (this.map.length === 0) {\n      return\n    }\n\n    // To do: if links are added in events, like they are in `markdown-rs`,\n    // this is needed.\n    // // Calculate jumps: where items in the current list move to.\n    // /** @type {Array<Jump>} */\n    // const jumps = []\n    // let index = 0\n    // let addAcc = 0\n    // let removeAcc = 0\n    // while (index < this.map.length) {\n    //   const [at, remove, add] = this.map[index]\n    //   removeAcc += remove\n    //   addAcc += add.length\n    //   jumps.push([at, removeAcc, addAcc])\n    //   index += 1\n    // }\n    //\n    // . shiftLinks(events, jumps)\n\n    let index = this.map.length\n    /** @type {Array<Array<Event>>} */\n    const vecs = []\n    while (index > 0) {\n      index -= 1\n      vecs.push(\n        events.slice(this.map[index][0] + this.map[index][1]),\n        this.map[index][2]\n      )\n\n      // Truncate rest.\n      events.length = this.map[index][0]\n    }\n    vecs.push([...events])\n    events.length = 0\n    let slice = vecs.pop()\n    while (slice) {\n      events.push(...slice)\n      slice = vecs.pop()\n    }\n\n    // Truncate everything.\n    this.map.length = 0\n  }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array<Event>} add\n * @returns {undefined}\n */\nfunction addImpl(editMap, at, remove, add) {\n  let index = 0\n\n  /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n  if (remove === 0 && add.length === 0) {\n    return\n  }\n  while (index < editMap.map.length) {\n    if (editMap.map[index][0] === at) {\n      editMap.map[index][1] += remove\n\n      // To do: before not used by tables, use when moving to micromark.\n      // if (before) {\n      //   add.push(...editMap.map[index][2])\n      //   editMap.map[index][2] = add\n      // } else {\n      editMap.map[index][2].push(...add)\n      // }\n\n      return\n    }\n    index += 1\n  }\n  editMap.map.push([at, remove, add])\n}\n\n// /**\n//  * Shift `previous` and `next` links according to `jumps`.\n//  *\n//  * This fixes links in case there are events removed or added between them.\n//  *\n//  * @param {Array<Event>} events\n//  * @param {Array<Jump>} jumps\n//  */\n// function shiftLinks(events, jumps) {\n//   let jumpIndex = 0\n//   let index = 0\n//   let add = 0\n//   let rm = 0\n\n//   while (index < events.length) {\n//     const rmCurr = rm\n\n//     while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n//       add = jumps[jumpIndex][2]\n//       rm = jumps[jumpIndex][1]\n//       jumpIndex += 1\n//     }\n\n//     // Ignore items that will be removed.\n//     if (rm > rmCurr) {\n//       index += rm - rmCurr\n//     } else {\n//       // ?\n//       // if let Some(link) = &events[index].link {\n//       //     if let Some(next) = link.next {\n//       //         events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n//       //         while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n//       //             add = jumps[jumpIndex].2;\n//       //             rm = jumps[jumpIndex].1;\n//       //             jumpIndex += 1;\n//       //         }\n//       //         events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n//       //         index = next;\n//       //         continue;\n//       //     }\n//       // }\n//       index += 1\n//     }\n//   }\n// }\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly<Array<Event>>} events\n *   List of events.\n * @param {number} index\n *   Table enter event.\n * @returns {Array<Align>}\n *   List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n  let inDelimiterRow = false\n  /** @type {Array<Align>} */\n  const align = []\n  while (index < events.length) {\n    const event = events[index]\n    if (inDelimiterRow) {\n      if (event[0] === 'enter') {\n        // Start of alignment value: set a new column.\n        // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n        if (event[1].type === 'tableContent') {\n          align.push(\n            events[index + 1][1].type === 'tableDelimiterMarker'\n              ? 'left'\n              : 'none'\n          )\n        }\n      }\n      // Exits:\n      // End of alignment value: change the column.\n      // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n      else if (event[1].type === 'tableContent') {\n        if (events[index - 1][1].type === 'tableDelimiterMarker') {\n          const alignIndex = align.length - 1\n          align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right'\n        }\n      }\n      // Done!\n      else if (event[1].type === 'tableDelimiterRow') {\n        break\n      }\n    } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n      inDelimiterRow = true\n    }\n    index += 1\n  }\n  return align\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n *   Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n *   Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {EditMap} from './edit-map.js'\nimport {gfmTableAlign} from './infer.js'\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   table syntax.\n */\nexport function gfmTable() {\n  return {\n    flow: {\n      null: {\n        tokenize: tokenizeTable,\n        resolveAll: resolveTable\n      }\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n  const self = this\n  let size = 0\n  let sizeB = 0\n  /** @type {boolean | undefined} */\n  let seen\n  return start\n\n  /**\n   * Start of a GFM table.\n   *\n   * If there is a valid table row or table head before, then we try to parse\n   * another row.\n   * Otherwise, we try to parse a head.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   * @type {State}\n   */\n  function start(code) {\n    let index = self.events.length - 1\n    while (index > -1) {\n      const type = self.events[index][1].type\n      if (\n        type === 'lineEnding' ||\n        // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n        type === 'linePrefix'\n      )\n        index--\n      else break\n    }\n    const tail = index > -1 ? self.events[index][1].type : null\n    const next =\n      tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore\n\n    // Don’t allow lazy body rows.\n    if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    return next(code)\n  }\n\n  /**\n   * Before table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBefore(code) {\n    effects.enter('tableHead')\n    effects.enter('tableRow')\n    return headRowStart(code)\n  }\n\n  /**\n   * Before table head row, after whitespace.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowStart(code) {\n    if (code === 124) {\n      return headRowBreak(code)\n    }\n\n    // To do: micromark-js should let us parse our own whitespace in extensions,\n    // like `markdown-rs`:\n    //\n    // ```js\n    // // 4+ spaces.\n    // if (markdownSpace(code)) {\n    //   return nok(code)\n    // }\n    // ```\n\n    seen = true\n    // Count the first character, that isn’t a pipe, double.\n    sizeB += 1\n    return headRowBreak(code)\n  }\n\n  /**\n   * At break in table head row.\n   *\n   * ```markdown\n   * > | | a |\n   *     ^\n   *       ^\n   *         ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowBreak(code) {\n    if (code === null) {\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n      return nok(code)\n    }\n    if (markdownLineEnding(code)) {\n      // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n      if (sizeB > 1) {\n        sizeB = 0\n        // To do: check if this works.\n        // Feel free to interrupt:\n        self.interrupt = true\n        effects.exit('tableRow')\n        effects.enter('lineEnding')\n        effects.consume(code)\n        effects.exit('lineEnding')\n        return headDelimiterStart\n      }\n\n      // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n      return nok(code)\n    }\n    if (markdownSpace(code)) {\n      // To do: check if this is fine.\n      // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n      // State::Retry(space_or_tab(tokenizer))\n      return factorySpace(effects, headRowBreak, 'whitespace')(code)\n    }\n    sizeB += 1\n    if (seen) {\n      seen = false\n      // Header cell count.\n      size += 1\n    }\n    if (code === 124) {\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      // Whether a delimiter was seen.\n      seen = true\n      return headRowBreak\n    }\n\n    // Anything else is cell data.\n    effects.enter('data')\n    return headRowData(code)\n  }\n\n  /**\n   * In table head row data.\n   *\n   * ```markdown\n   * > | | a |\n   *       ^\n   *   | | - |\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit('data')\n      return headRowBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? headRowEscape : headRowData\n  }\n\n  /**\n   * In table head row escape.\n   *\n   * ```markdown\n   * > | | a\\-b |\n   *         ^\n   *   | | ---- |\n   *   | | c    |\n   * ```\n   *\n   * @type {State}\n   */\n  function headRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code)\n      return headRowData\n    }\n    return headRowData(code)\n  }\n\n  /**\n   * Before delimiter row.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterStart(code) {\n    // Reset `interrupt`.\n    self.interrupt = false\n\n    // Note: in `markdown-rs`, we need to handle piercing here too.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n    effects.enter('tableDelimiterRow')\n    // Track if we’ve seen a `:` or `|`.\n    seen = false\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        headDelimiterBefore,\n        'linePrefix',\n        self.parser.constructs.disable.null.includes('codeIndented')\n          ? undefined\n          : 4\n      )(code)\n    }\n    return headDelimiterBefore(code)\n  }\n\n  /**\n   * Before delimiter row, after optional whitespace.\n   *\n   * Reused when a `|` is found later, to parse another cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *     ^\n   *   | | b |\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterBefore(code) {\n    if (code === 45 || code === 58) {\n      return headDelimiterValueBefore(code)\n    }\n    if (code === 124) {\n      seen = true\n      // If we start with a pipe, we open a cell marker.\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      return headDelimiterCellBefore\n    }\n\n    // More whitespace / empty row not allowed at start.\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * After `|`, before delimiter cell.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *      ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellBefore(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterValueBefore, 'whitespace')(code)\n    }\n    return headDelimiterValueBefore(code)\n  }\n\n  /**\n   * Before delimiter cell value.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterValueBefore(code) {\n    // Align: left.\n    if (code === 58) {\n      sizeB += 1\n      seen = true\n      effects.enter('tableDelimiterMarker')\n      effects.consume(code)\n      effects.exit('tableDelimiterMarker')\n      return headDelimiterLeftAlignmentAfter\n    }\n\n    // Align: none.\n    if (code === 45) {\n      sizeB += 1\n      // To do: seems weird that this *isn’t* left aligned, but that state is used?\n      return headDelimiterLeftAlignmentAfter(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      return headDelimiterCellAfter(code)\n    }\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * After delimiter cell left alignment marker.\n   *\n   * ```markdown\n   *   | | a  |\n   * > | | :- |\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterLeftAlignmentAfter(code) {\n    if (code === 45) {\n      effects.enter('tableDelimiterFiller')\n      return headDelimiterFiller(code)\n    }\n\n    // Anything else is not ok after the left-align colon.\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * In delimiter cell filler.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | - |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterFiller(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return headDelimiterFiller\n    }\n\n    // Align is `center` if it was `left`, `right` otherwise.\n    if (code === 58) {\n      seen = true\n      effects.exit('tableDelimiterFiller')\n      effects.enter('tableDelimiterMarker')\n      effects.consume(code)\n      effects.exit('tableDelimiterMarker')\n      return headDelimiterRightAlignmentAfter\n    }\n    effects.exit('tableDelimiterFiller')\n    return headDelimiterRightAlignmentAfter(code)\n  }\n\n  /**\n   * After delimiter cell right alignment marker.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterRightAlignmentAfter(code) {\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headDelimiterCellAfter, 'whitespace')(code)\n    }\n    return headDelimiterCellAfter(code)\n  }\n\n  /**\n   * After delimiter cell.\n   *\n   * ```markdown\n   *   | |  a |\n   * > | | -: |\n   *          ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterCellAfter(code) {\n    if (code === 124) {\n      return headDelimiterBefore(code)\n    }\n    if (code === null || markdownLineEnding(code)) {\n      // Exit when:\n      // * there was no `:` or `|` at all (it’s a thematic break or setext\n      //   underline instead)\n      // * the header cell count is not the delimiter cell count\n      if (!seen || size !== sizeB) {\n        return headDelimiterNok(code)\n      }\n\n      // Note: in markdown-rs`, a reset is needed here.\n      effects.exit('tableDelimiterRow')\n      effects.exit('tableHead')\n      // To do: in `markdown-rs`, resolvers need to be registered manually.\n      // effects.register_resolver(ResolveName::GfmTable)\n      return ok(code)\n    }\n    return headDelimiterNok(code)\n  }\n\n  /**\n   * In delimiter row, at a disallowed byte.\n   *\n   * ```markdown\n   *   | | a |\n   * > | | x |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function headDelimiterNok(code) {\n    // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n    return nok(code)\n  }\n\n  /**\n   * Before table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowStart(code) {\n    // Note: in `markdown-rs` we need to manually take care of a prefix,\n    // but in `micromark-js` that is done for us, so if we’re here, we’re\n    // never at whitespace.\n    effects.enter('tableRow')\n    return bodyRowBreak(code)\n  }\n\n  /**\n   * At break in table body row.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *     ^\n   *       ^\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowBreak(code) {\n    if (code === 124) {\n      effects.enter('tableCellDivider')\n      effects.consume(code)\n      effects.exit('tableCellDivider')\n      return bodyRowBreak\n    }\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('tableRow')\n      return ok(code)\n    }\n    if (markdownSpace(code)) {\n      return factorySpace(effects, bodyRowBreak, 'whitespace')(code)\n    }\n\n    // Anything else is cell content.\n    effects.enter('data')\n    return bodyRowData(code)\n  }\n\n  /**\n   * In table body row data.\n   *\n   * ```markdown\n   *   | | a |\n   *   | | - |\n   * > | | b |\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowData(code) {\n    if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n      effects.exit('data')\n      return bodyRowBreak(code)\n    }\n    effects.consume(code)\n    return code === 92 ? bodyRowEscape : bodyRowData\n  }\n\n  /**\n   * In table body row escape.\n   *\n   * ```markdown\n   *   | | a    |\n   *   | | ---- |\n   * > | | b\\-c |\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function bodyRowEscape(code) {\n    if (code === 92 || code === 124) {\n      effects.consume(code)\n      return bodyRowData\n    }\n    return bodyRowData(code)\n  }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n  let index = -1\n  let inFirstCellAwaitingPipe = true\n  /** @type {RowKind} */\n  let rowKind = 0\n  /** @type {Range} */\n  let lastCell = [0, 0, 0, 0]\n  /** @type {Range} */\n  let cell = [0, 0, 0, 0]\n  let afterHeadAwaitingFirstBodyRow = false\n  let lastTableEnd = 0\n  /** @type {Token | undefined} */\n  let currentTable\n  /** @type {Token | undefined} */\n  let currentBody\n  /** @type {Token | undefined} */\n  let currentCell\n  const map = new EditMap()\n  while (++index < events.length) {\n    const event = events[index]\n    const token = event[1]\n    if (event[0] === 'enter') {\n      // Start of head.\n      if (token.type === 'tableHead') {\n        afterHeadAwaitingFirstBodyRow = false\n\n        // Inject previous (body end and) table end.\n        if (lastTableEnd !== 0) {\n          flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n          currentBody = undefined\n          lastTableEnd = 0\n        }\n\n        // Inject table start.\n        currentTable = {\n          type: 'table',\n          start: Object.assign({}, token.start),\n          // Note: correct end is set later.\n          end: Object.assign({}, token.end)\n        }\n        map.add(index, 0, [['enter', currentTable, context]])\n      } else if (\n        token.type === 'tableRow' ||\n        token.type === 'tableDelimiterRow'\n      ) {\n        inFirstCellAwaitingPipe = true\n        currentCell = undefined\n        lastCell = [0, 0, 0, 0]\n        cell = [0, index + 1, 0, 0]\n\n        // Inject table body start.\n        if (afterHeadAwaitingFirstBodyRow) {\n          afterHeadAwaitingFirstBodyRow = false\n          currentBody = {\n            type: 'tableBody',\n            start: Object.assign({}, token.start),\n            // Note: correct end is set later.\n            end: Object.assign({}, token.end)\n          }\n          map.add(index, 0, [['enter', currentBody, context]])\n        }\n        rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1\n      }\n      // Cell data.\n      else if (\n        rowKind &&\n        (token.type === 'data' ||\n          token.type === 'tableDelimiterMarker' ||\n          token.type === 'tableDelimiterFiller')\n      ) {\n        inFirstCellAwaitingPipe = false\n\n        // First value in cell.\n        if (cell[2] === 0) {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1]\n            currentCell = flushCell(\n              map,\n              context,\n              lastCell,\n              rowKind,\n              undefined,\n              currentCell\n            )\n            lastCell = [0, 0, 0, 0]\n          }\n          cell[2] = index\n        }\n      } else if (token.type === 'tableCellDivider') {\n        if (inFirstCellAwaitingPipe) {\n          inFirstCellAwaitingPipe = false\n        } else {\n          if (lastCell[1] !== 0) {\n            cell[0] = cell[1]\n            currentCell = flushCell(\n              map,\n              context,\n              lastCell,\n              rowKind,\n              undefined,\n              currentCell\n            )\n          }\n          lastCell = cell\n          cell = [lastCell[1], index, 0, 0]\n        }\n      }\n    }\n    // Exit events.\n    else if (token.type === 'tableHead') {\n      afterHeadAwaitingFirstBodyRow = true\n      lastTableEnd = index\n    } else if (\n      token.type === 'tableRow' ||\n      token.type === 'tableDelimiterRow'\n    ) {\n      lastTableEnd = index\n      if (lastCell[1] !== 0) {\n        cell[0] = cell[1]\n        currentCell = flushCell(\n          map,\n          context,\n          lastCell,\n          rowKind,\n          index,\n          currentCell\n        )\n      } else if (cell[1] !== 0) {\n        currentCell = flushCell(map, context, cell, rowKind, index, currentCell)\n      }\n      rowKind = 0\n    } else if (\n      rowKind &&\n      (token.type === 'data' ||\n        token.type === 'tableDelimiterMarker' ||\n        token.type === 'tableDelimiterFiller')\n    ) {\n      cell[3] = index\n    }\n  }\n  if (lastTableEnd !== 0) {\n    flushTableEnd(map, context, lastTableEnd, currentTable, currentBody)\n  }\n  map.consume(context.events)\n\n  // To do: move this into `html`, when events are exposed there.\n  // That’s what `markdown-rs` does.\n  // That needs updates to `mdast-util-gfm-table`.\n  index = -1\n  while (++index < context.events.length) {\n    const event = context.events[index]\n    if (event[0] === 'enter' && event[1].type === 'table') {\n      event[1]._align = gfmTableAlign(context.events, index)\n    }\n  }\n  return events\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly<TokenizeContext>} context\n * @param {Readonly<Range>} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n  const groupName =\n    rowKind === 1\n      ? 'tableHeader'\n      : rowKind === 2\n      ? 'tableDelimiter'\n      : 'tableData'\n  // `markdown-rs` uses:\n  // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n  const valueName = 'tableContent'\n\n  // Insert an exit for the previous cell, if there is one.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //          ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[0] !== 0) {\n    previousCell.end = Object.assign({}, getPoint(context.events, range[0]))\n    map.add(range[0], 0, [['exit', previousCell, context]])\n  }\n\n  // Insert enter of this cell.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //           ^-- enter\n  //           ^^^^-- this cell\n  // ```\n  const now = getPoint(context.events, range[1])\n  previousCell = {\n    type: groupName,\n    start: Object.assign({}, now),\n    // Note: correct end is set later.\n    end: Object.assign({}, now)\n  }\n  map.add(range[1], 0, [['enter', previousCell, context]])\n\n  // Insert text start at first data start and end at last data end, and\n  // remove events between.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //            ^-- enter\n  //             ^-- exit\n  //           ^^^^-- this cell\n  // ```\n  if (range[2] !== 0) {\n    const relatedStart = getPoint(context.events, range[2])\n    const relatedEnd = getPoint(context.events, range[3])\n    /** @type {Token} */\n    const valueToken = {\n      type: valueName,\n      start: Object.assign({}, relatedStart),\n      end: Object.assign({}, relatedEnd)\n    }\n    map.add(range[2], 0, [['enter', valueToken, context]])\n    if (rowKind !== 2) {\n      // Fix positional info on remaining events\n      const start = context.events[range[2]]\n      const end = context.events[range[3]]\n      start[1].end = Object.assign({}, end[1].end)\n      start[1].type = 'chunkText'\n      start[1].contentType = 'text'\n\n      // Remove if needed.\n      if (range[3] > range[2] + 1) {\n        const a = range[2] + 1\n        const b = range[3] - range[2] - 1\n        map.add(a, b, [])\n      }\n    }\n    map.add(range[3] + 1, 0, [['exit', valueToken, context]])\n  }\n\n  // Insert an exit for the last cell, if at the row end.\n  //\n  // ```markdown\n  // > | | aa | bb | cc |\n  //                    ^-- exit\n  //               ^^^^^^-- this cell (the last one contains two “between” parts)\n  // ```\n  if (rowEnd !== undefined) {\n    previousCell.end = Object.assign({}, getPoint(context.events, rowEnd))\n    map.add(rowEnd, 0, [['exit', previousCell, context]])\n    previousCell = undefined\n  }\n  return previousCell\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly<EditMap>} map\n * @param {Readonly<TokenizeContext>} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n  /** @type {Array<Event>} */\n  const exits = []\n  const related = getPoint(context.events, index)\n  if (tableBody) {\n    tableBody.end = Object.assign({}, related)\n    exits.push(['exit', tableBody, context])\n  }\n  table.end = Object.assign({}, related)\n  exits.push(['exit', table, context])\n  map.add(index + 1, 0, exits)\n}\n\n/**\n * @param {Readonly<Array<Event>>} events\n * @param {number} index\n * @returns {Readonly<Point>}\n */\nfunction getPoint(events, index) {\n  const event = events[index]\n  const side = event[0] === 'enter' ? 'start' : 'end'\n  return event[1][side]\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nconst tasklistCheck = {\n  tokenize: tokenizeTasklistCheck\n}\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n  return {\n    text: {\n      [91]: tasklistCheck\n    }\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n  const self = this\n  return open\n\n  /**\n   * At start of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *       ^\n   * ```\n   *\n   * @type {State}\n   */\n  function open(code) {\n    if (\n      // Exit if there’s stuff before.\n      self.previous !== null ||\n      // Exit if not in the first content that is the first child of a list\n      // item.\n      !self._gfmTasklistFirstContentOfListItem\n    ) {\n      return nok(code)\n    }\n    effects.enter('taskListCheck')\n    effects.enter('taskListCheckMarker')\n    effects.consume(code)\n    effects.exit('taskListCheckMarker')\n    return inside\n  }\n\n  /**\n   * In task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *        ^\n   * ```\n   *\n   * @type {State}\n   */\n  function inside(code) {\n    // Currently we match how GH works in files.\n    // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n    // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n    if (markdownLineEndingOrSpace(code)) {\n      effects.enter('taskListCheckValueUnchecked')\n      effects.consume(code)\n      effects.exit('taskListCheckValueUnchecked')\n      return close\n    }\n    if (code === 88 || code === 120) {\n      effects.enter('taskListCheckValueChecked')\n      effects.consume(code)\n      effects.exit('taskListCheckValueChecked')\n      return close\n    }\n    return nok(code)\n  }\n\n  /**\n   * At close of task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *         ^\n   * ```\n   *\n   * @type {State}\n   */\n  function close(code) {\n    if (code === 93) {\n      effects.enter('taskListCheckMarker')\n      effects.consume(code)\n      effects.exit('taskListCheckMarker')\n      effects.exit('taskListCheck')\n      return after\n    }\n    return nok(code)\n  }\n\n  /**\n   * @type {State}\n   */\n  function after(code) {\n    // EOL in paragraph means there must be something else after it.\n    if (markdownLineEnding(code)) {\n      return ok(code)\n    }\n\n    // Space or tab?\n    // Check what comes after.\n    if (markdownSpace(code)) {\n      return effects.check(\n        {\n          tokenize: spaceThenNonSpace\n        },\n        ok,\n        nok\n      )(code)\n    }\n\n    // EOF, or non-whitespace, both wrong.\n    return nok(code)\n  }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n  return factorySpace(effects, after, 'whitespace')\n\n  /**\n   * After whitespace, after task list item check.\n   *\n   * ```markdown\n   * > | * [x] y.\n   *           ^\n   * ```\n   *\n   * @type {State}\n   */\n  function after(code) {\n    // EOF means there was nothing, so bad.\n    // EOL means there’s content after it, so good.\n    // Impossible to have more spaces.\n    // Anything else is good.\n    return code === null ? nok(code) : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n  combineExtensions,\n  combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n  gfmAutolinkLiteral,\n  gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n  gfmStrikethrough,\n  gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n  gfmTaskListItem,\n  gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n *   Extension for `micromark` that can be passed in `extensions` to enable GFM\n *   syntax.\n */\nexport function gfm(options) {\n  return combineExtensions([\n    gfmAutolinkLiteral(),\n    gfmFootnote(),\n    gfmStrikethrough(options),\n    gfmTable(),\n    gfmTaskListItem()\n  ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n *   Configuration (optional).\n *\n *   Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n *   Extension for `micromark` that can be passed in `htmlExtensions` to\n *   support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n  return combineHtmlExtensions([\n    gfmAutolinkLiteralHtml(),\n    gfmFootnoteHtml(options),\n    gfmStrikethroughHtml(),\n    gfmTableHtml(),\n    gfmTagfilterHtml(),\n    gfmTaskListItemHtml()\n  ])\n}\n","/// <reference types=\"remark-parse\" />\n/// <reference types=\"remark-stringify\" />\n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-gfm').Options} MdastOptions\n * @typedef {import('micromark-extension-gfm').Options} MicromarkOptions\n * @typedef {import('unified').Processor<Root>} Processor\n */\n\n/**\n * @typedef {MicromarkOptions & MdastOptions} Options\n *   Configuration.\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {undefined}\n *   Nothing.\n */\nexport default function remarkGfm(options) {\n  // @ts-expect-error: TS is wrong about `this`.\n  // eslint-disable-next-line unicorn/no-this-assignment\n  const self = /** @type {Processor} */ (this)\n  const settings = options || emptyOptions\n  const data = self.data()\n\n  const micromarkExtensions =\n    data.micromarkExtensions || (data.micromarkExtensions = [])\n  const fromMarkdownExtensions =\n    data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n  const toMarkdownExtensions =\n    data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n  micromarkExtensions.push(gfm(settings))\n  fromMarkdownExtensions.push(gfmFromMarkdown())\n  toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","/**\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast-util-find-and-replace').ReplaceFunction} ReplaceFunction\n */\n\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/**\n * Turn normal line endings into hard breaks.\n *\n * @param {Nodes} tree\n *   Tree to change.\n * @returns {undefined}\n *   Nothing.\n */\nexport function newlineToBreak(tree) {\n  findAndReplace(tree, [/\\r?\\n|\\r/g, replace])\n}\n\n/**\n * Replace line endings.\n *\n * @type {ReplaceFunction}\n */\nfunction replace() {\n  return {type: 'break'}\n}\n","/**\n * @typedef {import('mdast').Root} Root\n */\n\nimport {newlineToBreak} from 'mdast-util-newline-to-break'\n\n/**\n * Support hard breaks without needing spaces or escapes (turns enters into\n * `<br>`s).\n *\n * @returns\n *   Transform.\n */\nexport default function remarkBreaks() {\n  /**\n   * Transform.\n   *\n   * @param {Root} tree\n   *   Tree.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  return function (tree) {\n    newlineToBreak(tree)\n  }\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Blockquote} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function blockquote(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'blockquote',\n    properties: {},\n    children: state.wrap(state.all(node), true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Break} node\n *   mdast node.\n * @returns {Array<Element | Text>}\n *   hast element content.\n */\nexport function hardBreak(state, node) {\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n  state.patch(node, result)\n  return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Code} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function code(state, node) {\n  const value = node.value ? node.value + '\\n' : ''\n  /** @type {Properties} */\n  const properties = {}\n\n  if (node.lang) {\n    properties.className = ['language-' + node.lang]\n  }\n\n  // Create `<code>`.\n  /** @type {Element} */\n  let result = {\n    type: 'element',\n    tagName: 'code',\n    properties,\n    children: [{type: 'text', value}]\n  }\n\n  if (node.meta) {\n    result.data = {meta: node.meta}\n  }\n\n  state.patch(node, result)\n  result = state.applyData(node, result)\n\n  // Create `<pre>`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Extract<Nodes, Reference>} node\n *   Reference node (image, link).\n * @returns {Array<ElementContent>}\n *   hast content.\n */\nexport function revert(state, node) {\n  const subtype = node.referenceType\n  let suffix = ']'\n\n  if (subtype === 'collapsed') {\n    suffix += '[]'\n  } else if (subtype === 'full') {\n    suffix += '[' + (node.label || node.identifier) + ']'\n  }\n\n  if (node.type === 'imageReference') {\n    return [{type: 'text', value: '![' + node.alt + suffix}]\n  }\n\n  const contents = state.all(node)\n  const head = contents[0]\n\n  if (head && head.type === 'text') {\n    head.value = '[' + head.value\n  } else {\n    contents.unshift({type: 'text', value: '['})\n  }\n\n  const tail = contents[contents.length - 1]\n\n  if (tail && tail.type === 'text') {\n    tail.value += suffix\n  } else {\n    contents.push({type: 'text', value: suffix})\n  }\n\n  return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const def = state.definitionById.get(id)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(def.url || ''), alt: node.alt}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array<ElementContent> | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const def = state.definitionById.get(id)\n\n  if (!def) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(def.url || '')}\n\n  if (def.title !== null && def.title !== undefined) {\n    properties.title = def.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ListItem} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function listItem(state, node, parent) {\n  const results = state.all(node)\n  const loose = parent ? listLoose(parent) : listItemLoose(node)\n  /** @type {Properties} */\n  const properties = {}\n  /** @type {Array<ElementContent>} */\n  const children = []\n\n  if (typeof node.checked === 'boolean') {\n    const head = results[0]\n    /** @type {Element} */\n    let paragraph\n\n    if (head && head.type === 'element' && head.tagName === 'p') {\n      paragraph = head\n    } else {\n      paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n      results.unshift(paragraph)\n    }\n\n    if (paragraph.children.length > 0) {\n      paragraph.children.unshift({type: 'text', value: ' '})\n    }\n\n    paragraph.children.unshift({\n      type: 'element',\n      tagName: 'input',\n      properties: {type: 'checkbox', checked: node.checked, disabled: true},\n      children: []\n    })\n\n    // According to github-markdown-css, this class hides bullet.\n    // See: <https://github.com/sindresorhus/github-markdown-css>.\n    properties.className = ['task-list-item']\n  }\n\n  let index = -1\n\n  while (++index < results.length) {\n    const child = results[index]\n\n    // Add eols before nodes, except if this is a loose, first paragraph.\n    if (\n      loose ||\n      index !== 0 ||\n      child.type !== 'element' ||\n      child.tagName !== 'p'\n    ) {\n      children.push({type: 'text', value: '\\n'})\n    }\n\n    if (child.type === 'element' && child.tagName === 'p' && !loose) {\n      children.push(...child.children)\n    } else {\n      children.push(child)\n    }\n  }\n\n  const tail = results[results.length - 1]\n\n  // Add a final eol.\n  if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n    children.push({type: 'text', value: '\\n'})\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'li', properties, children}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n  let loose = false\n  if (node.type === 'list') {\n    loose = node.spread || false\n    const children = node.children\n    let index = -1\n\n    while (!loose && ++index < children.length) {\n      loose = listItemLoose(children[index])\n    }\n  }\n\n  return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n  const spread = node.spread\n\n  return spread === null || spread === undefined\n    ? node.children.length > 1\n    : spread\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Get the ending point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointEnd = point('end')\n\n/**\n * Get the starting point of `node`.\n *\n * @param node\n *   Node.\n * @returns\n *   Point.\n */\nexport const pointStart = point('start')\n\n/**\n * Get the positional info of `node`.\n *\n * @param {'end' | 'start'} type\n *   Side.\n * @returns\n *   Getter.\n */\nfunction point(type) {\n  return point\n\n  /**\n   * Get the point info of `node` at a bound side.\n   *\n   * @param {Node | NodeLike | null | undefined} [node]\n   * @returns {Point | undefined}\n   */\n  function point(node) {\n    const point = (node && node.position && node.position[type]) || {}\n\n    if (\n      typeof point.line === 'number' &&\n      point.line > 0 &&\n      typeof point.column === 'number' &&\n      point.column > 0\n    ) {\n      return {\n        line: point.line,\n        column: point.column,\n        offset:\n          typeof point.offset === 'number' && point.offset > -1\n            ? point.offset\n            : undefined\n      }\n    }\n  }\n}\n\n/**\n * Get the positional info of `node`.\n *\n * @param {Node | NodeLike | null | undefined} [node]\n *   Node.\n * @returns {Position | undefined}\n *   Position.\n */\nexport function position(node) {\n  const start = pointStart(node)\n  const end = pointEnd(node)\n\n  if (start && end) {\n    return {start, end}\n  }\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array<Element>} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array<ElementContent>} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Trimmed value.\n */\nexport function trimLines(value) {\n  const source = String(value)\n  const search = /\\r?\\n|\\r/g\n  let match = search.exec(source)\n  let last = 0\n  /** @type {Array<string>} */\n  const lines = []\n\n  while (match) {\n    lines.push(\n      trimLine(source.slice(last, match.index), last > 0, true),\n      match[0]\n    )\n\n    last = match.index + match[0].length\n    match = search.exec(source)\n  }\n\n  lines.push(trimLine(source.slice(last), last > 0, false))\n\n  return lines.join('')\n}\n\n/**\n * @param {string} value\n *   Line to trim.\n * @param {boolean} start\n *   Whether to trim the start of the line.\n * @param {boolean} end\n *   Whether to trim the end of the line.\n * @returns {string}\n *   Trimmed line.\n */\nfunction trimLine(value, start, end) {\n  let startIndex = 0\n  let endIndex = value.length\n\n  if (start) {\n    let code = value.codePointAt(startIndex)\n\n    while (code === tab || code === space) {\n      startIndex++\n      code = value.codePointAt(startIndex)\n    }\n  }\n\n  if (end) {\n    let code = value.codePointAt(endIndex - 1)\n\n    while (code === tab || code === space) {\n      endIndex--\n      code = value.codePointAt(endIndex - 1)\n    }\n  }\n\n  return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n  blockquote,\n  break: hardBreak,\n  code,\n  delete: strikethrough,\n  emphasis,\n  footnoteReference,\n  heading,\n  html,\n  imageReference,\n  image,\n  inlineCode,\n  linkReference,\n  link,\n  listItem,\n  list,\n  paragraph,\n  // @ts-expect-error: root is different, but hard to type.\n  root,\n  strong,\n  table,\n  tableCell,\n  tableRow,\n  text,\n  thematicBreak,\n  toml: ignore,\n  yaml: ignore,\n  definition: ignore,\n  footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n  return undefined\n}\n","export const VOID       = -1;\nexport const PRIMITIVE  = 0;\nexport const ARRAY      = 1;\nexport const OBJECT     = 2;\nexport const DATE       = 3;\nexport const REGEXP     = 4;\nexport const MAP        = 5;\nexport const SET        = 6;\nexport const ERROR      = 7;\nexport const BIGINT     = 8;\n// export const SYMBOL = 9;\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n  const as = (out, index) => {\n    $.set(index, out);\n    return out;\n  };\n\n  const unpair = index => {\n    if ($.has(index))\n      return $.get(index);\n\n    const [type, value] = _[index];\n    switch (type) {\n      case PRIMITIVE:\n      case VOID:\n        return as(value, index);\n      case ARRAY: {\n        const arr = as([], index);\n        for (const index of value)\n          arr.push(unpair(index));\n        return arr;\n      }\n      case OBJECT: {\n        const object = as({}, index);\n        for (const [key, index] of value)\n          object[unpair(key)] = unpair(index);\n        return object;\n      }\n      case DATE:\n        return as(new Date(value), index);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as(new RegExp(source, flags), index);\n      }\n      case MAP: {\n        const map = as(new Map, index);\n        for (const [key, index] of value)\n          map.set(unpair(key), unpair(index));\n        return map;\n      }\n      case SET: {\n        const set = as(new Set, index);\n        for (const index of value)\n          set.add(unpair(index));\n        return set;\n      }\n      case ERROR: {\n        const {name, message} = value;\n        return as(new env[name](message), index);\n      }\n      case BIGINT:\n        return as(BigInt(value), index);\n      case 'BigInt':\n        return as(Object(BigInt(value)), index);\n    }\n    return as(new env[type](value), index);\n  };\n\n  return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n  VOID, PRIMITIVE,\n  ARRAY, OBJECT,\n  DATE, REGEXP, MAP, SET,\n  ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n  const type = typeof value;\n  if (type !== 'object' || !value)\n    return [PRIMITIVE, type];\n\n  const asString = toString.call(value).slice(8, -1);\n  switch (asString) {\n    case 'Array':\n      return [ARRAY, EMPTY];\n    case 'Object':\n      return [OBJECT, EMPTY];\n    case 'Date':\n      return [DATE, EMPTY];\n    case 'RegExp':\n      return [REGEXP, EMPTY];\n    case 'Map':\n      return [MAP, EMPTY];\n    case 'Set':\n      return [SET, EMPTY];\n  }\n\n  if (asString.includes('Array'))\n    return [ARRAY, asString];\n\n  if (asString.includes('Error'))\n    return [ERROR, asString];\n\n  return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n  TYPE === PRIMITIVE &&\n  (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n  const as = (out, value) => {\n    const index = _.push(out) - 1;\n    $.set(value, index);\n    return index;\n  };\n\n  const pair = value => {\n    if ($.has(value))\n      return $.get(value);\n\n    let [TYPE, type] = typeOf(value);\n    switch (TYPE) {\n      case PRIMITIVE: {\n        let entry = value;\n        switch (type) {\n          case 'bigint':\n            TYPE = BIGINT;\n            entry = value.toString();\n            break;\n          case 'function':\n          case 'symbol':\n            if (strict)\n              throw new TypeError('unable to serialize ' + type);\n            entry = null;\n            break;\n          case 'undefined':\n            return as([VOID], value);\n        }\n        return as([TYPE, entry], value);\n      }\n      case ARRAY: {\n        if (type)\n          return as([type, [...value]], value);\n  \n        const arr = [];\n        const index = as([TYPE, arr], value);\n        for (const entry of value)\n          arr.push(pair(entry));\n        return index;\n      }\n      case OBJECT: {\n        if (type) {\n          switch (type) {\n            case 'BigInt':\n              return as([type, value.toString()], value);\n            case 'Boolean':\n            case 'Number':\n            case 'String':\n              return as([type, value.valueOf()], value);\n          }\n        }\n\n        if (json && ('toJSON' in value))\n          return pair(value.toJSON());\n\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const key of keys(value)) {\n          if (strict || !shouldSkip(typeOf(value[key])))\n            entries.push([pair(key), pair(value[key])]);\n        }\n        return index;\n      }\n      case DATE:\n        return as([TYPE, value.toISOString()], value);\n      case REGEXP: {\n        const {source, flags} = value;\n        return as([TYPE, {source, flags}], value);\n      }\n      case MAP: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const [key, entry] of value) {\n          if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n            entries.push([pair(key), pair(entry)]);\n        }\n        return index;\n      }\n      case SET: {\n        const entries = [];\n        const index = as([TYPE, entries], value);\n        for (const entry of value) {\n          if (strict || !shouldSkip(typeOf(entry)))\n            entries.push(pair(entry));\n        }\n        return index;\n      }\n    }\n\n    const {message} = value;\n    return as([TYPE, {name: type, message}], value);\n  };\n\n  return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n *  if `true`, will not throw errors on incompatible types, and behave more\n *  like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n  const _ = [];\n  return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n  /* c8 ignore start */\n  (any, options) => (\n    options && ('json' in options || 'lossy' in options) ?\n      deserialize(serialize(any, options)) : structuredClone(any)\n  ) :\n  (any, options) => deserialize(serialize(any, options));\n  /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n *   Generate content for the backreference dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent> | ElementContent | string}\n *   Content for the backreference when linking back from definitions to their\n *   reference.\n *\n * @callback FootnoteBackLabelTemplate\n *   Generate a back label dynamically.\n *\n *   For the following markdown:\n *\n *   ```markdown\n *   Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n *   [^remark]: things about remark\n *   [^micromark]: things about micromark\n *   ```\n *\n *   This function will be called with:\n *\n *   *  `0` and `0` for the backreference from `things about micromark` to\n *      `alpha`, as it is the first used definition, and the first call to it\n *   *  `0` and `1` for the backreference from `things about micromark` to\n *      `bravo`, as it is the first used definition, and the second call to it\n *   *  `1` and `0` for the backreference from `things about remark` to\n *      `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {Array<ElementContent>}\n *   Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n  /** @type {Array<ElementContent>} */\n  const result = [{type: 'text', value: '↩'}]\n\n  if (rereferenceIndex > 1) {\n    result.push({\n      type: 'element',\n      tagName: 'sup',\n      properties: {},\n      children: [{type: 'text', value: String(rereferenceIndex)}]\n    })\n  }\n\n  return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n *   Index of the definition in the order that they are first referenced,\n *   0-indexed.\n * @param {number} rereferenceIndex\n *   Index of calls to the same definition, 0-indexed.\n * @returns {string}\n *   Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n  return (\n    'Back to reference ' +\n    (referenceIndex + 1) +\n    (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n  )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n *   Info passed around.\n * @returns {Element | undefined}\n *   `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const footnoteBackContent =\n    state.options.footnoteBackContent || defaultFootnoteBackContent\n  const footnoteBackLabel =\n    state.options.footnoteBackLabel || defaultFootnoteBackLabel\n  const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n  const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n  const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n    className: ['sr-only']\n  }\n  /** @type {Array<ElementContent>} */\n  const listItems = []\n  let referenceIndex = -1\n\n  while (++referenceIndex < state.footnoteOrder.length) {\n    const def = state.footnoteById.get(state.footnoteOrder[referenceIndex])\n\n    if (!def) {\n      continue\n    }\n\n    const content = state.all(def)\n    const id = String(def.identifier).toUpperCase()\n    const safeId = normalizeUri(id.toLowerCase())\n    let rereferenceIndex = 0\n    /** @type {Array<ElementContent>} */\n    const backReferences = []\n    const counts = state.footnoteCounts.get(id)\n\n    // eslint-disable-next-line no-unmodified-loop-condition\n    while (counts !== undefined && ++rereferenceIndex <= counts) {\n      if (backReferences.length > 0) {\n        backReferences.push({type: 'text', value: ' '})\n      }\n\n      let children =\n        typeof footnoteBackContent === 'string'\n          ? footnoteBackContent\n          : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n      if (typeof children === 'string') {\n        children = {type: 'text', value: children}\n      }\n\n      backReferences.push({\n        type: 'element',\n        tagName: 'a',\n        properties: {\n          href:\n            '#' +\n            clobberPrefix +\n            'fnref-' +\n            safeId +\n            (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n          dataFootnoteBackref: '',\n          ariaLabel:\n            typeof footnoteBackLabel === 'string'\n              ? footnoteBackLabel\n              : footnoteBackLabel(referenceIndex, rereferenceIndex),\n          className: ['data-footnote-backref']\n        },\n        children: Array.isArray(children) ? children : [children]\n      })\n    }\n\n    const tail = content[content.length - 1]\n\n    if (tail && tail.type === 'element' && tail.tagName === 'p') {\n      const tailTail = tail.children[tail.children.length - 1]\n      if (tailTail && tailTail.type === 'text') {\n        tailTail.value += ' '\n      } else {\n        tail.children.push({type: 'text', value: ' '})\n      }\n\n      tail.children.push(...backReferences)\n    } else {\n      content.push(...backReferences)\n    }\n\n    /** @type {Element} */\n    const listItem = {\n      type: 'element',\n      tagName: 'li',\n      properties: {id: clobberPrefix + 'fn-' + safeId},\n      children: state.wrap(content, true)\n    }\n\n    state.patch(def, listItem)\n\n    listItems.push(listItem)\n  }\n\n  if (listItems.length === 0) {\n    return\n  }\n\n  return {\n    type: 'element',\n    tagName: 'section',\n    properties: {dataFootnotes: true, className: ['footnotes']},\n    children: [\n      {\n        type: 'element',\n        tagName: footnoteLabelTagName,\n        properties: {\n          ...structuredClone(footnoteLabelProperties),\n          id: 'footnote-label'\n        },\n        children: [{type: 'text', value: footnoteLabel}]\n      },\n      {type: 'text', value: '\\n'},\n      {\n        type: 'element',\n        tagName: 'ol',\n        properties: {},\n        children: state.wrap(listItems, true)\n      },\n      {type: 'text', value: '\\n'}\n    ]\n  }\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array<HastElementContent> | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial<Record<MdastNodes['type'], Handler>>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   <p id=\"x\"></p>\n *   <script>alert(x) // `x` now refers to the `p#x` DOM element</script>\n *   ```\n *\n *   The above example shows that elements are made available by browsers, by\n *   their ID, on the `window` object.\n *   This is a security risk because you might be expecting some other variable\n *   at that place.\n *   It can also break polyfills.\n *   Using a prefix solves these problems.\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n *   Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackContent(_, rereferenceIndex) {\n *     const result = [{type: 'text', value: '↩'}]\n *\n *     if (rereferenceIndex > 1) {\n *       result.push({\n *         type: 'element',\n *         tagName: 'sup',\n *         properties: {},\n *         children: [{type: 'text', value: String(rereferenceIndex)}]\n *       })\n *     }\n *\n *     return result\n *   }\n *   ```\n *\n *   This content is used in the `a` element of each backreference (the `↩`\n *   links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n *   Label to describe the backreference back to references (default:\n *   `defaultFootnoteBackLabel`).\n *\n *   The default value is:\n *\n *   ```js\n *   function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n *    return (\n *      'Back to reference ' +\n *      (referenceIndex + 1) +\n *      (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n *    )\n *   }\n *   ```\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is used in the `ariaLabel` property on each backreference\n *   (the `↩` links).\n *   It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n *   Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n *   Change it when the markdown is not in English.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n *   Properties to use on the footnote label (default: `{className:\n *   ['sr-only']}`).\n *\n *   Change it to show the label and add other properties.\n *\n *   This label is typically hidden visually (assuming an `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass an empty string.\n *   You can also add different properties.\n *\n *   > 👉 **Note**: `id: 'footnote-label'` is always added, because footnote\n *   > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n *   HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n *   Change it to match your document structure.\n *\n *   This label is typically hidden visually (assuming a `sr-only` CSS class\n *   is defined that does that) and so affects screen readers only.\n *   If you do have such a class, but want to show this section to everyone,\n *   pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n *   Extra handlers for nodes (optional).\n * @property {Array<MdastNodes['type']> | null | undefined} [passThrough]\n *   List of custom mdast node types to pass through (keep) in hast (note that\n *   the node itself is passed, but eventual children are transformed)\n *   (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n *   Handler for all unknown nodes (optional).\n *\n * @typedef State\n *   Info passed around.\n * @property {(node: MdastNodes) => Array<HastElementContent>} all\n *   Transform the children of an mdast parent to hast.\n * @property {<Type extends HastNodes>(from: MdastNodes, to: Type) => HastElement | Type} applyData\n *   Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map<string, MdastDefinition>} definitionById\n *   Definitions by their identifier.\n * @property {Map<string, MdastFootnoteDefinition>} footnoteById\n *   Footnote definitions by their identifier.\n * @property {Map<string, number>} footnoteCounts\n *   Counts for how often the same footnote was called.\n * @property {Array<string>} footnoteOrder\n *   Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n *   Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array<HastElementContent> | HastElementContent | undefined} one\n *   Transform an mdast node to hast.\n * @property {Options} options\n *   Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n *   Copy a node’s positional info.\n * @property {<Type extends HastRootContent>(nodes: Array<Type>, loose?: boolean | undefined) => Array<HastText | Type>} wrap\n *   Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n *   mdast node to transform.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {State}\n *   `state` function.\n */\nexport function createState(tree, options) {\n  const settings = options || emptyOptions\n  /** @type {Map<string, MdastDefinition>} */\n  const definitionById = new Map()\n  /** @type {Map<string, MdastFootnoteDefinition>} */\n  const footnoteById = new Map()\n  /** @type {Map<string, number>} */\n  const footnoteCounts = new Map()\n  /** @type {Handlers} */\n  // @ts-expect-error: the root handler returns a root.\n  // Hard to type.\n  const handlers = {...defaultHandlers, ...settings.handlers}\n\n  /** @type {State} */\n  const state = {\n    all,\n    applyData,\n    definitionById,\n    footnoteById,\n    footnoteCounts,\n    footnoteOrder: [],\n    handlers,\n    one,\n    options: settings,\n    patch,\n    wrap\n  }\n\n  visit(tree, function (node) {\n    if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n      const map = node.type === 'definition' ? definitionById : footnoteById\n      const id = String(node.identifier).toUpperCase()\n\n      // Mimick CM behavior of link definitions.\n      // See: <https://github.com/syntax-tree/mdast-util-definitions/blob/9032189/lib/index.js#L20-L21>.\n      if (!map.has(id)) {\n        // @ts-expect-error: node type matches map.\n        map.set(id, node)\n      }\n    }\n  })\n\n  return state\n\n  /**\n   * Transform an mdast node into a hast node.\n   *\n   * @param {MdastNodes} node\n   *   mdast node.\n   * @param {MdastParents | undefined} [parent]\n   *   Parent of `node`.\n   * @returns {Array<HastElementContent> | HastElementContent | undefined}\n   *   Resulting hast node.\n   */\n  function one(node, parent) {\n    const type = node.type\n    const handle = state.handlers[type]\n\n    if (own.call(state.handlers, type) && handle) {\n      return handle(state, node, parent)\n    }\n\n    if (state.options.passThrough && state.options.passThrough.includes(type)) {\n      if ('children' in node) {\n        const {children, ...shallow} = node\n        const result = structuredClone(shallow)\n        // @ts-expect-error: TS doesn’t understand…\n        result.children = state.all(node)\n        // @ts-expect-error: TS doesn’t understand…\n        return result\n      }\n\n      // @ts-expect-error: it’s custom.\n      return structuredClone(node)\n    }\n\n    const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n    return unknown(state, node, parent)\n  }\n\n  /**\n   * Transform the children of an mdast node into hast nodes.\n   *\n   * @param {MdastNodes} parent\n   *   mdast node to compile\n   * @returns {Array<HastElementContent>}\n   *   Resulting hast nodes.\n   */\n  function all(parent) {\n    /** @type {Array<HastElementContent>} */\n    const values = []\n\n    if ('children' in parent) {\n      const nodes = parent.children\n      let index = -1\n      while (++index < nodes.length) {\n        const result = state.one(nodes[index], parent)\n\n        // To do: see if we van clean this? Can we merge texts?\n        if (result) {\n          if (index && nodes[index - 1].type === 'break') {\n            if (!Array.isArray(result) && result.type === 'text') {\n              result.value = trimMarkdownSpaceStart(result.value)\n            }\n\n            if (!Array.isArray(result) && result.type === 'element') {\n              const head = result.children[0]\n\n              if (head && head.type === 'text') {\n                head.value = trimMarkdownSpaceStart(head.value)\n              }\n            }\n          }\n\n          if (Array.isArray(result)) {\n            values.push(...result)\n          } else {\n            values.push(result)\n          }\n        }\n      }\n    }\n\n    return values\n  }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n *   mdast node to copy from.\n * @param {HastNodes} to\n *   hast node to copy into.\n * @returns {undefined}\n *   Nothing.\n */\nfunction patch(from, to) {\n  if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n *   Node type.\n * @param {MdastNodes} from\n *   mdast node to use data from.\n * @param {Type} to\n *   hast node to change.\n * @returns {HastElement | Type}\n *   Nothing.\n */\nfunction applyData(from, to) {\n  /** @type {HastElement | Type} */\n  let result = to\n\n  // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n  if (from && from.data) {\n    const hName = from.data.hName\n    const hChildren = from.data.hChildren\n    const hProperties = from.data.hProperties\n\n    if (typeof hName === 'string') {\n      // Transforming the node resulted in an element with a different name\n      // than wanted:\n      if (result.type === 'element') {\n        result.tagName = hName\n      }\n      // Transforming the node resulted in a non-element, which happens for\n      // raw, text, and root nodes (unless custom handlers are passed).\n      // The intent of `hName` is to create an element, but likely also to keep\n      // the content around (otherwise: pass `hChildren`).\n      else {\n        /** @type {Array<HastElementContent>} */\n        // @ts-expect-error: assume no doctypes in `root`.\n        const children = 'children' in result ? result.children : [result]\n        result = {type: 'element', tagName: hName, properties: {}, children}\n      }\n    }\n\n    if (result.type === 'element' && hProperties) {\n      Object.assign(result.properties, structuredClone(hProperties))\n    }\n\n    if (\n      'children' in result &&\n      result.children &&\n      hChildren !== null &&\n      hChildren !== undefined\n    ) {\n      result.children = hChildren\n    }\n  }\n\n  return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastNodes} node\n *   Unknown mdast node.\n * @returns {HastElement | HastText}\n *   Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n  const data = node.data || {}\n  /** @type {HastElement | HastText} */\n  const result =\n    'value' in node &&\n    !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n      ? {type: 'text', value: node.value}\n      : {\n          type: 'element',\n          tagName: 'div',\n          properties: {},\n          children: state.all(node)\n        }\n\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n *   Node type.\n * @param {Array<Type>} nodes\n *   List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n *   Whether to add line endings at start and end (default: `false`).\n * @returns {Array<HastText | Type>}\n *   Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n  /** @type {Array<HastText | Type>} */\n  const result = []\n  let index = -1\n\n  if (loose) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  while (++index < nodes.length) {\n    if (index) result.push({type: 'text', value: '\\n'})\n    result.push(nodes[index])\n  }\n\n  if (loose && nodes.length > 0) {\n    result.push({type: 'text', value: '\\n'})\n  }\n\n  return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n *   Value to trim.\n * @returns {string}\n *   Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n  let index = 0\n  let code = value.charCodeAt(index)\n\n  while (code === 9 || code === 32) {\n    index++\n    code = value.charCodeAt(index)\n  }\n\n  return value.slice(index)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * *   `hast-util-to-html` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful\n *     if you completely trust authors\n * *   `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only\n *     way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n *   mdast tree.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {HastNodes}\n *   hast tree.\n */\nexport function toHast(tree, options) {\n  const state = createState(tree, options)\n  const node = state.one(tree, undefined)\n  const foot = footer(state)\n  /** @type {HastNodes} */\n  const result = Array.isArray(node)\n    ? {type: 'root', children: node}\n    : node || {type: 'root', children: []}\n\n  if (foot) {\n    // If there’s a footer, there were definitions, meaning block\n    // content.\n    // So `result` is a parent node.\n    assert('children' in result)\n    result.children.push({type: 'text', value: '\\n'}, foot)\n  }\n\n  return result\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// <reference types=\"mdast-util-to-hast\" />\n\n/**\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('mdast-util-to-hast').Options} Options\n * @typedef {import('unified').Processor} Processor\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @callback TransformBridge\n *   Bridge-mode.\n *\n *   Runs the destination with the new hast tree.\n *   Discards result.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {Promise<undefined>}\n *   Nothing.\n *\n * @callback TransformMutate\n *  Mutate-mode.\n *\n *  Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n *   Tree.\n * @param {VFile} file\n *   File.\n * @returns {HastRoot}\n *   Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * *   if a processor is given, runs the (rehype) plugins used on it with a\n *     hast tree, then discards the result (*bridge mode*)\n * *   otherwise, returns a hast tree, the plugins used after `remarkRehype`\n *     are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * *   `rehype-stringify` also has an option `allowDangerousHtml` which will\n *     output the raw HTML.\n *     This is typically discouraged as noted by the option name but is useful if\n *     you completely trust authors\n * *   `rehype-raw` can handle the raw embedded HTML strings by parsing them\n *     into standard hast nodes (`element`, `text`, etc).\n *     This is a heavy task as it needs a full HTML parser, but it is the only way\n *     to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n * <p id=x></p>\n * <script>alert(x) // `x` now refers to the DOM `p#x` element</script>\n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * *   when the node has a `value` (and doesn’t have `data.hName`,\n *     `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n *     node\n * *   otherwise, create a `<div>` element (which could be changed with\n *     `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly<Options> | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly<Options> | Processor | null | undefined} [destination]\n *   Processor or configuration (optional).\n * @param {Readonly<Options> | null | undefined} [options]\n *   When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n *   Transform.\n */\nexport default function remarkRehype(destination, options) {\n  if (destination && 'run' in destination) {\n    /**\n     * @type {TransformBridge}\n     */\n    return async function (tree, file) {\n      // Cast because root in -> root out.\n      const hastTree = /** @type {HastRoot} */ (toHast(tree, options))\n      await destination.run(hastTree, file)\n    }\n  }\n\n  /**\n   * @type {TransformMutate}\n   */\n  return function (tree) {\n    // Cast because root in -> root out.\n    return /** @type {HastRoot} */ (toHast(tree, options || destination))\n  }\n}\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record<string, Info>} Properties\n * @typedef {Record<string, string>} Normal\n */\n\nexport class Schema {\n  /**\n   * @constructor\n   * @param {Properties} property\n   * @param {Normal} normal\n   * @param {string} [space]\n   */\n  constructor(property, normal, space) {\n    this.property = property\n    this.normal = normal\n    if (space) {\n      this.space = space\n    }\n  }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  let index = -1\n\n  while (++index < definitions.length) {\n    Object.assign(property, definitions[index].property)\n    Object.assign(normal, definitions[index].normal)\n  }\n\n  return new Schema(property, normal, space)\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n  return value.toLowerCase()\n}\n","export class Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   */\n  constructor(property, attribute) {\n    /** @type {string} */\n    this.property = property\n    /** @type {string} */\n    this.attribute = attribute\n  }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n  return 2 ** ++powers\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array<keyof types>} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n  /**\n   * @constructor\n   * @param {string} property\n   * @param {string} attribute\n   * @param {number|null} [mask]\n   * @param {string} [space]\n   */\n  constructor(property, attribute, mask, space) {\n    let index = -1\n\n    super(property, attribute)\n\n    mark(this, 'space', space)\n\n    if (typeof mask === 'number') {\n      while (++index < checks.length) {\n        const check = checks[index]\n        mark(this, checks[index], (mask & types[check]) === types[check])\n      }\n    }\n  }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n  if (value) {\n    // @ts-expect-error: assume `value` matches the expected value of `key`.\n    values[key] = value\n  }\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record<string, string>} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record<string, number|null>} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array<string>} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n  /** @type {Properties} */\n  const property = {}\n  /** @type {Normal} */\n  const normal = {}\n  /** @type {string} */\n  let prop\n\n  for (prop in definition.properties) {\n    if (own.call(definition.properties, prop)) {\n      const value = definition.properties[prop]\n      const info = new DefinedInfo(\n        prop,\n        definition.transform(definition.attributes || {}, prop),\n        value,\n        definition.space\n      )\n\n      if (\n        definition.mustUseProperty &&\n        definition.mustUseProperty.includes(prop)\n      ) {\n        info.mustUseProperty = true\n      }\n\n      property[prop] = info\n\n      normal[normalize(prop)] = prop\n      normal[normalize(info.attribute)] = prop\n    }\n  }\n\n  return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n  space: 'xlink',\n  transform(_, prop) {\n    return 'xlink:' + prop.slice(5).toLowerCase()\n  },\n  properties: {\n    xLinkActuate: null,\n    xLinkArcRole: null,\n    xLinkHref: null,\n    xLinkRole: null,\n    xLinkShow: null,\n    xLinkTitle: null,\n    xLinkType: null\n  }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n  space: 'xml',\n  transform(_, prop) {\n    return 'xml:' + prop.slice(3).toLowerCase()\n  },\n  properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","/**\n * @param {Record<string, string>} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n  return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n  return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n  space: 'xmlns',\n  attributes: {xmlnsxlink: 'xmlns:xlink'},\n  transform: caseInsensitiveTransform,\n  properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n  transform(_, prop) {\n    return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n  },\n  properties: {\n    ariaActiveDescendant: null,\n    ariaAtomic: booleanish,\n    ariaAutoComplete: null,\n    ariaBusy: booleanish,\n    ariaChecked: booleanish,\n    ariaColCount: number,\n    ariaColIndex: number,\n    ariaColSpan: number,\n    ariaControls: spaceSeparated,\n    ariaCurrent: null,\n    ariaDescribedBy: spaceSeparated,\n    ariaDetails: null,\n    ariaDisabled: booleanish,\n    ariaDropEffect: spaceSeparated,\n    ariaErrorMessage: null,\n    ariaExpanded: booleanish,\n    ariaFlowTo: spaceSeparated,\n    ariaGrabbed: booleanish,\n    ariaHasPopup: null,\n    ariaHidden: booleanish,\n    ariaInvalid: null,\n    ariaKeyShortcuts: null,\n    ariaLabel: null,\n    ariaLabelledBy: spaceSeparated,\n    ariaLevel: number,\n    ariaLive: null,\n    ariaModal: booleanish,\n    ariaMultiLine: booleanish,\n    ariaMultiSelectable: booleanish,\n    ariaOrientation: null,\n    ariaOwns: spaceSeparated,\n    ariaPlaceholder: null,\n    ariaPosInSet: number,\n    ariaPressed: booleanish,\n    ariaReadOnly: booleanish,\n    ariaRelevant: null,\n    ariaRequired: booleanish,\n    ariaRoleDescription: spaceSeparated,\n    ariaRowCount: number,\n    ariaRowIndex: number,\n    ariaRowSpan: number,\n    ariaSelected: booleanish,\n    ariaSetSize: number,\n    ariaSort: null,\n    ariaValueMax: number,\n    ariaValueMin: number,\n    ariaValueNow: number,\n    ariaValueText: null,\n    role: null\n  }\n})\n","import {\n  boolean,\n  overloadedBoolean,\n  booleanish,\n  number,\n  spaceSeparated,\n  commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n  space: 'html',\n  attributes: {\n    acceptcharset: 'accept-charset',\n    classname: 'class',\n    htmlfor: 'for',\n    httpequiv: 'http-equiv'\n  },\n  transform: caseInsensitiveTransform,\n  mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n  properties: {\n    // Standard Properties.\n    abbr: null,\n    accept: commaSeparated,\n    acceptCharset: spaceSeparated,\n    accessKey: spaceSeparated,\n    action: null,\n    allow: null,\n    allowFullScreen: boolean,\n    allowPaymentRequest: boolean,\n    allowUserMedia: boolean,\n    alt: null,\n    as: null,\n    async: boolean,\n    autoCapitalize: null,\n    autoComplete: spaceSeparated,\n    autoFocus: boolean,\n    autoPlay: boolean,\n    blocking: spaceSeparated,\n    capture: boolean,\n    charSet: null,\n    checked: boolean,\n    cite: null,\n    className: spaceSeparated,\n    cols: number,\n    colSpan: null,\n    content: null,\n    contentEditable: booleanish,\n    controls: boolean,\n    controlsList: spaceSeparated,\n    coords: number | commaSeparated,\n    crossOrigin: null,\n    data: null,\n    dateTime: null,\n    decoding: null,\n    default: boolean,\n    defer: boolean,\n    dir: null,\n    dirName: null,\n    disabled: boolean,\n    download: overloadedBoolean,\n    draggable: booleanish,\n    encType: null,\n    enterKeyHint: null,\n    fetchPriority: null,\n    form: null,\n    formAction: null,\n    formEncType: null,\n    formMethod: null,\n    formNoValidate: boolean,\n    formTarget: null,\n    headers: spaceSeparated,\n    height: number,\n    hidden: boolean,\n    high: number,\n    href: null,\n    hrefLang: null,\n    htmlFor: spaceSeparated,\n    httpEquiv: spaceSeparated,\n    id: null,\n    imageSizes: null,\n    imageSrcSet: null,\n    inert: boolean,\n    inputMode: null,\n    integrity: null,\n    is: null,\n    isMap: boolean,\n    itemId: null,\n    itemProp: spaceSeparated,\n    itemRef: spaceSeparated,\n    itemScope: boolean,\n    itemType: spaceSeparated,\n    kind: null,\n    label: null,\n    lang: null,\n    language: null,\n    list: null,\n    loading: null,\n    loop: boolean,\n    low: number,\n    manifest: null,\n    max: null,\n    maxLength: number,\n    media: null,\n    method: null,\n    min: null,\n    minLength: number,\n    multiple: boolean,\n    muted: boolean,\n    name: null,\n    nonce: null,\n    noModule: boolean,\n    noValidate: boolean,\n    onAbort: null,\n    onAfterPrint: null,\n    onAuxClick: null,\n    onBeforeMatch: null,\n    onBeforePrint: null,\n    onBeforeToggle: null,\n    onBeforeUnload: null,\n    onBlur: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onContextLost: null,\n    onContextMenu: null,\n    onContextRestored: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFormData: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLanguageChange: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadEnd: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMessageError: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRejectionHandled: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onScrollEnd: null,\n    onSecurityPolicyViolation: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onSlotChange: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnhandledRejection: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onWheel: null,\n    open: boolean,\n    optimum: number,\n    pattern: null,\n    ping: spaceSeparated,\n    placeholder: null,\n    playsInline: boolean,\n    popover: null,\n    popoverTarget: null,\n    popoverTargetAction: null,\n    poster: null,\n    preload: null,\n    readOnly: boolean,\n    referrerPolicy: null,\n    rel: spaceSeparated,\n    required: boolean,\n    reversed: boolean,\n    rows: number,\n    rowSpan: number,\n    sandbox: spaceSeparated,\n    scope: null,\n    scoped: boolean,\n    seamless: boolean,\n    selected: boolean,\n    shadowRootDelegatesFocus: boolean,\n    shadowRootMode: null,\n    shape: null,\n    size: number,\n    sizes: null,\n    slot: null,\n    span: number,\n    spellCheck: booleanish,\n    src: null,\n    srcDoc: null,\n    srcLang: null,\n    srcSet: null,\n    start: number,\n    step: null,\n    style: null,\n    tabIndex: number,\n    target: null,\n    title: null,\n    translate: null,\n    type: null,\n    typeMustMatch: boolean,\n    useMap: null,\n    value: booleanish,\n    width: number,\n    wrap: null,\n\n    // Legacy.\n    // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n    align: null, // Several. Use CSS `text-align` instead,\n    aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n    archive: spaceSeparated, // `<object>`. List of URIs to archives\n    axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n    background: null, // `<body>`. Use CSS `background-image` instead\n    bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n    border: number, // `<table>`. Use CSS `border-width` instead,\n    borderColor: null, // `<table>`. Use CSS `border-color` instead,\n    bottomMargin: number, // `<body>`\n    cellPadding: null, // `<table>`\n    cellSpacing: null, // `<table>`\n    char: null, // Several table elements. When `align=char`, sets the character to align on\n    charOff: null, // Several table elements. When `char`, offsets the alignment\n    classId: null, // `<object>`\n    clear: null, // `<br>`. Use CSS `clear` instead\n    code: null, // `<object>`\n    codeBase: null, // `<object>`\n    codeType: null, // `<object>`\n    color: null, // `<font>` and `<hr>`. Use CSS instead\n    compact: boolean, // Lists. Use CSS to reduce space between items instead\n    declare: boolean, // `<object>`\n    event: null, // `<script>`\n    face: null, // `<font>`. Use CSS instead\n    frame: null, // `<table>`\n    frameBorder: null, // `<iframe>`. Use CSS `border` instead\n    hSpace: number, // `<img>` and `<object>`\n    leftMargin: number, // `<body>`\n    link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n    longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n    lowSrc: null, // `<img>`. Use a `<picture>`\n    marginHeight: number, // `<body>`\n    marginWidth: number, // `<body>`\n    noResize: boolean, // `<frame>`\n    noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n    noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n    noWrap: boolean, // `<td>` and `<th>`\n    object: null, // `<applet>`\n    profile: null, // `<head>`\n    prompt: null, // `<isindex>`\n    rev: null, // `<link>`\n    rightMargin: number, // `<body>`\n    rules: null, // `<table>`\n    scheme: null, // `<meta>`\n    scrolling: booleanish, // `<frame>`. Use overflow in the child context\n    standby: null, // `<object>`\n    summary: null, // `<table>`\n    text: null, // `<body>`. Use CSS `color` instead\n    topMargin: number, // `<body>`\n    valueType: null, // `<param>`\n    version: null, // `<html>`. Use a doctype.\n    vAlign: null, // Several. Use CSS `vertical-align` instead\n    vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n    vSpace: number, // `<img>` and `<object>`\n\n    // Non-standard Properties.\n    allowTransparency: null,\n    autoCorrect: null,\n    autoSave: null,\n    disablePictureInPicture: boolean,\n    disableRemotePlayback: boolean,\n    prefix: null,\n    property: null,\n    results: number,\n    security: null,\n    unselectable: null\n  }\n})\n","import {\n  boolean,\n  number,\n  spaceSeparated,\n  commaSeparated,\n  commaOrSpaceSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseSensitiveTransform} from './util/case-sensitive-transform.js'\n\nexport const svg = create({\n  space: 'svg',\n  attributes: {\n    accentHeight: 'accent-height',\n    alignmentBaseline: 'alignment-baseline',\n    arabicForm: 'arabic-form',\n    baselineShift: 'baseline-shift',\n    capHeight: 'cap-height',\n    className: 'class',\n    clipPath: 'clip-path',\n    clipRule: 'clip-rule',\n    colorInterpolation: 'color-interpolation',\n    colorInterpolationFilters: 'color-interpolation-filters',\n    colorProfile: 'color-profile',\n    colorRendering: 'color-rendering',\n    crossOrigin: 'crossorigin',\n    dataType: 'datatype',\n    dominantBaseline: 'dominant-baseline',\n    enableBackground: 'enable-background',\n    fillOpacity: 'fill-opacity',\n    fillRule: 'fill-rule',\n    floodColor: 'flood-color',\n    floodOpacity: 'flood-opacity',\n    fontFamily: 'font-family',\n    fontSize: 'font-size',\n    fontSizeAdjust: 'font-size-adjust',\n    fontStretch: 'font-stretch',\n    fontStyle: 'font-style',\n    fontVariant: 'font-variant',\n    fontWeight: 'font-weight',\n    glyphName: 'glyph-name',\n    glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n    glyphOrientationVertical: 'glyph-orientation-vertical',\n    hrefLang: 'hreflang',\n    horizAdvX: 'horiz-adv-x',\n    horizOriginX: 'horiz-origin-x',\n    horizOriginY: 'horiz-origin-y',\n    imageRendering: 'image-rendering',\n    letterSpacing: 'letter-spacing',\n    lightingColor: 'lighting-color',\n    markerEnd: 'marker-end',\n    markerMid: 'marker-mid',\n    markerStart: 'marker-start',\n    navDown: 'nav-down',\n    navDownLeft: 'nav-down-left',\n    navDownRight: 'nav-down-right',\n    navLeft: 'nav-left',\n    navNext: 'nav-next',\n    navPrev: 'nav-prev',\n    navRight: 'nav-right',\n    navUp: 'nav-up',\n    navUpLeft: 'nav-up-left',\n    navUpRight: 'nav-up-right',\n    onAbort: 'onabort',\n    onActivate: 'onactivate',\n    onAfterPrint: 'onafterprint',\n    onBeforePrint: 'onbeforeprint',\n    onBegin: 'onbegin',\n    onCancel: 'oncancel',\n    onCanPlay: 'oncanplay',\n    onCanPlayThrough: 'oncanplaythrough',\n    onChange: 'onchange',\n    onClick: 'onclick',\n    onClose: 'onclose',\n    onCopy: 'oncopy',\n    onCueChange: 'oncuechange',\n    onCut: 'oncut',\n    onDblClick: 'ondblclick',\n    onDrag: 'ondrag',\n    onDragEnd: 'ondragend',\n    onDragEnter: 'ondragenter',\n    onDragExit: 'ondragexit',\n    onDragLeave: 'ondragleave',\n    onDragOver: 'ondragover',\n    onDragStart: 'ondragstart',\n    onDrop: 'ondrop',\n    onDurationChange: 'ondurationchange',\n    onEmptied: 'onemptied',\n    onEnd: 'onend',\n    onEnded: 'onended',\n    onError: 'onerror',\n    onFocus: 'onfocus',\n    onFocusIn: 'onfocusin',\n    onFocusOut: 'onfocusout',\n    onHashChange: 'onhashchange',\n    onInput: 'oninput',\n    onInvalid: 'oninvalid',\n    onKeyDown: 'onkeydown',\n    onKeyPress: 'onkeypress',\n    onKeyUp: 'onkeyup',\n    onLoad: 'onload',\n    onLoadedData: 'onloadeddata',\n    onLoadedMetadata: 'onloadedmetadata',\n    onLoadStart: 'onloadstart',\n    onMessage: 'onmessage',\n    onMouseDown: 'onmousedown',\n    onMouseEnter: 'onmouseenter',\n    onMouseLeave: 'onmouseleave',\n    onMouseMove: 'onmousemove',\n    onMouseOut: 'onmouseout',\n    onMouseOver: 'onmouseover',\n    onMouseUp: 'onmouseup',\n    onMouseWheel: 'onmousewheel',\n    onOffline: 'onoffline',\n    onOnline: 'ononline',\n    onPageHide: 'onpagehide',\n    onPageShow: 'onpageshow',\n    onPaste: 'onpaste',\n    onPause: 'onpause',\n    onPlay: 'onplay',\n    onPlaying: 'onplaying',\n    onPopState: 'onpopstate',\n    onProgress: 'onprogress',\n    onRateChange: 'onratechange',\n    onRepeat: 'onrepeat',\n    onReset: 'onreset',\n    onResize: 'onresize',\n    onScroll: 'onscroll',\n    onSeeked: 'onseeked',\n    onSeeking: 'onseeking',\n    onSelect: 'onselect',\n    onShow: 'onshow',\n    onStalled: 'onstalled',\n    onStorage: 'onstorage',\n    onSubmit: 'onsubmit',\n    onSuspend: 'onsuspend',\n    onTimeUpdate: 'ontimeupdate',\n    onToggle: 'ontoggle',\n    onUnload: 'onunload',\n    onVolumeChange: 'onvolumechange',\n    onWaiting: 'onwaiting',\n    onZoom: 'onzoom',\n    overlinePosition: 'overline-position',\n    overlineThickness: 'overline-thickness',\n    paintOrder: 'paint-order',\n    panose1: 'panose-1',\n    pointerEvents: 'pointer-events',\n    referrerPolicy: 'referrerpolicy',\n    renderingIntent: 'rendering-intent',\n    shapeRendering: 'shape-rendering',\n    stopColor: 'stop-color',\n    stopOpacity: 'stop-opacity',\n    strikethroughPosition: 'strikethrough-position',\n    strikethroughThickness: 'strikethrough-thickness',\n    strokeDashArray: 'stroke-dasharray',\n    strokeDashOffset: 'stroke-dashoffset',\n    strokeLineCap: 'stroke-linecap',\n    strokeLineJoin: 'stroke-linejoin',\n    strokeMiterLimit: 'stroke-miterlimit',\n    strokeOpacity: 'stroke-opacity',\n    strokeWidth: 'stroke-width',\n    tabIndex: 'tabindex',\n    textAnchor: 'text-anchor',\n    textDecoration: 'text-decoration',\n    textRendering: 'text-rendering',\n    transformOrigin: 'transform-origin',\n    typeOf: 'typeof',\n    underlinePosition: 'underline-position',\n    underlineThickness: 'underline-thickness',\n    unicodeBidi: 'unicode-bidi',\n    unicodeRange: 'unicode-range',\n    unitsPerEm: 'units-per-em',\n    vAlphabetic: 'v-alphabetic',\n    vHanging: 'v-hanging',\n    vIdeographic: 'v-ideographic',\n    vMathematical: 'v-mathematical',\n    vectorEffect: 'vector-effect',\n    vertAdvY: 'vert-adv-y',\n    vertOriginX: 'vert-origin-x',\n    vertOriginY: 'vert-origin-y',\n    wordSpacing: 'word-spacing',\n    writingMode: 'writing-mode',\n    xHeight: 'x-height',\n    // These were camelcased in Tiny. Now lowercased in SVG 2\n    playbackOrder: 'playbackorder',\n    timelineBegin: 'timelinebegin'\n  },\n  transform: caseSensitiveTransform,\n  properties: {\n    about: commaOrSpaceSeparated,\n    accentHeight: number,\n    accumulate: null,\n    additive: null,\n    alignmentBaseline: null,\n    alphabetic: number,\n    amplitude: number,\n    arabicForm: null,\n    ascent: number,\n    attributeName: null,\n    attributeType: null,\n    azimuth: number,\n    bandwidth: null,\n    baselineShift: null,\n    baseFrequency: null,\n    baseProfile: null,\n    bbox: null,\n    begin: null,\n    bias: number,\n    by: null,\n    calcMode: null,\n    capHeight: number,\n    className: spaceSeparated,\n    clip: null,\n    clipPath: null,\n    clipPathUnits: null,\n    clipRule: null,\n    color: null,\n    colorInterpolation: null,\n    colorInterpolationFilters: null,\n    colorProfile: null,\n    colorRendering: null,\n    content: null,\n    contentScriptType: null,\n    contentStyleType: null,\n    crossOrigin: null,\n    cursor: null,\n    cx: null,\n    cy: null,\n    d: null,\n    dataType: null,\n    defaultAction: null,\n    descent: number,\n    diffuseConstant: number,\n    direction: null,\n    display: null,\n    dur: null,\n    divisor: number,\n    dominantBaseline: null,\n    download: boolean,\n    dx: null,\n    dy: null,\n    edgeMode: null,\n    editable: null,\n    elevation: number,\n    enableBackground: null,\n    end: null,\n    event: null,\n    exponent: number,\n    externalResourcesRequired: null,\n    fill: null,\n    fillOpacity: number,\n    fillRule: null,\n    filter: null,\n    filterRes: null,\n    filterUnits: null,\n    floodColor: null,\n    floodOpacity: null,\n    focusable: null,\n    focusHighlight: null,\n    fontFamily: null,\n    fontSize: null,\n    fontSizeAdjust: null,\n    fontStretch: null,\n    fontStyle: null,\n    fontVariant: null,\n    fontWeight: null,\n    format: null,\n    fr: null,\n    from: null,\n    fx: null,\n    fy: null,\n    g1: commaSeparated,\n    g2: commaSeparated,\n    glyphName: commaSeparated,\n    glyphOrientationHorizontal: null,\n    glyphOrientationVertical: null,\n    glyphRef: null,\n    gradientTransform: null,\n    gradientUnits: null,\n    handler: null,\n    hanging: number,\n    hatchContentUnits: null,\n    hatchUnits: null,\n    height: null,\n    href: null,\n    hrefLang: null,\n    horizAdvX: number,\n    horizOriginX: number,\n    horizOriginY: number,\n    id: null,\n    ideographic: number,\n    imageRendering: null,\n    initialVisibility: null,\n    in: null,\n    in2: null,\n    intercept: number,\n    k: number,\n    k1: number,\n    k2: number,\n    k3: number,\n    k4: number,\n    kernelMatrix: commaOrSpaceSeparated,\n    kernelUnitLength: null,\n    keyPoints: null, // SEMI_COLON_SEPARATED\n    keySplines: null, // SEMI_COLON_SEPARATED\n    keyTimes: null, // SEMI_COLON_SEPARATED\n    kerning: null,\n    lang: null,\n    lengthAdjust: null,\n    letterSpacing: null,\n    lightingColor: null,\n    limitingConeAngle: number,\n    local: null,\n    markerEnd: null,\n    markerMid: null,\n    markerStart: null,\n    markerHeight: null,\n    markerUnits: null,\n    markerWidth: null,\n    mask: null,\n    maskContentUnits: null,\n    maskUnits: null,\n    mathematical: null,\n    max: null,\n    media: null,\n    mediaCharacterEncoding: null,\n    mediaContentEncodings: null,\n    mediaSize: number,\n    mediaTime: null,\n    method: null,\n    min: null,\n    mode: null,\n    name: null,\n    navDown: null,\n    navDownLeft: null,\n    navDownRight: null,\n    navLeft: null,\n    navNext: null,\n    navPrev: null,\n    navRight: null,\n    navUp: null,\n    navUpLeft: null,\n    navUpRight: null,\n    numOctaves: null,\n    observer: null,\n    offset: null,\n    onAbort: null,\n    onActivate: null,\n    onAfterPrint: null,\n    onBeforePrint: null,\n    onBegin: null,\n    onCancel: null,\n    onCanPlay: null,\n    onCanPlayThrough: null,\n    onChange: null,\n    onClick: null,\n    onClose: null,\n    onCopy: null,\n    onCueChange: null,\n    onCut: null,\n    onDblClick: null,\n    onDrag: null,\n    onDragEnd: null,\n    onDragEnter: null,\n    onDragExit: null,\n    onDragLeave: null,\n    onDragOver: null,\n    onDragStart: null,\n    onDrop: null,\n    onDurationChange: null,\n    onEmptied: null,\n    onEnd: null,\n    onEnded: null,\n    onError: null,\n    onFocus: null,\n    onFocusIn: null,\n    onFocusOut: null,\n    onHashChange: null,\n    onInput: null,\n    onInvalid: null,\n    onKeyDown: null,\n    onKeyPress: null,\n    onKeyUp: null,\n    onLoad: null,\n    onLoadedData: null,\n    onLoadedMetadata: null,\n    onLoadStart: null,\n    onMessage: null,\n    onMouseDown: null,\n    onMouseEnter: null,\n    onMouseLeave: null,\n    onMouseMove: null,\n    onMouseOut: null,\n    onMouseOver: null,\n    onMouseUp: null,\n    onMouseWheel: null,\n    onOffline: null,\n    onOnline: null,\n    onPageHide: null,\n    onPageShow: null,\n    onPaste: null,\n    onPause: null,\n    onPlay: null,\n    onPlaying: null,\n    onPopState: null,\n    onProgress: null,\n    onRateChange: null,\n    onRepeat: null,\n    onReset: null,\n    onResize: null,\n    onScroll: null,\n    onSeeked: null,\n    onSeeking: null,\n    onSelect: null,\n    onShow: null,\n    onStalled: null,\n    onStorage: null,\n    onSubmit: null,\n    onSuspend: null,\n    onTimeUpdate: null,\n    onToggle: null,\n    onUnload: null,\n    onVolumeChange: null,\n    onWaiting: null,\n    onZoom: null,\n    opacity: null,\n    operator: null,\n    order: null,\n    orient: null,\n    orientation: null,\n    origin: null,\n    overflow: null,\n    overlay: null,\n    overlinePosition: number,\n    overlineThickness: number,\n    paintOrder: null,\n    panose1: null,\n    path: null,\n    pathLength: number,\n    patternContentUnits: null,\n    patternTransform: null,\n    patternUnits: null,\n    phase: null,\n    ping: spaceSeparated,\n    pitch: null,\n    playbackOrder: null,\n    pointerEvents: null,\n    points: null,\n    pointsAtX: number,\n    pointsAtY: number,\n    pointsAtZ: number,\n    preserveAlpha: null,\n    preserveAspectRatio: null,\n    primitiveUnits: null,\n    propagate: null,\n    property: commaOrSpaceSeparated,\n    r: null,\n    radius: null,\n    referrerPolicy: null,\n    refX: null,\n    refY: null,\n    rel: commaOrSpaceSeparated,\n    rev: commaOrSpaceSeparated,\n    renderingIntent: null,\n    repeatCount: null,\n    repeatDur: null,\n    requiredExtensions: commaOrSpaceSeparated,\n    requiredFeatures: commaOrSpaceSeparated,\n    requiredFonts: commaOrSpaceSeparated,\n    requiredFormats: commaOrSpaceSeparated,\n    resource: null,\n    restart: null,\n    result: null,\n    rotate: null,\n    rx: null,\n    ry: null,\n    scale: null,\n    seed: null,\n    shapeRendering: null,\n    side: null,\n    slope: null,\n    snapshotTime: null,\n    specularConstant: number,\n    specularExponent: number,\n    spreadMethod: null,\n    spacing: null,\n    startOffset: null,\n    stdDeviation: null,\n    stemh: null,\n    stemv: null,\n    stitchTiles: null,\n    stopColor: null,\n    stopOpacity: null,\n    strikethroughPosition: number,\n    strikethroughThickness: number,\n    string: null,\n    stroke: null,\n    strokeDashArray: commaOrSpaceSeparated,\n    strokeDashOffset: null,\n    strokeLineCap: null,\n    strokeLineJoin: null,\n    strokeMiterLimit: number,\n    strokeOpacity: number,\n    strokeWidth: null,\n    style: null,\n    surfaceScale: number,\n    syncBehavior: null,\n    syncBehaviorDefault: null,\n    syncMaster: null,\n    syncTolerance: null,\n    syncToleranceDefault: null,\n    systemLanguage: commaOrSpaceSeparated,\n    tabIndex: number,\n    tableValues: null,\n    target: null,\n    targetX: number,\n    targetY: number,\n    textAnchor: null,\n    textDecoration: null,\n    textRendering: null,\n    textLength: null,\n    timelineBegin: null,\n    title: null,\n    transformBehavior: null,\n    type: null,\n    typeOf: commaOrSpaceSeparated,\n    to: null,\n    transform: null,\n    transformOrigin: null,\n    u1: null,\n    u2: null,\n    underlinePosition: number,\n    underlineThickness: number,\n    unicode: null,\n    unicodeBidi: null,\n    unicodeRange: null,\n    unitsPerEm: number,\n    values: null,\n    vAlphabetic: number,\n    vMathematical: number,\n    vectorEffect: null,\n    vHanging: number,\n    vIdeographic: number,\n    version: null,\n    vertAdvY: number,\n    vertOriginX: number,\n    vertOriginY: number,\n    viewBox: null,\n    viewTarget: null,\n    visibility: null,\n    width: null,\n    widths: null,\n    wordSpacing: null,\n    writingMode: null,\n    x: null,\n    x1: null,\n    x2: null,\n    xChannelSelector: null,\n    xHeight: number,\n    y: null,\n    y1: null,\n    y2: null,\n    yChannelSelector: null,\n    z: null,\n    zoomAndPan: null\n  }\n})\n","/**\n * @typedef {import('./util/schema.js').Schema} Schema\n */\n\nimport {normalize} from './normalize.js'\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\n\nconst valid = /^data[-\\w.:]+$/i\nconst dash = /-[a-z]/g\nconst cap = /[A-Z]/g\n\n/**\n * @param {Schema} schema\n * @param {string} value\n * @returns {Info}\n */\nexport function find(schema, value) {\n  const normal = normalize(value)\n  let prop = value\n  let Type = Info\n\n  if (normal in schema.normal) {\n    return schema.property[schema.normal[normal]]\n  }\n\n  if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n    // Attribute or property.\n    if (value.charAt(4) === '-') {\n      // Turn it into a property.\n      const rest = value.slice(5).replace(dash, camelcase)\n      prop = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n    } else {\n      // Turn it into an attribute.\n      const rest = value.slice(4)\n\n      if (!dash.test(rest)) {\n        let dashes = rest.replace(cap, kebab)\n\n        if (dashes.charAt(0) !== '-') {\n          dashes = '-' + dashes\n        }\n\n        value = 'data' + dashes\n      }\n    }\n\n    Type = DefinedInfo\n  }\n\n  return new Type(prop, value)\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction kebab($0) {\n  return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * @returns {string}\n */\nfunction camelcase($0) {\n  return $0.charAt(1).toUpperCase()\n}\n","/**\n * `hast` is close to `React`, but differs in a couple of cases.\n *\n * To get a React property from a hast property, check if it is in\n * `hastToReact`, if it is, then use the corresponding value,\n * otherwise, use the hast property.\n *\n * @type {Record<string, string>}\n */\nexport const hastToReact = {\n  classId: 'classID',\n  dataType: 'datatype',\n  itemId: 'itemID',\n  strokeDashArray: 'strokeDasharray',\n  strokeDashOffset: 'strokeDashoffset',\n  strokeLineCap: 'strokeLinecap',\n  strokeLineJoin: 'strokeLinejoin',\n  strokeMiterLimit: 'strokeMiterlimit',\n  typeOf: 'typeof',\n  xLinkActuate: 'xlinkActuate',\n  xLinkArcRole: 'xlinkArcrole',\n  xLinkHref: 'xlinkHref',\n  xLinkRole: 'xlinkRole',\n  xLinkShow: 'xlinkShow',\n  xLinkTitle: 'xlinkTitle',\n  xLinkType: 'xlinkType',\n  xmlnsXLink: 'xmlnsXlink'\n}\n","/**\n * @typedef {import('./lib/util/info.js').Info} Info\n * @typedef {import('./lib/util/schema.js').Schema} Schema\n */\n\nimport {merge} from './lib/util/merge.js'\nimport {xlink} from './lib/xlink.js'\nimport {xml} from './lib/xml.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\n\nexport {find} from './lib/find.js'\nexport {hastToReact} from './lib/hast-to-react.js'\nexport {normalize} from './lib/normalize.js'\nexport const html = merge([xml, xlink, xmlns, aria, htmlBase], 'html')\nexport const svg = merge([xml, xlink, xmlns, aria, svgBase], 'svg')\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n *   Space-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  const input = String(value || '').trim()\n  return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @returns {string}\n *   Space-separated tokens.\n */\nexport function stringify(values) {\n  return values.join(' ').trim()\n}\n","/**\n * @typedef Options\n *   Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n *   Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n *   Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n *   Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n *   Comma-separated tokens.\n * @returns {Array<string>}\n *   List of tokens.\n */\nexport function parse(value) {\n  /** @type {Array<string>} */\n  const tokens = []\n  const input = String(value || '')\n  let index = input.indexOf(',')\n  let start = 0\n  /** @type {boolean} */\n  let end = false\n\n  while (!end) {\n    if (index === -1) {\n      index = input.length\n      end = true\n    }\n\n    const token = input.slice(start, index).trim()\n\n    if (token || !end) {\n      tokens.push(token)\n    }\n\n    start = index + 1\n    index = input.indexOf(',', start)\n  }\n\n  return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n *   List of tokens.\n * @param {Options} [options]\n *   Configuration for `stringify` (optional).\n * @returns {string}\n *   Comma-separated tokens.\n */\nexport function stringify(values, options) {\n  const settings = options || {}\n\n  // Ensure the last empty entry is seen.\n  const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n  return input\n    .join(\n      (settings.padRight ? ' ' : '') +\n        ',' +\n        (settings.padLeft === false ? '' : ' ')\n    )\n    .trim()\n}\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function(style, options) {\n  if (typeof style !== 'string') {\n    throw new TypeError('First argument must be a string');\n  }\n\n  if (!style) return [];\n\n  options = options || {};\n\n  /**\n   * Positional.\n   */\n  var lineno = 1;\n  var column = 1;\n\n  /**\n   * Update lineno and column based on `str`.\n   *\n   * @param {String} str\n   */\n  function updatePosition(str) {\n    var lines = str.match(NEWLINE_REGEX);\n    if (lines) lineno += lines.length;\n    var i = str.lastIndexOf(NEWLINE);\n    column = ~i ? str.length - i : column + str.length;\n  }\n\n  /**\n   * Mark position and patch `node.position`.\n   *\n   * @return {Function}\n   */\n  function position() {\n    var start = { line: lineno, column: column };\n    return function(node) {\n      node.position = new Position(start);\n      whitespace();\n      return node;\n    };\n  }\n\n  /**\n   * Store position information for a node.\n   *\n   * @constructor\n   * @property {Object} start\n   * @property {Object} end\n   * @property {undefined|String} source\n   */\n  function Position(start) {\n    this.start = start;\n    this.end = { line: lineno, column: column };\n    this.source = options.source;\n  }\n\n  /**\n   * Non-enumerable source string.\n   */\n  Position.prototype.content = style;\n\n  var errorsList = [];\n\n  /**\n   * Error `msg`.\n   *\n   * @param {String} msg\n   * @throws {Error}\n   */\n  function error(msg) {\n    var err = new Error(\n      options.source + ':' + lineno + ':' + column + ': ' + msg\n    );\n    err.reason = msg;\n    err.filename = options.source;\n    err.line = lineno;\n    err.column = column;\n    err.source = style;\n\n    if (options.silent) {\n      errorsList.push(err);\n    } else {\n      throw err;\n    }\n  }\n\n  /**\n   * Match `re` and return captures.\n   *\n   * @param {RegExp} re\n   * @return {undefined|Array}\n   */\n  function match(re) {\n    var m = re.exec(style);\n    if (!m) return;\n    var str = m[0];\n    updatePosition(str);\n    style = style.slice(str.length);\n    return m;\n  }\n\n  /**\n   * Parse whitespace.\n   */\n  function whitespace() {\n    match(WHITESPACE_REGEX);\n  }\n\n  /**\n   * Parse comments.\n   *\n   * @param {Object[]} [rules]\n   * @return {Object[]}\n   */\n  function comments(rules) {\n    var c;\n    rules = rules || [];\n    while ((c = comment())) {\n      if (c !== false) {\n        rules.push(c);\n      }\n    }\n    return rules;\n  }\n\n  /**\n   * Parse comment.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function comment() {\n    var pos = position();\n    if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n    var i = 2;\n    while (\n      EMPTY_STRING != style.charAt(i) &&\n      (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n    ) {\n      ++i;\n    }\n    i += 2;\n\n    if (EMPTY_STRING === style.charAt(i - 1)) {\n      return error('End of comment missing');\n    }\n\n    var str = style.slice(2, i - 2);\n    column += 2;\n    updatePosition(str);\n    style = style.slice(i);\n    column += 2;\n\n    return pos({\n      type: TYPE_COMMENT,\n      comment: str\n    });\n  }\n\n  /**\n   * Parse declaration.\n   *\n   * @return {Object}\n   * @throws {Error}\n   */\n  function declaration() {\n    var pos = position();\n\n    // prop\n    var prop = match(PROPERTY_REGEX);\n    if (!prop) return;\n    comment();\n\n    // :\n    if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n    // val\n    var val = match(VALUE_REGEX);\n\n    var ret = pos({\n      type: TYPE_DECLARATION,\n      property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n      value: val\n        ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n        : EMPTY_STRING\n    });\n\n    // ;\n    match(SEMICOLON_REGEX);\n\n    return ret;\n  }\n\n  /**\n   * Parse declarations.\n   *\n   * @return {Object[]}\n   */\n  function declarations() {\n    var decls = [];\n\n    comments(decls);\n\n    // declarations\n    var decl;\n    while ((decl = declaration())) {\n      if (decl !== false) {\n        decls.push(decl);\n        comments(decls);\n      }\n    }\n\n    return decls;\n  }\n\n  whitespace();\n  return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n  return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","var parse = require('inline-style-parser');\n\n/**\n * Parses inline style to object.\n *\n * @example\n * // returns { 'line-height': '42' }\n * StyleToObject('line-height: 42;');\n *\n * @param  {String}      style      - The inline style.\n * @param  {Function}    [iterator] - The iterator function.\n * @return {null|Object}\n */\nfunction StyleToObject(style, iterator) {\n  var output = null;\n  if (!style || typeof style !== 'string') {\n    return output;\n  }\n\n  var declaration;\n  var declarations = parse(style);\n  var hasIterator = typeof iterator === 'function';\n  var property;\n  var value;\n\n  for (var i = 0, len = declarations.length; i < len; i++) {\n    declaration = declarations[i];\n    property = declaration.property;\n    value = declaration.value;\n\n    if (hasIterator) {\n      iterator(property, value, declaration);\n    } else if (value) {\n      output || (output = {});\n      output[property] = value;\n    }\n  }\n\n  return output;\n}\n\nmodule.exports = StyleToObject;\nmodule.exports.default = StyleToObject; // ESM support\n","/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n  html: 'http://www.w3.org/1999/xhtml',\n  mathml: 'http://www.w3.org/1998/Math/MathML',\n  svg: 'http://www.w3.org/2000/svg',\n  xlink: 'http://www.w3.org/1999/xlink',\n  xml: 'http://www.w3.org/XML/1998/namespace',\n  xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n","/**\n * @typedef {import('property-information').Schema} Schema\n * @typedef {import('hast').Content} Content\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Root} Root\n */\n\n/**\n * @typedef {Root | Content} Node\n *\n * @callback CreateElementLike\n *   Function that works somewhat like `React.createElement`.\n * @param {string} name\n *   Element name.\n * @param {any} attributes\n *   Properties.\n * @param {Array<any>} [children]\n *   Children.\n * @returns {any}\n *   Something.\n *\n * @typedef State\n *   Info passed around.\n * @property {Schema} schema\n *   Current schema.\n * @property {string | undefined} prefix\n *   Prefix to use.\n * @property {number} key\n *   Current key.\n * @property {boolean} react\n *   Looks like React.\n * @property {boolean} vue\n *   Looks like Vue.\n * @property {boolean} vdom\n *   Looks like vdom.\n * @property {boolean} hyperscript\n *   Looks like `hyperscript`.\n *\n * @typedef Options\n *   Configuration.\n * @property {string | null | undefined} [prefix]\n *   Prefix to use as a prefix for keys passed in `props` to `h()`, this\n *   behavior is turned off by passing `false` and turned on by passing a\n *   `string`.\n *   By default, `h-` is used as a prefix if the given `h` is detected as being\n *   `virtual-dom/h` or `React.createElement`\n * @property {'html' | 'svg' | null | undefined} [space]\n *   Whether `node` is in the `'html'` or `'svg'` space.\n *   If an `<svg>` element is found when inside the HTML space, `toH`\n *   automatically switches to the SVG space when entering the element, and\n *   switches back when exiting.\n */\n\nimport {html, svg, find, hastToReact} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport styleToObject from 'style-to-object'\nimport {webNamespaces} from 'web-namespaces'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {CreateElementLike} H\n *   Type of hyperscript function.\n * @param {H} h\n *   HyperScript function.\n * @param {Node} tree\n *   Tree to transform.\n * @param {string | boolean | Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {ReturnType<H>}\n *   Return type of the hyperscript function.\n */\n// eslint-disable-next-line complexity\nexport function toH(h, tree, options) {\n  if (typeof h !== 'function') {\n    throw new TypeError('h is not a function')\n  }\n\n  const r = react(h)\n  const v = vue(h)\n  const vd = vdom(h)\n  /** @type {string|boolean|null|undefined} */\n  let prefix\n  /** @type {Element} */\n  let node\n\n  if (typeof options === 'string' || typeof options === 'boolean') {\n    prefix = options\n    options = {}\n  } else {\n    if (!options) options = {}\n    prefix = options.prefix\n  }\n\n  if (tree && tree.type === 'root') {\n    const head = tree.children[0]\n    // @ts-expect-error Allow `doctypes` in there, we’ll filter them out later.\n    node =\n      tree.children.length === 1 && head.type === 'element'\n        ? head\n        : {\n            type: 'element',\n            tagName: 'div',\n            properties: {},\n            children: tree.children\n          }\n  } else if (tree && tree.type === 'element') {\n    node = tree\n  } else {\n    throw new Error(\n      'Expected root or element, not `' + ((tree && tree.type) || tree) + '`'\n    )\n  }\n\n  return transform(h, node, {\n    schema: options.space === 'svg' ? svg : html,\n    prefix:\n      prefix === undefined || prefix === null\n        ? r || v || vd\n          ? 'h-'\n          : undefined\n        : typeof prefix === 'string'\n        ? prefix\n        : prefix\n        ? 'h-'\n        : undefined,\n    key: 0,\n    react: r,\n    vue: v,\n    vdom: vd,\n    hyperscript: hyperscript(h)\n  })\n}\n\n/**\n * Transform a hast node through a hyperscript interface to *anything*!\n *\n * @template {CreateElementLike} H\n *   Type of hyperscript function.\n * @param {H} h\n *   HyperScript function.\n * @param {Element} node\n *   Node to transform.\n * @param {State} state\n *   Info passed around.\n * @returns {ReturnType<H>}\n *   Return type of the hyperscript function.\n */\nfunction transform(h, node, state) {\n  const parentSchema = state.schema\n  let schema = parentSchema\n  let name = node.tagName\n  /** @type {Record<string, unknown>} */\n  const attributes = {}\n  /** @type {Array<ReturnType<H>|string>} */\n  const nodes = []\n  let index = -1\n  /** @type {string} */\n  let key\n\n  if (parentSchema.space === 'html' && name.toLowerCase() === 'svg') {\n    schema = svg\n    state.schema = schema\n  }\n\n  for (key in node.properties) {\n    if (node.properties && own.call(node.properties, key)) {\n      addAttribute(attributes, key, node.properties[key], state, name)\n    }\n  }\n\n  if (state.vdom) {\n    if (schema.space === 'html') {\n      name = name.toUpperCase()\n    } else if (schema.space) {\n      attributes.namespace = webNamespaces[schema.space]\n    }\n  }\n\n  if (state.prefix) {\n    state.key++\n    attributes.key = state.prefix + state.key\n  }\n\n  if (node.children) {\n    while (++index < node.children.length) {\n      const value = node.children[index]\n\n      if (value.type === 'element') {\n        nodes.push(transform(h, value, state))\n      } else if (value.type === 'text') {\n        nodes.push(value.value)\n      }\n    }\n  }\n\n  // Restore parent schema.\n  state.schema = parentSchema\n\n  // Ensure no React warnings are triggered for void elements having children\n  // passed in.\n  return nodes.length > 0\n    ? h.call(node, name, attributes, nodes)\n    : h.call(node, name, attributes)\n}\n\n/**\n * Add an attribute to `props`.\n *\n * @param {Record<string, unknown>} props\n *   Map.\n * @param {string} prop\n *   Key.\n * @param {unknown} value\n *   Value.\n * @param {State} state\n *   Info passed around.\n * @param {string} name\n *   Element name.\n * @returns {void}\n *   Nothing.\n */\n// eslint-disable-next-line complexity, max-params\nfunction addAttribute(props, prop, value, state, name) {\n  const info = find(state.schema, prop)\n  /** @type {string | undefined} */\n  let subprop\n\n  // Ignore nullish and `NaN` values.\n  // Ignore `false` and falsey known booleans for hyperlike DSLs.\n  if (\n    value === undefined ||\n    value === null ||\n    (typeof value === 'number' && Number.isNaN(value)) ||\n    (value === false && (state.vue || state.vdom || state.hyperscript)) ||\n    (!value && info.boolean && (state.vue || state.vdom || state.hyperscript))\n  ) {\n    return\n  }\n\n  if (Array.isArray(value)) {\n    // Accept `array`.\n    // Most props are space-separated.\n    value = info.commaSeparated ? commas(value) : spaces(value)\n  }\n\n  // Treat `true` and truthy known booleans.\n  if (info.boolean && state.hyperscript) {\n    value = ''\n  }\n\n  // VDOM, Vue, and React accept `style` as object.\n  if (\n    info.property === 'style' &&\n    typeof value === 'string' &&\n    (state.react || state.vue || state.vdom)\n  ) {\n    value = parseStyle(value, name)\n  }\n\n  // Vue 3 (used in our tests) doesn’t need this anymore.\n  // Some major in the future we can drop Vue 2 support.\n  /* c8 ignore next 2 */\n  if (state.vue) {\n    if (info.property !== 'style') subprop = 'attrs'\n  } else if (!info.mustUseProperty) {\n    if (state.vdom) {\n      if (info.property !== 'style') subprop = 'attributes'\n    } else if (state.hyperscript) {\n      subprop = 'attrs'\n    }\n  }\n\n  if (subprop) {\n    props[subprop] = Object.assign(props[subprop] || {}, {\n      [info.attribute]: value\n    })\n  } else if (info.space && state.react) {\n    props[hastToReact[info.property] || info.property] = value\n  } else {\n    props[info.attribute] = value\n  }\n}\n\n/**\n * Check if `h` is `react.createElement`.\n *\n * @param {CreateElementLike} h\n *   HyperScript function.\n * @returns {boolean}\n *   Looks like React.\n */\nfunction react(h) {\n  const node = /** @type {unknown} */ (h('div', {}))\n  return Boolean(\n    node &&\n      // @ts-expect-error Looks like a React node.\n      ('_owner' in node || '_store' in node) &&\n      // @ts-expect-error Looks like a React node.\n      (node.key === undefined || node.key === null)\n  )\n}\n\n/**\n * Check if `h` is `hyperscript`.\n *\n * @param {CreateElementLike} h\n *   HyperScript function.\n * @returns {boolean}\n *   Looks like `hyperscript`.\n */\nfunction hyperscript(h) {\n  return 'context' in h && 'cleanup' in h\n}\n\n/**\n * Check if `h` is `virtual-dom/h`.\n *\n * @param {CreateElementLike} h\n *   HyperScript function.\n * @returns {boolean}\n *   Looks like `virtual-dom`\n */\nfunction vdom(h) {\n  const node = /** @type {unknown} */ (h('div', {}))\n  // @ts-expect-error Looks like a vnode.\n  return node.type === 'VirtualNode'\n}\n\n/**\n * Check if `h` is Vue.\n *\n * @param {CreateElementLike} h\n *   HyperScript function.\n * @returns {boolean}\n *   Looks like Vue.\n */\nfunction vue(h) {\n  // Vue 3 (used in our tests) doesn’t need this anymore.\n  // Some major in the future we can drop Vue 2 support.\n  /* c8 ignore next 3 */\n  const node = /** @type {unknown} */ (h('div', {}))\n  // @ts-expect-error Looks like a Vue node.\n  return Boolean(node && node.context && node.context._isVue)\n}\n\n/**\n * Parse a declaration into an object.\n *\n * @param {string} value\n *   CSS declarations.\n * @param {string} tagName\n *   Tag name.\n * @returns {Record<string, string>}\n *   Properties.\n */\nfunction parseStyle(value, tagName) {\n  /** @type {Record<string, string>} */\n  const result = {}\n\n  try {\n    styleToObject(value, (name, value) => {\n      if (name.slice(0, 4) === '-ms-') name = 'ms-' + name.slice(4)\n\n      result[\n        name.replace(\n          /-([a-z])/g,\n          /**\n           * @param {string} _\n           * @param {string} $1\n           * @returns {string}\n           */\n          (_, $1) => $1.toUpperCase()\n        )\n      ] = value\n    })\n  } catch (error_) {\n    const error = /** @type {Error} */ (error_)\n    error.message =\n      tagName + '[style]' + error.message.slice('undefined'.length)\n    throw error\n  }\n\n  return result\n}\n","'use strict'\n\nmodule.exports = convert\n\nfunction convert(test) {\n  if (typeof test === 'string') {\n    return typeFactory(test)\n  }\n\n  if (test === null || test === undefined) {\n    return ok\n  }\n\n  if (typeof test === 'object') {\n    return ('length' in test ? anyFactory : matchesFactory)(test)\n  }\n\n  if (typeof test === 'function') {\n    return test\n  }\n\n  throw new Error('Expected function, string, or object as test')\n}\n\nfunction convertAll(tests) {\n  var results = []\n  var length = tests.length\n  var index = -1\n\n  while (++index < length) {\n    results[index] = convert(tests[index])\n  }\n\n  return results\n}\n\n// Utility assert each property in `test` is represented in `node`, and each\n// values are strictly equal.\nfunction matchesFactory(test) {\n  return matches\n\n  function matches(node) {\n    var key\n\n    for (key in test) {\n      if (node[key] !== test[key]) {\n        return false\n      }\n    }\n\n    return true\n  }\n}\n\nfunction anyFactory(tests) {\n  var checks = convertAll(tests)\n  var length = checks.length\n\n  return matches\n\n  function matches() {\n    var index = -1\n\n    while (++index < length) {\n      if (checks[index].apply(this, arguments)) {\n        return true\n      }\n    }\n\n    return false\n  }\n}\n\n// Utility to convert a string into a function which checks a given node’s type\n// for said string.\nfunction typeFactory(test) {\n  return type\n\n  function type(node) {\n    return Boolean(node && node.type === test)\n  }\n}\n\n// Utility to return true.\nfunction ok() {\n  return true\n}\n","'use strict'\n\nmodule.exports = visitParents\n\nvar convert = require('unist-util-is/convert')\n\nvar CONTINUE = true\nvar SKIP = 'skip'\nvar EXIT = false\n\nvisitParents.CONTINUE = CONTINUE\nvisitParents.SKIP = SKIP\nvisitParents.EXIT = EXIT\n\nfunction visitParents(tree, test, visitor, reverse) {\n  var is\n\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    visitor = test\n    test = null\n  }\n\n  is = convert(test)\n\n  one(tree, null, [])\n\n  // Visit a single node.\n  function one(node, index, parents) {\n    var result = []\n    var subresult\n\n    if (!test || is(node, index, parents[parents.length - 1] || null)) {\n      result = toResult(visitor(node, parents))\n\n      if (result[0] === EXIT) {\n        return result\n      }\n    }\n\n    if (node.children && result[0] !== SKIP) {\n      subresult = toResult(all(node.children, parents.concat(node)))\n      return subresult[0] === EXIT ? subresult : result\n    }\n\n    return result\n  }\n\n  // Visit children in `parent`.\n  function all(children, parents) {\n    var min = -1\n    var step = reverse ? -1 : 1\n    var index = (reverse ? children.length : min) + step\n    var result\n\n    while (index > min && index < children.length) {\n      result = one(children[index], index, parents)\n\n      if (result[0] === EXIT) {\n        return result\n      }\n\n      index = typeof result[1] === 'number' ? result[1] : index + step\n    }\n  }\n}\n\nfunction toResult(value) {\n  if (value !== null && typeof value === 'object' && 'length' in value) {\n    return value\n  }\n\n  if (typeof value === 'number') {\n    return [CONTINUE, value]\n  }\n\n  return [value]\n}\n","'use strict'\n\nmodule.exports = visit\n\nvar visitParents = require('unist-util-visit-parents')\n\nvar CONTINUE = visitParents.CONTINUE\nvar SKIP = visitParents.SKIP\nvar EXIT = visitParents.EXIT\n\nvisit.CONTINUE = CONTINUE\nvisit.SKIP = SKIP\nvisit.EXIT = EXIT\n\nfunction visit(tree, test, visitor, reverse) {\n  if (typeof test === 'function' && typeof visitor !== 'function') {\n    reverse = visitor\n    visitor = test\n    test = null\n  }\n\n  visitParents(tree, test, overload, reverse)\n\n  function overload(node, parents) {\n    var parent = parents[parents.length - 1]\n    var index = parent ? parent.children.indexOf(node) : null\n    return visitor(node, index, parent)\n  }\n}\n","'use strict';\n\nvar visit = require('unist-util-visit');\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hastCssPropertyMap = {\n  align: 'text-align',\n  valign: 'vertical-align',\n  height: 'height',\n  width: 'width',\n};\n\nmodule.exports = function tableCellStyle(node) {\n  visit(node, 'element', visitor);\n  return node;\n};\n\nfunction visitor(node) {\n  if (node.tagName !== 'tr' && node.tagName !== 'td' && node.tagName !== 'th') {\n    return;\n  }\n\n  var hastName;\n  var cssName;\n  for (hastName in hastCssPropertyMap) {\n    if (\n      !hasOwnProperty.call(hastCssPropertyMap, hastName) ||\n      node.properties[hastName] === undefined\n    ) {\n      continue;\n    }\n    cssName = hastCssPropertyMap[hastName];\n    appendStyle(node, cssName, node.properties[hastName]);\n    delete node.properties[hastName];\n  }\n}\n\nfunction appendStyle(node, property, value) {\n  var prevStyle = (node.properties.style || '').trim();\n  if (prevStyle && !/;\\s*/.test(prevStyle)) {\n    prevStyle += ';';\n  }\n  if (prevStyle) {\n    prevStyle += ' ';\n  }\n  var nextStyle = prevStyle + property + ': ' + value + ';';\n  node.properties.style = nextStyle;\n}\n","/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {unknown} thing\n *   Thing to check (typically `Node` or `string`).\n * @returns {boolean}\n *   Whether the `value` is inter-element whitespace (`boolean`): consisting of\n *   zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n *   (`\\r`), or form feed (`\\f`).\n *   If a node is passed it must be a `Text` node, whose `value` field is\n *   checked.\n */\nexport function whitespace(thing) {\n  /** @type {string} */\n  const value =\n    // @ts-expect-error looks like a node.\n    thing && typeof thing === 'object' && thing.type === 'text'\n      ? // @ts-expect-error looks like a text.\n        thing.value || ''\n      : thing\n\n  // HTML whitespace expression.\n  // See <https://infra.spec.whatwg.org/#ascii-whitespace>.\n  return typeof value === 'string' && value.replace(/[ \\t\\n\\f\\r]/g, '') === ''\n}\n","/**\n * @typedef {import('hast').Root} Root\n * @typedef {import('react').ReactNode} ReactNode\n * @typedef {import('react').ReactElement<unknown>} ReactElement\n *\n * @callback CreateElementLike\n * @param {any} name\n * @param {any} props\n * @param {...ReactNode} children\n * @returns {ReactNode}\n *\n * @typedef SharedOptions\n *   Base configuration (without `components`).\n * @property {CreateElementLike} createElement\n *   How to create elements or components.\n *   You should typically pass `React.createElement`.\n * @property {((props: any) => ReactNode)|undefined} [Fragment]\n *   Create fragments instead of an outer `<div>` if available.\n *   You should typically pass `React.Fragment`.\n * @property {string|undefined} [prefix='h-']\n *   React key prefix.\n * @property {boolean|undefined} [fixTableCellAlign=true]\n *   Fix obsolete align attributes on table cells by turning them\n *   into inline styles.\n *   Keep it on when working with markdown, turn it off when working\n *   with markup for emails.\n *   The default is `true`.\n *\n * @typedef {SharedOptions & (import('./complex-types').ComponentsWithNodeOptions|import('./complex-types').ComponentsWithoutNodeOptions)} Options\n *   Configuration.\n */\n\nimport {toH} from 'hast-to-hyperscript'\n// @ts-expect-error: hush.\nimport tableCellStyle from '@mapbox/hast-util-table-cell-style'\nimport {whitespace} from 'hast-util-whitespace'\n\nconst own = {}.hasOwnProperty\nconst tableElements = new Set(['table', 'thead', 'tbody', 'tfoot', 'tr'])\n\n/**\n * Compile HTML to React nodes.\n *\n * > 👉 **Note**: this compiler returns a React node where compilers typically\n * > return `string`.\n * > When using `.stringify`, the result is such a React node.\n * > When using `.process` (or `.processSync`), the result is available at\n * > `file.result`.\n *\n * @this {import('unified').Processor}\n * @type {import('unified').Plugin<[Options], Root, ReactElement>}\n */\nexport default function rehypeReact(options) {\n  if (!options || typeof options.createElement !== 'function') {\n    throw new TypeError('createElement is not a function')\n  }\n\n  const createElement = options.createElement\n\n  const fixTableCellAlign = options.fixTableCellAlign !== false\n\n  Object.assign(this, {Compiler: compiler})\n\n  /** @type {import('unified').CompilerFunction<Root, ReactNode>} */\n  function compiler(node) {\n    /** @type {ReactNode} */\n    let result = toH(\n      // @ts-expect-error: assume `name` is a known element.\n      h,\n      fixTableCellAlign ? tableCellStyle(node) : node,\n      options.prefix\n    )\n\n    if (node.type === 'root') {\n      // Invert <https://github.com/syntax-tree/hast-to-hyperscript/blob/d227372/index.js#L46-L56>.\n      result =\n        result &&\n        typeof result === 'object' &&\n        'type' in result &&\n        'props' in result &&\n        result.type === 'div' &&\n        (node.children.length !== 1 || node.children[0].type !== 'element')\n          ? // `children` does exist.\n            // type-coverage:ignore-next-line\n            result.props.children\n          : [result]\n\n      return createElement(options.Fragment || 'div', {}, result)\n    }\n\n    return result\n  }\n\n  /**\n   * @param {keyof JSX.IntrinsicElements} name\n   * @param {Record<string, unknown>} props\n   * @param {Array<ReactNode>} [children]\n   * @returns {ReactNode}\n   */\n  function h(name, props, children) {\n    // Currently, a warning is triggered by react for *any* white space in\n    // tables.\n    // So we remove the pretty lines for now.\n    // See: <https://github.com/facebook/react/pull/7081>.\n    // See: <https://github.com/facebook/react/pull/7515>.\n    // See: <https://github.com/remarkjs/remark-react/issues/64>.\n    // See: <https://github.com/rehypejs/rehype-react/pull/29>.\n    // See: <https://github.com/rehypejs/rehype-react/pull/32>.\n    // See: <https://github.com/rehypejs/rehype-react/pull/45>.\n    if (children && tableElements.has(name)) {\n      children = children.filter((child) => !whitespace(child))\n    }\n\n    if (options.components && own.call(options.components, name)) {\n      const component = options.components[name]\n\n      if (options.passNode && typeof component === 'function') {\n        // @ts-expect-error: `toH` passes the current node.\n        // type-coverage:ignore-next-line\n        props = Object.assign({node: this}, props)\n      }\n\n      return createElement(component, props, children)\n    }\n\n    return createElement(name, props, children)\n  }\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Parents} Parents\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n *   Check that an arbitrary value is an element.\n * @param {unknown} this\n *   Context object (`this`) to call `test` with\n * @param {unknown} [element]\n *   Anything (typically a node).\n * @param {number | null | undefined} [index]\n *   Position of `element` in its parent.\n * @param {Parents | null | undefined} [parent]\n *   Parent of `element`.\n * @returns {boolean}\n *   Whether this is an element and passes a test.\n *\n * @typedef {Array<TestFunction | string> | TestFunction | string | null | undefined} Test\n *   Check for an arbitrary element.\n *\n *   * when `string`, checks that the element has that tag name\n *   * when `function`, see `TestFunction`\n *   * when `Array`, checks if one of the subtests pass\n *\n * @callback TestFunction\n *   Check if an element passes a test.\n * @param {unknown} this\n *   The given context.\n * @param {Element} element\n *   An element.\n * @param {number | undefined} [index]\n *   Position of `element` in its parent.\n * @param {Parents | undefined} [parent]\n *   Parent of `element`.\n * @returns {boolean | undefined | void}\n *   Whether this element passes the test.\n *\n *   Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `element` is an `Element` and whether it passes the given test.\n *\n * @param element\n *   Thing to check, typically `element`.\n * @param test\n *   Check for a specific element.\n * @param index\n *   Position of `element` in its parent.\n * @param parent\n *   Parent of `element`.\n * @param context\n *   Context object (`this`) to call `test` with.\n * @returns\n *   Whether `element` is an `Element` and passes a test.\n * @throws\n *   When an incorrect `test`, `index`, or `parent` is given; there is no error\n *   thrown when `element` is not a node or not an element.\n */\nexport const isElement =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends TestFunction>(element: unknown, test: Condition, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &\n   *   (<Condition extends string>(element: unknown, test: Condition, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &\n   *   ((element?: null | undefined) => false) &\n   *   ((element: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &\n   *   ((element: unknown, test?: Test, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => boolean)\n   * )}\n   */\n  (\n    /**\n     * @param {unknown} [element]\n     * @param {Test | undefined} [test]\n     * @param {number | null | undefined} [index]\n     * @param {Parents | null | undefined} [parent]\n     * @param {unknown} [context]\n     * @returns {boolean}\n     */\n    // eslint-disable-next-line max-params\n    function (element, test, index, parent, context) {\n      const check = convertElement(test)\n\n      if (\n        index !== null &&\n        index !== undefined &&\n        (typeof index !== 'number' ||\n          index < 0 ||\n          index === Number.POSITIVE_INFINITY)\n      ) {\n        throw new Error('Expected positive finite `index`')\n      }\n\n      if (\n        parent !== null &&\n        parent !== undefined &&\n        (!parent.type || !parent.children)\n      ) {\n        throw new Error('Expected valid `parent`')\n      }\n\n      if (\n        (index === null || index === undefined) !==\n        (parent === null || parent === undefined)\n      ) {\n        throw new Error('Expected both `index` and `parent`')\n      }\n\n      return looksLikeAnElement(element)\n        ? check.call(context, element, index, parent)\n        : false\n    }\n  )\n\n/**\n * Generate a check from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * an `element`, `index`, and `parent`.\n *\n * @param test\n *   A test for a specific element.\n * @returns\n *   A check.\n */\nexport const convertElement =\n  // Note: overloads in JSDoc can’t yet use different `@template`s.\n  /**\n   * @type {(\n   *   (<Condition extends TestFunction>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & Predicate<Condition, Element>) &\n   *   (<Condition extends string>(test: Condition) => (element: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element & {tagName: Condition}) &\n   *   ((test?: null | undefined) => (element?: unknown, index?: number | null | undefined, parent?: Parents | null | undefined, context?: unknown) => element is Element) &\n   *   ((test?: Test) => Check)\n   * )}\n   */\n  (\n    /**\n     * @param {Test | null | undefined} [test]\n     * @returns {Check}\n     */\n    function (test) {\n      if (test === null || test === undefined) {\n        return element\n      }\n\n      if (typeof test === 'string') {\n        return tagNameFactory(test)\n      }\n\n      // Assume array.\n      if (typeof test === 'object') {\n        return anyFactory(test)\n      }\n\n      if (typeof test === 'function') {\n        return castFactory(test)\n      }\n\n      throw new Error('Expected function, string, or array as `test`')\n    }\n  )\n\n/**\n * Handle multiple tests.\n *\n * @param {Array<TestFunction | string>} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n  /** @type {Array<Check>} */\n  const checks = []\n  let index = -1\n\n  while (++index < tests.length) {\n    checks[index] = convertElement(tests[index])\n  }\n\n  return castFactory(any)\n\n  /**\n   * @this {unknown}\n   * @type {TestFunction}\n   */\n  function any(...parameters) {\n    let index = -1\n\n    while (++index < checks.length) {\n      if (checks[index].apply(this, parameters)) return true\n    }\n\n    return false\n  }\n}\n\n/**\n * Turn a string into a test for an element with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction tagNameFactory(check) {\n  return castFactory(tagName)\n\n  /**\n   * @param {Element} element\n   * @returns {boolean}\n   */\n  function tagName(element) {\n    return element.tagName === check\n  }\n}\n\n/**\n * Turn a custom test into a test for an element that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n  return check\n\n  /**\n   * @this {unknown}\n   * @type {Check}\n   */\n  function check(value, index, parent) {\n    return Boolean(\n      looksLikeAnElement(value) &&\n        testFunction.call(\n          this,\n          value,\n          typeof index === 'number' ? index : undefined,\n          parent || undefined\n        )\n    )\n  }\n}\n\n/**\n * Make sure something is an element.\n *\n * @param {unknown} element\n * @returns {element is Element}\n */\nfunction element(element) {\n  return Boolean(\n    element &&\n      typeof element === 'object' &&\n      'type' in element &&\n      element.type === 'element' &&\n      'tagName' in element &&\n      typeof element.tagName === 'string'\n  )\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Element}\n */\nfunction looksLikeAnElement(value) {\n  return (\n    value !== null &&\n    typeof value === 'object' &&\n    'type' in value &&\n    'tagName' in value\n  )\n}\n","// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\n\n// Windows paths like `c:\\`\nconst WINDOWS_PATH_REGEX = /^[a-zA-Z]:\\\\/;\n\nexport default function isAbsoluteUrl(url) {\n\tif (typeof url !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof url}\\``);\n\t}\n\n\tif (WINDOWS_PATH_REGEX.test(url)) {\n\t\treturn false;\n\t}\n\n\treturn ABSOLUTE_URL_REGEX.test(url);\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast-util-is-element').Test} Test\n */\n\n/**\n * @callback CreateContent\n *   Create a target for the element.\n * @param {Element} element\n *   Element to check.\n * @returns {Array<ElementContent> | ElementContent | null | undefined}\n *   Content to add.\n *\n * @callback CreateProperties\n *   Create properties for an element.\n * @param {Element} element\n *   Element to check.\n * @returns {Properties | null | undefined}\n *   Properties to add.\n *\n * @callback CreateRel\n *   Create a `rel` for the element.\n * @param {Element} element\n *   Element to check.\n * @returns {Array<string> | string | null | undefined}\n *   `rel` to use.\n *\n * @callback CreateTarget\n *   Create a `target` for the element.\n * @param {Element} element\n *   Element to check.\n * @returns {Target | null | undefined}\n *   `target` to use.\n *\n * @typedef Options\n *   Configuration.\n * @property {Array<ElementContent> | CreateContent | ElementContent | null | undefined} [content]\n *   Content to insert at the end of external links (optional); will be\n *   inserted in a `<span>` element; useful for improving accessibility by\n *   giving users advanced warning when opening a new window.\n * @property {CreateProperties | Properties | null | undefined} [contentProperties]\n *   Properties to add to the `span` wrapping `content` (optional).\n * @property {CreateProperties | Properties | null | undefined} [properties]\n *   Properties to add to the link itself (optional).\n * @property {Array<string> | null | undefined} [protocols=['http', 'https']]\n *   Protocols to check, such as `mailto` or `tel` (default: `['http',\n *   'https']`).\n * @property {Array<string> | CreateRel | string | null | undefined} [rel=['nofollow']]\n *   Link types to hint about the referenced documents (default:\n *   `['nofollow']`); pass an empty array (`[]`) to not set `rel`s on links;\n *   when using a `target`, add `noopener` and `noreferrer` to avoid\n *   exploitation of the `window.opener` API.\n * @property {CreateTarget | Target | null | undefined} [target]\n *   How to display referenced documents; the default (nothing) is to not set\n *   `target`s on links.\n * @property {Test | null | undefined} [test]\n *   Extra test to define which external link elements are modified (optional);\n *   any test that can be given to `hast-util-is-element` is supported.\n *\n * @typedef {'_blank' | '_parent' | '_self' | '_top'} Target\n *   Target.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {convertElement} from 'hast-util-is-element'\nimport isAbsoluteUrl from 'is-absolute-url'\nimport {parse} from 'space-separated-tokens'\nimport {visit} from 'unist-util-visit'\n\nconst defaultProtocols = ['http', 'https']\nconst defaultRel = ['nofollow']\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Automatically add `rel` (and `target`?) to external links.\n *\n * ###### Notes\n *\n * You should [likely not configure `target`][css-tricks].\n *\n * You should at least set `rel` to `['nofollow']`.\n * When using a `target`, add `noopener` and `noreferrer` to avoid exploitation\n * of the `window.opener` API.\n *\n * When using a `target`, you should set `content` to adhere to accessibility\n * guidelines by giving users advanced warning when opening a new window.\n *\n * [css-tricks]: https://css-tricks.com/use-target_blank/\n *\n * @param {Readonly<Options> | null | undefined} [options]\n *   Configuration (optional).\n * @returns\n *   Transform.\n */\nexport default function rehypeExternalLinks(options) {\n  const settings = options || emptyOptions\n  const protocols = settings.protocols || defaultProtocols\n  const is = convertElement(settings.test)\n\n  /**\n   * Transform.\n   *\n   * @param {Root} tree\n   *   Tree.\n   * @returns {undefined}\n   *   Nothing.\n   */\n  return function (tree) {\n    visit(tree, 'element', function (node, index, parent) {\n      if (\n        node.tagName === 'a' &&\n        typeof node.properties.href === 'string' &&\n        is(node, index, parent)\n      ) {\n        const url = node.properties.href\n\n        if (\n          isAbsoluteUrl(url)\n            ? protocols.includes(url.slice(0, url.indexOf(':')))\n            : url.startsWith('//')\n        ) {\n          const contentRaw = createIfNeeded(settings.content, node)\n          const content =\n            contentRaw && !Array.isArray(contentRaw) ? [contentRaw] : contentRaw\n          const relRaw = createIfNeeded(settings.rel, node) || defaultRel\n          const rel = typeof relRaw === 'string' ? parse(relRaw) : relRaw\n          const target = createIfNeeded(settings.target, node)\n\n          const properties = createIfNeeded(settings.properties, node)\n\n          if (properties) {\n            Object.assign(node.properties, structuredClone(properties))\n          }\n\n          if (rel.length > 0) {\n            node.properties.rel = [...rel]\n          }\n\n          if (target) {\n            node.properties.target = target\n          }\n\n          if (content) {\n            const properties =\n              createIfNeeded(settings.contentProperties, node) || {}\n\n            node.children.push({\n              type: 'element',\n              tagName: 'span',\n              properties: structuredClone(properties),\n              children: structuredClone(content)\n            })\n          }\n        }\n      }\n    })\n  }\n}\n\n/**\n * Call a function to get a return value or use the value.\n *\n * @template T\n *   Type of value.\n * @param {T} value\n *   Value.\n * @param {Element} element\n *   Element.\n * @returns {T extends Function ? ReturnType<T> : T}\n *   Result.\n */\nfunction createIfNeeded(value, element) {\n  return typeof value === 'function' ? value(element) : value\n}\n","import '../assets/NcRichText-kDp48Nji.css';\nimport { N as g, L as k } from \"./referencePickerModal-02Pa52XN.mjs\";\nimport { U as p, p as _, r as v, g as b } from \"./autolink-oKM43mOC.mjs\";\nimport f from \"@nextcloud/axios\";\nimport { generateOcsUrl as h } from \"@nextcloud/router\";\n/* empty css                                                                     */\nimport { n as x } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport { N as y } from \"./NcCheckboxRadioSwitch-hel9-sAH.mjs\";\nimport { visit as w } from \"unist-util-visit\";\nimport { u as m } from \"unist-builder\";\nimport { G as R } from \"./GenRandomId-VodkdWbp.mjs\";\nimport { unified as N } from \"unified\";\nimport M from \"remark-parse\";\nimport $ from \"remark-gfm\";\nimport E from \"remark-breaks\";\nimport L from \"remark-rehype\";\nimport j from \"rehype-react\";\nimport O from \"rehype-external-links\";\nconst C = {\n  name: \"NcReferenceList\",\n  components: {\n    NcReferenceWidget: g\n  },\n  props: {\n    text: {\n      type: String,\n      default: \"\"\n    },\n    referenceData: {\n      type: Object,\n      default: null\n    },\n    limit: {\n      type: Number,\n      default: 1\n    },\n    displayFallback: {\n      type: Boolean,\n      default: !1\n    },\n    interactive: {\n      type: Boolean,\n      default: !1\n    }\n  },\n  data() {\n    return {\n      references: null,\n      loading: !0\n    };\n  },\n  computed: {\n    isVisible() {\n      return this.loading || this.displayedReferences.length !== 0;\n    },\n    values() {\n      return this.referenceData ? this.referenceData : this.displayFallback && !this.loading && !this.references ? [this.fallbackReference] : this.references ? Object.values(this.references) : [];\n    },\n    firstReference() {\n      return this.values[0] ?? null;\n    },\n    displayedReferences() {\n      return this.values.slice(0, this.limit).map((e) => ({\n        ...e,\n        interactive: this.interactive\n      }));\n    },\n    fallbackReference() {\n      return {\n        accessible: !0,\n        openGraphObject: {\n          id: this.text,\n          link: this.text,\n          name: this.text\n        },\n        richObjectType: \"open-graph\"\n      };\n    }\n  },\n  watch: {\n    text: \"fetch\"\n  },\n  mounted() {\n    this.fetch();\n  },\n  methods: {\n    fetch() {\n      if (this.loading = !0, this.referenceData) {\n        this.loading = !1;\n        return;\n      }\n      if (!new RegExp(p).exec(this.text)) {\n        this.loading = !1;\n        return;\n      }\n      this.resolve().then((e) => {\n        this.references = e.data.ocs.data.references, this.loading = !1, this.$emit(\"loaded\");\n      }).catch((e) => {\n        console.error(\"Failed to extract references\", e), this.loading = !1, this.$emit(\"loaded\");\n      });\n    },\n    resolve() {\n      const e = new RegExp(p).exec(this.text.trim());\n      return this.limit === 1 && e ? f.get(h(\"references/resolve\", 2) + `?reference=${encodeURIComponent(e[0])}`) : f.post(h(\"references/extract\", 2), {\n        text: this.text,\n        resolve: !0,\n        limit: this.limit\n      });\n    }\n  }\n};\nvar A = function() {\n  var i = this, r = i._self._c;\n  return i.isVisible ? r(\"div\", { staticClass: \"widgets--list\", class: { \"icon-loading\": i.loading } }, i._l(i.displayedReferences, function(t) {\n    return r(\"div\", { key: t?.openGraphObject?.id }, [r(\"NcReferenceWidget\", { attrs: { reference: t } })], 1);\n  }), 0) : i._e();\n}, B = [], D = /* @__PURE__ */ x(\n  C,\n  A,\n  B,\n  !1,\n  null,\n  \"ad47d8e3\",\n  null,\n  null\n);\nconst u = D.exports, T = function() {\n  return function(e) {\n    w(e, (r) => r.type === \"text\", i);\n    function i(r, t, s) {\n      const a = r.value.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map((n, l, o) => {\n        const c = n.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n        if (!c)\n          return m(\"text\", n);\n        const [, d] = c;\n        return m(\"element\", {\n          tagName: `#${d}`\n        });\n      });\n      s.children.splice(t, 1, ...a);\n    }\n  };\n}, z = ({ h: e, context: i }, r) => (i.autolink && (r = _(r)), Array.isArray(r) ? r.map((t) => {\n  if (typeof t == \"string\")\n    return t;\n  const { component: s, props: a } = t, n = s.name === \"NcLink\" ? void 0 : \"rich-text--component\";\n  return e(s, {\n    props: a,\n    class: n\n  });\n}) : r), F = {\n  name: \"NcRichText\",\n  components: {\n    NcReferenceList: u\n  },\n  props: {\n    text: {\n      type: String,\n      default: \"\"\n    },\n    arguments: {\n      type: Object,\n      default: () => ({})\n    },\n    referenceLimit: {\n      type: Number,\n      default: 0\n    },\n    /** Provide data upfront to avoid extra http request */\n    references: {\n      type: Object,\n      default: null\n    },\n    markdownCssClasses: {\n      type: Object,\n      default: () => ({\n        a: \"rich-text--external-link\",\n        ol: \"rich-text--ordered-list\",\n        ul: \"rich-text--un-ordered-list\",\n        li: \"rich-text--list-item\",\n        strong: \"rich-text--strong\",\n        em: \"rich-text--italic\",\n        h1: \"rich-text--heading rich-text--heading-1\",\n        h2: \"rich-text--heading rich-text--heading-2\",\n        h3: \"rich-text--heading rich-text--heading-3\",\n        h4: \"rich-text--heading rich-text--heading-4\",\n        h5: \"rich-text--heading rich-text--heading-5\",\n        h6: \"rich-text--heading rich-text--heading-6\",\n        hr: \"rich-text--hr\",\n        table: \"rich-text--table\",\n        pre: \"rich-text--pre\",\n        code: \"rich-text--code\",\n        blockquote: \"rich-text--blockquote\"\n      })\n    },\n    useMarkdown: {\n      type: Boolean,\n      default: !1\n    },\n    /** Provide GitHub Flavored Markdown syntax */\n    useExtendedMarkdown: {\n      type: Boolean,\n      default: !1\n    },\n    /** Provide event from rendered markdown inputs */\n    interactive: {\n      type: Boolean,\n      default: !1\n    },\n    autolink: {\n      type: Boolean,\n      default: !0\n    }\n  },\n  emits: [\"interact:todo\"],\n  methods: {\n    renderPlaintext(e) {\n      const i = this, r = this.text.split(/(\\{[a-z\\-_.0-9]+\\})/ig).map(function(t, s, a) {\n        const n = t.match(/^\\{([a-z\\-_.0-9]+)\\}$/i);\n        if (!n)\n          return z({ h: e, context: i }, t);\n        const l = n[1], o = i.arguments[l];\n        if (typeof o == \"object\") {\n          const { component: c, props: d } = o;\n          return e(c, {\n            props: d,\n            class: \"rich-text--component\"\n          });\n        }\n        return o ? e(\"span\", { class: \"rich-text--fallback\" }, o) : t;\n      });\n      return e(\"div\", { class: \"rich-text--wrapper\" }, [\n        e(\"div\", {}, r.flat()),\n        this.referenceLimit > 0 ? e(\"div\", { class: \"rich-text--reference-widget\" }, [\n          e(u, { props: { text: this.text, referenceData: this.references } })\n        ]) : null\n      ]);\n    },\n    renderMarkdown(e) {\n      const i = N().use(M).use(v, {\n        autolink: this.autolink,\n        useMarkdown: this.useMarkdown,\n        useExtendedMarkdown: this.useExtendedMarkdown\n      }).use(this.useExtendedMarkdown ? $ : void 0).use(E).use(L, {\n        handlers: {\n          component(r, t) {\n            return r(t, t.component, { value: t.value });\n          }\n        }\n      }).use(T).use(O, {\n        target: \"_blank\",\n        rel: [\"noopener noreferrer\"]\n      }).use(j, {\n        createElement: (r, t, s) => {\n          if (s = s?.map(\n            (n) => typeof n == \"string\" ? n.replace(/&lt;/gmi, \"<\") : n\n          ), !r.startsWith(\"#\")) {\n            if (this.useExtendedMarkdown && r === \"li\" && Array.isArray(s) && s[0].tag === \"input\" && s[0].data.attrs.type === \"checkbox\") {\n              const [n, , l] = s, o = \"markdown-input-\" + R(5), c = e(y, {\n                attrs: {\n                  ...n.data.attrs,\n                  id: o,\n                  disabled: !this.interactive\n                },\n                on: {\n                  \"update:checked\": (d) => {\n                    this.$emit(\"interact:todo\", { id: o, label: l, value: d });\n                  }\n                }\n              }, [l]);\n              return e(r, t, [c]);\n            }\n            if (r === \"a\") {\n              const n = b(this.$router, t.attrs.href);\n              if (n)\n                return delete t.attrs.href, delete t.attrs.target, e(k, {\n                  ...t,\n                  props: {\n                    to: n\n                  }\n                }, s);\n            }\n            return e(r, t, s);\n          }\n          const a = this.arguments[r.slice(1)];\n          return a ? a.component ? e(\n            a.component,\n            {\n              attrs: t,\n              props: a.props,\n              class: \"rich-text--component\"\n            },\n            s\n          ) : e(\"span\", t, [a]) : e(\"span\", { attrs: t, class: \"rich-text--fallback\" }, [`{${r.slice(1)}}`]);\n        },\n        prefix: !1\n      }).processSync(\n        this.text.replace(/</gmi, \"&lt;\").replace(/&gt;/gmi, \">\")\n      ).result;\n      return e(\"div\", { class: \"rich-text--wrapper rich-text--wrapper-markdown\" }, [\n        i,\n        this.referenceLimit > 0 ? e(\"div\", { class: \"rich-text--reference-widget\" }, [\n          e(u, { props: { text: this.text, referenceData: this.references } })\n        ]) : null\n      ]);\n    }\n  },\n  render(e) {\n    return this.useMarkdown || this.useExtendedMarkdown ? this.renderMarkdown(e) : this.renderPlaintext(e);\n  }\n}, G = null, P = null;\nvar U = /* @__PURE__ */ x(\n  F,\n  G,\n  P,\n  !1,\n  null,\n  \"0f33c076\",\n  null,\n  null\n);\nconst se = U.exports;\nexport {\n  se as N,\n  u as a\n};\n","import '../assets/NcUserBubble-jjzI5imn.css';\nimport { n as s } from \"./_plugin-vue2_normalizer-u6G_3nkj.mjs\";\nimport { N as n } from \"./NcAvatar-MHywJkM4.mjs\";\nimport { N as i } from \"./NcPopover-93ns_0K4.mjs\";\nimport o from \"vue\";\nconst l = {\n  name: \"NcUserBubbleDiv\"\n};\nvar u = function() {\n  var e = this, r = e._self._c;\n  return r(\"div\", [e._t(\"trigger\")], 2);\n}, p = [], c = /* @__PURE__ */ s(\n  l,\n  u,\n  p,\n  !1,\n  null,\n  null,\n  null,\n  null\n);\nconst m = c.exports, d = {\n  name: \"NcUserBubble\",\n  components: {\n    NcAvatar: n,\n    NcPopover: i,\n    NcUserBubbleDiv: m\n  },\n  props: {\n    /**\n     * Override generated avatar, can be an url or an icon class\n     */\n    avatarImage: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Provide the user id if this is a user\n     */\n    user: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Displayed label\n     */\n    displayName: {\n      type: String,\n      default: void 0\n    },\n    /**\n     * Whether or not to display the user-status\n     */\n    showUserStatus: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Define the whole bubble as a link\n     */\n    url: {\n      type: String,\n      default: void 0,\n      validator: (t) => {\n        try {\n          return t = new URL(t, t?.startsWith?.(\"/\") ? window.location.href : void 0), !0;\n        } catch {\n          return !1;\n        }\n      }\n    },\n    /**\n     * Default popover state. Requires the UserBubble\n     * to have some content to render inside the popover\n     */\n    open: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * Use the primary colour\n     */\n    primary: {\n      type: Boolean,\n      default: !1\n    },\n    /**\n     * This is the height of the component\n     */\n    size: {\n      type: Number,\n      default: 20\n    },\n    /**\n     * This is the margin of the avatar (size - margin = avatar size)\n     */\n    margin: {\n      type: Number,\n      default: 2\n    }\n  },\n  emits: [\n    \"click\",\n    \"update:open\"\n  ],\n  computed: {\n    /**\n     * If userbubble is empty, let's NOT\n     * use the Popover component\n     * We need a component instead of a simple div here,\n     * because otherwise the trigger template will not be shown.\n     *\n     * @return {string} 'Popover' or 'UserBubbleDiv'\n     */\n    isPopoverComponent() {\n      return this.popoverEmpty ? \"NcUserBubbleDiv\" : \"NcPopover\";\n    },\n    /**\n     * Is the provided avatar url valid or not\n     *\n     * @return {boolean}\n     */\n    isAvatarUrl() {\n      if (!this.avatarImage)\n        return !1;\n      try {\n        return !!new URL(this.avatarImage);\n      } catch {\n        return !1;\n      }\n    },\n    /**\n     * Do we have a custom avatar or not\n     *\n     * @return {boolean}\n     */\n    isCustomAvatar() {\n      return !!this.avatarImage;\n    },\n    hasUrl() {\n      return this.url && this.url.trim() !== \"\";\n    },\n    isLinkComponent() {\n      return this.hasUrl ? \"a\" : \"div\";\n    },\n    popoverEmpty() {\n      return !(\"default\" in this.$slots);\n    },\n    styles() {\n      return {\n        content: {\n          height: this.size + \"px\",\n          lineHeight: this.size + \"px\",\n          borderRadius: this.size / 2 + \"px\"\n        },\n        avatar: {\n          marginLeft: this.margin + \"px\"\n        }\n      };\n    }\n  },\n  mounted() {\n    !this.displayName && !this.user && o.util.warn(\"[NcUserBubble] At least `displayName` or `user` property should be set.\");\n  },\n  methods: {\n    onOpenChange(t) {\n      this.$emit(\"update:open\", t);\n    },\n    /**\n     * Catch and forward click event to parent\n     *\n     * @param {Event} event the click event\n     */\n    onClick(t) {\n      this.$emit(\"click\", t);\n    }\n  }\n};\nvar f = function() {\n  var e = this, r = e._self._c;\n  return r(e.isPopoverComponent, { tag: \"component\", staticClass: \"user-bubble__wrapper\", attrs: { trigger: \"hover focus\", shown: e.open }, on: { \"update:open\": e.onOpenChange }, scopedSlots: e._u([{ key: \"trigger\", fn: function({ attrs: a }) {\n    return [r(e.isLinkComponent, e._b({ tag: \"component\", staticClass: \"user-bubble__content\", class: { \"user-bubble__content--primary\": e.primary }, style: e.styles.content, attrs: { href: e.hasUrl ? e.url : null }, on: { click: e.onClick } }, \"component\", a, !1), [r(\"NcAvatar\", { staticClass: \"user-bubble__avatar\", style: e.styles.avatar, attrs: { url: e.isCustomAvatar && e.isAvatarUrl ? e.avatarImage : void 0, \"icon-class\": e.isCustomAvatar && !e.isAvatarUrl ? e.avatarImage : void 0, user: e.user, \"display-name\": e.displayName, size: e.size - e.margin * 2, \"disable-tooltip\": !0, \"disable-menu\": !0, \"show-user-status\": e.showUserStatus } }), r(\"span\", { staticClass: \"user-bubble__name\" }, [e._v(\" \" + e._s(e.displayName || e.user) + \" \")]), e.$slots.name ? r(\"span\", { staticClass: \"user-bubble__secondary\" }, [e._t(\"name\")], 2) : e._e()], 1)];\n  } }], null, !0) }, [e._t(\"default\")], 2);\n}, _ = [], v = /* @__PURE__ */ s(\n  d,\n  f,\n  _,\n  !1,\n  null,\n  \"8f0fbaf1\",\n  null,\n  null\n);\nconst N = v.exports;\nexport {\n  N\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n  // We can't use this feature detection in V8 since it causes\n  // deoptimization and serious performance degradation\n  // https://github.com/zloirock/core-js/issues/677\n  return V8_VERSION >= 51 || !fails(function () {\n    var array = [];\n    var constructor = array.constructor = {};\n    constructor[SPECIES] = function () {\n      return { foo: 1 };\n    };\n    return array[METHOD_NAME](Boolean).foo !== 1;\n  });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  map: function map(callbackfn /* , thisArg */) {\n    return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n  var that = anObject(this);\n  var result = '';\n  if (that.hasIndices) result += 'd';\n  if (that.global) result += 'g';\n  if (that.ignoreCase) result += 'i';\n  if (that.multiline) result += 'm';\n  if (that.dotAll) result += 's';\n  if (that.unicode) result += 'u';\n  if (that.unicodeSets) result += 'v';\n  if (that.sticky) result += 'y';\n  return result;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n  var re = $RegExp('a', 'y');\n  re.lastIndex = 2;\n  return re.exec('abcd') !== null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n  return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n  var re = $RegExp('^r', 'gy');\n  re.lastIndex = 2;\n  return re.exec('str') !== null;\n});\n\nmodule.exports = {\n  BROKEN_CARET: BROKEN_CARET,\n  MISSED_STICKY: MISSED_STICKY,\n  UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('.', 's');\n  return !(re.dotAll && re.test('\\n') && re.flags === 's');\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n  var re = $RegExp('(?<a>b)', 'g');\n  return re.exec('b').groups.a !== 'b' ||\n    'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n  var re1 = /a/;\n  var re2 = /b*/g;\n  call(nativeExec, re1, 'a');\n  call(nativeExec, re2, 'a');\n  return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n  patchedExec = function exec(string) {\n    var re = this;\n    var state = getInternalState(re);\n    var str = toString(string);\n    var raw = state.raw;\n    var result, reCopy, lastIndex, match, i, object, group;\n\n    if (raw) {\n      raw.lastIndex = re.lastIndex;\n      result = call(patchedExec, raw, str);\n      re.lastIndex = raw.lastIndex;\n      return result;\n    }\n\n    var groups = state.groups;\n    var sticky = UNSUPPORTED_Y && re.sticky;\n    var flags = call(regexpFlags, re);\n    var source = re.source;\n    var charsAdded = 0;\n    var strCopy = str;\n\n    if (sticky) {\n      flags = replace(flags, 'y', '');\n      if (indexOf(flags, 'g') === -1) {\n        flags += 'g';\n      }\n\n      strCopy = stringSlice(str, re.lastIndex);\n      // Support anchored sticky behavior.\n      if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n        source = '(?: ' + source + ')';\n        strCopy = ' ' + strCopy;\n        charsAdded++;\n      }\n      // ^(? + rx + ) is needed, in combination with some str slicing, to\n      // simulate the 'y' flag.\n      reCopy = new RegExp('^(?:' + source + ')', flags);\n    }\n\n    if (NPCG_INCLUDED) {\n      reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n    }\n    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n    match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n    if (sticky) {\n      if (match) {\n        match.input = stringSlice(match.input, charsAdded);\n        match[0] = stringSlice(match[0], charsAdded);\n        match.index = re.lastIndex;\n        re.lastIndex += match[0].length;\n      } else re.lastIndex = 0;\n    } else if (UPDATES_LAST_INDEX_WRONG && match) {\n      re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n    }\n    if (NPCG_INCLUDED && match && match.length > 1) {\n      // Fix browsers whose `exec` methods don't consistently return `undefined`\n      // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\n      call(nativeReplace, match[0], reCopy, function () {\n        for (i = 1; i < arguments.length - 2; i++) {\n          if (arguments[i] === undefined) match[i] = undefined;\n        }\n      });\n    }\n\n    if (match && groups) {\n      match.groups = object = create(null);\n      for (i = 0; i < groups.length; i++) {\n        group = groups[i];\n        object[group[0]] = match[group[1]];\n      }\n    }\n\n    return match;\n  };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n  exec: exec\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n  var SYMBOL = wellKnownSymbol(KEY);\n\n  var DELEGATES_TO_SYMBOL = !fails(function () {\n    // String methods call symbol-named RegEp methods\n    var O = {};\n    O[SYMBOL] = function () { return 7; };\n    return ''[KEY](O) !== 7;\n  });\n\n  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n    // Symbol-named RegExp methods call .exec\n    var execCalled = false;\n    var re = /a/;\n\n    if (KEY === 'split') {\n      // We can't use real regex here since it causes deoptimization\n      // and serious performance degradation in V8\n      // https://github.com/zloirock/core-js/issues/306\n      re = {};\n      // RegExp[@@split] doesn't call the regex's exec method, but first creates\n      // a new one. We need to return the patched regex when creating the new one.\n      re.constructor = {};\n      re.constructor[SPECIES] = function () { return re; };\n      re.flags = '';\n      re[SYMBOL] = /./[SYMBOL];\n    }\n\n    re.exec = function () {\n      execCalled = true;\n      return null;\n    };\n\n    re[SYMBOL]('');\n    return !execCalled;\n  });\n\n  if (\n    !DELEGATES_TO_SYMBOL ||\n    !DELEGATES_TO_EXEC ||\n    FORCED\n  ) {\n    var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n    var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n      var uncurriedNativeMethod = uncurryThis(nativeMethod);\n      var $exec = regexp.exec;\n      if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n        if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n          // The native String method already delegates to @@method (this\n          // polyfilled function), leasing to infinite recursion.\n          // We avoid it by directly calling the native @@method method.\n          return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n        }\n        return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n      }\n      return { done: false };\n    });\n\n    defineBuiltIn(String.prototype, KEY, methods[0]);\n    defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\n  }\n\n  if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n  var isRegExp;\n  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n  if (isConstructor(argument)) return argument;\n  throw new $TypeError(tryToString(argument) + ' is not a constructor');\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n  var C = anObject(O).constructor;\n  var S;\n  return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n  return index + (unicode ? charAt(S, index).length : 1);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar $TypeError = TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n  var exec = R.exec;\n  if (isCallable(exec)) {\n    var result = call(exec, R, S);\n    if (result !== null) anObject(result);\n    return result;\n  }\n  if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n  throw new $TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar isRegExp = require('../internals/is-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n  // eslint-disable-next-line regexp/no-empty-group -- required for testing\n  var re = /(?:)/;\n  var originalExec = re.exec;\n  re.exec = function () { return originalExec.apply(this, arguments); };\n  var result = 'ab'.split(re);\n  return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n  var internalSplit;\n  if (\n    'abbc'.split(/(b)*/)[1] === 'c' ||\n    // eslint-disable-next-line regexp/no-empty-group -- required for testing\n    'test'.split(/(?:)/, -1).length !== 4 ||\n    'ab'.split(/(?:ab)*/).length !== 2 ||\n    '.'.split(/(.?)(.?)/).length !== 4 ||\n    // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n    '.'.split(/()()/).length > 1 ||\n    ''.split(/.?/).length\n  ) {\n    // based on es5-shim implementation, need to rework it\n    internalSplit = function (separator, limit) {\n      var string = toString(requireObjectCoercible(this));\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (separator === undefined) return [string];\n      // If `separator` is not a regex, use native split\n      if (!isRegExp(separator)) {\n        return call(nativeSplit, string, separator, lim);\n      }\n      var output = [];\n      var flags = (separator.ignoreCase ? 'i' : '') +\n                  (separator.multiline ? 'm' : '') +\n                  (separator.unicode ? 'u' : '') +\n                  (separator.sticky ? 'y' : '');\n      var lastLastIndex = 0;\n      // Make `global` and avoid `lastIndex` issues by working with a copy\n      var separatorCopy = new RegExp(separator.source, flags + 'g');\n      var match, lastIndex, lastLength;\n      while (match = call(regexpExec, separatorCopy, string)) {\n        lastIndex = separatorCopy.lastIndex;\n        if (lastIndex > lastLastIndex) {\n          push(output, stringSlice(string, lastLastIndex, match.index));\n          if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n          lastLength = match[0].length;\n          lastLastIndex = lastIndex;\n          if (output.length >= lim) break;\n        }\n        if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n      }\n      if (lastLastIndex === string.length) {\n        if (lastLength || !exec(separatorCopy, '')) push(output, '');\n      } else push(output, stringSlice(string, lastLastIndex));\n      return output.length > lim ? arraySlice(output, 0, lim) : output;\n    };\n  // Chakra, V8\n  } else if ('0'.split(undefined, 0).length) {\n    internalSplit = function (separator, limit) {\n      return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n    };\n  } else internalSplit = nativeSplit;\n\n  return [\n    // `String.prototype.split` method\n    // https://tc39.es/ecma262/#sec-string.prototype.split\n    function split(separator, limit) {\n      var O = requireObjectCoercible(this);\n      var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT);\n      return splitter\n        ? call(splitter, separator, O, limit)\n        : call(internalSplit, toString(O), separator, limit);\n    },\n    // `RegExp.prototype[@@split]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n    //\n    // NOTE: This cannot be properly polyfilled in engines that don't support\n    // the 'y' flag.\n    function (string, limit) {\n      var rx = anObject(this);\n      var S = toString(string);\n      var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n      if (res.done) return res.value;\n\n      var C = speciesConstructor(rx, RegExp);\n\n      var unicodeMatching = rx.unicode;\n      var flags = (rx.ignoreCase ? 'i' : '') +\n                  (rx.multiline ? 'm' : '') +\n                  (rx.unicode ? 'u' : '') +\n                  (UNSUPPORTED_Y ? 'g' : 'y');\n\n      // ^(? + rx + ) is needed, in combination with some S slicing, to\n      // simulate the 'y' flag.\n      var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n      if (lim === 0) return [];\n      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n      var p = 0;\n      var q = 0;\n      var A = [];\n      while (q < S.length) {\n        splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n        var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n        var e;\n        if (\n          z === null ||\n          (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n        ) {\n          q = advanceStringIndex(S, q, unicodeMatching);\n        } else {\n          push(A, stringSlice(S, p, q));\n          if (A.length === lim) return A;\n          for (var i = 1; i <= z.length - 1; i++) {\n            push(A, z[i]);\n            if (A.length === lim) return A;\n          }\n          q = p = e;\n        }\n      }\n      push(A, stringSlice(S, p));\n      return A;\n    }\n  ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n  var tailPos = position + matched.length;\n  var m = captures.length;\n  var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n  if (namedCaptures !== undefined) {\n    namedCaptures = toObject(namedCaptures);\n    symbols = SUBSTITUTION_SYMBOLS;\n  }\n  return replace(replacement, symbols, function (match, ch) {\n    var capture;\n    switch (charAt(ch, 0)) {\n      case '$': return '$';\n      case '&': return matched;\n      case '`': return stringSlice(str, 0, position);\n      case \"'\": return stringSlice(str, tailPos);\n      case '<':\n        capture = namedCaptures[stringSlice(ch, 1, -1)];\n        break;\n      default: // \\d\\d?\n        var n = +ch;\n        if (n === 0) return match;\n        if (n > m) {\n          var f = floor(n / 10);\n          if (f === 0) return match;\n          if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n          return match;\n        }\n        capture = captures[n - 1];\n    }\n    return capture === undefined ? '' : capture;\n  });\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n  return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n  // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n  return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n  if (/./[REPLACE]) {\n    return /./[REPLACE]('a', '$0') === '';\n  }\n  return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n  var re = /./;\n  re.exec = function () {\n    var result = [];\n    result.groups = { a: '7' };\n    return result;\n  };\n  // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n  return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n  var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n  return [\n    // `String.prototype.replace` method\n    // https://tc39.es/ecma262/#sec-string.prototype.replace\n    function replace(searchValue, replaceValue) {\n      var O = requireObjectCoercible(this);\n      var replacer = isNullOrUndefined(searchValue) ? undefined : getMethod(searchValue, REPLACE);\n      return replacer\n        ? call(replacer, searchValue, O, replaceValue)\n        : call(nativeReplace, toString(O), searchValue, replaceValue);\n    },\n    // `RegExp.prototype[@@replace]` method\n    // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n    function (string, replaceValue) {\n      var rx = anObject(this);\n      var S = toString(string);\n\n      if (\n        typeof replaceValue == 'string' &&\n        stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n        stringIndexOf(replaceValue, '$<') === -1\n      ) {\n        var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n        if (res.done) return res.value;\n      }\n\n      var functionalReplace = isCallable(replaceValue);\n      if (!functionalReplace) replaceValue = toString(replaceValue);\n\n      var global = rx.global;\n      var fullUnicode;\n      if (global) {\n        fullUnicode = rx.unicode;\n        rx.lastIndex = 0;\n      }\n\n      var results = [];\n      var result;\n      while (true) {\n        result = regExpExec(rx, S);\n        if (result === null) break;\n\n        push(results, result);\n        if (!global) break;\n\n        var matchStr = toString(result[0]);\n        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n      }\n\n      var accumulatedResult = '';\n      var nextSourcePosition = 0;\n      for (var i = 0; i < results.length; i++) {\n        result = results[i];\n\n        var matched = toString(result[0]);\n        var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n        var captures = [];\n        var replacement;\n        // NOTE: This is equivalent to\n        //   captures = result.slice(1).map(maybeToString)\n        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n        // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n        for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n        var namedCaptures = result.groups;\n        if (functionalReplace) {\n          var replacerArgs = concat([matched], captures, position, S);\n          if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n          replacement = toString(apply(replaceValue, undefined, replacerArgs));\n        } else {\n          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n        }\n        if (position >= nextSourcePosition) {\n          accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n          nextSourcePosition = position + matched.length;\n        }\n      }\n\n      return accumulatedResult + stringSlice(S, nextSourcePosition);\n    }\n  ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n  filter: function filter(callbackfn /* , thisArg */) {\n    return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar $TypeError = TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n  return function (that, callbackfn, argumentsLength, memo) {\n    aCallable(callbackfn);\n    var O = toObject(that);\n    var self = IndexedObject(O);\n    var length = lengthOfArrayLike(O);\n    var index = IS_RIGHT ? length - 1 : 0;\n    var i = IS_RIGHT ? -1 : 1;\n    if (argumentsLength < 2) while (true) {\n      if (index in self) {\n        memo = self[index];\n        index += i;\n        break;\n      }\n      index += i;\n      if (IS_RIGHT ? index < 0 : length <= index) {\n        throw new $TypeError('Reduce of empty array with no initial value');\n      }\n    }\n    for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n      memo = callbackfn(memo, self[index], index, O);\n    }\n    return memo;\n  };\n};\n\nmodule.exports = {\n  // `Array.prototype.reduce` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduce\n  left: createMethod(false),\n  // `Array.prototype.reduceRight` method\n  // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n  right: createMethod(true)\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n  var method = [][METHOD_NAME];\n  return !!method && fails(function () {\n    // eslint-disable-next-line no-useless-call -- required for testing\n    method.call(null, argument || function () { return 1; }, 1);\n  });\n};\n","'use strict';\nvar global = require('../internals/global');\nvar classof = require('../internals/classof-raw');\n\nmodule.exports = classof(global.process) === 'process';\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\nvar FORCED = CHROME_BUG || !arrayMethodIsStrict('reduce');\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: FORCED }, {\n  reduce: function reduce(callbackfn /* , initialValue */) {\n    var length = arguments.length;\n    return $reduce(this, callbackfn, length, length > 1 ? arguments[1] : undefined);\n  }\n});\n","'use strict';\nvar $TypeError = TypeError;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\n\nmodule.exports = function (it) {\n  if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\n  return it;\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar doesNotExceedSafeInteger = require('../internals/does-not-exceed-safe-integer');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n  var array = [];\n  array[IS_CONCAT_SPREADABLE] = false;\n  return array.concat()[0] !== array;\n});\n\nvar isConcatSpreadable = function (O) {\n  if (!isObject(O)) return false;\n  var spreadable = O[IS_CONCAT_SPREADABLE];\n  return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport('concat');\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\n  // eslint-disable-next-line no-unused-vars -- required for `.length`\n  concat: function concat(arg) {\n    var O = toObject(this);\n    var A = arraySpeciesCreate(O, 0);\n    var n = 0;\n    var i, k, length, len, E;\n    for (i = -1, length = arguments.length; i < length; i++) {\n      E = i === -1 ? O : arguments[i];\n      if (isConcatSpreadable(E)) {\n        len = lengthOfArrayLike(E);\n        doesNotExceedSafeInteger(n + len);\n        for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n      } else {\n        doesNotExceedSafeInteger(n + 1);\n        createProperty(A, n++, E);\n      }\n    }\n    A.length = n;\n    return A;\n  }\n});\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.encodePath = encodePath;\nexports.basename = basename;\nexports.dirname = dirname;\nexports.joinPaths = joinPaths;\nexports.isSamePath = isSamePath;\n\nrequire(\"core-js/modules/es.array.map.js\");\n\nrequire(\"core-js/modules/es.regexp.exec.js\");\n\nrequire(\"core-js/modules/es.string.split.js\");\n\nrequire(\"core-js/modules/es.string.replace.js\");\n\nrequire(\"core-js/modules/es.array.filter.js\");\n\nrequire(\"core-js/modules/es.array.reduce.js\");\n\nrequire(\"core-js/modules/es.array.concat.js\");\n\n/**\n * URI-Encodes a file path but keep the path slashes.\n */\nfunction encodePath(path) {\n  if (!path) {\n    return path;\n  }\n\n  return path.split('/').map(encodeURIComponent).join('/');\n}\n/**\n * Returns the base name of the given path.\n * For example for \"/abc/somefile.txt\" it will return \"somefile.txt\"\n */\n\n\nfunction basename(path) {\n  return path.replace(/\\\\/g, '/').replace(/.*\\//, '');\n}\n/**\n * Returns the dir name of the given path.\n * For example for \"/abc/somefile.txt\" it will return \"/abc\"\n */\n\n\nfunction dirname(path) {\n  return path.replace(/\\\\/g, '/').replace(/\\/[^\\/]*$/, '');\n}\n/**\n * Join path sections\n */\n\n\nfunction joinPaths() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (arguments.length < 1) {\n    return '';\n  } // discard empty arguments\n\n\n  var nonEmptyArgs = args.filter(function (arg) {\n    return arg.length > 0;\n  });\n\n  if (nonEmptyArgs.length < 1) {\n    return '';\n  }\n\n  var lastArg = nonEmptyArgs[nonEmptyArgs.length - 1];\n  var leadingSlash = nonEmptyArgs[0].charAt(0) === '/';\n  var trailingSlash = lastArg.charAt(lastArg.length - 1) === '/';\n  var sections = nonEmptyArgs.reduce(function (acc, section) {\n    return acc.concat(section.split('/'));\n  }, []);\n  var first = !leadingSlash;\n  var path = sections.reduce(function (acc, section) {\n    if (section === '') {\n      return acc;\n    }\n\n    if (first) {\n      first = false;\n      return acc + section;\n    }\n\n    return acc + '/' + section;\n  }, '');\n\n  if (trailingSlash) {\n    // add it back\n    return path + '/';\n  }\n\n  return path;\n}\n/**\n * Returns whether the given paths are the same, without\n * leading, trailing or doubled slashes and also removing\n * the dot sections.\n */\n\n\nfunction isSamePath(path1, path2) {\n  var pathSections1 = (path1 || '').split('/').filter(function (p) {\n    return p !== '.';\n  });\n  var pathSections2 = (path2 || '').split('/').filter(function (p) {\n    return p !== '.';\n  });\n  path1 = joinPaths.apply(undefined, pathSections1);\n  path2 = joinPaths.apply(undefined, pathSections2);\n  return path1 === path2;\n}\n//# sourceMappingURL=index.js.map","<!--\n  - @copyright 2021 Louis Chemineau <louis@chmn.me>\n  -\n  - @author Louis Chemineau <louis@chmn.me>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<span class=\"rich-text-file\">\n\t\t<a v-if=\"!isRoot && parentPathIsRoot\" :href=\"link\">{{ name }}</a>\n\t\t<a v-if=\"!isRoot && !parentPathIsRoot\"\n\t\t\t:title=\"t('activity', 'in {path}', { path: parentFolder })\"\n\t\t\t:aria-label=\"t('activity', 'in {path}', { path: parentFolder })\"\n\t\t\t:href=\"link\">{{ name }}</a>\n\t\t<span v-if=\"isRoot\"\n\t\t\t:title=\"t('activity', 'Home')\"\n\t\t\taria-label=\"t('activity', 'Home')\"\n\t\t\tclass=\"icon-home\" />\n\t</span>\n</template>\n\n<script>\nimport { dirname, isSamePath } from '@nextcloud/paths'\nimport { translate as t } from '@nextcloud/l10n'\n\nexport default {\n\tname: 'FileRichArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tmethods: {\n\t\tt,\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Return true if the path is the root folder.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisRoot() {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\treturn isSamePath(this.path, '')\n\t\t},\n\t\t/**\n\t\t * Return true if the parent path is the root folder.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tparentPathIsRoot() {\n\t\t\treturn isSamePath(this.parentFolder, '/')\n\t\t},\n\t\t/**\n\t\t * Remove the file name from the path.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tparentFolder() {\n\t\t\treturn dirname(this.name)\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n.rich-text-file {\n\t.icon-home {\n\t\tdisplay: inline-block;\n\t\tvertical-align: text-top;\n\t}\n}\n</style>\n","<!--\n  - @copyright 2021 Louis Chemineau <louis@chmn.me>\n  -\n  - @author Louis Chemineau <louis@chmn.me>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<a :href=\"`mailto:${id}`\">{{ name }}</a>\n</template>\n\n<script>\nexport default {\n\tname: 'EmailRichArgument',\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - @copyright 2021 Louis Chemineau <louis@chmn.me>\n  -\n  - @author Louis Chemineau <louis@chmn.me>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<strong>{{ name }}</strong>\n</template>\n\n<script>\nexport default {\n\tname: 'SystemTagRichArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n<style scoped>\nstrong {\n\tpadding: 2px 5px;\n\tborder-radius: 3px;\n\tbackground-color: var(--color-background-darker);\n\tfont-weight: normal;\n}\n</style>\n","<!--\n  - @copyright Copyright (c) 2023 Richard Steinmetz <richard@steinmetz.cloud>\n  -\n  - @author Richard Steinmetz <richard@steinmetz.cloud>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU General Public License as published by\n  - the Free Software Foundation, either version 3 of the License, or\n  - (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU General Public License for more details.\n  -\n  - You should have received a copy of the GNU General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<strong>{{ name }}</strong>\n</template>\n\n<script>\nexport default {\n\tname: 'CalendarRichArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - @copyright 2021 Louis Chemineau <louis@chmn.me>\n  -\n  - @author Louis Chemineau <louis@chmn.me>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<a :href=\"link\"\n\t\t:title=\"title\">\n\t\t<strong>{{ name }}</strong>\n\t</a>\n</template>\n\n<script>\n\nexport default {\n\tname: 'CalendarEventRichArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - @copyright 2021 Louis Chemineau <louis@chmn.me>\n  -\n  - @author Louis Chemineau <louis@chmn.me>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<a :href=\"link\">\n\t\t<div :id=\"`opengraph-${id}`\" class=\"opengraph\">\n\t\t\t<div v-if=\"thumbIsDefined\" class=\"opengraph-thumb\" :style=\"`background-image: url('${thumb}')`\" />\n\t\t\t<div class=\"opengraph-name\" :class=\"{'opengraph-with-thumb': thumbIsDefined}\">{{ name }}</div>\n\t\t\t<div class=\"opengraph-description\" :class=\"{'opengraph-with-thumb': thumbIsDefined}\">{{ description }}</div>\n\t\t\t<span class=\"opengraph-website\">{{ website }}</span>\n\t\t</div>\n\t</a>\n</template>\n\n<script>\nexport default {\n\tname: 'OpenGraphRichArgument',\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tthumb: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tlink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\twebsite: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tthumbIsDefined() {\n\t\t\treturn this.thumb !== ''\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - @copyright Copyright (c) 2023 Richard Steinmetz <richard@steinmetz.cloud>\n  -\n  - @author Richard Steinmetz <richard@steinmetz.cloud>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU General Public License as published by\n  - the Free Software Foundation, either version 3 of the License, or\n  - (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU General Public License for more details.\n  -\n  - You should have received a copy of the GNU General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n\n<template>\n\t<strong>{{ name }}</strong>\n</template>\n\n<script>\nexport default {\n\tname: 'AddressBookRichArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - @copyright 2023 Joas Schilling <coding@schilljs.com>\n  -\n  - @author Joas Schilling <coding@schilljs.com>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<strong>{{ name }}</strong>\n</template>\n\n<script>\nexport default {\n\tname: 'UnknownArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n","<!--\n  - @copyright 2023 Joas Schilling <coding@schilljs.com>\n  -\n  - @author Joas Schilling <coding@schilljs.com>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<a :href=\"link\">{{ name }}</a>\n</template>\n\n<script>\nexport default {\n\tname: 'UnknownLinkArgument',\n\tprops: {\n\t\tname: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlink: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n","/**\n * @copyright Copyright (c) 2021 Louis Chemineau <louis@chmn.me>\n *\n * @author Louis Chemineau <louis@chmn.me>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport type { IRichObject } from '../models/types'\n\nimport NcUserBubble from '@nextcloud/vue/dist/Components/NcUserBubble.js'\nimport FileRichArgument from '../components/richArgumentsTypes/FileRichArgument.vue'\nimport EmailRichArgument from '../components/richArgumentsTypes/EmailRichArgument.vue'\nimport SystemTagRichArgument from '../components/richArgumentsTypes/SystemTagRichArgument.vue'\nimport CalendarRichArgument from '../components/richArgumentsTypes/CalendarRichArgument.vue'\nimport CalendarEventRichArgument from '../components/richArgumentsTypes/CalendarEventRichArgument.vue'\nimport OpenGraphRichArgument from '../components/richArgumentsTypes/OpenGraphRichArgument.vue'\nimport AddressBookRichArgument from '../components/richArgumentsTypes/AddressBookRichArgument.vue'\nimport UnknownArgument from '../components/richArgumentsTypes/UnknownArgument.vue'\nimport UnknownLinkArgument from '../components/richArgumentsTypes/UnknownLinkArgument.vue'\n\n/**\n * Map an collection of rich text objects to rich arguments for the RichText component\n *\n * @param {Record<string, IRichObject>} richObjects - The rich text object\n * @return {Record<string, IRichObject>}\n */\nexport function mapRichObjectsToRichArguments(richObjects: Record<string, IRichObject>) {\n\tconst args = {}\n\n\tfor (const richObjectName in richObjects) {\n\t\targs[richObjectName] = mapRichObjectToRichArgument(richObjects[richObjectName])\n\t}\n\n\treturn args\n}\n\n/**\n * Map rich text object to rich argument for the RichText component\n *\n * @param {Record<string, IRichObject>} richObject - The rich text object\n * @return {object}}\n */\nexport function mapRichObjectToRichArgument(richObject: IRichObject) {\n\tswitch (richObject.type) {\n\tcase 'file':\n\t\treturn {\n\t\t\tcomponent: FileRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tcase 'user':\n\t\treturn {\n\t\t\tcomponent: NcUserBubble,\n\t\t\tprops: { displayName: richObject.name, user: richObject.id, url: richObject.link },\n\t\t}\n\tcase 'group':\n\t\treturn {\n\t\t\tcomponent: NcUserBubble,\n\t\t\tprops: {\n\t\t\t\tavatarImage: 'icon-group',\n\t\t\t\tdisplayName: richObject.name,\n\t\t\t\tprimary: true,\n\t\t\t},\n\t\t}\n\tcase 'email':\n\t\treturn {\n\t\t\tcomponent: EmailRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tcase 'systemtag':\n\t\treturn {\n\t\t\tcomponent: SystemTagRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tcase 'opengraph':\n\t\treturn {\n\t\t\tcomponent: OpenGraphRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tcase 'calendar':\n\t\treturn {\n\t\t\tcomponent: CalendarRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tcase 'calendar-event':\n\t\treturn {\n\t\t\tcomponent: CalendarEventRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tcase 'addressbook':\n\t\treturn {\n\t\t\tcomponent: AddressBookRichArgument,\n\t\t\tprops: richObject,\n\t\t}\n\tdefault:\n\t\tif (richObject.link) {\n\t\t\treturn {\n\t\t\t\tcomponent: UnknownLinkArgument,\n\t\t\t\tprops: richObject,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tcomponent: UnknownArgument,\n\t\t\tprops: richObject,\n\t\t}\n\t}\n}\n","<!--\n  - @copyright 2023 Ferdinand Thiessen <opensource@fthiessen.de>\n  -\n  - @author Ferdinand Thiessen <opensource@fthiessen.de>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n<template>\n\t<li class=\"activity-entry comments-activity\">\n\t\t<NcAvatar class=\"comments-activity__icon\"\n\t\t\t:disable-menu=\"false\"\n\t\t\t:user=\"authorId\" />\n\t\t<div class=\"comments-activity__content\">\n\t\t\t<NcRichText v-if=\"showPreviews\"\n\t\t\t\tclass=\"comments-activity__title\"\n\t\t\t\t:text=\"subjectText\"\n\t\t\t\t:arguments=\"subjectArguments\" />\n\t\t\t<div v-else class=\"comments-activity__title\">\n\t\t\t\t{{ authorDisplayName }}\n\t\t\t</div>\n\t\t\t<NcRichText class=\"comments-activity__subline\" :text=\"messageText\" :arguments=\"activity.messageRichObjects\" />\n\t\t</div>\n\t\t<span class=\"hidden-visually\">{{ activity.formattedDate }}</span>\n\t\t<NcDateTime class=\"comments-activity__date\"\n\t\t\tdata-testid=\"activity-date\"\n\t\t\t:timestamp=\"timestamp\"\n\t\t\t:ignore-seconds=\"true\" />\n\t</li>\n</template>\n\n<script setup lang=\"ts\">\nimport type ActivityModel from '../../models/ActivityModel'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcRichText from '@nextcloud/vue/dist/Components/NcRichText.js'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { computed } from 'vue'\nimport { translate as t } from '@nextcloud/l10n'\nimport { mapRichObjectsToRichArguments } from '../../utils/richObjects'\n\nconst props = defineProps<{\n\tactivity: ActivityModel\n\tshowPreviews: boolean\n}>()\n\n/**\n * User ID of the comment's author\n */\nconst authorId = computed(() => props.activity.subjectRichObjects?.author?.id ?? props.activity.user)\n/**\n * Display name of the comment's author\n */\nconst authorDisplayName = computed(() => {\n\tif (props.activity.user === getCurrentUser()?.uid) {\n\t\treturn t('activity', 'You commented')\n\t}\n\n\treturn props.activity.subjectRichObjects?.author?.name ?? props.activity.user\n})\n\n/**\n * Timestamp of the activity as JS timestamp (ms)\n */\nconst timestamp = computed(() => props.activity.timestamp * 1000)\n\n/**\n * The activity's messageRichTemplate. Fallback to message if messageRichTemplate does not exists\n */\nconst messageText = computed(() => props.activity.messageRichTemplate || props.activity.message || t('activity', 'Message deleted by author'))\n\n/**\n * The activity's subjectRichTemplate. Fallback to subject if subjectRichTemplate does not exists\n */\nconst subjectText = computed(() => props.activity.subjectRichTemplate || props.activity.subject)\n\nconst subjectArguments = computed(() => mapRichObjectsToRichArguments(props.activity.subjectRichObjects))\n</script>\n\n<style scoped lang=\"scss\">\n.comments-activity {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\talign-items: flex-start;\n\twidth: 100%;\n\tmin-height: 32px;\n\tpadding: 8px 0;\n\tgap: 8px;\n\n\t&__icon {\n\t\tflex: 0 0 fit-content;\n\t}\n\n\t&__content {\n\t\tflex: 1 0;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t}\n\n\t&__title {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tdisplay: flex;\n\t\tflex-direction: row;\n\t\tjustify-content: space-between;\n\t}\n\n\t&__date {\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n</style>\n","<!--\n  - @copyright 2021 Louis Chemineau <louis@chmn.me>\n  -\n  - @author Louis Chemineau <louis@chmn.me>\n  - @author Ferdinand Thiessen <opensource@fthiessen.de>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program.  If not, see <http://www.gnu.org/licenses/>.\n  -->\n\n<template>\n\t<li class=\"activity-entry\">\n\t\t<NcAvatar :class=\"[applyMonochromeIconColor, 'activity-entry__icon', 'activity-icon', 'avatardiv--unknown']\"\n\t\t\t:disable-menu=\"true\"\n\t\t\t:disable-tooltip=\"true\"\n\t\t\t:url=\"activity.icon\"\n\t\t\t:size=\"20\" />\n\n\t\t<div class=\"activity-entry__content\">\n\t\t\t<NcRichText class=\"activity-entry__content__subject\" :text=\"subjectText\" :arguments=\"subjectArguments\" />\n\t\t\t<NcRichText class=\"activity-entry__content__message\" :text=\"messageText\" :arguments=\"messageArguments\" />\n\t\t</div>\n\t\t<span class=\"hidden-visually\">{{ activity.formattedDate }}</span>\n\t\t<NcDateTime class=\"activity-entry__date\"\n\t\t\t:timestamp=\"timestamp\"\n\t\t\t:ignore-seconds=\"true\"\n\t\t\tdata-testid=\"activity-date\" />\n\t\t<ul v-if=\"showPreviews\" class=\"activity-entry__preview-wrapper\">\n\t\t\t<li v-for=\"preview, index in activity.previews\"\n\t\t\t\t:key=\"preview.fileId ?? `preview-${index}`\">\n\t\t\t\t<component :is=\"preview.link ? 'a' : 'span'\"\n\t\t\t\t\tclass=\"activity-entry__preview\"\n\t\t\t\t\t:href=\"preview.link\"\n\t\t\t\t\t@click=\"handlePreviewClick($event, preview)\">\n\t\t\t\t\t<img class=\"activity-entry__preview-image\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'activity-entry__preview-mimetype': preview.isMimeTypeIcon,\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:src=\"preview.source\"\n\t\t\t\t\t\t:alt=\"preview.link ? t('activity', 'Open {filename}', { filename: preview.filename }) : ''\">\n\t\t\t\t</component>\n\t\t\t</li>\n\t\t</ul>\n\t</li>\n</template>\n\n<script lang=\"ts\">\nimport type { IPreview } from '../../models/types'\n\nimport { translate as t } from '@nextcloud/l10n'\nimport { defineComponent } from 'vue'\nimport { mapRichObjectsToRichArguments } from '../../utils/richObjects.js'\n\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcDateTime from '@nextcloud/vue/dist/Components/NcDateTime.js'\nimport NcRichText from '@nextcloud/vue/dist/Components/NcRichText.js'\n\nimport ActivityModel from '../../models/ActivityModel.js'\nimport logger from '../../utils/logger.js'\n\n/**\n * @typedef RichObject\n * @type {object}\n * @property {string} id - The id of the riche object.\n * @property {string} type - The type of the file object.\n */\n\nexport default defineComponent({\n\tname: 'GenericActivity',\n\tcomponents: {\n\t\tNcAvatar,\n\t\tNcDateTime,\n\t\tNcRichText,\n\t},\n\tprops: {\n\t\t/**\n\t\t * The activity to render.\n\t\t */\n\t\tactivity: {\n\t\t\ttype: ActivityModel,\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * Whether to show previews\n\t\t */\n\t\tshowPreviews: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * The timestamp of the activity as JS timestamp\n\t\t */\n\t\ttimestamp() {\n\t\t\treturn this.activity.timestamp * 1000\n\t\t},\n\t\t/**\n\t\t * @return {string} The activity's messageRichTemplate. Fallback to message if messageRichTemplate does not exists\n\t\t */\n\t\tmessageText() {\n\t\t\treturn this.activity.messageRichTemplate || this.activity.message\n\t\t},\n\t\t/**\n\t\t * @return {object} A map of rich arguments with a Component to build them.\n\t\t */\n\t\tmessageArguments() {\n\t\t\treturn mapRichObjectsToRichArguments(this.activity.messageRichObjects)\n\t\t},\n\t\t/**\n\t\t * @return {string} The activity's subjectRichTemplate. Fallback to subject if subjectRichTemplate does not exists\n\t\t */\n\t\tsubjectText() {\n\t\t\treturn this.activity.subjectRichTemplate || this.activity.subject\n\t\t},\n\t\t/**\n\t\t * @return {object} A map of rich arguments with a Component to build them.\n\t\t */\n\t\tsubjectArguments() {\n\t\t\treturn mapRichObjectsToRichArguments(this.activity.subjectRichObjects)\n\t\t},\n\t\tapplyMonochromeIconColor() {\n\t\t\t// copied from https://github.com/nextcloud/activity/blob/db919d45c45356082b17104614018e2c7e691996/js/script.js#L225\n\t\t\tconst monochromeIcon = this.activity.type !== 'file_created' && this.activity.type !== 'file_deleted' && this.activity.type !== 'favorite' && !this.activity.icon.endsWith('-color.svg')\n\t\t\tif (monochromeIcon) {\n\t\t\t\treturn 'monochrome'\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t},\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * Handle clicking a preview\n\t\t * Check if viewer is available and can open the file, if not navigate to it\n\t\t * @param event The click event\n\t\t * @param preview The preview to open\n\t\t */\n\t\thandlePreviewClick(event: MouseEvent, preview: IPreview) {\n\t\t\tif (preview.filePath && window?.OCA?.Viewer?.open !== undefined && window.OCA.Viewer.mimetypes.includes(preview.mimeType)) {\n\t\t\t\ttry {\n\t\t\t\t\twindow.OCA.Viewer.open({ path: preview.filePath.replace(/^\\/[^/]+\\/files/, '') })\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.debug(error as Error)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n})\n</script>\n\n<style lang=\"scss\" scoped>\n.activity-entry {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: flex-start;\n\twidth: 100%;\n\theight: var(--height);\n\tmin-height: 32px;\n\tpadding: 8px 0;\n\n\t&__icon {\n\t\topacity: 0.5;\n\t\tmargin-top: 2px;\n\t}\n\n\t.avatardiv  {\n\t\tbox-sizing: content-box!important;\n\t\tbackground-color: unset !important;\n\n\t\t:deep(img) {\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\tflex-basis: min-content;\n\t\tflex-direction: column;\n\t\tflex-grow: 1;\n\t\toverflow-wrap: break-word;\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\toverflow: hidden;\n\n\t\t&__subject {\n\t\t\tpadding: 0 5px;\n\t\t}\n\n\t\t&__message {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t:deep(a) {\n\t\t\tfont-weight: bold;\n\n\t\t\t&:hover {\n\t\t\t\topacity: 0.7;\n\t\t\t\ttext-decoration: underline;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__actions {\n\t\tinset-block: -8px;\n\t}\n\n\t&__date {\n\t\tcolor: var(--color-text-lighter);\n\t\tmargin-left: 5px;\n\t\tflex-shrink: 0;\n\t}\n\n\t&__preview-wrapper {\n\t\t// Force next line\n\t\tflex: 0 0 100%;\n\t\t// Proper spacing\n\t\tgap: 12px;\n\t\t// align with content\n\t\tpadding-inline-start: 24px;\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t}\n\n\t&__preview:hover {\n\t\topacity: .75;\n\t}\n\n\t&__preview-image {\n\t\theight: 50px;\n\t\twidth: 50px;\n\n\t\t// Only add borders for images, not for MIME types\n\t\t&:not(.activity-entry__preview-mimetype) {\n\t\t\tborder: 2px solid var(--color-border);\n\t\t\tborder-radius: var(--border-radius-large);\n\n\t\t\t&:hover {\n\t\t\t\tborder-color: var(--color-main-text);\n\t\t\t\toutline: 2px solid var(--color-main-background);\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","<!--\n  - @copyright Copyright (c) 2023 Ferdinand Thiessen <opensource@fthiessen.de>\n  -\n  - @author Ferdinand Thiessen <opensource@fthiessen.de>\n  -\n  - @license AGPL-3.0-or-later\n  -\n  - This program is free software: you can redistribute it and/or modify\n  - it under the terms of the GNU Affero General Public License as\n  - published by the Free Software Foundation, either version 3 of the\n  - License, or (at your option) any later version.\n  -\n  - This program is distributed in the hope that it will be useful,\n  - but WITHOUT ANY WARRANTY; without even the implied warranty of\n  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  - GNU Affero General Public License for more details.\n  -\n  - You should have received a copy of the GNU Affero General Public License\n  - along with this program. If not, see <http://www.gnu.org/licenses/>.\n  -\n  -->\n<template>\n\t<li ref=\"activityMount\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { IActivitySidebarEntry } from '../../models/ActivityAPI'\nimport { getCurrentInstance, onMounted, onUnmounted, ref } from 'vue'\n\nconst props = defineProps<{\n\tactivity: IActivitySidebarEntry\n\tshowPreviews: boolean\n}>()\n\nconst emit = defineEmits<{\n\t(e: 'reload'): void\n}>()\n\nconst activityMount = ref<HTMLLIElement>()\n\nonMounted(() => props.activity.mount(activityMount.value as HTMLLIElement, { context: getCurrentInstance()?.proxy, reload: () => emit('reload') }))\nonUnmounted(() => props.activity.unmount())\n</script>\n","<!--\n\t- @copyright 2023 Ferdinand Thiessen <opensource@fthiessen.de>\n\t-\n\t- @author Ferdinand Thiessen <opensource@fthiessen.de>\n\t-\n\t- @license AGPL-3.0-or-later\n\t-\n\t- This program is free software: you can redistribute it and/or modify\n\t- it under the terms of the GNU Affero General Public License as\n\t- published by the Free Software Foundation, either version 3 of the\n\t- License, or (at your option) any later version.\n\t-\n\t- This program is distributed in the hope that it will be useful,\n\t- but WITHOUT ANY WARRANTY; without even the implied warranty of\n\t- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\t- GNU Affero General Public License for more details.\n\t-\n\t- You should have received a copy of the GNU Affero General Public License\n\t- along with this program.  If not, see <http://www.gnu.org/licenses/>.\n\t-->\n<template>\n\t<component :is=\"activityComponent\" v-bind=\"activityOptions\" @reload=\"$emit('reload')\" />\n</template>\n\n<script setup lang=\"ts\">\nimport type { IActivitySidebarEntry } from '../models/ActivityAPI'\nimport { computed } from 'vue'\nimport ActivityModel from '../models/ActivityModel'\nimport CommentActivity from './activities/CommentActivity.vue'\nimport GenericActivity from './activities/GenericActivity.vue'\nimport PluginActivity from './activities/PluginActivity.vue'\n\nconst props = defineProps<{\n\t/**\n\t * The activity to render.\n\t */\n\tactivity: ActivityModel | IActivitySidebarEntry\n\n\t/**\n\t * Whether to show previews\n\t */\n\tshowPreviews: boolean\n}>()\n\nconst activityOptions = computed(() => props)\n\nconst activityComponent = computed(() => {\n\tif (!(props.activity instanceof ActivityModel)) {\n\t\tconsole.warn(props.activity)\n\t\treturn PluginActivity\n\t}\n\n\tswitch (props.activity.type) {\n\tcase 'comments':\n\t\treturn CommentActivity\n\tdefault:\n\t\treturn GenericActivity\n\t}\n})\n</script>\n"],"names":["n","i","e","r","o","s","l","u","t","c","_a","_c","_b","a","d","h","f","y","p","g","m","_","global","factory","module","this","hookCallback","hooks","setHookCallback","callback","isArray","input","isObject","hasOwnProp","b","isObjectEmpty","obj","k","isUndefined","isNumber","isDate","map","arr","fn","res","arrLen","extend","createUTC","format","locale","strict","createLocalOrUTC","defaultParsingFlags","getParsingFlags","some","fun","len","isValid","flags","parsedParts","isNowValid","createInvalid","momentProperties","updateInProgress","copyConfig","to","from","prop","val","momentPropertiesLen","Moment","config","isMoment","warn","msg","deprecate","firstTime","args","arg","key","argLen","deprecations","deprecateSimple","name","isFunction","set","mergeConfigs","parentConfig","childConfig","Locale","keys","defaultCalendar","calendar","mom","now","output","zeroFill","number","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","func","removeFormattingTokens","makeFormatFunction","array","length","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","longDateFormat","formatUpper","tok","defaultInvalidDate","invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","defaultRelativeTime","relativeTime","withoutSuffix","string","isFuture","pastFuture","diff","aliases","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedInput","normalizedProp","priorities","getPrioritizedUnits","unitsObj","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","match1to2NoLeadingZero","match1to2HasZero","regexes","addRegexToken","regex","strictRegex","isStrict","localeData","getParseRegexForToken","unescapeFormat","regexEscape","matched","p1","p2","p3","p4","absFloor","toInt","argumentForCoercion","coercedNumber","value","tokens","addParseToken","tokenLen","addWeekParseToken","addTimeToArrayFromToken","isLeapYear","year","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","getSetYear","makeGetSet","getIsLeapYear","unit","keepTime","set$1","get","isUTC","month","date","stringGet","stringSet","prioritized","prioritizedLen","mod","x","indexOf","daysInMonth","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","localeMonthsShort","handleStrictParse","monthName","ii","llc","localeMonthsParse","setMonth","getSetMonth","getDaysInMonth","monthsShortRegex","computeMonthsParse","monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","shortP","longP","createDate","M","ms","createUTCDate","firstWeekOffset","dow","doy","fwd","fwdlw","dayOfYearFromWeeks","week","weekday","localWeekday","weekOffset","dayOfYear","resYear","resDayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","weekdays","localeWeekdaysShort","localeWeekdaysMin","handleStrictParse$1","weekdayName","localeWeekdaysParse","getSetDayOfWeek","day","getSetLocaleDayOfWeek","getSetISODayOfWeek","weekdaysRegex","computeWeekdaysParse","weekdaysShortRegex","weekdaysMinRegex","minPieces","minp","shortp","longp","hFormat","kFormat","meridiem","lowercase","matchMeridiem","kInput","pos","pos1","pos2","localeIsPM","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","hours","minutes","isLower","baseConfig","locales","localeFamilies","globalLocale","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","names","j","next","split","loadLocale","isLocaleNameSane","oldLocale","aliasedRequire","require","getSetGlobalLocale","values","data","getLocale","defineLocale","updateLocale","tmpLocale","listLocales","checkOverflow","overflow","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","rfc2822","obsOffsets","configFromISO","match","allowTime","dateFormat","timeFormat","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","result","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","parsedInput","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","hm","configFromRFC2822","parsedArray","configFromString","defaults","currentDateArray","nowValue","configFromArray","currentDate","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","w","weekYear","temp","weekdayOverflow","curWeek","createLocal","skipped","stringLength","totalParsedInputLength","era","meridiemFixWrap","hour","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","prototypeMin","other","prototypeMax","pickBy","moments","min","max","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","duration","years","quarters","months","weeks","days","seconds","milliseconds","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","offset","separator","offsetFromString","chunkOffset","matcher","matches","chunk","parts","cloneWithOffset","model","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","base","createAdder","direction","period","dur","tmp","isAdding","updateOffset","add","subtract","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","properties","property","propertyLen","arrayTest","dataTypeTest","item","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","time","formats","sod","clone","isAfter","localInput","isBefore","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","wholeMonthDiff","anchor","anchor2","adjust","toString","toISOString","keepOffset","utc","inspect","zone","prefix","datetime","suffix","inputString","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOf","startOfDate","endOf","valueOf","unix","toDate","toArray","toObject","toJSON","isValid$2","parsingFlags","invalidAt","creationData","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","localeEras","eras","localeErasParse","eraName","abbr","narrow","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","erasAbbrRegex","erasNarrowRegex","abbrPieces","namePieces","narrowPieces","erasName","erasAbbr","erasNarrow","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetSecond","getSetMillisecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","preParsePostFormat","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","mathAbs","abs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","valueOf$1","clone$1","get$2","makeGetter","round","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","threshold","limit","humanize","argWithSuffix","argThresholds","withSuffix","th","abs$1","toISOString$1","total","totalSign","ymSign","daysSign","hmsSign","proto$2","pluralForm","plurals","pluralize","str","months$1","minute","symbolMap","pluralForm$1","plurals$1","pluralize$1","months$2","symbolMap$1","numberMap","symbolMap$2","numberMap$1","symbolMap$3","numberMap$2","pluralForm$2","plurals$2","pluralize$2","months$3","suffixes","plural","word","num","forms","relativeTimeWithPlural","lastDigit","last2Digits","symbolMap$4","numberMap$3","symbolMap$5","numberMap$4","symbolMap$6","numberMap$5","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","text","softMutation","mutationTable","monthsParse","monthsRegex$1","monthsStrictRegex","monthsShortStrictRegex","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","processRelativeTime","translate","months$4","monthsShort","monthsParse$1","monthsRegex$2","plural$1","translate$1","affix","lookup","processRelativeTime$1","processRelativeTime$2","processRelativeTime$3","months$5","isFunction$1","momentToFormat","monthsShortDot","monthsShort$1","monthsParse$2","monthsRegex$3","monthsShortDot$1","monthsShort$2","monthsParse$3","monthsRegex$4","monthsShortDot$2","monthsShort$3","monthsParse$4","monthsRegex$5","monthsShortDot$3","monthsShort$4","monthsParse$5","monthsRegex$6","processRelativeTime$4","symbolMap$7","numberMap$6","numbersPast","numbersFuture","translate$2","verbalNumber","monthsStrictRegex$1","monthsShortStrictRegex$1","monthsRegex$7","monthsParse$6","monthsShortWithDots","monthsShortWithoutDots","months$6","monthsShort$5","weekdays$1","weekdaysShort","weekdaysMin","months$7","monthsShort$6","weekdays$2","weekdaysShort$1","weekdaysMin$1","processRelativeTime$5","processRelativeTime$6","symbolMap$8","numberMap$7","symbolMap$9","numberMap$8","monthsParse$7","shortMonthsParse","translate$3","weekEndings","translate$4","plural$2","translate$5","$0","$1","$2","suffixes$1","symbolMap$a","numberMap$9","symbolMap$b","numberMap$a","isUpper","processRelativeTime$7","ezafeNumSuffix","ll","symbolMap$c","numberMap$b","months$8","suffixes$2","processRelativeTime$8","processFutureTime","eifelerRegelAppliesToNumber","processPastTime","firstDigit","translateSeconds","translateSingular","special","translate$6","units$1","format$1","relativeTimeWithPlural$1","relativeTimeWithSingular","relativeSeconds","translator","wordKey","lastWeekDays","translate$7","symbolMap$d","numberMap$c","relativeTimeMr","symbolMap$e","numberMap$d","symbolMap$f","numberMap$e","monthsShortWithDots$1","monthsShortWithoutDots$1","monthsParse$8","monthsRegex$8","monthsShortWithDots$2","monthsShortWithoutDots$2","monthsParse$9","monthsRegex$9","symbolMap$g","numberMap$f","monthsNominative","monthsSubjective","monthsParse$a","plural$3","translate$8","relativeTimeWithPlural$2","plural$4","relativeTimeWithPlural$3","monthsParse$b","months$9","days$1","months$a","monthsShort$7","plural$5","translate$9","processRelativeTime$9","translator$1","translator$2","symbolMap$h","numberMap$g","suffixes$3","suffixes$4","numbersNouns","translateFuture","translatePast","translate$a","numberNoun","numberAsNoun","hundred","ten","one","suffixes$5","processRelativeTime$a","plural$6","relativeTimeWithPlural$4","weekdaysCaseReplace","nounCase","processHoursFunction","months$b","days$2","getBasePlacement","placement","getAlignment","getMainAxisFromPlacement","getLengthFromAxis","axis","computeCoordsFromPlacement","_ref","reference","floating","commonX","commonY","coords","mainAxis","computePosition","strategy","middleware","platform","rects","statefulPlacement","middlewareData","nextX","nextY","reset","expandPaddingObject","padding","getSideObjectFromPadding","rectToClientRect","rect","detectOverflow","middlewareArguments","options","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","element","clippingClientRect","elementClientRect","within","min$1","max$1","arrow","basePlacement","arrowDimensions","minProp","maxProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","center","hash$1","getOppositePlacement","getAlignmentSides","isStart","mainAlignmentSide","hash","getOppositeAlignmentPlacement","basePlacements","allPlacements","acc","getPlacementList","alignment","autoAlignment","allowedPlacements","autoPlacement","_middlewareData$autoP","_middlewareData$autoP2","_middlewareData$autoP3","_middlewareData$autoP4","_middlewareData$autoP5","_placementsSortedByLe","detectOverflowOptions","placements","currentIndex","currentPlacement","main","cross","currentOverflows","allOverflows","nextPlacement","placementsSortedByLeastOverflow","placementThatFitsOnAllSides","overflows","getExpandedPlacements","oppositePlacement","flip","_middlewareData$flip","_middlewareData$flip2","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","flipAlignment","fallbackPlacements","overflowsData","side","_middlewareData$flip$","_middlewareData$flip3","nextIndex","resetPlacement","_overflowsData$slice$","convertValueToCoords","multiplier","rawValue","crossAxis","diffCoords","getCrossAxis","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","size","_middlewareData$size","apply","isEnd","heightSide","widthSide","xMin","xMax","yMin","yMax","dimensions","isWindow","getWindow","node","ownerDocument","getComputedStyle$1","getNodeName","isHTMLElement","isElement","isNode","isShadowRoot","OwnElement","isScrollParent","overflowX","overflowY","isTableElement","isContainingBlock","isFirefox","css","getBoundingClientRect","includeScale","clientRect","scaleX","scaleY","getDocumentElement","getNodeScroll","getWindowScrollBarX","isScaled","getRectRelativeToOffsetParent","offsetParent","isOffsetParentAnElement","documentElement","scroll","offsets","offsetRect","getParentNode","getTrueOffsetParent","getContainingBlock","currentNode","getOffsetParent","window","getDimensions","convertOffsetParentRelativeRectToViewportRelativeRect","getViewportRect","win","html","visualViewport","width","height","getDocumentRect","_element$ownerDocumen","body","getScrollParent","getScrollParents","list","_node$ownerDocument","scrollParent","isBody","target","updatedList","contains","parent","child","rootNode","getInnerBoundingClientRect","top","left","getClientRectFromClippingParent","clippingParent","getClippingParents","clippingParents","clipperElement","getClippingClientRect","firstClippingParent","clippingRect","accRect","_ref2","_ref3","_ref4","_ref5","computePosition$1","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","__spreadValues","__spreadProps","__objRest","source","exclude","assign","events","getDefaultConfig","theme","themeConfig","getThemeClasses","getAllParentThemes","supportsPassive","opts","isIOS","SHOW_EVENT_MAP","HIDE_EVENT_MAP","removeFromArray","nextFrame","resolve","shownPoppers","hidingPopper","shownPoppersByTheme","getShownPoppersByTheme","Element","defaultPropFactory","props","PROVIDE_KEY","PrivatePopper","event","skipDelay","force","skipAiming","options2","isPlacementAuto","centerOffset","autoSize","_a2","type","delay","skipTransition","bounds","popperWrapper","parentBounds","showGroup","popover","disposeTime","container","handleShow","handleHide","targetNodes","eventType","handler","eventMap","commonTriggers","customTrigger","triggers","trigger","filterEventType","newList","listener","touch","attrFrom","attrTo","el","attrs","referenceBounds","mouseX","mouseY","popperBounds","vectorX","mousePreviousX","vectorY","mousePreviousY","newVectorLength","edgeX","edgeY","lineIntersectsLine","handleGlobalMousedown","handleGlobalTouchend","handleGlobalClick","computePositionAllShownPoppers","popper","popperContent","handleGlobalClose","preventClose","isContainingEventTarget","shouldAutoHide","parent2","getAutoHideResult","x1","y1","x2","y2","x3","y3","x4","y4","uA","uB","getInternetExplorerVersion","ua","msie","trident","rv","edge","isIE","initCompat","script","_this","object","normalizeComponent$1","template","style","script2","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","hook","context","originalRender","existing","__vue_script__","__vue_render__","_vm","_h","__vue_staticRenderFns__","__vue_inject_styles__","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_component__","install$1","Vue2","plugin$1","GlobalVue$1","PrivateThemeClass","__vue2_script$5","render$2","$event","staticRenderFns$2","normalizeComponent","scriptExports","render2","staticRenderFns2","functionalTemplate","injectStyles","__cssModules$5","__component__$5","__vue2_injectStyles$5","PrivatePopperContent","PrivatePopperMethods","__vue2_script$4","render$1","ref","popperId","isShown","shouldMountContent","autoHide","show","hide","handleResize","onResize","classes","staticRenderFns$1","__cssModules$4","__component__$4","__vue2_injectStyles$4","PrivatePopperWrapper","__vue2_script$3","__vue2_render$2","__vue2_staticRenderFns$2","__cssModules$3","__component__$3","__vue2_injectStyles$3","PrivateDropdown","__vue2_script$2","__vue2_render$1","__vue2_staticRenderFns$1","__cssModules$2","__component__$2","__vue2_injectStyles$2","PrivateMenu","__vue2_script$1","__vue2_render","__vue2_staticRenderFns","__cssModules$1","__component__$1","__vue2_injectStyles$1","PrivateTooltip","__vue2_script","fetchId","render","staticRenderFns","__cssModules","__component__","__vue2_injectStyles","PrivateTooltipDirective","TARGET_CLASS","getPlacement","modifiers","getOptions","createTooltip","tooltipApp","Vue","content","loadingContent","otherOptions","mountTarget","destroyTooltip","bind","oldValue","PrivateVTooltip","addListeners","onClick","onTouchStart","removeListeners","onTouchEnd","onTouchCancel","firstTouch","PrivateVClosePopper","VTooltip","Dropdown","install","app","plugin","GlobalVue","scopedstorage","_defineProperty","_toPropertyKey","_toPrimitive","hint","prim","ScopedStorage","scope","wrapped","persistent","storagebuilder","_scopedstorage","_interopRequireDefault","require$$0","StorageBuilder","appId","persist","clear","dist","clearAll","clearNonPersistent","getBuilder_1","getBuilder","_storagebuilder","require$$1","clearStorage","storage","pred","tryOnScopeDispose","getCurrentScope","onScopeDispose","toValue","unref","isClient","notNullish","noop","getIsIOS","createFilterWrapper","filter","wrapper","reject","debounceFilter","timer","maxTimer","lastRejector","_clearTimeout","timer2","invoke","maxDuration","throttleFilter","lastExec","isLeading","lastValue","trailing","leading","rejectOnCancel","isRef","_invoke","elapsed","directiveHooks","getLifeCycleTarget","getCurrentInstance","toRef","toRef$1","readonly","customRef","useDebounceFn","useThrottleFn","tryOnMounted","sync","onMounted","nextTick","unrefElement","elRef","plain","defaultWindow","useEventListener","listeners","cleanups","cleanup","register","stopWatch","watch","optionsClone","stop","useMounted","isMounted","useSupported","computed","useResizeObserver","observerOptions","observer","isSupported","targets","els","_el","useIntersectionObserver","root","rootMargin","immediate","_target","isActive","targets2","root2","useElementVisibility","scrollTarget","elementIsVisible","intersectionObserverEntries","isIntersecting","latestTime","entry","ARRIVED_STATE_THRESHOLD_PIXELS","useScroll","throttle","idle","onStop","onScroll","eventListenerOptions","behavior","onError","internalX","internalY","scrollTo","_x","_y","_element","isScrolling","arrivedState","reactive","directions","onScrollEnd","onScrollEndDebounced","setArrivedState","display","flexDirection","scrollLeft","right","scrollTop","bottom","onScrollHandler","eventTarget","resolveElement","useInfiniteScroll","onLoadMore","interval","canLoadMore","state","promise","isLoading","observedElement","isElementVisible","checkAndLoad","scrollHeight","clientHeight","scrollWidth","clientWidth","isNarrower","useSwipe","onSwipe","onSwipeEnd","onSwipeStart","passive","coordsStart","coordsEnd","diffX","diffY","isThresholdExceeded","isSwiping","getTouchEventCoords","updateCoordsStart","updateCoordsEnd","listenerOptions","isPassiveEventSupported","checkPassiveEventSupport","stops","document","optionsBlock","ActivityModel","rawActivity","__publicField","moment","candidateSelectors","candidateSelector","NoElement","getRootNode","_element$getRootNode","isInert","lookUp","_node$getAttribute","inertAtt","inert","isContentEditable","_node$getAttribute2","attValue","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assigned","nestedCandidates","validCandidate","shadowRoot","validShadowRoot","_nestedCandidates","hasTabIndex","getTabIndex","getSortOrderTabIndex","isScope","tabIndex","sortOrderedTabbables","isInput","isHiddenInput","isDetailsWithSummary","getCheckedRadio","nodes","form","isTabbableRadio","radioScope","queryRadios","radioSet","err","checked","isRadio","isNonTabbableRadio","isNodeAttached","_nodeRoot","nodeRoot","nodeRootHost","attached","_nodeRootHost","_nodeRootHost$ownerDo","_nodeRoot2","_nodeRootHost2","_nodeRootHost2$ownerD","isZeroArea","_node$getBoundingClie","isHidden","displayCheck","getShadowRoot","isDirectSummary","nodeUnderDetails","originalNode","parentElement","isDisabledFromFieldset","parentNode","isNodeMatchingSelectorFocusable","isNodeMatchingSelectorTabbable","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","sortable","tabbable","focusable","isTabbable","focusableCandidateSelector","isFocusable","ownKeys","_objectSpread2","activeFocusTraps","trapStack","trap","activeTrap","trapIndex","isSelectableInput","isEscapeEvent","isTabEvent","isKeyForward","isKeyBackward","findIndex","idx","valueOrHandler","_len","params","_key","getActualTarget","internalTrapStack","createFocusTrap","userOptions","doc","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","composedPath","tabbableNodes","getNodeForOption","optionValue","_len2","_key2","getInitialFocusNode","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","focusableNodes","lastTabbableNode","firstDomTabbableNode","lastDomTabbableNode","posTabIndexesFound","forward","nodeIdx","group","getActiveElement","activeElement","tryFocus","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref2$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_destinationGroupIndex","_destinationGroup","checkPointerDown","checkFocusIn","targetContained","nextNode","navAcrossContainers","mruContainerIdx","mruTabIdx","checkKeyNav","checkKey","checkClick","checkDomRemoval","mutations","isFocusedNodeRemoved","removedNodes","mutationObserver","updateObservedNodes","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","returnFocus","finishDeactivation","pauseOptions","onPause","onPostPause","unpauseOptions","onUnpause","onPostUnpause","containerElements","elementsAsArray","v","E","$","D","F","L","R","B","S","O","A","I","T","N","C","P","V","J","z","e$3","base64map","crypt","bytes","words","hex","base64","triplet","imod4","cryptModule","charenc","charenc_1","isBuffer_1","isBuffer","isSlowBuffer","utf8","require$$2","bin","md5","message","FF","GG","HH","II","aa","bb","cc","dd","md5Module","digestbytes","encodedTlds","encodedUtlds","numeric","ascii","alpha","asciinumeric","alphanumeric","domain","emoji","scheme","slashscheme","whitespace","registerGroup","groups","addToGroups","flagsForToken","State","nextState","exactOnly","inputs","regexp","templateState","allFlags","ta","tr","ts","tt","WORD","UWORD","LOCALHOST","TLD","UTLD","SCHEME","SLASH_SCHEME","NUM","WS","NL$1","OPENBRACE","OPENBRACKET","OPENANGLEBRACKET","OPENPAREN","CLOSEBRACE","CLOSEBRACKET","CLOSEANGLEBRACKET","CLOSEPAREN","AMPERSAND","APOSTROPHE","ASTERISK","AT","BACKSLASH","BACKTICK","CARET","COLON","COMMA","DOLLAR","DOT","EQUALS","EXCLAMATION","HYPHEN","PERCENT","PIPE","PLUS","POUND","QUERY","QUOTE","SEMI","SLASH","TILDE","UNDERSCORE","EMOJI$1","SYM","tk","ASCII_LETTER","LETTER","EMOJI","DIGIT","SPACE","NL","EMOJI_VARIATION","EMOJI_JOINER","tlds","utlds","init$2","customSchemes","Start","decodeTlds","Num","Word","UWord","Ws","Emoji","EmojiJoiner","wordjr","uwordjr","fastts","sch","run$1","start","iterable","stringToArray","charCount","cursor","charCursor","tokenLength","latestAccepting","sinceAccepts","charsSinceAccepts","first","second","char","defaultt","jr","encoded","stack","digits","popDigitCount","popCount","Options","defaultRender","ignoredTags","uppercaseIgnoredTags","ir","operator","isCallable","option","MultiToken","truncate","formatted","protocol","href","formattedHref","tagName","attributes","className","rel","eventListeners","createTokenClass","Token","Email","Text","Nl","Url","makeState","init$1","qsAccepting","qsNonAccepting","localpartAccepting","Localpart","Domain","Scheme","SlashScheme","LocalpartAt","LocalpartDot","EmailDomain","EmailDomainDot","Email$1","EmailDomainHyphen","EmailColon","DomainHyphen","DomainDot","DomainDotTld","DomainDotTldColon","DomainDotTldColonPort","Url$1","UrlNonaccept","SchemeColon","SlashSchemeColon","SlashSchemeColonSlash","UriPrefix","UrlOpenbrace","UrlOpenbracket","UrlOpenanglebracket","UrlOpenparen","UrlOpenbraceQ","UrlOpenbracketQ","UrlOpenanglebracketQ","UrlOpenparenQ","UrlOpenbraceSyms","UrlOpenbracketSyms","UrlOpenanglebracketSyms","UrlOpenparenSyms","run","multis","textTokens","secondState","multiLength","initMultiToken","Multi","subtokens","startIdx","endIdx","INIT","init","tokenize","escapeText","escapeAttr","attributesToString","attr","linkifyStr","Symbol","STATE_PLAINTEXT","STATE_HTML","STATE_COMMENT","ALLOWED_TAGS_REGEX","NORMALIZE_TAG_REGEX","striptags","allowable_tags","tag_replacement","init_context","striptags_internal","init_striptags_stream","parse_allowable_tags","tag_buffer","depth","in_quote_char","normalize_tag","tag_set","_iOSWorkaround","onClickOutside","ignore","capture","detectIframe","shouldListen","shouldIgnore","target2","vOnClickOutside","binding","checkOverflowScroll","ele","preventDefault","rawEvent","elInitialOverflow","useScrollLock","initialState","isLocked","stopTouchMoveListener","lock","unlock","onScrollLock","U","it","createCoords","noOffsets","convert","test","ok","castFactory","anyFactory","propsFactory","typeFactory","tests","checks","any","parameters","check","checkAsRecord","all","nodeAsRecord","testFunction","looksLikeANode","empty","CONTINUE","EXIT","SKIP","visitParents","tree","visitor","reverse","is","step","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","overload","H","Ht","Gt","Qt","fe","Kt","Jt","ke","Xt","ee","te","he","xe","Yt","Xe","Q","Zt","er","Ye","$e","rr","Ze","nr","re","q","rt","ge","sr","ur","or","et","ar","cr","hr","K","lr","fr","we","_e","pr","dr","vr","Ne","be","mr","yr","Le","nt","le","Ie","Se","ne","ie","G","pe","_r","gr","wr","br","Rr","Pr","st","ot","ae","at","ct","ut","Ve","Cr","qe","lt","Er","je","Be","Sr","kr","se","de","xr","ce","Or","$r","Me","Nr","Lr","oe","ue","Ue","Tr","ft","De","Ir","ht","Ar","Vr","qr","Mr","Ur","Re","Br","pt","Dr","dt","vt","zr","ze","X","Y","We","ve","Wr","mt","Pe","Fr","Hr","bt","It","Vt","Rt","Pt","Gr","Qr","Kr","Jr","W","kt","At","Qe","Ge","xt","$t","Lt","Nt","Tt","Ot","bail","error","hasOwn","toStr","defineProperty","gOPD","isPlainObject","hasOwnConstructor","hasIsPrototypeOf","setProperty","getProperty","src","copy","copyIsArray","deep","prototype","trough","fns","pipeline","use","middlewareIndex","wrap","middelware","called","fnExpectsCallback","done","exception","then","stringifyPosition","position","point","VFileMessage","causeOrReason","optionsOrParentOrPlace","origin","reason","legacyCause","path","basename","dirname","extname","join","ext","assertPath","end","seenNonSlash","firstNonSlashEnd","extIndex","unmatchedSlash","startPart","startDot","preDotState","code","segments","joined","normalize","absolute","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","proc","cwd","isUrl","fileUrlOrPath","urlToPath","getPathFromURLPosix","url","pathname","third","order","VFile","isUint8Array","assertNonEmpty","assertPart","stem","encoding","part","CallableInstance","descriptor","own","Processor","destination","attacher","assertUnfrozen","self","transformer","file","realFile","vfile","parser","assertParser","assertCompiler","executor","parseTree","realDone","compileTree","compileResult","looksLikeAValue","complete","assertDone","assertNode","transformers","outputTree","resultingTree","compiler","attachers","namespace","addPlugin","addList","addPreset","plugins","thing","entryIndex","primary","rest","currentPrimary","isPlainObj","unified","frozen","asyncName","looksLikeAVFile","emptyOptions","settings","includeImageAlt","includeHtml","decodeNamedCharacterReference","characterReference","splice","remove","items","chunkStart","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","constructs","before","decodeNumericCharacterReference","normalizeIdentifier","unicodePunctuationInternal","regexCheck","asciiAlpha","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","normalizeUri","skip","replace","factorySpace","effects","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","previous","lineStart","initializeDocument","containerConstruct","tokenizeContainer","continued","childFlow","childToken","lineStartOffset","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","eof","stream","seen","nok","classifyCharacter","resolveAll","attention","tokenizeAttention","resolveAllAttention","open","openingSequence","closingSequence","nextEvents","movePoint","attentionMarkers","marker","inside","after","close","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","exit","contStart","contBefore","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","info","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","enter","between","subtokenize","jumps","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","current","breaks","slice","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","begin","escape","factoryWhitespace","definition","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","sequenceFurther","htmlBlockNames","htmlRawNames","htmlFlow","tokenizeHtmlFlow","resolveToHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","buffer","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","continuation","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","media","label","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","sequence","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","heading","paragraph","flow","initializeFlow","initial","atBlankEnding","afterConstruct","resolver","createResolver","initializeFactory","initializeText","resolveAllLineSuffixes","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","createTokenizer","initialize","columnStart","resolveAllConstructs","consume","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","sliceStream","sliceSerialize","defineSkip","write","addResult","expandTabs","serializeChunks","sliceChunks","line","column","_index","_bufferIndex","accountForPotentialSkip","chunkIndex","go","fields","construct","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","def","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endIndex","endBufferIndex","view","head","atTab","contentInitial","flowInitial","insideSpan","resolveText","disable","parse","defaultConstructs","create","creator","postprocess","search","preprocess","atCarriageReturn","preprocessor","endPosition","characterEscapeOrReference","decodeString","decode","fromMarkdown","opener","link","onenterdata","codeFlow","emphasis","hardBreak","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","compile","resume","listStack","prepareList","defaultOnError","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","and","errorHandler","onExitError","ancestor","siblings","referenceType","fragment","children","combined","remarkParse","ccount","character","count","escapeStringRegexp","findAndReplace","ignored","pairs","toPairs","pairIndex","grandparent","find","change","matchObject","tupleOrList","tuple","toExpression","toFunction","inConstruct","notInConstruct","gfmAutolinkLiteralFromMarkdown","transformGfmAutolinkLiterals","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolink","exitLiteralAutolinkEmail","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","gfmAutolinkLiteralToMarkdown","findUrl","findEmail","isCorrectDomain","splitUrl","atext","trailExec","trail","closingParenIndex","openingParens","closingParens","email","footnoteReference","footnoteReferencePeek","gfmFootnoteFromMarkdown","enterFootnoteDefinition","enterFootnoteDefinitionLabelString","enterFootnoteCall","enterFootnoteCallString","exitFootnoteDefinition","exitFootnoteDefinitionLabelString","exitFootnoteCall","exitFootnoteCallString","gfmFootnoteToMarkdown","footnoteDefinition","tracker","subexit","blank","constructsWithoutStrikethrough","handleDelete","peekDelete","gfmStrikethroughFromMarkdown","enterStrikethrough","exitStrikethrough","gfmStrikethroughToMarkdown","markdownTable","table","align","defaultStringLength","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","rowIndex","row","sizes","columnIndex","cell","serialize","toAlignment","lines","blockquote","patternInScope","pattern","listInScope","none","_1","longestStreak","substring","expected","formatCodeAsIndented","checkFence","checkQuote","quote","checkEmphasis","emphasisPeek","formatHeadingAsSetext","literalWithBreak","rank","htmlPeek","imagePeek","imageReference","imageReferencePeek","alt","inlineCode","inlineCodePeek","expression","formatLinkAsAutolink","linkPeek","linkReference","linkReferencePeek","checkBullet","checkBulletOther","bullet","bulletOther","checkBulletOrdered","checkRule","bulletCurrent","useDifferentMarker","firstListItem","checkListItemIndent","listItemIndent","phrasing","checkStrong","strongPeek","checkRuleRepetition","repetition","handle","gfmTableFromMarkdown","enterTable","enterCell","enterRow","exitCodeText","exitTable","gfmTableToMarkdown","alignDelimiters","around","inlineCodeWithTable","handleTable","handleTableCell","handleTableRow","serializeData","handleTableAsData","handleTableRowAsData","matrix","defaultHandlers","gfmTaskListItemFromMarkdown","exitCheck","exitParagraphWithTaskListItem","gfmTaskListItemToMarkdown","listItemWithTaskListItem","firstParaghraph","sibling","checkable","checkbox","gfmFromMarkdown","gfmToMarkdown","wwwPrefix","tokenizeWwwPrefix","tokenizeDomain","tokenizePath","tokenizeTrail","emailDomainDotTrail","tokenizeEmailDomainDotTrail","wwwAutolink","tokenizeWwwAutolink","previousWww","protocolAutolink","tokenizeProtocolAutolink","previousProtocol","emailAutolink","tokenizeEmailAutolink","previousEmail","gfmAutolinkLiteral","dot","gfmAtext","previousUnbalanced","emailDomain","emailDomainAfter","emailDomainDot","wwwStart","wwwAfter","protocolStart","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharRefStart","trailBracketAfter","trailCharRefInside","indent","gfmFootnote","tokenizeDefinitionStart","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","tokenizeGfmFootnoteCall","tokenizePotentialGfmFootnoteCall","resolveToPotentialGfmFootnoteCall","id","call","replacement","callStart","callData","callEscape","labelAtMarker","whitespaceAfter","gfmStrikethrough","single","tokenizeStrikethrough","resolveAllStrikethrough","strikethrough","EditMap","addImpl","vecs","editMap","gfmTableAlign","inDelimiterRow","alignIndex","gfmTable","tokenizeTable","resolveTable","sizeB","bodyRowStart","headRowBefore","headRowStart","headRowBreak","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","currentTable","currentBody","currentCell","flushTableEnd","flushCell","range","rowEnd","previousCell","groupName","valueName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","tasklistCheck","tokenizeTasklistCheck","gfmTaskListItem","spaceThenNonSpace","gfm","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","newlineToBreak","remarkBreaks","clobberPrefix","safeId","counter","reuseCounter","sup","revert","subtype","contents","results","loose","listLoose","listItemLoose","spread","pointEnd","pointStart","rows","firstRow","tableContent","tableRow","cellIndex","cells","alignValue","tableCell","tab","space","trimLines","last","trimLine","handlers","VOID","PRIMITIVE","ARRAY","OBJECT","REGEXP","MAP","SET","ERROR","BIGINT","env","deserializer","unpair","deserialize","serialized","EMPTY","typeOf","asString","shouldSkip","TYPE","serializer","json","pair","entries","lossy","structuredClone$1","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","footer","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","tailTail","structuredClone","createState","definitionById","footnoteById","footnoteCounts","applyData","patch","shallow","defaultUnknownHandler","trimMarkdownSpaceStart","hName","hChildren","hProperties","toHast","foot","remarkRehype","hastTree","Schema","normal","merge","definitions","Info","attribute","powers","boolean","increment","booleanish","overloadedBoolean","spaceSeparated","commaSeparated","commaOrSpaceSeparated","types","DefinedInfo","mask","mark","xlink","xml","caseSensitiveTransform","caseInsensitiveTransform","xmlns","aria","svg","valid","dash","cap","schema","Type","camelcase","dashes","kebab","hastToReact","htmlBase","svgBase","stringify","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","NEWLINE","FORWARD_SLASH","EMPTY_STRING","TYPE_COMMENT","TYPE_DECLARATION","inlineStyleParser","lineno","updatePosition","Position","comments","rules","trim","declarations","decls","decl","StyleToObject","iterator","hasIterator","styleToObjectModule","webNamespaces","toH","react","vue","vd","vdom","transform","hyperscript","parentSchema","addAttribute","subprop","commas","spaces","parseStyle","styleToObject","error_","convert_1","matchesFactory","convertAll","unistUtilVisitParents","unistUtilVisit","hastCssPropertyMap","hastUtilTableCellStyle","hastName","cssName","appendStyle","prevStyle","nextStyle","tableElements","rehypeReact","createElement","fixTableCellAlign","tableCellStyle","component","convertElement","tagNameFactory","looksLikeAnElement","ABSOLUTE_URL_REGEX","WINDOWS_PATH_REGEX","isAbsoluteUrl","defaultProtocols","defaultRel","rehypeExternalLinks","protocols","contentRaw","createIfNeeded","relRaw","fails","wellKnownSymbol","V8_VERSION","SPECIES","arrayMethodHasSpeciesSupport","METHOD_NAME","constructor","$map","HAS_SPECIES_SUPPORT","callbackfn","anObject","regexpFlags","$RegExp","UNSUPPORTED_Y","MISSED_STICKY","BROKEN_CARET","regexpStickyHelpers","regexpUnsupportedDotAll","regexpUnsupportedNcg","uncurryThis","require$$3","stickyHelpers","require$$4","shared","require$$5","require$$6","getInternalState","require$$7","UNSUPPORTED_DOT_ALL","require$$8","UNSUPPORTED_NCG","require$$9","nativeReplace","nativeExec","patchedExec","charAt","stringSlice","UPDATES_LAST_INDEX_WRONG","re1","re2","NPCG_INCLUDED","PATCH","reCopy","lastIndex","sticky","charsAdded","strCopy","regexpExec","exec","defineBuiltIn","createNonEnumerableProperty","RegExpPrototype","fixRegexpWellKnownSymbolLogic","KEY","FORCED","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","methods","nativeMethod","arg2","forceStringMethod","uncurriedNativeMethod","$exec","classof","MATCH","isRegexp","isRegExp","isConstructor","tryToString","$TypeError","aConstructor","argument","isNullOrUndefined","speciesConstructor","defaultConstructor","advanceStringIndex","unicode","regexpExecAbstract","fixRegExpWellKnownSymbolLogic","requireObjectCoercible","toLength","require$$10","require$$11","getMethod","require$$12","arraySlice","require$$13","callRegExpExec","require$$14","require$$15","require$$16","require$$17","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","maybeCallNative","internalSplit","lim","lastLastIndex","separatorCopy","lastLength","splitter","rx","unicodeMatching","floor","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","getSubstitution","captures","namedCaptures","tailPos","symbols","ch","toIntegerOrInfinity","regExpExec","REPLACE","concat","stringIndexOf","maybeToString","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_SUPPORTS_NAMED_GROUPS","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","fullUnicode","matchStr","accumulatedResult","nextSourcePosition","replacerArgs","$filter","aCallable","IndexedObject","lengthOfArrayLike","createMethod","IS_RIGHT","argumentsLength","memo","arrayReduce","arrayMethodIsStrict","method","engineIsNode","$reduce","CHROME_VERSION","IS_NODE","CHROME_BUG","MAX_SAFE_INTEGER","doesNotExceedSafeInteger","createProperty","arraySpeciesCreate","IS_CONCAT_SPREADABLE","IS_CONCAT_SPREADABLE_SUPPORT","isConcatSpreadable","spreadable","encodePath","dirname_1","joinPaths","isSamePath_1","isSamePath","nonEmptyArgs","lastArg","leadingSlash","trailingSlash","sections","section","path1","path2","pathSections1","pathSections2","_sfc_main","mapRichObjectsToRichArguments","richObjects","richObjectName","mapRichObjectToRichArgument","richObject","FileRichArgument","NcUserBubble","EmailRichArgument","SystemTagRichArgument","OpenGraphRichArgument","CalendarRichArgument","CalendarEventRichArgument","AddressBookRichArgument","UnknownLinkArgument","UnknownArgument","authorId","authorDisplayName","getCurrentUser","_d","timestamp","messageText","subjectText","subjectArguments","_sfc_main$2","defineComponent","NcAvatar","NcDateTime","NcRichText","preview","logger","activityMount","emit","onUnmounted","activityOptions","activityComponent","PluginActivity","CommentActivity","GenericActivity"],"mappings":"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UA,GACV,KAAM59F,EACN,QAASA,EACT,QAASg+F,GACT,MAAO,KACP,OAAQJ,GACR,SAAUA,GACV,SAAUA,GACV,yBAA0BA,GAC1B,eAAgB,KAChB,MAAO,KACP,KAAM59F,EACN,MAAO,KACP,KAAM,KACN,KAAMA,EACN,WAAY89F,GACZ,IAAK,KACL,OAAQ,KACR,QAAS,KACT,OAAQ,KACR,MAAO99F,EACP,KAAM,KACN,MAAO,KACP,SAAUA,EACV,OAAQ,KACR,MAAO,KACP,UAAW,KACX,KAAM,KACN,cAAe49F,GACf,OAAQ,KACR,MAAOE,GACP,MAAO99F,EACP,KAAM,KAIN,MAAO,KACP,MAAO,KACP,QAASg+F,GACT,KAAM,KACN,WAAY,KACZ,QAAS,KACT,OAAQh+F,EACR,YAAa,KACb,aAAcA,EACd,YAAa,KACb,YAAa,KACb,KAAM,KACN,QAAS,KACT,QAAS,KACT,MAAO,KACP,KAAM,KACN,SAAU,KACV,SAAU,KACV,MAAO,KACP,QAAS49F,GACT,QAASA,GACT,MAAO,KACP,KAAM,KACN,MAAO,KACP,YAAa,KACb,OAAQ59F,EACR,WAAYA,EACZ,KAAM,KACN,SAAU,KACV,OAAQ,KACR,aAAcA,EACd,YAAaA,EACb,SAAU49F,GACV,OAAQA,GACR,QAASA,GACT,OAAQA,GACR,OAAQ,KACR,QAAS,KACT,OAAQ,KACR,IAAK,KACL,YAAa59F,EACb,MAAO,KACP,OAAQ,KACR,UAAW89F,GACX,QAAS,KACT,QAAS,KACT,KAAM,KACN,UAAW99F,EACX,UAAW,KACX,QAAS,KACT,OAAQ,KACR,MAAO,KACP,OAAQA,EAGR,kBAAmB,KACnB,YAAa,KACb,SAAU,KACV,wBAAyB49F,GACzB,sBAAuBA,GACvB,OAAQ,KACR,SAAU,KACV,QAAS59F,EACT,SAAU,KACV,aAAc,IACf,CACH,CAAC,ECrTY6+F,GAAMld,GAAO,CACxB,MAAO,MACP,WAAY,CACV,aAAc,gBACd,kBAAmB,qBACnB,WAAY,cACZ,cAAe,iBACf,UAAW,aACX,UAAW,QACX,SAAU,YACV,SAAU,YACV,mBAAoB,sBACpB,0B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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283]}

Zerion Mini Shell 1.0