{"version":3,"sources":["mod::vue/node_modules/@vue/shared/dist/shared.cjs.prod.js","mod::vue/node_modules/@vue/shared/index.js","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode.ts","mod::vue/node_modules/@babel/parser/src/util/location.ts","mod::vue/node_modules/@babel/parser/src/parse-error/module-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/to-node-description.ts","mod::vue/node_modules/@babel/parser/src/parse-error/standard-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/strict-mode-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/parse-expression-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error/pipeline-operator-errors.ts","mod::vue/node_modules/@babel/parser/src/parse-error.ts","mod::vue/node_modules/@babel/parser/src/options.ts","mod::vue/node_modules/@babel/parser/src/plugins/estree.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/context.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/types.ts","mod::vue/node_modules/@babel/babel-helper-validator-identifier/src/identifier.ts","mod::vue/node_modules/@babel/babel-helper-validator-identifier/src/keyword.ts","mod::vue/node_modules/@babel/parser/src/util/identifier.ts","mod::vue/node_modules/@babel/parser/src/util/scope.ts","mod::vue/node_modules/@babel/parser/src/plugins/flow/scope.ts","mod::vue/node_modules/@babel/parser/src/plugins/flow/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/jsx/xhtml.ts","mod::vue/node_modules/@babel/parser/src/util/whitespace.ts","mod::vue/node_modules/@babel/parser/src/plugins/jsx/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/typescript/scope.ts","mod::vue/node_modules/@babel/parser/src/util/production-parameter.ts","mod::vue/node_modules/@babel/parser/src/parser/base.ts","mod::vue/node_modules/@babel/parser/src/parser/comments.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/state.ts","mod::vue/node_modules/@babel/babel-helper-string-parser/src/index.ts","mod::vue/node_modules/@babel/parser/src/tokenizer/index.ts","mod::vue/node_modules/@babel/parser/src/util/class-scope.ts","mod::vue/node_modules/@babel/parser/src/util/expression-scope.ts","mod::vue/node_modules/@babel/parser/src/parser/util.ts","mod::vue/node_modules/@babel/parser/src/parser/node.ts","mod::vue/node_modules/@babel/parser/src/parser/lval.ts","mod::vue/node_modules/@babel/parser/src/plugins/typescript/index.ts","mod::vue/node_modules/@babel/parser/src/plugins/placeholders.ts","mod::vue/node_modules/@babel/parser/src/plugins/v8intrinsic.ts","mod::vue/node_modules/@babel/parser/src/plugin-utils.ts","mod::vue/node_modules/@babel/parser/src/parser/expression.ts","mod::vue/node_modules/@babel/parser/src/parser/statement.ts","mod::vue/node_modules/@babel/parser/src/parser/index.ts","mod::vue/node_modules/@babel/parser/src/index.ts","mod::vue/node_modules/estree-walker/dist/umd/estree-walker.js","mod::vue/node_modules/source-map-js/lib/base64.js","mod::vue/node_modules/source-map-js/lib/base64-vlq.js","mod::vue/node_modules/source-map-js/lib/util.js","mod::vue/node_modules/source-map-js/lib/array-set.js","mod::vue/node_modules/source-map-js/lib/mapping-list.js","mod::vue/node_modules/source-map-js/lib/source-map-generator.js","mod::vue/node_modules/source-map-js/lib/binary-search.js","mod::vue/node_modules/source-map-js/lib/quick-sort.js","mod::vue/node_modules/source-map-js/lib/source-map-consumer.js","mod::vue/node_modules/source-map-js/lib/source-node.js","mod::vue/node_modules/source-map-js/source-map.js","mod::vue/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js","mod::vue/node_modules/@vue/compiler-core/index.js","mod::vue/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js","mod::vue/node_modules/@vue/compiler-dom/index.js","mod::vue/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js","mod::vue/node_modules/@vue/reactivity/index.js","mod::vue/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js","mod::vue/node_modules/@vue/runtime-core/index.js","mod::vue/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js","mod::vue/node_modules/@vue/runtime-dom/index.js","mod::vue/node_modules/vue/dist/vue.cjs.prod.js","mod::vue/node_modules/vue/index.js","mod::vue/node_modules/vue-router/dist/vue-router.prod.cjs","mod::vue/node_modules/vue-router/index.js","mod::vue/node_modules/vue-demi/lib/index.cjs","@webhare/env/src/envbackend.ts","@webhare/env/src/init-browser.ts","@webhare/dompack/src/tree.ts","@webhare/std/src/quacks.ts","@webhare/std/src/finmath.ts","@webhare/std/src/money.ts","@webhare/std/src/types.ts","@webhare/std/src/strings.ts","@webhare/std/src/collections.ts","@webhare/std/src/localmutex.ts","@webhare/frontend/src/init.ts","@webhare/tsrun/src/polyfills.ts","mod::publisher/js/internal/polyfills/iterator-helpers.ts","@webhare/env/src/navigation.ts","@webhare/env/src/whglobal.ts","mod::system/js/dompack/src/events.ts","@webhare/dompack/src/busy.ts","mod::system/js/dompack/src/tree.ts","mod::system/js/dompack/src/components.ts","@webhare/dompack/src/storage.ts","@webhare/dompack/src/browser.ts","mod::publisher/js/internal/polyfills/publisher-integration.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/frontend.ts","node_modules/stacktrace-parser/dist/stack-trace-parser.esm.js","@webhare/js-api-tools/src/stacktracing.ts","@webhare/jsonrpc-client/src/jsonrpc-client.ts","@webhare/rpc/src/rpc.ts","@webhare/auth/src/shared.ts","@webhare/frontend/src/auth.ts","@webhare/frontend/src/gtm.ts","@webhare/frontend/src/frontend.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AppHeader.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/Tech42Logo.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/Tech42Logo.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/api.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/useTools.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/errors.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AppHeader.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/AppHeader.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LoginForm.vue","mod::tech42_tools/js/internal/google-idp.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/login-message.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/login-prefill.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LoginForm.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/LoginForm.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ToastHost.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/undo-toasts.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ToastHost.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/ToastHost.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/App.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/useWrdAuthState.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/App.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/App.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/router.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/ToolsView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/ToolsView.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/views/ToolsView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/AdaView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/format.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ModalDialog.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ModalDialog.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/ModalDialog.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/AdaView.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/views/AdaView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistsListView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/GistBadges.vue","mod::tech42_tools/js/gists/admin.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/GistBadges.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/GistBadges.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistsListView.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/views/GistsListView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistEditorView.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/gist-form.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/DocumentManager.vue","mod::tech42_tools/js/gists/documents.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/markdown-files.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/DocumentManager.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/DocumentManager.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ShareDialog.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ShareDialog.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/ShareDialog.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistEditorView.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/views/GistEditorView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MondaysListView.vue","mod::tech42_tools/js/mondays/types.ts","mod::tech42_tools/js/mondays/rules.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue","mod::vue/node_modules/reka-ui/src/shared/createContext.ts","mod::vue/node_modules/reka-ui/src/shared/getActiveElement.ts","mod::vue/node_modules/reka-ui/src/shared/handleAndDispatchCustomEvent.ts","mod::vue/node_modules/reka-ui/src/shared/nullish.ts","mod::vue/node_modules/@vueuse/shared/dist/index.js","mod::vue/node_modules/@vueuse/core/dist/index.js","mod::vue/node_modules/reka-ui/src/shared/renderSlotFragments.ts","mod::vue/node_modules/reka-ui/src/shared/useArrowNavigation.ts","mod::vue/node_modules/reka-ui/src/ConfigProvider/ConfigProvider.vue","mod::vue/node_modules/reka-ui/src/ConfigProvider/ConfigProvider.vue","mod::vue/node_modules/defu/dist/defu.mjs","mod::vue/node_modules/reka-ui/src/shared/useBodyScrollLock.ts","mod::vue/node_modules/reka-ui/src/shared/useDirection.ts","mod::vue/node_modules/reka-ui/src/shared/useEmitAsProps.ts","mod::vue/node_modules/reka-ui/src/shared/useFocusGuards.ts","mod::vue/node_modules/reka-ui/src/shared/useForwardExpose.ts","mod::vue/node_modules/reka-ui/src/shared/useForwardProps.ts","mod::vue/node_modules/reka-ui/src/shared/useForwardPropsEmits.ts","mod::vue/node_modules/aria-hidden/dist/es2015/index.js","mod::vue/node_modules/reka-ui/src/shared/useHideOthers.ts","mod::vue/node_modules/reka-ui/src/shared/useId.ts","mod::vue/node_modules/reka-ui/src/shared/useSize.ts","mod::vue/node_modules/reka-ui/src/shared/useStateMachine.ts","mod::vue/node_modules/reka-ui/src/shared/useTypeahead.ts","mod::vue/node_modules/reka-ui/src/Presence/usePresence.ts","mod::vue/node_modules/reka-ui/src/Presence/Presence.ts","mod::vue/node_modules/reka-ui/src/Primitive/Slot.ts","mod::vue/node_modules/reka-ui/src/Primitive/Primitive.ts","mod::vue/node_modules/reka-ui/src/Primitive/usePrimitiveElement.ts","mod::vue/node_modules/reka-ui/src/DismissableLayer/utils.ts","mod::vue/node_modules/reka-ui/src/DismissableLayer/DismissableLayer.vue","mod::vue/node_modules/reka-ui/src/DismissableLayer/DismissableLayer.vue","mod::vue/node_modules/reka-ui/src/FocusScope/stack.ts","mod::vue/node_modules/reka-ui/src/FocusScope/utils.ts","mod::vue/node_modules/reka-ui/src/FocusScope/FocusScope.vue","mod::vue/node_modules/reka-ui/src/FocusScope/FocusScope.vue","mod::vue/node_modules/reka-ui/src/Menu/utils.ts","mod::vue/node_modules/reka-ui/src/Teleport/Teleport.vue","mod::vue/node_modules/reka-ui/src/Teleport/Teleport.vue","mod::vue/node_modules/reka-ui/src/Collection/Collection.ts","mod::vue/node_modules/reka-ui/src/RovingFocus/utils.ts","mod::vue/node_modules/reka-ui/src/Popper/PopperRoot.vue","mod::vue/node_modules/reka-ui/src/Popper/PopperRoot.vue","mod::vue/node_modules/reka-ui/src/Popper/PopperAnchor.vue","mod::vue/node_modules/reka-ui/src/Popper/PopperAnchor.vue","mod::vue/node_modules/reka-ui/src/Popper/utils.ts","mod::vue/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","mod::vue/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","mod::vue/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","mod::vue/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","mod::vue/node_modules/@floating-ui/vue/dist/floating-ui.vue.mjs","mod::vue/node_modules/reka-ui/src/Popper/PopperContent.vue","mod::vue/node_modules/reka-ui/src/Popper/PopperContent.vue","mod::vue/node_modules/reka-ui/src/RovingFocus/RovingFocusGroup.vue","mod::vue/node_modules/reka-ui/src/RovingFocus/RovingFocusGroup.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuAnchor.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuAnchor.vue","mod::vue/node_modules/reka-ui/src/shared/useIsUsingKeyboard.ts","mod::vue/node_modules/reka-ui/src/Menu/MenuRoot.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuRoot.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuContentImpl.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuContentImpl.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuItemImpl.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuItemImpl.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuItem.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuItem.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuRootContentModal.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuRootContentModal.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuRootContentNonModal.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuRootContentNonModal.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuContent.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuContent.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuPortal.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuPortal.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuSeparator.vue","mod::vue/node_modules/reka-ui/src/Menu/MenuSeparator.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuRoot.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuRoot.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuContent.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuContent.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuItem.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuItem.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuPortal.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuPortal.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuSeparator.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuSeparator.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/utils.ts","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuTrigger.vue","mod::vue/node_modules/reka-ui/src/ContextMenu/ContextMenuTrigger.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuRoot.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuRoot.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuContent.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuContent.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuItem.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuItem.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuPortal.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuPortal.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuSeparator.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuSeparator.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuTrigger.vue","mod::vue/node_modules/reka-ui/src/DropdownMenu/DropdownMenuTrigger.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/mondays-format.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LinkedText.vue","mod::tech42_tools/node_modules/mdurl/index.mjs","mod::tech42_tools/node_modules/mdurl/lib/decode.mjs","mod::tech42_tools/node_modules/mdurl/lib/encode.mjs","mod::tech42_tools/node_modules/mdurl/lib/format.mjs","mod::tech42_tools/node_modules/mdurl/lib/parse.mjs","mod::tech42_tools/node_modules/uc.micro/build/index.mjs","mod::tech42_tools/node_modules/entities/src/decode-codepoint.ts","mod::tech42_tools/node_modules/entities/src/internal/decode-shared.ts","mod::tech42_tools/node_modules/entities/src/generated/decode-data-html.ts","mod::tech42_tools/node_modules/entities/src/internal/bin-trie-flags.ts","mod::tech42_tools/node_modules/entities/src/decode.ts","mod::tech42_tools/node_modules/entities/src/index.ts","mod::tech42_tools/node_modules/linkify-it/src/rebuilder.ts","mod::tech42_tools/node_modules/linkify-it/src/linkifyit.ts","mod::tech42_tools/node_modules/punycode.js/punycode.es6.js","mod::tech42_tools/node_modules/markdown-it/src/common/utils.ts","mod::tech42_tools/node_modules/markdown-it/src/helpers/parse_link_label.ts","mod::tech42_tools/node_modules/markdown-it/src/helpers/parse_link_destination.ts","mod::tech42_tools/node_modules/markdown-it/src/helpers/parse_link_title.ts","mod::tech42_tools/node_modules/markdown-it/src/helpers/index.ts","mod::tech42_tools/node_modules/markdown-it/src/token.ts","mod::tech42_tools/node_modules/markdown-it/src/ruler.ts","mod::tech42_tools/node_modules/markdown-it/src/renderer.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/state_core.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/normalize.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/block.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/strip_references.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/inline.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/linkify.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/replacements.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/smartquotes.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_core/text_join.ts","mod::tech42_tools/node_modules/markdown-it/src/parser_core.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/state_block.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/table.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/code.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/fence.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/blockquote.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/hr.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/list.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/reference.ts","mod::tech42_tools/node_modules/markdown-it/src/common/html_blocks.ts","mod::tech42_tools/node_modules/markdown-it/src/common/html_re.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/html_block.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/heading.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/lheading.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_block/paragraph.ts","mod::tech42_tools/node_modules/markdown-it/src/parser_block.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/state_inline.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/text.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/linkify.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/newline.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/escape.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/backticks.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/strikethrough.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/emphasis.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/link.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/image.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/autolink.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/html_inline.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/entity.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/balance_pairs.ts","mod::tech42_tools/node_modules/markdown-it/src/rules_inline/fragments_join.ts","mod::tech42_tools/node_modules/markdown-it/src/parser_inline.ts","mod::tech42_tools/node_modules/markdown-it/src/presets/default.ts","mod::tech42_tools/node_modules/markdown-it/src/presets/zero.ts","mod::tech42_tools/node_modules/markdown-it/src/presets/commonmark.ts","mod::tech42_tools/node_modules/markdown-it/src/markdownit.ts","mod::tech42_tools/node_modules/markdown-it/src/index.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/linked-text.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LinkedText.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/LinkedText.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputSkeleton.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputSkeleton.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/meeting-input-tabs.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MondaysListView.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/views/MondaysListView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MeetingView.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/meeting-store.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/meeting-save-queue.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/PersonAvatar.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/PersonAvatar.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/meeting-review-loader.ts","mod::tech42_tools/webdesigns/tech42_tools/frontend/lib/meeting-review.ts","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue","/opt/whdata/generated/platform/ap/tech42_tools.tech42_tools/build/sfc-template:/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MeetingView.vue?type=template","mod::tech42_tools/webdesigns/tech42_tools/frontend/views/MeetingView.vue","/entrypoint.js"],"sourcesContent":["/**\n* @vue/shared v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction makeMap(str) {\n  const map = /* @__PURE__ */ Object.create(null);\n  for (const key of str.split(\",\")) map[key] = 1;\n  return (val) => val in map;\n}\n\nconst EMPTY_OBJ = {};\nconst EMPTY_ARR = [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter\n(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n  const i = arr.indexOf(el);\n  if (i > -1) {\n    arr.splice(i, 1);\n  }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n  return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n  return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n  // the leading comma is intentional so empty string \"\" is also included\n  \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n  \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst 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 camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction(\n  (str) => {\n    return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n  }\n);\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n  (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction((str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n});\nconst toHandlerKey = cacheStringFunction(\n  (str) => {\n    const s = str ? `on${capitalize(str)}` : ``;\n    return s;\n  }\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, ...arg) => {\n  for (let i = 0; i < fns.length; i++) {\n    fns[i](...arg);\n  }\n};\nconst def = (obj, key, value, writable = false) => {\n  Object.defineProperty(obj, key, {\n    configurable: true,\n    enumerable: false,\n    writable,\n    value\n  });\n};\nconst looseToNumber = (val) => {\n  const n = parseFloat(val);\n  return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n  const n = isString(val) ? Number(val) : NaN;\n  return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n  return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n  return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\nfunction genCacheKey(source, options) {\n  return source + JSON.stringify(\n    options,\n    (_, val) => typeof val === \"function\" ? val.toString() : val\n  );\n}\n\nconst PatchFlags = {\n  \"TEXT\": 1,\n  \"1\": \"TEXT\",\n  \"CLASS\": 2,\n  \"2\": \"CLASS\",\n  \"STYLE\": 4,\n  \"4\": \"STYLE\",\n  \"PROPS\": 8,\n  \"8\": \"PROPS\",\n  \"FULL_PROPS\": 16,\n  \"16\": \"FULL_PROPS\",\n  \"NEED_HYDRATION\": 32,\n  \"32\": \"NEED_HYDRATION\",\n  \"STABLE_FRAGMENT\": 64,\n  \"64\": \"STABLE_FRAGMENT\",\n  \"KEYED_FRAGMENT\": 128,\n  \"128\": \"KEYED_FRAGMENT\",\n  \"UNKEYED_FRAGMENT\": 256,\n  \"256\": \"UNKEYED_FRAGMENT\",\n  \"NEED_PATCH\": 512,\n  \"512\": \"NEED_PATCH\",\n  \"DYNAMIC_SLOTS\": 1024,\n  \"1024\": \"DYNAMIC_SLOTS\",\n  \"DEV_ROOT_FRAGMENT\": 2048,\n  \"2048\": \"DEV_ROOT_FRAGMENT\",\n  \"CACHED\": -1,\n  \"-1\": \"CACHED\",\n  \"BAIL\": -2,\n  \"-2\": \"BAIL\"\n};\nconst PatchFlagNames = {\n  [1]: `TEXT`,\n  [2]: `CLASS`,\n  [4]: `STYLE`,\n  [8]: `PROPS`,\n  [16]: `FULL_PROPS`,\n  [32]: `NEED_HYDRATION`,\n  [64]: `STABLE_FRAGMENT`,\n  [128]: `KEYED_FRAGMENT`,\n  [256]: `UNKEYED_FRAGMENT`,\n  [512]: `NEED_PATCH`,\n  [1024]: `DYNAMIC_SLOTS`,\n  [2048]: `DEV_ROOT_FRAGMENT`,\n  [-1]: `CACHED`,\n  [-2]: `BAIL`\n};\n\nconst ShapeFlags = {\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"FUNCTIONAL_COMPONENT\": 2,\n  \"2\": \"FUNCTIONAL_COMPONENT\",\n  \"STATEFUL_COMPONENT\": 4,\n  \"4\": \"STATEFUL_COMPONENT\",\n  \"TEXT_CHILDREN\": 8,\n  \"8\": \"TEXT_CHILDREN\",\n  \"ARRAY_CHILDREN\": 16,\n  \"16\": \"ARRAY_CHILDREN\",\n  \"SLOTS_CHILDREN\": 32,\n  \"32\": \"SLOTS_CHILDREN\",\n  \"TELEPORT\": 64,\n  \"64\": \"TELEPORT\",\n  \"SUSPENSE\": 128,\n  \"128\": \"SUSPENSE\",\n  \"COMPONENT_SHOULD_KEEP_ALIVE\": 256,\n  \"256\": \"COMPONENT_SHOULD_KEEP_ALIVE\",\n  \"COMPONENT_KEPT_ALIVE\": 512,\n  \"512\": \"COMPONENT_KEPT_ALIVE\",\n  \"COMPONENT\": 6,\n  \"6\": \"COMPONENT\"\n};\n\nconst SlotFlags = {\n  \"STABLE\": 1,\n  \"1\": \"STABLE\",\n  \"DYNAMIC\": 2,\n  \"2\": \"DYNAMIC\",\n  \"FORWARDED\": 3,\n  \"3\": \"FORWARDED\"\n};\nconst slotFlagsText = {\n  [1]: \"STABLE\",\n  [2]: \"DYNAMIC\",\n  [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_ALLOWED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol\";\nconst isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED);\nconst isGloballyWhitelisted = isGloballyAllowed;\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n  start = Math.max(0, Math.min(start, source.length));\n  end = Math.max(0, Math.min(end, source.length));\n  if (start > end) return \"\";\n  let lines = source.split(/(\\r?\\n)/);\n  const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n  lines = lines.filter((_, idx) => idx % 2 === 0);\n  let count = 0;\n  const res = [];\n  for (let i = 0; i < lines.length; i++) {\n    count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n    if (count >= start) {\n      for (let j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) continue;\n        const line = j + 1;\n        res.push(\n          `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}|  ${lines[j]}`\n        );\n        const lineLength = lines[j].length;\n        const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n        if (j === i) {\n          const pad = start - (count - (lineLength + newLineSeqLength));\n          const length = Math.max(\n            1,\n            end > count ? lineLength - pad : end - start\n          );\n          res.push(`   |  ` + \" \".repeat(pad) + \"^\".repeat(length));\n        } else if (j > i) {\n          if (end > count) {\n            const length = Math.max(Math.min(end - count, lineLength), 1);\n            res.push(`   |  ` + \"^\".repeat(length));\n          }\n          count += lineLength + newLineSeqLength;\n        }\n      }\n      break;\n    }\n  }\n  return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n  if (isArray(value)) {\n    const res = {};\n    for (let i = 0; i < value.length; i++) {\n      const item = value[i];\n      const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n      if (normalized) {\n        for (const key in normalized) {\n          res[key] = normalized[key];\n        }\n      }\n    }\n    return res;\n  } else if (isString(value) || isObject(value)) {\n    return value;\n  }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n  const ret = {};\n  cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n    if (item) {\n      const tmp = item.split(propertyDelimiterRE);\n      tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return ret;\n}\nfunction stringifyStyle(styles) {\n  if (!styles) return \"\";\n  if (isString(styles)) return styles;\n  let ret = \"\";\n  for (const key in styles) {\n    const value = styles[key];\n    if (isString(value) || typeof value === \"number\") {\n      const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n      ret += `${normalizedKey}:${value};`;\n    }\n  }\n  return ret;\n}\nfunction normalizeClass(value) {\n  let res = \"\";\n  if (isString(value)) {\n    res = value;\n  } else if (isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      const normalized = normalizeClass(value[i]);\n      if (normalized) {\n        res += normalized + \" \";\n      }\n    }\n  } else if (isObject(value)) {\n    for (const name in value) {\n      if (value[name]) {\n        res += name + \" \";\n      }\n    }\n  }\n  return res.trim();\n}\nfunction normalizeProps(props) {\n  if (!props) return null;\n  let { class: klass, style } = props;\n  if (klass && !isString(klass)) {\n    props.class = normalizeClass(klass);\n  }\n  if (style) {\n    props.style = normalizeStyle(style);\n  }\n  return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst MATH_TAGS = \"annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n  specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n  return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n  if (attrValidationCache.hasOwnProperty(name)) {\n    return attrValidationCache[name];\n  }\n  const isUnsafe = unsafeAttrCharRE.test(name);\n  if (isUnsafe) {\n    console.error(`unsafe attribute name: ${name}`);\n  }\n  return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n  acceptCharset: \"accept-charset\",\n  className: \"class\",\n  htmlFor: \"for\",\n  httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n  `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n  `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\nconst isKnownMathMLAttr = /* @__PURE__ */ makeMap(\n  `accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`\n);\nfunction isRenderableAttrValue(value) {\n  if (value == null) {\n    return false;\n  }\n  const type = typeof value;\n  return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n  const str = \"\" + string;\n  const match = escapeRE.exec(str);\n  if (!match) {\n    return str;\n  }\n  let html = \"\";\n  let escaped;\n  let index;\n  let lastIndex = 0;\n  for (index = match.index; index < str.length; index++) {\n    switch (str.charCodeAt(index)) {\n      case 34:\n        escaped = \"&quot;\";\n        break;\n      case 38:\n        escaped = \"&amp;\";\n        break;\n      case 39:\n        escaped = \"&#39;\";\n        break;\n      case 60:\n        escaped = \"&lt;\";\n        break;\n      case 62:\n        escaped = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    if (lastIndex !== index) {\n      html += str.slice(lastIndex, index);\n    }\n    lastIndex = index + 1;\n    html += escaped;\n  }\n  return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>|<!--|-->|--!>|<!-$/g;\nfunction escapeHtmlComment(src) {\n  return src.replace(commentStripRE, \"\");\n}\nconst cssVarNameEscapeSymbolsRE = /[ !\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~]/g;\nfunction getEscapedCssVarName(key, doubleEscape) {\n  return key.replace(\n    cssVarNameEscapeSymbolsRE,\n    (s) => doubleEscape ? s === '\"' ? '\\\\\\\\\\\\\"' : `\\\\\\\\${s}` : `\\\\${s}`\n  );\n}\n\nfunction looseCompareArrays(a, b) {\n  if (a.length !== b.length) return false;\n  let equal = true;\n  for (let i = 0; equal && i < a.length; i++) {\n    equal = looseEqual(a[i], b[i]);\n  }\n  return equal;\n}\nfunction looseEqual(a, b) {\n  if (a === b) return true;\n  let aValidType = isDate(a);\n  let bValidType = isDate(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? a.getTime() === b.getTime() : false;\n  }\n  aValidType = isSymbol(a);\n  bValidType = isSymbol(b);\n  if (aValidType || bValidType) {\n    return a === b;\n  }\n  aValidType = isArray(a);\n  bValidType = isArray(b);\n  if (aValidType || bValidType) {\n    return aValidType && bValidType ? looseCompareArrays(a, b) : false;\n  }\n  aValidType = isObject(a);\n  bValidType = isObject(b);\n  if (aValidType || bValidType) {\n    if (!aValidType || !bValidType) {\n      return false;\n    }\n    const aKeysCount = Object.keys(a).length;\n    const bKeysCount = Object.keys(b).length;\n    if (aKeysCount !== bKeysCount) {\n      return false;\n    }\n    for (const key in a) {\n      const aHasKey = a.hasOwnProperty(key);\n      const bHasKey = b.hasOwnProperty(key);\n      if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n  }\n  return String(a) === String(b);\n}\nfunction looseIndexOf(arr, val) {\n  return arr.findIndex((item) => looseEqual(item, val));\n}\n\nconst isRef = (val) => {\n  return !!(val && val[\"__v_isRef\"] === true);\n};\nconst toDisplayString = (val) => {\n  return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n  if (isRef(val)) {\n    return replacer(_key, val.value);\n  } else if (isMap(val)) {\n    return {\n      [`Map(${val.size})`]: [...val.entries()].reduce(\n        (entries, [key, val2], i) => {\n          entries[stringifySymbol(key, i) + \" =>\"] = val2;\n          return entries;\n        },\n        {}\n      )\n    };\n  } else if (isSet(val)) {\n    return {\n      [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))\n    };\n  } else if (isSymbol(val)) {\n    return stringifySymbol(val);\n  } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n    return String(val);\n  }\n  return val;\n};\nconst stringifySymbol = (v, i = \"\") => {\n  var _a;\n  return (\n    // Symbol.description in es2019+ so we need to cast here to pass\n    // the lib: es2016 check\n    isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v\n  );\n};\n\nfunction normalizeCssVarValue(value) {\n  if (value == null) {\n    return \"initial\";\n  }\n  if (typeof value === \"string\") {\n    return value === \"\" ? \" \" : value;\n  }\n  return String(value);\n}\n\nexports.EMPTY_ARR = EMPTY_ARR;\nexports.EMPTY_OBJ = EMPTY_OBJ;\nexports.NO = NO;\nexports.NOOP = NOOP;\nexports.PatchFlagNames = PatchFlagNames;\nexports.PatchFlags = PatchFlags;\nexports.ShapeFlags = ShapeFlags;\nexports.SlotFlags = SlotFlags;\nexports.camelize = camelize;\nexports.capitalize = capitalize;\nexports.cssVarNameEscapeSymbolsRE = cssVarNameEscapeSymbolsRE;\nexports.def = def;\nexports.escapeHtml = escapeHtml;\nexports.escapeHtmlComment = escapeHtmlComment;\nexports.extend = extend;\nexports.genCacheKey = genCacheKey;\nexports.genPropsAccessExp = genPropsAccessExp;\nexports.generateCodeFrame = generateCodeFrame;\nexports.getEscapedCssVarName = getEscapedCssVarName;\nexports.getGlobalThis = getGlobalThis;\nexports.hasChanged = hasChanged;\nexports.hasOwn = hasOwn;\nexports.hyphenate = hyphenate;\nexports.includeBooleanAttr = includeBooleanAttr;\nexports.invokeArrayFns = invokeArrayFns;\nexports.isArray = isArray;\nexports.isBooleanAttr = isBooleanAttr;\nexports.isBuiltInDirective = isBuiltInDirective;\nexports.isDate = isDate;\nexports.isFunction = isFunction;\nexports.isGloballyAllowed = isGloballyAllowed;\nexports.isGloballyWhitelisted = isGloballyWhitelisted;\nexports.isHTMLTag = isHTMLTag;\nexports.isIntegerKey = isIntegerKey;\nexports.isKnownHtmlAttr = isKnownHtmlAttr;\nexports.isKnownMathMLAttr = isKnownMathMLAttr;\nexports.isKnownSvgAttr = isKnownSvgAttr;\nexports.isMap = isMap;\nexports.isMathMLTag = isMathMLTag;\nexports.isModelListener = isModelListener;\nexports.isObject = isObject;\nexports.isOn = isOn;\nexports.isPlainObject = isPlainObject;\nexports.isPromise = isPromise;\nexports.isRegExp = isRegExp;\nexports.isRenderableAttrValue = isRenderableAttrValue;\nexports.isReservedProp = isReservedProp;\nexports.isSSRSafeAttrName = isSSRSafeAttrName;\nexports.isSVGTag = isSVGTag;\nexports.isSet = isSet;\nexports.isSpecialBooleanAttr = isSpecialBooleanAttr;\nexports.isString = isString;\nexports.isSymbol = isSymbol;\nexports.isVoidTag = isVoidTag;\nexports.looseEqual = looseEqual;\nexports.looseIndexOf = looseIndexOf;\nexports.looseToNumber = looseToNumber;\nexports.makeMap = makeMap;\nexports.normalizeClass = normalizeClass;\nexports.normalizeCssVarValue = normalizeCssVarValue;\nexports.normalizeProps = normalizeProps;\nexports.normalizeStyle = normalizeStyle;\nexports.objectToString = objectToString;\nexports.parseStringStyle = parseStringStyle;\nexports.propsToAttrMap = propsToAttrMap;\nexports.remove = remove;\nexports.slotFlagsText = slotFlagsText;\nexports.stringifyStyle = stringifyStyle;\nexports.toDisplayString = toDisplayString;\nexports.toHandlerKey = toHandlerKey;\nexports.toNumber = toNumber;\nexports.toRawType = toRawType;\nexports.toTypeString = toTypeString;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/shared.cjs.prod.js')\n} else {\n  module.exports = require('./dist/shared.cjs.js')\n}\n",null,null,null,null,"export type Pos = {\n  start: number;\n};\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nexport class Position {\n  line: number;\n  column: number;\n  index: number;\n\n  constructor(line: number, col: number, index: number) {\n    this.line = line;\n    this.column = col;\n    this.index = index;\n  }\n}\n\nexport class SourceLocation {\n  start: Position;\n  end: Position;\n  filename: string;\n  identifierName: string | undefined | null;\n\n  constructor(start: Position, end?: Position) {\n    this.start = start;\n    // (may start as null, but initialized later)\n    this.end = end;\n  }\n}\n\n/**\n * creates a new position with a non-zero column offset from the given position.\n * This function should be only be used when we create AST node out of the token\n * boundaries, such as TemplateElement ends before tt.templateNonTail. This\n * function does not skip whitespaces.\n */\nexport function createPositionWithColumnOffset(\n  position: Position,\n  columnOffset: number,\n) {\n  const { line, column, index } = position;\n  return new Position(line, column + columnOffset, index + columnOffset);\n}\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nconst code = \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\nexport default {\n  ImportMetaOutsideModule: {\n    message: `import.meta may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n  ImportOutsideModule: {\n    message: `'import' and 'export' may appear only with 'sourceType: \"module\"'`,\n    code,\n  },\n} satisfies ParseErrorTemplates;\n","const NodeDescriptions = {\n  ArrayPattern: \"array destructuring pattern\",\n  AssignmentExpression: \"assignment expression\",\n  AssignmentPattern: \"assignment expression\",\n  ArrowFunctionExpression: \"arrow function expression\",\n  ConditionalExpression: \"conditional expression\",\n  CatchClause: \"catch clause\",\n  ForOfStatement: \"for-of statement\",\n  ForInStatement: \"for-in statement\",\n  ForStatement: \"for-loop\",\n  FormalParameters: \"function parameter list\",\n  Identifier: \"identifier\",\n  ImportSpecifier: \"import specifier\",\n  ImportDefaultSpecifier: \"import default specifier\",\n  ImportNamespaceSpecifier: \"import namespace specifier\",\n  ObjectPattern: \"object destructuring pattern\",\n  ParenthesizedExpression: \"parenthesized expression\",\n  RestElement: \"rest element\",\n  UpdateExpression: {\n    true: \"prefix operation\",\n    false: \"postfix operation\",\n  },\n  VariableDeclarator: \"variable declaration\",\n  YieldExpression: \"yield expression\",\n};\n\ntype NodeTypesWithDescriptions = keyof Omit<\n  typeof NodeDescriptions,\n  \"UpdateExpression\"\n>;\n\ntype NodeWithDescription =\n  | {\n      type: \"UpdateExpression\";\n      prefix: boolean;\n    }\n  | {\n      type: NodeTypesWithDescriptions;\n    };\n\nconst toNodeDescription = (node: NodeWithDescription) =>\n  node.type === \"UpdateExpression\"\n    ? NodeDescriptions.UpdateExpression[`${node.prefix}`]\n    : NodeDescriptions[node.type];\n\nexport default toNodeDescription;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport type LValAncestor =\n  | { type: \"UpdateExpression\"; prefix: boolean }\n  | {\n      type:\n        | \"ArrayPattern\"\n        | \"AssignmentExpression\"\n        | \"CatchClause\"\n        | \"ForOfStatement\"\n        | \"FormalParameters\"\n        | \"ForInStatement\"\n        | \"ForStatement\"\n        | \"ImportSpecifier\"\n        | \"ImportNamespaceSpecifier\"\n        | \"ImportDefaultSpecifier\"\n        | \"ParenthesizedExpression\"\n        | \"ObjectPattern\"\n        | \"RestElement\"\n        | \"VariableDeclarator\";\n    };\n\nexport default {\n  AccessorIsGenerator: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `A ${kind}ter cannot be a generator.`,\n  ArgumentsInClass:\n    \"'arguments' is only allowed in functions and class methods.\",\n  AsyncFunctionInSingleStatementContext:\n    \"Async functions can only be declared at the top level or inside a block.\",\n  AwaitBindingIdentifier:\n    \"Can not use 'await' as identifier inside an async function.\",\n  AwaitBindingIdentifierInStaticBlock:\n    \"Can not use 'await' as identifier inside a static block.\",\n  AwaitExpressionFormalParameter:\n    \"'await' is not allowed in async function parameters.\",\n  AwaitUsingNotInAsyncContext:\n    \"'await using' is only allowed within async functions and at the top levels of modules.\",\n  AwaitNotInAsyncContext:\n    \"'await' is only allowed within async functions and at the top levels of modules.\",\n  BadGetterArity: \"A 'get' accessor must not have any formal parameters.\",\n  BadSetterArity: \"A 'set' accessor must have exactly one formal parameter.\",\n  BadSetterRestParameter:\n    \"A 'set' accessor function argument must not be a rest parameter.\",\n  ConstructorClassField: \"Classes may not have a field named 'constructor'.\",\n  ConstructorClassPrivateField:\n    \"Classes may not have a private field named '#constructor'.\",\n  ConstructorIsAccessor: \"Class constructor may not be an accessor.\",\n  ConstructorIsAsync: \"Constructor can't be an async function.\",\n  ConstructorIsGenerator: \"Constructor can't be a generator.\",\n  DeclarationMissingInitializer: ({\n    kind,\n  }: {\n    kind: \"await using\" | \"const\" | \"destructuring\" | \"using\";\n  }) => `Missing initializer in ${kind} declaration.`,\n  DecoratorArgumentsOutsideParentheses:\n    \"Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.\",\n  DecoratorBeforeExport:\n    \"Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.\",\n  DecoratorsBeforeAfterExport:\n    \"Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.\",\n  DecoratorConstructor:\n    \"Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?\",\n  DecoratorExportClass:\n    \"Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.\",\n  DecoratorSemicolon: \"Decorators must not be followed by a semicolon.\",\n  DecoratorStaticBlock: \"Decorators can't be used with a static block.\",\n  DeferImportRequiresNamespace:\n    'Only `import defer * as x from \"./module\"` is valid.',\n  DeletePrivateField: \"Deleting a private field is not allowed.\",\n  DestructureNamedImport:\n    \"ES2015 named imports do not destructure. Use another statement for destructuring after the import.\",\n  DuplicateConstructor: \"Duplicate constructor in the same class.\",\n  DuplicateDefaultExport: \"Only one default export allowed per module.\",\n  DuplicateExport: ({ exportName }: { exportName: string }) =>\n    `\\`${exportName}\\` has already been exported. Exported identifiers must be unique.`,\n  DuplicateProto: \"Redefinition of __proto__ property.\",\n  DuplicateRegExpFlags: \"Duplicate regular expression flag.\",\n  ElementAfterRest: \"Rest element must be last element.\",\n  EscapedCharNotAnIdentifier: \"Invalid Unicode escape.\",\n  ExportBindingIsString: ({\n    localName,\n    exportName,\n  }: {\n    localName: string;\n    exportName: string;\n  }) =>\n    `A string literal cannot be used as an exported binding without \\`from\\`.\\n- Did you mean \\`export { '${localName}' as '${exportName}' } from 'some-module'\\`?`,\n  ExportDefaultFromAsIdentifier:\n    \"'from' is not allowed as an identifier after 'export default'.\",\n\n  ForInOfLoopInitializer: ({\n    type,\n  }: {\n    type: \"ForInStatement\" | \"ForOfStatement\";\n  }) =>\n    `'${\n      type === \"ForInStatement\" ? \"for-in\" : \"for-of\"\n    }' loop variable declaration may not have an initializer.`,\n  ForInUsing: \"For-in loop may not start with 'using' declaration.\",\n\n  ForOfAsync: \"The left-hand side of a for-of loop may not be 'async'.\",\n  ForOfLet: \"The left-hand side of a for-of loop may not start with 'let'.\",\n  GeneratorInSingleStatementContext:\n    \"Generators can only be declared at the top level or inside a block.\",\n\n  IllegalBreakContinue: ({\n    type,\n  }: {\n    type: \"BreakStatement\" | \"ContinueStatement\";\n  }) => `Unsyntactic ${type === \"BreakStatement\" ? \"break\" : \"continue\"}.`,\n\n  IllegalLanguageModeDirective:\n    \"Illegal 'use strict' directive in function with non-simple parameter list.\",\n  IllegalReturn: \"'return' outside of function.\",\n  ImportAttributesUseAssert:\n    \"The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedImportAssert` parser plugin to suppress this error.\",\n  ImportBindingIsString: ({ importName }: { importName: string }) =>\n    `A string literal cannot be used as an imported binding.\\n- Did you mean \\`import { \"${importName}\" as foo }\\`?`,\n  ImportCallArity: `\\`import()\\` requires exactly one or two arguments.`,\n  ImportCallNotNewExpression: \"Cannot use new with import(...).\",\n  ImportCallSpreadArgument: \"`...` is not allowed in `import()`.\",\n  ImportJSONBindingNotDefault:\n    \"A JSON module can only be imported with `default`.\",\n  ImportReflectionHasAssertion: \"`import module x` cannot have assertions.\",\n  ImportReflectionNotBinding:\n    'Only `import module x from \"./module\"` is valid.',\n  IncompatibleRegExpUVFlags:\n    \"The 'u' and 'v' regular expression flags cannot be enabled at the same time.\",\n  InvalidBigIntLiteral: \"Invalid BigIntLiteral.\",\n  InvalidCodePoint: \"Code point out of bounds.\",\n  InvalidCoverDiscardElement:\n    \"'void' must be followed by an expression when not used in a binding position.\",\n  InvalidCoverInitializedName: \"Invalid shorthand property initializer.\",\n  InvalidDecimal: \"Invalid decimal.\",\n  InvalidDigit: ({ radix }: { radix: number }) =>\n    `Expected number in radix ${radix}.`,\n  InvalidEscapeSequence: \"Bad character escape sequence.\",\n  InvalidEscapeSequenceTemplate: \"Invalid escape sequence in template.\",\n  InvalidEscapedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Escape sequence in keyword ${reservedWord}.`,\n  InvalidIdentifier: ({ identifierName }: { identifierName: string }) =>\n    `Invalid identifier ${identifierName}.`,\n  InvalidLhs: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsBinding: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,\n  InvalidLhsOptionalChaining: ({ ancestor }: { ancestor: LValAncestor }) =>\n    `Invalid optional chaining in the left-hand side of ${toNodeDescription(\n      ancestor,\n    )}.`,\n  InvalidNumber: \"Invalid number.\",\n  InvalidOrMissingExponent:\n    \"Floating-point numbers require a valid exponent after the 'e'.\",\n  InvalidOrUnexpectedToken: ({ unexpected }: { unexpected: string }) =>\n    `Unexpected character '${unexpected}'.`,\n  InvalidParenthesizedAssignment: \"Invalid parenthesized assignment pattern.\",\n  InvalidPrivateFieldResolution: ({\n    identifierName,\n  }: {\n    identifierName: string;\n  }) => `Private name #${identifierName} is not defined.`,\n  InvalidPropertyBindingPattern: \"Binding member expression.\",\n  InvalidRecordProperty:\n    \"Only properties and spread elements are allowed in record definitions.\",\n  InvalidRestAssignmentPattern: \"Invalid rest operator's argument.\",\n  LabelRedeclaration: ({ labelName }: { labelName: string }) =>\n    `Label '${labelName}' is already declared.`,\n  LetInLexicalBinding: \"'let' is disallowed as a lexically bound name.\",\n  LineTerminatorBeforeArrow: \"No line break is allowed before '=>'.\",\n  MalformedRegExpFlags: \"Invalid regular expression flag.\",\n  MissingClassName: \"A class name is required.\",\n  MissingEqInAssignment:\n    \"Only '=' operator can be used for specifying default value.\",\n  MissingSemicolon: \"Missing semicolon.\",\n  MissingPlugin: ({ missingPlugin }: { missingPlugin: [string] }) =>\n    `This experimental syntax requires enabling the parser plugin: ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  // FIXME: Would be nice to make this \"missingPlugins\" instead.\n  // Also, seems like we can drop the \"(s)\" from the message and just make it \"s\".\n  MissingOneOfPlugins: ({ missingPlugin }: { missingPlugin: string[] }) =>\n    `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin\n      .map(name => JSON.stringify(name))\n      .join(\", \")}.`,\n  MissingUnicodeEscape: \"Expecting Unicode escape sequence \\\\uXXXX.\",\n  MixingCoalesceWithLogical:\n    \"Nullish coalescing operator(??) requires parens when mixing with logical operators.\",\n  ModuleAttributeDifferentFromType:\n    \"The only accepted module attribute is `type`.\",\n  ModuleAttributeInvalidValue:\n    \"Only string literals are allowed as module attribute values.\",\n  ModuleAttributesWithDuplicateKeys: ({ key }: { key: string }) =>\n    `Duplicate key \"${key}\" is not allowed in module attributes.`,\n  ModuleExportNameHasLoneSurrogate: ({\n    surrogateCharCode,\n  }: {\n    surrogateCharCode: number;\n  }) =>\n    `An export name cannot include a lone surrogate, found '\\\\u${surrogateCharCode.toString(\n      16,\n    )}'.`,\n  ModuleExportUndefined: ({ localName }: { localName: string }) =>\n    `Export '${localName}' is not defined.`,\n  MultipleDefaultsInSwitch: \"Multiple default clauses.\",\n  NewlineAfterThrow: \"Illegal newline after throw.\",\n  NoCatchOrFinally: \"Missing catch or finally clause.\",\n  NumberIdentifier: \"Identifier directly after number.\",\n  NumericSeparatorInEscapeSequence:\n    \"Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.\",\n  ObsoleteAwaitStar:\n    \"'await*' has been removed from the async functions proposal. Use Promise.all() instead.\",\n  OptionalChainingNoNew:\n    \"Constructors in/after an Optional Chain are not allowed.\",\n  OptionalChainingNoTemplate:\n    \"Tagged Template Literals are not allowed in optionalChain.\",\n  OverrideOnConstructor:\n    \"'override' modifier cannot appear on a constructor declaration.\",\n  ParamDupe: \"Argument name clash.\",\n  PatternHasAccessor: \"Object pattern can't contain getter or setter.\",\n  PatternHasMethod: \"Object pattern can't contain methods.\",\n  PrivateInExpectedIn: ({ identifierName }: { identifierName: string }) =>\n    `Private names are only allowed in property accesses (\\`obj.#${identifierName}\\`) or in \\`in\\` expressions (\\`#${identifierName} in obj\\`).`,\n  PrivateNameRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Duplicate private name #${identifierName}.`,\n  RecordExpressionBarIncorrectEndSyntaxType:\n    \"Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionBarIncorrectStartSyntaxType:\n    \"Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  RecordExpressionHashIncorrectStartSyntaxType:\n    \"Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  RecordNoProto: \"'__proto__' is not allowed in Record expressions.\",\n  RestTrailingComma: \"Unexpected trailing comma after rest element.\",\n  SloppyFunction:\n    \"In non-strict mode code, functions can only be declared at top level or inside a block.\",\n  SloppyFunctionAnnexB:\n    \"In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.\",\n  SourcePhaseImportRequiresDefault:\n    'Only `import source x from \"./module\"` is valid.',\n  StaticPrototype: \"Classes may not have static property named prototype.\",\n  SuperNotAllowed:\n    \"`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?\",\n  SuperPrivateField: \"Private fields can't be accessed on super.\",\n  TrailingDecorator: \"Decorators must be attached to a class element.\",\n  TupleExpressionBarIncorrectEndSyntaxType:\n    \"Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionBarIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.\",\n  TupleExpressionHashIncorrectStartSyntaxType:\n    \"Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.\",\n  UnexpectedArgumentPlaceholder: \"Unexpected argument placeholder.\",\n  UnexpectedAwaitAfterPipelineBody:\n    'Unexpected \"await\" after pipeline body; await must have parentheses in minimal proposal.',\n  UnexpectedDigitAfterHash: \"Unexpected digit after hash token.\",\n  UnexpectedImportExport:\n    \"'import' and 'export' may only appear at the top level.\",\n  UnexpectedKeyword: ({ keyword }: { keyword: string }) =>\n    `Unexpected keyword '${keyword}'.`,\n  UnexpectedLeadingDecorator:\n    \"Leading decorators must be attached to a class declaration.\",\n  UnexpectedLexicalDeclaration:\n    \"Lexical declaration cannot appear in a single-statement context.\",\n  UnexpectedNewTarget:\n    \"`new.target` can only be used in functions or class properties.\",\n  UnexpectedNumericSeparator:\n    \"A numeric separator is only allowed between two digits.\",\n  UnexpectedPrivateField: \"Unexpected private name.\",\n  UnexpectedReservedWord: ({ reservedWord }: { reservedWord: string }) =>\n    `Unexpected reserved word '${reservedWord}'.`,\n  UnexpectedSuper: \"'super' is only allowed in object methods and classes.\",\n  UnexpectedToken: ({\n    expected,\n    unexpected,\n  }: {\n    expected?: string | null;\n    unexpected?: string | null;\n  }) =>\n    `Unexpected token${unexpected ? ` '${unexpected}'.` : \"\"}${\n      expected ? `, expected \"${expected}\"` : \"\"\n    }`,\n  UnexpectedTokenUnaryExponentiation:\n    \"Illegal expression. Wrap left hand side or entire exponentiation in parentheses.\",\n  UnexpectedUsingDeclaration:\n    \"Using declaration cannot appear in the top level when source type is `script` or in the bare case statement.\",\n  UnexpectedVoidPattern: \"Unexpected void binding.\",\n  UnsupportedBind: \"Binding should be performed on object property.\",\n  UnsupportedDecoratorExport:\n    \"A decorated export must export a class declaration.\",\n  UnsupportedDefaultExport:\n    \"Only expressions, functions or classes are allowed as the `default` export.\",\n  UnsupportedImport:\n    \"`import` can only be used in `import()` or `import.meta`.\",\n  UnsupportedMetaProperty: ({\n    target,\n    onlyValidPropertyName,\n  }: {\n    target: string;\n    onlyValidPropertyName: string;\n  }) =>\n    `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,\n  UnsupportedParameterDecorator:\n    \"Decorators cannot be used to decorate parameters.\",\n  UnsupportedPropertyDecorator:\n    \"Decorators cannot be used to decorate object literal properties.\",\n  UnsupportedSuper:\n    \"'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).\",\n  UnterminatedComment: \"Unterminated comment.\",\n  UnterminatedRegExp: \"Unterminated regular expression.\",\n  UnterminatedString: \"Unterminated string constant.\",\n  UnterminatedTemplate: \"Unterminated template.\",\n  UsingDeclarationExport: \"Using declaration cannot be exported.\",\n  UsingDeclarationHasBindingPattern:\n    \"Using declaration cannot have destructuring patterns.\",\n  VarRedeclaration: ({ identifierName }: { identifierName: string }) =>\n    `Identifier '${identifierName}' has already been declared.`,\n  VoidPatternCatchClauseParam:\n    \"A void binding can not be the catch clause parameter. Use `try { ... } catch { ... }` if you want to discard the caught error.\",\n  VoidPatternInitializer: \"A void binding may not have an initializer.\",\n  YieldBindingIdentifier:\n    \"Can not use 'yield' as identifier inside a generator.\",\n  YieldInParameter: \"Yield expression is not allowed in formal parameters.\",\n  YieldNotInGeneratorFunction:\n    \"'yield' is only allowed within generator functions.\",\n  ZeroDigitNumericSeparator:\n    \"Numeric separator can not be used after leading 0.\",\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error\";\n\nexport default {\n  StrictDelete: \"Deleting local variable in strict mode.\",\n\n  // `referenceName` is the StringValue[1] of an IdentifierReference[2], which\n  // is represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-IdentifierReference\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArguments: ({ referenceName }: { referenceName: string }) =>\n    `Assigning to '${referenceName}' in strict mode.`,\n\n  // `bindingName` is the StringValue[1] of a BindingIdentifier[2], which is\n  // represented as just an `Identifier`[3] in the Babel AST.\n  // 1. https://tc39.es/ecma262/#sec-static-semantics-stringvalue\n  // 2. https://tc39.es/ecma262/#prod-BindingIdentifier\n  // 3. https://github.com/babel/babel/blob/main/packages/babel-parser/ast/spec.md#identifier\n  StrictEvalArgumentsBinding: ({ bindingName }: { bindingName: string }) =>\n    `Binding '${bindingName}' in strict mode.`,\n\n  StrictFunction:\n    \"In strict mode code, functions can only be declared at top level or inside a block.\",\n\n  StrictNumericEscape: \"The only valid numeric escape in strict mode is '\\\\0'.\",\n\n  StrictOctalLiteral: \"Legacy octal literals are not allowed in strict mode.\",\n\n  StrictWith: \"'with' in strict mode.\",\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\n\nexport default {\n  ParseExpressionEmptyInput:\n    \"Unexpected parseExpression() input: The input is empty or contains only comments.\",\n  ParseExpressionExpectsEOF: ({ unexpected }: { unexpected: number }) =>\n    `Unexpected parseExpression() input: The input should contain exactly one expression, but the first expression is followed by the unexpected character \\`${String.fromCodePoint(unexpected)}\\`.`,\n} satisfies ParseErrorTemplates;\n","import type { ParseErrorTemplates } from \"../parse-error.ts\";\nimport toNodeDescription from \"./to-node-description.ts\";\n\nexport const UnparenthesizedPipeBodyDescriptions = new Set([\n  \"ArrowFunctionExpression\",\n  \"AssignmentExpression\",\n  \"ConditionalExpression\",\n  \"YieldExpression\",\n] as const);\n\ntype GetSetMemberType<T extends Set<any>> =\n  T extends Set<infer M> ? M : unknown;\n\nexport type UnparenthesizedPipeBodyTypes = GetSetMemberType<\n  typeof UnparenthesizedPipeBodyDescriptions\n>;\n\nexport default {\n  // This error is only used by the smart-mix proposal\n  PipeBodyIsTighter:\n    \"Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.\",\n  PipeTopicRequiresHackPipes: process.env.BABEL_8_BREAKING\n    ? 'Topic references are only supported when using the `\"proposal\": \"hack\"` version of the pipeline proposal.'\n    : 'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n  PipeTopicUnbound:\n    \"Topic reference is unbound; it must be inside a pipe body.\",\n  PipeTopicUnconfiguredToken: ({ token }: { token: string }) =>\n    `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { \"proposal\": \"hack\", \"topicToken\": \"${token}\" }.`,\n  PipeTopicUnused:\n    \"Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.\",\n  PipeUnparenthesizedBody: ({ type }: { type: UnparenthesizedPipeBodyTypes }) =>\n    `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({\n      type,\n    })}; please wrap it in parentheses.`,\n\n  ...(process.env.BABEL_8_BREAKING\n    ? {}\n    : {\n        // Messages whose codes start with “Pipeline” or “PrimaryTopic”\n        // are retained for backwards compatibility\n        // with the deprecated smart-mix pipe operator proposal plugin.\n        // They are subject to removal in a future major version.\n        PipelineBodyNoArrow:\n          'Unexpected arrow \"=>\" after pipeline body; arrow function in pipeline body must be parenthesized.',\n        PipelineBodySequenceExpression:\n          \"Pipeline body may not be a comma-separated sequence expression.\",\n        PipelineHeadSequenceExpression:\n          \"Pipeline head should not be a comma-separated sequence expression.\",\n        PipelineTopicUnused:\n          \"Pipeline is in topic style but does not use topic reference.\",\n        PrimaryTopicNotAllowed:\n          \"Topic reference was used in a lexical context without topic binding.\",\n        PrimaryTopicRequiresSmartPipeline:\n          'Topic reference is used, but the pipelineOperator plugin was not passed a \"proposal\": \"hack\" or \"smart\" option.',\n      }),\n} satisfies ParseErrorTemplates;\n","import { Position } from \"./util/location.ts\";\n\ntype SyntaxPlugin =\n  | \"flow\"\n  | \"typescript\"\n  | \"jsx\"\n  | \"pipelineOperator\"\n  | \"placeholders\";\n\ntype ParseErrorCode =\n  | \"BABEL_PARSER_SYNTAX_ERROR\"\n  | \"BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED\";\n\n// Babel uses \"normal\" SyntaxErrors for it's errors, but adds some extra\n// functionality. This functionality is defined in the\n// `ParseErrorSpecification` interface below. We may choose to change to someday\n// give our errors their own full-blown class, but until then this allow us to\n// keep all the desirable properties of SyntaxErrors (like their name in stack\n// traces, etc.), and also allows us to punt on any publicly facing\n// class-hierarchy decisions until Babel 8.\ninterface ParseErrorSpecification<ErrorDetails> {\n  // Look, these *could* be readonly, but then Flow complains when we initially\n  // set them. We could do a whole dance and make a special interface that's not\n  // readonly for when we create the error, then cast it to the readonly\n  // interface for public use, but the previous implementation didn't have them\n  // as readonly, so let's just not worry about it for now.\n  code: ParseErrorCode;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  missingPlugin?: string | string[];\n  loc: Position;\n  details: ErrorDetails;\n\n  // We should consider removing this as it now just contains the same\n  // information as `loc.index`.\n  pos: number;\n}\n\nexport type ParseError<ErrorDetails> = SyntaxError &\n  ParseErrorSpecification<ErrorDetails>;\n\n// By `ParseErrorConstructor`, we mean something like the new-less style\n// `ErrorConstructor`[1], since `ParseError`'s are not themselves actually\n// separate classes from `SyntaxError`'s.\n//\n// 1. https://github.com/microsoft/TypeScript/blob/v4.5.5/lib/lib.es5.d.ts#L1027\nexport type ParseErrorConstructor<ErrorDetails> = (\n  loc: Position,\n  details: ErrorDetails,\n) => ParseError<ErrorDetails>;\n\ntype ToMessage<ErrorDetails> = (self: ErrorDetails) => string;\n\ntype ParseErrorCredentials<ErrorDetails> = {\n  code: string;\n  reasonCode: string;\n  syntaxPlugin?: SyntaxPlugin;\n  toMessage: ToMessage<ErrorDetails>;\n};\n\nfunction defineHidden(obj: object, key: string, value: unknown) {\n  Object.defineProperty(obj, key, {\n    enumerable: false,\n    configurable: true,\n    value,\n  });\n}\n\nfunction toParseErrorConstructor<ErrorDetails extends object>({\n  toMessage,\n  code,\n  reasonCode,\n  syntaxPlugin,\n}: ParseErrorCredentials<ErrorDetails>): ParseErrorConstructor<ErrorDetails> {\n  const hasMissingPlugin =\n    reasonCode === \"MissingPlugin\" || reasonCode === \"MissingOneOfPlugins\";\n\n  if (!process.env.BABEL_8_BREAKING) {\n    const oldReasonCodes: Record<string, string> = {\n      AccessorCannotDeclareThisParameter: \"AccesorCannotDeclareThisParameter\",\n      AccessorCannotHaveTypeParameters: \"AccesorCannotHaveTypeParameters\",\n      ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n        \"ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference\",\n      SetAccessorCannotHaveOptionalParameter:\n        \"SetAccesorCannotHaveOptionalParameter\",\n      SetAccessorCannotHaveRestParameter: \"SetAccesorCannotHaveRestParameter\",\n      SetAccessorCannotHaveReturnType: \"SetAccesorCannotHaveReturnType\",\n    };\n    if (oldReasonCodes[reasonCode]) {\n      reasonCode = oldReasonCodes[reasonCode];\n    }\n  }\n\n  return function constructor(loc: Position, details: ErrorDetails) {\n    const error: ParseError<ErrorDetails> = new SyntaxError() as any;\n\n    error.code = code as ParseErrorCode;\n    error.reasonCode = reasonCode;\n    error.loc = loc;\n    error.pos = loc.index;\n\n    error.syntaxPlugin = syntaxPlugin;\n    if (hasMissingPlugin) {\n      error.missingPlugin = (details as any).missingPlugin;\n    }\n\n    type Overrides = {\n      loc?: Position;\n      details?: ErrorDetails;\n    };\n    defineHidden(error, \"clone\", function clone(overrides: Overrides = {}) {\n      const { line, column, index } = overrides.loc ?? loc;\n      return constructor(new Position(line, column, index), {\n        ...details,\n        ...overrides.details,\n      });\n    });\n\n    defineHidden(error, \"details\", details);\n\n    Object.defineProperty(error, \"message\", {\n      configurable: true,\n      get(this: ParseError<ErrorDetails>): string {\n        const message = `${toMessage(details)} (${loc.line}:${loc.column})`;\n        this.message = message;\n        return message;\n      },\n      set(value: string) {\n        Object.defineProperty(this, \"message\", { value, writable: true });\n      },\n    });\n\n    return error;\n  };\n}\n\ntype ParseErrorTemplate =\n  | string\n  | ToMessage<any>\n  | { message: string | ToMessage<any>; code?: ParseErrorCode };\n\nexport type ParseErrorTemplates = { [reasonCode: string]: ParseErrorTemplate };\n\n// This is the templated form of `ParseErrorEnum`.\n//\n// Note: We could factor out the return type calculation into something like\n// `ParseErrorConstructor<T extends ParseErrorTemplates>`, and then we could\n// reuse it in the non-templated form of `ParseErrorEnum`, but TypeScript\n// doesn't seem to drill down that far when showing you the computed type of\n// an object in an editor, so we'll leave it inlined for now.\nexport function ParseErrorEnum(a: TemplateStringsArray): <\n  T extends ParseErrorTemplates,\n>(\n  parseErrorTemplates: T,\n) => {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\nexport function ParseErrorEnum<T extends ParseErrorTemplates>(\n  parseErrorTemplates: T,\n  syntaxPlugin?: SyntaxPlugin,\n): {\n  [K in keyof T]: ParseErrorConstructor<\n    T[K] extends { message: string | ToMessage<any> }\n      ? T[K][\"message\"] extends ToMessage<any>\n        ? Parameters<T[K][\"message\"]>[0]\n        : object\n      : T[K] extends ToMessage<any>\n        ? Parameters<T[K]>[0]\n        : object\n  >;\n};\n\n// You call `ParseErrorEnum` with a mapping from `ReasonCode`'s to either:\n//\n// 1. a static error message,\n// 2. `toMessage` functions that define additional necessary `details` needed by\n//    the `ParseError`, or\n// 3. Objects that contain a `message` of one of the above and overridden `code`\n//    and/or `reasonCode`:\n//\n// ParseErrorEnum `optionalSyntaxPlugin` ({\n//   ErrorWithStaticMessage: \"message\",\n//   ErrorWithDynamicMessage: ({ type } : { type: string }) => `${type}`),\n//   ErrorWithOverriddenCodeAndOrReasonCode: {\n//     message: ({ type }: { type: string }) => `${type}`),\n//     code: \"AN_ERROR_CODE\",\n//     ...(BABEL_8_BREAKING ? { } : { reasonCode: \"CustomErrorReasonCode\" })\n//   }\n// });\n//\nexport function ParseErrorEnum(\n  argument: TemplateStringsArray | ParseErrorTemplates,\n  syntaxPlugin?: SyntaxPlugin,\n) {\n  // If the first parameter is an array, that means we were called with a tagged\n  // template literal. Extract the syntaxPlugin from this, and call again in\n  // the \"normalized\" form.\n  if (Array.isArray(argument)) {\n    return (parseErrorTemplates: ParseErrorTemplates) =>\n      ParseErrorEnum(parseErrorTemplates, argument[0]);\n  }\n\n  const ParseErrorConstructors = {} as Record<\n    string,\n    ParseErrorConstructor<unknown>\n  >;\n\n  for (const reasonCode of Object.keys(argument)) {\n    const template = (argument as ParseErrorTemplates)[reasonCode];\n    const { message, ...rest } =\n      typeof template === \"string\"\n        ? { message: () => template }\n        : typeof template === \"function\"\n          ? { message: template }\n          : template;\n    const toMessage = typeof message === \"string\" ? () => message : message;\n\n    ParseErrorConstructors[reasonCode] = toParseErrorConstructor({\n      code: \"BABEL_PARSER_SYNTAX_ERROR\",\n      reasonCode,\n      toMessage,\n      ...(syntaxPlugin ? { syntaxPlugin } : {}),\n      ...rest,\n    });\n  }\n\n  return ParseErrorConstructors;\n}\n\nimport ModuleErrors from \"./parse-error/module-errors.ts\";\nimport StandardErrors from \"./parse-error/standard-errors.ts\";\nimport StrictModeErrors from \"./parse-error/strict-mode-errors.ts\";\nimport ParseExpressionErrors from \"./parse-error/parse-expression-errors.ts\";\nimport PipelineOperatorErrors from \"./parse-error/pipeline-operator-errors.ts\";\n\nexport const Errors = {\n  ...ParseErrorEnum(ModuleErrors),\n  ...ParseErrorEnum(StandardErrors),\n  ...ParseErrorEnum(StrictModeErrors),\n  ...ParseErrorEnum(ParseExpressionErrors),\n  ...ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors),\n};\n\nexport type { LValAncestor } from \"./parse-error/standard-errors.ts\";\n","import type { Plugin } from \"./plugin-utils.ts\";\n\n// A second optional argument can be given to further configure\n// the parser process. These options are recognized:\n\nexport type SourceType = \"script\" | \"commonjs\" | \"module\" | \"unambiguous\";\n\nexport interface Options {\n  /**\n   * By default, import and export declarations can only appear at a program's top level.\n   * Setting this option to true allows them anywhere where a statement is allowed.\n   */\n  allowImportExportEverywhere?: boolean;\n\n  /**\n   * By default, await use is not allowed outside of an async function.\n   * Set this to true to accept such code.\n   */\n  allowAwaitOutsideFunction?: boolean;\n\n  /**\n   * By default, a return statement at the top level raises an error.\n   * Set this to true to accept such code.\n   */\n  allowReturnOutsideFunction?: boolean;\n\n  /**\n   * By default, new.target use is not allowed outside of a function or class.\n   * Set this to true to accept such code.\n   */\n  allowNewTargetOutsideFunction?: boolean;\n\n  allowSuperOutsideMethod?: boolean;\n\n  /**\n   * By default, exported identifiers must refer to a declared variable.\n   * Set this to true to allow export statements to reference undeclared variables.\n   */\n  allowUndeclaredExports?: boolean;\n\n  /**\n   * By default, yield use is not allowed outside of a generator function.\n   * Set this to true to accept such code.\n   */\n\n  allowYieldOutsideFunction?: boolean;\n\n  /**\n   * By default, Babel parser JavaScript code according to Annex B syntax.\n   * Set this to `false` to disable such behavior.\n   */\n  annexB?: boolean;\n\n  /**\n   * By default, Babel attaches comments to adjacent AST nodes.\n   * When this option is set to false, comments are not attached.\n   * It can provide up to 30% performance improvement when the input code has many comments.\n   * @babel/eslint-parser will set it for you.\n   * It is not recommended to use attachComment: false with Babel transform,\n   * as doing so removes all the comments in output code, and renders annotations such as\n   * /* istanbul ignore next *\\/ nonfunctional.\n   */\n  attachComment?: boolean;\n\n  /**\n   * By default, Babel always throws an error when it finds some invalid code.\n   * When this option is set to true, it will store the parsing error and\n   * try to continue parsing the invalid input file.\n   */\n  errorRecovery?: boolean;\n\n  /**\n   * Indicate the mode the code should be parsed in.\n   * Can be one of \"script\", \"commonjs\", \"module\", or \"unambiguous\". Defaults to \"script\".\n   * \"unambiguous\" will make @babel/parser attempt to guess, based on the presence\n   * of ES6 import or export statements.\n   * Files with ES6 imports and exports are considered \"module\" and are otherwise \"script\".\n   *\n   * Use \"commonjs\" to parse code that is intended to be run in a CommonJS environment such as Node.js.\n   */\n  sourceType?: SourceType;\n\n  /**\n   * Correlate output AST nodes with their source filename.\n   * Useful when generating code and source maps from the ASTs of multiple input files.\n   */\n  sourceFilename?: string;\n\n  /**\n   * By default, all source indexes start from 0.\n   * You can provide a start index to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startIndex?: number;\n\n  /**\n   * By default, the first line of code parsed is treated as line 1.\n   * You can provide a line number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startLine?: number;\n\n  /**\n   * By default, the parsed code is treated as if it starts from line 1, column 0.\n   * You can provide a column number to alternatively start with.\n   * Useful for integration with other source tools.\n   */\n  startColumn?: number;\n\n  /**\n   * Array containing the plugins that you want to enable.\n   */\n  plugins?: Plugin[];\n\n  /**\n   * Should the parser work in strict mode.\n   * Defaults to true if sourceType === 'module'. Otherwise, false.\n   */\n  strictMode?: boolean;\n\n  /**\n   * Adds a ranges property to each node: [node.start, node.end]\n   */\n  ranges?: boolean;\n\n  /**\n   * Adds all parsed tokens to a tokens property on the File node.\n   */\n  tokens?: boolean;\n\n  /**\n   * By default, the parser adds information about parentheses by setting\n   * `extra.parenthesized` to `true` as needed.\n   * When this option is `true` the parser creates `ParenthesizedExpression`\n   * AST nodes instead of using the `extra` property.\n   */\n  createParenthesizedExpressions?: boolean;\n\n  /**\n   * The default is false in Babel 7 and true in Babel 8\n   * Set this to true to parse it as an `ImportExpression` node.\n   * Otherwise `import(foo)` is parsed as `CallExpression(Import, [Identifier(foo)])`.\n   */\n  createImportExpressions?: boolean;\n}\n\nexport const enum OptionFlags {\n  AllowAwaitOutsideFunction = 1 << 0,\n  AllowReturnOutsideFunction = 1 << 1,\n  AllowNewTargetOutsideFunction = 1 << 2,\n  AllowImportExportEverywhere = 1 << 3,\n  AllowSuperOutsideMethod = 1 << 4,\n  AllowYieldOutsideFunction = 1 << 5,\n  AllowUndeclaredExports = 1 << 6,\n  Ranges = 1 << 7,\n  Tokens = 1 << 8,\n  CreateImportExpressions = 1 << 9,\n  CreateParenthesizedExpressions = 1 << 10,\n  ErrorRecovery = 1 << 11,\n  AttachComment = 1 << 12,\n  AnnexB = 1 << 13,\n}\n\ntype OptionsWithDefaults = Required<Options>;\n\nfunction createDefaultOptions(): OptionsWithDefaults {\n  return {\n    // Source type (\"script\" or \"module\") for different semantics\n    sourceType: \"script\",\n    // Source filename.\n    sourceFilename: undefined,\n    // Index (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startIndex: 0,\n    // Column (0-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startColumn: 0,\n    // Line (1-based) from which to start counting source. Useful for\n    // integration with other tools.\n    startLine: 1,\n    // When enabled, await at the top level is not considered an\n    // error.\n    allowAwaitOutsideFunction: false,\n    // When enabled, a return at the top level is not considered an\n    // error.\n    allowReturnOutsideFunction: false,\n    // When enabled, new.target outside a function or class is not\n    // considered an error.\n    allowNewTargetOutsideFunction: false,\n    // When enabled, import/export statements are not constrained to\n    // appearing at the top of the program.\n    allowImportExportEverywhere: false,\n    // TODO\n    allowSuperOutsideMethod: false,\n    // When enabled, export statements can reference undeclared variables.\n    allowUndeclaredExports: false,\n    allowYieldOutsideFunction: false,\n    // An array of plugins to enable\n    plugins: [],\n    // TODO\n    strictMode: null,\n    // Nodes have their start and end characters offsets recorded in\n    // `start` and `end` properties (directly on the node, rather than\n    // the `loc` object, which holds line/column data. To also add a\n    // [semi-standardized][range] `range` property holding a `[start,\n    // end]` array with the same numbers, set the `ranges` option to\n    // `true`.\n    //\n    // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n    ranges: false,\n    // Adds all parsed tokens to a `tokens` property on the `File` node\n    tokens: false,\n    // Whether to create ImportExpression AST nodes (if false\n    // `import(foo)` will be parsed as CallExpression(Import, [Identifier(foo)])\n    createImportExpressions: process.env.BABEL_8_BREAKING ? true : false,\n    // Whether to create ParenthesizedExpression AST nodes (if false\n    // the parser sets extra.parenthesized on the expression nodes instead).\n    createParenthesizedExpressions: false,\n    // When enabled, errors are attached to the AST instead of being directly thrown.\n    // Some errors will still throw, because @babel/parser can't always recover.\n    errorRecovery: false,\n    // When enabled, comments will be attached to adjacent AST nodes as one of\n    // `leadingComments`, `trailingComments` and `innerComments`. The comment attachment\n    // is vital to preserve comments after transform. If you don't print AST back,\n    // consider set this option to `false` for performance\n    attachComment: true,\n    // When enabled, the parser will support Annex B syntax.\n    // https://tc39.es/ecma262/#sec-additional-ecmascript-features-for-web-browsers\n    annexB: true,\n  };\n}\n\n// Interpret and default an options object\n\nexport function getOptions(opts?: Options | null): OptionsWithDefaults {\n  // https://github.com/babel/babel/pull/16918\n  // `options` is accessed frequently, please make sure it is a fast object.\n  // `%ToFastProperties` can make it a fast object, but the performance is the same as the slow object.\n  const options: any = createDefaultOptions();\n\n  if (opts == null) {\n    return options;\n  }\n  if (opts.annexB != null && opts.annexB !== false) {\n    throw new Error(\"The `annexB` option can only be set to `false`.\");\n  }\n\n  for (const key of Object.keys(options) as (keyof Options)[]) {\n    if (opts[key] != null) options[key] = opts[key];\n  }\n\n  if (options.startLine === 1) {\n    if (opts.startIndex == null && options.startColumn > 0) {\n      options.startIndex = options.startColumn;\n    } else if (opts.startColumn == null && options.startIndex > 0) {\n      options.startColumn = options.startIndex;\n    }\n  } else if (opts.startColumn == null || opts.startIndex == null) {\n    if (opts.startIndex != null || process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"With a `startLine > 1` you must also specify `startIndex` and `startColumn`.\",\n      );\n    }\n  }\n\n  if (options.sourceType === \"commonjs\") {\n    if (opts.allowAwaitOutsideFunction != null) {\n      throw new Error(\n        \"The `allowAwaitOutsideFunction` option cannot be used with `sourceType: 'commonjs'`.\",\n      );\n    }\n    if (opts.allowReturnOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowReturnOutsideFunction: true`, please remove the `allowReturnOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n    if (opts.allowNewTargetOutsideFunction != null) {\n      throw new Error(\n        \"`sourceType: 'commonjs'` implies `allowNewTargetOutsideFunction: true`, please remove the `allowNewTargetOutsideFunction` option or use `sourceType: 'script'`.\",\n      );\n    }\n  }\n\n  return options;\n}\n","import type { TokenType } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport type { Node as NodeType, NodeBase, File } from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport { OptionFlags } from \"../options.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nconst { defineProperty } = Object;\nconst toUnenumerable = (object: any, key: string) => {\n  if (object) {\n    defineProperty(object, key, { enumerable: false, value: object[key] });\n  }\n};\n\nfunction toESTreeLocation(node: any) {\n  toUnenumerable(node.loc.start, \"index\");\n  toUnenumerable(node.loc.end, \"index\");\n\n  return node;\n}\n\nexport default (superClass: typeof Parser) =>\n  class ESTreeParserMixin extends superClass implements Parser {\n    parse(): File {\n      const file = toESTreeLocation(super.parse());\n\n      if (this.optionFlags & OptionFlags.Tokens) {\n        file.tokens = file.tokens.map(toESTreeLocation);\n      }\n\n      return file;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseRegExpLiteral({ pattern, flags }): N.EstreeRegExpLiteral {\n      let regex: RegExp | null = null;\n      try {\n        regex = new RegExp(pattern, flags);\n      } catch (_) {\n        // In environments that don't support these flags value will\n        // be null as the regex can't be represented natively.\n      }\n      const node = this.estreeParseLiteral<N.EstreeRegExpLiteral>(regex);\n      node.regex = { pattern, flags };\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseBigIntLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/es2020.md#bigintliteral\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        bigInt = null;\n      }\n      const node = this.estreeParseLiteral<N.EstreeBigIntLiteral>(bigInt);\n      node.bigint = String(node.value || value);\n\n      return node;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseDecimalLiteral(value: any): N.Node {\n      // https://github.com/estree/estree/blob/master/experimental/decimal.md\n      // todo: use BigDecimal when node supports it.\n      const decimal: null = null;\n      const node = this.estreeParseLiteral(decimal);\n      node.decimal = String(node.value || value);\n\n      return node;\n    }\n\n    estreeParseLiteral<T extends N.EstreeLiteral>(value: any) {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.parseLiteral<T>(value, \"Literal\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseStringLiteral(value: any): N.Node {\n      return this.estreeParseLiteral(value);\n    }\n\n    parseNumericLiteral(value: any): any {\n      return this.estreeParseLiteral(value);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    parseNullLiteral(): N.Node {\n      return this.estreeParseLiteral(null);\n    }\n\n    parseBooleanLiteral(value: boolean): N.BooleanLiteral {\n      // @ts-expect-error ESTree plugin changes node types\n      return this.estreeParseLiteral(value);\n    }\n\n    // https://github.com/estree/estree/blob/master/es2020.md#chainexpression\n    estreeParseChainExpression(\n      node: N.Expression,\n      endLoc: Position,\n    ): N.EstreeChainExpression {\n      const chain = this.startNodeAtNode<N.EstreeChainExpression>(node);\n      chain.expression = node;\n      return this.finishNodeAt(chain, \"ChainExpression\", endLoc);\n    }\n\n    // Cast a Directive to an ExpressionStatement. Mutates the input Directive.\n    directiveToStmt(directive: N.Directive): N.ExpressionStatement {\n      const expression = directive.value as any as N.EstreeLiteral;\n      delete directive.value;\n\n      this.castNodeTo(expression, \"Literal\");\n      expression.raw = expression.extra.raw;\n      expression.value = expression.extra.expressionValue;\n\n      const stmt = this.castNodeTo(directive, \"ExpressionStatement\");\n      stmt.expression = expression;\n      stmt.directive = expression.extra.rawValue;\n\n      delete expression.extra;\n\n      return stmt;\n    }\n\n    /**\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     * This hook will be implemented by the typescript plugin.\n     *\n     * Note: This hook should be manually invoked when we change the `type` of a given AST\n     * node, to ensure that the optional properties are correctly filled.\n     * @param node The AST node finished by finishNode\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    fillOptionalPropertiesForTSESLint(node: NodeType) {}\n\n    cloneEstreeStringLiteral(node: N.EstreeLiteral): N.EstreeLiteral {\n      const { start, end, loc, range, raw, value } = node;\n      const cloned = Object.create(node.constructor.prototype);\n      cloned.type = \"Literal\";\n      cloned.start = start;\n      cloned.end = end;\n      cloned.loc = loc;\n      cloned.range = range;\n      cloned.raw = raw;\n      cloned.value = value;\n      return cloned;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n      super.initFunction(node, isAsync);\n      node.expression = false;\n    }\n\n    checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n      if (node != null && this.isObjectProperty(node)) {\n        // @ts-expect-error plugin typings\n        this.checkDeclaration((node as unknown as N.EstreeProperty).value);\n      } else {\n        super.checkDeclaration(node);\n      }\n    }\n\n    getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n      return (method as unknown as N.EstreeMethodDefinition).value.params;\n    }\n\n    isValidDirective(stmt: N.Statement): stmt is N.ExpressionStatement {\n      return (\n        stmt.type === \"ExpressionStatement\" &&\n        stmt.expression.type === \"Literal\" &&\n        typeof stmt.expression.value === \"string\" &&\n        !stmt.expression.extra?.parenthesized\n      );\n    }\n\n    parseBlockBody(\n      node: N.BlockStatementLike,\n      allowDirectives: boolean | undefined | null,\n      topLevel: boolean,\n      end: TokenType,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): void {\n      super.parseBlockBody(\n        node,\n        allowDirectives,\n        topLevel,\n        end,\n        afterBlockParse,\n      );\n\n      const directiveStatements = node.directives.map(d =>\n        this.directiveToStmt(d),\n      );\n      // @ts-expect-error estree plugin typings\n      node.body = directiveStatements.concat(node.body);\n      delete node.directives;\n    }\n\n    parsePrivateName(): any {\n      const node = super.parsePrivateName();\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return node;\n        }\n      }\n      return this.convertPrivateNameToPrivateIdentifier(node);\n    }\n\n    convertPrivateNameToPrivateIdentifier(\n      node: N.PrivateName,\n    ): N.EstreePrivateIdentifier {\n      const name = super.getPrivateNameSV(node);\n      node = node as any;\n      delete node.id;\n      // @ts-expect-error mutate AST types\n      node.name = name;\n      return this.castNodeTo(node, \"PrivateIdentifier\");\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isPrivateName(node: N.Node): node is N.EstreePrivateIdentifier {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.isPrivateName(node);\n        }\n      }\n      return node.type === \"PrivateIdentifier\";\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    getPrivateNameSV(node: N.EstreePrivateIdentifier): string {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return super.getPrivateNameSV(node as unknown as N.PrivateName);\n        }\n      }\n      return node.name;\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseLiteral<T extends N.Literal>(value: any, type: T[\"type\"]): T {\n      const node = super.parseLiteral<T>(value, type);\n      // @ts-expect-error mutating AST types\n      node.raw = node.extra.raw;\n      delete node.extra;\n\n      return node;\n    }\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpression?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      super.parseFunctionBody(node, allowExpression, isMethod);\n      node.expression = node.body.type !== \"BlockStatement\";\n    }\n\n    // @ts-expect-error plugin may override interfaces\n    parseMethod<\n      T extends N.ClassPrivateMethod | N.ObjectMethod | N.ClassMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope: boolean = false,\n    ):\n      | N.EstreeProperty\n      | N.EstreeMethodDefinition\n      | N.EstreeTSAbstractMethodDefinition {\n      let funcNode = this.startNode<N.MethodLike>();\n      funcNode.kind = node.kind; // provide kind, so super method correctly sets state\n      funcNode = super.parseMethod(\n        funcNode,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      delete funcNode.kind;\n      const { typeParameters } = node;\n      if (typeParameters) {\n        delete node.typeParameters;\n        funcNode.typeParameters = typeParameters;\n        this.resetStartLocationFromNode(funcNode, typeParameters);\n      }\n      const valueNode = this.castNodeTo(\n        funcNode as N.MethodLike,\n        process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"typescript\") &&\n          !funcNode.body\n          ? \"TSEmptyBodyFunctionExpression\"\n          : \"FunctionExpression\",\n      );\n      (\n        node as unknown as Undone<\n          | N.EstreeProperty\n          | N.EstreeMethodDefinition\n          | N.EstreeTSAbstractMethodDefinition\n        >\n      ).value = valueNode;\n      if (type === \"ClassPrivateMethod\") {\n        node.computed = false;\n      }\n      if (process.env.BABEL_8_BREAKING && this.hasPlugin(\"typescript\")) {\n        // @ts-expect-error todo(flow->ts) property not defined for all types in union\n        if (node.abstract) {\n          // @ts-expect-error remove abstract from TSAbstractMethodDefinition\n          delete node.abstract;\n          return this.finishNode(\n            // @ts-expect-error cast methods to estree types\n            node as Undone<N.EstreeTSAbstractMethodDefinition>,\n            \"TSAbstractMethodDefinition\",\n          );\n        }\n      }\n      if (type === \"ObjectMethod\") {\n        if ((node as any as N.ObjectMethod).kind === \"method\") {\n          (node as any as N.EstreeProperty).kind = \"init\";\n        }\n        (node as any as N.EstreeProperty).shorthand = false;\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeProperty>,\n          \"Property\",\n        );\n      } else {\n        return this.finishNode(\n          // @ts-expect-error cast methods to estree types\n          node as Undone<N.EstreeMethodDefinition>,\n          \"MethodDefinition\",\n        );\n      }\n    }\n\n    nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n      if (key.type === \"Literal\") return key.value === \"constructor\";\n      return super.nameIsConstructor(key);\n    }\n\n    parseClassProperty(...args: [N.ClassProperty]): any {\n      const propertyNode = super.parseClassProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        delete propertyNode.abstract;\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      return propertyNode;\n    }\n\n    parseClassPrivateProperty(...args: [N.ClassPrivateProperty]): any {\n      const propertyNode = super.parseClassPrivateProperty(...args);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return propertyNode as unknown as N.EstreePropertyDefinition;\n        }\n      }\n      if (\n        process.env.BABEL_8_BREAKING &&\n        propertyNode.abstract &&\n        this.hasPlugin(\"typescript\")\n      ) {\n        this.castNodeTo(propertyNode, \"TSAbstractPropertyDefinition\");\n      } else {\n        this.castNodeTo(propertyNode, \"PropertyDefinition\");\n      }\n      propertyNode.computed = false;\n      return propertyNode;\n    }\n\n    parseClassAccessorProperty(\n      this: Parser,\n      node: N.ClassAccessorProperty,\n    ): any {\n      const accessorPropertyNode = super.parseClassAccessorProperty(node);\n      if (!process.env.BABEL_8_BREAKING) {\n        if (!this.getPluginOption(\"estree\", \"classFeatures\")) {\n          return accessorPropertyNode;\n        }\n      }\n      if (accessorPropertyNode.abstract && this.hasPlugin(\"typescript\")) {\n        delete accessorPropertyNode.abstract;\n        this.castNodeTo(accessorPropertyNode, \"TSAbstractAccessorProperty\");\n      } else {\n        this.castNodeTo(accessorPropertyNode, \"AccessorProperty\");\n      }\n      return accessorPropertyNode;\n    }\n\n    parseObjectProperty(\n      prop: N.ObjectProperty,\n      startLoc: Position | undefined | null,\n      isPattern: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ObjectProperty | undefined | null {\n      const node: N.EstreeProperty = super.parseObjectProperty(\n        prop,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      ) as any;\n\n      if (node) {\n        node.kind = \"init\";\n        this.castNodeTo(node, \"Property\");\n      }\n\n      return node as any;\n    }\n\n    finishObjectProperty(node: Undone<N.ObjectProperty>): N.ObjectProperty {\n      (node as unknown as Undone<N.EstreeProperty>).kind = \"init\";\n      return this.finishNode(\n        node as unknown as Undone<N.EstreeProperty>,\n        \"Property\",\n      ) as any;\n    }\n\n    isValidLVal(\n      type: string,\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      return type === \"Property\"\n        ? \"value\"\n        : super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node != null && this.isObjectProperty(node)) {\n        return this.isAssignable(node.value, isBinding);\n      }\n      return super.isAssignable(node, isBinding);\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (node != null && this.isObjectProperty(node)) {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableObjectExpressionProp(\n      prop: N.Node,\n      isLast: boolean,\n      isLHS: boolean,\n    ) {\n      if (\n        prop.type === \"Property\" &&\n        (prop.kind === \"get\" || prop.kind === \"set\")\n      ) {\n        this.raise(Errors.PatternHasAccessor, prop.key);\n      } else if (prop.type === \"Property\" && prop.method) {\n        this.raise(Errors.PatternHasMethod, prop.key);\n      } else {\n        super.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n      }\n    }\n\n    finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n      unfinished: Undone<T>,\n      optional: boolean,\n    ): T {\n      const node = super.finishCallExpression(unfinished, optional);\n\n      if (node.callee.type === \"Import\") {\n        this.castNodeTo(node, \"ImportExpression\");\n        (node as N.Node as N.EstreeImportExpression).source = node\n          .arguments[0] as N.Expression;\n        (node as N.Node as N.EstreeImportExpression).options =\n          (node.arguments[1] as N.Expression) ?? null;\n        if (!process.env.BABEL_8_BREAKING) {\n          // compatibility with previous ESTree AST\n          (node as N.Node as N.EstreeImportExpression).attributes =\n            (node.arguments[1] as N.Expression) ?? null;\n        }\n        // arguments isn't optional in the type definition\n        delete node.arguments;\n        // callee isn't optional in the type definition\n        delete node.callee;\n      } else if (node.type === \"OptionalCallExpression\") {\n        this.castNodeTo(node, \"CallExpression\");\n      } else {\n        node.optional = false;\n      }\n\n      return node;\n    }\n\n    toReferencedArguments(\n      node:\n        | N.CallExpression\n        | N.OptionalCallExpression\n        | N.EstreeImportExpression,\n      /* isParenthesizedExpr?: boolean, */\n    ) {\n      // ImportExpressions do not have an arguments array.\n      if (node.type === \"ImportExpression\") {\n        return;\n      }\n\n      super.toReferencedArguments(node);\n    }\n\n    parseExport(\n      unfinished: Undone<N.AnyExport>,\n      decorators: N.Decorator[] | null,\n    ) {\n      const exportStartLoc = this.state.lastTokStartLoc;\n      const node = super.parseExport(unfinished, decorators);\n\n      switch (node.type) {\n        case \"ExportAllDeclaration\":\n          // @ts-expect-error mutating AST types\n          node.exported = null;\n          break;\n\n        case \"ExportNamedDeclaration\":\n          if (\n            node.specifiers.length === 1 &&\n            node.specifiers[0].type === \"ExportNamespaceSpecifier\"\n          ) {\n            this.castNodeTo(node, \"ExportAllDeclaration\");\n            // @ts-expect-error mutating AST types\n            node.exported = node.specifiers[0].exported;\n            delete node.specifiers;\n          }\n\n        // fallthrough\n        case \"ExportDefaultDeclaration\":\n          {\n            const { declaration } = node;\n            if (\n              declaration?.type === \"ClassDeclaration\" &&\n              declaration.decorators?.length > 0 &&\n              // decorator comes before export\n              declaration.start === node.start\n            ) {\n              this.resetStartLocation(\n                node,\n                // For compatibility with ESLint's keyword-spacing rule, which assumes that an\n                // export declaration must start with export.\n                // https://github.com/babel/babel/issues/15085\n                // Here we reset export declaration's start to be the start of the export token\n                exportStartLoc,\n              );\n            }\n          }\n\n          break;\n      }\n\n      return node;\n    }\n\n    stopParseSubscript(base: N.Expression, state: N.ParseSubscriptState) {\n      const node = super.stopParseSubscript(base, state);\n      if (state.optionalChainMember) {\n        return this.estreeParseChainExpression(node, base.loc.end);\n      }\n      return node;\n    }\n\n    parseMember(\n      base: N.Expression,\n      startLoc: Position,\n      state: N.ParseSubscriptState,\n      computed: boolean,\n      optional: boolean,\n    ) {\n      const node = super.parseMember(base, startLoc, state, computed, optional);\n      if (node.type === \"OptionalMemberExpression\") {\n        this.castNodeTo(node, \"MemberExpression\");\n      } else {\n        node.optional = false;\n      }\n      return node;\n    }\n\n    isOptionalMemberExpression(node: N.Node) {\n      if (node.type === \"ChainExpression\") {\n        return node.expression.type === \"MemberExpression\";\n      }\n      return super.isOptionalMemberExpression(node);\n    }\n\n    hasPropertyAsPrivateName(node: N.Node): boolean {\n      if (node.type === \"ChainExpression\") {\n        node = node.expression;\n      }\n      return super.hasPropertyAsPrivateName(node);\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectProperty(node: N.Node): node is N.EstreeProperty {\n      return node.type === \"Property\" && node.kind === \"init\" && !node.method;\n    }\n\n    // @ts-expect-error ESTree plugin changes node types\n    isObjectMethod(node: N.Node): node is N.EstreeProperty {\n      return (\n        node.type === \"Property\" &&\n        (node.method || node.kind === \"get\" || node.kind === \"set\")\n      );\n    }\n\n    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    castNodeTo<T extends N.Node[\"type\"]>(\n      node: N.Node,\n      type: T,\n    ): Extract<N.Node, { type: T }> {\n      const result = super.castNodeTo(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      this.fillOptionalPropertiesForTSESLint(cloned);\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Literal\") {\n        return this.cloneEstreeStringLiteral(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    finishNodeAt<T extends NodeType>(\n      node: Undone<T>,\n      type: T[\"type\"],\n      endLoc: Position,\n    ): T {\n      return toESTreeLocation(super.finishNodeAt(node, type, endLoc));\n    }\n\n    // Override for TS-ESLint that does not allow optional AST properties\n    finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n      const result = super.finishNode(node, type);\n      this.fillOptionalPropertiesForTSESLint(result);\n      return result;\n    }\n\n    resetStartLocation(node: N.Node, startLoc: Position) {\n      super.resetStartLocation(node, startLoc);\n      toESTreeLocation(node);\n    }\n\n    resetEndLocation(\n      node: NodeBase,\n      endLoc: Position = this.state.lastTokEndLoc,\n    ): void {\n      super.resetEndLocation(node, endLoc);\n      toESTreeLocation(node);\n    }\n  };\n","// The token context is used in JSX plugin to track\n// jsx tag / jsx text / normal JavaScript expression\n\nexport class TokContext {\n  constructor(token: string, preserveSpace?: boolean) {\n    this.token = token;\n    this.preserveSpace = !!preserveSpace;\n  }\n\n  token: string;\n  preserveSpace: boolean;\n}\n\nconst types: {\n  [key: string]: TokContext;\n} = {\n  brace: new TokContext(\"{\"), // normal JavaScript expression\n  j_oTag: new TokContext(\"<tag\"), // JSX opening tag\n  j_cTag: new TokContext(\"</tag\"), // JSX closing tag\n  j_expr: new TokContext(\"<tag>...</tag>\", true), // JSX expressions\n};\n\nif (!process.env.BABEL_8_BREAKING) {\n  types.template = new TokContext(\"`\", true);\n}\n\nexport { types };\n","import { types as tc, type TokContext } from \"./context.ts\";\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between 1) binary\n// expression (<) and JSX Tag start (<name>); 2) object literal and JSX\n// texts. It is set on the `updateContext` function in the JSX plugin.\n\n// The `startsExpr` property is used to determine whether an expression\n// may be the “argument” subexpression of a `yield` expression or\n// `yield` statement. It is set on all token types that may be at the\n// start of a subexpression.\n\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nconst beforeExpr = true;\nconst startsExpr = true;\nconst isLoop = true;\nconst isAssign = true;\nconst prefix = true;\nconst postfix = true;\n\ntype TokenOptions = {\n  keyword?: string;\n  beforeExpr?: boolean;\n  startsExpr?: boolean;\n  rightAssociative?: boolean;\n  isLoop?: boolean;\n  isAssign?: boolean;\n  prefix?: boolean;\n  postfix?: boolean;\n  binop?: number | null;\n};\n\n// Internally the tokenizer stores token as a number\nexport type TokenType = number;\n\n// The `ExportedTokenType` is exported via `tokTypes` and accessible\n// when `tokens: true` is enabled. Unlike internal token type, it provides\n// metadata of the tokens.\nexport class ExportedTokenType {\n  label: string;\n  keyword: string | undefined | null;\n  beforeExpr: boolean;\n  startsExpr: boolean;\n  rightAssociative: boolean;\n  isLoop: boolean;\n  isAssign: boolean;\n  prefix: boolean;\n  postfix: boolean;\n  binop: number | undefined | null;\n  // todo(Babel 8): remove updateContext from exposed token layout\n  declare updateContext:\n    | ((context: Array<TokContext>) => void)\n    | undefined\n    | null;\n\n  constructor(label: string, conf: TokenOptions = {}) {\n    this.label = label;\n    this.keyword = conf.keyword;\n    this.beforeExpr = !!conf.beforeExpr;\n    this.startsExpr = !!conf.startsExpr;\n    this.rightAssociative = !!conf.rightAssociative;\n    this.isLoop = !!conf.isLoop;\n    this.isAssign = !!conf.isAssign;\n    this.prefix = !!conf.prefix;\n    this.postfix = !!conf.postfix;\n    this.binop = conf.binop != null ? conf.binop : null;\n    if (!process.env.BABEL_8_BREAKING) {\n      this.updateContext = null;\n    }\n  }\n}\n\n// A map from keyword/keyword-like string value to the token type\nexport const keywords = new Map<string, TokenType>();\n\nfunction createKeyword(name: string, options: TokenOptions = {}): TokenType {\n  options.keyword = name;\n  const token = createToken(name, options);\n  keywords.set(name, token);\n  return token;\n}\n\nfunction createBinop(name: string, binop: number) {\n  return createToken(name, { beforeExpr, binop });\n}\n\nlet tokenTypeCounter = -1;\nexport const tokenTypes: ExportedTokenType[] = [];\nconst tokenLabels: string[] = [];\nconst tokenBinops: number[] = [];\nconst tokenBeforeExprs: boolean[] = [];\nconst tokenStartsExprs: boolean[] = [];\nconst tokenPrefixes: boolean[] = [];\n\nfunction createToken(name: string, options: TokenOptions = {}): TokenType {\n  ++tokenTypeCounter;\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  tokenTypes.push(new ExportedTokenType(name, options));\n\n  return tokenTypeCounter;\n}\n\nfunction createKeywordLike(\n  name: string,\n  options: TokenOptions = {},\n): TokenType {\n  ++tokenTypeCounter;\n  keywords.set(name, tokenTypeCounter);\n  tokenLabels.push(name);\n  tokenBinops.push(options.binop ?? -1);\n  tokenBeforeExprs.push(options.beforeExpr ?? false);\n  tokenStartsExprs.push(options.startsExpr ?? false);\n  tokenPrefixes.push(options.prefix ?? false);\n  // In the exported token type, we set the label as \"name\" for backward compatibility with Babel 7\n  tokenTypes.push(new ExportedTokenType(\"name\", options));\n\n  return tokenTypeCounter;\n}\n\n// For performance the token type helpers depend on the following declarations order.\n// When adding new token types, please also check if the token helpers need update.\n\nexport type InternalTokenTypes = typeof tt;\n\nexport const tt = {\n  // Punctuation token types.\n  bracketL: createToken(\"[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketHashL: createToken(\"#[\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  bracketBarL: createToken(\"[|\", { beforeExpr, startsExpr }),\n  bracketR: createToken(\"]\"),\n  // TODO: Remove this in Babel 8\n  bracketBarR: createToken(\"|]\"),\n  braceL: createToken(\"{\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceBarL: createToken(\"{|\", { beforeExpr, startsExpr }),\n  // TODO: Remove this in Babel 8\n  braceHashL: createToken(\"#{\", { beforeExpr, startsExpr }),\n  braceR: createToken(\"}\"),\n  braceBarR: createToken(\"|}\"),\n  parenL: createToken(\"(\", { beforeExpr, startsExpr }),\n  parenR: createToken(\")\"),\n  comma: createToken(\",\", { beforeExpr }),\n  semi: createToken(\";\", { beforeExpr }),\n  colon: createToken(\":\", { beforeExpr }),\n  doubleColon: createToken(\"::\", { beforeExpr }),\n  dot: createToken(\".\"),\n  question: createToken(\"?\", { beforeExpr }),\n  questionDot: createToken(\"?.\"),\n  arrow: createToken(\"=>\", { beforeExpr }),\n  template: createToken(\"template\"),\n  ellipsis: createToken(\"...\", { beforeExpr }),\n  backQuote: createToken(\"`\", { startsExpr }),\n  dollarBraceL: createToken(\"${\", { beforeExpr, startsExpr }),\n  // start: isTemplate\n  templateTail: createToken(\"...`\", { startsExpr }),\n  templateNonTail: createToken(\"...${\", { beforeExpr, startsExpr }),\n  // end: isTemplate\n  at: createToken(\"@\"),\n  hash: createToken(\"#\", { startsExpr }),\n\n  // Special hashbang token.\n  interpreterDirective: createToken(\"#!...\"),\n\n  // Operators. These carry several kinds of properties to help the\n  // parser use them properly (the presence of these properties is\n  // what categorizes them as operators).\n  //\n  // `binop`, when present, specifies that this operator is a binary\n  // operator, and will refer to its precedence.\n  //\n  // `prefix` and `postfix` mark the operator as a prefix or postfix\n  // unary operator.\n  //\n  // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n  // binary operators with a very low precedence, that should result\n  // in AssignmentExpression nodes.\n\n  // start: isAssign\n  eq: createToken(\"=\", { beforeExpr, isAssign }),\n  assign: createToken(\"_=\", { beforeExpr, isAssign }),\n  slashAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // These are only needed to support % and ^ as a Hack-pipe topic token.\n  // When the proposal settles on a token, the others can be merged with\n  // tt.assign.\n  xorAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  moduloAssign: createToken(\"_=\", { beforeExpr, isAssign }),\n  // end: isAssign\n\n  incDec: createToken(\"++/--\", { prefix, postfix, startsExpr }),\n  bang: createToken(\"!\", { beforeExpr, prefix, startsExpr }),\n  tilde: createToken(\"~\", { beforeExpr, prefix, startsExpr }),\n\n  // More possible topic tokens.\n  // When the proposal settles on a token, at least one of these may be removed.\n  doubleCaret: createToken(\"^^\", { startsExpr }),\n  doubleAt: createToken(\"@@\", { startsExpr }),\n\n  // start: isBinop\n  pipeline: createBinop(\"|>\", 0),\n  nullishCoalescing: createBinop(\"??\", 1),\n  logicalOR: createBinop(\"||\", 1),\n  logicalAND: createBinop(\"&&\", 2),\n  bitwiseOR: createBinop(\"|\", 3),\n  bitwiseXOR: createBinop(\"^\", 4),\n  bitwiseAND: createBinop(\"&\", 5),\n  equality: createBinop(\"==/!=/===/!==\", 6),\n  lt: createBinop(\"</>/<=/>=\", 7),\n  gt: createBinop(\"</>/<=/>=\", 7),\n  relational: createBinop(\"</>/<=/>=\", 7),\n  bitShift: createBinop(\"<</>>/>>>\", 8),\n  bitShiftL: createBinop(\"<</>>/>>>\", 8),\n  bitShiftR: createBinop(\"<</>>/>>>\", 8),\n  plusMin: createToken(\"+/-\", { beforeExpr, binop: 9, prefix, startsExpr }),\n  // startsExpr: required by v8intrinsic plugin\n  modulo: createToken(\"%\", { binop: 10, startsExpr }),\n  // unset `beforeExpr` as it can be `function *`\n  star: createToken(\"*\", { binop: 10 }),\n  slash: createBinop(\"/\", 10),\n  exponent: createToken(\"**\", {\n    beforeExpr,\n    binop: 11,\n    rightAssociative: true,\n  }),\n\n  // Keywords\n  // Don't forget to update packages/babel-helper-validator-identifier/src/keyword.js\n  // when new keywords are added\n  // start: isLiteralPropertyName\n  // start: isKeyword\n  _in: createKeyword(\"in\", { beforeExpr, binop: 7 }),\n  _instanceof: createKeyword(\"instanceof\", { beforeExpr, binop: 7 }),\n  // end: isBinop\n  _break: createKeyword(\"break\"),\n  _case: createKeyword(\"case\", { beforeExpr }),\n  _catch: createKeyword(\"catch\"),\n  _continue: createKeyword(\"continue\"),\n  _debugger: createKeyword(\"debugger\"),\n  _default: createKeyword(\"default\", { beforeExpr }),\n  _else: createKeyword(\"else\", { beforeExpr }),\n  _finally: createKeyword(\"finally\"),\n  _function: createKeyword(\"function\", { startsExpr }),\n  _if: createKeyword(\"if\"),\n  _return: createKeyword(\"return\", { beforeExpr }),\n  _switch: createKeyword(\"switch\"),\n  _throw: createKeyword(\"throw\", { beforeExpr, prefix, startsExpr }),\n  _try: createKeyword(\"try\"),\n  _var: createKeyword(\"var\"),\n  _const: createKeyword(\"const\"),\n  _with: createKeyword(\"with\"),\n  _new: createKeyword(\"new\", { beforeExpr, startsExpr }),\n  _this: createKeyword(\"this\", { startsExpr }),\n  _super: createKeyword(\"super\", { startsExpr }),\n  _class: createKeyword(\"class\", { startsExpr }),\n  _extends: createKeyword(\"extends\", { beforeExpr }),\n  _export: createKeyword(\"export\"),\n  _import: createKeyword(\"import\", { startsExpr }),\n  _null: createKeyword(\"null\", { startsExpr }),\n  _true: createKeyword(\"true\", { startsExpr }),\n  _false: createKeyword(\"false\", { startsExpr }),\n  _typeof: createKeyword(\"typeof\", { beforeExpr, prefix, startsExpr }),\n  _void: createKeyword(\"void\", { beforeExpr, prefix, startsExpr }),\n  _delete: createKeyword(\"delete\", { beforeExpr, prefix, startsExpr }),\n  // start: isLoop\n  _do: createKeyword(\"do\", { isLoop, beforeExpr }),\n  _for: createKeyword(\"for\", { isLoop }),\n  _while: createKeyword(\"while\", { isLoop }),\n  // end: isLoop\n  // end: isKeyword\n\n  // Primary literals\n  // start: isIdentifier\n  _as: createKeywordLike(\"as\", { startsExpr }),\n  _assert: createKeywordLike(\"assert\", { startsExpr }),\n  _async: createKeywordLike(\"async\", { startsExpr }),\n  _await: createKeywordLike(\"await\", { startsExpr }),\n  _defer: createKeywordLike(\"defer\", { startsExpr }),\n  _from: createKeywordLike(\"from\", { startsExpr }),\n  _get: createKeywordLike(\"get\", { startsExpr }),\n  _let: createKeywordLike(\"let\", { startsExpr }),\n  _meta: createKeywordLike(\"meta\", { startsExpr }),\n  _of: createKeywordLike(\"of\", { startsExpr }),\n  _sent: createKeywordLike(\"sent\", { startsExpr }),\n  _set: createKeywordLike(\"set\", { startsExpr }),\n  _source: createKeywordLike(\"source\", { startsExpr }),\n  _static: createKeywordLike(\"static\", { startsExpr }),\n  _using: createKeywordLike(\"using\", { startsExpr }),\n  _yield: createKeywordLike(\"yield\", { startsExpr }),\n\n  // Flow and TypeScript Keywordlike\n  _asserts: createKeywordLike(\"asserts\", { startsExpr }),\n  _checks: createKeywordLike(\"checks\", { startsExpr }),\n  _exports: createKeywordLike(\"exports\", { startsExpr }),\n  _global: createKeywordLike(\"global\", { startsExpr }),\n  _implements: createKeywordLike(\"implements\", { startsExpr }),\n  _intrinsic: createKeywordLike(\"intrinsic\", { startsExpr }),\n  _infer: createKeywordLike(\"infer\", { startsExpr }),\n  _is: createKeywordLike(\"is\", { startsExpr }),\n  _mixins: createKeywordLike(\"mixins\", { startsExpr }),\n  _proto: createKeywordLike(\"proto\", { startsExpr }),\n  _require: createKeywordLike(\"require\", { startsExpr }),\n  _satisfies: createKeywordLike(\"satisfies\", { startsExpr }),\n  // start: isTSTypeOperator\n  _keyof: createKeywordLike(\"keyof\", { startsExpr }),\n  _readonly: createKeywordLike(\"readonly\", { startsExpr }),\n  _unique: createKeywordLike(\"unique\", { startsExpr }),\n  // end: isTSTypeOperator\n  // start: isTSDeclarationStart\n  _abstract: createKeywordLike(\"abstract\", { startsExpr }),\n  _declare: createKeywordLike(\"declare\", { startsExpr }),\n  _enum: createKeywordLike(\"enum\", { startsExpr }),\n  _module: createKeywordLike(\"module\", { startsExpr }),\n  _namespace: createKeywordLike(\"namespace\", { startsExpr }),\n  // start: isFlowInterfaceOrTypeOrOpaque\n  _interface: createKeywordLike(\"interface\", { startsExpr }),\n  _type: createKeywordLike(\"type\", { startsExpr }),\n  // end: isTSDeclarationStart\n  _opaque: createKeywordLike(\"opaque\", { startsExpr }),\n  // end: isFlowInterfaceOrTypeOrOpaque\n  name: createToken(\"name\", { startsExpr }),\n\n  // placeholder plugin\n  placeholder: createToken(\"%%\", { startsExpr }),\n  // end: isIdentifier\n\n  string: createToken(\"string\", { startsExpr }),\n  num: createToken(\"num\", { startsExpr }),\n  bigint: createToken(\"bigint\", { startsExpr }),\n  // TODO: Remove this in Babel 8\n  decimal: createToken(\"decimal\", { startsExpr }),\n  // end: isLiteralPropertyName\n  regexp: createToken(\"regexp\", { startsExpr }),\n  privateName: createToken(\"#name\", { startsExpr }),\n  eof: createToken(\"eof\"),\n\n  // jsx plugin\n  jsxName: createToken(\"jsxName\"),\n  jsxText: createToken(\"jsxText\", { beforeExpr }),\n  jsxTagStart: createToken(\"jsxTagStart\", { startsExpr }),\n  jsxTagEnd: createToken(\"jsxTagEnd\"),\n} as const;\n\nexport function tokenIsIdentifier(token: TokenType): boolean {\n  return token >= tt._as && token <= tt.placeholder;\n}\n\nexport function tokenKeywordOrIdentifierIsKeyword(token: TokenType): boolean {\n  // we can remove the token >= tt._in check when we\n  // know a token is either keyword or identifier\n  return token <= tt._while;\n}\n\nexport function tokenIsKeywordOrIdentifier(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.placeholder;\n}\n\nexport function tokenIsLiteralPropertyName(token: TokenType): boolean {\n  return token >= tt._in && token <= tt.decimal;\n}\n\nexport function tokenComesBeforeExpression(token: TokenType): boolean {\n  return tokenBeforeExprs[token];\n}\n\nexport function tokenCanStartExpression(token: TokenType): boolean {\n  return tokenStartsExprs[token];\n}\n\nexport function tokenIsAssignment(token: TokenType): boolean {\n  return token >= tt.eq && token <= tt.moduloAssign;\n}\n\nexport function tokenIsFlowInterfaceOrTypeOrOpaque(token: TokenType): boolean {\n  return token >= tt._interface && token <= tt._opaque;\n}\n\nexport function tokenIsLoop(token: TokenType): boolean {\n  return token >= tt._do && token <= tt._while;\n}\n\nexport function tokenIsKeyword(token: TokenType): boolean {\n  return token >= tt._in && token <= tt._while;\n}\n\nexport function tokenIsOperator(token: TokenType): boolean {\n  return token >= tt.pipeline && token <= tt._instanceof;\n}\n\nexport function tokenIsPostfix(token: TokenType): boolean {\n  return token === tt.incDec;\n}\n\nexport function tokenIsPrefix(token: TokenType): boolean {\n  return tokenPrefixes[token];\n}\n\nexport function tokenIsTSTypeOperator(token: TokenType): boolean {\n  return token >= tt._keyof && token <= tt._unique;\n}\n\nexport function tokenIsTSDeclarationStart(token: TokenType): boolean {\n  return token >= tt._abstract && token <= tt._type;\n}\n\nexport function tokenLabelName(token: TokenType): string {\n  return tokenLabels[token];\n}\n\nexport function tokenOperatorPrecedence(token: TokenType): number {\n  return tokenBinops[token];\n}\n\nexport function tokenIsBinaryOperator(token: TokenType): boolean {\n  return tokenBinops[token] !== -1;\n}\n\nexport function tokenIsRightAssociative(token: TokenType): boolean {\n  return token === tt.exponent;\n}\n\nexport function tokenIsTemplate(token: TokenType): boolean {\n  return token >= tt.templateTail && token <= tt.templateNonTail;\n}\n\nexport function getExportedToken(token: TokenType): ExportedTokenType {\n  return tokenTypes[token];\n}\n\nexport function isTokenType(obj: any): boolean {\n  return typeof obj === \"number\";\n}\n\nif (!process.env.BABEL_8_BREAKING) {\n  tokenTypes[tt.braceR].updateContext = context => {\n    context.pop();\n  };\n\n  tokenTypes[tt.braceL].updateContext =\n    tokenTypes[tt.braceHashL].updateContext =\n    tokenTypes[tt.dollarBraceL].updateContext =\n      context => {\n        context.push(tc.brace);\n      };\n\n  tokenTypes[tt.backQuote].updateContext = context => {\n    if (context[context.length - 1] === tc.template) {\n      context.pop();\n    } else {\n      context.push(tc.template);\n    }\n  };\n\n  tokenTypes[tt.jsxTagStart].updateContext = context => {\n    context.push(tc.j_expr, tc.j_oTag);\n  };\n}\n","// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.cjs`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n  \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.cjs`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,2,60,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,42,9,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,496,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,7,9,32,4,318,1,80,3,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,343,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,726,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n  let pos = 0x10000;\n  for (let i = 0, length = set.length; i < length; i += 2) {\n    pos += set[i];\n    if (pos > code) return false;\n\n    pos += set[i + 1];\n    if (pos >= code) return true;\n  }\n  return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n  if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return (\n      code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n    );\n  }\n  return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n  if (code < charCodes.digit0) return code === charCodes.dollarSign;\n  if (code < charCodes.colon) return true;\n  if (code < charCodes.uppercaseA) return false;\n  if (code <= charCodes.uppercaseZ) return true;\n  if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n  if (code <= charCodes.lowercaseZ) return true;\n  if (code <= 0xffff) {\n    return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n  }\n  return (\n    isInAstralSet(code, astralIdentifierStartCodes) ||\n    isInAstralSet(code, astralIdentifierCodes)\n  );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n  let isFirst = true;\n  for (let i = 0; i < name.length; i++) {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = name.charCodeAt(i);\n    if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n      const trail = name.charCodeAt(++i);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    if (isFirst) {\n      isFirst = false;\n      if (!isIdentifierStart(cp)) {\n        return false;\n      }\n    } else if (!isIdentifierChar(cp)) {\n      return false;\n    }\n  }\n  return !isFirst;\n}\n","const reservedWords = {\n  keyword: [\n    \"break\",\n    \"case\",\n    \"catch\",\n    \"continue\",\n    \"debugger\",\n    \"default\",\n    \"do\",\n    \"else\",\n    \"finally\",\n    \"for\",\n    \"function\",\n    \"if\",\n    \"return\",\n    \"switch\",\n    \"throw\",\n    \"try\",\n    \"var\",\n    \"const\",\n    \"while\",\n    \"with\",\n    \"new\",\n    \"this\",\n    \"super\",\n    \"class\",\n    \"extends\",\n    \"export\",\n    \"import\",\n    \"null\",\n    \"true\",\n    \"false\",\n    \"in\",\n    \"instanceof\",\n    \"typeof\",\n    \"void\",\n    \"delete\",\n  ],\n  strict: [\n    \"implements\",\n    \"interface\",\n    \"let\",\n    \"package\",\n    \"private\",\n    \"protected\",\n    \"public\",\n    \"static\",\n    \"yield\",\n  ],\n  strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n  return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n  return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n  return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n  word: string,\n  inModule: boolean,\n): boolean {\n  return (\n    isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n  );\n}\n\nexport function isKeyword(word: string): boolean {\n  return keywords.has(word);\n}\n","import * as charCodes from \"charcodes\";\nimport { isIdentifierStart } from \"@babel/helper-validator-identifier\";\n\nexport {\n  isIdentifierStart,\n  isIdentifierChar,\n  isReservedWord,\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n  isStrictReservedWord,\n  isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nexport const keywordRelationalOperator = /^in(stanceof)?$/;\n\n// Test whether a current state character code and next character code is @\n\nexport function isIteratorStart(\n  current: number,\n  next: number,\n  next2: number,\n): boolean {\n  return (\n    current === charCodes.atSign &&\n    next === charCodes.atSign &&\n    isIdentifierStart(next2)\n  );\n}\n\n// This is the comprehensive set of JavaScript reserved words\n// If a word is in this set, it could be a reserved word,\n// depending on sourceType/strictMode/binding info. In other words\n// if a word is not in this set, it is not a reserved word under\n// any circumstance.\nconst reservedWordLikeSet = new Set([\n  \"break\",\n  \"case\",\n  \"catch\",\n  \"continue\",\n  \"debugger\",\n  \"default\",\n  \"do\",\n  \"else\",\n  \"finally\",\n  \"for\",\n  \"function\",\n  \"if\",\n  \"return\",\n  \"switch\",\n  \"throw\",\n  \"try\",\n  \"var\",\n  \"const\",\n  \"while\",\n  \"with\",\n  \"new\",\n  \"this\",\n  \"super\",\n  \"class\",\n  \"extends\",\n  \"export\",\n  \"import\",\n  \"null\",\n  \"true\",\n  \"false\",\n  \"in\",\n  \"instanceof\",\n  \"typeof\",\n  \"void\",\n  \"delete\",\n  // strict\n  \"implements\",\n  \"interface\",\n  \"let\",\n  \"package\",\n  \"private\",\n  \"protected\",\n  \"public\",\n  \"static\",\n  \"yield\",\n  // strictBind\n  \"eval\",\n  \"arguments\",\n  // reservedWorkLike\n  \"enum\",\n  \"await\",\n]);\n\nexport function canBeReservedWord(word: string): boolean {\n  return reservedWordLikeSet.has(word);\n}\n","import { ScopeFlag, BindingFlag } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport type * as N from \"../types.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport const enum NameType {\n  // var-declared names in the current lexical scope\n  Var = 1 << 0,\n  // lexically-declared names in the current lexical scope\n  Lexical = 1 << 1,\n  // lexically-declared FunctionDeclaration names in the current lexical scope\n  Function = 1 << 2,\n}\n\n// Start an AST node, attaching a start offset.\nexport class Scope {\n  flags: ScopeFlag = 0;\n  names: Map<string, NameType> = new Map();\n  firstLexicalName = \"\";\n\n  constructor(flags: ScopeFlag) {\n    this.flags = flags;\n  }\n}\n\n// The functions in this module keep track of declared variables in the\n// current scope in order to detect duplicate variable names.\nexport default class ScopeHandler<IScope extends Scope = Scope> {\n  parser: Tokenizer;\n  scopeStack: Array<IScope> = [];\n  inModule: boolean;\n  undefinedExports: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer, inModule: boolean) {\n    this.parser = parser;\n    this.inModule = inModule;\n  }\n\n  get inTopLevel() {\n    return (this.currentScope().flags & ScopeFlag.PROGRAM) > 0;\n  }\n  get inFunction() {\n    return (this.currentVarScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get allowSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.SUPER) > 0;\n  }\n  get allowDirectSuper() {\n    return (this.currentThisScopeFlags() & ScopeFlag.DIRECT_SUPER) > 0;\n  }\n  get allowNewTarget() {\n    return (this.currentThisScopeFlags() & ScopeFlag.NEW_TARGET) > 0;\n  }\n  get inClass() {\n    return (this.currentThisScopeFlags() & ScopeFlag.CLASS_BASE) > 0;\n  }\n  get inClassAndNotInNonArrowFunction() {\n    const flags = this.currentThisScopeFlags();\n    return (\n      (flags & ScopeFlag.CLASS_BASE) > 0 &&\n      (flags & ScopeFlag.FUNCTION_BASE) === 0\n    );\n  }\n  get inStaticBlock() {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.STATIC_BLOCK) {\n        return true;\n      }\n      if (flags & (ScopeFlag.VAR | ScopeFlag.CLASS_BASE)) {\n        // function body, module body, class property initializers\n        return false;\n      }\n    }\n  }\n  get inNonArrowFunction() {\n    return (this.currentThisScopeFlags() & ScopeFlag.FUNCTION_BASE) > 0;\n  }\n  get inBareCaseStatement() {\n    return (this.currentScope().flags & ScopeFlag.SWITCH) > 0;\n  }\n  get treatFunctionsAsVar() {\n    return this.treatFunctionsAsVarInScope(this.currentScope());\n  }\n\n  createScope(flags: ScopeFlag): Scope {\n    return new Scope(flags);\n  }\n\n  enter(flags: ScopeFlag) {\n    /*:: +createScope: (flags:ScopeFlag) => IScope; */\n    // @ts-expect-error This method will be overwritten by subclasses\n    this.scopeStack.push(this.createScope(flags));\n  }\n\n  exit(): ScopeFlag {\n    const scope = this.scopeStack.pop();\n    return scope.flags;\n  }\n\n  // The spec says:\n  // > At the top level of a function, or script, function declarations are\n  // > treated like var declarations rather than like lexical declarations.\n  treatFunctionsAsVarInScope(scope: IScope): boolean {\n    return !!(\n      scope.flags & (ScopeFlag.FUNCTION_BASE | ScopeFlag.STATIC_BLOCK) ||\n      (!this.parser.inModule && scope.flags & ScopeFlag.PROGRAM)\n    );\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    let scope = this.currentScope();\n    if (\n      bindingType & BindingFlag.SCOPE_LEXICAL ||\n      bindingType & BindingFlag.SCOPE_FUNCTION\n    ) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n\n      let type = scope.names.get(name) || 0;\n\n      if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n        type = type | NameType.Function;\n      } else {\n        if (!scope.firstLexicalName) {\n          scope.firstLexicalName = name;\n        }\n        type = type | NameType.Lexical;\n      }\n\n      scope.names.set(name, type);\n\n      if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n        this.maybeExportDefined(scope, name);\n      }\n    } else if (bindingType & BindingFlag.SCOPE_VAR) {\n      for (let i = this.scopeStack.length - 1; i >= 0; --i) {\n        scope = this.scopeStack[i];\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        scope.names.set(name, (scope.names.get(name) || 0) | NameType.Var);\n        this.maybeExportDefined(scope, name);\n\n        if (scope.flags & ScopeFlag.VAR) break;\n      }\n    }\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  maybeExportDefined(scope: IScope, name: string) {\n    if (this.parser.inModule && scope.flags & ScopeFlag.PROGRAM) {\n      this.undefinedExports.delete(name);\n    }\n  }\n\n  checkRedeclarationInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n    loc: Position,\n  ) {\n    if (this.isRedeclaredInScope(scope, name, bindingType)) {\n      this.parser.raise(Errors.VarRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n  }\n\n  isRedeclaredInScope(\n    scope: IScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (!(bindingType & BindingFlag.KIND_VALUE)) return false;\n\n    if (bindingType & BindingFlag.SCOPE_LEXICAL) {\n      return scope.names.has(name);\n    }\n\n    const type = scope.names.get(name);\n\n    if (bindingType & BindingFlag.SCOPE_FUNCTION) {\n      return (\n        (type & NameType.Lexical) > 0 ||\n        (!this.treatFunctionsAsVarInScope(scope) && (type & NameType.Var) > 0)\n      );\n    }\n\n    return (\n      ((type & NameType.Lexical) > 0 &&\n        // Annex B.3.4\n        // https://tc39.es/ecma262/#sec-variablestatements-in-catch-blocks\n        !(\n          scope.flags & ScopeFlag.SIMPLE_CATCH &&\n          scope.firstLexicalName === name\n        )) ||\n      (!this.treatFunctionsAsVarInScope(scope) &&\n        (type & NameType.Function) > 0)\n    );\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n    const topLevelScope = this.scopeStack[0];\n    if (!topLevelScope.names.has(name)) {\n      this.undefinedExports.set(name, id.loc.start);\n    }\n  }\n\n  currentScope(): IScope {\n    return this.scopeStack[this.scopeStack.length - 1];\n  }\n\n  currentVarScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (flags & ScopeFlag.VAR) {\n        return flags;\n      }\n    }\n  }\n\n  // Could be useful for `arguments`, `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n  currentThisScopeFlags(): ScopeFlag {\n    for (let i = this.scopeStack.length - 1; ; i--) {\n      const { flags } = this.scopeStack[i];\n      if (\n        flags & (ScopeFlag.VAR | ScopeFlag.CLASS_BASE) &&\n        !(flags & ScopeFlag.ARROW)\n      ) {\n        return flags;\n      }\n    }\n  }\n}\n","import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, type ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\n\n// Reference implementation: https://github.com/facebook/flow/blob/23aeb2a2ef6eb4241ce178fde5d8f17c5f747fb5/src/typing/env.ml#L536-L584\nclass FlowScope extends Scope {\n  // declare function foo(): type;\n  declareFunctions: Set<string> = new Set();\n}\n\nexport default class FlowScopeHandler extends ScopeHandler<FlowScope> {\n  createScope(flags: ScopeFlag): FlowScope {\n    return new FlowScope(flags);\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    const scope = this.currentScope();\n    if (bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN) {\n      this.checkRedeclarationInScope(scope, name, bindingType, loc);\n      this.maybeExportDefined(scope, name);\n      scope.declareFunctions.add(name);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n  }\n\n  isRedeclaredInScope(\n    scope: FlowScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    if (super.isRedeclaredInScope(scope, name, bindingType)) return true;\n\n    if (\n      bindingType & BindingFlag.FLAG_FLOW_DECLARE_FN &&\n      !scope.declareFunctions.has(name)\n    ) {\n      const type = scope.names.get(name);\n      return (type & NameType.Function) > 0 || (type & NameType.Lexical) > 0;\n    }\n\n    return false;\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    if (!this.scopeStack[0].declareFunctions.has(id.name)) {\n      super.checkLocalExport(id);\n    }\n  }\n}\n","/*:: declare var invariant; */\n\nimport type Parser from \"../../parser/index.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeyword,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLiteralPropertyName,\n  tokenLabelName,\n  tt,\n  type TokenType,\n  tokenIsFlowInterfaceOrTypeOrOpaque,\n} from \"../../tokenizer/types.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIteratorStart } from \"../../util/identifier.ts\";\nimport FlowScopeHandler from \"./scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\n\nconst reservedTypes = new Set([\n  \"_\",\n  \"any\",\n  \"bool\",\n  \"boolean\",\n  \"empty\",\n  \"extends\",\n  \"false\",\n  \"interface\",\n  \"mixed\",\n  \"null\",\n  \"number\",\n  \"static\",\n  \"string\",\n  \"true\",\n  \"typeof\",\n  \"void\",\n]);\n\n/* eslint sort-keys: \"error\" */\n// The Errors key follows https://github.com/facebook/flow/blob/master/src/parser/parse_error.ml unless it does not exist\nconst FlowErrors = ParseErrorEnum`flow`({\n  AmbiguousConditionalArrow:\n    \"Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.\",\n  AmbiguousDeclareModuleKind:\n    \"Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.\",\n  // TODO: When we get proper string enums in typescript make this ReservedType.\n  // Not really worth it to do the whole $Values dance with reservedTypes set.\n  AssignReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Cannot overwrite reserved type ${reservedType}.`,\n  DeclareClassElement:\n    \"The `declare` modifier can only appear on class fields.\",\n  DeclareClassFieldInitializer:\n    \"Initializers are not allowed in fields with the `declare` modifier.\",\n  DuplicateDeclareModuleExports:\n    \"Duplicate `declare module.exports` statement.\",\n  EnumBooleanMemberNotInitialized: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Boolean enum members need to be initialized. Use either \\`${memberName} = true,\\` or \\`${memberName} = false,\\` in enum \\`${enumName}\\`.`,\n  EnumDuplicateMemberName: ({\n    memberName,\n    enumName,\n  }: {\n    memberName: string;\n    enumName: string;\n  }) =>\n    `Enum member names need to be unique, but the name \\`${memberName}\\` has already been used before in enum \\`${enumName}\\`.`,\n  EnumInconsistentMemberValues: ({ enumName }: { enumName: string }) =>\n    `Enum \\`${enumName}\\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,\n  EnumInvalidExplicitType: ({\n    invalidEnumType,\n    enumName,\n  }: {\n    invalidEnumType: string;\n    enumName: string;\n  }) =>\n    `Enum type \\`${invalidEnumType}\\` is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidExplicitTypeUnknownSupplied: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `Supplied enum type is not valid. Use one of \\`boolean\\`, \\`number\\`, \\`string\\`, or \\`symbol\\` in enum \\`${enumName}\\`.`,\n\n  // TODO: When moving to typescript, we should either have each of the\n  // following errors only accept the specific strings they want:\n  //\n  // ...PrimaryType: explicitType: \"string\" | \"number\" | \"boolean\"\n  // ...SymbolType: explicitType: \"symbol\"\n  // ...UnknownType: explicitType: null\n  //\n  // Or, alternatively, merge these three errors together into one\n  // `EnumInvalidMemberInitializer` error that can accept `EnumExplicitType`\n  // without alteration, and then just have its message change based on the\n  // explicitType.\n  EnumInvalidMemberInitializerPrimaryType: ({\n    enumName,\n    memberName,\n    explicitType,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Enum \\`${enumName}\\` has type \\`${explicitType}\\`, so the initializer of \\`${memberName}\\` needs to be a ${explicitType} literal.`,\n  EnumInvalidMemberInitializerSymbolType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `Symbol enum members cannot be initialized. Use \\`${memberName},\\` in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberInitializerUnknownType: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n    explicitType: EnumExplicitType;\n  }) =>\n    `The enum member initializer for \\`${memberName}\\` needs to be a literal (either a boolean, number, or string) in enum \\`${enumName}\\`.`,\n  EnumInvalidMemberName: ({\n    enumName,\n    memberName,\n    suggestion,\n  }: {\n    enumName: string;\n    memberName: string;\n    suggestion: string;\n  }) =>\n    `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \\`${memberName}\\`, consider using \\`${suggestion}\\`, in enum \\`${enumName}\\`.`,\n  EnumNumberMemberNotInitialized: ({\n    enumName,\n    memberName,\n  }: {\n    enumName: string;\n    memberName: string;\n  }) =>\n    `Number enum members need to be initialized, e.g. \\`${memberName} = 1\\` in enum \\`${enumName}\\`.`,\n  EnumStringMemberInconsistentlyInitialized: ({\n    enumName,\n  }: {\n    enumName: string;\n  }) =>\n    `String enum members need to consistently either all use initializers, or use no initializers, in enum \\`${enumName}\\`.`,\n  GetterMayNotHaveThisParam: \"A getter cannot have a `this` parameter.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` or `typeof` keyword.\",\n  ImportTypeShorthandOnlyInPureImport:\n    \"The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.\",\n  InexactInsideExact:\n    \"Explicit inexact syntax cannot appear inside an explicit exact object type.\",\n  InexactInsideNonObject:\n    \"Explicit inexact syntax cannot appear in class or interface definitions.\",\n  InexactVariance: \"Explicit inexact syntax cannot have variance.\",\n  InvalidNonTypeImportInDeclareModule:\n    \"Imports within a `declare module` body must always be `import type` or `import typeof`.\",\n  MissingTypeParamDefault:\n    \"Type parameter declaration needs a default, since a preceding type parameter declaration has a default.\",\n  NestedDeclareModule:\n    \"`declare module` cannot be used inside another `declare module`.\",\n  NestedFlowComment: \"Cannot have a flow comment inside another flow comment.\",\n  PatternIsOptional: {\n    message:\n      \"A binding pattern parameter cannot be optional in an implementation signature.\",\n    // For consistency in TypeScript and Flow error codes\n    ...(!process.env.BABEL_8_BREAKING\n      ? { reasonCode: \"OptionalBindingPattern\" }\n      : {}),\n  },\n  SetterMayNotHaveThisParam: \"A setter cannot have a `this` parameter.\",\n  SpreadVariance: \"Spread properties cannot have variance.\",\n  ThisParamAnnotationRequired:\n    \"A type annotation is required for the `this` parameter.\",\n  ThisParamBannedInConstructor:\n    \"Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.\",\n  ThisParamMayNotBeOptional: \"The `this` parameter cannot be optional.\",\n  ThisParamMustBeFirst:\n    \"The `this` parameter must be the first function parameter.\",\n  ThisParamNoDefault: \"The `this` parameter may not have a default value.\",\n  TypeBeforeInitializer:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeCastInPattern:\n    \"The type cast expression is expected to be wrapped with parenthesis.\",\n  UnexpectedExplicitInexactInObject:\n    \"Explicit inexact syntax must appear at the end of an inexact object.\",\n  UnexpectedReservedType: ({ reservedType }: { reservedType: string }) =>\n    `Unexpected reserved type ${reservedType}.`,\n  UnexpectedReservedUnderscore:\n    \"`_` is only allowed as a type argument to call or new.\",\n  UnexpectedSpaceBetweenModuloChecks:\n    \"Spaces between `%` and `checks` are not allowed here.\",\n  UnexpectedSpreadType:\n    \"Spread operator cannot appear in class or interface definitions.\",\n  UnexpectedSubtractionOperand:\n    'Unexpected token, expected \"number\" or \"bigint\".',\n  UnexpectedTokenAfterTypeParameter:\n    \"Expected an arrow function after this type parameter declaration.\",\n  UnexpectedTypeParameterBeforeAsyncArrowFunction:\n    \"Type parameters must come after the async keyword, e.g. instead of `<T> async () => {}`, use `async <T>() => {}`.\",\n  UnsupportedDeclareExportKind: ({\n    unsupportedExportKind,\n    suggestion,\n  }: {\n    unsupportedExportKind: string;\n    suggestion: string;\n  }) =>\n    `\\`declare export ${unsupportedExportKind}\\` is not supported. Use \\`${suggestion}\\` instead.`,\n  UnsupportedStatementInDeclareModule:\n    \"Only declares and type imports are allowed inside declare module.\",\n  UnterminatedFlowComment: \"Unterminated flow-comment.\",\n});\n/* eslint-disable sort-keys */\n\nfunction isEsModuleType(bodyElement: N.Node): boolean {\n  return (\n    bodyElement.type === \"DeclareExportAllDeclaration\" ||\n    (bodyElement.type === \"DeclareExportDeclaration\" &&\n      (!bodyElement.declaration ||\n        (bodyElement.declaration.type !== \"TypeAlias\" &&\n          bodyElement.declaration.type !== \"InterfaceDeclaration\")))\n  );\n}\n\nfunction hasTypeImportKind(\n  node: Undone<N.ImportSpecifier | N.ImportDeclaration>,\n): boolean {\n  return node.importKind === \"type\" || node.importKind === \"typeof\";\n}\n\nconst exportSuggestions = {\n  const: \"declare export var\",\n  let: \"declare export var\",\n  type: \"export type\",\n  interface: \"export interface\",\n};\n\n// Like Array#filter, but returns a tuple [ acceptedElements, discardedElements ]\nfunction partition<T>(\n  list: T[],\n  test: (c: T, b: number, a: T[]) => boolean | undefined | null,\n): [T[], T[]] {\n  const list1: T[] = [];\n  const list2: T[] = [];\n  for (let i = 0; i < list.length; i++) {\n    (test(list[i], i, list) ? list1 : list2).push(list[i]);\n  }\n  return [list1, list2];\n}\n\nconst FLOW_PRAGMA_REGEX = /\\*?\\s*@((?:no)?flow)\\b/;\n\n// Flow enums types\ntype EnumExplicitType = null | \"boolean\" | \"number\" | \"string\" | \"symbol\";\n\ntype EnumContext = {\n  enumName: string;\n  explicitType: EnumExplicitType;\n  memberName: string;\n};\n\ntype EnumMemberInit =\n  | {\n      type: \"number\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"string\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"boolean\";\n      loc: Position;\n      value: N.Node;\n    }\n  | {\n      type: \"invalid\";\n      loc: Position;\n    }\n  | {\n      type: \"none\";\n      loc: Position;\n    };\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class FlowParserMixin extends superClass implements Parser {\n    // The value of the @flow/@noflow pragma. Initially undefined, transitions\n    // to \"@flow\" or \"@noflow\" if we see a pragma. Transitions to null if we are\n    // past the initial comment.\n    flowPragma: void | null | \"flow\" | \"noflow\" = undefined;\n\n    getScopeHandler(): new (...args: any) => FlowScopeHandler {\n      return FlowScopeHandler;\n    }\n\n    shouldParseTypes(): boolean {\n      return this.getPluginOption(\"flow\", \"all\") || this.flowPragma === \"flow\";\n    }\n\n    finishToken(type: TokenType, val: any): void {\n      if (\n        type !== tt.string &&\n        type !== tt.semi &&\n        type !== tt.interpreterDirective\n      ) {\n        if (this.flowPragma === undefined) {\n          this.flowPragma = null;\n        }\n      }\n      super.finishToken(type, val);\n    }\n\n    addComment(comment: N.Comment): void {\n      if (this.flowPragma === undefined) {\n        // Try to parse a flow pragma.\n        const matches = FLOW_PRAGMA_REGEX.exec(comment.value);\n        if (!matches) {\n          // do nothing\n        } else if (matches[1] === \"flow\") {\n          this.flowPragma = \"flow\";\n        } else if (matches[1] === \"noflow\") {\n          this.flowPragma = \"noflow\";\n        } else {\n          throw new Error(\"Unexpected flow pragma\");\n        }\n      }\n      super.addComment(comment);\n    }\n\n    flowParseTypeInitialiser(tok?: TokenType): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tok || tt.colon);\n\n      const type = this.flowParseType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParsePredicate(): N.FlowPredicate {\n      const node = this.startNode<N.FlowPredicate>();\n      const moduloLoc = this.state.startLoc;\n      this.next(); // eat `%`\n      this.expectContextual(tt._checks);\n      // Force '%' and 'checks' to be adjacent\n      if (this.state.lastTokStartLoc.index > moduloLoc.index + 1) {\n        this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, moduloLoc);\n      }\n      if (this.eat(tt.parenL)) {\n        node.value = super.parseExpression();\n        this.expect(tt.parenR);\n        return this.finishNode(node, \"DeclaredPredicate\");\n      } else {\n        return this.finishNode(node, \"InferredPredicate\");\n      }\n    }\n\n    flowParseTypeAndPredicateInitialiser(): [\n      N.FlowType | undefined | null,\n      N.FlowPredicate | undefined | null,\n    ] {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      this.expect(tt.colon);\n      let type = null;\n      let predicate = null;\n      if (this.match(tt.modulo)) {\n        this.state.inType = oldInType;\n        predicate = this.flowParsePredicate();\n      } else {\n        type = this.flowParseType();\n        this.state.inType = oldInType;\n        if (this.match(tt.modulo)) {\n          predicate = this.flowParsePredicate();\n        }\n      }\n      return [type, predicate];\n    }\n\n    flowParseDeclareClass(\n      node: Undone<N.FlowDeclareClass>,\n    ): N.FlowDeclareClass {\n      this.next();\n      this.flowParseInterfaceish(node, /*isClass*/ true);\n      return this.finishNode(node, \"DeclareClass\");\n    }\n\n    flowParseDeclareFunction(\n      node: Undone<N.FlowDeclareFunction>,\n    ): N.FlowDeclareFunction {\n      this.next();\n\n      const id = (node.id = this.parseIdentifier());\n\n      const typeNode = this.startNode<N.FlowFunctionTypeAnnotation>();\n      const typeContainer = this.startNode<N.TypeAnnotation>();\n\n      if (this.match(tt.lt)) {\n        typeNode.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        typeNode.typeParameters = null;\n      }\n\n      this.expect(tt.parenL);\n      const tmp = this.flowParseFunctionTypeParams();\n      typeNode.params = tmp.params;\n      typeNode.rest = tmp.rest;\n      typeNode.this = tmp._this;\n      this.expect(tt.parenR);\n\n      [typeNode.returnType, node.predicate] =\n        this.flowParseTypeAndPredicateInitialiser();\n\n      typeContainer.typeAnnotation = this.finishNode(\n        typeNode,\n        \"FunctionTypeAnnotation\",\n      );\n\n      id.typeAnnotation = this.finishNode(typeContainer, \"TypeAnnotation\");\n\n      this.resetEndLocation(id);\n      this.semicolon();\n\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_FLOW_DECLARE_FN,\n        node.id.loc.start,\n      );\n\n      return this.finishNode(node, \"DeclareFunction\");\n    }\n\n    flowParseDeclare(\n      node: Undone<N.FlowDeclare>,\n      insideModule?: boolean,\n    ): N.FlowDeclare {\n      if (this.match(tt._class)) {\n        return this.flowParseDeclareClass(node);\n      } else if (this.match(tt._function)) {\n        return this.flowParseDeclareFunction(node);\n      } else if (this.match(tt._var)) {\n        return this.flowParseDeclareVariable(node);\n      } else if (this.eatContextual(tt._module)) {\n        if (this.match(tt.dot)) {\n          return this.flowParseDeclareModuleExports(node);\n        } else {\n          if (insideModule) {\n            this.raise(\n              FlowErrors.NestedDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          return this.flowParseDeclareModule(node);\n        }\n      } else if (this.isContextual(tt._type)) {\n        return this.flowParseDeclareTypeAlias(node);\n      } else if (this.isContextual(tt._opaque)) {\n        return this.flowParseDeclareOpaqueType(node);\n      } else if (this.isContextual(tt._interface)) {\n        return this.flowParseDeclareInterface(node);\n      } else if (this.match(tt._export)) {\n        return this.flowParseDeclareExportDeclaration(node, insideModule);\n      } else {\n        this.unexpected();\n      }\n    }\n\n    flowParseDeclareVariable(\n      node: Undone<N.FlowDeclareVariable>,\n    ): N.FlowDeclareVariable {\n      this.next();\n      node.id = this.flowParseTypeAnnotatableIdentifier(\n        /*allowPrimitiveOverride*/ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_VAR,\n        node.id.loc.start,\n      );\n      this.semicolon();\n      return this.finishNode(node, \"DeclareVariable\");\n    }\n\n    flowParseDeclareModule(\n      node: Undone<N.FlowDeclareModule>,\n    ): N.FlowDeclareModule {\n      this.scope.enter(ScopeFlag.OTHER);\n\n      if (this.match(tt.string)) {\n        node.id = super.parseExprAtom();\n      } else {\n        node.id = this.parseIdentifier();\n      }\n\n      const bodyNode = (node.body = this.startNode<N.BlockStatement>());\n      // @ts-expect-error refine typings\n      const body = (bodyNode.body = []);\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        let bodyNode = this.startNode<N.ImportDeclaration>();\n\n        if (this.match(tt._import)) {\n          this.next();\n          if (!this.isContextual(tt._type) && !this.match(tt._typeof)) {\n            this.raise(\n              FlowErrors.InvalidNonTypeImportInDeclareModule,\n              this.state.lastTokStartLoc,\n            );\n          }\n          super.parseImport(bodyNode);\n        } else {\n          this.expectContextual(\n            tt._declare,\n            FlowErrors.UnsupportedStatementInDeclareModule,\n          );\n          // @ts-expect-error refine typings\n          bodyNode = this.flowParseDeclare(bodyNode, true);\n        }\n\n        body.push(bodyNode);\n      }\n\n      this.scope.exit();\n\n      this.expect(tt.braceR);\n\n      this.finishNode(bodyNode, \"BlockStatement\");\n\n      let kind: \"CommonJS\" | \"ES\" | null = null;\n      let hasModuleExport = false;\n      body.forEach(bodyElement => {\n        if (isEsModuleType(bodyElement)) {\n          if (kind === \"CommonJS\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"ES\";\n        } else if (bodyElement.type === \"DeclareModuleExports\") {\n          if (hasModuleExport) {\n            this.raise(FlowErrors.DuplicateDeclareModuleExports, bodyElement);\n          }\n          if (kind === \"ES\") {\n            this.raise(FlowErrors.AmbiguousDeclareModuleKind, bodyElement);\n          }\n          kind = \"CommonJS\";\n          hasModuleExport = true;\n        }\n      });\n\n      node.kind = kind || \"CommonJS\";\n      return this.finishNode(node, \"DeclareModule\");\n    }\n\n    flowParseDeclareExportDeclaration(\n      node: Undone<N.FlowDeclareExportDeclaration>,\n      insideModule?: boolean | null,\n    ): N.FlowDeclareExportDeclaration {\n      this.expect(tt._export);\n\n      if (this.eat(tt._default)) {\n        if (this.match(tt._function) || this.match(tt._class)) {\n          // declare export default class ...\n          // declare export default function ...\n          node.declaration = this.flowParseDeclare(this.startNode());\n        } else {\n          // declare export default [type];\n          node.declaration = this.flowParseType();\n          this.semicolon();\n        }\n        node.default = true;\n\n        return this.finishNode(node, \"DeclareExportDeclaration\");\n      } else {\n        if (\n          this.match(tt._const) ||\n          this.isLet() ||\n          ((this.isContextual(tt._type) || this.isContextual(tt._interface)) &&\n            !insideModule)\n        ) {\n          const label = this.state.value as\n            | \"const\"\n            | \"let\"\n            | \"type\"\n            | \"interface\";\n          throw this.raise(\n            FlowErrors.UnsupportedDeclareExportKind,\n            this.state.startLoc,\n            {\n              unsupportedExportKind: label,\n              suggestion: exportSuggestions[label],\n            },\n          );\n        }\n\n        if (\n          this.match(tt._var) || // declare export var ...\n          this.match(tt._function) || // declare export function ...\n          this.match(tt._class) || // declare export class ...\n          this.isContextual(tt._opaque) // declare export opaque ..\n        ) {\n          node.declaration = this.flowParseDeclare(this.startNode());\n          node.default = false;\n\n          return this.finishNode(node, \"DeclareExportDeclaration\");\n        } else if (\n          this.match(tt.star) || // declare export * from ''\n          this.match(tt.braceL) || // declare export {} ...\n          this.isContextual(tt._interface) || // declare export interface ...\n          this.isContextual(tt._type) || // declare export type ...\n          this.isContextual(tt._opaque) // declare export opaque type ...\n        ) {\n          node = this.parseExport(\n            node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n            /* decorators */ null,\n          );\n          if (node.type === \"ExportNamedDeclaration\") {\n            node.default = false;\n            delete node.exportKind;\n            return this.castNodeTo(\n              node as N.ExportNamedDeclaration,\n              \"DeclareExportDeclaration\",\n            );\n          } else {\n            return this.castNodeTo(\n              node as N.ExportAllDeclaration,\n              \"DeclareExportAllDeclaration\",\n            );\n          }\n        }\n      }\n\n      this.unexpected();\n    }\n\n    flowParseDeclareModuleExports(\n      node: Undone<N.FlowDeclareModuleExports>,\n    ): N.FlowDeclareModuleExports {\n      this.next();\n      this.expectContextual(tt._exports);\n      node.typeAnnotation = this.flowParseTypeAnnotation();\n      this.semicolon();\n\n      return this.finishNode(node, \"DeclareModuleExports\");\n    }\n\n    flowParseDeclareTypeAlias(\n      node: Undone<N.FlowDeclareTypeAlias>,\n    ): N.FlowDeclareTypeAlias {\n      this.next();\n      const finished = this.flowParseTypeAlias(\n        node,\n      ) as unknown as N.FlowDeclareTypeAlias;\n      // Don't do finishNode as we don't want to process comments twice\n      this.castNodeTo(finished, \"DeclareTypeAlias\");\n      return finished;\n    }\n\n    flowParseDeclareOpaqueType(\n      node: Undone<N.FlowDeclareOpaqueType>,\n    ): N.FlowDeclareOpaqueType {\n      this.next();\n      const finished = this.flowParseOpaqueType(\n        node,\n        true,\n      ) as unknown as N.FlowDeclareOpaqueType;\n      // Don't do finishNode as we don't want to process comments twice\n      this.castNodeTo(finished, \"DeclareOpaqueType\");\n      return finished;\n    }\n\n    flowParseDeclareInterface(\n      node: Undone<N.FlowDeclareInterface>,\n    ): N.FlowDeclareInterface {\n      this.next();\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"DeclareInterface\");\n    }\n\n    // Interfaces\n\n    flowParseInterfaceish(node: Undone<N.FlowDeclare>, isClass: boolean): void {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ !isClass,\n        /* declaration */ true,\n      );\n\n      this.scope.declareName(\n        node.id.name,\n        isClass ? BindingFlag.TYPE_FUNCTION : BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.extends = [];\n\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (!isClass && this.eat(tt.comma));\n      }\n\n      if (isClass) {\n        node.implements = [];\n        node.mixins = [];\n\n        if (this.eatContextual(tt._mixins)) {\n          do {\n            node.mixins.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n\n        if (this.eatContextual(tt._implements)) {\n          do {\n            node.implements.push(this.flowParseInterfaceExtends());\n          } while (this.eat(tt.comma));\n        }\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: isClass,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: isClass,\n        allowInexact: false,\n      });\n    }\n\n    flowParseInterfaceExtends(): N.FlowInterfaceExtends {\n      const node = this.startNode<N.FlowInterfaceExtends>();\n\n      node.id = this.flowParseQualifiedTypeIdentifier();\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      } else {\n        node.typeParameters = null;\n      }\n\n      return this.finishNode(node, \"InterfaceExtends\");\n    }\n\n    flowParseInterface(node: Undone<N.FlowInterface>): N.FlowInterface {\n      this.flowParseInterfaceish(node, /* isClass */ false);\n      return this.finishNode(node, \"InterfaceDeclaration\");\n    }\n\n    checkNotUnderscore(word: string) {\n      if (word === \"_\") {\n        this.raise(\n          FlowErrors.UnexpectedReservedUnderscore,\n          this.state.startLoc,\n        );\n      }\n    }\n\n    checkReservedType(word: string, startLoc: Position, declaration?: boolean) {\n      if (!reservedTypes.has(word)) return;\n\n      this.raise(\n        declaration\n          ? FlowErrors.AssignReservedType\n          : FlowErrors.UnexpectedReservedType,\n        startLoc,\n        {\n          reservedType: word,\n        },\n      );\n    }\n\n    flowParseRestrictedIdentifier(\n      liberal?: boolean,\n      declaration?: boolean,\n    ): N.Identifier {\n      this.checkReservedType(\n        this.state.value,\n        this.state.startLoc,\n        declaration,\n      );\n      return this.parseIdentifier(liberal);\n    }\n\n    // Type aliases\n\n    flowParseTypeAlias(node: Undone<N.FlowTypeAlias>): N.FlowTypeAlias {\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ false,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      node.right = this.flowParseTypeInitialiser(tt.eq);\n      this.semicolon();\n\n      return this.finishNode(node, \"TypeAlias\");\n    }\n\n    flowParseOpaqueType(\n      node: Undone<N.FlowOpaqueType>,\n      declare: boolean,\n    ): N.FlowOpaqueType {\n      this.expectContextual(tt._type);\n      node.id = this.flowParseRestrictedIdentifier(\n        /* liberal */ true,\n        /* declaration */ true,\n      );\n      this.scope.declareName(\n        node.id.name,\n        BindingFlag.TYPE_LEXICAL,\n        node.id.loc.start,\n      );\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      } else {\n        node.typeParameters = null;\n      }\n\n      // Parse the supertype\n      node.supertype = null;\n      if (this.match(tt.colon)) {\n        node.supertype = this.flowParseTypeInitialiser(tt.colon);\n      }\n\n      node.impltype = null;\n      if (!declare) {\n        node.impltype = this.flowParseTypeInitialiser(tt.eq);\n      }\n      this.semicolon();\n\n      return this.finishNode(node, \"OpaqueType\");\n    }\n\n    // Type annotations\n\n    flowParseTypeParameter(requireDefault: boolean = false): N.TypeParameter {\n      const nodeStartLoc = this.state.startLoc;\n\n      const node = this.startNode<N.TypeParameter>();\n\n      const variance = this.flowParseVariance();\n\n      const ident = this.flowParseTypeAnnotatableIdentifier();\n      node.name = ident.name;\n      // @ts-expect-error migrate to Babel types\n      node.variance = variance;\n      // @ts-expect-error migrate to Babel types\n      node.bound = ident.typeAnnotation;\n\n      if (this.match(tt.eq)) {\n        this.eat(tt.eq);\n        // @ts-expect-error migrate to Babel types\n        node.default = this.flowParseType();\n      } else {\n        if (requireDefault) {\n          this.raise(FlowErrors.MissingTypeParamDefault, nodeStartLoc);\n        }\n      }\n\n      return this.finishNode(node, \"TypeParameter\");\n    }\n\n    flowParseTypeParameterDeclaration(): N.TypeParameterDeclaration {\n      const oldInType = this.state.inType;\n      const node = this.startNode<N.TypeParameterDeclaration>();\n      node.params = [];\n\n      this.state.inType = true;\n\n      // istanbul ignore else: this condition is already checked at all call sites\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      let defaultRequired = false;\n\n      do {\n        const typeParameter = this.flowParseTypeParameter(defaultRequired);\n\n        node.params.push(typeParameter);\n\n        if (typeParameter.default) {\n          defaultRequired = true;\n        }\n\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      } while (!this.match(tt.gt));\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterDeclaration\");\n    }\n\n    // Parse in top level normal context if we are in a JSX context\n    flowInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\n        const oldContext = this.state.context;\n        this.state.context = [oldContext[0]];\n        try {\n          return cb();\n        } finally {\n          this.state.context = oldContext;\n        }\n      } else {\n        return cb();\n      }\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    flowParseTypeParameterInstantiationInExpression():\n      | N.TypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.flowParseTypeParameterInstantiation();\n    }\n\n    flowParseTypeParameterInstantiation(): N.TypeParameterInstantiation {\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n\n      this.state.inType = true;\n      node.params = [];\n      this.flowInTopLevelContext(() => {\n        this.expect(tt.lt);\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = false;\n        while (!this.match(tt.gt)) {\n          node.params.push(this.flowParseType());\n          if (!this.match(tt.gt)) {\n            this.expect(tt.comma);\n          }\n        }\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      });\n\n      this.state.inType = oldInType;\n      if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseTypeParameterInstantiationCallOrNew(): N.TypeParameterInstantiation {\n      if (this.reScan_lt() !== tt.lt) return;\n      const node = this.startNode<N.TypeParameterInstantiation>();\n      const oldInType = this.state.inType;\n      node.params = [];\n\n      this.state.inType = true;\n\n      this.expect(tt.lt);\n      while (!this.match(tt.gt)) {\n        node.params.push(this.flowParseTypeOrImplicitInstantiation());\n        if (!this.match(tt.gt)) {\n          this.expect(tt.comma);\n        }\n      }\n      this.expect(tt.gt);\n\n      this.state.inType = oldInType;\n\n      return this.finishNode(node, \"TypeParameterInstantiation\");\n    }\n\n    flowParseInterfaceType(): N.FlowInterfaceType {\n      const node = this.startNode<N.FlowInterfaceType>();\n      this.expectContextual(tt._interface);\n\n      node.extends = [];\n      if (this.eat(tt._extends)) {\n        do {\n          node.extends.push(this.flowParseInterfaceExtends());\n        } while (this.eat(tt.comma));\n      }\n\n      node.body = this.flowParseObjectType({\n        allowStatic: false,\n        allowExact: false,\n        allowSpread: false,\n        allowProto: false,\n        allowInexact: false,\n      });\n\n      return this.finishNode(node, \"InterfaceTypeAnnotation\");\n    }\n\n    flowParseObjectPropertyKey(): N.Expression {\n      return this.match(tt.num) || this.match(tt.string)\n        ? super.parseExprAtom()\n        : this.parseIdentifier(true);\n    }\n\n    flowParseObjectTypeIndexer(\n      node: Undone<N.FlowObjectTypeIndexer>,\n      isStatic: boolean,\n      variance?: N.FlowVariance | null,\n    ): N.FlowObjectTypeIndexer {\n      node.static = isStatic;\n\n      // Note: bracketL has already been consumed\n      if (this.lookahead().type === tt.colon) {\n        node.id = this.flowParseObjectPropertyKey();\n        node.key = this.flowParseTypeInitialiser();\n      } else {\n        node.id = null;\n        node.key = this.flowParseType();\n      }\n      this.expect(tt.bracketR);\n      node.value = this.flowParseTypeInitialiser();\n      node.variance = variance;\n\n      return this.finishNode(node, \"ObjectTypeIndexer\");\n    }\n\n    flowParseObjectTypeInternalSlot(\n      node: Undone<N.FlowObjectTypeInternalSlot>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeInternalSlot {\n      node.static = isStatic;\n      // Note: both bracketL have already been consumed\n      node.id = this.flowParseObjectPropertyKey();\n      this.expect(tt.bracketR);\n      this.expect(tt.bracketR);\n      if (this.match(tt.lt) || this.match(tt.parenL)) {\n        node.method = true;\n        node.optional = false;\n        node.value = this.flowParseObjectTypeMethodish(\n          this.startNodeAt(node.loc.start),\n        );\n      } else {\n        node.method = false;\n        if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n        node.value = this.flowParseTypeInitialiser();\n      }\n      return this.finishNode(node, \"ObjectTypeInternalSlot\");\n    }\n\n    flowParseObjectTypeMethodish(\n      node: Undone<N.FlowFunctionTypeAnnotation>,\n    ): N.FlowFunctionTypeAnnotation {\n      node.params = [];\n      node.rest = null;\n      node.typeParameters = null;\n      node.this = null;\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      this.expect(tt.parenL);\n      if (this.match(tt._this)) {\n        node.this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        node.this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        node.params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n\n      if (this.eat(tt.ellipsis)) {\n        node.rest = this.flowParseFunctionTypeParam(false);\n      }\n      this.expect(tt.parenR);\n      node.returnType = this.flowParseTypeInitialiser();\n\n      return this.finishNode(node, \"FunctionTypeAnnotation\");\n    }\n\n    flowParseObjectTypeCallProperty(\n      node: Undone<N.FlowObjectTypeCallProperty>,\n      isStatic: boolean,\n    ): N.FlowObjectTypeCallProperty {\n      const valueNode = this.startNode();\n      node.static = isStatic;\n      node.value = this.flowParseObjectTypeMethodish(valueNode);\n      return this.finishNode(node, \"ObjectTypeCallProperty\");\n    }\n\n    flowParseObjectType({\n      allowStatic,\n      allowExact,\n      allowSpread,\n      allowProto,\n      allowInexact,\n    }: {\n      allowStatic: boolean;\n      allowExact: boolean;\n      allowSpread: boolean;\n      allowProto: boolean;\n      allowInexact: boolean;\n    }): N.FlowObjectTypeAnnotation {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n\n      const nodeStart = this.startNode<N.FlowObjectTypeAnnotation>();\n\n      nodeStart.callProperties = [];\n      nodeStart.properties = [];\n      nodeStart.indexers = [];\n      nodeStart.internalSlots = [];\n\n      let endDelim;\n      let exact;\n      let inexact = false;\n      if (allowExact && this.match(tt.braceBarL)) {\n        this.expect(tt.braceBarL);\n        endDelim = tt.braceBarR;\n        exact = true;\n      } else {\n        this.expect(tt.braceL);\n        endDelim = tt.braceR;\n        exact = false;\n      }\n\n      nodeStart.exact = exact;\n\n      while (!this.match(endDelim)) {\n        let isStatic = false;\n        let protoStartLoc: Position | undefined | null = null;\n        let inexactStartLoc: Position | undefined | null = null;\n        const node = this.startNode();\n\n        if (allowProto && this.isContextual(tt._proto)) {\n          const lookahead = this.lookahead();\n\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            protoStartLoc = this.state.startLoc;\n            allowStatic = false;\n          }\n        }\n\n        if (allowStatic && this.isContextual(tt._static)) {\n          const lookahead = this.lookahead();\n\n          // static is a valid identifier name\n          if (lookahead.type !== tt.colon && lookahead.type !== tt.question) {\n            this.next();\n            isStatic = true;\n          }\n        }\n\n        const variance = this.flowParseVariance();\n\n        if (this.eat(tt.bracketL)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (this.eat(tt.bracketL)) {\n            if (variance) {\n              this.unexpected(variance.loc.start);\n            }\n            nodeStart.internalSlots.push(\n              this.flowParseObjectTypeInternalSlot(node, isStatic),\n            );\n          } else {\n            nodeStart.indexers.push(\n              this.flowParseObjectTypeIndexer(node, isStatic, variance),\n            );\n          }\n        } else if (this.match(tt.parenL) || this.match(tt.lt)) {\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n          nodeStart.callProperties.push(\n            this.flowParseObjectTypeCallProperty(node, isStatic),\n          );\n        } else {\n          let kind = \"init\";\n\n          if (this.isContextual(tt._get) || this.isContextual(tt._set)) {\n            const lookahead = this.lookahead();\n            if (tokenIsLiteralPropertyName(lookahead.type)) {\n              kind = this.state.value;\n              this.next();\n            }\n          }\n\n          const propOrInexact = this.flowParseObjectTypeProperty(\n            node,\n            isStatic,\n            protoStartLoc,\n            variance,\n            kind,\n            allowSpread,\n            allowInexact ?? !exact,\n          );\n\n          if (propOrInexact === null) {\n            inexact = true;\n            inexactStartLoc = this.state.lastTokStartLoc;\n          } else {\n            nodeStart.properties.push(propOrInexact);\n          }\n        }\n\n        this.flowObjectTypeSemicolon();\n\n        if (\n          inexactStartLoc &&\n          !this.match(tt.braceR) &&\n          !this.match(tt.braceBarR)\n        ) {\n          this.raise(\n            FlowErrors.UnexpectedExplicitInexactInObject,\n            inexactStartLoc,\n          );\n        }\n      }\n\n      this.expect(endDelim);\n\n      /* The inexact flag should only be added on ObjectTypeAnnotations that\n       * are not the body of an interface, declare interface, or declare class.\n       * Since spreads are only allowed in object types, checking that is\n       * sufficient here.\n       */\n      if (allowSpread) {\n        nodeStart.inexact = inexact;\n      }\n\n      const out = this.finishNode(nodeStart, \"ObjectTypeAnnotation\");\n\n      this.state.inType = oldInType;\n\n      return out;\n    }\n\n    flowParseObjectTypeProperty(\n      node: Undone<N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty>,\n      isStatic: boolean,\n      protoStartLoc: Position | undefined | null,\n      variance: N.FlowVariance | undefined | null,\n      kind: string,\n      allowSpread: boolean,\n      allowInexact: boolean,\n    ): N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty | null {\n      if (this.eat(tt.ellipsis)) {\n        const isInexactToken =\n          this.match(tt.comma) ||\n          this.match(tt.semi) ||\n          this.match(tt.braceR) ||\n          this.match(tt.braceBarR);\n\n        if (isInexactToken) {\n          if (!allowSpread) {\n            this.raise(\n              FlowErrors.InexactInsideNonObject,\n              this.state.lastTokStartLoc,\n            );\n          } else if (!allowInexact) {\n            this.raise(\n              FlowErrors.InexactInsideExact,\n              this.state.lastTokStartLoc,\n            );\n          }\n          if (variance) {\n            this.raise(FlowErrors.InexactVariance, variance);\n          }\n\n          return null;\n        }\n\n        if (!allowSpread) {\n          this.raise(\n            FlowErrors.UnexpectedSpreadType,\n            this.state.lastTokStartLoc,\n          );\n        }\n        if (protoStartLoc != null) {\n          this.unexpected(protoStartLoc);\n        }\n        if (variance) {\n          this.raise(FlowErrors.SpreadVariance, variance);\n        }\n\n        node.argument = this.flowParseType();\n        return this.finishNode(node, \"ObjectTypeSpreadProperty\");\n      } else {\n        node.key = this.flowParseObjectPropertyKey();\n        node.static = isStatic;\n        node.proto = protoStartLoc != null;\n        node.kind = kind;\n\n        let optional = false;\n        if (this.match(tt.lt) || this.match(tt.parenL)) {\n          // This is a method property\n          node.method = true;\n\n          if (protoStartLoc != null) {\n            this.unexpected(protoStartLoc);\n          }\n          if (variance) {\n            this.unexpected(variance.loc.start);\n          }\n\n          node.value = this.flowParseObjectTypeMethodish(\n            this.startNodeAt(node.loc.start),\n          );\n          if (kind === \"get\" || kind === \"set\") {\n            this.flowCheckGetterSetterParams(node);\n          }\n          /** Declared classes/interfaces do not allow spread */\n          if (\n            !allowSpread &&\n            node.key.name === \"constructor\" &&\n            node.value.this\n          ) {\n            this.raise(\n              FlowErrors.ThisParamBannedInConstructor,\n              node.value.this,\n            );\n          }\n        } else {\n          if (kind !== \"init\") this.unexpected();\n\n          node.method = false;\n\n          if (this.eat(tt.question)) {\n            optional = true;\n          }\n          node.value = this.flowParseTypeInitialiser();\n          node.variance = variance;\n        }\n\n        node.optional = optional;\n\n        return this.finishNode(node, \"ObjectTypeProperty\");\n      }\n    }\n\n    // This is similar to checkGetterSetterParams, but as\n    // @babel/parser uses non estree properties we cannot reuse it here\n    flowCheckGetterSetterParams(\n      property: Undone<\n        N.FlowObjectTypeProperty | N.FlowObjectTypeSpreadProperty\n      >,\n    ): void {\n      const paramCount = property.kind === \"get\" ? 0 : 1;\n      const length =\n        property.value.params.length + (property.value.rest ? 1 : 0);\n\n      if (property.value.this) {\n        this.raise(\n          property.kind === \"get\"\n            ? FlowErrors.GetterMayNotHaveThisParam\n            : FlowErrors.SetterMayNotHaveThisParam,\n          property.value.this,\n        );\n      }\n\n      if (length !== paramCount) {\n        this.raise(\n          property.kind === \"get\"\n            ? Errors.BadGetterArity\n            : Errors.BadSetterArity,\n          property,\n        );\n      }\n\n      if (property.kind === \"set\" && property.value.rest) {\n        this.raise(Errors.BadSetterRestParameter, property);\n      }\n    }\n\n    flowObjectTypeSemicolon(): void {\n      if (\n        !this.eat(tt.semi) &&\n        !this.eat(tt.comma) &&\n        !this.match(tt.braceR) &&\n        !this.match(tt.braceBarR)\n      ) {\n        this.unexpected();\n      }\n    }\n\n    flowParseQualifiedTypeIdentifier(\n      startLoc?: Position,\n      id?: N.Identifier,\n    ): N.FlowQualifiedTypeIdentifier | N.Identifier {\n      startLoc ??= this.state.startLoc;\n      let node: N.Identifier | N.FlowQualifiedTypeIdentifier =\n        id || this.flowParseRestrictedIdentifier(true);\n\n      while (this.eat(tt.dot)) {\n        const node2 = this.startNodeAt<N.FlowQualifiedTypeIdentifier>(startLoc);\n        node2.qualification = node;\n        node2.id = this.flowParseRestrictedIdentifier(true);\n        node = this.finishNode(node2, \"QualifiedTypeIdentifier\");\n      }\n\n      return node;\n    }\n\n    flowParseGenericType(\n      startLoc: Position,\n      id: N.Identifier,\n    ): N.FlowGenericTypeAnnotation {\n      const node = this.startNodeAt<N.FlowGenericTypeAnnotation>(startLoc);\n\n      node.typeParameters = null;\n      node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);\n\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterInstantiation();\n      }\n\n      return this.finishNode(node, \"GenericTypeAnnotation\");\n    }\n\n    flowParseTypeofType(): N.FlowTypeofTypeAnnotation {\n      const node = this.startNode<N.FlowTypeofTypeAnnotation>();\n      this.expect(tt._typeof);\n      node.argument = this.flowParsePrimaryType();\n      return this.finishNode(node, \"TypeofTypeAnnotation\");\n    }\n\n    flowParseTupleType(): N.FlowTupleTypeAnnotation {\n      const node = this.startNode<N.FlowTupleTypeAnnotation>();\n      node.types = [];\n      this.expect(tt.bracketL);\n      // We allow trailing commas\n      while (this.state.pos < this.length && !this.match(tt.bracketR)) {\n        node.types.push(this.flowParseType());\n        if (this.match(tt.bracketR)) break;\n        this.expect(tt.comma);\n      }\n      this.expect(tt.bracketR);\n      return this.finishNode(node, \"TupleTypeAnnotation\");\n    }\n\n    flowParseFunctionTypeParam(first: boolean): N.FlowFunctionTypeParam {\n      let name = null;\n      let optional = false;\n      let typeAnnotation = null;\n      const node = this.startNode<N.FlowFunctionTypeParam>();\n      const lh = this.lookahead();\n      const isThis = this.state.type === tt._this;\n\n      if (lh.type === tt.colon || lh.type === tt.question) {\n        if (isThis && !first) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node);\n        }\n        name = this.parseIdentifier(isThis);\n        if (this.eat(tt.question)) {\n          optional = true;\n          if (isThis) {\n            this.raise(FlowErrors.ThisParamMayNotBeOptional, node);\n          }\n        }\n        typeAnnotation = this.flowParseTypeInitialiser();\n      } else {\n        typeAnnotation = this.flowParseType();\n      }\n      node.name = name;\n      node.optional = optional;\n      node.typeAnnotation = typeAnnotation;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    reinterpretTypeAsFunctionTypeParam(\n      type: N.FlowType,\n    ): N.FlowFunctionTypeParam {\n      const node = this.startNodeAt<N.FlowFunctionTypeParam>(type.loc.start);\n      node.name = null;\n      node.optional = false;\n      node.typeAnnotation = type;\n      return this.finishNode(node, \"FunctionTypeParam\");\n    }\n\n    flowParseFunctionTypeParams(params: N.FlowFunctionTypeParam[] = []): {\n      params: N.FlowFunctionTypeParam[];\n      rest: N.FlowFunctionTypeParam | undefined | null;\n      _this: N.FlowFunctionTypeParam | undefined | null;\n    } {\n      let rest: N.FlowFunctionTypeParam | undefined | null = null;\n      let _this: N.FlowFunctionTypeParam | undefined | null = null;\n      if (this.match(tt._this)) {\n        _this = this.flowParseFunctionTypeParam(/* first */ true);\n        // match Flow parser behavior\n        _this.name = null;\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      while (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n        params.push(this.flowParseFunctionTypeParam(false));\n        if (!this.match(tt.parenR)) {\n          this.expect(tt.comma);\n        }\n      }\n      if (this.eat(tt.ellipsis)) {\n        rest = this.flowParseFunctionTypeParam(false);\n      }\n      return { params, rest, _this };\n    }\n\n    flowIdentToTypeAnnotation(\n      startLoc: Position,\n      node: Undone<N.FlowType>,\n      id: N.Identifier,\n    ): N.FlowType {\n      switch (id.name) {\n        case \"any\":\n          return this.finishNode(node, \"AnyTypeAnnotation\");\n\n        case \"bool\":\n        case \"boolean\":\n          return this.finishNode(node, \"BooleanTypeAnnotation\");\n\n        case \"mixed\":\n          return this.finishNode(node, \"MixedTypeAnnotation\");\n\n        case \"empty\":\n          return this.finishNode(node, \"EmptyTypeAnnotation\");\n\n        case \"number\":\n          return this.finishNode(node, \"NumberTypeAnnotation\");\n\n        case \"string\":\n          return this.finishNode(node, \"StringTypeAnnotation\");\n\n        case \"symbol\":\n          return this.finishNode(node, \"SymbolTypeAnnotation\");\n\n        default:\n          this.checkNotUnderscore(id.name);\n          return this.flowParseGenericType(startLoc, id);\n      }\n    }\n\n    // The parsing of types roughly parallels the parsing of expressions, and\n    // primary types are kind of like primary expressions...they're the\n    // primitives with which other types are constructed.\n    flowParsePrimaryType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      let tmp;\n      let type;\n      let isGroupedType = false;\n      const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n\n      switch (this.state.type) {\n        case tt.braceL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: false,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: true,\n          });\n\n        case tt.braceBarL:\n          return this.flowParseObjectType({\n            allowStatic: false,\n            allowExact: true,\n            allowSpread: true,\n            allowProto: false,\n            allowInexact: false,\n          });\n\n        case tt.bracketL:\n          this.state.noAnonFunctionType = false;\n          type = this.flowParseTupleType();\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n          return type;\n\n        case tt.lt: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          node.typeParameters = this.flowParseTypeParameterDeclaration();\n          this.expect(tt.parenL);\n          tmp = this.flowParseFunctionTypeParams();\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.parenL: {\n          const node = this.startNode<N.FlowFunctionTypeAnnotation>();\n          this.next();\n\n          // Check to see if this is actually a grouped type\n          if (!this.match(tt.parenR) && !this.match(tt.ellipsis)) {\n            if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n              const token = this.lookahead().type;\n              isGroupedType = token !== tt.question && token !== tt.colon;\n            } else {\n              isGroupedType = true;\n            }\n          }\n\n          if (isGroupedType) {\n            this.state.noAnonFunctionType = false;\n            type = this.flowParseType();\n            this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n            // A `,` or a `) =>` means this is an anonymous function type\n            if (\n              this.state.noAnonFunctionType ||\n              !(\n                this.match(tt.comma) ||\n                (this.match(tt.parenR) && this.lookahead().type === tt.arrow)\n              )\n            ) {\n              this.expect(tt.parenR);\n              return type;\n            } else {\n              // Eat a comma if there is one\n              this.eat(tt.comma);\n            }\n          }\n\n          if (type) {\n            tmp = this.flowParseFunctionTypeParams([\n              this.reinterpretTypeAsFunctionTypeParam(type),\n            ]);\n          } else {\n            tmp = this.flowParseFunctionTypeParams();\n          }\n\n          node.params = tmp.params;\n          node.rest = tmp.rest;\n          node.this = tmp._this;\n\n          this.expect(tt.parenR);\n\n          this.expect(tt.arrow);\n\n          node.returnType = this.flowParseType();\n\n          node.typeParameters = null;\n\n          return this.finishNode(node, \"FunctionTypeAnnotation\");\n        }\n\n        case tt.string:\n          return this.parseLiteral<N.StringLiteralTypeAnnotation>(\n            this.state.value,\n            \"StringLiteralTypeAnnotation\",\n          );\n\n        case tt._true:\n        case tt._false:\n          node.value = this.match(tt._true);\n          this.next();\n          return this.finishNode(\n            node as Undone<N.BooleanLiteralTypeAnnotation>,\n            \"BooleanLiteralTypeAnnotation\",\n          );\n\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            this.next();\n            if (this.match(tt.num)) {\n              return this.parseLiteralAtNode<N.NumberLiteralTypeAnnotation>(\n                -this.state.value,\n                \"NumberLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            if (this.match(tt.bigint)) {\n              return this.parseLiteralAtNode<N.BigIntLiteralTypeAnnotation>(\n                -this.state.value,\n                \"BigIntLiteralTypeAnnotation\",\n                node,\n              );\n            }\n\n            throw this.raise(\n              FlowErrors.UnexpectedSubtractionOperand,\n              this.state.startLoc,\n            );\n          }\n          this.unexpected();\n          return;\n        case tt.num:\n          return this.parseLiteral(\n            this.state.value,\n            \"NumberLiteralTypeAnnotation\",\n          );\n\n        case tt.bigint:\n          return this.parseLiteral(\n            this.state.value,\n            \"BigIntLiteralTypeAnnotation\",\n          );\n\n        case tt._void:\n          this.next();\n          return this.finishNode(node, \"VoidTypeAnnotation\");\n\n        case tt._null:\n          this.next();\n          return this.finishNode(node, \"NullLiteralTypeAnnotation\");\n\n        case tt._this:\n          this.next();\n          return this.finishNode(node, \"ThisTypeAnnotation\");\n\n        case tt.star:\n          this.next();\n          return this.finishNode(node, \"ExistsTypeAnnotation\");\n\n        case tt._typeof:\n          return this.flowParseTypeofType();\n\n        default:\n          if (tokenIsKeyword(this.state.type)) {\n            const label = tokenLabelName(this.state.type);\n            this.next();\n            return super.createIdentifier(node as Undone<N.Identifier>, label);\n          } else if (tokenIsIdentifier(this.state.type)) {\n            if (this.isContextual(tt._interface)) {\n              return this.flowParseInterfaceType();\n            }\n\n            return this.flowIdentToTypeAnnotation(\n              startLoc,\n              node,\n              this.parseIdentifier(),\n            );\n          }\n      }\n\n      this.unexpected();\n    }\n\n    flowParsePostfixType(): N.FlowType {\n      const startLoc = this.state.startLoc;\n      let type = this.flowParsePrimaryType();\n      let seenOptionalIndexedAccess = false;\n      while (\n        (this.match(tt.bracketL) || this.match(tt.questionDot)) &&\n        !this.canInsertSemicolon()\n      ) {\n        const node = this.startNodeAt<N.FlowOtherTypeAnnotation>(startLoc);\n        const optional = this.eat(tt.questionDot);\n        seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;\n        this.expect(tt.bracketL);\n        if (!optional && this.match(tt.bracketR)) {\n          node.elementType = type;\n          this.next(); // eat `]`\n          type = this.finishNode(node, \"ArrayTypeAnnotation\");\n        } else {\n          node.objectType = type;\n          node.indexType = this.flowParseType();\n          this.expect(tt.bracketR);\n          if (seenOptionalIndexedAccess) {\n            node.optional = optional;\n            type = this.finishNode<N.FlowOptionalIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"OptionalIndexedAccessType\",\n            );\n          } else {\n            type = this.finishNode<N.FlowIndexedAccessType>(\n              // @ts-expect-error todo(flow->ts)\n              node,\n              \"IndexedAccessType\",\n            );\n          }\n        }\n      }\n      return type;\n    }\n\n    flowParsePrefixType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      if (this.eat(tt.question)) {\n        node.typeAnnotation = this.flowParsePrefixType();\n        return this.finishNode(node, \"NullableTypeAnnotation\");\n      } else {\n        return this.flowParsePostfixType();\n      }\n    }\n\n    flowParseAnonFunctionWithoutParens(): N.FlowType {\n      const param = this.flowParsePrefixType();\n      if (!this.state.noAnonFunctionType && this.eat(tt.arrow)) {\n        // TODO: This should be a type error. Passing in a SourceLocation, and it expects a Position.\n        const node = this.startNodeAt<N.FlowFunctionTypeAnnotation>(\n          param.loc.start,\n        );\n        node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];\n        node.rest = null;\n        node.this = null;\n        node.returnType = this.flowParseType();\n        node.typeParameters = null;\n        return this.finishNode(node, \"FunctionTypeAnnotation\");\n      }\n      return param;\n    }\n\n    flowParseIntersectionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseAND);\n      const type = this.flowParseAnonFunctionWithoutParens();\n      node.types = [type];\n      while (this.eat(tt.bitwiseAND)) {\n        node.types.push(this.flowParseAnonFunctionWithoutParens());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"IntersectionTypeAnnotation\");\n    }\n\n    flowParseUnionType(): N.FlowType {\n      const node = this.startNode<N.FlowOtherTypeAnnotation>();\n      this.eat(tt.bitwiseOR);\n      const type = this.flowParseIntersectionType();\n      node.types = [type];\n      while (this.eat(tt.bitwiseOR)) {\n        node.types.push(this.flowParseIntersectionType());\n      }\n      return node.types.length === 1\n        ? type\n        : this.finishNode(node, \"UnionTypeAnnotation\");\n    }\n\n    flowParseType(): N.FlowType {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      const type = this.flowParseUnionType();\n      this.state.inType = oldInType;\n      return type;\n    }\n\n    flowParseTypeOrImplicitInstantiation(): N.FlowType {\n      if (this.state.type === tt.name && this.state.value === \"_\") {\n        const startLoc = this.state.startLoc;\n        const node = this.parseIdentifier();\n        return this.flowParseGenericType(startLoc, node);\n      } else {\n        return this.flowParseType();\n      }\n    }\n\n    flowParseTypeAnnotation(): N.TypeAnnotation {\n      const node = this.startNode<N.TypeAnnotation>();\n      node.typeAnnotation = this.flowParseTypeInitialiser();\n      return this.finishNode(node, \"TypeAnnotation\");\n    }\n\n    flowParseTypeAnnotatableIdentifier(\n      allowPrimitiveOverride?: boolean,\n    ): N.Identifier {\n      const ident = allowPrimitiveOverride\n        ? this.parseIdentifier()\n        : this.flowParseRestrictedIdentifier();\n      if (this.match(tt.colon)) {\n        ident.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(ident);\n      }\n      return ident;\n    }\n\n    typeCastToParameter(node: N.TypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    flowParseVariance(): N.FlowVariance | undefined | null {\n      let variance = null;\n      if (this.match(tt.plusMin)) {\n        variance = this.startNode<N.FlowVariance>();\n        if (this.state.value === \"+\") {\n          variance.kind = \"plus\";\n        } else {\n          variance.kind = \"minus\";\n        }\n        this.next();\n        return this.finishNode(variance, \"Variance\");\n      }\n      return variance;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseFunctionBody(\n      node: N.Function,\n      allowExpressionBody?: boolean | null,\n      isMethod: boolean = false,\n    ): void {\n      if (allowExpressionBody) {\n        this.forwardNoArrowParamsConversionAt(node, () =>\n          super.parseFunctionBody(node, true, isMethod),\n        );\n        return;\n      }\n\n      super.parseFunctionBody(node, false, isMethod);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        const typeNode = this.startNode<N.TypeAnnotation>();\n\n        [\n          typeNode.typeAnnotation,\n          // @ts-expect-error predicate may not exist\n          node.predicate,\n        ] = this.flowParseTypeAndPredicateInitialiser();\n\n        node.returnType = typeNode.typeAnnotation\n          ? this.finishNode(typeNode, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    // interfaces and enums\n    parseStatementLike(flags: ParseStatementFlag): N.Statement {\n      // strict mode handling of `interface` since it's a reserved word\n      if (this.state.strict && this.isContextual(tt._interface)) {\n        const lookahead = this.lookahead();\n        if (tokenIsKeywordOrIdentifier(lookahead.type)) {\n          const node = this.startNode<N.FlowInterface>();\n          this.next();\n          return this.flowParseInterface(node);\n        }\n      } else if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      const stmt = super.parseStatementLike(flags);\n      // We will parse a flow pragma in any comment before the first statement.\n      if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {\n        this.flowPragma = null;\n      }\n      return stmt;\n    }\n\n    // declares, interfaces and type aliases\n    parseExpressionStatement(\n      node: N.ExpressionStatement,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.ExpressionStatement {\n      if (expr.type === \"Identifier\") {\n        if (expr.name === \"declare\") {\n          if (\n            this.match(tt._class) ||\n            tokenIsIdentifier(this.state.type) ||\n            this.match(tt._function) ||\n            this.match(tt._var) ||\n            this.match(tt._export)\n          ) {\n            // @ts-expect-error: refine typings\n            return this.flowParseDeclare(node);\n          }\n        } else if (tokenIsIdentifier(this.state.type)) {\n          if (expr.name === \"interface\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseInterface(node);\n          } else if (expr.name === \"type\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseTypeAlias(node);\n          } else if (expr.name === \"opaque\") {\n            // @ts-expect-error: refine typings\n            return this.flowParseOpaqueType(node, false);\n          }\n        }\n      }\n\n      return super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    shouldParseExportDeclaration(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return !this.state.containsEsc;\n      }\n      return super.shouldParseExportDeclaration();\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      const { type } = this.state;\n      if (type === tt._enum || tokenIsFlowInterfaceOrTypeOrOpaque(type)) {\n        return this.state.containsEsc;\n      }\n\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseExportDefaultExpression() {\n      if (this.isContextual(tt._enum)) {\n        const node = this.startNode();\n        this.next();\n        return this.flowParseEnumDeclaration(node);\n      }\n      return super.parseExportDefaultExpression();\n    }\n\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      this.expect(tt.question);\n      const state = this.state.clone();\n      const originalNoArrowAt = this.state.noArrowAt;\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      let { consequent, failed } = this.tryParseConditionalConsequent();\n      let [valid, invalid] = this.getArrowLikeExpressions(consequent);\n\n      if (failed || invalid.length > 0) {\n        const noArrowAt = [...originalNoArrowAt];\n\n        if (invalid.length > 0) {\n          this.state = state;\n          this.state.noArrowAt = noArrowAt;\n\n          for (let i = 0; i < invalid.length; i++) {\n            noArrowAt.push(invalid[i].start);\n          }\n\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n          [valid, invalid] = this.getArrowLikeExpressions(consequent);\n        }\n\n        if (failed && valid.length > 1) {\n          // if there are two or more possible correct ways of parsing, throw an\n          // error.\n          // e.g.   Source: a ? (b): c => (d): e => f\n          //      Result 1: a ? b : (c => ((d): e => f))\n          //      Result 2: a ? ((b): c => d) : (e => f)\n          this.raise(FlowErrors.AmbiguousConditionalArrow, state.startLoc);\n        }\n\n        if (failed && valid.length === 1) {\n          this.state = state;\n          noArrowAt.push(valid[0].start);\n          this.state.noArrowAt = noArrowAt;\n          ({ consequent, failed } = this.tryParseConditionalConsequent());\n        }\n      }\n\n      this.getArrowLikeExpressions(consequent, true);\n\n      this.state.noArrowAt = originalNoArrowAt;\n      this.expect(tt.colon);\n\n      node.test = expr;\n      node.consequent = consequent;\n      node.alternate = this.forwardNoArrowParamsConversionAt(node, () =>\n        this.parseMaybeAssign(undefined, undefined),\n      );\n\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n\n    tryParseConditionalConsequent(): {\n      consequent: N.Expression;\n      failed: boolean;\n    } {\n      this.state.noArrowParamsConversionAt.push(this.state.start);\n\n      const consequent = this.parseMaybeAssignAllowIn();\n      const failed = !this.match(tt.colon);\n\n      this.state.noArrowParamsConversionAt.pop();\n\n      return { consequent, failed };\n    }\n\n    // Given an expression, walks through out its arrow functions whose body is\n    // an expression and through out conditional expressions. It returns every\n    // function which has been parsed with a return type but could have been\n    // parenthesized expressions.\n    // These functions are separated into two arrays: one containing the ones\n    // whose parameters can be converted to assignable lists, one containing the\n    // others.\n    getArrowLikeExpressions(\n      node: N.Expression,\n      disallowInvalid?: boolean,\n    ): [N.ArrowFunctionExpression[], N.ArrowFunctionExpression[]] {\n      const stack = [node];\n      const arrows: N.ArrowFunctionExpression[] = [];\n\n      while (stack.length !== 0) {\n        const node = stack.pop();\n        if (\n          node.type === \"ArrowFunctionExpression\" &&\n          node.body.type !== \"BlockStatement\"\n        ) {\n          if (node.typeParameters || !node.returnType) {\n            // This is an arrow expression without ambiguity, so check its parameters\n            this.finishArrowValidation(node);\n          } else {\n            arrows.push(node);\n          }\n          stack.push(node.body);\n        } else if (node.type === \"ConditionalExpression\") {\n          stack.push(node.consequent);\n          stack.push(node.alternate);\n        }\n      }\n\n      if (disallowInvalid) {\n        arrows.forEach(node => this.finishArrowValidation(node));\n        return [arrows, []];\n      }\n\n      return partition(arrows, node =>\n        node.params.every(param => this.isAssignable(param, true)),\n      );\n    }\n\n    finishArrowValidation(node: N.ArrowFunctionExpression) {\n      this.toAssignableList(\n        // node.params is Expression[] instead of $ReadOnlyArray<Pattern> because it\n        // has not been converted yet.\n        node.params as any as N.Expression[],\n        node.extra?.trailingCommaLoc,\n        /* isLHS */ false,\n      );\n      // Enter scope, as checkParams defines bindings\n      this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n      // Use super's method to force the parameters to be checked\n      super.checkParams(node, false, true);\n      this.scope.exit();\n    }\n\n    forwardNoArrowParamsConversionAt<T>(\n      node: Undone<N.Node>,\n      parse: () => T,\n    ): T {\n      let result: T;\n      if (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        this.state.noArrowParamsConversionAt.push(this.state.start);\n        result = parse();\n        this.state.noArrowParamsConversionAt.pop();\n      } else {\n        result = parse();\n      }\n\n      return result;\n    }\n\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TypeCastExpression>(startLoc);\n        typeCastNode.expression = newNode as N.Expression;\n        typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TypeCastExpression\");\n      }\n\n      return newNode;\n    }\n\n    assertModuleNodeAllowed(node: N.Node) {\n      if (\n        (node.type === \"ImportDeclaration\" &&\n          (node.importKind === \"type\" || node.importKind === \"typeof\")) ||\n        (node.type === \"ExportNamedDeclaration\" &&\n          node.exportKind === \"type\") ||\n        (node.type === \"ExportAllDeclaration\" && node.exportKind === \"type\")\n      ) {\n        // Allow Flowtype imports and exports in all conditions because\n        // Flow itself does not care about 'sourceType'.\n        return;\n      }\n\n      super.assertModuleNodeAllowed(node);\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (this.isContextual(tt._type)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n\n        if (this.match(tt.braceL)) {\n          // export type { foo, bar };\n          node.specifiers = this.parseExportSpecifiers(\n            /* isInTypeExport */ true,\n          );\n          super.parseExportFrom(node);\n          return null;\n        } else {\n          // export type Foo = Bar;\n          // @ts-expect-error: refine typings\n          return this.flowParseTypeAlias(declarationNode);\n        }\n      } else if (this.isContextual(tt._opaque)) {\n        node.exportKind = \"type\";\n\n        const declarationNode = this.startNode();\n        this.next();\n        // export opaque type Foo = Bar;\n        // @ts-expect-error: refine typings\n        return this.flowParseOpaqueType(declarationNode, false);\n      } else if (this.isContextual(tt._interface)) {\n        node.exportKind = \"type\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseInterface(declarationNode);\n      } else if (this.isContextual(tt._enum)) {\n        node.exportKind = \"value\";\n        const declarationNode = this.startNode();\n        this.next();\n        // @ts-expect-error: refine typings\n        return this.flowParseEnumDeclaration(declarationNode);\n      } else {\n        return super.parseExportDeclaration(node);\n      }\n    }\n\n    eatExportStar(\n      node: Undone<N.Node>,\n    ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n      if (super.eatExportStar(node)) return true;\n\n      if (this.isContextual(tt._type) && this.lookahead().type === tt.star) {\n        (\n          node as Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>\n        ).exportKind = \"type\";\n        this.next();\n        this.next();\n        return true;\n      }\n\n      return false;\n    }\n\n    maybeParseExportNamespaceSpecifier(\n      node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      const { startLoc } = this.state;\n      const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);\n      if (hasNamespace && node.exportKind === \"type\") {\n        this.unexpected(startLoc);\n      }\n      return hasNamespace;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n    ) {\n      super.parseClassId(node, isStatement, optionalId);\n      if (this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const { startLoc } = this.state;\n      if (this.isContextual(tt._declare)) {\n        if (super.parseClassMemberFromModifier(classBody, member)) {\n          // 'declare' is a class element name\n          return;\n        }\n\n        member.declare = true;\n      }\n\n      super.parseClassMember(classBody, member, state);\n\n      if (member.declare) {\n        if (\n          member.type !== \"ClassProperty\" &&\n          member.type !== \"ClassPrivateProperty\" &&\n          member.type !== \"PropertyDefinition\" // Used by estree plugin\n        ) {\n          this.raise(FlowErrors.DeclareClassElement, startLoc);\n        } else if (member.value) {\n          this.raise(FlowErrors.DeclareClassFieldInitializer, member.value);\n        }\n      }\n    }\n\n    isIterator(word: string): boolean {\n      return word === \"iterator\" || word === \"asyncIterator\";\n    }\n\n    readIterator(): void {\n      const word = super.readWord1();\n      const fullWord = \"@@\" + word;\n\n      // Allow @@iterator and @@asyncIterator as a identifier only inside type\n      if (!this.isIterator(word) || !this.state.inType) {\n        this.raise(Errors.InvalidIdentifier, this.state.curPosition(), {\n          identifierName: fullWord,\n        });\n      }\n\n      this.finishToken(tt.name, fullWord);\n    }\n\n    // ensure that inside flow types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (code === charCodes.leftCurlyBrace && next === charCodes.verticalBar) {\n        this.finishOp(tt.braceBarL, 2);\n      } else if (\n        this.state.inType &&\n        (code === charCodes.greaterThan || code === charCodes.lessThan)\n      ) {\n        this.finishOp(code === charCodes.greaterThan ? tt.gt : tt.lt, 1);\n      } else if (this.state.inType && code === charCodes.questionMark) {\n        if (next === charCodes.dot) {\n          this.finishOp(tt.questionDot, 2);\n        } else {\n          // allow double nullable types in Flow: ??string\n          this.finishOp(tt.question, 1);\n        }\n      } else if (\n        isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))\n      ) {\n        this.state.pos += 2; // eat \"@@\"\n        this.readIterator();\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      if (node.type === \"TypeCastExpression\") {\n        return this.isAssignable(node.expression, isBinding);\n      } else {\n        return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      if (\n        !isLHS &&\n        node.type === \"AssignmentExpression\" &&\n        node.left.type === \"TypeCastExpression\"\n      ) {\n        node.left = this.typeCastToParameter(node.left) as N.Assignable;\n      }\n      super.toAssignable(node, isLHS);\n    }\n\n    // turn type casts that we found in function parameter head into type annotated params\n    toAssignableList(\n      exprList: N.Expression[],\n      trailingCommaLoc: Position | undefined | null,\n      isLHS: boolean,\n    ): void {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (expr?.type === \"TypeCastExpression\") {\n          exprList[i] = this.typeCastToParameter(expr);\n        }\n      }\n      super.toAssignableList(exprList, trailingCommaLoc, isLHS);\n    }\n\n    // this is a list of nodes, from something like a call expression, we need to filter the\n    // type casts that we've found that are illegal in this context\n    toReferencedList(\n      exprList:\n        | ReadonlyArray<N.Expression | N.SpreadElement>\n        | ReadonlyArray<N.Expression | N.RestElement>,\n      isParenthesizedExpr?: boolean,\n    ):\n      | ReadonlyArray<N.Expression | N.SpreadElement>\n      | ReadonlyArray<N.Expression | N.RestElement> {\n      for (let i = 0; i < exprList.length; i++) {\n        const expr = exprList[i];\n        if (\n          expr &&\n          expr.type === \"TypeCastExpression\" &&\n          !expr.extra?.parenthesized &&\n          (exprList.length > 1 || !isParenthesizedExpr)\n        ) {\n          this.raise(FlowErrors.TypeCastInPattern, expr.typeAnnotation);\n        }\n      }\n\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      // This could be an array pattern:\n      //   ([a: string, b: string]) => {}\n      // In this case, we don't have to call toReferencedList. We will\n      // call it, if needed, when we are sure that it is a parenthesized\n      // expression by calling toReferencedListDeep.\n      if (canBePattern && !this.state.maybeInArrowParameters) {\n        this.toReferencedList(node.elements);\n      }\n\n      return node;\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"TypeCastExpression\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    // parse class property type annotations\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (this.match(tt.colon)) {\n        node.typeAnnotation = this.flowParseTypeAnnotation();\n      }\n      return super.parseClassPrivateProperty(node);\n    }\n\n    // determine whether or not we're currently in the position where a class method would appear\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    // determine whether or not we're currently in the position where a class property would appear\n    isClassProperty(): boolean {\n      return this.match(tt.colon) || super.isClassProperty();\n    }\n\n    isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n      return !this.match(tt.colon) && super.isNonstaticConstructor(method);\n    }\n\n    // parse type parameters for class methods\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n\n      if (method.params && isConstructor) {\n        const params = method.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n        // estree support\n      } else if (\n        // @ts-expect-error TS does not know about the fact that estree can replace ClassMethod with MethodDefinition\n        method.type === \"MethodDefinition\" &&\n        isConstructor &&\n        // @ts-expect-error estree\n        method.value.params\n      ) {\n        // @ts-expect-error estree\n        const params = method.value.params;\n        if (params.length > 0 && this.isThisParam(params[0])) {\n          this.raise(FlowErrors.ThisParamBannedInConstructor, method);\n        }\n      }\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      if ((method as any).variance) {\n        this.unexpected((method as any).variance.loc.start);\n      }\n      delete (method as any).variance;\n      if (this.match(tt.lt)) {\n        method.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    // parse a the super class type parameters and implements\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      if (\n        node.superClass &&\n        (this.match(tt.lt) ||\n          // handles `class extends C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        } else {\n          node.superTypeParameters =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n      if (this.isContextual(tt._implements)) {\n        this.next();\n        const implemented: N.FlowClassImplements[] = (node.implements = []);\n        do {\n          const node = this.startNode<N.FlowClassImplements>();\n          node.id = this.flowParseRestrictedIdentifier(/*liberal*/ true);\n          if (this.match(tt.lt)) {\n            node.typeParameters = this.flowParseTypeParameterInstantiation();\n          } else {\n            node.typeParameters = null;\n          }\n          implemented.push(this.finishNode(node, \"ClassImplements\"));\n        } while (this.eat(tt.comma));\n      }\n    }\n\n    checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n      super.checkGetterSetterParams(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      if (params.length > 0) {\n        const param = params[0];\n        if (this.isThisParam(param) && method.kind === \"get\") {\n          this.raise(FlowErrors.GetterMayNotHaveThisParam, param);\n        } else if (this.isThisParam(param)) {\n          this.raise(FlowErrors.SetterMayNotHaveThisParam, param);\n        }\n      }\n    }\n\n    parsePropertyNamePrefixOperator(\n      node: N.ObjectOrClassMember | N.ClassMember,\n    ): void {\n      node.variance = this.flowParseVariance();\n    }\n\n    // parse type parameters for object method shorthand\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      if ((prop as any).variance) {\n        this.unexpected((prop as any).variance.loc.start);\n      }\n      delete (prop as any).variance;\n\n      let typeParameters;\n\n      // method shorthand\n      if (this.match(tt.lt) && !isAccessor) {\n        typeParameters = this.flowParseTypeParameterDeclaration();\n        if (!this.match(tt.parenL)) this.unexpected();\n      }\n\n      const result = super.parseObjPropValue(\n        prop,\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n\n      // add typeParameters if we found them\n      if (typeParameters) {\n        // @ts-expect-error: refine typings\n        (result.value || result).typeParameters = typeParameters;\n      }\n      return result;\n    }\n\n    parseFunctionParamType(param: N.Pattern): N.Pattern {\n      if (this.eat(tt.question)) {\n        if (param.type !== \"Identifier\") {\n          this.raise(FlowErrors.PatternIsOptional, param);\n        }\n        if (this.isThisParam(param)) {\n          this.raise(FlowErrors.ThisParamMayNotBeOptional, param);\n        }\n\n        (param as any as N.Identifier).optional = true;\n      }\n      if (this.match(tt.colon)) {\n        param.typeAnnotation = this.flowParseTypeAnnotation();\n      } else if (this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamAnnotationRequired, param);\n      }\n\n      if (this.match(tt.eq) && this.isThisParam(param)) {\n        this.raise(FlowErrors.ThisParamNoDefault, param);\n      }\n\n      this.resetEndLocation(param);\n      return param;\n    }\n\n    parseMaybeDefault<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(FlowErrors.TypeBeforeInitializer, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          FlowErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    parseImportSpecifierLocal<\n      T extends\n        | N.ImportSpecifier\n        | N.ImportDefaultSpecifier\n        | N.ImportNamespaceSpecifier,\n    >(node: N.ImportDeclaration, specifier: Undone<T>, type: T[\"type\"]): void {\n      specifier.local = hasTypeImportKind(node)\n        ? this.flowParseRestrictedIdentifier(\n            /* liberal */ true,\n            /* declaration */ true,\n          )\n        : this.parseIdentifier();\n\n      node.specifiers.push(this.finishImportSpecifier(specifier, type));\n    }\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        if (!isExport) return true;\n        const ch = this.lookaheadCharCode();\n        return ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        if (!phase && this.match(tt._default)) {\n          // TODO: Align with our TS AST and always add .exportKind\n          return;\n        }\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? phase : \"value\";\n      } else {\n        if (phase === \"type\" && this.match(tt.star)) this.unexpected();\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    // parse import-type/typeof shorthand\n    parseImportSpecifier(\n      specifier: any,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      const firstIdent = specifier.imported;\n\n      let specifierTypeKind = null;\n      if (firstIdent.type === \"Identifier\") {\n        if (firstIdent.name === \"type\") {\n          specifierTypeKind = \"type\";\n        } else if (firstIdent.name === \"typeof\") {\n          specifierTypeKind = \"typeof\";\n        }\n      }\n\n      let isBinding = false;\n      if (this.isContextual(tt._as) && !this.isLookaheadContextual(\"as\")) {\n        const as_ident = this.parseIdentifier(true);\n        if (\n          specifierTypeKind !== null &&\n          !tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type as ,` or `import {type as }`\n          specifier.imported = as_ident;\n          specifier.importKind = specifierTypeKind;\n          specifier.local = this.cloneIdentifier(as_ident);\n        } else {\n          // `import {type as foo`\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n          specifier.local = this.parseIdentifier();\n        }\n      } else {\n        if (\n          specifierTypeKind !== null &&\n          tokenIsKeywordOrIdentifier(this.state.type)\n        ) {\n          // `import {type foo`\n          specifier.imported = this.parseIdentifier(true);\n          specifier.importKind = specifierTypeKind;\n        } else {\n          if (importedIsString) {\n            /*:: invariant(firstIdent instanceof N.StringLiteral) */\n            throw this.raise(Errors.ImportBindingIsString, specifier, {\n              importName: firstIdent.value,\n            });\n          }\n          /*:: invariant(firstIdent instanceof N.Node) */\n          specifier.imported = firstIdent;\n          specifier.importKind = null;\n        }\n\n        if (this.eatContextual(tt._as)) {\n          specifier.local = this.parseIdentifier();\n        } else {\n          isBinding = true;\n          specifier.local = this.cloneIdentifier(specifier.imported);\n        }\n      }\n\n      const specifierIsTypeImport = hasTypeImportKind(specifier);\n\n      if (isInTypeOnlyImport && specifierIsTypeImport) {\n        this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, specifier);\n      }\n\n      if (isInTypeOnlyImport || specifierIsTypeImport) {\n        this.checkReservedType(\n          specifier.local.name,\n          specifier.local.loc.start,\n          /* declaration */ true,\n        );\n      }\n\n      if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {\n        this.checkReservedWord(\n          specifier.local.name,\n          specifier.loc.start,\n          true,\n          true,\n        );\n      }\n\n      return this.finishImportSpecifier(specifier, \"ImportSpecifier\");\n    }\n\n    parseBindingAtom(): N.Pattern {\n      switch (this.state.type) {\n        case tt._this:\n          // \"this\" may be the name of a parameter, so allow it.\n          return this.parseIdentifier(/* liberal */ true);\n        default:\n          return super.parseBindingAtom();\n      }\n    }\n\n    // parse function type parameters - function foo<T>() {}\n    parseFunctionParams(\n      node: Undone<N.Function>,\n      isConstructor: boolean,\n    ): void {\n      // @ts-expect-error kind may not index node\n      const kind = node.kind;\n      if (kind !== \"get\" && kind !== \"set\" && this.match(tt.lt)) {\n        node.typeParameters = this.flowParseTypeParameterDeclaration();\n      }\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // parse flow type annotations on variable declarator heads - let foo: string = bar\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (this.match(tt.colon)) {\n        decl.id.typeAnnotation = this.flowParseTypeAnnotation();\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n        this.state.noAnonFunctionType = true;\n        node.returnType = this.flowParseTypeAnnotation();\n        this.state.noAnonFunctionType = oldNoAnonFunctionType;\n      }\n\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    // todo description\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    // We need to support type parameter declarations for arrow functions. This\n    // is tricky. There are three situations we need to handle\n    //\n    // 1. This is either JSX or an arrow function. We'll try JSX first. If that\n    //    fails, we'll try an arrow function. If that fails, we'll throw the JSX\n    //    error.\n    // 2. This is an arrow function. We'll parse the type parameter declaration,\n    //    parse the rest, make sure the rest is an arrow function, and go from\n    //    there\n    // 3. This is neither. Just call the super method\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      let state = null;\n\n      let jsx;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` and `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (jsx?.error || this.match(tt.lt)) {\n        state = state || this.state.clone();\n\n        let typeParameters: N.TypeParameterDeclaration;\n\n        const arrow = this.tryParse((abort: () => never) => {\n          typeParameters = this.flowParseTypeParameterDeclaration();\n\n          const arrowExpression = this.forwardNoArrowParamsConversionAt(\n            typeParameters,\n            () => {\n              const result = super.parseMaybeAssign(\n                refExpressionErrors,\n                afterLeftParse,\n              );\n\n              this.resetStartLocationFromNode(result, typeParameters);\n\n              return result;\n            },\n          );\n\n          // <T>(() => {});\n          // <T>(() => {}: any);\n          if (arrowExpression.extra?.parenthesized) abort();\n\n          // The above can return a TypeCastExpression when the arrow\n          // expression is not wrapped in parens. See also `this.parseParenItem`.\n          // (<T>() => {}: any);\n          const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);\n\n          if (expr.type !== \"ArrowFunctionExpression\") abort();\n\n          expr.typeParameters = typeParameters;\n          this.resetStartLocationFromNode(expr, typeParameters);\n\n          return arrowExpression;\n        }, state);\n\n        let arrowExpression:\n          | N.ArrowFunctionExpression\n          | N.TypeCastExpression\n          | undefined\n          | null = null;\n\n        if (\n          arrow.node &&\n          this.maybeUnwrapTypeCastExpression(arrow.node).type ===\n            \"ArrowFunctionExpression\"\n        ) {\n          if (!arrow.error && !arrow.aborted) {\n            // <T> async () => {}\n            // @ts-expect-error: refine tryParse typings\n            if (arrow.node.async) {\n              /*:: invariant(typeParameters) */\n              this.raise(\n                FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction,\n                typeParameters,\n              );\n            }\n            return arrow.node;\n          }\n\n          // @ts-expect-error: refine typings\n          arrowExpression = arrow.node;\n        }\n\n        // If we are here, both JSX and Flow parsing attempts failed.\n        // Give the precedence to the JSX error, except if JSX had an\n        // unrecoverable error while Flow didn't.\n        // If the error is recoverable, we can only re-report it if there is\n        // a node we can return.\n\n        if (jsx?.node) {\n          /*:: invariant(jsx.failState) */\n          this.state = jsx.failState;\n          return jsx.node;\n        }\n\n        if (arrowExpression) {\n          /*:: invariant(arrow.failState) */\n          this.state = arrow.failState;\n          return arrowExpression;\n        }\n\n        if (jsx?.thrown) throw jsx.error;\n        if (arrow.thrown) throw arrow.error;\n\n        /*:: invariant(typeParameters) */\n        throw this.raise(\n          FlowErrors.UnexpectedTokenAfterTypeParameter,\n          typeParameters,\n        );\n      }\n\n      return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n    }\n\n    // handle return types for arrow functions\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // @ts-expect-error todo(flow->ts)\n        const result = this.tryParse<N.TypeAnnotation>(() => {\n          const oldNoAnonFunctionType = this.state.noAnonFunctionType;\n          this.state.noAnonFunctionType = true;\n\n          const typeNode = this.startNode<N.TypeAnnotation>();\n\n          [\n            typeNode.typeAnnotation,\n            // @ts-expect-error (destructuring not supported yet)\n            node.predicate,\n          ] = this.flowParseTypeAndPredicateInitialiser();\n\n          this.state.noAnonFunctionType = oldNoAnonFunctionType;\n\n          if (this.canInsertSemicolon()) this.unexpected();\n          if (!this.match(tt.arrow)) this.unexpected();\n\n          return typeNode;\n        });\n\n        if (result.thrown) return null;\n        /*:: invariant(result.node) */\n\n        if (result.error) this.state = result.failState;\n\n        // assign after it is clear it is an arrow\n        // @ts-expect-error todo(flow->ts)\n        node.returnType = result.node.typeAnnotation\n          ? this.finishNode(result.node, \"TypeAnnotation\")\n          : null;\n      }\n\n      return super.parseArrow(node);\n    }\n\n    shouldParseArrow(params: Array<N.Node>): boolean {\n      return this.match(tt.colon) || super.shouldParseArrow(params);\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params:\n        | Array<N.Expression | N.SpreadElement>\n        | Array<N.Expression | N.RestElement>,\n    ): void {\n      if (\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        node.params = params as N.ArrowFunctionExpression[\"params\"];\n      } else {\n        super.setArrowFunctionParameters(node, params);\n      }\n    }\n\n    checkParams(\n      node: N.Function,\n      allowDuplicates: boolean,\n      isArrowFunction?: boolean | null,\n      strictModeChanged: boolean = true,\n    ): void {\n      if (\n        isArrowFunction &&\n        this.state.noArrowParamsConversionAt.includes(\n          this.offsetToSourcePos(node.start),\n        )\n      ) {\n        return;\n      }\n\n      // ensure the `this` param is first, if it exists\n      for (let i = 0; i < node.params.length; i++) {\n        if (this.isThisParam(node.params[i]) && i > 0) {\n          this.raise(FlowErrors.ThisParamMustBeFirst, node.params[i]);\n        }\n      }\n\n      super.checkParams(\n        node,\n        allowDuplicates,\n        isArrowFunction,\n        strictModeChanged,\n      );\n    }\n\n    parseParenAndDistinguishExpression(canBeArrow: boolean): N.Expression {\n      return super.parseParenAndDistinguishExpression(\n        canBeArrow &&\n          !this.state.noArrowAt.includes(\n            this.sourceToOffsetPos(this.state.start),\n          ),\n      );\n    }\n\n    parseSubscripts(\n      base: N.Expression,\n      startLoc: Position,\n      noCalls?: boolean | null,\n    ): N.Expression {\n      if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.state.noArrowAt.includes(startLoc.index)\n      ) {\n        this.next();\n\n        const node = this.startNodeAt<N.CallExpression>(startLoc);\n        node.callee = base;\n        node.arguments = super.parseCallExpressionArguments();\n        base = this.finishNode(node, \"CallExpression\");\n      } else if (\n        base.type === \"Identifier\" &&\n        base.name === \"async\" &&\n        this.match(tt.lt)\n      ) {\n        const state = this.state.clone();\n        const arrow = this.tryParse(\n          abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(),\n          state,\n        );\n\n        /*:: invariant(arrow.node != null) */\n        // @ts-expect-error: refine tryParse typings\n        if (!arrow.error && !arrow.aborted) return arrow.node;\n\n        const result = this.tryParse(\n          () => super.parseSubscripts(base, startLoc, noCalls),\n          state,\n        );\n\n        if (result.node && !result.error) return result.node;\n\n        if (arrow.node) {\n          this.state = arrow.failState;\n          // @ts-expect-error: refine tryParse typings\n          return arrow.node;\n        }\n\n        if (result.node) {\n          this.state = result.failState;\n          return result.node;\n        }\n\n        throw arrow.error || result.error;\n      }\n\n      return super.parseSubscripts(base, startLoc, noCalls);\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      subscriptState: N.ParseSubscriptState,\n    ): N.Expression {\n      if (this.match(tt.questionDot) && this.isLookaheadToken_lt()) {\n        subscriptState.optionalChainMember = true;\n        if (noCalls) {\n          subscriptState.stop = true;\n          return base;\n        }\n        this.next();\n        const node = this.startNodeAt<N.OptionalCallExpression>(startLoc);\n        node.callee = base;\n        node.typeArguments =\n          this.flowParseTypeParameterInstantiationInExpression();\n        this.expect(tt.parenL);\n        node.arguments = this.parseCallExpressionArguments();\n        node.optional = true;\n        return this.finishCallExpression(node, /* optional */ true);\n      } else if (\n        !noCalls &&\n        this.shouldParseTypes() &&\n        (this.match(tt.lt) ||\n          // also handles `new C<<T>`\n          this.match(tt.bitShiftL))\n      ) {\n        const node = this.startNodeAt<\n          N.OptionalCallExpression | N.CallExpression\n        >(startLoc);\n        node.callee = base;\n\n        const result = this.tryParse(() => {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationCallOrNew();\n          this.expect(tt.parenL);\n          node.arguments = super.parseCallExpressionArguments();\n          if (subscriptState.optionalChainMember) {\n            (node as Undone<N.OptionalCallExpression>).optional = false;\n          }\n          return this.finishCallExpression(\n            node,\n            subscriptState.optionalChainMember,\n          );\n        });\n\n        if (result.node) {\n          if (result.error) this.state = result.failState;\n          return result.node;\n        }\n      }\n\n      return super.parseSubscript(\n        base,\n\n        startLoc,\n        noCalls,\n        subscriptState,\n      );\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      let targs = null;\n      if (this.shouldParseTypes() && this.match(tt.lt)) {\n        targs = this.tryParse(() =>\n          this.flowParseTypeParameterInstantiationCallOrNew(),\n        ).node;\n      }\n      node.typeArguments = targs;\n    }\n\n    parseAsyncArrowWithTypeParameters(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined | null {\n      const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n      this.parseFunctionParams(node, false);\n      if (!this.parseArrow(node)) return;\n      return super.parseArrowExpression(\n        node,\n        /* params */ undefined,\n        /* isAsync */ true,\n      );\n    }\n\n    readToken_mult_modulo(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.asterisk &&\n        next === charCodes.slash &&\n        this.state.hasFlowComment\n      ) {\n        this.state.hasFlowComment = false;\n        this.state.pos += 2;\n        this.nextToken();\n        return;\n      }\n\n      super.readToken_mult_modulo(code);\n    }\n\n    readToken_pipe_amp(code: number): void {\n      const next = this.input.charCodeAt(this.state.pos + 1);\n      if (\n        code === charCodes.verticalBar &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        // '|}'\n        this.finishOp(tt.braceBarR, 2);\n        return;\n      }\n\n      super.readToken_pipe_amp(code);\n    }\n\n    parseTopLevel(file: N.File, program: N.Program): N.File {\n      const fileNode = super.parseTopLevel(file, program);\n      if (this.state.hasFlowComment) {\n        this.raise(\n          FlowErrors.UnterminatedFlowComment,\n          this.state.curPosition(),\n        );\n      }\n      return fileNode;\n    }\n\n    skipBlockComment(): N.CommentBlock | undefined {\n      if (this.hasPlugin(\"flowComments\") && this.skipFlowComment()) {\n        if (this.state.hasFlowComment) {\n          throw this.raise(FlowErrors.NestedFlowComment, this.state.startLoc);\n        }\n        this.hasFlowCommentCompletion();\n        const commentSkip = this.skipFlowComment();\n        if (commentSkip) {\n          this.state.pos += commentSkip;\n          this.state.hasFlowComment = true;\n        }\n        return;\n      }\n\n      return super.skipBlockComment(this.state.hasFlowComment ? \"*-/\" : \"*/\");\n    }\n\n    skipFlowComment(): number | false {\n      const { pos } = this.state;\n      let shiftToFirstNonWhiteSpace = 2;\n      while (\n        [charCodes.space, charCodes.tab].includes(\n          // @ts-expect-error testing whether a number is included\n          this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace),\n        )\n      ) {\n        shiftToFirstNonWhiteSpace++;\n      }\n\n      const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);\n      const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);\n\n      if (ch2 === charCodes.colon && ch3 === charCodes.colon) {\n        return shiftToFirstNonWhiteSpace + 2; // check for /*::\n      }\n      if (\n        this.input.slice(\n          shiftToFirstNonWhiteSpace + pos,\n          shiftToFirstNonWhiteSpace + pos + 12,\n        ) === \"flow-include\"\n      ) {\n        return shiftToFirstNonWhiteSpace + 12; // check for /*flow-include\n      }\n      if (ch2 === charCodes.colon && ch3 !== charCodes.colon) {\n        return shiftToFirstNonWhiteSpace; // check for /*:, advance up to :\n      }\n      return false;\n    }\n\n    hasFlowCommentCompletion(): void {\n      const end = this.input.indexOf(\"*/\", this.state.pos);\n      if (end === -1) {\n        throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n      }\n    }\n\n    // Flow enum parsing\n\n    flowEnumErrorBooleanMemberNotInitialized(\n      loc: Position,\n      {\n        enumName,\n        memberName,\n      }: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumBooleanMemberNotInitialized, loc, {\n        memberName,\n        enumName,\n      });\n    }\n\n    flowEnumErrorInvalidMemberInitializer(\n      loc: Position,\n      enumContext: EnumContext,\n    ) {\n      return this.raise(\n        !enumContext.explicitType\n          ? FlowErrors.EnumInvalidMemberInitializerUnknownType\n          : enumContext.explicitType === \"symbol\"\n            ? FlowErrors.EnumInvalidMemberInitializerSymbolType\n            : FlowErrors.EnumInvalidMemberInitializerPrimaryType,\n        loc,\n        enumContext,\n      );\n    }\n\n    flowEnumErrorNumberMemberNotInitialized(\n      loc: Position,\n      details: {\n        enumName: string;\n        memberName: string;\n      },\n    ): void {\n      this.raise(FlowErrors.EnumNumberMemberNotInitialized, loc, details);\n    }\n\n    flowEnumErrorStringMemberInconsistentlyInitialized(\n      node: N.Node,\n      details: {\n        enumName: string;\n      },\n    ): void {\n      this.raise(\n        FlowErrors.EnumStringMemberInconsistentlyInitialized,\n        node,\n        details,\n      );\n    }\n\n    flowEnumMemberInit(): EnumMemberInit {\n      const startLoc = this.state.startLoc;\n      const endOfInit = () => this.match(tt.comma) || this.match(tt.braceR);\n      switch (this.state.type) {\n        case tt.num: {\n          const literal = this.parseNumericLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"number\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt.string: {\n          const literal = this.parseStringLiteral(this.state.value);\n          if (endOfInit()) {\n            return { type: \"string\", loc: literal.loc.start, value: literal };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        case tt._true:\n        case tt._false: {\n          const literal = this.parseBooleanLiteral(this.match(tt._true));\n          if (endOfInit()) {\n            return {\n              type: \"boolean\",\n              loc: literal.loc.start,\n              value: literal,\n            };\n          }\n          return { type: \"invalid\", loc: startLoc };\n        }\n        default:\n          return { type: \"invalid\", loc: startLoc };\n      }\n    }\n\n    flowEnumMemberRaw(): {\n      id: N.Identifier;\n      init: EnumMemberInit;\n    } {\n      const loc = this.state.startLoc;\n      const id = this.parseIdentifier(true);\n      const init = this.eat(tt.eq)\n        ? this.flowEnumMemberInit()\n        : { type: \"none\" as const, loc };\n      return { id, init };\n    }\n\n    flowEnumCheckExplicitTypeMismatch(\n      loc: Position,\n      context: EnumContext,\n      expectedType: EnumExplicitType,\n    ): void {\n      const { explicitType } = context;\n      if (explicitType === null) {\n        return;\n      }\n      if (explicitType !== expectedType) {\n        this.flowEnumErrorInvalidMemberInitializer(loc, context);\n      }\n    }\n\n    flowEnumMembers({\n      enumName,\n      explicitType,\n    }: {\n      enumName: string;\n      explicitType: EnumExplicitType;\n    }): {\n      members: {\n        booleanMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumBooleanMember\" }\n        >[];\n        numberMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumNumberMember\" }\n        >[];\n        stringMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumStringMember\" }\n        >[];\n        defaultedMembers: Extract<\n          N.FlowEnumMember,\n          { type: \"EnumDefaultedMember\" }\n        >[];\n      };\n      hasUnknownMembers: boolean;\n    } {\n      const seenNames = new Set();\n      const members = {\n        // @ts-expect-error: migrate to Babel types\n        booleanMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        numberMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        stringMembers: [],\n        // @ts-expect-error: migrate to Babel types\n        defaultedMembers: [],\n      };\n      let hasUnknownMembers = false;\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.ellipsis)) {\n          hasUnknownMembers = true;\n          break;\n        }\n        const memberNode = this.startNode<N.FlowEnumMember>();\n        const { id, init } = this.flowEnumMemberRaw();\n        const memberName = id.name;\n        if (memberName === \"\") {\n          continue;\n        }\n        if (/^[a-z]/.test(memberName)) {\n          this.raise(FlowErrors.EnumInvalidMemberName, id, {\n            memberName,\n            suggestion: memberName[0].toUpperCase() + memberName.slice(1),\n            enumName,\n          });\n        }\n        if (seenNames.has(memberName)) {\n          this.raise(FlowErrors.EnumDuplicateMemberName, id, {\n            memberName,\n            enumName,\n          });\n        }\n        seenNames.add(memberName);\n        const context = { enumName, explicitType, memberName };\n        memberNode.id = id;\n        switch (init.type) {\n          case \"boolean\": {\n            this.flowEnumCheckExplicitTypeMismatch(\n              init.loc,\n              context,\n              \"boolean\",\n            );\n            memberNode.init = init.value;\n            members.booleanMembers.push(\n              this.finishNode(memberNode, \"EnumBooleanMember\"),\n            );\n            break;\n          }\n          case \"number\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"number\");\n            memberNode.init = init.value;\n            members.numberMembers.push(\n              this.finishNode(memberNode, \"EnumNumberMember\"),\n            );\n            break;\n          }\n          case \"string\": {\n            this.flowEnumCheckExplicitTypeMismatch(init.loc, context, \"string\");\n            memberNode.init = init.value;\n            members.stringMembers.push(\n              this.finishNode(memberNode, \"EnumStringMember\"),\n            );\n            break;\n          }\n          case \"invalid\": {\n            throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);\n          }\n          case \"none\": {\n            switch (explicitType) {\n              case \"boolean\":\n                this.flowEnumErrorBooleanMemberNotInitialized(\n                  init.loc,\n                  context,\n                );\n                break;\n              case \"number\":\n                this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);\n                break;\n              default:\n                members.defaultedMembers.push(\n                  this.finishNode(memberNode, \"EnumDefaultedMember\"),\n                );\n            }\n          }\n        }\n\n        if (!this.match(tt.braceR)) {\n          this.expect(tt.comma);\n        }\n      }\n      return { members, hasUnknownMembers };\n    }\n\n    flowEnumStringMembers(\n      initializedMembers: Array<N.Node>,\n      defaultedMembers: Array<N.Node>,\n      {\n        enumName,\n      }: {\n        enumName: string;\n      },\n    ): Array<N.Node> {\n      if (initializedMembers.length === 0) {\n        return defaultedMembers;\n      } else if (defaultedMembers.length === 0) {\n        return initializedMembers;\n      } else if (defaultedMembers.length > initializedMembers.length) {\n        for (const member of initializedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return defaultedMembers;\n      } else {\n        for (const member of defaultedMembers) {\n          this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {\n            enumName,\n          });\n        }\n        return initializedMembers;\n      }\n    }\n\n    flowEnumParseExplicitType({\n      enumName,\n    }: {\n      enumName: string;\n    }): EnumExplicitType {\n      if (!this.eatContextual(tt._of)) return null;\n\n      if (!tokenIsIdentifier(this.state.type)) {\n        throw this.raise(\n          FlowErrors.EnumInvalidExplicitTypeUnknownSupplied,\n          this.state.startLoc,\n          {\n            enumName,\n          },\n        );\n      }\n\n      const { value } = this.state;\n      this.next();\n\n      if (\n        value !== \"boolean\" &&\n        value !== \"number\" &&\n        value !== \"string\" &&\n        value !== \"symbol\"\n      ) {\n        this.raise(FlowErrors.EnumInvalidExplicitType, this.state.startLoc, {\n          enumName,\n          invalidEnumType: value,\n        });\n      }\n\n      return value;\n    }\n\n    flowEnumBody(node: Undone<N.FlowEnumBody>, id: N.Identifier): N.Node {\n      const enumName = id.name;\n      const nameLoc = id.loc.start;\n      const explicitType = this.flowEnumParseExplicitType({ enumName });\n      this.expect(tt.braceL);\n      const { members, hasUnknownMembers } = this.flowEnumMembers({\n        enumName,\n        explicitType,\n      });\n      node.hasUnknownMembers = hasUnknownMembers;\n\n      switch (explicitType) {\n        case \"boolean\":\n          node.explicitType = true;\n          node.members = members.booleanMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumBooleanBody\");\n        case \"number\":\n          node.explicitType = true;\n          node.members = members.numberMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumNumberBody\");\n        case \"string\":\n          node.explicitType = true;\n          node.members = this.flowEnumStringMembers(\n            members.stringMembers,\n            members.defaultedMembers,\n            { enumName },\n          );\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumStringBody\");\n        case \"symbol\":\n          node.members = members.defaultedMembers;\n          this.expect(tt.braceR);\n          return this.finishNode(node, \"EnumSymbolBody\");\n        default: {\n          // `explicitType` is `null`\n          const empty = () => {\n            node.members = [];\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          };\n          node.explicitType = false;\n\n          const boolsLen = members.booleanMembers.length;\n          const numsLen = members.numberMembers.length;\n          const strsLen = members.stringMembers.length;\n          const defaultedLen = members.defaultedMembers.length;\n\n          if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {\n            return empty();\n          } else if (!boolsLen && !numsLen) {\n            node.members = this.flowEnumStringMembers(\n              members.stringMembers,\n              members.defaultedMembers,\n              { enumName },\n            );\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumStringBody\");\n          } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.booleanMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumBooleanBody\");\n          } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {\n            for (const member of members.defaultedMembers) {\n              this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {\n                enumName,\n                memberName: member.id.name,\n              });\n            }\n            node.members = members.numberMembers;\n            this.expect(tt.braceR);\n            return this.finishNode(node, \"EnumNumberBody\");\n          } else {\n            this.raise(FlowErrors.EnumInconsistentMemberValues, nameLoc, {\n              enumName,\n            });\n            return empty();\n          }\n        }\n      }\n    }\n\n    flowParseEnumDeclaration(\n      node: Undone<N.FlowEnumDeclaration>,\n    ): N.FlowEnumDeclaration {\n      const id = this.parseIdentifier();\n      node.id = id;\n      node.body = this.flowEnumBody(this.startNode(), id);\n      return this.finishNode(node, \"EnumDeclaration\");\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      if (this.shouldParseTypes()) {\n        if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n          node.typeArguments =\n            this.flowParseTypeParameterInstantiationInExpression();\n        }\n      }\n\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    // check if the next token is a tt.lt\n    isLookaheadToken_lt(): boolean {\n      const next = this.nextTokenStart();\n      if (this.input.charCodeAt(next) === charCodes.lessThan) {\n        const afterNext = this.input.charCodeAt(next + 1);\n        return (\n          afterNext !== charCodes.lessThan && afterNext !== charCodes.equalsTo\n        );\n      }\n      return false;\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    maybeUnwrapTypeCastExpression(node: N.Node) {\n      return node.type === \"TypeCastExpression\" ? node.expression : node;\n    }\n  };\n","const entities: { [name: string]: string } = {\n  __proto__: null,\n  quot: \"\\u0022\",\n  amp: \"&\",\n  apos: \"\\u0027\",\n  lt: \"<\",\n  gt: \">\",\n  nbsp: \"\\u00A0\",\n  iexcl: \"\\u00A1\",\n  cent: \"\\u00A2\",\n  pound: \"\\u00A3\",\n  curren: \"\\u00A4\",\n  yen: \"\\u00A5\",\n  brvbar: \"\\u00A6\",\n  sect: \"\\u00A7\",\n  uml: \"\\u00A8\",\n  copy: \"\\u00A9\",\n  ordf: \"\\u00AA\",\n  laquo: \"\\u00AB\",\n  not: \"\\u00AC\",\n  shy: \"\\u00AD\",\n  reg: \"\\u00AE\",\n  macr: \"\\u00AF\",\n  deg: \"\\u00B0\",\n  plusmn: \"\\u00B1\",\n  sup2: \"\\u00B2\",\n  sup3: \"\\u00B3\",\n  acute: \"\\u00B4\",\n  micro: \"\\u00B5\",\n  para: \"\\u00B6\",\n  middot: \"\\u00B7\",\n  cedil: \"\\u00B8\",\n  sup1: \"\\u00B9\",\n  ordm: \"\\u00BA\",\n  raquo: \"\\u00BB\",\n  frac14: \"\\u00BC\",\n  frac12: \"\\u00BD\",\n  frac34: \"\\u00BE\",\n  iquest: \"\\u00BF\",\n  Agrave: \"\\u00C0\",\n  Aacute: \"\\u00C1\",\n  Acirc: \"\\u00C2\",\n  Atilde: \"\\u00C3\",\n  Auml: \"\\u00C4\",\n  Aring: \"\\u00C5\",\n  AElig: \"\\u00C6\",\n  Ccedil: \"\\u00C7\",\n  Egrave: \"\\u00C8\",\n  Eacute: \"\\u00C9\",\n  Ecirc: \"\\u00CA\",\n  Euml: \"\\u00CB\",\n  Igrave: \"\\u00CC\",\n  Iacute: \"\\u00CD\",\n  Icirc: \"\\u00CE\",\n  Iuml: \"\\u00CF\",\n  ETH: \"\\u00D0\",\n  Ntilde: \"\\u00D1\",\n  Ograve: \"\\u00D2\",\n  Oacute: \"\\u00D3\",\n  Ocirc: \"\\u00D4\",\n  Otilde: \"\\u00D5\",\n  Ouml: \"\\u00D6\",\n  times: \"\\u00D7\",\n  Oslash: \"\\u00D8\",\n  Ugrave: \"\\u00D9\",\n  Uacute: \"\\u00DA\",\n  Ucirc: \"\\u00DB\",\n  Uuml: \"\\u00DC\",\n  Yacute: \"\\u00DD\",\n  THORN: \"\\u00DE\",\n  szlig: \"\\u00DF\",\n  agrave: \"\\u00E0\",\n  aacute: \"\\u00E1\",\n  acirc: \"\\u00E2\",\n  atilde: \"\\u00E3\",\n  auml: \"\\u00E4\",\n  aring: \"\\u00E5\",\n  aelig: \"\\u00E6\",\n  ccedil: \"\\u00E7\",\n  egrave: \"\\u00E8\",\n  eacute: \"\\u00E9\",\n  ecirc: \"\\u00EA\",\n  euml: \"\\u00EB\",\n  igrave: \"\\u00EC\",\n  iacute: \"\\u00ED\",\n  icirc: \"\\u00EE\",\n  iuml: \"\\u00EF\",\n  eth: \"\\u00F0\",\n  ntilde: \"\\u00F1\",\n  ograve: \"\\u00F2\",\n  oacute: \"\\u00F3\",\n  ocirc: \"\\u00F4\",\n  otilde: \"\\u00F5\",\n  ouml: \"\\u00F6\",\n  divide: \"\\u00F7\",\n  oslash: \"\\u00F8\",\n  ugrave: \"\\u00F9\",\n  uacute: \"\\u00FA\",\n  ucirc: \"\\u00FB\",\n  uuml: \"\\u00FC\",\n  yacute: \"\\u00FD\",\n  thorn: \"\\u00FE\",\n  yuml: \"\\u00FF\",\n  OElig: \"\\u0152\",\n  oelig: \"\\u0153\",\n  Scaron: \"\\u0160\",\n  scaron: \"\\u0161\",\n  Yuml: \"\\u0178\",\n  fnof: \"\\u0192\",\n  circ: \"\\u02C6\",\n  tilde: \"\\u02DC\",\n  Alpha: \"\\u0391\",\n  Beta: \"\\u0392\",\n  Gamma: \"\\u0393\",\n  Delta: \"\\u0394\",\n  Epsilon: \"\\u0395\",\n  Zeta: \"\\u0396\",\n  Eta: \"\\u0397\",\n  Theta: \"\\u0398\",\n  Iota: \"\\u0399\",\n  Kappa: \"\\u039A\",\n  Lambda: \"\\u039B\",\n  Mu: \"\\u039C\",\n  Nu: \"\\u039D\",\n  Xi: \"\\u039E\",\n  Omicron: \"\\u039F\",\n  Pi: \"\\u03A0\",\n  Rho: \"\\u03A1\",\n  Sigma: \"\\u03A3\",\n  Tau: \"\\u03A4\",\n  Upsilon: \"\\u03A5\",\n  Phi: \"\\u03A6\",\n  Chi: \"\\u03A7\",\n  Psi: \"\\u03A8\",\n  Omega: \"\\u03A9\",\n  alpha: \"\\u03B1\",\n  beta: \"\\u03B2\",\n  gamma: \"\\u03B3\",\n  delta: \"\\u03B4\",\n  epsilon: \"\\u03B5\",\n  zeta: \"\\u03B6\",\n  eta: \"\\u03B7\",\n  theta: \"\\u03B8\",\n  iota: \"\\u03B9\",\n  kappa: \"\\u03BA\",\n  lambda: \"\\u03BB\",\n  mu: \"\\u03BC\",\n  nu: \"\\u03BD\",\n  xi: \"\\u03BE\",\n  omicron: \"\\u03BF\",\n  pi: \"\\u03C0\",\n  rho: \"\\u03C1\",\n  sigmaf: \"\\u03C2\",\n  sigma: \"\\u03C3\",\n  tau: \"\\u03C4\",\n  upsilon: \"\\u03C5\",\n  phi: \"\\u03C6\",\n  chi: \"\\u03C7\",\n  psi: \"\\u03C8\",\n  omega: \"\\u03C9\",\n  thetasym: \"\\u03D1\",\n  upsih: \"\\u03D2\",\n  piv: \"\\u03D6\",\n  ensp: \"\\u2002\",\n  emsp: \"\\u2003\",\n  thinsp: \"\\u2009\",\n  zwnj: \"\\u200C\",\n  zwj: \"\\u200D\",\n  lrm: \"\\u200E\",\n  rlm: \"\\u200F\",\n  ndash: \"\\u2013\",\n  mdash: \"\\u2014\",\n  lsquo: \"\\u2018\",\n  rsquo: \"\\u2019\",\n  sbquo: \"\\u201A\",\n  ldquo: \"\\u201C\",\n  rdquo: \"\\u201D\",\n  bdquo: \"\\u201E\",\n  dagger: \"\\u2020\",\n  Dagger: \"\\u2021\",\n  bull: \"\\u2022\",\n  hellip: \"\\u2026\",\n  permil: \"\\u2030\",\n  prime: \"\\u2032\",\n  Prime: \"\\u2033\",\n  lsaquo: \"\\u2039\",\n  rsaquo: \"\\u203A\",\n  oline: \"\\u203E\",\n  frasl: \"\\u2044\",\n  euro: \"\\u20AC\",\n  image: \"\\u2111\",\n  weierp: \"\\u2118\",\n  real: \"\\u211C\",\n  trade: \"\\u2122\",\n  alefsym: \"\\u2135\",\n  larr: \"\\u2190\",\n  uarr: \"\\u2191\",\n  rarr: \"\\u2192\",\n  darr: \"\\u2193\",\n  harr: \"\\u2194\",\n  crarr: \"\\u21B5\",\n  lArr: \"\\u21D0\",\n  uArr: \"\\u21D1\",\n  rArr: \"\\u21D2\",\n  dArr: \"\\u21D3\",\n  hArr: \"\\u21D4\",\n  forall: \"\\u2200\",\n  part: \"\\u2202\",\n  exist: \"\\u2203\",\n  empty: \"\\u2205\",\n  nabla: \"\\u2207\",\n  isin: \"\\u2208\",\n  notin: \"\\u2209\",\n  ni: \"\\u220B\",\n  prod: \"\\u220F\",\n  sum: \"\\u2211\",\n  minus: \"\\u2212\",\n  lowast: \"\\u2217\",\n  radic: \"\\u221A\",\n  prop: \"\\u221D\",\n  infin: \"\\u221E\",\n  ang: \"\\u2220\",\n  and: \"\\u2227\",\n  or: \"\\u2228\",\n  cap: \"\\u2229\",\n  cup: \"\\u222A\",\n  int: \"\\u222B\",\n  there4: \"\\u2234\",\n  sim: \"\\u223C\",\n  cong: \"\\u2245\",\n  asymp: \"\\u2248\",\n  ne: \"\\u2260\",\n  equiv: \"\\u2261\",\n  le: \"\\u2264\",\n  ge: \"\\u2265\",\n  sub: \"\\u2282\",\n  sup: \"\\u2283\",\n  nsub: \"\\u2284\",\n  sube: \"\\u2286\",\n  supe: \"\\u2287\",\n  oplus: \"\\u2295\",\n  otimes: \"\\u2297\",\n  perp: \"\\u22A5\",\n  sdot: \"\\u22C5\",\n  lceil: \"\\u2308\",\n  rceil: \"\\u2309\",\n  lfloor: \"\\u230A\",\n  rfloor: \"\\u230B\",\n  lang: \"\\u2329\",\n  rang: \"\\u232A\",\n  loz: \"\\u25CA\",\n  spades: \"\\u2660\",\n  clubs: \"\\u2663\",\n  hearts: \"\\u2665\",\n  diams: \"\\u2666\",\n} as const;\nexport default entities;\n","import * as charCodes from \"charcodes\";\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nexport const lineBreak = /\\r\\n|[\\r\\n\\u2028\\u2029]/;\nexport const lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n// https://tc39.github.io/ecma262/#sec-line-terminators\nexport function isNewLine(code: number): boolean {\n  switch (code) {\n    case charCodes.lineFeed:\n    case charCodes.carriageReturn:\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return true;\n\n    default:\n      return false;\n  }\n}\n\nexport function hasNewLine(input: string, start: number, end: number): boolean {\n  for (let i = start; i < end; i++) {\n    if (isNewLine(input.charCodeAt(i))) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport const skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nexport const skipWhiteSpaceInLine =\n  /(?:[^\\S\\n\\r\\u2028\\u2029]|\\/\\/.*|\\/\\*.*?\\*\\/)*/g;\n\n// https://tc39.github.io/ecma262/#sec-white-space\nexport function isWhitespace(code: number): boolean {\n  switch (code) {\n    case 0x0009: // CHARACTER TABULATION\n    case 0x000b: // LINE TABULATION\n    case 0x000c: // FORM FEED\n    case charCodes.space:\n    case charCodes.nonBreakingSpace:\n    case charCodes.oghamSpaceMark:\n    case 0x2000: // EN QUAD\n    case 0x2001: // EM QUAD\n    case 0x2002: // EN SPACE\n    case 0x2003: // EM SPACE\n    case 0x2004: // THREE-PER-EM SPACE\n    case 0x2005: // FOUR-PER-EM SPACE\n    case 0x2006: // SIX-PER-EM SPACE\n    case 0x2007: // FIGURE SPACE\n    case 0x2008: // PUNCTUATION SPACE\n    case 0x2009: // THIN SPACE\n    case 0x200a: // HAIR SPACE\n    case 0x202f: // NARROW NO-BREAK SPACE\n    case 0x205f: // MEDIUM MATHEMATICAL SPACE\n    case 0x3000: // IDEOGRAPHIC SPACE\n    case 0xfeff: // ZERO WIDTH NO-BREAK SPACE\n      return true;\n\n    default:\n      return false;\n  }\n}\n","import * as charCodes from \"charcodes\";\n\nimport XHTMLEntities from \"./xhtml.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport {\n  tokenComesBeforeExpression,\n  tokenIsKeyword,\n  tokenLabelName,\n  type TokenType,\n  tt,\n} from \"../../tokenizer/types.ts\";\nimport type { TokContext } from \"../../tokenizer/context.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../../util/identifier.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { isNewLine } from \"../../util/whitespace.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\n\n/* eslint sort-keys: \"error\" */\nconst JsxErrors = ParseErrorEnum`jsx`({\n  AttributeIsEmpty:\n    \"JSX attributes must only be assigned a non-empty expression.\",\n  MissingClosingTagElement: ({ openingTagName }: { openingTagName: string }) =>\n    `Expected corresponding JSX closing tag for <${openingTagName}>.`,\n  MissingClosingTagFragment: \"Expected corresponding JSX closing tag for <>.\",\n  UnexpectedSequenceExpression:\n    \"Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?\",\n  // FIXME: Unify with Errors.UnexpectedToken\n  UnexpectedToken: ({\n    unexpected,\n    HTMLEntity,\n  }: {\n    unexpected: string;\n    HTMLEntity: string;\n  }) =>\n    `Unexpected token \\`${unexpected}\\`. Did you mean \\`${HTMLEntity}\\` or \\`{'${unexpected}'}\\`?`,\n  UnsupportedJsxValue:\n    \"JSX value should be either an expression or a quoted JSX text.\",\n  UnterminatedJsxContent: \"Unterminated JSX contents.\",\n  UnwrappedAdjacentJSXElements:\n    \"Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...</>?\",\n});\n\n/* eslint-disable sort-keys */\n\nfunction isFragment(object?: N.JSXTag | null): object is N.JSXFragmentTag {\n  return object\n    ? object.type === \"JSXOpeningFragment\" ||\n        object.type === \"JSXClosingFragment\"\n    : false;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(\n  object: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression,\n): string {\n  if (object.type === \"JSXIdentifier\") {\n    return object.name;\n  }\n\n  if (object.type === \"JSXNamespacedName\") {\n    return object.namespace.name + \":\" + object.name.name;\n  }\n\n  if (object.type === \"JSXMemberExpression\") {\n    return (\n      getQualifiedJSXName(object.object) +\n      \".\" +\n      getQualifiedJSXName(object.property)\n    );\n  }\n\n  // istanbul ignore next\n  // @ts-expect-error - object is 'never'\n  throw new Error(\"Node had unexpected type: \" + object.type);\n}\n\nexport interface IJSXParserMixin {\n  jsxParseOpeningElementAfterName(\n    node: N.JSXOpeningElement,\n  ): N.JSXOpeningElement;\n}\n\nexport type ClassWithMixin<\n  T extends new (...args: any) => any,\n  M extends object,\n> = T extends new (...args: infer P) => infer I\n  ? new (...args: P) => I & M\n  : never;\n\nexport default (superClass: typeof Parser) =>\n  class JSXParserMixin extends superClass implements Parser, IJSXParserMixin {\n    // Reads inline JSX contents token.\n\n    jsxReadToken(): void {\n      let out = \"\";\n      let chunkStart = this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(\n            JsxErrors.UnterminatedJsxContent,\n            this.state.startLoc,\n          );\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n\n        switch (ch) {\n          case charCodes.lessThan:\n          case charCodes.leftCurlyBrace:\n            if (this.state.pos === this.state.start) {\n              if (ch === charCodes.lessThan && this.state.canStartJSXElement) {\n                ++this.state.pos;\n                this.finishToken(tt.jsxTagStart);\n              } else {\n                super.getTokenFromCode(ch);\n              }\n              return;\n            }\n            out += this.input.slice(chunkStart, this.state.pos);\n            this.finishToken(tt.jsxText, out);\n            return;\n\n          case charCodes.ampersand:\n            out += this.input.slice(chunkStart, this.state.pos);\n            out += this.jsxReadEntity();\n            chunkStart = this.state.pos;\n            break;\n\n          case charCodes.greaterThan:\n          case charCodes.rightCurlyBrace:\n            if (process.env.BABEL_8_BREAKING) {\n              this.raise(JsxErrors.UnexpectedToken, this.state.curPosition(), {\n                unexpected: this.input[this.state.pos],\n                HTMLEntity:\n                  ch === charCodes.rightCurlyBrace ? \"&rbrace;\" : \"&gt;\",\n              });\n            }\n          /* falls through */\n\n          default:\n            if (isNewLine(ch)) {\n              out += this.input.slice(chunkStart, this.state.pos);\n              out += this.jsxReadNewLine(true);\n              chunkStart = this.state.pos;\n            } else {\n              ++this.state.pos;\n            }\n        }\n      }\n    }\n\n    jsxReadNewLine(normalizeCRLF: boolean): string {\n      const ch = this.input.charCodeAt(this.state.pos);\n      let out;\n      ++this.state.pos;\n      if (\n        ch === charCodes.carriageReturn &&\n        this.input.charCodeAt(this.state.pos) === charCodes.lineFeed\n      ) {\n        ++this.state.pos;\n        out = normalizeCRLF ? \"\\n\" : \"\\r\\n\";\n      } else {\n        out = String.fromCharCode(ch);\n      }\n      ++this.state.curLine;\n      this.state.lineStart = this.state.pos;\n\n      return out;\n    }\n\n    jsxReadString(quote: number): void {\n      let out = \"\";\n      let chunkStart = ++this.state.pos;\n      for (;;) {\n        if (this.state.pos >= this.length) {\n          throw this.raise(Errors.UnterminatedString, this.state.startLoc);\n        }\n\n        const ch = this.input.charCodeAt(this.state.pos);\n        if (ch === quote) break;\n        if (ch === charCodes.ampersand) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadEntity();\n          chunkStart = this.state.pos;\n        } else if (isNewLine(ch)) {\n          out += this.input.slice(chunkStart, this.state.pos);\n          out += this.jsxReadNewLine(false);\n          chunkStart = this.state.pos;\n        } else {\n          ++this.state.pos;\n        }\n      }\n      out += this.input.slice(chunkStart, this.state.pos++);\n      this.finishToken(tt.string, out);\n    }\n\n    jsxReadEntity(): string {\n      const startPos = ++this.state.pos;\n      if (this.codePointAtPos(this.state.pos) === charCodes.numberSign) {\n        ++this.state.pos;\n\n        let radix = 10;\n        if (this.codePointAtPos(this.state.pos) === charCodes.lowercaseX) {\n          radix = 16;\n          ++this.state.pos;\n        }\n\n        const codePoint = this.readInt(\n          radix,\n          /* len */ undefined,\n          /* forceLen */ false,\n          /* allowNumSeparator */ \"bail\",\n        );\n        if (\n          codePoint !== null &&\n          this.codePointAtPos(this.state.pos) === charCodes.semicolon\n        ) {\n          ++this.state.pos;\n          return String.fromCodePoint(codePoint);\n        }\n      } else {\n        let count = 0;\n        let semi = false;\n        while (\n          count++ < 10 &&\n          this.state.pos < this.length &&\n          !(semi = this.codePointAtPos(this.state.pos) === charCodes.semicolon)\n        ) {\n          ++this.state.pos;\n        }\n\n        if (semi) {\n          const desc = this.input.slice(startPos, this.state.pos);\n          const entity = XHTMLEntities[desc];\n          ++this.state.pos;\n\n          if (entity) {\n            return entity;\n          }\n        }\n      }\n\n      // Not a valid entity\n      this.state.pos = startPos;\n      return \"&\";\n    }\n\n    // Read a JSX identifier (valid tag or attribute name).\n    //\n    // Optimized version since JSX identifiers can\"t contain\n    // escape characters and so can be read as single slice.\n    // Also assumes that first character was already checked\n    // by isIdentifierStart in readToken.\n\n    jsxReadWord(): void {\n      let ch;\n      const start = this.state.pos;\n      do {\n        ch = this.input.charCodeAt(++this.state.pos);\n      } while (isIdentifierChar(ch) || ch === charCodes.dash);\n      this.finishToken(tt.jsxName, this.input.slice(start, this.state.pos));\n    }\n\n    // Parse next token as JSX identifier\n\n    jsxParseIdentifier(): N.JSXIdentifier {\n      const node = this.startNode<N.JSXIdentifier>();\n      if (this.match(tt.jsxName)) {\n        node.name = this.state.value;\n      } else if (tokenIsKeyword(this.state.type)) {\n        node.name = tokenLabelName(this.state.type);\n      } else {\n        this.unexpected();\n      }\n      this.next();\n      return this.finishNode(node, \"JSXIdentifier\");\n    }\n\n    // Parse namespaced identifier.\n\n    jsxParseNamespacedName(): N.JSXNamespacedName | N.JSXIdentifier {\n      const startLoc = this.state.startLoc;\n      const name = this.jsxParseIdentifier();\n      if (!this.eat(tt.colon)) return name;\n\n      const node = this.startNodeAt<N.JSXNamespacedName>(startLoc);\n      node.namespace = name;\n      node.name = this.jsxParseIdentifier();\n      return this.finishNode(node, \"JSXNamespacedName\");\n    }\n\n    // Parses element name in any form - namespaced, member\n    // or single identifier.\n\n    jsxParseElementName():\n      | N.JSXIdentifier\n      | N.JSXNamespacedName\n      | N.JSXMemberExpression {\n      const startLoc = this.state.startLoc;\n      let node: N.JSXIdentifier | N.JSXNamespacedName | N.JSXMemberExpression =\n        this.jsxParseNamespacedName();\n      if (node.type === \"JSXNamespacedName\") {\n        return node;\n      }\n      while (this.eat(tt.dot)) {\n        const newNode = this.startNodeAt<N.JSXMemberExpression>(startLoc);\n        newNode.object = node;\n        newNode.property = this.jsxParseIdentifier();\n        node = this.finishNode(newNode, \"JSXMemberExpression\");\n      }\n      return node;\n    }\n\n    // Parses any type of JSX attribute value.\n\n    jsxParseAttributeValue():\n      | N.JSXExpressionContainer\n      | N.JSXElement\n      | N.StringLiteral {\n      let node;\n      switch (this.state.type) {\n        case tt.braceL:\n          node = this.startNode();\n          this.setContext(tc.brace);\n          this.next();\n          node = this.jsxParseExpressionContainer(node, tc.j_oTag);\n          if (node.expression.type === \"JSXEmptyExpression\") {\n            this.raise(JsxErrors.AttributeIsEmpty, node);\n          }\n          return node;\n\n        case tt.jsxTagStart:\n        case tt.string:\n          return this.parseExprAtom() as N.JSXElement | N.StringLiteral;\n\n        default:\n          throw this.raise(JsxErrors.UnsupportedJsxValue, this.state.startLoc);\n      }\n    }\n\n    // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n    // and so it should start at the end of last read token (left brace) and finish\n    // at the beginning of the next one (right brace).\n\n    jsxParseEmptyExpression(): N.JSXEmptyExpression {\n      const node = this.startNodeAt(this.state.lastTokEndLoc);\n      return this.finishNodeAt(node, \"JSXEmptyExpression\", this.state.startLoc);\n    }\n\n    // Parse JSX spread child\n\n    jsxParseSpreadChild(node: Undone<N.JSXSpreadChild>): N.JSXSpreadChild {\n      this.next(); // ellipsis\n      node.expression = this.parseExpression();\n      this.setContext(tc.j_expr);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXSpreadChild\");\n    }\n\n    // Parses JSX expression enclosed into curly brackets.\n\n    jsxParseExpressionContainer(\n      node: Undone<N.JSXExpressionContainer>,\n      previousContext: TokContext,\n    ): N.JSXExpressionContainer {\n      if (this.match(tt.braceR)) {\n        node.expression = this.jsxParseEmptyExpression();\n      } else {\n        const expression = this.parseExpression();\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            expression.type === \"SequenceExpression\" &&\n            !expression.extra?.parenthesized\n          ) {\n            this.raise(\n              JsxErrors.UnexpectedSequenceExpression,\n              expression.expressions[1],\n            );\n          }\n        }\n\n        node.expression = expression;\n      }\n      this.setContext(previousContext);\n      this.state.canStartJSXElement = true;\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"JSXExpressionContainer\");\n    }\n\n    // Parses following JSX attribute name-value pair.\n\n    jsxParseAttribute(): N.JSXAttribute | N.JSXSpreadAttribute {\n      const node = this.startNode<N.JSXAttribute | N.JSXSpreadAttribute>();\n      if (this.match(tt.braceL)) {\n        this.setContext(tc.brace);\n        this.next();\n        this.expect(tt.ellipsis);\n        node.argument = this.parseMaybeAssignAllowIn();\n        this.setContext(tc.j_oTag);\n        this.state.canStartJSXElement = true;\n        this.expect(tt.braceR);\n        return this.finishNode(node, \"JSXSpreadAttribute\");\n      }\n      node.name = this.jsxParseNamespacedName();\n      node.value = this.eat(tt.eq) ? this.jsxParseAttributeValue() : null;\n      return this.finishNode(node, \"JSXAttribute\");\n    }\n\n    // Parses JSX opening tag starting after \"<\".\n\n    jsxParseOpeningElementAt(\n      startLoc: Position,\n    ): N.JSXOpeningElement | N.JSXOpeningFragment {\n      const node = this.startNodeAt<N.JSXOpeningElement | N.JSXOpeningFragment>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXOpeningFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      return this.jsxParseOpeningElementAfterName(\n        node as Undone<N.JSXOpeningElement>,\n      );\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: Undone<N.JSXOpeningElement>,\n    ): N.JSXOpeningElement {\n      const attributes: (N.JSXAttribute | N.JSXSpreadAttribute)[] = [];\n      while (!this.match(tt.slash) && !this.match(tt.jsxTagEnd)) {\n        attributes.push(this.jsxParseAttribute());\n      }\n      node.attributes = attributes;\n      node.selfClosing = this.eat(tt.slash);\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXOpeningElement\");\n    }\n\n    // Parses JSX closing tag starting after \"</\".\n\n    jsxParseClosingElementAt(\n      startLoc: Position,\n    ): N.JSXClosingElement | N.JSXClosingFragment {\n      const node = this.startNodeAt<N.JSXClosingFragment | N.JSXClosingElement>(\n        startLoc,\n      );\n      if (this.eat(tt.jsxTagEnd)) {\n        return this.finishNode(node, \"JSXClosingFragment\");\n      }\n      node.name = this.jsxParseElementName();\n      this.expect(tt.jsxTagEnd);\n      return this.finishNode(node, \"JSXClosingElement\");\n    }\n\n    // Parses entire JSX element, including it\"s opening tag\n    // (starting after \"<\"), attributes, contents and closing tag.\n\n    jsxParseElementAt(startLoc: Position): N.JSXElement | N.JSXFragment {\n      const node = this.startNodeAt<N.JSXElement | N.JSXFragment>(startLoc);\n      const children = [];\n      const openingElement = this.jsxParseOpeningElementAt(startLoc);\n      let closingElement = null;\n\n      if (!openingElement.selfClosing) {\n        contents: for (;;) {\n          switch (this.state.type) {\n            case tt.jsxTagStart:\n              startLoc = this.state.startLoc;\n              this.next();\n              if (this.eat(tt.slash)) {\n                closingElement = this.jsxParseClosingElementAt(startLoc);\n                break contents;\n              }\n              children.push(this.jsxParseElementAt(startLoc));\n              break;\n\n            case tt.jsxText:\n              children.push(this.parseLiteral(this.state.value, \"JSXText\"));\n              break;\n\n            case tt.braceL: {\n              const node = this.startNode<\n                N.JSXSpreadChild | N.JSXExpressionContainer\n              >();\n              this.setContext(tc.brace);\n              this.next();\n              if (this.match(tt.ellipsis)) {\n                children.push(this.jsxParseSpreadChild(node));\n              } else {\n                children.push(\n                  this.jsxParseExpressionContainer(node, tc.j_expr),\n                );\n              }\n\n              break;\n            }\n            // istanbul ignore next - should never happen\n            default:\n              this.unexpected();\n          }\n        }\n\n        if (\n          isFragment(openingElement) &&\n          !isFragment(closingElement) &&\n          closingElement !== null\n        ) {\n          this.raise(JsxErrors.MissingClosingTagFragment, closingElement);\n        } else if (!isFragment(openingElement) && isFragment(closingElement)) {\n          this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n            openingTagName: getQualifiedJSXName(openingElement.name),\n          });\n        } else if (!isFragment(openingElement) && !isFragment(closingElement)) {\n          if (\n            getQualifiedJSXName(closingElement.name) !==\n            getQualifiedJSXName(openingElement.name)\n          ) {\n            this.raise(JsxErrors.MissingClosingTagElement, closingElement, {\n              openingTagName: getQualifiedJSXName(openingElement.name),\n            });\n          }\n        }\n      }\n\n      if (isFragment(openingElement)) {\n        node.openingFragment = openingElement;\n        node.closingFragment = closingElement;\n      } else {\n        node.openingElement = openingElement;\n        node.closingElement = closingElement;\n      }\n      node.children = children;\n      if (this.match(tt.lt)) {\n        throw this.raise(\n          JsxErrors.UnwrappedAdjacentJSXElements,\n          this.state.startLoc,\n        );\n      }\n\n      return isFragment(openingElement)\n        ? this.finishNode(node, \"JSXFragment\")\n        : this.finishNode(node, \"JSXElement\");\n    }\n\n    // Parses entire JSX element from current position.\n\n    jsxParseElement(): N.JSXElement | N.JSXFragment {\n      const startLoc = this.state.startLoc;\n      this.next();\n      return this.jsxParseElementAt(startLoc);\n    }\n\n    setContext(newContext: TokContext) {\n      const { context } = this.state;\n      context[context.length - 1] = newContext;\n    }\n\n    // ==================================\n    // Overrides\n    // ==================================\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      if (this.match(tt.jsxTagStart)) {\n        return this.jsxParseElement();\n      } else if (\n        this.match(tt.lt) &&\n        this.input.charCodeAt(this.state.pos) !== charCodes.exclamationMark\n      ) {\n        // In case we encounter an lt token here it will always be the start of\n        // jsx as the lt sign is not allowed in places that expect an expression\n        this.replaceToken(tt.jsxTagStart);\n        return this.jsxParseElement();\n      } else {\n        return super.parseExprAtom(refExpressionErrors);\n      }\n    }\n\n    skipSpace() {\n      const curContext = this.curContext();\n      if (!curContext.preserveSpace) super.skipSpace();\n    }\n\n    getTokenFromCode(code: number): void {\n      const context = this.curContext();\n\n      if (context === tc.j_expr) {\n        this.jsxReadToken();\n        return;\n      }\n\n      if (context === tc.j_oTag || context === tc.j_cTag) {\n        if (isIdentifierStart(code)) {\n          this.jsxReadWord();\n          return;\n        }\n\n        if (code === charCodes.greaterThan) {\n          ++this.state.pos;\n          this.finishToken(tt.jsxTagEnd);\n          return;\n        }\n\n        if (\n          (code === charCodes.quotationMark || code === charCodes.apostrophe) &&\n          context === tc.j_oTag\n        ) {\n          this.jsxReadString(code);\n          return;\n        }\n      }\n\n      if (\n        code === charCodes.lessThan &&\n        this.state.canStartJSXElement &&\n        this.input.charCodeAt(this.state.pos + 1) !== charCodes.exclamationMark\n      ) {\n        ++this.state.pos;\n        this.finishToken(tt.jsxTagStart);\n        return;\n      }\n\n      super.getTokenFromCode(code);\n    }\n\n    updateContext(prevType: TokenType): void {\n      const { context, type } = this.state;\n      if (type === tt.slash && prevType === tt.jsxTagStart) {\n        // do not consider JSX expr -> JSX open tag -> ... anymore\n        // reconsider as closing tag context\n        context.splice(-2, 2, tc.j_cTag);\n        this.state.canStartJSXElement = false;\n      } else if (type === tt.jsxTagStart) {\n        // start opening tag context\n        context.push(tc.j_oTag);\n      } else if (type === tt.jsxTagEnd) {\n        const out = context[context.length - 1];\n        if ((out === tc.j_oTag && prevType === tt.slash) || out === tc.j_cTag) {\n          context.pop();\n          this.state.canStartJSXElement =\n            context[context.length - 1] === tc.j_expr;\n        } else {\n          this.setContext(tc.j_expr);\n          this.state.canStartJSXElement = true;\n        }\n      } else {\n        this.state.canStartJSXElement = tokenComesBeforeExpression(type);\n      }\n    }\n  };\n","import type { Position } from \"../../util/location.ts\";\nimport ScopeHandler, { NameType, Scope } from \"../../util/scope.ts\";\nimport { BindingFlag, ScopeFlag } from \"../../util/scopeflags.ts\";\nimport type * as N from \"../../types.ts\";\nimport { Errors } from \"../../parse-error.ts\";\n\nconst enum TsNameType {\n  Types = 1 << 0,\n  // enums (which are also in .types)\n  Enums = 1 << 1,\n  // const enums (which are also in .enums and .types)\n  ConstEnums = 1 << 2,\n  // classes (which are also in .lexical) and interface (which are also in .types)\n  Classes = 1 << 3,\n  // namespaces and ambient functions (or classes) are too difficult to track,\n  // especially without type analysis.\n  // We need to track them anyway, to avoid \"X is not defined\" errors\n  // when exporting them.\n  ExportOnlyBindings = 1 << 4,\n}\n\nclass TypeScriptScope extends Scope {\n  tsNames: Map<string, TsNameType> = new Map();\n}\n\n// See https://github.com/babel/babel/pull/9766#discussion_r268920730 for an\n// explanation of how typescript handles scope.\n\nexport default class TypeScriptScopeHandler extends ScopeHandler<TypeScriptScope> {\n  importsStack: Set<string>[] = [];\n\n  createScope(flags: ScopeFlag): TypeScriptScope {\n    this.importsStack.push(new Set()); // Always keep the top-level scope for export checks.\n\n    return new TypeScriptScope(flags);\n  }\n\n  enter(flags: ScopeFlag): void {\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.push(new Set());\n    }\n\n    super.enter(flags);\n  }\n\n  exit() {\n    const flags = super.exit();\n\n    if (flags === ScopeFlag.TS_MODULE) {\n      this.importsStack.pop();\n    }\n\n    return flags;\n  }\n\n  hasImport(name: string, allowShadow?: boolean) {\n    const len = this.importsStack.length;\n    if (this.importsStack[len - 1].has(name)) {\n      return true;\n    }\n    if (!allowShadow && len > 1) {\n      for (let i = 0; i < len - 1; i++) {\n        if (this.importsStack[i].has(name)) return true;\n      }\n    }\n    return false;\n  }\n\n  declareName(name: string, bindingType: BindingFlag, loc: Position) {\n    if (bindingType & BindingFlag.FLAG_TS_IMPORT) {\n      if (this.hasImport(name, true)) {\n        this.parser.raise(Errors.VarRedeclaration, loc, {\n          identifierName: name,\n        });\n      }\n      this.importsStack[this.importsStack.length - 1].add(name);\n      return;\n    }\n\n    const scope = this.currentScope();\n    let type = scope.tsNames.get(name) || 0;\n\n    if (bindingType & BindingFlag.FLAG_TS_EXPORT_ONLY) {\n      this.maybeExportDefined(scope, name);\n      scope.tsNames.set(name, type | TsNameType.ExportOnlyBindings);\n      return;\n    }\n\n    super.declareName(name, bindingType, loc);\n\n    if (bindingType & BindingFlag.KIND_TYPE) {\n      if (!(bindingType & BindingFlag.KIND_VALUE)) {\n        // \"Value\" bindings have already been registered by the superclass.\n        this.checkRedeclarationInScope(scope, name, bindingType, loc);\n        this.maybeExportDefined(scope, name);\n      }\n      type = type | TsNameType.Types;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n      type = type | TsNameType.Enums;\n    }\n    if (bindingType & BindingFlag.FLAG_TS_CONST_ENUM) {\n      type = type | TsNameType.ConstEnums;\n    }\n    if (bindingType & BindingFlag.FLAG_CLASS) {\n      type = type | TsNameType.Classes;\n    }\n    if (type) scope.tsNames.set(name, type);\n  }\n\n  isRedeclaredInScope(\n    scope: TypeScriptScope,\n    name: string,\n    bindingType: BindingFlag,\n  ): boolean {\n    const type = scope.tsNames.get(name);\n    if ((type & TsNameType.Enums) > 0) {\n      if (bindingType & BindingFlag.FLAG_TS_ENUM) {\n        // Enums can be merged with other enums if they are both\n        //  const or both non-const.\n        const isConst = !!(bindingType & BindingFlag.FLAG_TS_CONST_ENUM);\n        const wasConst = (type & TsNameType.ConstEnums) > 0;\n        return isConst !== wasConst;\n      }\n      return true;\n    }\n    if (\n      bindingType & BindingFlag.FLAG_CLASS &&\n      (type & TsNameType.Classes) > 0\n    ) {\n      if (scope.names.get(name) & NameType.Lexical) {\n        // Classes can be merged with interfaces\n        return !!(bindingType & BindingFlag.KIND_VALUE);\n      } else {\n        // Interface can be merged with other classes or interfaces\n        return false;\n      }\n    }\n    if (bindingType & BindingFlag.KIND_TYPE && (type & TsNameType.Types) > 0) {\n      return true;\n    }\n\n    return super.isRedeclaredInScope(scope, name, bindingType);\n  }\n\n  checkLocalExport(id: N.Identifier) {\n    const { name } = id;\n\n    if (this.hasImport(name)) return;\n\n    const len = this.scopeStack.length;\n    for (let i = len - 1; i >= 0; i--) {\n      const scope = this.scopeStack[i];\n      const type = scope.tsNames.get(name);\n      if (\n        (type & TsNameType.Types) > 0 ||\n        (type & TsNameType.ExportOnlyBindings) > 0\n      ) {\n        return;\n      }\n    }\n\n    super.checkLocalExport(id);\n  }\n}\n","// ProductionParameterHandler is a stack fashioned production parameter tracker\n// https://tc39.es/ecma262/#sec-grammar-notation\n// The tracked parameters are defined above.\n//\n// Whenever [+Await]/[+Yield] appears in the right-hand sides of a production,\n// we must enter a new tracking stack. For example when parsing\n//\n// AsyncFunctionDeclaration [Yield, Await]:\n//   async [no LineTerminator here] function BindingIdentifier[?Yield, ?Await]\n//     ( FormalParameters[~Yield, +Await] ) { AsyncFunctionBody }\n//\n// we must follow such process:\n//\n// 1. parse async keyword\n// 2. parse function keyword\n// 3. parse bindingIdentifier <= inherit current parameters: [?Await]\n// 4. enter new stack with (PARAM_AWAIT)\n// 5. parse formal parameters <= must have [Await] parameter [+Await]\n// 6. parse function body\n// 7. exit current stack\n\nexport const enum ParamKind {\n  // Initial Parameter flags\n  PARAM = 0b0000,\n  // track [Yield] production parameter\n  PARAM_YIELD = 0b0001,\n  // track [Await] production parameter\n  PARAM_AWAIT = 0b0010,\n  // track [Return] production parameter\n  PARAM_RETURN = 0b0100,\n  // track [In] production parameter\n  PARAM_IN = 0b1000,\n}\n\n// todo(flow->ts) - check if more granular type can be used,\n//  type below is not good because things like PARAM_AWAIT|PARAM_YIELD are not included\n// export type ParamKind =\n//   | typeof PARAM\n//   | typeof PARAM_AWAIT\n//   | typeof PARAM_IN\n//   | typeof PARAM_RETURN\n//   | typeof PARAM_YIELD;\n\nexport default class ProductionParameterHandler {\n  stacks: Array<ParamKind> = [];\n  enter(flags: ParamKind) {\n    this.stacks.push(flags);\n  }\n\n  exit() {\n    this.stacks.pop();\n  }\n\n  currentFlags(): ParamKind {\n    return this.stacks[this.stacks.length - 1];\n  }\n\n  get hasAwait(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_AWAIT) > 0;\n  }\n\n  get hasYield(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_YIELD) > 0;\n  }\n\n  get hasReturn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_RETURN) > 0;\n  }\n\n  get hasIn(): boolean {\n    return (this.currentFlags() & ParamKind.PARAM_IN) > 0;\n  }\n}\n\nexport function functionFlags(\n  isAsync: boolean,\n  isGenerator: boolean,\n): ParamKind {\n  return (\n    (isAsync ? ParamKind.PARAM_AWAIT : 0) |\n    (isGenerator ? ParamKind.PARAM_YIELD : 0)\n  );\n}\n","import type { OptionFlags, Options } from \"../options.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type { PluginsMap } from \"./index.ts\";\nimport type ScopeHandler from \"../util/scope.ts\";\nimport type ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport type ClassScopeHandler from \"../util/class-scope.ts\";\nimport type ProductionParameterHandler from \"../util/production-parameter.ts\";\nimport type {\n  ParserPluginWithOptions,\n  PluginConfig,\n  PluginOptions,\n} from \"../typings.ts\";\nimport type * as N from \"../types.ts\";\n\nexport default class BaseParser {\n  // Properties set by constructor in index.js\n  declare options: Options;\n  declare optionFlags: OptionFlags;\n  declare inModule: boolean;\n  declare scope: ScopeHandler<any>;\n  declare classScope: ClassScopeHandler;\n  declare prodParam: ProductionParameterHandler;\n  declare expressionScope: ExpressionScopeHandler;\n  declare plugins: PluginsMap;\n  declare filename: string | undefined | null;\n  declare startIndex: number;\n  // Names of exports store. `default` is stored as a name for both\n  // `export default foo;` and `export { foo as default };`.\n  declare exportedIdentifiers: Set<string>;\n  sawUnambiguousESM: boolean = false;\n  ambiguousScriptDifferentAst: boolean = false;\n\n  // Initialized by Tokenizer\n  declare state: State;\n  // input and length are not in state as they are constant and we do\n  // not want to ever copy them, which happens if state gets cloned\n  declare input: string;\n  declare length: number;\n  // Comment store for Program.comments\n  declare comments: Array<N.Comment>;\n\n  sourceToOffsetPos(sourcePos: number) {\n    return sourcePos + this.startIndex;\n  }\n\n  offsetToSourcePos(offsetPos: number) {\n    return offsetPos - this.startIndex;\n  }\n\n  // This method accepts either a string (plugin name) or an array pair\n  // (plugin name and options object). If an options object is given,\n  // then each value is non-recursively checked for identity with that\n  // plugin’s actual option value.\n  hasPlugin(pluginConfig: PluginConfig): boolean {\n    if (typeof pluginConfig === \"string\") {\n      return this.plugins.has(pluginConfig);\n    } else {\n      const [pluginName, pluginOptions] = pluginConfig;\n      if (!this.hasPlugin(pluginName)) {\n        return false;\n      }\n      const actualOptions = this.plugins.get(pluginName);\n      for (const key of Object.keys(\n        pluginOptions,\n      ) as (keyof typeof pluginOptions)[]) {\n        if (actualOptions?.[key] !== pluginOptions[key]) {\n          return false;\n        }\n      }\n      return true;\n    }\n  }\n\n  getPluginOption<\n    PluginName extends ParserPluginWithOptions[0],\n    OptionName extends keyof PluginOptions<PluginName>,\n  >(plugin: PluginName, name: OptionName) {\n    return (this.plugins.get(plugin) as null | PluginOptions<PluginName>)?.[\n      name\n    ];\n  }\n}\n","/*:: declare var invariant; */\n\nimport BaseParser from \"./base.ts\";\nimport type { Comment, Node } from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { Undone } from \"./node.ts\";\n\n/**\n * A whitespace token containing comments\n */\nexport type CommentWhitespace = {\n  /**\n   * the start of the whitespace token.\n   */\n  start: number;\n  /**\n   * the end of the whitespace token.\n   */\n  end: number;\n  /**\n   * the containing comments\n   */\n  comments: Array<Comment>;\n  /**\n   * the immediately preceding AST node of the whitespace token\n   */\n  leadingNode: Node | null;\n  /**\n   * the immediately following AST node of the whitespace token\n   */\n  trailingNode: Node | null;\n  /**\n   * the innermost AST node containing the whitespace with minimal size (|end - start|)\n   */\n  containingNode: Node | null;\n};\n\n/**\n * Merge comments with node's trailingComments or assign comments to be\n * trailingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setTrailingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.trailingComments === undefined) {\n    node.trailingComments = comments;\n  } else {\n    node.trailingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's leadingComments or assign comments to be\n * leadingComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nfunction setLeadingComments(node: Undone<Node>, comments: Array<Comment>) {\n  if (node.leadingComments === undefined) {\n    node.leadingComments = comments;\n  } else {\n    node.leadingComments.unshift(...comments);\n  }\n}\n\n/**\n * Merge comments with node's innerComments or assign comments to be\n * innerComments. New comments will be placed before old comments\n * because the commentStack is enumerated reversely.\n */\nexport function setInnerComments(\n  node: Undone<Node>,\n  comments?: Array<Comment>,\n) {\n  if (node.innerComments === undefined) {\n    node.innerComments = comments;\n  } else {\n    node.innerComments.unshift(...comments);\n  }\n}\n\n/**\n * Given node and elements array, if elements has non-null element,\n * merge comments to its trailingComments, otherwise merge comments\n * to node's innerComments\n */\nfunction adjustInnerComments(\n  node: Undone<Node>,\n  elements: Array<Node>,\n  commentWS: CommentWhitespace,\n) {\n  let lastElement = null;\n  let i = elements.length;\n  while (lastElement === null && i > 0) {\n    lastElement = elements[--i];\n  }\n  if (lastElement === null || lastElement.start > commentWS.start) {\n    setInnerComments(node, commentWS.comments);\n  } else {\n    setTrailingComments(lastElement, commentWS.comments);\n  }\n}\n\nexport default class CommentsParser extends BaseParser {\n  addComment(comment: Comment): void {\n    if (this.filename) comment.loc.filename = this.filename;\n    const { commentsLen } = this.state;\n    if (this.comments.length !== commentsLen) {\n      this.comments.length = commentsLen;\n    }\n    this.comments.push(comment);\n    this.state.commentsLen++;\n  }\n\n  /**\n   * Given a newly created AST node _n_, attach _n_ to a comment whitespace _w_ if applicable\n   * {@see {@link CommentWhitespace}}\n   */\n  processComment(node: Node): void {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n    const lastCommentWS = commentStack[i];\n\n    if (lastCommentWS.start === node.end) {\n      lastCommentWS.leadingNode = node;\n      i--;\n    }\n\n    const { start: nodeStart } = node;\n    // invariant: for all 0 <= j <= i, let c = commentStack[j], c must satisfy c.end < node.end\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      if (commentEnd > nodeStart) {\n        // by definition of commentWhiteSpace, this implies commentWS.start > nodeStart\n        // so node can be a containingNode candidate. At this time we can finalize the comment\n        // whitespace, because\n        // 1) its leadingNode or trailingNode, if exists, will not change\n        // 2) its containingNode have been assigned and will not change because it is the\n        //    innermost minimal-sized AST node\n        commentWS.containingNode = node;\n        this.finalizeComment(commentWS);\n        commentStack.splice(i, 1);\n      } else {\n        if (commentEnd === nodeStart) {\n          commentWS.trailingNode = node;\n        }\n        // stop the loop when commentEnd <= nodeStart\n        break;\n      }\n    }\n  }\n\n  /**\n   * Assign the comments of comment whitespaces to related AST nodes.\n   * Also adjust innerComments following trailing comma.\n   */\n  finalizeComment(commentWS: CommentWhitespace) {\n    const { comments } = commentWS;\n    if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {\n      if (commentWS.leadingNode !== null) {\n        setTrailingComments(commentWS.leadingNode, comments);\n      }\n      if (commentWS.trailingNode !== null) {\n        setLeadingComments(commentWS.trailingNode, comments);\n      }\n    } else {\n      /*:: invariant(commentWS.containingNode !== null) */\n      const { containingNode: node, start: commentStart } = commentWS;\n      if (\n        this.input.charCodeAt(this.offsetToSourcePos(commentStart) - 1) ===\n        charCodes.comma\n      ) {\n        // If a commentWhitespace follows a comma and the containingNode allows\n        // list structures with trailing comma, merge it to the trailingComment\n        // of the last non-null list element\n        switch (node.type) {\n          case \"ObjectExpression\":\n          case \"ObjectPattern\":\n          case \"RecordExpression\":\n            adjustInnerComments(node, node.properties, commentWS);\n            break;\n          case \"CallExpression\":\n          case \"OptionalCallExpression\":\n            adjustInnerComments(node, node.arguments, commentWS);\n            break;\n          case \"ImportExpression\":\n            adjustInnerComments(\n              node,\n              [node.source, node.options ?? null],\n              commentWS,\n            );\n            break;\n          case \"FunctionDeclaration\":\n          case \"FunctionExpression\":\n          case \"ArrowFunctionExpression\":\n          case \"ObjectMethod\":\n          case \"ClassMethod\":\n          case \"ClassPrivateMethod\":\n            adjustInnerComments(node, node.params, commentWS);\n            break;\n          case \"ArrayExpression\":\n          case \"ArrayPattern\":\n          case \"TupleExpression\":\n            adjustInnerComments(node, node.elements, commentWS);\n            break;\n          case \"ExportNamedDeclaration\":\n          case \"ImportDeclaration\":\n            adjustInnerComments(node, node.specifiers, commentWS);\n            break;\n          case \"TSEnumDeclaration\":\n            if (!process.env.BABEL_8_BREAKING) {\n              adjustInnerComments(node, node.members, commentWS);\n            } else {\n              setInnerComments(node, comments);\n            }\n            break;\n          case \"TSEnumBody\":\n            adjustInnerComments(node, node.members, commentWS);\n            break;\n          default: {\n            setInnerComments(node, comments);\n          }\n        }\n      } else {\n        setInnerComments(node, comments);\n      }\n    }\n  }\n\n  /**\n   * Drains remaining commentStack and applies finalizeComment\n   * to each comment whitespace. Used only in parseExpression\n   * where the top level AST node is _not_ Program\n   * {@see {@link CommentsParser#finalizeComment}}\n   */\n  finalizeRemainingComments() {\n    const { commentStack } = this.state;\n    for (let i = commentStack.length - 1; i >= 0; i--) {\n      this.finalizeComment(commentStack[i]);\n    }\n    this.state.commentStack = [];\n  }\n\n  /* eslint-disable no-irregular-whitespace */\n  /**\n   * Reset previous node trailing comments. Used in object / class\n   * property parsing. We parse `async`, `static`, `set` and `get`\n   * as an identifier but may reinterpret it into an async/static/accessor\n   * method later. In this case the identifier is not part of the AST and we\n   * should sync the knowledge to commentStacks\n   *\n   * For example, when parsing\n   * ```\n   * async /* 1 *​/ function f() {}\n   * ```\n   * the comment whitespace `/* 1 *​/` has leading node Identifier(async). When\n   * we see the function token, we create a Function node and mark `/* 1 *​/` as\n   * inner comments. So `/* 1 *​/` should be detached from the Identifier node.\n   *\n   * @param node the last finished AST node _before_ current token\n   */\n  /* eslint-enable no-irregular-whitespace */\n  resetPreviousNodeTrailingComments(node: Node) {\n    const { commentStack } = this.state;\n    const { length } = commentStack;\n    if (length === 0) return;\n    const commentWS = commentStack[length - 1];\n    if (commentWS.leadingNode === node) {\n      commentWS.leadingNode = null;\n    }\n  }\n\n  /**\n   * Attach a node to the comment whitespaces right before/after\n   * the given range.\n   *\n   * This is used to properly attach comments around parenthesized\n   * expressions as leading/trailing comments of the inner expression.\n   */\n  takeSurroundingComments(node: Node, start: number, end: number) {\n    const { commentStack } = this.state;\n    const commentStackLength = commentStack.length;\n    if (commentStackLength === 0) return;\n    let i = commentStackLength - 1;\n\n    for (; i >= 0; i--) {\n      const commentWS = commentStack[i];\n      const commentEnd = commentWS.end;\n      const commentStart = commentWS.start;\n\n      if (commentStart === end) {\n        commentWS.leadingNode = node;\n      } else if (commentEnd === start) {\n        commentWS.trailingNode = node;\n      } else if (commentEnd < start) {\n        break;\n      }\n    }\n  }\n}\n","import type { Options } from \"../options.ts\";\nimport type { CommentWhitespace } from \"../parser/comments\";\nimport { Position } from \"../util/location.ts\";\n\nimport { types as ct, type TokContext } from \"./context.ts\";\nimport { tt, type TokenType } from \"./types.ts\";\nimport type { Errors } from \"../parse-error.ts\";\nimport type { ParseError } from \"../parse-error.ts\";\n\nexport type DeferredStrictError =\n  | typeof Errors.StrictNumericEscape\n  | typeof Errors.StrictOctalLiteral;\n\ntype TopicContextState = {\n  // When a topic binding has been currently established,\n  // then this is 1. Otherwise, it is 0. This is forwards compatible\n  // with a future plugin for multiple lexical topics.\n  maxNumOfResolvableTopics: number;\n  // When a topic binding has been currently established, and if that binding\n  // has been used as a topic reference `#`, then this is 0. Otherwise, it is\n  // `null`. This is forwards compatible with a future plugin for multiple\n  // lexical topics.\n  maxTopicIndex: null | 0;\n};\n\nexport const enum LoopLabelKind {\n  Loop = 1,\n  Switch = 2,\n}\n\ndeclare const bit: import(\"../../../../scripts/babel-plugin-bit-decorator/types.d.ts\").BitDecorator<State>;\n\nexport default class State {\n  @bit.storage flags: number;\n\n  @bit accessor strict = false;\n\n  startIndex: number;\n  curLine: number;\n  lineStart: number;\n\n  // And, if locations are used, the {line, column} object\n  // corresponding to those offsets\n  startLoc: Position;\n  endLoc: Position;\n\n  init({\n    strictMode,\n    sourceType,\n    startIndex,\n    startLine,\n    startColumn,\n  }: Options): void {\n    this.strict =\n      strictMode === false\n        ? false\n        : strictMode === true\n          ? true\n          : sourceType === \"module\";\n\n    this.startIndex = startIndex;\n    this.curLine = startLine;\n    this.lineStart = -startColumn;\n    this.startLoc = this.endLoc = new Position(\n      startLine,\n      startColumn,\n      startIndex,\n    );\n  }\n\n  errors: ParseError<any>[] = [];\n\n  // Used to signify the start of a potential arrow function\n  potentialArrowAt: number = -1;\n\n  // Used to signify the start of an expression which looks like a\n  // typed arrow function, but it isn't\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowAt: number[] = [];\n\n  // Used to signify the start of an expression whose params, if it looks like\n  // an arrow function, shouldn't be converted to assignable nodes.\n  // This is used to defer the validation of typed arrow functions inside\n  // conditional expressions.\n  // e.g. a ? (b) : c => d\n  //          ^\n  noArrowParamsConversionAt: number[] = [];\n\n  // Flags to track\n  @bit accessor maybeInArrowParameters = false;\n  @bit accessor inType = false;\n  @bit accessor noAnonFunctionType = false;\n  @bit accessor hasFlowComment = false;\n  @bit accessor isAmbientContext = false;\n  @bit accessor inAbstractClass = false;\n  @bit accessor inDisallowConditionalTypesContext = false;\n\n  // For the Hack-style pipelines plugin\n  topicContext: TopicContextState = {\n    maxNumOfResolvableTopics: 0,\n    maxTopicIndex: null,\n  };\n\n  // For the F#-style pipelines plugin\n  @bit accessor soloAwait = false;\n  @bit accessor inFSharpPipelineDirectBody = false;\n\n  // Labels in scope.\n  labels: Array<{\n    kind: LoopLabelKind;\n    name?: string | null;\n    statementStart?: number;\n  }> = [];\n\n  commentsLen = 0;\n  // Comment attachment store\n  commentStack: Array<CommentWhitespace> = [];\n\n  // The current position of the tokenizer in the input.\n  pos: number = 0;\n\n  // Properties of the current token:\n  // Its type\n  type: TokenType = tt.eof;\n\n  // For tokens that include more information than their type, the value\n  value: any = null;\n\n  // Its start and end offset\n  start: number = 0;\n  end: number = 0;\n\n  // Position information for the previous token\n  // this is initialized when generating the second token.\n  lastTokEndLoc: Position = null;\n  // this is initialized when generating the second token.\n  lastTokStartLoc: Position = null;\n\n  // The context stack is used to track whether the apostrophe \"`\" starts\n  // or ends a string template\n  context: Array<TokContext> = [ct.brace];\n\n  // Used to track whether a JSX element is allowed to form\n  @bit accessor canStartJSXElement = true;\n\n  // Used to signal to callers of `readWord1` whether the word\n  // contained any escape sequences. This is needed because words with\n  // escape sequences must not be interpreted as keywords.\n  @bit accessor containsEsc = false;\n\n  // Used to track invalid escape sequences in template literals,\n  // that must be reported if the template is not tagged.\n  firstInvalidTemplateEscapePos: null | Position = null;\n\n  @bit accessor hasTopLevelAwait = false;\n\n  // This property is used to track the following errors\n  // - StrictNumericEscape\n  // - StrictOctalLiteral\n  //\n  // in a literal that occurs prior to/immediately after a \"use strict\" directive.\n\n  // todo(JLHwung): set strictErrors to null and avoid recording string errors\n  // after a non-directive is parsed\n  strictErrors: Map<number, [DeferredStrictError, Position]> = new Map();\n\n  // Tokens length in token store\n  tokensLength: number = 0;\n\n  /**\n   * When we add a new property, we must manually update the `clone` method\n   * @see State#clone\n   */\n\n  curPosition(): Position {\n    return new Position(\n      this.curLine,\n      this.pos - this.lineStart,\n      this.pos + this.startIndex,\n    );\n  }\n\n  clone(): State {\n    const state = new State();\n    state.flags = this.flags;\n    state.startIndex = this.startIndex;\n    state.curLine = this.curLine;\n    state.lineStart = this.lineStart;\n    state.startLoc = this.startLoc;\n    state.endLoc = this.endLoc;\n    state.errors = this.errors.slice();\n    state.potentialArrowAt = this.potentialArrowAt;\n    state.noArrowAt = this.noArrowAt.slice();\n    state.noArrowParamsConversionAt = this.noArrowParamsConversionAt.slice();\n    state.topicContext = this.topicContext;\n    state.labels = this.labels.slice();\n    state.commentsLen = this.commentsLen;\n    state.commentStack = this.commentStack.slice();\n    state.pos = this.pos;\n    state.type = this.type;\n    state.value = this.value;\n    state.start = this.start;\n    state.end = this.end;\n    state.lastTokEndLoc = this.lastTokEndLoc;\n    state.lastTokStartLoc = this.lastTokStartLoc;\n    state.context = this.context.slice();\n    state.firstInvalidTemplateEscapePos = this.firstInvalidTemplateEscapePos;\n    state.strictErrors = this.strictErrors;\n    state.tokensLength = this.tokensLength;\n\n    return state;\n  }\n}\n\nexport type LookaheadState = {\n  pos: number;\n  value: any;\n  type: TokenType;\n  start: number;\n  end: number;\n  context: TokContext[];\n  startLoc: Position;\n  lastTokEndLoc: Position;\n  curLine: number;\n  lineStart: number;\n  curPosition: State[\"curPosition\"];\n  /* Used only in readToken_mult_modulo */\n  inType: boolean;\n  // These boolean properties are not initialized in createLookaheadState()\n  // instead they will only be set by the tokenizer\n  containsEsc?: boolean;\n};\n","// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// The following character codes are forbidden from being\n// an immediate sibling of NumericLiteralSeparator _\nconst forbiddenNumericSeparatorSiblings = {\n  decBinOct: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseB,\n    charCodes.uppercaseE,\n    charCodes.uppercaseO,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseB,\n    charCodes.lowercaseE,\n    charCodes.lowercaseO,\n  ]),\n  hex: new Set<number>([\n    charCodes.dot,\n    charCodes.uppercaseX,\n    charCodes.underscore, // multiple separators are not allowed\n    charCodes.lowercaseX,\n  ]),\n};\n\nconst isAllowedNumericSeparatorSibling = {\n  // 0 - 1\n  bin: (ch: number) => ch === charCodes.digit0 || ch === charCodes.digit1,\n\n  // 0 - 7\n  oct: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit7,\n\n  // 0 - 9\n  dec: (ch: number) => ch >= charCodes.digit0 && ch <= charCodes.digit9,\n\n  // 0 - 9, A - F, a - f,\n  hex: (ch: number) =>\n    (ch >= charCodes.digit0 && ch <= charCodes.digit9) ||\n    (ch >= charCodes.uppercaseA && ch <= charCodes.uppercaseF) ||\n    (ch >= charCodes.lowercaseA && ch <= charCodes.lowercaseF),\n};\n\nexport type StringContentsErrorHandlers = EscapedCharErrorHandlers & {\n  unterminated(\n    initialPos: number,\n    initialLineStart: number,\n    initialCurLine: number,\n  ): void;\n};\n\nexport function readStringContents(\n  type: \"single\" | \"double\" | \"template\",\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  errors: StringContentsErrorHandlers,\n) {\n  const initialPos = pos;\n  const initialLineStart = lineStart;\n  const initialCurLine = curLine;\n\n  let out = \"\";\n  let firstInvalidLoc = null;\n  let chunkStart = pos;\n  const { length } = input;\n  for (;;) {\n    if (pos >= length) {\n      errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    const ch = input.charCodeAt(pos);\n    if (isStringEnd(type, ch, input, pos)) {\n      out += input.slice(chunkStart, pos);\n      break;\n    }\n    if (ch === charCodes.backslash) {\n      out += input.slice(chunkStart, pos);\n      const res = readEscapedChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        type === \"template\",\n        errors,\n      );\n      if (res.ch === null && !firstInvalidLoc) {\n        firstInvalidLoc = { pos, lineStart, curLine };\n      } else {\n        out += res.ch;\n      }\n      ({ pos, lineStart, curLine } = res);\n      chunkStart = pos;\n    } else if (\n      ch === charCodes.lineSeparator ||\n      ch === charCodes.paragraphSeparator\n    ) {\n      ++pos;\n      ++curLine;\n      lineStart = pos;\n    } else if (ch === charCodes.lineFeed || ch === charCodes.carriageReturn) {\n      if (type === \"template\") {\n        out += input.slice(chunkStart, pos) + \"\\n\";\n        ++pos;\n        if (\n          ch === charCodes.carriageReturn &&\n          input.charCodeAt(pos) === charCodes.lineFeed\n        ) {\n          ++pos;\n        }\n        ++curLine;\n        chunkStart = lineStart = pos;\n      } else {\n        errors.unterminated(initialPos, initialLineStart, initialCurLine);\n      }\n    } else {\n      ++pos;\n    }\n  }\n  return process.env.BABEL_8_BREAKING\n    ? { pos, str: out, firstInvalidLoc, lineStart, curLine }\n    : {\n        pos,\n        str: out,\n        firstInvalidLoc,\n        lineStart,\n        curLine,\n        containsInvalid: !!firstInvalidLoc,\n      };\n}\n\nfunction isStringEnd(\n  type: \"single\" | \"double\" | \"template\",\n  ch: number,\n  input: string,\n  pos: number,\n) {\n  if (type === \"template\") {\n    return (\n      ch === charCodes.graveAccent ||\n      (ch === charCodes.dollarSign &&\n        input.charCodeAt(pos + 1) === charCodes.leftCurlyBrace)\n    );\n  }\n  return (\n    ch === (type === \"double\" ? charCodes.quotationMark : charCodes.apostrophe)\n  );\n}\n\ntype EscapedCharErrorHandlers = HexCharErrorHandlers &\n  CodePointErrorHandlers & {\n    strictNumericEscape(pos: number, lineStart: number, curLine: number): void;\n  };\n\nfunction readEscapedChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  inTemplate: boolean,\n  errors: EscapedCharErrorHandlers,\n) {\n  const throwOnInvalid = !inTemplate;\n  pos++; // skip '\\'\n\n  const res = (ch: string | null) => ({ pos, ch, lineStart, curLine });\n\n  const ch = input.charCodeAt(pos++);\n  switch (ch) {\n    case charCodes.lowercaseN:\n      return res(\"\\n\");\n    case charCodes.lowercaseR:\n      return res(\"\\r\");\n    case charCodes.lowercaseX: {\n      let code;\n      ({ code, pos } = readHexChar(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        2,\n        false,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCharCode(code));\n    }\n    case charCodes.lowercaseU: {\n      let code;\n      ({ code, pos } = readCodePoint(\n        input,\n        pos,\n        lineStart,\n        curLine,\n        throwOnInvalid,\n        errors,\n      ));\n      return res(code === null ? null : String.fromCodePoint(code));\n    }\n    case charCodes.lowercaseT:\n      return res(\"\\t\");\n    case charCodes.lowercaseB:\n      return res(\"\\b\");\n    case charCodes.lowercaseV:\n      return res(\"\\u000b\");\n    case charCodes.lowercaseF:\n      return res(\"\\f\");\n    case charCodes.carriageReturn:\n      if (input.charCodeAt(pos) === charCodes.lineFeed) {\n        ++pos;\n      }\n    // fall through\n    case charCodes.lineFeed:\n      lineStart = pos;\n      ++curLine;\n    // fall through\n    case charCodes.lineSeparator:\n    case charCodes.paragraphSeparator:\n      return res(\"\");\n    case charCodes.digit8:\n    case charCodes.digit9:\n      if (inTemplate) {\n        return res(null);\n      } else {\n        errors.strictNumericEscape(pos - 1, lineStart, curLine);\n      }\n    // fall through\n    default:\n      if (ch >= charCodes.digit0 && ch <= charCodes.digit7) {\n        const startPos = pos - 1;\n        const match = /^[0-7]+/.exec(input.slice(startPos, pos + 2));\n\n        let octalStr = match[0];\n\n        let octal = parseInt(octalStr, 8);\n        if (octal > 255) {\n          octalStr = octalStr.slice(0, -1);\n          octal = parseInt(octalStr, 8);\n        }\n        pos += octalStr.length - 1;\n        const next = input.charCodeAt(pos);\n        if (\n          octalStr !== \"0\" ||\n          next === charCodes.digit8 ||\n          next === charCodes.digit9\n        ) {\n          if (inTemplate) {\n            return res(null);\n          } else {\n            errors.strictNumericEscape(startPos, lineStart, curLine);\n          }\n        }\n\n        return res(String.fromCharCode(octal));\n      }\n\n      return res(String.fromCharCode(ch));\n  }\n}\n\ntype HexCharErrorHandlers = IntErrorHandlers & {\n  invalidEscapeSequence(pos: number, lineStart: number, curLine: number): void;\n};\n\n// Used to read character escape sequences ('\\x', '\\u').\nfunction readHexChar(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  len: number,\n  forceLen: boolean,\n  throwOnInvalid: boolean,\n  errors: HexCharErrorHandlers,\n) {\n  const initialPos = pos;\n  let n;\n  ({ n, pos } = readInt(\n    input,\n    pos,\n    lineStart,\n    curLine,\n    16,\n    len,\n    forceLen,\n    false,\n    errors,\n    /* bailOnError */ !throwOnInvalid,\n  ));\n  if (n === null) {\n    if (throwOnInvalid) {\n      errors.invalidEscapeSequence(initialPos, lineStart, curLine);\n    } else {\n      pos = initialPos - 1;\n    }\n  }\n  return { code: n, pos };\n}\n\nexport type IntErrorHandlers = {\n  numericSeparatorInEscapeSequence(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  unexpectedNumericSeparator(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n  ): void;\n  // It can return \"true\" to indicate that the error was handled\n  // and the int parsing should continue.\n  invalidDigit(\n    pos: number,\n    lineStart: number,\n    curLine: number,\n    radix: number,\n  ): boolean;\n};\n\nexport function readInt(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  radix: number,\n  len: number | undefined,\n  forceLen: boolean,\n  allowNumSeparator: boolean | \"bail\",\n  errors: IntErrorHandlers,\n  bailOnError: boolean,\n) {\n  const start = pos;\n  const forbiddenSiblings =\n    radix === 16\n      ? forbiddenNumericSeparatorSiblings.hex\n      : forbiddenNumericSeparatorSiblings.decBinOct;\n  const isAllowedSibling =\n    radix === 16\n      ? isAllowedNumericSeparatorSibling.hex\n      : radix === 10\n        ? isAllowedNumericSeparatorSibling.dec\n        : radix === 8\n          ? isAllowedNumericSeparatorSibling.oct\n          : isAllowedNumericSeparatorSibling.bin;\n\n  let invalid = false;\n  let total = 0;\n\n  for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n    const code = input.charCodeAt(pos);\n    let val;\n\n    if (code === charCodes.underscore && allowNumSeparator !== \"bail\") {\n      const prev = input.charCodeAt(pos - 1);\n      const next = input.charCodeAt(pos + 1);\n\n      if (!allowNumSeparator) {\n        if (bailOnError) return { n: null, pos };\n        errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);\n      } else if (\n        Number.isNaN(next) ||\n        !isAllowedSibling(next) ||\n        forbiddenSiblings.has(prev) ||\n        forbiddenSiblings.has(next)\n      ) {\n        if (bailOnError) return { n: null, pos };\n        errors.unexpectedNumericSeparator(pos, lineStart, curLine);\n      }\n\n      // Ignore this _ character\n      ++pos;\n      continue;\n    }\n\n    if (code >= charCodes.lowercaseA) {\n      val = code - charCodes.lowercaseA + charCodes.lineFeed;\n    } else if (code >= charCodes.uppercaseA) {\n      val = code - charCodes.uppercaseA + charCodes.lineFeed;\n    } else if (charCodes.isDigit(code)) {\n      val = code - charCodes.digit0; // 0-9\n    } else {\n      val = Infinity;\n    }\n    if (val >= radix) {\n      // If we found a digit which is too big, errors.invalidDigit can return true to avoid\n      // breaking the loop (this is used for error recovery).\n      if (val <= 9 && bailOnError) {\n        return { n: null, pos };\n      } else if (\n        val <= 9 &&\n        errors.invalidDigit(pos, lineStart, curLine, radix)\n      ) {\n        val = 0;\n      } else if (forceLen) {\n        val = 0;\n        invalid = true;\n      } else {\n        break;\n      }\n    }\n    ++pos;\n    total = total * radix + val;\n  }\n  if (pos === start || (len != null && pos - start !== len) || invalid) {\n    return { n: null, pos };\n  }\n\n  return { n: total, pos };\n}\n\nexport type CodePointErrorHandlers = HexCharErrorHandlers & {\n  invalidCodePoint(pos: number, lineStart: number, curLine: number): void;\n};\n\nexport function readCodePoint(\n  input: string,\n  pos: number,\n  lineStart: number,\n  curLine: number,\n  throwOnInvalid: boolean,\n  errors: CodePointErrorHandlers,\n) {\n  const ch = input.charCodeAt(pos);\n  let code;\n\n  if (ch === charCodes.leftCurlyBrace) {\n    ++pos;\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      input.indexOf(\"}\", pos) - pos,\n      true,\n      throwOnInvalid,\n      errors,\n    ));\n    ++pos;\n    if (code !== null && code > 0x10ffff) {\n      if (throwOnInvalid) {\n        errors.invalidCodePoint(pos, lineStart, curLine);\n      } else {\n        return { code: null, pos };\n      }\n    }\n  } else {\n    ({ code, pos } = readHexChar(\n      input,\n      pos,\n      lineStart,\n      curLine,\n      4,\n      false,\n      throwOnInvalid,\n      errors,\n    ));\n  }\n  return { code, pos };\n}\n","/*:: declare var invariant; */\n\nimport { OptionFlags, type Options } from \"../options.ts\";\nimport {\n  Position,\n  SourceLocation,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport CommentsParser, { type CommentWhitespace } from \"../parser/comments.ts\";\nimport type * as N from \"../types.ts\";\nimport * as charCodes from \"charcodes\";\nimport { isIdentifierStart, isIdentifierChar } from \"../util/identifier.ts\";\nimport {\n  tokenIsKeyword,\n  tokenLabelName,\n  tt,\n  keywords as keywordTypes,\n  type TokenType,\n} from \"./types.ts\";\nimport type { TokContext } from \"./context.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport {\n  lineBreakG,\n  isNewLine,\n  isWhitespace,\n  skipWhiteSpace,\n  skipWhiteSpaceInLine,\n} from \"../util/whitespace.ts\";\nimport State from \"./state.ts\";\nimport type { LookaheadState, DeferredStrictError } from \"./state.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { Node } from \"../types.ts\";\n\nimport {\n  readInt,\n  readCodePoint,\n  readStringContents,\n  type IntErrorHandlers,\n  type CodePointErrorHandlers,\n  type StringContentsErrorHandlers,\n} from \"@babel/helper-string-parser\";\n\nimport type { Plugin } from \"../typings.ts\";\n\nfunction buildPosition(pos: number, lineStart: number, curLine: number) {\n  return new Position(curLine, pos - lineStart, pos);\n}\n\nconst VALID_REGEX_FLAGS = new Set([\n  charCodes.lowercaseG,\n  charCodes.lowercaseM,\n  charCodes.lowercaseS,\n  charCodes.lowercaseI,\n  charCodes.lowercaseY,\n  charCodes.lowercaseU,\n  charCodes.lowercaseD,\n  charCodes.lowercaseV,\n]);\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nexport class Token {\n  constructor(state: State) {\n    const startIndex = state.startIndex || 0;\n    this.type = state.type;\n    this.value = state.value;\n    this.start = startIndex + state.start;\n    this.end = startIndex + state.end;\n    this.loc = new SourceLocation(state.startLoc, state.endLoc);\n  }\n\n  declare type: TokenType;\n  declare value: any;\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n}\n\n// ## Tokenizer\n\nexport default abstract class Tokenizer extends CommentsParser {\n  isLookahead: boolean;\n\n  // Token store.\n  tokens: Array<Token | N.Comment> = [];\n\n  constructor(options: Options, input: string) {\n    super();\n    this.state = new State();\n    this.state.init(options);\n    this.input = input;\n    this.length = input.length;\n    this.comments = [];\n    this.isLookahead = false;\n  }\n\n  pushToken(token: Token | N.Comment) {\n    // Pop out invalid tokens trapped by try-catch parsing.\n    // Those parsing branches are mainly created by typescript and flow plugins.\n    this.tokens.length = this.state.tokensLength;\n    this.tokens.push(token);\n    ++this.state.tokensLength;\n  }\n\n  // Move to the next token\n\n  next(): void {\n    this.checkKeywordEscapes();\n    if (this.optionFlags & OptionFlags.Tokens) {\n      this.pushToken(new Token(this.state));\n    }\n\n    this.state.lastTokEndLoc = this.state.endLoc;\n    this.state.lastTokStartLoc = this.state.startLoc;\n    this.nextToken();\n  }\n\n  eat(type: TokenType): boolean {\n    if (this.match(type)) {\n      this.next();\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * Whether current token matches given type\n   */\n  match(type: TokenType): boolean {\n    return this.state.type === type;\n  }\n\n  /**\n   * Create a LookaheadState from current parser state\n   */\n  createLookaheadState(state: State): LookaheadState {\n    return {\n      pos: state.pos,\n      value: null,\n      type: state.type,\n      start: state.start,\n      end: state.end,\n      context: [this.curContext()],\n      inType: state.inType,\n      startLoc: state.startLoc,\n      lastTokEndLoc: state.lastTokEndLoc,\n      curLine: state.curLine,\n      lineStart: state.lineStart,\n      curPosition: state.curPosition,\n    };\n  }\n\n  /**\n   * lookahead peeks the next token, skipping changes to token context and\n   * comment stack. For performance it returns a limited LookaheadState\n   * instead of full parser state.\n   *\n   * The { column, line } Loc info is not included in lookahead since such usage\n   * is rare. Although it may return other location properties e.g. `curLine` and\n   * `lineStart`, these properties are not listed in the LookaheadState interface\n   * and thus the returned value is _NOT_ reliable.\n   *\n   * The tokenizer should make best efforts to avoid using any parser state\n   * other than those defined in LookaheadState\n   */\n  lookahead(): LookaheadState {\n    const old = this.state;\n    // @ts-expect-error For performance we use a simplified tokenizer state structure\n    this.state = this.createLookaheadState(old);\n\n    this.isLookahead = true;\n    this.nextToken();\n    this.isLookahead = false;\n\n    const curr = this.state;\n    this.state = old;\n    return curr;\n  }\n\n  nextTokenStart(): number {\n    return this.nextTokenStartSince(this.state.pos);\n  }\n\n  nextTokenStartSince(pos: number): number {\n    skipWhiteSpace.lastIndex = pos;\n    return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;\n  }\n\n  lookaheadCharCode(): number {\n    return this.lookaheadCharCodeSince(this.state.pos);\n  }\n\n  lookaheadCharCodeSince(pos: number): number {\n    return this.input.charCodeAt(this.nextTokenStartSince(pos));\n  }\n\n  /**\n   * Similar to nextToken, but it will stop at line break when it is seen before the next token\n   *\n   * @returns {number} position of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  nextTokenInLineStart(): number {\n    return this.nextTokenInLineStartSince(this.state.pos);\n  }\n\n  nextTokenInLineStartSince(pos: number): number {\n    skipWhiteSpaceInLine.lastIndex = pos;\n    return skipWhiteSpaceInLine.test(this.input)\n      ? skipWhiteSpaceInLine.lastIndex\n      : pos;\n  }\n\n  /**\n   * Similar to lookaheadCharCode, but it will return the char code of line break if it is\n   * seen before the next token\n   *\n   * @returns {number} char code of the next token start or line break, whichever is seen first.\n   * @memberof Tokenizer\n   */\n  lookaheadInLineCharCode(): number {\n    return this.input.charCodeAt(this.nextTokenInLineStart());\n  }\n\n  codePointAtPos(pos: number): number {\n    // The implementation is based on\n    // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n    // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n    // since `input` is mostly ASCII, an inlined `charCodeAt` wins here\n    let cp = this.input.charCodeAt(pos);\n    if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {\n      const trail = this.input.charCodeAt(pos);\n      if ((trail & 0xfc00) === 0xdc00) {\n        cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n      }\n    }\n    return cp;\n  }\n\n  // Toggle strict mode. Re-reads the next number or string to please\n  // pedantic tests (`\"use strict\"; 010;` should fail).\n\n  setStrict(strict: boolean): void {\n    this.state.strict = strict;\n    if (strict) {\n      // Throw an error for any string decimal escape found before/immediately\n      // after a \"use strict\" directive. Strict mode will be set at parse\n      // time for any literals that occur after the next node of the strict\n      // directive.\n      this.state.strictErrors.forEach(([toParseError, at]) =>\n        this.raise(toParseError, at),\n      );\n      this.state.strictErrors.clear();\n    }\n  }\n\n  curContext(): TokContext {\n    return this.state.context[this.state.context.length - 1];\n  }\n\n  // Read a single token, updating the parser object's token-related properties.\n  nextToken(): void {\n    this.skipSpace();\n    this.state.start = this.state.pos;\n    if (!this.isLookahead) this.state.startLoc = this.state.curPosition();\n    if (this.state.pos >= this.length) {\n      this.finishToken(tt.eof);\n      return;\n    }\n\n    this.getTokenFromCode(this.codePointAtPos(this.state.pos));\n  }\n\n  // Skips a block comment, whose end is marked by commentEnd.\n  // *-/ is used by the Flow plugin, when parsing block comments nested\n  // inside Flow comments.\n  skipBlockComment(commentEnd: \"*/\" | \"*-/\"): N.CommentBlock | undefined {\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    const start = this.state.pos;\n    const end = this.input.indexOf(commentEnd, start + 2);\n    if (end === -1) {\n      // We have to call this again here because startLoc may not be set...\n      // This seems to be for performance reasons:\n      // https://github.com/babel/babel/commit/acf2a10899f696a8aaf34df78bf9725b5ea7f2da\n      throw this.raise(Errors.UnterminatedComment, this.state.curPosition());\n    }\n\n    this.state.pos = end + commentEnd.length;\n    lineBreakG.lastIndex = start + 2;\n    while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {\n      ++this.state.curLine;\n      this.state.lineStart = lineBreakG.lastIndex;\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n    /*:: invariant(startLoc) */\n\n    const comment: N.CommentBlock = {\n      type: \"CommentBlock\",\n      value: this.input.slice(start + 2, end),\n      start: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end + commentEnd.length),\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.Tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  skipLineComment(startSkip: number): N.CommentLine | undefined {\n    const start = this.state.pos;\n    let startLoc;\n    if (!this.isLookahead) startLoc = this.state.curPosition();\n    let ch = this.input.charCodeAt((this.state.pos += startSkip));\n    if (this.state.pos < this.length) {\n      while (!isNewLine(ch) && ++this.state.pos < this.length) {\n        ch = this.input.charCodeAt(this.state.pos);\n      }\n    }\n\n    // If we are doing a lookahead right now we need to advance the position (above code)\n    // but we do not want to push the comment to the state.\n    if (this.isLookahead) return;\n\n    const end = this.state.pos;\n    const value = this.input.slice(start + startSkip, end);\n\n    const comment: N.CommentLine = {\n      type: \"CommentLine\",\n      value,\n      start: this.sourceToOffsetPos(start),\n      end: this.sourceToOffsetPos(end),\n      loc: new SourceLocation(startLoc, this.state.curPosition()),\n    };\n    if (this.optionFlags & OptionFlags.Tokens) this.pushToken(comment);\n    return comment;\n  }\n\n  // Called at the start of the parse and after every token. Skips\n  // whitespace and comments, and.\n\n  skipSpace(): void {\n    const spaceStart = this.state.pos;\n    const comments: N.Comment[] =\n      this.optionFlags & OptionFlags.AttachComment ? [] : null;\n    loop: while (this.state.pos < this.length) {\n      const ch = this.input.charCodeAt(this.state.pos);\n      switch (ch) {\n        case charCodes.space:\n        case charCodes.nonBreakingSpace:\n        case charCodes.tab:\n          ++this.state.pos;\n          break;\n        case charCodes.carriageReturn:\n          if (\n            this.input.charCodeAt(this.state.pos + 1) === charCodes.lineFeed\n          ) {\n            ++this.state.pos;\n          }\n        // fall through\n        case charCodes.lineFeed:\n        case charCodes.lineSeparator:\n        case charCodes.paragraphSeparator:\n          ++this.state.pos;\n          ++this.state.curLine;\n          this.state.lineStart = this.state.pos;\n          break;\n\n        case charCodes.slash:\n          switch (this.input.charCodeAt(this.state.pos + 1)) {\n            case charCodes.asterisk: {\n              const comment = this.skipBlockComment(\"*/\");\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n              break;\n            }\n\n            case charCodes.slash: {\n              const comment = this.skipLineComment(2);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n              break;\n            }\n\n            default:\n              break loop;\n          }\n          break;\n\n        default:\n          if (isWhitespace(ch)) {\n            ++this.state.pos;\n          } else if (\n            ch === charCodes.dash &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.AnnexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.dash &&\n              this.input.charCodeAt(pos + 2) === charCodes.greaterThan &&\n              (spaceStart === 0 || this.state.lineStart > spaceStart)\n            ) {\n              // A `-->` line comment\n              const comment = this.skipLineComment(3);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else if (\n            ch === charCodes.lessThan &&\n            !this.inModule &&\n            this.optionFlags & OptionFlags.AnnexB\n          ) {\n            const pos = this.state.pos;\n            if (\n              this.input.charCodeAt(pos + 1) === charCodes.exclamationMark &&\n              this.input.charCodeAt(pos + 2) === charCodes.dash &&\n              this.input.charCodeAt(pos + 3) === charCodes.dash\n            ) {\n              // `<!--`, an XML-style comment that should be interpreted as a line comment\n              const comment = this.skipLineComment(4);\n              if (comment !== undefined) {\n                this.addComment(comment);\n                comments?.push(comment);\n              }\n            } else {\n              break loop;\n            }\n          } else {\n            break loop;\n          }\n      }\n    }\n\n    if (comments?.length > 0) {\n      const end = this.state.pos;\n      const commentWhitespace: CommentWhitespace = {\n        start: this.sourceToOffsetPos(spaceStart),\n        end: this.sourceToOffsetPos(end),\n        comments,\n        leadingNode: null,\n        trailingNode: null,\n        containingNode: null,\n      };\n      this.state.commentStack.push(commentWhitespace);\n    }\n  }\n\n  // Called at the end of every token. Sets `end`, `val`, and\n  // maintains `context` and `canStartJSXElement`, and skips the space after\n  // the token, so that the next one's `start` will point at the\n  // right position.\n\n  finishToken(type: TokenType, val?: any): void {\n    this.state.end = this.state.pos;\n    this.state.endLoc = this.state.curPosition();\n    const prevType = this.state.type;\n    this.state.type = type;\n    this.state.value = val;\n\n    if (!this.isLookahead) {\n      this.updateContext(prevType);\n    }\n  }\n\n  replaceToken(type: TokenType): void {\n    this.state.type = type;\n    // @ts-expect-error the prevType of updateContext is required\n    // only when the new type is tt.slash/tt.jsxTagEnd\n    this.updateContext();\n  }\n\n  // ### Token reading\n\n  // This is the function that is called to fetch the next token. It\n  // is somewhat obscure, because it works in character codes rather\n  // than characters, and because operator parsing has been inlined\n  // into it.\n  //\n  // All in the name of speed.\n\n  // number sign is \"#\"\n  readToken_numberSign(): void {\n    if (this.state.pos === 0 && this.readToken_interpreter()) {\n      return;\n    }\n\n    const nextPos = this.state.pos + 1;\n    const next = this.codePointAtPos(nextPos);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      throw this.raise(\n        Errors.UnexpectedDigitAfterHash,\n        this.state.curPosition(),\n      );\n    }\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      (next === charCodes.leftCurlyBrace ||\n        (next === charCodes.leftSquareBracket &&\n          this.hasPlugin(\"recordAndTuple\")))\n    ) {\n      // When we see `#{`, it is likely to be a hash record.\n      // However we don't yell at `#[` since users may intend to use \"computed private fields\",\n      // which is not allowed in the spec. Throwing expecting recordAndTuple is\n      // misleading\n      this.expectPlugin(\"recordAndTuple\");\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.getPluginOption(\"recordAndTuple\", \"syntaxType\") === \"bar\"\n      ) {\n        throw this.raise(\n          next === charCodes.leftCurlyBrace\n            ? Errors.RecordExpressionHashIncorrectStartSyntaxType\n            : Errors.TupleExpressionHashIncorrectStartSyntaxType,\n          this.state.curPosition(),\n        );\n      }\n\n      this.state.pos += 2;\n      if (next === charCodes.leftCurlyBrace) {\n        // #{\n        this.finishToken(tt.braceHashL);\n      } else {\n        // #[\n        this.finishToken(tt.bracketHashL);\n      }\n    } else if (isIdentifierStart(next)) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1(next));\n    } else if (next === charCodes.backslash) {\n      ++this.state.pos;\n      this.finishToken(tt.privateName, this.readWord1());\n    } else {\n      this.finishOp(tt.hash, 1);\n    }\n  }\n\n  readToken_dot(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next >= charCodes.digit0 && next <= charCodes.digit9) {\n      this.readNumber(true);\n      return;\n    }\n\n    if (\n      next === charCodes.dot &&\n      this.input.charCodeAt(this.state.pos + 2) === charCodes.dot\n    ) {\n      this.state.pos += 3;\n      this.finishToken(tt.ellipsis);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.dot);\n    }\n  }\n\n  readToken_slash(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.slashAssign, 2);\n    } else {\n      this.finishOp(tt.slash, 1);\n    }\n  }\n\n  readToken_interpreter(): boolean {\n    if (this.state.pos !== 0 || this.length < 2) return false;\n\n    let ch = this.input.charCodeAt(this.state.pos + 1);\n    if (ch !== charCodes.exclamationMark) return false;\n\n    const start = this.state.pos;\n    this.state.pos += 1;\n\n    while (!isNewLine(ch) && ++this.state.pos < this.length) {\n      ch = this.input.charCodeAt(this.state.pos);\n    }\n\n    const value = this.input.slice(start + 2, this.state.pos);\n\n    this.finishToken(tt.interpreterDirective, value);\n\n    return true;\n  }\n\n  readToken_mult_modulo(code: number): void {\n    // '%' or '*'\n    let type = code === charCodes.asterisk ? tt.star : tt.modulo;\n    let width = 1;\n    let next = this.input.charCodeAt(this.state.pos + 1);\n\n    // Exponentiation operator '**'\n    if (code === charCodes.asterisk && next === charCodes.asterisk) {\n      width++;\n      next = this.input.charCodeAt(this.state.pos + 2);\n      type = tt.exponent;\n    }\n\n    // '%=' or '*='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      width++;\n      // `tt.moduloAssign` is only needed to support % as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      type = code === charCodes.percentSign ? tt.moduloAssign : tt.assign;\n    }\n\n    this.finishOp(type, width);\n  }\n\n  readToken_pipe_amp(code: number): void {\n    // '||' '&&' '||=' '&&='\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      if (this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n      } else {\n        this.finishOp(\n          code === charCodes.verticalBar ? tt.logicalOR : tt.logicalAND,\n          2,\n        );\n      }\n      return;\n    }\n\n    if (code === charCodes.verticalBar) {\n      // '|>'\n      if (next === charCodes.greaterThan) {\n        this.finishOp(tt.pipeline, 2);\n        return;\n      }\n      // '|}'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightCurlyBrace\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.RecordExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.braceBarR);\n        return;\n      }\n\n      // '|]'\n      if (\n        !process.env.BABEL_8_BREAKING &&\n        this.hasPlugin(\"recordAndTuple\") &&\n        next === charCodes.rightSquareBracket\n      ) {\n        if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n          throw this.raise(\n            Errors.TupleExpressionBarIncorrectEndSyntaxType,\n            this.state.curPosition(),\n          );\n        }\n        this.state.pos += 2;\n        this.finishToken(tt.bracketBarR);\n        return;\n      }\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n      return;\n    }\n\n    this.finishOp(\n      code === charCodes.verticalBar ? tt.bitwiseOR : tt.bitwiseAND,\n      1,\n    );\n  }\n\n  readToken_caret(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '^='\n    if (next === charCodes.equalsTo && !this.state.inType) {\n      // `tt.xorAssign` is only needed to support ^ as a Hack-pipe topic token.\n      // If the proposal ends up choosing a different token,\n      // it can be merged with tt.assign.\n      this.finishOp(tt.xorAssign, 2);\n    }\n    // '^^'\n    else if (\n      next === charCodes.caret &&\n      // If the ^^ token is not enabled, we don't throw but parse two single ^s\n      // because it could be a ^ hack token followed by a ^ binary operator.\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"^^\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleCaret, 2);\n\n      // `^^^` is forbidden and must be separated by a space.\n      const lookaheadCh = this.input.codePointAt(this.state.pos);\n      if (lookaheadCh === charCodes.caret) {\n        this.unexpected();\n      }\n    }\n    // '^'\n    else {\n      this.finishOp(tt.bitwiseXOR, 1);\n    }\n  }\n\n  readToken_atSign(): void {\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    // '@@'\n    if (\n      next === charCodes.atSign &&\n      this.hasPlugin([\n        \"pipelineOperator\",\n        { proposal: \"hack\", topicToken: \"@@\" },\n      ])\n    ) {\n      this.finishOp(tt.doubleAt, 2);\n    }\n    // '@'\n    else {\n      this.finishOp(tt.at, 1);\n    }\n  }\n\n  readToken_plus_min(code: number): void {\n    // '+-'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n\n    if (next === code) {\n      this.finishOp(tt.incDec, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      this.finishOp(tt.assign, 2);\n    } else {\n      this.finishOp(tt.plusMin, 1);\n    }\n  }\n\n  readToken_lt(): void {\n    // '<'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.lessThan) {\n      if (this.input.charCodeAt(pos + 2) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, 3);\n        return;\n      }\n      this.finishOp(tt.bitShiftL, 2);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.lt, 1);\n  }\n\n  readToken_gt(): void {\n    // '>'\n    const { pos } = this.state;\n    const next = this.input.charCodeAt(pos + 1);\n\n    if (next === charCodes.greaterThan) {\n      const size =\n        this.input.charCodeAt(pos + 2) === charCodes.greaterThan ? 3 : 2;\n      if (this.input.charCodeAt(pos + size) === charCodes.equalsTo) {\n        this.finishOp(tt.assign, size + 1);\n        return;\n      }\n      this.finishOp(tt.bitShiftR, size);\n      return;\n    }\n\n    if (next === charCodes.equalsTo) {\n      // <= | >=\n      this.finishOp(tt.relational, 2);\n      return;\n    }\n\n    this.finishOp(tt.gt, 1);\n  }\n\n  readToken_eq_excl(code: number): void {\n    // '=!'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    if (next === charCodes.equalsTo) {\n      this.finishOp(\n        tt.equality,\n        this.input.charCodeAt(this.state.pos + 2) === charCodes.equalsTo\n          ? 3\n          : 2,\n      );\n      return;\n    }\n    if (code === charCodes.equalsTo && next === charCodes.greaterThan) {\n      // '=>'\n      this.state.pos += 2;\n      this.finishToken(tt.arrow);\n      return;\n    }\n    this.finishOp(code === charCodes.equalsTo ? tt.eq : tt.bang, 1);\n  }\n\n  readToken_question(): void {\n    // '?'\n    const next = this.input.charCodeAt(this.state.pos + 1);\n    const next2 = this.input.charCodeAt(this.state.pos + 2);\n    if (next === charCodes.questionMark) {\n      if (next2 === charCodes.equalsTo) {\n        // '??='\n        this.finishOp(tt.assign, 3);\n      } else {\n        // '??'\n        this.finishOp(tt.nullishCoalescing, 2);\n      }\n    } else if (\n      next === charCodes.dot &&\n      !(next2 >= charCodes.digit0 && next2 <= charCodes.digit9)\n    ) {\n      // '.' not followed by a number\n      this.state.pos += 2;\n      this.finishToken(tt.questionDot);\n    } else {\n      ++this.state.pos;\n      this.finishToken(tt.question);\n    }\n  }\n\n  getTokenFromCode(code: number): void {\n    switch (code) {\n      // The interpretation of a dot depends on whether it is followed\n      // by a digit or another two dots.\n\n      case charCodes.dot:\n        this.readToken_dot();\n        return;\n      // Punctuation tokens.\n      case charCodes.leftParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenL);\n        return;\n      case charCodes.rightParenthesis:\n        ++this.state.pos;\n        this.finishToken(tt.parenR);\n        return;\n      case charCodes.semicolon:\n        ++this.state.pos;\n        this.finishToken(tt.semi);\n        return;\n      case charCodes.comma:\n        ++this.state.pos;\n        this.finishToken(tt.comma);\n        return;\n      case charCodes.leftSquareBracket:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.TupleExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // [|\n          this.state.pos += 2;\n          this.finishToken(tt.bracketBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.bracketL);\n        }\n        return;\n      case charCodes.rightSquareBracket:\n        ++this.state.pos;\n        this.finishToken(tt.bracketR);\n        return;\n      case charCodes.leftCurlyBrace:\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          this.hasPlugin(\"recordAndTuple\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.verticalBar\n        ) {\n          if (this.getPluginOption(\"recordAndTuple\", \"syntaxType\") !== \"bar\") {\n            throw this.raise(\n              Errors.RecordExpressionBarIncorrectStartSyntaxType,\n              this.state.curPosition(),\n            );\n          }\n\n          // {|\n          this.state.pos += 2;\n          this.finishToken(tt.braceBarL);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.braceL);\n        }\n        return;\n      case charCodes.rightCurlyBrace:\n        ++this.state.pos;\n        this.finishToken(tt.braceR);\n        return;\n\n      case charCodes.colon:\n        if (\n          this.hasPlugin(\"functionBind\") &&\n          this.input.charCodeAt(this.state.pos + 1) === charCodes.colon\n        ) {\n          this.finishOp(tt.doubleColon, 2);\n        } else {\n          ++this.state.pos;\n          this.finishToken(tt.colon);\n        }\n        return;\n\n      case charCodes.questionMark:\n        this.readToken_question();\n        return;\n\n      case charCodes.graveAccent:\n        this.readTemplateToken();\n        return;\n\n      case charCodes.digit0: {\n        const next = this.input.charCodeAt(this.state.pos + 1);\n        // '0x', '0X' - hex number\n        if (next === charCodes.lowercaseX || next === charCodes.uppercaseX) {\n          this.readRadixNumber(16);\n          return;\n        }\n        // '0o', '0O' - octal number\n        if (next === charCodes.lowercaseO || next === charCodes.uppercaseO) {\n          this.readRadixNumber(8);\n          return;\n        }\n        // '0b', '0B' - binary number\n        if (next === charCodes.lowercaseB || next === charCodes.uppercaseB) {\n          this.readRadixNumber(2);\n          return;\n        }\n      }\n      // Anything else beginning with a digit is an integer, octal\n      // number, or float. (fall through)\n      case charCodes.digit1:\n      case charCodes.digit2:\n      case charCodes.digit3:\n      case charCodes.digit4:\n      case charCodes.digit5:\n      case charCodes.digit6:\n      case charCodes.digit7:\n      case charCodes.digit8:\n      case charCodes.digit9:\n        this.readNumber(false);\n        return;\n\n      // Quotes produce strings.\n      case charCodes.quotationMark:\n      case charCodes.apostrophe:\n        this.readString(code);\n        return;\n\n      // Operators are parsed inline in tiny state machines. '=' (charCodes.equalsTo) is\n      // often referred to. `finishOp` simply skips the amount of\n      // characters it is given as second argument, and returns a token\n      // of the type given by its first argument.\n\n      case charCodes.slash:\n        this.readToken_slash();\n        return;\n\n      case charCodes.percentSign:\n      case charCodes.asterisk:\n        this.readToken_mult_modulo(code);\n        return;\n\n      case charCodes.verticalBar:\n      case charCodes.ampersand:\n        this.readToken_pipe_amp(code);\n        return;\n\n      case charCodes.caret:\n        this.readToken_caret();\n        return;\n\n      case charCodes.plusSign:\n      case charCodes.dash:\n        this.readToken_plus_min(code);\n        return;\n\n      case charCodes.lessThan:\n        this.readToken_lt();\n        return;\n\n      case charCodes.greaterThan:\n        this.readToken_gt();\n        return;\n\n      case charCodes.equalsTo:\n      case charCodes.exclamationMark:\n        this.readToken_eq_excl(code);\n        return;\n\n      case charCodes.tilde:\n        this.finishOp(tt.tilde, 1);\n        return;\n\n      case charCodes.atSign:\n        this.readToken_atSign();\n        return;\n\n      case charCodes.numberSign:\n        this.readToken_numberSign();\n        return;\n\n      case charCodes.backslash:\n        this.readWord();\n        return;\n\n      default:\n        if (isIdentifierStart(code)) {\n          this.readWord(code);\n          return;\n        }\n    }\n\n    throw this.raise(\n      Errors.InvalidOrUnexpectedToken,\n      this.state.curPosition(),\n      {\n        unexpected: String.fromCodePoint(code),\n      },\n    );\n  }\n\n  finishOp(type: TokenType, size: number): void {\n    const str = this.input.slice(this.state.pos, this.state.pos + size);\n    this.state.pos += size;\n    this.finishToken(type, str);\n  }\n\n  readRegexp(): void {\n    const startLoc = this.state.startLoc;\n    const start = this.state.start + 1;\n    let escaped, inClass;\n    let { pos } = this.state;\n    for (; ; ++pos) {\n      if (pos >= this.length) {\n        // FIXME: explain\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      const ch = this.input.charCodeAt(pos);\n      if (isNewLine(ch)) {\n        throw this.raise(\n          Errors.UnterminatedRegExp,\n          createPositionWithColumnOffset(startLoc, 1),\n        );\n      }\n      if (escaped) {\n        escaped = false;\n      } else {\n        if (ch === charCodes.leftSquareBracket) {\n          inClass = true;\n        } else if (ch === charCodes.rightSquareBracket && inClass) {\n          inClass = false;\n        } else if (ch === charCodes.slash && !inClass) {\n          break;\n        }\n        escaped = ch === charCodes.backslash;\n      }\n    }\n    const content = this.input.slice(start, pos);\n    ++pos;\n\n    let mods = \"\";\n\n    const nextPos = () =>\n      // (pos + 1) + 1 - start\n      createPositionWithColumnOffset(startLoc, pos + 2 - start);\n\n    while (pos < this.length) {\n      const cp = this.codePointAtPos(pos);\n      // It doesn't matter if cp > 0xffff, the loop will either throw or break because we check on cp\n      const char = String.fromCharCode(cp);\n\n      // @ts-expect-error VALID_REGEX_FLAGS.has should accept expanded type: number\n      if (VALID_REGEX_FLAGS.has(cp)) {\n        if (cp === charCodes.lowercaseV) {\n          if (mods.includes(\"u\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        } else if (cp === charCodes.lowercaseU) {\n          if (mods.includes(\"v\")) {\n            this.raise(Errors.IncompatibleRegExpUVFlags, nextPos());\n          }\n        }\n        if (mods.includes(char)) {\n          this.raise(Errors.DuplicateRegExpFlags, nextPos());\n        }\n      } else if (isIdentifierChar(cp) || cp === charCodes.backslash) {\n        this.raise(Errors.MalformedRegExpFlags, nextPos());\n      } else {\n        break;\n      }\n\n      ++pos;\n      mods += char;\n    }\n    this.state.pos = pos;\n\n    this.finishToken(tt.regexp, {\n      pattern: content,\n      flags: mods,\n    });\n  }\n\n  // Read an integer in the given radix. Return null if zero digits\n  // were read, the integer value otherwise. When `len` is given, this\n  // will return `null` unless the integer has exactly `len` digits.\n  // When `forceLen` is `true`, it means that we already know that in case\n  // of a malformed number we have to skip `len` characters anyway, instead\n  // of bailing out early. For example, in \"\\u{123Z}\" we want to read up to }\n  // anyway, while in \"\\u00Z\" we will stop at Z instead of consuming four\n  // characters (and thus the closing quote).\n\n  readInt(\n    radix: number,\n    len?: number,\n    forceLen: boolean = false,\n    allowNumSeparator: boolean | \"bail\" = true,\n  ): number | null {\n    const { n, pos } = readInt(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      radix,\n      len,\n      forceLen,\n      allowNumSeparator,\n      this.errorHandlers_readInt,\n      /* bailOnError */ false,\n    );\n    this.state.pos = pos;\n    return n;\n  }\n\n  readRadixNumber(radix: number): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isBigInt = false;\n\n    this.state.pos += 2; // 0x\n    const val = this.readInt(radix);\n    if (val == null) {\n      this.raise(\n        Errors.InvalidDigit,\n        // Numeric literals can't have newlines, so this is safe to do.\n        createPositionWithColumnOffset(startLoc, 2),\n        {\n          radix,\n        },\n      );\n    }\n    const next = this.input.charCodeAt(this.state.pos);\n\n    if (next === charCodes.lowercaseN) {\n      ++this.state.pos;\n      isBigInt = true;\n    } else if (next === charCodes.lowercaseM) {\n      throw this.raise(Errors.InvalidDecimal, startLoc);\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    if (isBigInt) {\n      const str = this.input.slice(start, this.state.pos).replace(/[_n]/g, \"\");\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    this.finishToken(tt.num, val);\n  }\n\n  // Read an integer, octal integer, or floating-point number.\n\n  readNumber(startsWithDot: boolean): void {\n    const start = this.state.pos;\n    const startLoc = this.state.curPosition();\n    let isFloat = false;\n    let isBigInt = false;\n    let hasExponent = false;\n    let isOctal = false;\n\n    if (!startsWithDot && this.readInt(10) === null) {\n      this.raise(Errors.InvalidNumber, this.state.curPosition());\n    }\n    const hasLeadingZero =\n      this.state.pos - start >= 2 &&\n      this.input.charCodeAt(start) === charCodes.digit0;\n\n    if (hasLeadingZero) {\n      const integer = this.input.slice(start, this.state.pos);\n      this.recordStrictModeErrors(Errors.StrictOctalLiteral, startLoc);\n      if (!this.state.strict) {\n        // disallow numeric separators in non octal decimals and legacy octal likes\n        const underscorePos = integer.indexOf(\"_\");\n        if (underscorePos > 0) {\n          // Numeric literals can't have newlines, so this is safe to do.\n          this.raise(\n            Errors.ZeroDigitNumericSeparator,\n            createPositionWithColumnOffset(startLoc, underscorePos),\n          );\n        }\n      }\n      isOctal = hasLeadingZero && !/[89]/.test(integer);\n    }\n\n    let next = this.input.charCodeAt(this.state.pos);\n    if (next === charCodes.dot && !isOctal) {\n      ++this.state.pos;\n      this.readInt(10);\n      isFloat = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (\n      (next === charCodes.uppercaseE || next === charCodes.lowercaseE) &&\n      !isOctal\n    ) {\n      next = this.input.charCodeAt(++this.state.pos);\n      if (next === charCodes.plusSign || next === charCodes.dash) {\n        ++this.state.pos;\n      }\n      if (this.readInt(10) === null) {\n        this.raise(Errors.InvalidOrMissingExponent, startLoc);\n      }\n      isFloat = true;\n      hasExponent = true;\n      next = this.input.charCodeAt(this.state.pos);\n    }\n\n    if (next === charCodes.lowercaseN) {\n      // disallow floats, legacy octal syntax and non octal decimals\n      // new style octal (\"0o\") is handled in this.readRadixNumber\n      if (isFloat || hasLeadingZero) {\n        this.raise(Errors.InvalidBigIntLiteral, startLoc);\n      }\n      ++this.state.pos;\n      isBigInt = true;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && next === charCodes.lowercaseM) {\n      this.expectPlugin(\"decimal\", this.state.curPosition());\n      if (hasExponent || hasLeadingZero) {\n        this.raise(Errors.InvalidDecimal, startLoc);\n      }\n      ++this.state.pos;\n      // eslint-disable-next-line no-var\n      var isDecimal = true;\n    }\n\n    if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {\n      throw this.raise(Errors.NumberIdentifier, this.state.curPosition());\n    }\n\n    // remove \"_\" for numeric literal separator, and trailing `m` or `n`\n    const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, \"\");\n\n    if (isBigInt) {\n      this.finishToken(tt.bigint, str);\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && isDecimal) {\n      this.finishToken(tt.decimal, str);\n      return;\n    }\n\n    const val = isOctal ? parseInt(str, 8) : parseFloat(str);\n    this.finishToken(tt.num, val);\n  }\n\n  // Read a string value, interpreting backslash-escapes.\n\n  readCodePoint(throwOnInvalid: boolean): number | null {\n    const { code, pos } = readCodePoint(\n      this.input,\n      this.state.pos,\n      this.state.lineStart,\n      this.state.curLine,\n      throwOnInvalid,\n      this.errorHandlers_readCodePoint,\n    );\n    this.state.pos = pos;\n    return code;\n  }\n\n  readString(quote: number): void {\n    const { str, pos, curLine, lineStart } = readStringContents(\n      quote === charCodes.quotationMark ? \"double\" : \"single\",\n      this.input,\n      this.state.pos + 1, // skip the quote\n      this.state.lineStart,\n      this.state.curLine,\n      this.errorHandlers_readStringContents_string,\n    );\n    this.state.pos = pos + 1; // skip the quote\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n    this.finishToken(tt.string, str);\n  }\n\n  // Reads template continuation `}...`\n  readTemplateContinuation(): void {\n    if (!this.match(tt.braceR)) {\n      this.unexpected(null, tt.braceR);\n    }\n    // rewind pos to `}`\n    this.state.pos--;\n    this.readTemplateToken();\n  }\n\n  // Reads template string tokens.\n  readTemplateToken(): void {\n    const opening = this.input[this.state.pos];\n    const { str, firstInvalidLoc, pos, curLine, lineStart } =\n      readStringContents(\n        \"template\",\n        this.input,\n        this.state.pos + 1, // skip '`' or `}`\n        this.state.lineStart,\n        this.state.curLine,\n        this.errorHandlers_readStringContents_template,\n      );\n    this.state.pos = pos + 1; // skip '`' or `$`\n    this.state.lineStart = lineStart;\n    this.state.curLine = curLine;\n\n    if (firstInvalidLoc) {\n      this.state.firstInvalidTemplateEscapePos = new Position(\n        firstInvalidLoc.curLine,\n        firstInvalidLoc.pos - firstInvalidLoc.lineStart,\n        this.sourceToOffsetPos(firstInvalidLoc.pos),\n      );\n    }\n\n    if (this.input.codePointAt(pos) === charCodes.graveAccent) {\n      this.finishToken(\n        tt.templateTail,\n        firstInvalidLoc ? null : opening + str + \"`\",\n      );\n    } else {\n      this.state.pos++; // skip '{'\n      this.finishToken(\n        tt.templateNonTail,\n        firstInvalidLoc ? null : opening + str + \"${\",\n      );\n    }\n  }\n\n  recordStrictModeErrors(toParseError: DeferredStrictError, at: Position) {\n    const index = at.index;\n\n    if (this.state.strict && !this.state.strictErrors.has(index)) {\n      this.raise(toParseError, at);\n    } else {\n      this.state.strictErrors.set(index, [toParseError, at]);\n    }\n  }\n\n  // Read an identifier, and return it as a string. Sets `this.state.containsEsc`\n  // to whether the word contained a '\\u' escape.\n  //\n  // Incrementally adds only escaped chars, adding other chunks as-is\n  // as a micro-optimization.\n  //\n  // When `firstCode` is given, it assumes it is always an identifier start and\n  // will skip reading start position again\n\n  readWord1(firstCode?: number): string {\n    this.state.containsEsc = false;\n    let word = \"\";\n    const start = this.state.pos;\n    let chunkStart = this.state.pos;\n    if (firstCode !== undefined) {\n      this.state.pos += firstCode <= 0xffff ? 1 : 2;\n    }\n\n    while (this.state.pos < this.length) {\n      const ch = this.codePointAtPos(this.state.pos);\n      if (isIdentifierChar(ch)) {\n        this.state.pos += ch <= 0xffff ? 1 : 2;\n      } else if (ch === charCodes.backslash) {\n        this.state.containsEsc = true;\n\n        word += this.input.slice(chunkStart, this.state.pos);\n        const escStart = this.state.curPosition();\n        const identifierCheck =\n          this.state.pos === start ? isIdentifierStart : isIdentifierChar;\n\n        if (this.input.charCodeAt(++this.state.pos) !== charCodes.lowercaseU) {\n          this.raise(Errors.MissingUnicodeEscape, this.state.curPosition());\n          chunkStart = this.state.pos - 1;\n          continue;\n        }\n\n        ++this.state.pos;\n        const esc = this.readCodePoint(true);\n        if (esc !== null) {\n          if (!identifierCheck(esc)) {\n            this.raise(Errors.EscapedCharNotAnIdentifier, escStart);\n          }\n\n          word += String.fromCodePoint(esc);\n        }\n        chunkStart = this.state.pos;\n      } else {\n        break;\n      }\n    }\n    return word + this.input.slice(chunkStart, this.state.pos);\n  }\n\n  // Read an identifier or keyword token. Will check for reserved\n  // words when necessary.\n\n  readWord(firstCode?: number): void {\n    const word = this.readWord1(firstCode);\n    const type = keywordTypes.get(word);\n    if (type !== undefined) {\n      // We don't use word as state.value here because word is a dynamic string\n      // while token label is a shared constant string\n      this.finishToken(type, tokenLabelName(type));\n    } else {\n      this.finishToken(tt.name, word);\n    }\n  }\n\n  checkKeywordEscapes(): void {\n    const { type } = this.state;\n    if (tokenIsKeyword(type) && this.state.containsEsc) {\n      this.raise(Errors.InvalidEscapedReservedWord, this.state.startLoc, {\n        reservedWord: tokenLabelName(type),\n      });\n    }\n  }\n\n  /**\n   * Raise a `ParseError` given the appropriate properties. If passed a\n   * `Position` for the `at` property, raises the `ParseError` at that location.\n   * Otherwise, if passed a `Node`, raises the `ParseError` at the start\n   * location of that `Node`.\n   *\n   * If `errorRecovery` is `true`, the error is pushed to the errors array and\n   * returned. If `errorRecovery` is `false`, the error is instead thrown.\n   *\n   * The return type is marked as `never` for simplicity, as error recovery\n   * will create types in an invalid AST shape.\n   */\n  raise<ErrorDetails = object>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const error = toParseError(loc, details);\n\n    if (!(this.optionFlags & OptionFlags.ErrorRecovery)) throw error;\n    if (!this.isLookahead) this.state.errors.push(error);\n\n    return error;\n  }\n\n  /**\n   * If `errorRecovery` is `false`, this method behaves identically to `raise`.\n   * If `errorRecovery` is `true`, this method will first see if there is\n   * already an error stored at the same `Position`, and replaces it with the\n   * one generated here.\n   */\n  raiseOverwrite<ErrorDetails>(\n    toParseError: ParseErrorConstructor<ErrorDetails>,\n    at: Position | Undone<Node>,\n    details: ErrorDetails = {} as ErrorDetails,\n  ): ParseError<ErrorDetails> | never {\n    const loc = at instanceof Position ? at : at.loc.start;\n    const pos = loc.index;\n    const errors = this.state.errors;\n\n    for (let i = errors.length - 1; i >= 0; i--) {\n      const error = errors[i];\n      if (error.loc.index === pos) {\n        return (errors[i] = toParseError(loc, details));\n      }\n      if (error.loc.index < pos) break;\n    }\n\n    return this.raise(toParseError, at, details);\n  }\n\n  // updateContext is used by the jsx plugin\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  updateContext(prevType: TokenType): void {}\n\n  // Raise an unexpected token error. Can take the expected token type.\n  unexpected(loc?: Position | null, type?: TokenType): void {\n    throw this.raise(\n      Errors.UnexpectedToken,\n      loc != null ? loc : this.state.startLoc,\n      {\n        expected: type ? tokenLabelName(type) : null,\n      },\n    );\n  }\n\n  expectPlugin(pluginName: Plugin, loc?: Position): true {\n    if (this.hasPlugin(pluginName)) {\n      return true;\n    }\n\n    throw this.raise(\n      Errors.MissingPlugin,\n      loc != null ? loc : this.state.startLoc,\n      {\n        missingPlugin: [pluginName],\n      },\n    );\n  }\n\n  expectOnePlugin(pluginNames: Plugin[]): void {\n    if (!pluginNames.some(name => this.hasPlugin(name))) {\n      throw this.raise(Errors.MissingOneOfPlugins, this.state.startLoc, {\n        missingPlugin: pluginNames,\n      });\n    }\n  }\n\n  errorBuilder(error: ParseErrorConstructor<object>) {\n    return (pos: number, lineStart: number, curLine: number) => {\n      this.raise(error, buildPosition(pos, lineStart, curLine));\n    };\n  }\n\n  errorHandlers_readInt: IntErrorHandlers = {\n    invalidDigit: (pos, lineStart, curLine, radix) => {\n      if (!(this.optionFlags & OptionFlags.ErrorRecovery)) return false;\n\n      this.raise(Errors.InvalidDigit, buildPosition(pos, lineStart, curLine), {\n        radix,\n      });\n      // Continue parsing the number as if there was no invalid digit.\n      return true;\n    },\n    numericSeparatorInEscapeSequence: this.errorBuilder(\n      Errors.NumericSeparatorInEscapeSequence,\n    ),\n    unexpectedNumericSeparator: this.errorBuilder(\n      Errors.UnexpectedNumericSeparator,\n    ),\n  };\n\n  errorHandlers_readCodePoint: CodePointErrorHandlers = {\n    ...this.errorHandlers_readInt,\n    invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),\n    invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint),\n  };\n\n  errorHandlers_readStringContents_string: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: (pos, lineStart, curLine) => {\n      this.recordStrictModeErrors(\n        Errors.StrictNumericEscape,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedString, // Report the error at the string quote\n        buildPosition(pos - 1, lineStart, curLine),\n      );\n    },\n  };\n\n  errorHandlers_readStringContents_template: StringContentsErrorHandlers = {\n    ...this.errorHandlers_readCodePoint,\n    strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),\n    unterminated: (pos, lineStart, curLine) => {\n      throw this.raise(\n        Errors.UnterminatedTemplate,\n        buildPosition(pos, lineStart, curLine),\n      );\n    },\n  };\n}\n","import { ClassElementType } from \"./scopeflags.ts\";\nimport type { Position } from \"./location.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\n\nexport class ClassScope {\n  // A list of private named declared in the current class\n  privateNames: Set<string> = new Set();\n\n  // A list of private getters of setters without their counterpart\n  loneAccessors: Map<string, ClassElementType> = new Map();\n\n  // A list of private names used before being defined, mapping to\n  // their position.\n  undefinedPrivateNames: Map<string, Position> = new Map();\n}\n\nexport default class ClassScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ClassScope> = [];\n  undefinedPrivateNames: Map<string, Position> = new Map();\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n\n  current(): ClassScope {\n    return this.stack[this.stack.length - 1];\n  }\n\n  enter() {\n    this.stack.push(new ClassScope());\n  }\n\n  exit() {\n    const oldClassScope = this.stack.pop();\n\n    // Migrate the usage of not yet defined private names to the outer\n    // class scope, or raise an error if we reached the top-level scope.\n\n    const current = this.current();\n\n    // Array.from is needed because this is compiled to an array-like for loop\n    for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {\n      if (current) {\n        if (!current.undefinedPrivateNames.has(name)) {\n          current.undefinedPrivateNames.set(name, loc);\n        }\n      } else {\n        this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n          identifierName: name,\n        });\n      }\n    }\n  }\n\n  declarePrivateName(\n    name: string,\n    elementType: ClassElementType,\n    loc: Position,\n  ) {\n    const { privateNames, loneAccessors, undefinedPrivateNames } =\n      this.current();\n    let redefined = privateNames.has(name);\n\n    if (elementType & ClassElementType.KIND_ACCESSOR) {\n      const accessor = redefined && loneAccessors.get(name);\n      if (accessor) {\n        const oldStatic = accessor & ClassElementType.FLAG_STATIC;\n        const newStatic = elementType & ClassElementType.FLAG_STATIC;\n\n        const oldKind = accessor & ClassElementType.KIND_ACCESSOR;\n        const newKind = elementType & ClassElementType.KIND_ACCESSOR;\n\n        // The private name can be duplicated only if it is used by\n        // two accessors with different kind (get and set), and if\n        // they have the same placement (static or not).\n        redefined = oldKind === newKind || oldStatic !== newStatic;\n\n        if (!redefined) loneAccessors.delete(name);\n      } else if (!redefined) {\n        loneAccessors.set(name, elementType);\n      }\n    }\n\n    if (redefined) {\n      this.parser.raise(Errors.PrivateNameRedeclaration, loc, {\n        identifierName: name,\n      });\n    }\n\n    privateNames.add(name);\n    undefinedPrivateNames.delete(name);\n  }\n\n  usePrivateName(name: string, loc: Position) {\n    let classScope;\n    for (classScope of this.stack) {\n      if (classScope.privateNames.has(name)) return;\n    }\n\n    if (classScope) {\n      classScope.undefinedPrivateNames.set(name, loc);\n    } else {\n      // top-level\n      this.parser.raise(Errors.InvalidPrivateFieldResolution, loc, {\n        identifierName: name,\n      });\n    }\n  }\n}\n","import { Errors, type ParseErrorConstructor } from \"../parse-error.ts\";\nimport type { Position } from \"./location.ts\";\nimport type { Node } from \"../types.ts\";\nimport type Tokenizer from \"../tokenizer/index.ts\";\nimport type { Undone } from \"../parser/node.ts\";\n\n/**\n * @module util/expression-scope\n\nExpressionScope is used to track declaration errors in these ambiguous patterns:\n\n- CoverParenthesizedExpressionAndArrowParameterList\n  e.g. we don't know if `({ x })` is an parenthesized expression or an\n  arrow function parameters until we see an `=>` after `)`.\n\n- CoverCallExpressionAndAsyncArrowHead\n  e.g. we don't know if `async({ x })` is a call expression or an async arrow\n  function parameters until we see an `=>` after `)`\n\nThe following declaration errors (@see parser-errors/standard) will be recorded in\nsome expression scopes and thrown later when we know what the ambiguous pattern is\n\n- AwaitBindingIdentifier\n- AwaitExpressionFormalParameter\n- YieldInParameter\n- InvalidParenthesizedAssignment when parenthesized is an identifier\n\nThere are four different expression scope\n- Expression\n  A general scope that represents program / function body / static block. No errors\n  will be recorded nor thrown in this scope.\n\n- MaybeArrowParameterDeclaration\n  A scope that represents ambiguous arrow head e.g. `(x)`. Errors will be recorded\n  alongside parent scopes and thrown when `ExpressionScopeHandler#validateAsPattern`\n  is called.\n\n- MaybeAsyncArrowParameterDeclaration\n  A scope that represents ambiguous async arrow head e.g. `async(x)`. Errors will\n  be recorded alongside parent scopes and thrown when\n  `ExpressionScopeHandler#validateAsPattern` is called.\n\n- ParameterDeclaration\n  A scope that represents unambiguous function parameters `function(x)`. Errors\n  recorded in this scope will be thrown immediately. No errors will be recorded in\n  this scope.\n\n// @see {@link https://docs.google.com/document/d/1FAvEp9EUK-G8kHfDIEo_385Hs2SUBCYbJ5H-NnLvq8M | V8 Expression Scope design docs}\n */\n\nconst enum ExpressionScopeType {\n  kExpression = 0,\n  kMaybeArrowParameterDeclaration = 1,\n  kMaybeAsyncArrowParameterDeclaration = 2,\n  kParameterDeclaration = 3,\n}\n\nclass ExpressionScope {\n  declare type: ExpressionScopeType;\n\n  constructor(type: ExpressionScopeType = ExpressionScopeType.kExpression) {\n    this.type = type;\n  }\n\n  canBeArrowParameterDeclaration(): this is ArrowHeadParsingScope {\n    return (\n      this.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration ||\n      this.type === ExpressionScopeType.kMaybeArrowParameterDeclaration\n    );\n  }\n\n  isCertainlyParameterDeclaration() {\n    return this.type === ExpressionScopeType.kParameterDeclaration;\n  }\n}\n\ntype ArrowHeadParsingParameterInitializerError =\n  | typeof Errors.AwaitExpressionFormalParameter\n  | typeof Errors.YieldInParameter;\ntype ArrowHeadParsingDeclarationError =\n  | ArrowHeadParsingParameterInitializerError\n  | typeof Errors.InvalidParenthesizedAssignment\n  | typeof Errors.AwaitBindingIdentifier;\n\nclass ArrowHeadParsingScope extends ExpressionScope {\n  declarationErrors: Map<number, [ParseErrorConstructor<object>, Position]> =\n    new Map();\n  constructor(\n    type:\n      | ExpressionScopeType.kMaybeArrowParameterDeclaration\n      | ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  ) {\n    super(type);\n  }\n  recordDeclarationError(\n    ParsingErrorClass: ParseErrorConstructor<object>,\n    at: Position,\n  ) {\n    const index = at.index;\n\n    this.declarationErrors.set(index, [ParsingErrorClass, at]);\n  }\n  clearDeclarationError(index: number) {\n    this.declarationErrors.delete(index);\n  }\n  iterateErrors(\n    iterator: (a: [ArrowHeadParsingDeclarationError, Position]) => void,\n  ) {\n    this.declarationErrors.forEach(iterator);\n  }\n}\n\nexport default class ExpressionScopeHandler {\n  parser: Tokenizer;\n  stack: Array<ExpressionScope> = [new ExpressionScope()];\n\n  constructor(parser: Tokenizer) {\n    this.parser = parser;\n  }\n  enter(scope: ExpressionScope) {\n    this.stack.push(scope);\n  }\n\n  exit() {\n    this.stack.pop();\n  }\n\n  /**\n   * Record likely parameter initializer errors\n   *\n   * When current scope is a ParameterDeclaration, the error will be thrown immediately,\n   * otherwise it will be recorded to any ancestry MaybeArrowParameterDeclaration and\n   * MaybeAsyncArrowParameterDeclaration scope until an Expression scope is seen.\n   */\n  recordParameterInitializerError(\n    toParseError: ArrowHeadParsingParameterInitializerError,\n    node: Undone<Node>,\n  ): void {\n    const origin = node.loc.start;\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (!scope.isCertainlyParameterDeclaration()) {\n      if (scope.canBeArrowParameterDeclaration()) {\n        scope.recordDeclarationError(toParseError, origin);\n      } else {\n        /*:: invariant(scope.type == ExpressionScopeType.kExpression) */\n        // Type-Expression is the boundary where initializer error can populate to\n        return;\n      }\n      scope = stack[--i];\n    }\n    this.parser.raise(toParseError, origin);\n  }\n\n  /**\n   * Record errors that must be thrown if the current pattern ends up being an arrow\n   * function parameter. This is used to record parenthesized identifiers, and to record\n   * \"a as T\" and \"<T> a\" type assertions when parsing typescript.\n   *\n   * A parenthesized identifier (or type assertion) in LHS can be ambiguous because the assignment\n   * can be transformed to an assignable later, but not vice versa:\n   * For example, in `([(a) = []] = []) => {}`, we think `(a) = []` is an LHS in `[(a) = []]`,\n   * an LHS within `[(a) = []] = []`. However the LHS chain is then transformed by toAssignable,\n   * and we should throw assignment `(a)`, which is only valid in LHS. Hence we record the\n   * location of parenthesized `(a)` to current scope if it is one of MaybeArrowParameterDeclaration\n   * and MaybeAsyncArrowParameterDeclaration\n   *\n   * Unlike `recordParameterInitializerError`, we don't record to ancestry scope because we\n   * validate arrow head parsing scope before exit, and then the LHS will be unambiguous:\n   * For example, in `( x = ( [(a) = []] = [] ) ) => {}`, we should not record `(a)` in `( x = ... ) =>`\n   * arrow scope because when we finish parsing `( [(a) = []] = [] )`, it is an unambiguous assignment\n   * expression and can not be cast to pattern\n   */\n  recordArrowParameterBindingError(\n    error: ParseErrorConstructor<object>,\n    node: Node,\n  ): void {\n    const { stack } = this;\n    const scope: ExpressionScope = stack[stack.length - 1];\n    const origin = node.loc.start;\n    if (scope.isCertainlyParameterDeclaration()) {\n      this.parser.raise(error, origin);\n    } else if (scope.canBeArrowParameterDeclaration()) {\n      scope.recordDeclarationError(error, origin);\n    } else {\n      return;\n    }\n  }\n\n  /**\n   * Record likely async arrow parameter errors\n   *\n   * Errors will be recorded to any ancestry MaybeAsyncArrowParameterDeclaration\n   * scope until an Expression scope is seen.\n   */\n  recordAsyncArrowParametersError(at: Position): void {\n    const { stack } = this;\n    let i = stack.length - 1;\n    let scope: ExpressionScope = stack[i];\n    while (scope.canBeArrowParameterDeclaration()) {\n      if (\n        scope.type === ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration\n      ) {\n        scope.recordDeclarationError(Errors.AwaitBindingIdentifier, at);\n      }\n      scope = stack[--i];\n    }\n  }\n\n  validateAsPattern(): void {\n    const { stack } = this;\n    const currentScope = stack[stack.length - 1];\n    if (!currentScope.canBeArrowParameterDeclaration()) return;\n    currentScope.iterateErrors(([toParseError, loc]) => {\n      this.parser.raise(toParseError, loc);\n      // iterate from parent scope\n      let i = stack.length - 2;\n      let scope = stack[i];\n      while (scope.canBeArrowParameterDeclaration()) {\n        scope.clearDeclarationError(loc.index);\n        scope = stack[--i];\n      }\n    });\n  }\n}\n\nexport function newParameterDeclarationScope() {\n  return new ExpressionScope(ExpressionScopeType.kParameterDeclaration);\n}\n\nexport function newArrowHeadScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeArrowParameterDeclaration,\n  );\n}\n\nexport function newAsyncArrowScope() {\n  return new ArrowHeadParsingScope(\n    ExpressionScopeType.kMaybeAsyncArrowParameterDeclaration,\n  );\n}\n\nexport function newExpressionScope() {\n  return new ExpressionScope();\n}\n","import type { Position } from \"../util/location.ts\";\nimport {\n  tokenIsLiteralPropertyName,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport Tokenizer from \"../tokenizer/index.ts\";\nimport type State from \"../tokenizer/state.ts\";\nimport type {\n  EstreePropertyDefinition,\n  Node,\n  ObjectMethod,\n  ObjectProperty,\n  PrivateName,\n} from \"../types.d.ts\";\nimport { hasNewLine } from \"../util/whitespace.ts\";\nimport { isIdentifierChar } from \"../util/identifier.ts\";\nimport ClassScopeHandler from \"../util/class-scope.ts\";\nimport ExpressionScopeHandler from \"../util/expression-scope.ts\";\nimport { ScopeFlag } from \"../util/scopeflags.ts\";\nimport ProductionParameterHandler, {\n  ParamKind,\n} from \"../util/production-parameter.ts\";\nimport {\n  Errors,\n  type ParseError,\n  type ParseErrorConstructor,\n} from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nimport type ScopeHandler from \"../util/scope.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\ntype TryParse<Node, Error, Thrown, Aborted, FailState> = {\n  node: Node;\n  error: Error;\n  thrown: Thrown;\n  aborted: Aborted;\n  failState: FailState;\n};\n\n// ## Parser utilities\n\nexport default abstract class UtilParser extends Tokenizer {\n  // Forward-declaration: defined in parser/index.js\n  abstract getScopeHandler(): new (...args: any) => ScopeHandler;\n\n  addExtra(\n    node: Partial<Node>,\n    key: string,\n    value: any,\n    enumerable: boolean = true,\n  ): void {\n    if (!node) return;\n\n    let { extra } = node;\n    if (extra == null) {\n      extra = {};\n      node.extra = extra;\n    }\n\n    if (enumerable) {\n      extra[key] = value;\n    } else {\n      Object.defineProperty(extra, key, { enumerable, value });\n    }\n  }\n\n  // Tests whether parsed token is a contextual keyword.\n\n  isContextual(token: TokenType): boolean {\n    return this.state.type === token && !this.state.containsEsc;\n  }\n\n  isUnparsedContextual(nameStart: number, name: string): boolean {\n    if (this.input.startsWith(name, nameStart)) {\n      const nextCh = this.input.charCodeAt(nameStart + name.length);\n      return !(\n        isIdentifierChar(nextCh) ||\n        // check if `nextCh is between 0xd800 - 0xdbff,\n        // if `nextCh` is NaN, `NaN & 0xfc00` is 0, the function\n        // returns true\n        (nextCh & 0xfc00) === 0xd800\n      );\n    }\n    return false;\n  }\n\n  isLookaheadContextual(name: string): boolean {\n    const next = this.nextTokenStart();\n    return this.isUnparsedContextual(next, name);\n  }\n\n  // Consumes contextual keyword if possible.\n\n  eatContextual(token: TokenType): boolean {\n    if (this.isContextual(token)) {\n      this.next();\n      return true;\n    }\n    return false;\n  }\n\n  // Asserts that following token is given contextual keyword.\n\n  expectContextual(\n    token: TokenType,\n    toParseError?: ParseErrorConstructor<any>,\n  ): void {\n    if (!this.eatContextual(token)) {\n      if (toParseError != null) {\n        throw this.raise(toParseError, this.state.startLoc);\n      }\n      this.unexpected(null, token);\n    }\n  }\n\n  // Test whether a semicolon can be inserted at the current position.\n\n  canInsertSemicolon(): boolean {\n    return (\n      this.match(tt.eof) ||\n      this.match(tt.braceR) ||\n      this.hasPrecedingLineBreak()\n    );\n  }\n\n  hasPrecedingLineBreak(): boolean {\n    return hasNewLine(\n      this.input,\n      this.offsetToSourcePos(this.state.lastTokEndLoc.index),\n      this.state.start,\n    );\n  }\n\n  hasFollowingLineBreak(): boolean {\n    return hasNewLine(this.input, this.state.end, this.nextTokenStart());\n  }\n\n  isLineTerminator(): boolean {\n    return this.eat(tt.semi) || this.canInsertSemicolon();\n  }\n\n  // Consume a semicolon, or, failing that, see if we are allowed to\n  // pretend that there is a semicolon at this position.\n\n  semicolon(allowAsi: boolean = true): void {\n    if (allowAsi ? this.isLineTerminator() : this.eat(tt.semi)) return;\n    this.raise(Errors.MissingSemicolon, this.state.lastTokEndLoc);\n  }\n\n  // Expect a token of a given type. If found, consume it, otherwise,\n  // raise an unexpected token error at given pos.\n\n  expect(type: TokenType, loc?: Position | null): void {\n    if (!this.eat(type)) {\n      this.unexpected(loc, type);\n    }\n  }\n\n  // tryParse will clone parser state.\n  // It is expensive and should be used with cautions\n  tryParse<T extends Node | ReadonlyArray<Node>>(\n    fn: (abort: (node?: T) => never) => T,\n    oldState: State = this.state.clone(),\n  ):\n    | TryParse<T, null, false, false, null>\n    | TryParse<T | null, ParseError<any>, boolean, false, State>\n    | TryParse<T | null, null, false, true, State> {\n    const abortSignal: {\n      node: T | null;\n    } = { node: null };\n    try {\n      const node = fn((node = null) => {\n        abortSignal.node = node;\n        // eslint-disable-next-line @typescript-eslint/only-throw-error\n        throw abortSignal;\n      });\n      if (this.state.errors.length > oldState.errors.length) {\n        const failState = this.state;\n        this.state = oldState;\n        // tokensLength should be preserved during error recovery mode\n        // since the parser does not halt and will instead parse the\n        // remaining tokens\n        this.state.tokensLength = failState.tokensLength;\n        return {\n          node,\n          error: failState.errors[oldState.errors.length],\n          thrown: false,\n          aborted: false,\n          failState,\n        };\n      }\n\n      return {\n        node,\n        error: null,\n        thrown: false,\n        aborted: false,\n        failState: null,\n      };\n    } catch (error) {\n      const failState = this.state;\n      this.state = oldState;\n      if (error instanceof SyntaxError) {\n        // @ts-expect-error casting general syntax error to parse error\n        return { node: null, error, thrown: true, aborted: false, failState };\n      }\n      if (error === abortSignal) {\n        return {\n          node: abortSignal.node,\n          error: null,\n          thrown: false,\n          aborted: true,\n          failState,\n        };\n      }\n\n      throw error;\n    }\n  }\n\n  checkExpressionErrors(\n    refExpressionErrors: ExpressionErrors | undefined | null,\n    andThrow: boolean,\n  ) {\n    if (!refExpressionErrors) return false;\n    const {\n      shorthandAssignLoc,\n      doubleProtoLoc,\n      privateKeyLoc,\n      optionalParametersLoc,\n      voidPatternLoc,\n    } = refExpressionErrors;\n\n    const hasErrors =\n      !!shorthandAssignLoc ||\n      !!doubleProtoLoc ||\n      !!optionalParametersLoc ||\n      !!privateKeyLoc ||\n      !!voidPatternLoc;\n\n    if (!andThrow) {\n      return hasErrors;\n    }\n\n    if (shorthandAssignLoc != null) {\n      this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n    }\n\n    if (doubleProtoLoc != null) {\n      this.raise(Errors.DuplicateProto, doubleProtoLoc);\n    }\n\n    if (privateKeyLoc != null) {\n      this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n    }\n\n    if (optionalParametersLoc != null) {\n      this.unexpected(optionalParametersLoc);\n    }\n\n    if (voidPatternLoc != null) {\n      this.raise(Errors.InvalidCoverDiscardElement, voidPatternLoc);\n    }\n  }\n\n  /**\n   * Test if current token is a literal property name\n   * https://tc39.es/ecma262/#prod-LiteralPropertyName\n   * LiteralPropertyName:\n   *   IdentifierName\n   *   StringLiteral\n   *   NumericLiteral\n   *   BigIntLiteral\n   */\n  isLiteralPropertyName(): boolean {\n    return tokenIsLiteralPropertyName(this.state.type);\n  }\n\n  /**\n   * Test if given node is a PrivateName\n   * will be overridden in ESTree plugin\n   */\n  isPrivateName(node: Node): node is PrivateName {\n    return node.type === \"PrivateName\";\n  }\n\n  /**\n   * Return the string value of a given private name\n   * WITHOUT `#`\n   * @see {@link https://tc39.es/ecma262/#sec-static-semantics-stringvalue}\n   */\n  getPrivateNameSV(node: PrivateName): string {\n    return node.id.name;\n  }\n\n  /**\n   * Return whether the given node is a member/optional chain that\n   * contains a private name as its property\n   * It is overridden in ESTree plugin\n   */\n  hasPropertyAsPrivateName(node: Node): boolean {\n    return (\n      (node.type === \"MemberExpression\" ||\n        node.type === \"OptionalMemberExpression\") &&\n      this.isPrivateName(node.property)\n    );\n  }\n\n  isObjectProperty(\n    node: Node,\n  ): node is ObjectProperty | EstreePropertyDefinition {\n    return node.type === \"ObjectProperty\";\n  }\n\n  isObjectMethod(node: Node): node is ObjectMethod {\n    return node.type === \"ObjectMethod\";\n  }\n\n  initializeScopes(\n    this: Parser,\n    inModule: boolean = this.options.sourceType === \"module\",\n  ): () => void {\n    // Initialize state\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n\n    const oldExportedIdentifiers = this.exportedIdentifiers;\n    this.exportedIdentifiers = new Set();\n\n    // initialize scopes\n    const oldInModule = this.inModule;\n    this.inModule = inModule;\n\n    const oldScope = this.scope;\n    const ScopeHandler = this.getScopeHandler();\n    this.scope = new ScopeHandler(this, inModule);\n\n    const oldProdParam = this.prodParam;\n    this.prodParam = new ProductionParameterHandler();\n\n    const oldClassScope = this.classScope;\n    this.classScope = new ClassScopeHandler(this);\n\n    const oldExpressionScope = this.expressionScope;\n    this.expressionScope = new ExpressionScopeHandler(this);\n\n    return () => {\n      // Revert state\n      this.state.labels = oldLabels;\n      this.exportedIdentifiers = oldExportedIdentifiers;\n\n      // Revert scopes\n      this.inModule = oldInModule;\n      this.scope = oldScope;\n      this.prodParam = oldProdParam;\n      this.classScope = oldClassScope;\n      this.expressionScope = oldExpressionScope;\n    };\n  }\n\n  enterInitialScopes() {\n    let paramFlags = ParamKind.PARAM;\n    if (\n      this.inModule ||\n      this.optionFlags & OptionFlags.AllowAwaitOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_AWAIT;\n    }\n    if (this.optionFlags & OptionFlags.AllowYieldOutsideFunction) {\n      paramFlags |= ParamKind.PARAM_YIELD;\n    }\n    // The inModule flag ensures that the module block within a CommonJS source\n    // will be treated as an ES module.\n    const isCommonJS = !this.inModule && this.options.sourceType === \"commonjs\";\n    if (\n      isCommonJS ||\n      this.optionFlags & OptionFlags.AllowReturnOutsideFunction\n    ) {\n      paramFlags |= ParamKind.PARAM_RETURN;\n    }\n    this.prodParam.enter(paramFlags);\n    let scopeFlags = isCommonJS ? ScopeFlag.FUNCTION : ScopeFlag.PROGRAM;\n    if (this.optionFlags & OptionFlags.AllowNewTargetOutsideFunction) {\n      scopeFlags |= ScopeFlag.NEW_TARGET;\n    }\n    this.scope.enter(scopeFlags);\n  }\n\n  checkDestructuringPrivate(refExpressionErrors: ExpressionErrors) {\n    const { privateKeyLoc } = refExpressionErrors;\n    if (privateKeyLoc !== null) {\n      this.expectPlugin(\"destructuringPrivate\", privateKeyLoc);\n    }\n  }\n}\n\n/**\n * The ExpressionErrors is a context struct used to track ambiguous patterns\n * When we are sure the parsed pattern is a RHS, which means it is not a pattern,\n * we will throw on this position on invalid assign syntax, otherwise it will be reset to null\n *\n * Types of ExpressionErrors:\n *\n * - **shorthandAssignLoc**: track initializer `=` position\n * - **doubleProtoLoc**: track the duplicate `__proto__` key position\n * - **privateKeyLoc**: track private key `#p` position\n * - **optionalParametersLoc**: track the optional parameter (`?`).\n *   It's only used by typescript and flow plugins\n */\nexport class ExpressionErrors {\n  shorthandAssignLoc: Position | undefined | null = null;\n  doubleProtoLoc: Position | undefined | null = null;\n  privateKeyLoc: Position | undefined | null = null;\n  optionalParametersLoc: Position | undefined | null = null;\n  voidPatternLoc: Position | undefined | null = null;\n}\n","import UtilParser from \"./util.ts\";\nimport { SourceLocation, type Position } from \"../util/location.ts\";\nimport type {\n  Comment,\n  Node as NodeType,\n  NodeBase,\n  EstreeLiteral,\n  Identifier,\n  Placeholder,\n  StringLiteral,\n} from \"../types.ts\";\nimport { OptionFlags } from \"../options.ts\";\n\n// Start an AST node, attaching a start offset.\n\nclass Node implements NodeBase {\n  constructor(parser: UtilParser, pos: number, loc: Position) {\n    this.start = pos;\n    this.end = 0;\n    this.loc = new SourceLocation(loc);\n    if (parser?.optionFlags & OptionFlags.Ranges) this.range = [pos, 0];\n    if (parser?.filename) this.loc.filename = parser.filename;\n  }\n\n  type: string = \"\";\n  declare start: number;\n  declare end: number;\n  declare loc: SourceLocation;\n  declare range: [number, number];\n  declare leadingComments: Array<Comment>;\n  declare trailingComments: Array<Comment>;\n  declare innerComments: Array<Comment>;\n  declare extra: {\n    [key: string]: any;\n  };\n}\nconst NodePrototype = Node.prototype;\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-expect-error __clone is not defined in Node prototype\n  NodePrototype.__clone = function (): Node {\n    const newNode = new Node(undefined, this.start, this.loc.start);\n    const keys = Object.keys(this) as (keyof Node)[];\n    for (let i = 0, length = keys.length; i < length; i++) {\n      const key = keys[i];\n      // Do not clone comments that are already attached to the node\n      if (\n        key !== \"leadingComments\" &&\n        key !== \"trailingComments\" &&\n        key !== \"innerComments\"\n      ) {\n        // @ts-expect-error cloning this to newNode\n        newNode[key] = this[key];\n      }\n    }\n\n    return newNode;\n  };\n}\n\nexport type Undone<T extends NodeType> = Omit<T, \"type\">;\n\nexport abstract class NodeUtils extends UtilParser {\n  startNode<T extends NodeType = never>(): Undone<T> {\n    const loc = this.state.startLoc;\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  startNodeAt<T extends NodeType = never>(loc: Position): Undone<T> {\n    return new Node(this, loc.index, loc) as unknown as Undone<T>;\n  }\n\n  /** Start a new node with a previous node's location. */\n  startNodeAtNode<T extends NodeType = never>(\n    type: Undone<NodeType>,\n  ): Undone<T> {\n    return this.startNodeAt(type.loc.start);\n  }\n\n  // Finish an AST node, adding `type` and `end` properties.\n\n  finishNode<T extends NodeType>(node: Undone<T>, type: T[\"type\"]): T {\n    return this.finishNodeAt(node, type, this.state.lastTokEndLoc);\n  }\n\n  // Finish node at given position\n\n  finishNodeAt<T extends NodeType>(\n    node: Omit<T, \"type\">,\n    type: T[\"type\"],\n    endLoc: Position,\n  ): T {\n    if (process.env.NODE_ENV !== \"production\" && node.end > 0) {\n      throw new Error(\n        \"Do not call finishNode*() twice on the same node.\" +\n          \" Instead use resetEndLocation() or change type directly.\",\n      );\n    }\n    (node as T).type = type;\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range[1] = endLoc.index;\n    if (this.optionFlags & OptionFlags.AttachComment) {\n      this.processComment(node as T);\n    }\n    return node as T;\n  }\n\n  resetStartLocation(node: NodeBase, startLoc: Position): void {\n    node.start = startLoc.index;\n    node.loc.start = startLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range[0] = startLoc.index;\n  }\n\n  resetEndLocation(\n    node: NodeBase,\n    endLoc: Position = this.state.lastTokEndLoc,\n  ): void {\n    node.end = endLoc.index;\n    node.loc.end = endLoc;\n    if (this.optionFlags & OptionFlags.Ranges) node.range[1] = endLoc.index;\n  }\n\n  /**\n   * Reset the start location of node to the start location of locationNode\n   */\n  resetStartLocationFromNode(node: NodeBase, locationNode: NodeBase): void {\n    this.resetStartLocation(node, locationNode.loc.start);\n  }\n\n  castNodeTo<T extends NodeType[\"type\"]>(\n    node: NodeType,\n    type: T,\n  ): Extract<NodeType, { type: T }> {\n    node.type = type;\n    return node as Extract<NodeType, { type: T }>;\n  }\n\n  cloneIdentifier<T extends Identifier | Placeholder>(node: T): T {\n    // We don't need to clone `typeAnnotations` and `optional`: because\n    // cloneIdentifier is only used in object shorthand and named import/export.\n    // Neither of them allow type annotations after the identifier or optional identifier\n    const { type, start, end, loc, range, name } = node;\n    const cloned = Object.create(NodePrototype);\n    cloned.type = type;\n    cloned.start = start;\n    cloned.end = end;\n    cloned.loc = loc;\n    cloned.range = range;\n    cloned.name = name;\n    if (node.extra) cloned.extra = node.extra;\n    return cloned;\n  }\n\n  cloneStringLiteral<T extends StringLiteral | EstreeLiteral | Placeholder>(\n    node: T,\n  ): T {\n    const { type, start, end, loc, range, extra } = node;\n    const cloned = Object.create(NodePrototype);\n    cloned.type = type;\n    cloned.start = start;\n    cloned.end = end;\n    cloned.loc = loc;\n    cloned.range = range;\n    cloned.extra = extra;\n    cloned.value = (node as StringLiteral).value;\n    return cloned;\n  }\n}\n","import * as charCodes from \"charcodes\";\nimport { tt, type TokenType } from \"../tokenizer/types.ts\";\nimport type {\n  AssignmentPattern,\n  TSParameterProperty,\n  Decorator,\n  Expression,\n  Identifier,\n  Node,\n  Pattern,\n  RestElement,\n  SpreadElement,\n  ObjectOrClassMember,\n  ClassMember,\n  ObjectMember,\n  TsNamedTypeElementBase,\n  PrivateName,\n  ObjectExpression,\n  ObjectPattern,\n  ArrayPattern,\n  AssignmentProperty,\n  Assignable,\n  VoidPattern,\n} from \"../types.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport {\n  isStrictBindOnlyReservedWord,\n  isStrictBindReservedWord,\n} from \"../util/identifier.ts\";\nimport { NodeUtils, type Undone } from \"./node.ts\";\nimport { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { ExpressionErrors } from \"./util.ts\";\nimport { Errors, type LValAncestor } from \"../parse-error.ts\";\nimport type Parser from \"./index.ts\";\n\nconst unwrapParenthesizedExpression = (node: Node): Node => {\n  return node.type === \"ParenthesizedExpression\"\n    ? unwrapParenthesizedExpression(node.expression)\n    : node;\n};\n\nexport const enum ParseBindingListFlags {\n  ALLOW_EMPTY = 1 << 0,\n  IS_FUNCTION_PARAMS = 1 << 1,\n  IS_CONSTRUCTOR_PARAMS = 1 << 2,\n}\n\nexport default abstract class LValParser extends NodeUtils {\n  // Forward-declaration: defined in expression.js\n  abstract parseIdentifier(liberal?: boolean): Identifier;\n  abstract parseMaybeAssign(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): Expression;\n\n  abstract parseMaybeAssignAllowIn(\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): Expression;\n\n  abstract parseObjectLike<T extends ObjectPattern | ObjectExpression>(\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): T;\n  abstract parseObjPropValue(\n    prop: any,\n    startLoc: Position | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void;\n  abstract parsePropertyName(\n    prop: ObjectOrClassMember | ClassMember | TsNamedTypeElementBase,\n  ): void;\n  abstract parsePrivateName(): PrivateName;\n  // Forward-declaration: defined in statement.js\n  abstract parseDecorator(): Decorator;\n\n  /**\n   * Convert existing expression atom to assignable pattern\n   * if possible. Also checks invalid destructuring targets:\n   *\n   * - Parenthesized Destructuring patterns\n   * - RestElement is not the last element\n   * - Missing `=` in assignment pattern\n   *\n   * NOTE: There is a corresponding \"isAssignable\" method.\n   * When this one is updated, please check if also that one needs to be updated.\n   *\n   * @param node The expression atom\n   * @param isLHS Whether we are parsing a LeftHandSideExpression.\n   *              If isLHS is `true`, the following cases are allowed: `[(a)] = [0]`, `[(a.b)] = [0]`\n   *              If isLHS is `false`, we are in an arrow function parameters list.\n   */\n  toAssignable(node: Node, isLHS: boolean = false): asserts node is Assignable {\n    let parenthesized = undefined;\n    if (node.type === \"ParenthesizedExpression\" || node.extra?.parenthesized) {\n      parenthesized = unwrapParenthesizedExpression(node);\n      if (isLHS) {\n        // an LHS can be reinterpreted to a binding pattern but not vice versa.\n        // therefore a parenthesized identifier is ambiguous until we are sure it is an assignment expression\n        // i.e. `([(a) = []] = []) => {}`\n        // see also `recordArrowParameterBindingError` signature in packages/babel-parser/src/util/expression-scope.js\n        if (parenthesized.type === \"Identifier\") {\n          this.expressionScope.recordArrowParameterBindingError(\n            Errors.InvalidParenthesizedAssignment,\n            node,\n          );\n        } else if (\n          parenthesized.type !== \"MemberExpression\" &&\n          !this.isOptionalMemberExpression(parenthesized)\n        ) {\n          // A parenthesized member expression can be in LHS but not in pattern.\n          // If the LHS is later interpreted as a pattern, `checkLVal` will throw for member expression binding\n          // i.e. `([(a.b) = []] = []) => {}`\n          this.raise(Errors.InvalidParenthesizedAssignment, node);\n        }\n      } else {\n        this.raise(Errors.InvalidParenthesizedAssignment, node);\n      }\n    }\n\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n      case \"VoidPattern\":\n        break;\n\n      case \"ObjectExpression\":\n        this.castNodeTo(node, \"ObjectPattern\");\n        for (\n          let i = 0, length = node.properties.length, last = length - 1;\n          i < length;\n          i++\n        ) {\n          const prop = node.properties[i];\n          const isLast = i === last;\n          this.toAssignableObjectExpressionProp(prop, isLast, isLHS);\n\n          if (\n            isLast &&\n            (prop as Node).type === \"RestElement\" &&\n            node.extra?.trailingCommaLoc\n          ) {\n            this.raise(Errors.RestTrailingComma, node.extra.trailingCommaLoc);\n          }\n        }\n        break;\n\n      case \"ObjectProperty\": {\n        const { key, value } = node;\n        if (this.isPrivateName(key)) {\n          this.classScope.usePrivateName(\n            this.getPrivateNameSV(key),\n            key.loc.start,\n          );\n        }\n        this.toAssignable(value, isLHS);\n        break;\n      }\n\n      case \"SpreadElement\": {\n        throw new Error(\n          \"Internal @babel/parser error (this is a bug, please report it).\" +\n            \" SpreadElement should be converted by .toAssignable's caller.\",\n        );\n      }\n\n      case \"ArrayExpression\":\n        this.castNodeTo(node, \"ArrayPattern\");\n        this.toAssignableList(\n          node.elements,\n          node.extra?.trailingCommaLoc,\n          isLHS,\n        );\n        break;\n\n      case \"AssignmentExpression\":\n        if (node.operator !== \"=\") {\n          this.raise(Errors.MissingEqInAssignment, node.left.loc.end);\n        }\n\n        this.castNodeTo(node, \"AssignmentPattern\");\n        delete node.operator;\n        if (node.left.type === \"VoidPattern\") {\n          this.raise(Errors.VoidPatternInitializer, node.left);\n        }\n        this.toAssignable(node.left, isLHS);\n        break;\n\n      case \"ParenthesizedExpression\":\n        /*::invariant (parenthesized !== undefined) */\n        this.toAssignable(parenthesized, isLHS);\n        break;\n\n      default:\n      // We don't know how to deal with this node. It will\n      // be reported by a later call to checkLVal\n    }\n  }\n\n  toAssignableObjectExpressionProp(\n    prop: Node,\n    isLast: boolean,\n    isLHS: boolean,\n  ) {\n    if (prop.type === \"ObjectMethod\") {\n      this.raise(\n        prop.kind === \"get\" || prop.kind === \"set\"\n          ? Errors.PatternHasAccessor\n          : Errors.PatternHasMethod,\n        prop.key,\n      );\n    } else if (prop.type === \"SpreadElement\") {\n      this.castNodeTo(prop, \"RestElement\");\n      const arg = prop.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ false);\n      this.toAssignable(arg, isLHS);\n\n      if (!isLast) {\n        this.raise(Errors.RestTrailingComma, prop);\n      }\n    } else {\n      this.toAssignable(prop, isLHS);\n    }\n  }\n\n  // Convert list of expression atoms to binding list.\n\n  toAssignableList(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n      | null\n    )[],\n    trailingCommaLoc: Position | undefined | null,\n    isLHS: boolean,\n  ): void {\n    const end = exprList.length - 1;\n\n    for (let i = 0; i <= end; i++) {\n      const elt = exprList[i];\n      if (!elt) continue;\n\n      this.toAssignableListItem(exprList, i, isLHS);\n\n      if (elt.type === \"RestElement\") {\n        if (i < end) {\n          this.raise(Errors.RestTrailingComma, elt);\n        } else if (trailingCommaLoc) {\n          this.raise(Errors.RestTrailingComma, trailingCommaLoc);\n        }\n      }\n    }\n  }\n\n  toAssignableListItem(\n    exprList: (\n      | Expression\n      | SpreadElement\n      | RestElement\n      | VoidPattern\n      | AssignmentPattern\n    )[],\n    index: number,\n    isLHS: boolean,\n  ): void {\n    const node = exprList[index];\n    if (node.type === \"SpreadElement\") {\n      this.castNodeTo(node, \"RestElement\");\n      const arg = node.argument;\n      this.checkToRestConversion(arg, /* allowPattern */ true);\n      this.toAssignable(arg, isLHS);\n    } else {\n      this.toAssignable(node, isLHS);\n    }\n  }\n\n  isAssignable(node: Node, isBinding?: boolean): boolean {\n    switch (node.type) {\n      case \"Identifier\":\n      case \"ObjectPattern\":\n      case \"ArrayPattern\":\n      case \"AssignmentPattern\":\n      case \"RestElement\":\n      case \"VoidPattern\":\n        return true;\n\n      case \"ObjectExpression\": {\n        const last = node.properties.length - 1;\n        return node.properties.every((prop, i) => {\n          return (\n            prop.type !== \"ObjectMethod\" &&\n            (i === last || prop.type !== \"SpreadElement\") &&\n            this.isAssignable(prop)\n          );\n        });\n      }\n\n      case \"ObjectProperty\":\n        return this.isAssignable(node.value);\n\n      case \"SpreadElement\":\n        return this.isAssignable(node.argument);\n\n      case \"ArrayExpression\":\n        return node.elements.every(\n          element => element === null || this.isAssignable(element),\n        );\n\n      case \"AssignmentExpression\":\n        return node.operator === \"=\";\n\n      case \"ParenthesizedExpression\":\n        return this.isAssignable(node.expression);\n\n      case \"MemberExpression\":\n      case \"OptionalMemberExpression\":\n        return !isBinding;\n\n      default:\n        return false;\n    }\n  }\n\n  // Convert list of expression atoms to a list of\n\n  toReferencedList(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern\n        >,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isParenthesizedExpr?: boolean,\n  ):\n    | ReadonlyArray<\n        Expression | SpreadElement | VoidPattern | AssignmentPattern\n      >\n    | ReadonlyArray<\n        Expression | RestElement | VoidPattern | AssignmentPattern\n      > {\n    return exprList;\n  }\n\n  toReferencedListDeep(\n    exprList:\n      | ReadonlyArray<\n          Expression | SpreadElement | VoidPattern | AssignmentPattern\n        >\n      | ReadonlyArray<\n          Expression | RestElement | VoidPattern | AssignmentPattern\n        >,\n    isParenthesizedExpr?: boolean,\n  ): void {\n    this.toReferencedList(exprList, isParenthesizedExpr);\n\n    for (const expr of exprList) {\n      if (expr?.type === \"ArrayExpression\") {\n        this.toReferencedListDeep(expr.elements);\n      }\n    }\n  }\n\n  // Parses spread element.\n\n  parseSpread(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): SpreadElement {\n    const node = this.startNode<SpreadElement>();\n    this.next();\n    node.argument = this.parseMaybeAssignAllowIn(\n      refExpressionErrors,\n      undefined,\n    );\n    return this.finishNode(node, \"SpreadElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestElement\n  parseRestBinding(this: Parser): RestElement {\n    const node = this.startNode<RestElement>();\n    this.next(); // eat `...`\n    const argument = this.parseBindingAtom();\n    if (argument.type === \"VoidPattern\") {\n      this.raise(Errors.UnexpectedVoidPattern, argument);\n    }\n    node.argument = argument;\n    return this.finishNode(node, \"RestElement\");\n  }\n\n  // Parses lvalue (assignable) atom.\n  parseBindingAtom(this: Parser): Pattern {\n    // https://tc39.es/ecma262/#prod-BindingPattern\n    switch (this.state.type) {\n      case tt.bracketL: {\n        const node = this.startNode<ArrayPattern>();\n        this.next();\n        node.elements = this.parseBindingList(\n          tt.bracketR,\n          charCodes.rightSquareBracket,\n          ParseBindingListFlags.ALLOW_EMPTY,\n        );\n        return this.finishNode(node, \"ArrayPattern\");\n      }\n\n      case tt.braceL:\n        return this.parseObjectLike(tt.braceR, true);\n\n      case tt._void:\n        return this.parseVoidPattern(null);\n    }\n\n    // https://tc39.es/ecma262/#prod-BindingIdentifier\n    return this.parseIdentifier();\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElementList\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.ALLOW_EMPTY,\n  ): Array<Pattern>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags.IS_FUNCTION_PARAMS,\n  ): Array<Pattern | TSParameterProperty>;\n  parseBindingList(\n    this: Parser,\n    close: TokenType,\n    closeCharCode: (typeof charCodes)[keyof typeof charCodes],\n    flags: ParseBindingListFlags,\n  ): Array<Pattern | TSParameterProperty> {\n    const allowEmpty = flags & ParseBindingListFlags.ALLOW_EMPTY;\n\n    const elts: Array<Pattern | TSParameterProperty> = [];\n    let first = true;\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n      }\n      if (allowEmpty && this.match(tt.comma)) {\n        elts.push(null);\n      } else if (this.eat(close)) {\n        break;\n      } else if (this.match(tt.ellipsis)) {\n        let rest: Pattern = this.parseRestBinding();\n        if (\n          (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n          flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n        ) {\n          rest = this.parseFunctionParamType(rest);\n        }\n        elts.push(rest);\n        if (!this.checkCommaAfterRest(closeCharCode)) {\n          this.expect(close);\n          break;\n        }\n      } else {\n        const decorators = [];\n        if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n          if (this.match(tt.at) && this.hasPlugin(\"decorators\")) {\n            this.raise(\n              Errors.UnsupportedParameterDecorator,\n              this.state.startLoc,\n            );\n          }\n          // invariant: hasPlugin(\"decorators-legacy\")\n          while (this.match(tt.at)) {\n            decorators.push(this.parseDecorator());\n          }\n        }\n        elts.push(this.parseBindingElement(flags, decorators));\n      }\n    }\n    return elts;\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingRestProperty\n  parseBindingRestProperty(\n    this: Parser,\n    prop: Undone<RestElement>,\n  ): RestElement {\n    this.next(); // eat '...'\n    if (this.hasPlugin(\"discardBinding\") && this.match(tt._void)) {\n      prop.argument = this.parseVoidPattern(null);\n      this.raise(Errors.UnexpectedVoidPattern, prop.argument);\n    } else {\n      // Don't use parseRestBinding() as we only allow Identifier here.\n      prop.argument = this.parseIdentifier();\n    }\n    this.checkCommaAfterRest(charCodes.rightCurlyBrace);\n    return this.finishNode(prop, \"RestElement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingProperty\n  parseBindingProperty(this: Parser): AssignmentProperty | RestElement {\n    const { type, startLoc } = this.state;\n    if (type === tt.ellipsis) {\n      return this.parseBindingRestProperty(this.startNode());\n    }\n\n    const prop = this.startNode<AssignmentProperty>();\n    if (type === tt.privateName) {\n      this.expectPlugin(\"destructuringPrivate\", startLoc);\n      this.classScope.usePrivateName(this.state.value, startLoc);\n      prop.key = this.parsePrivateName();\n    } else {\n      this.parsePropertyName(prop);\n    }\n    prop.method = false;\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      false /* isGenerator */,\n      false /* isAsync */,\n      true /* isPattern */,\n      false /* isAccessor */,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseBindingElement(\n    this: Parser,\n    flags: ParseBindingListFlags,\n    decorators: Decorator[],\n  ): Pattern | TSParameterProperty {\n    const left = this.parseMaybeDefault();\n    if (\n      (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"flow\")) ||\n      flags & ParseBindingListFlags.IS_FUNCTION_PARAMS\n    ) {\n      this.parseFunctionParamType(left);\n    }\n    if (decorators.length) {\n      left.decorators = decorators;\n      this.resetStartLocationFromNode(left, decorators[0]);\n    }\n    const elt = this.parseMaybeDefault(left.loc.start, left);\n    return elt;\n  }\n\n  // Used by flow/typescript plugin to add type annotations to binding elements\n  parseFunctionParamType(param: Pattern): Pattern {\n    return param;\n  }\n\n  // Parses assignment pattern around given atom if possible.\n  // https://tc39.es/ecma262/#prod-BindingElement\n  parseMaybeDefault<P extends Pattern>(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: P,\n  ): P | AssignmentPattern;\n  parseMaybeDefault(\n    this: Parser,\n    startLoc?: Position | null,\n    left?: Pattern | null,\n  ): Pattern {\n    startLoc ??= this.state.startLoc;\n    left = left ?? this.parseBindingAtom();\n    if (!this.eat(tt.eq)) return left;\n\n    const node = this.startNodeAt<AssignmentPattern>(startLoc);\n    if (left.type === \"VoidPattern\") {\n      this.raise(Errors.VoidPatternInitializer, left);\n    }\n    node.left = left;\n    node.right = this.parseMaybeAssignAllowIn();\n    return this.finishNode(node, \"AssignmentPattern\");\n  }\n  /**\n   * Return information use in determining whether a Node of a given type is an LVal,\n   * possibly given certain additional context information.\n   *\n   * Subclasser notes: This method has kind of a lot of mixed, but related,\n   * responsibilities. If we can definitively determine with the information\n   * provided that this either *is* or *isn't* a valid `LVal`, then the return\n   * value is easy: just return `true` or `false`. However, if it is a valid\n   * LVal *ancestor*, and thus its descendants must be subsequently visited to\n   * continue the \"investigation\", then this method should return the relevant\n   * child key as a `string`. In some special cases, you additionally want to\n   * convey that this node should be treated as if it were parenthesized. In\n   * that case, a tuple of [key: string, parenthesized: boolean] is returned.\n   * The `string`-only return option is actually just a shorthand for:\n   * `[key: string, parenthesized: false]`.\n   *\n   * @param type A Node `type` string\n   * @param isUnparenthesizedInAssign\n   *        Whether the node in question is unparenthesized and its parent\n   *        is either an assignment pattern or an assignment expression.\n   * @param binding\n   *        The binding operation that is being considered for this potential\n   *        LVal.\n   * @returns `true` or `false` if we can immediately determine whether the node\n   *          type in question can be treated as an `LVal`.\n   *          A `string` key to traverse if we must check this child.\n   *          A `[string, boolean]` tuple if we need to check this child and\n   *          treat is as parenthesized.\n   */\n  isValidLVal(\n    type: string,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    isUnparenthesizedInAssign: boolean,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    binding: BindingFlag,\n  ): string | boolean | [string, boolean] {\n    switch (type) {\n      case \"AssignmentPattern\":\n        return \"left\";\n      case \"RestElement\":\n        return \"argument\";\n      case \"ObjectProperty\":\n        return \"value\";\n      case \"ParenthesizedExpression\":\n        return \"expression\";\n      case \"ArrayPattern\":\n        return \"elements\";\n      case \"ObjectPattern\":\n        return \"properties\";\n      case \"VoidPattern\":\n        return true;\n    }\n    return false;\n  }\n\n  // Overridden by the estree plugin\n  isOptionalMemberExpression(expression: Node): boolean {\n    return expression.type === \"OptionalMemberExpression\";\n  }\n\n  /**\n   * Verify that a target expression is an lval (something that can be assigned to).\n   *\n   * @param expression The expression in question to check.\n   * @param ancestor\n   *        The relevant ancestor to provide context information for the error\n   *        if the check fails.\n   * @param binding\n   *        The desired binding type. If the given expression is an identifier\n   *        and `binding` is not `BindingFlag.TYPE_NONE`, `checkLVal` will register binding\n   *        to the parser scope See also `src/util/scopeflags.js`\n   * @param checkClashes\n   *        An optional string set to check if an identifier name is included.\n   *        `checkLVal` will add checked identifier name to `checkClashes` It is\n   *        used in tracking duplicates in function parameter lists. If it is\n   *        false, `checkLVal` will skip duplicate checks\n   * @param strictModeChanged\n   *        Whether an identifier has been parsed in a sloppy context but should\n   *        be reinterpreted as strict-mode. e.g. `(arguments) => { \"use strict \"}`\n   * @param hasParenthesizedAncestor\n   *        This is only used internally during recursive calls, and you should\n   *        not have to set it yourself.\n   */\n\n  checkLVal(\n    expression:\n      | Expression\n      | ObjectMember\n      | RestElement\n      | Pattern\n      | TSParameterProperty,\n    ancestor: LValAncestor,\n    binding: BindingFlag = BindingFlag.TYPE_NONE,\n    checkClashes: Set<string> | false = false,\n    strictModeChanged: boolean = false,\n    hasParenthesizedAncestor: boolean = false,\n  ): void {\n    const type = expression.type;\n\n    // If we find here an ObjectMethod, it's because this was originally\n    // an ObjectExpression which has then been converted.\n    // toAssignable already reported this error with a nicer message.\n    if (this.isObjectMethod(expression)) return;\n\n    const isOptionalMemberExpression =\n      this.isOptionalMemberExpression(expression);\n\n    if (isOptionalMemberExpression || type === \"MemberExpression\") {\n      if (isOptionalMemberExpression) {\n        this.expectPlugin(\"optionalChainingAssign\", expression.loc.start);\n        if (ancestor.type !== \"AssignmentExpression\") {\n          this.raise(Errors.InvalidLhsOptionalChaining, expression, {\n            ancestor,\n          });\n        }\n      }\n\n      if (binding !== BindingFlag.TYPE_NONE) {\n        this.raise(Errors.InvalidPropertyBindingPattern, expression);\n      }\n      return;\n    }\n\n    if (type === \"Identifier\") {\n      this.checkIdentifier(expression, binding, strictModeChanged);\n\n      const { name } = expression;\n\n      if (checkClashes) {\n        if (checkClashes.has(name)) {\n          this.raise(Errors.ParamDupe, expression);\n        } else {\n          checkClashes.add(name);\n        }\n      }\n\n      return;\n    } else if (type === \"VoidPattern\" && ancestor.type === \"CatchClause\") {\n      this.raise(Errors.VoidPatternCatchClauseParam, expression);\n    }\n\n    const validity = this.isValidLVal(\n      type,\n      !(hasParenthesizedAncestor || expression.extra?.parenthesized) &&\n        ancestor.type === \"AssignmentExpression\",\n      binding,\n    );\n\n    if (validity === true) return;\n    if (validity === false) {\n      const ParseErrorClass =\n        binding === BindingFlag.TYPE_NONE\n          ? Errors.InvalidLhs\n          : Errors.InvalidLhsBinding;\n\n      this.raise(ParseErrorClass, expression, { ancestor });\n      return;\n    }\n\n    let key: string, isParenthesizedExpression: boolean;\n    if (typeof validity === \"string\") {\n      key = validity;\n      isParenthesizedExpression = type === \"ParenthesizedExpression\";\n    } else {\n      [key, isParenthesizedExpression] = validity;\n    }\n\n    const nextAncestor =\n      type === \"ArrayPattern\" || type === \"ObjectPattern\"\n        ? ({ type } as const)\n        : ancestor;\n\n    // @ts-expect-error key may not index expression.\n    const val = expression[key];\n    if (Array.isArray(val)) {\n      for (const child of val) {\n        if (child) {\n          this.checkLVal(\n            child,\n            nextAncestor,\n            binding,\n            checkClashes,\n            strictModeChanged,\n            isParenthesizedExpression,\n          );\n        }\n      }\n    } else if (val) {\n      this.checkLVal(\n        val,\n        nextAncestor,\n        binding,\n        checkClashes,\n        strictModeChanged,\n        isParenthesizedExpression,\n      );\n    }\n  }\n\n  checkIdentifier(\n    at: Identifier,\n    bindingType: BindingFlag,\n    strictModeChanged: boolean = false,\n  ) {\n    if (\n      this.state.strict &&\n      (strictModeChanged\n        ? isStrictBindReservedWord(at.name, this.inModule)\n        : isStrictBindOnlyReservedWord(at.name))\n    ) {\n      if (bindingType === BindingFlag.TYPE_NONE) {\n        this.raise(Errors.StrictEvalArguments, at, { referenceName: at.name });\n      } else {\n        this.raise(Errors.StrictEvalArgumentsBinding, at, {\n          bindingName: at.name,\n        });\n      }\n    }\n\n    if (bindingType & BindingFlag.FLAG_NO_LET_IN_LEXICAL && at.name === \"let\") {\n      this.raise(Errors.LetInLexicalBinding, at);\n    }\n\n    if (!(bindingType & BindingFlag.TYPE_NONE)) {\n      this.declareNameFromIdentifier(at, bindingType);\n    }\n  }\n\n  declareNameFromIdentifier(identifier: Identifier, binding: BindingFlag) {\n    this.scope.declareName(identifier.name, binding, identifier.loc.start);\n  }\n\n  checkToRestConversion(node: Node, allowPattern: boolean): void {\n    switch (node.type) {\n      case \"ParenthesizedExpression\":\n        this.checkToRestConversion(node.expression, allowPattern);\n        break;\n      case \"Identifier\":\n      case \"MemberExpression\":\n        break;\n      case \"ArrayExpression\":\n      case \"ObjectExpression\":\n        if (allowPattern) break;\n      /* falls through */\n      default:\n        this.raise(Errors.InvalidRestAssignmentPattern, node);\n    }\n  }\n\n  checkCommaAfterRest(\n    close: (typeof charCodes)[keyof typeof charCodes],\n  ): boolean {\n    if (!this.match(tt.comma)) {\n      return false;\n    }\n\n    this.raise(\n      this.lookaheadCharCode() === close\n        ? Errors.RestTrailingComma\n        : Errors.ElementAfterRest,\n      this.state.startLoc,\n    );\n\n    return true;\n  }\n}\n","import type State from \"../../tokenizer/state.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsTSDeclarationStart,\n  tokenIsTSTypeOperator,\n  tokenOperatorPrecedence,\n  tokenIsKeywordOrIdentifier,\n  tt,\n  type TokenType,\n  tokenIsTemplate,\n  tokenCanStartExpression,\n} from \"../../tokenizer/types.ts\";\nimport { types as tc } from \"../../tokenizer/context.ts\";\nimport type * as N from \"../../types.ts\";\nimport type { Position } from \"../../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../../util/location.ts\";\nimport type Parser from \"../../parser/index.ts\";\nimport { ScopeFlag, BindingFlag } from \"../../util/scopeflags.ts\";\nimport TypeScriptScopeHandler from \"./scope.ts\";\nimport * as charCodes from \"charcodes\";\nimport type { ExpressionErrors } from \"../../parser/util.ts\";\nimport type { ParseStatementFlag } from \"../../parser/statement.ts\";\nimport { ParamKind } from \"../../util/production-parameter.ts\";\nimport { Errors, ParseErrorEnum } from \"../../parse-error.ts\";\nimport type { Undone } from \"../../parser/node.ts\";\nimport type { ClassWithMixin, IJSXParserMixin } from \"../jsx/index.ts\";\nimport { ParseBindingListFlags } from \"../../parser/lval.ts\";\nimport { OptionFlags } from \"../../options.ts\";\n\ntype TsModifier =\n  | \"readonly\"\n  | \"abstract\"\n  | \"declare\"\n  | \"static\"\n  | \"override\"\n  | \"const\"\n  | N.Accessibility\n  | N.VarianceAnnotations;\n\nfunction nonNull<T>(x?: T | null): T {\n  if (x == null) {\n    throw new Error(`Unexpected ${x} value.`);\n  }\n  return x;\n}\n\nfunction assert(x: boolean): void {\n  if (!x) {\n    throw new Error(\"Assert fail\");\n  }\n}\n\ntype ParsingContext =\n  | \"EnumMembers\"\n  | \"HeritageClauseElement\"\n  | \"TupleElementTypes\"\n  | \"TypeMembers\"\n  | \"TypeParametersOrArguments\";\n\ntype ModifierBase = {\n  accessibility?: N.Accessibility;\n} & {\n  [key in TsModifier]?: boolean | undefined | null;\n};\n\n/* eslint sort-keys: \"error\" */\nconst TSErrors = ParseErrorEnum`typescript`({\n  AbstractMethodHasImplementation: ({ methodName }: { methodName: string }) =>\n    `Method '${methodName}' cannot have an implementation because it is marked abstract.`,\n  AbstractPropertyHasInitializer: ({\n    propertyName,\n  }: {\n    propertyName: string;\n  }) =>\n    `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,\n  AccessorCannotBeOptional:\n    \"An 'accessor' property cannot be declared optional.\",\n  AccessorCannotDeclareThisParameter:\n    \"'get' and 'set' accessors cannot declare 'this' parameters.\",\n  AccessorCannotHaveTypeParameters: \"An accessor cannot have type parameters.\",\n  ClassMethodHasDeclare: \"Class methods cannot have the 'declare' modifier.\",\n  ClassMethodHasReadonly: \"Class methods cannot have the 'readonly' modifier.\",\n  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference:\n    \"A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.\",\n  ConstructorHasTypeParameters:\n    \"Type parameters cannot appear on a constructor declaration.\",\n  DeclareAccessor: ({ kind }: { kind: \"get\" | \"set\" }) =>\n    `'declare' is not allowed in ${kind}ters.`,\n  DeclareClassFieldHasInitializer:\n    \"Initializers are not allowed in ambient contexts.\",\n  DeclareFunctionHasImplementation:\n    \"An implementation cannot be declared in ambient contexts.\",\n  DuplicateAccessibilityModifier: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) => `Accessibility modifier already seen: '${modifier}'.`,\n  DuplicateModifier: ({ modifier }: { modifier: TsModifier }) =>\n    `Duplicate modifier: '${modifier}'.`,\n  // `token` matches the terminology used by typescript:\n  // https://github.com/microsoft/TypeScript/blob/main/src/compiler/types.ts#L2915\n  EmptyHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list cannot be empty.`,\n  EmptyTypeArguments: \"Type argument list cannot be empty.\",\n  EmptyTypeParameters: \"Type parameter list cannot be empty.\",\n  ExpectedAmbientAfterExportDeclare:\n    \"'export declare' must be followed by an ambient declaration.\",\n  ImportAliasHasImportType: \"An import alias can not use 'import type'.\",\n  ImportReflectionHasImportType:\n    \"An `import module` declaration can not use `type` modifier\",\n  IncompatibleModifiers: ({\n    modifiers,\n  }: {\n    modifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,\n  IndexSignatureHasAbstract:\n    \"Index signatures cannot have the 'abstract' modifier.\",\n  IndexSignatureHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Index signatures cannot have an accessibility modifier ('${modifier}').`,\n  IndexSignatureHasDeclare:\n    \"Index signatures cannot have the 'declare' modifier.\",\n  IndexSignatureHasOverride:\n    \"'override' modifier cannot appear on an index signature.\",\n  IndexSignatureHasStatic:\n    \"Index signatures cannot have the 'static' modifier.\",\n  InitializerNotAllowedInAmbientContext:\n    \"Initializers are not allowed in ambient contexts.\",\n  InvalidHeritageClauseType: ({ token }: { token: \"extends\" | \"implements\" }) =>\n    `'${token}' list can only include identifiers or qualified-names with optional type arguments.`,\n  InvalidModifierOnAwaitUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on an await using declaration.`,\n  InvalidModifierOnTypeMember: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type member.`,\n  InvalidModifierOnTypeParameter: ({ modifier }: { modifier: TsModifier }) =>\n    `'${modifier}' modifier cannot appear on a type parameter.`,\n  InvalidModifierOnTypeParameterPositions: ({\n    modifier,\n  }: {\n    modifier: TsModifier;\n  }) =>\n    `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,\n\n  InvalidModifierOnUsingDeclaration: (modifier: TsModifier) =>\n    `'${modifier}' modifier cannot appear on a using declaration.`,\n  InvalidModifiersOrder: ({\n    orderedModifiers,\n  }: {\n    orderedModifiers: [TsModifier, TsModifier];\n  }) =>\n    `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,\n  InvalidPropertyAccessAfterInstantiationExpression:\n    \"Invalid property access after an instantiation expression. \" +\n    \"You can either wrap the instantiation expression in parentheses, or delete the type arguments.\",\n  InvalidTupleMemberLabel:\n    \"Tuple members must be labeled with a simple identifier.\",\n  MissingInterfaceName:\n    \"'interface' declarations must be followed by an identifier.\",\n  NonAbstractClassHasAbstractMethod:\n    \"Abstract methods can only appear within an abstract class.\",\n  NonClassMethodPropertyHasAbstractModifier:\n    \"'abstract' modifier can only appear on a class, method, or property declaration.\",\n  OptionalTypeBeforeRequired:\n    \"A required element cannot follow an optional element.\",\n  OverrideNotInSubClass:\n    \"This member cannot have an 'override' modifier because its containing class does not extend another class.\",\n  PatternIsOptional:\n    \"A binding pattern parameter cannot be optional in an implementation signature.\",\n  PrivateElementHasAbstract:\n    \"Private elements cannot have the 'abstract' modifier.\",\n  PrivateElementHasAccessibility: ({\n    modifier,\n  }: {\n    modifier: N.Accessibility;\n  }) =>\n    `Private elements cannot have an accessibility modifier ('${modifier}').`,\n  ReadonlyForMethodSignature:\n    \"'readonly' modifier can only appear on a property declaration or index signature.\",\n  ReservedArrowTypeParam:\n    \"This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `<T,>() => ...`.\",\n  ReservedTypeAssertion:\n    \"This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.\",\n  SetAccessorCannotHaveOptionalParameter:\n    \"A 'set' accessor cannot have an optional parameter.\",\n  SetAccessorCannotHaveRestParameter:\n    \"A 'set' accessor cannot have rest parameter.\",\n  SetAccessorCannotHaveReturnType:\n    \"A 'set' accessor cannot have a return type annotation.\",\n  SingleTypeParameterWithoutTrailingComma: ({\n    typeParameterName,\n  }: {\n    typeParameterName: string;\n  }) =>\n    `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,\n  StaticBlockCannotHaveModifier:\n    \"Static class blocks cannot have any modifier.\",\n  TupleOptionalAfterType:\n    \"A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).\",\n  TypeAnnotationAfterAssign:\n    \"Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.\",\n  TypeImportCannotSpecifyDefaultAndNamed:\n    \"A type-only import can specify a default import or named bindings, but not both.\",\n  TypeModifierIsUsedInTypeExports:\n    \"The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.\",\n  TypeModifierIsUsedInTypeImports:\n    \"The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.\",\n  UnexpectedParameterModifier:\n    \"A parameter property is only allowed in a constructor implementation.\",\n  UnexpectedReadonly:\n    \"'readonly' type modifier is only permitted on array and tuple literal types.\",\n  UnexpectedTypeAnnotation: \"Did not expect a type annotation here.\",\n  UnexpectedTypeCastInParameter: \"Unexpected type cast in parameter position.\",\n  UnsupportedImportTypeArgument:\n    \"Argument in a type import must be a string literal.\",\n  UnsupportedParameterPropertyKind:\n    \"A parameter property may not be declared using a binding pattern.\",\n  UnsupportedSignatureParameterKind: ({ type }: { type: string }) =>\n    `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`,\n  UsingDeclarationInAmbientContext: (kind: \"using\" | \"await using\") =>\n    `'${kind}' declarations are not allowed in ambient contexts.`,\n});\n\n/* eslint-disable sort-keys */\n\n// Doesn't handle \"void\" or \"null\" because those are keywords, not identifiers.\n// It also doesn't handle \"intrinsic\", since usually it's not a keyword.\nfunction keywordTypeFromName(value: string): N.TsKeywordTypeType | undefined {\n  switch (value) {\n    case \"any\":\n      return \"TSAnyKeyword\";\n    case \"boolean\":\n      return \"TSBooleanKeyword\";\n    case \"bigint\":\n      return \"TSBigIntKeyword\";\n    case \"never\":\n      return \"TSNeverKeyword\";\n    case \"number\":\n      return \"TSNumberKeyword\";\n    case \"object\":\n      return \"TSObjectKeyword\";\n    case \"string\":\n      return \"TSStringKeyword\";\n    case \"symbol\":\n      return \"TSSymbolKeyword\";\n    case \"undefined\":\n      return \"TSUndefinedKeyword\";\n    case \"unknown\":\n      return \"TSUnknownKeyword\";\n    default:\n      return undefined;\n  }\n}\n\nfunction tsIsAccessModifier(modifier: string): modifier is N.Accessibility {\n  return (\n    modifier === \"private\" || modifier === \"public\" || modifier === \"protected\"\n  );\n}\n\nfunction tsIsVarianceAnnotations(\n  modifier: string,\n): modifier is N.VarianceAnnotations {\n  return modifier === \"in\" || modifier === \"out\";\n}\n\nfunction tsIsEntityName(\n  node: N.Expression,\n): node is N.MemberExpression | N.Identifier | N.TsInstantiationExpression {\n  if (node.extra?.parenthesized) {\n    return false;\n  }\n  switch (node.type) {\n    case \"Identifier\":\n      return true;\n    case \"MemberExpression\":\n      return !node.computed && tsIsEntityName(node.object);\n    case \"TSInstantiationExpression\":\n      return tsIsEntityName(node.expression);\n    default:\n      return false;\n  }\n}\n\nexport const enum tsParseEntityNameFlags {\n  NONE = 0b00,\n  ALLOW_RESERVED_WORDS = 0b01,\n  LEADING_THIS_AS_IDENTIFIER = 0b10,\n}\n\nexport default (superClass: ClassWithMixin<typeof Parser, IJSXParserMixin>) =>\n  class TypeScriptParserMixin extends superClass implements Parser {\n    getScopeHandler(): new (...args: any) => TypeScriptScopeHandler {\n      return TypeScriptScopeHandler;\n    }\n\n    tsIsIdentifier(): boolean {\n      // TODO: actually a bit more complex in TypeScript, but shouldn't matter.\n      // See https://github.com/Microsoft/TypeScript/issues/15008\n      return tokenIsIdentifier(this.state.type);\n    }\n\n    tsTokenCanFollowModifier() {\n      return (\n        this.match(tt.bracketL) ||\n        this.match(tt.braceL) ||\n        this.match(tt.star) ||\n        this.match(tt.ellipsis) ||\n        this.match(tt.privateName) ||\n        this.isLiteralPropertyName()\n      );\n    }\n\n    tsNextTokenOnSameLineAndCanFollowModifier() {\n      this.next();\n      if (this.hasPrecedingLineBreak()) {\n        return false;\n      }\n      return this.tsTokenCanFollowModifier();\n    }\n\n    tsNextTokenCanFollowModifier() {\n      // Note: TypeScript's implementation is much more complicated because\n      // more things are considered modifiers there.\n      // This implementation only handles modifiers not handled by @babel/parser itself. And \"static\".\n      if (this.match(tt._static)) {\n        this.next();\n        return this.tsTokenCanFollowModifier();\n      }\n      return this.tsNextTokenOnSameLineAndCanFollowModifier();\n    }\n\n    /** Parses a modifier matching one the given modifier names. */\n    tsParseModifier<T extends TsModifier>(\n      allowedModifiers: T[],\n      stopOnStartOfClassStaticBlock?: boolean,\n      hasSeenStaticModifier?: boolean,\n    ): T | undefined | null {\n      if (\n        !tokenIsIdentifier(this.state.type) &&\n        this.state.type !== tt._in &&\n        this.state.type !== tt._const\n      ) {\n        return undefined;\n      }\n\n      const modifier = this.state.value;\n      if (allowedModifiers.includes(modifier)) {\n        if (hasSeenStaticModifier && this.match(tt._static)) {\n          return undefined;\n        }\n        if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {\n          return undefined;\n        }\n        if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {\n          return modifier;\n        }\n      }\n      return undefined;\n    }\n\n    /** Parses a list of modifiers, in any order.\n     *  If you need a specific order, you must call this function multiple times:\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"public\"] });\n     *    this.tsParseModifiers({ modified: node, allowedModifiers: [\"abstract\", \"readonly\"] });\n     */\n    tsParseModifiers<N extends ModifierBase>(\n      {\n        allowedModifiers,\n        disallowedModifiers,\n        stopOnStartOfClassStaticBlock,\n        errorTemplate = TSErrors.InvalidModifierOnTypeMember,\n      }: {\n        allowedModifiers: readonly TsModifier[];\n        disallowedModifiers?: TsModifier[];\n        stopOnStartOfClassStaticBlock?: boolean;\n        errorTemplate?: typeof TSErrors.InvalidModifierOnTypeMember;\n      },\n      modified: N,\n    ): void {\n      const enforceOrder = (\n        loc: Position,\n        modifier: TsModifier,\n        before: TsModifier,\n        after: TsModifier,\n      ) => {\n        if (modifier === before && modified[after]) {\n          this.raise(TSErrors.InvalidModifiersOrder, loc, {\n            orderedModifiers: [before, after],\n          });\n        }\n      };\n      const incompatible = (\n        loc: Position,\n        modifier: TsModifier,\n        mod1: TsModifier,\n        mod2: TsModifier,\n      ) => {\n        if (\n          (modified[mod1] && modifier === mod2) ||\n          (modified[mod2] && modifier === mod1)\n        ) {\n          this.raise(TSErrors.IncompatibleModifiers, loc, {\n            modifiers: [mod1, mod2],\n          });\n        }\n      };\n\n      for (;;) {\n        const { startLoc } = this.state;\n        const modifier: TsModifier | undefined | null = this.tsParseModifier(\n          allowedModifiers.concat(disallowedModifiers ?? []),\n          stopOnStartOfClassStaticBlock,\n          modified.static,\n        );\n\n        if (!modifier) break;\n\n        if (tsIsAccessModifier(modifier)) {\n          if (modified.accessibility) {\n            this.raise(TSErrors.DuplicateAccessibilityModifier, startLoc, {\n              modifier,\n            });\n          } else {\n            enforceOrder(startLoc, modifier, modifier, \"override\");\n            enforceOrder(startLoc, modifier, modifier, \"static\");\n            enforceOrder(startLoc, modifier, modifier, \"readonly\");\n\n            modified.accessibility = modifier;\n          }\n        } else if (tsIsVarianceAnnotations(modifier)) {\n          if (modified[modifier]) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          }\n          modified[modifier] = true;\n\n          enforceOrder(startLoc, modifier, \"in\", \"out\");\n        } else {\n          if (Object.hasOwn(modified, modifier)) {\n            this.raise(TSErrors.DuplicateModifier, startLoc, { modifier });\n          } else {\n            enforceOrder(startLoc, modifier, \"static\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"static\", \"override\");\n            enforceOrder(startLoc, modifier, \"override\", \"readonly\");\n            enforceOrder(startLoc, modifier, \"abstract\", \"override\");\n\n            incompatible(startLoc, modifier, \"declare\", \"override\");\n            incompatible(startLoc, modifier, \"static\", \"abstract\");\n          }\n          modified[modifier] = true;\n        }\n\n        if (disallowedModifiers?.includes(modifier)) {\n          this.raise(errorTemplate, startLoc, {\n            modifier,\n          });\n        }\n      }\n    }\n\n    tsIsListTerminator(kind: ParsingContext): boolean {\n      switch (kind) {\n        case \"EnumMembers\":\n        case \"TypeMembers\":\n          return this.match(tt.braceR);\n        case \"HeritageClauseElement\":\n          return this.match(tt.braceL);\n        case \"TupleElementTypes\":\n          return this.match(tt.bracketR);\n        case \"TypeParametersOrArguments\":\n          return this.match(tt.gt);\n      }\n    }\n\n    tsParseList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n    ): T[] {\n      const result: T[] = [];\n      while (!this.tsIsListTerminator(kind)) {\n        // Skipping \"parseListElement\" from the TS source since that's just for error handling.\n        result.push(parseElement());\n      }\n      return result;\n    }\n\n    tsParseDelimitedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      return nonNull(\n        this.tsParseDelimitedListWorker(\n          kind,\n          parseElement,\n          /* expectSuccess */ true,\n          refTrailingCommaPos,\n        ),\n      );\n    }\n\n    /**\n     * If !expectSuccess, returns undefined instead of failing to parse.\n     * If expectSuccess, parseElement should always return a defined value.\n     */\n    tsParseDelimitedListWorker<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T | undefined,\n      expectSuccess: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] | undefined {\n      const result: T[] = [];\n      let trailingCommaPos = -1;\n\n      for (;;) {\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n        trailingCommaPos = -1;\n\n        const element = parseElement();\n        if (element == null) {\n          return undefined;\n        }\n        result.push(element);\n\n        if (this.eat(tt.comma)) {\n          trailingCommaPos = this.state.lastTokStartLoc.index;\n          continue;\n        }\n\n        if (this.tsIsListTerminator(kind)) {\n          break;\n        }\n\n        if (expectSuccess) {\n          // This will fail with an error about a missing comma\n          this.expect(tt.comma);\n        }\n        return undefined;\n      }\n\n      if (refTrailingCommaPos) {\n        refTrailingCommaPos.value = trailingCommaPos;\n      }\n\n      return result;\n    }\n\n    tsParseBracketedList<T extends N.Node>(\n      kind: ParsingContext,\n      parseElement: () => T,\n      bracket: boolean,\n      skipFirstToken: boolean,\n      refTrailingCommaPos?: {\n        value: number;\n      },\n    ): T[] {\n      if (!skipFirstToken) {\n        if (bracket) {\n          this.expect(tt.bracketL);\n        } else {\n          this.expect(tt.lt);\n        }\n      }\n\n      const result = this.tsParseDelimitedList(\n        kind,\n        parseElement,\n        refTrailingCommaPos,\n      );\n\n      if (bracket) {\n        this.expect(tt.bracketR);\n      } else {\n        this.expect(tt.gt);\n      }\n\n      return result;\n    }\n\n    tsParseImportType(): N.TsImportType {\n      const node = this.startNode<N.TsImportType>();\n      this.expect(tt._import);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.raise(TSErrors.UnsupportedImportTypeArgument, this.state.startLoc);\n        if (process.env.BABEL_8_BREAKING) {\n          // Consume as an non-conditional type so that we can recover from this error\n          node.argument = this.tsParseNonConditionalType() as any;\n        } else {\n          node.argument = super.parseExprAtom() as any;\n        }\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.argument = this.tsParseLiteralTypeNode();\n        } else {\n          // @ts-ignore(Babel 7 vs Babel 8) Babel 7 AST\n          node.argument = this.parseStringLiteral(this.state.value);\n        }\n      }\n      if (this.eat(tt.comma)) {\n        node.options = this.tsParseImportTypeOptions();\n      } else {\n        node.options = null;\n      }\n      this.expect(tt.parenR);\n\n      if (this.eat(tt.dot)) {\n        // In this instance, the entity name will actually itself be a\n        // qualifier, so allow it to be a reserved word as well.\n        node.qualifier = this.tsParseEntityName(\n          tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n            tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n        );\n      }\n      if (this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSImportType\");\n    }\n\n    tsParseImportTypeOptions(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      this.expect(tt.braceL);\n      const withProperty = this.startNode<N.ObjectProperty>();\n      if (this.isContextual(tt._with)) {\n        withProperty.method = false;\n        withProperty.key = this.parseIdentifier(true);\n        withProperty.computed = false;\n        withProperty.shorthand = false;\n      } else {\n        this.unexpected(null, tt._with);\n      }\n      this.expect(tt.colon);\n      withProperty.value = this.tsParseImportTypeWithPropertyValue();\n      node.properties = [this.finishObjectProperty(withProperty)];\n      this.eat(tt.comma);\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseImportTypeWithPropertyValue(): N.ObjectExpression {\n      const node = this.startNode<N.ObjectExpression>();\n      const properties = [];\n      this.expect(tt.braceL);\n      while (!this.match(tt.braceR)) {\n        const type = this.state.type;\n        if (tokenIsIdentifier(type) || type === tt.string) {\n          properties.push(super.parsePropertyDefinition(null));\n        } else {\n          this.unexpected();\n        }\n        this.eat(tt.comma);\n      }\n      node.properties = properties;\n      this.next(); // eat }\n      return this.finishNode(node, \"ObjectExpression\");\n    }\n\n    tsParseEntityName(flags: tsParseEntityNameFlags): N.TsEntityName {\n      let entity: N.TsEntityName;\n      if (\n        flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS &&\n        this.match(tt._this)\n      ) {\n        if (flags & tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER) {\n          entity = this.parseIdentifier(true);\n        } else {\n          const node = this.startNode<N.ThisExpression>();\n          this.next();\n          entity = this.finishNode(node, \"ThisExpression\");\n        }\n      } else {\n        entity = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n      }\n      while (this.eat(tt.dot)) {\n        const node: Undone<N.TsQualifiedName> =\n          this.startNodeAtNode<N.TsQualifiedName>(entity);\n        node.left = entity;\n        node.right = this.parseIdentifier(\n          !!(flags & tsParseEntityNameFlags.ALLOW_RESERVED_WORDS),\n        );\n        entity = this.finishNode(node, \"TSQualifiedName\");\n      }\n      return entity;\n    }\n\n    tsParseTypeReference(): N.TsTypeReference {\n      const node = this.startNode<N.TsTypeReference>();\n      node.typeName = this.tsParseEntityName(\n        tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n      );\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSTypeReference\");\n    }\n\n    tsParseThisTypePredicate(lhs: N.TsThisType): N.TsTypePredicate {\n      this.next();\n      const node = this.startNodeAtNode<N.TsTypePredicate>(lhs);\n      node.parameterName = lhs;\n      node.typeAnnotation = this.tsParseTypeAnnotation(/* eatColon */ false);\n      node.asserts = false;\n      return this.finishNode(node, \"TSTypePredicate\");\n    }\n\n    tsParseThisTypeNode(): N.TsThisType {\n      const node = this.startNode<N.TsThisType>();\n      this.next();\n      return this.finishNode(node, \"TSThisType\");\n    }\n\n    tsParseTypeQuery(): N.TsTypeQuery {\n      const node = this.startNode<N.TsTypeQuery>();\n      this.expect(tt._typeof);\n      if (this.match(tt._import)) {\n        node.exprName = this.tsParseImportType();\n      } else {\n        if (process.env.BABEL_8_BREAKING) {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS,\n          );\n        } else {\n          node.exprName = this.tsParseEntityName(\n            tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n              tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n          );\n        }\n      }\n      if (!this.hasPrecedingLineBreak() && this.match(tt.lt)) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = this.tsParseTypeArguments();\n        } else {\n          node.typeParameters = this.tsParseTypeArguments();\n        }\n      }\n      return this.finishNode(node, \"TSTypeQuery\");\n    }\n\n    tsParseInOutModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\"],\n      disallowedModifiers: [\n        \"const\",\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseConstModifier = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"const\"],\n      // for better error recovery\n      disallowedModifiers: [\"in\", \"out\"],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n    });\n\n    tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {\n      allowedModifiers: [\"in\", \"out\", \"const\"],\n      disallowedModifiers: [\n        \"public\",\n        \"private\",\n        \"protected\",\n        \"readonly\",\n        \"declare\",\n        \"abstract\",\n        \"override\",\n      ],\n      errorTemplate: TSErrors.InvalidModifierOnTypeParameter,\n    });\n\n    tsParseTypeParameter(\n      parseModifiers: (node: Undone<N.TsTypeParameter>) => void,\n    ): N.TsTypeParameter {\n      const node = this.startNode<N.TsTypeParameter>();\n\n      parseModifiers(node);\n\n      node.name = this.tsParseTypeParameterName();\n      node.constraint = this.tsEatThenParseType(tt._extends);\n      node.default = this.tsEatThenParseType(tt.eq);\n      return this.finishNode(node, \"TSTypeParameter\");\n    }\n\n    tsTryParseTypeParameters(\n      parseModifiers: (node: N.TsTypeParameter) => void,\n    ): N.TsTypeParameterDeclaration | undefined | null {\n      if (this.match(tt.lt)) {\n        return this.tsParseTypeParameters(parseModifiers);\n      }\n    }\n\n    tsParseTypeParameters(parseModifiers: (node: N.TsTypeParameter) => void) {\n      const node = this.startNode<N.TsTypeParameterDeclaration>();\n\n      if (this.match(tt.lt) || this.match(tt.jsxTagStart)) {\n        this.next();\n      } else {\n        this.unexpected();\n      }\n\n      const refTrailingCommaPos = { value: -1 };\n\n      node.params = this.tsParseBracketedList(\n        \"TypeParametersOrArguments\",\n        this.tsParseTypeParameter.bind(this, parseModifiers),\n        /* bracket */ false,\n        /* skipFirstToken */ true,\n        refTrailingCommaPos,\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeParameters, node);\n      }\n      if (refTrailingCommaPos.value !== -1) {\n        this.addExtra(node, \"trailingComma\", refTrailingCommaPos.value);\n      }\n      return this.finishNode(node, \"TSTypeParameterDeclaration\");\n    }\n\n    // Note: In TypeScript implementation we must provide `yieldContext` and `awaitContext`,\n    // but here it's always false, because this is only used for types.\n    tsFillSignature(\n      returnToken: TokenType,\n      signature: Undone<N.TsSignatureDeclaration>,\n    ): void {\n      // Arrow fns *must* have return token (`=>`). Normal functions can omit it.\n      const returnTokenRequired = returnToken === tt.arrow;\n\n      // https://github.com/babel/babel/issues/9231\n      const paramsKey = process.env.BABEL_8_BREAKING ? \"params\" : \"parameters\";\n      const returnTypeKey = process.env.BABEL_8_BREAKING\n        ? \"returnType\"\n        : \"typeAnnotation\";\n\n      signature.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      this.expect(tt.parenL);\n      signature[paramsKey] = this.tsParseBindingListForSignature();\n      if (returnTokenRequired) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      } else if (this.match(returnToken)) {\n        signature[returnTypeKey] =\n          this.tsParseTypeOrTypePredicateAnnotation(returnToken);\n      }\n    }\n\n    tsParseBindingListForSignature(): Array<\n      | N.Identifier\n      | N.RestElement\n      | N.ObjectPattern\n      | N.ArrayPattern\n      | N.VoidPattern\n    > {\n      const list = super.parseBindingList(\n        tt.parenR,\n        charCodes.rightParenthesis,\n        ParseBindingListFlags.IS_FUNCTION_PARAMS,\n      );\n      for (const pattern of list) {\n        const { type } = pattern;\n        if (type === \"AssignmentPattern\" || type === \"TSParameterProperty\") {\n          this.raise(TSErrors.UnsupportedSignatureParameterKind, pattern, {\n            type,\n          });\n        }\n      }\n      return list as Exclude<\n        (typeof list)[0],\n        N.AssignmentPattern | N.TSParameterProperty\n      >[];\n    }\n\n    tsParseTypeMemberSemicolon(): void {\n      if (!this.eat(tt.comma) && !this.isLineTerminator()) {\n        this.expect(tt.semi);\n      }\n    }\n\n    tsParseSignatureMember(\n      kind: \"TSCallSignatureDeclaration\" | \"TSConstructSignatureDeclaration\",\n      node: Undone<\n        N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration\n      >,\n    ): N.TsCallSignatureDeclaration | N.TsConstructSignatureDeclaration {\n      this.tsFillSignature(tt.colon, node);\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, kind);\n    }\n\n    tsIsUnambiguouslyIndexSignature() {\n      this.next(); // Skip '{'\n      if (tokenIsIdentifier(this.state.type)) {\n        this.next();\n        return this.match(tt.colon);\n      }\n      return false;\n    }\n\n    tsTryParseIndexSignature(\n      node: Undone<N.TsIndexSignature>,\n    ): N.TsIndexSignature | undefined {\n      if (\n        !(\n          this.match(tt.bracketL) &&\n          this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this))\n        )\n      ) {\n        return;\n      }\n\n      this.expect(tt.bracketL);\n      const id = this.parseIdentifier();\n      id.typeAnnotation = this.tsParseTypeAnnotation();\n      this.resetEndLocation(id); // set end position to end of type\n\n      this.expect(tt.bracketR);\n      node.parameters = [id];\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n      this.tsParseTypeMemberSemicolon();\n      return this.finishNode(node, \"TSIndexSignature\");\n    }\n\n    tsParsePropertyOrMethodSignature(\n      node: Undone<N.TsPropertySignature | N.TsMethodSignature>,\n      readonly: boolean,\n    ): N.TsPropertySignature | N.TsMethodSignature {\n      if (this.eat(tt.question)) node.optional = true;\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        if (readonly) {\n          this.raise(TSErrors.ReadonlyForMethodSignature, node);\n        }\n        const method = node as Undone<N.TsMethodSignature>;\n        if (method.kind && this.match(tt.lt)) {\n          this.raise(\n            TSErrors.AccessorCannotHaveTypeParameters,\n            this.state.curPosition(),\n          );\n        }\n        this.tsFillSignature(tt.colon, method);\n        this.tsParseTypeMemberSemicolon();\n        const paramsKey = process.env.BABEL_8_BREAKING\n          ? \"params\"\n          : \"parameters\";\n        const returnTypeKey = process.env.BABEL_8_BREAKING\n          ? \"returnType\"\n          : \"typeAnnotation\";\n        if (method.kind === \"get\") {\n          if (method[paramsKey].length > 0) {\n            this.raise(Errors.BadGetterArity, this.state.curPosition());\n            if (this.isThisParam(method[paramsKey][0])) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n        } else if (method.kind === \"set\") {\n          if (method[paramsKey].length !== 1) {\n            this.raise(Errors.BadSetterArity, this.state.curPosition());\n          } else {\n            const firstParameter = method[paramsKey][0];\n            if (this.isThisParam(firstParameter)) {\n              this.raise(\n                TSErrors.AccessorCannotDeclareThisParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (\n              firstParameter.type === \"Identifier\" &&\n              firstParameter.optional\n            ) {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveOptionalParameter,\n                this.state.curPosition(),\n              );\n            }\n            if (firstParameter.type === \"RestElement\") {\n              this.raise(\n                TSErrors.SetAccessorCannotHaveRestParameter,\n                this.state.curPosition(),\n              );\n            }\n          }\n          if (method[returnTypeKey]) {\n            this.raise(\n              TSErrors.SetAccessorCannotHaveReturnType,\n              method[returnTypeKey],\n            );\n          }\n        } else {\n          method.kind = \"method\";\n        }\n        return this.finishNode(method, \"TSMethodSignature\");\n      } else {\n        const property = node as Undone<N.TsPropertySignature>;\n        if (readonly) property.readonly = true;\n        const type = this.tsTryParseTypeAnnotation();\n        if (type) property.typeAnnotation = type;\n        this.tsParseTypeMemberSemicolon();\n        return this.finishNode(property, \"TSPropertySignature\");\n      }\n    }\n\n    tsParseTypeMember(): N.TsTypeElement {\n      const node: any = this.startNode();\n\n      if (this.match(tt.parenL) || this.match(tt.lt)) {\n        return this.tsParseSignatureMember(\"TSCallSignatureDeclaration\", node);\n      }\n\n      if (this.match(tt._new)) {\n        const id = this.startNode<N.Identifier>();\n        this.next();\n        if (this.match(tt.parenL) || this.match(tt.lt)) {\n          return this.tsParseSignatureMember(\n            \"TSConstructSignatureDeclaration\",\n            node,\n          );\n        } else {\n          node.key = this.createIdentifier(id, \"new\");\n          return this.tsParsePropertyOrMethodSignature(node, false);\n        }\n      }\n\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\"readonly\"],\n          disallowedModifiers: [\n            \"declare\",\n            \"abstract\",\n            \"private\",\n            \"protected\",\n            \"public\",\n            \"static\",\n            \"override\",\n          ],\n        },\n        node,\n      );\n\n      const idx = this.tsTryParseIndexSignature(node);\n      if (idx) {\n        return idx;\n      }\n\n      super.parsePropertyName(node);\n      if (\n        !node.computed &&\n        node.key.type === \"Identifier\" &&\n        (node.key.name === \"get\" || node.key.name === \"set\") &&\n        this.tsTokenCanFollowModifier()\n      ) {\n        node.kind = node.key.name;\n        super.parsePropertyName(node);\n        // Allow < here so that we can recover from get key<T> later\n        if (!this.match(tt.parenL) && !this.match(tt.lt)) {\n          this.unexpected(null, tt.parenL);\n        }\n      }\n      return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);\n    }\n\n    tsParseTypeLiteral(): N.TsTypeLiteral {\n      const node = this.startNode<N.TsTypeLiteral>();\n      node.members = this.tsParseObjectTypeMembers();\n      return this.finishNode(node, \"TSTypeLiteral\");\n    }\n\n    tsParseObjectTypeMembers(): Array<N.TsTypeElement> {\n      this.expect(tt.braceL);\n      const members = this.tsParseList(\n        \"TypeMembers\",\n        this.tsParseTypeMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return members;\n    }\n\n    tsIsStartOfMappedType(): boolean {\n      this.next();\n      if (this.eat(tt.plusMin)) {\n        return this.isContextual(tt._readonly);\n      }\n      if (this.isContextual(tt._readonly)) {\n        this.next();\n      }\n      if (!this.match(tt.bracketL)) {\n        return false;\n      }\n      this.next();\n      if (!this.tsIsIdentifier()) {\n        return false;\n      }\n      this.next();\n      return this.match(tt._in);\n    }\n\n    tsParseMappedType(): N.TsMappedType {\n      const node = this.startNode<N.TsMappedType>();\n\n      this.expect(tt.braceL);\n\n      if (this.match(tt.plusMin)) {\n        node.readonly = this.state.value;\n        this.next();\n        this.expectContextual(tt._readonly);\n      } else if (this.eatContextual(tt._readonly)) {\n        node.readonly = true;\n      }\n\n      this.expect(tt.bracketL);\n      if (process.env.BABEL_8_BREAKING) {\n        node.key = this.tsParseTypeParameterName() as N.Identifier;\n        node.constraint = this.tsExpectThenParseType(tt._in);\n      } else {\n        const typeParameter = this.startNode<N.TsTypeParameter>();\n        typeParameter.name = this.tsParseTypeParameterName();\n        typeParameter.constraint = this.tsExpectThenParseType(tt._in);\n        // @ts-expect-error for Babel 7\n        node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      }\n      node.nameType = this.eatContextual(tt._as) ? this.tsParseType() : null;\n\n      this.expect(tt.bracketR);\n\n      if (this.match(tt.plusMin)) {\n        node.optional = this.state.value;\n        this.next();\n        this.expect(tt.question);\n      } else if (this.eat(tt.question)) {\n        node.optional = true;\n      }\n\n      node.typeAnnotation = this.tsTryParseType();\n      this.semicolon();\n      this.expect(tt.braceR);\n\n      return this.finishNode(node, \"TSMappedType\");\n    }\n\n    tsParseTupleType(): N.TsTupleType {\n      const node = this.startNode<N.TsTupleType>();\n      node.elementTypes = this.tsParseBracketedList(\n        \"TupleElementTypes\",\n        this.tsParseTupleElementType.bind(this),\n        /* bracket */ true,\n        /* skipFirstToken */ false,\n      );\n\n      // Validate the elementTypes to ensure that no mandatory elements\n      // follow optional elements\n      let seenOptionalElement = false;\n      node.elementTypes.forEach(elementNode => {\n        const { type } = elementNode;\n\n        if (\n          seenOptionalElement &&\n          type !== \"TSRestType\" &&\n          type !== \"TSOptionalType\" &&\n          !(type === \"TSNamedTupleMember\" && elementNode.optional)\n        ) {\n          this.raise(TSErrors.OptionalTypeBeforeRequired, elementNode);\n        }\n\n        seenOptionalElement ||=\n          (type === \"TSNamedTupleMember\" && elementNode.optional) ||\n          type === \"TSOptionalType\";\n      });\n\n      return this.finishNode(node, \"TSTupleType\");\n    }\n\n    tsParseTupleElementType(): N.TsNamedTupleMember | N.TsType {\n      // parses `...TsType[]`\n\n      const restStartLoc = this.state.startLoc;\n\n      const rest = this.eat(tt.ellipsis);\n      const { startLoc } = this.state;\n\n      let labeled: boolean;\n      let label: N.Identifier;\n      let optional: boolean;\n      let type: N.TsNamedTupleMember | N.TsType;\n\n      const isWord = tokenIsKeywordOrIdentifier(this.state.type);\n      const chAfterWord = isWord ? this.lookaheadCharCode() : null;\n      if (chAfterWord === charCodes.colon) {\n        labeled = true;\n        optional = false;\n        label = this.parseIdentifier(true);\n        this.expect(tt.colon);\n        type = this.tsParseType();\n      } else if (chAfterWord === charCodes.questionMark) {\n        optional = true;\n        const wordName = this.state.value;\n        const typeOrLabel = this.tsParseNonArrayType();\n\n        if (this.lookaheadCharCode() === charCodes.colon) {\n          labeled = true;\n          label = this.createIdentifier(\n            this.startNodeAt<N.Identifier>(startLoc),\n            wordName,\n          );\n          this.expect(tt.question);\n          this.expect(tt.colon);\n          type = this.tsParseType();\n        } else {\n          labeled = false;\n          type = typeOrLabel;\n          this.expect(tt.question);\n        }\n      } else {\n        type = this.tsParseType();\n        optional = this.eat(tt.question);\n        // In this case (labeled === true) could be only in invalid label.\n        // E.g. [x.y:type]\n        // An error is raised while processing node.\n        labeled = this.eat(tt.colon);\n      }\n\n      if (labeled) {\n        let labeledNode: Undone<N.TsNamedTupleMember>;\n        if (label) {\n          labeledNode = this.startNodeAt<N.TsNamedTupleMember>(startLoc);\n          labeledNode.optional = optional;\n          labeledNode.label = label;\n          labeledNode.elementType = type;\n\n          if (this.eat(tt.question)) {\n            labeledNode.optional = true;\n            this.raise(\n              TSErrors.TupleOptionalAfterType,\n              this.state.lastTokStartLoc,\n            );\n          }\n        } else {\n          labeledNode = this.startNodeAt<N.TsNamedTupleMember>(startLoc);\n          labeledNode.optional = optional;\n          this.raise(TSErrors.InvalidTupleMemberLabel, type);\n          // @ts-expect-error This produces an invalid AST, but at least we don't drop\n          // nodes representing the invalid source.\n          labeledNode.label = type;\n          labeledNode.elementType = this.tsParseType();\n        }\n        type = this.finishNode(labeledNode, \"TSNamedTupleMember\");\n      } else if (optional) {\n        const optionalTypeNode = this.startNodeAt<N.TsOptionalType>(startLoc);\n        optionalTypeNode.typeAnnotation = type;\n        type = this.finishNode(optionalTypeNode, \"TSOptionalType\");\n      }\n\n      if (rest) {\n        const restNode = this.startNodeAt<N.TsRestType>(restStartLoc);\n        restNode.typeAnnotation = type;\n        type = this.finishNode(restNode, \"TSRestType\");\n      }\n\n      return type;\n    }\n\n    tsParseParenthesizedType(): N.TsParenthesizedType {\n      const node = this.startNode<N.TsParenthesizedType>();\n      this.expect(tt.parenL);\n      node.typeAnnotation = this.tsParseType();\n      this.expect(tt.parenR);\n      return this.finishNode(node, \"TSParenthesizedType\");\n    }\n\n    tsParseFunctionOrConstructorType(\n      type: \"TSFunctionType\" | \"TSConstructorType\",\n      abstract?: boolean,\n    ): N.TsFunctionOrConstructorType {\n      const node = this.startNode<\n        N.TsFunctionOrConstructorType | N.TsConstructorType\n      >();\n      if (type === \"TSConstructorType\") {\n        (node as Undone<N.TsConstructorType>).abstract = !!abstract;\n        if (abstract) this.next();\n        this.next(); // eat `new`\n      }\n      this.tsInAllowConditionalTypesContext(() =>\n        this.tsFillSignature(tt.arrow, node),\n      );\n      return this.finishNode(node, type);\n    }\n\n    tsParseLiteralTypeNode(): N.TsLiteralType {\n      const node = this.startNode<N.TsLiteralType>();\n      switch (this.state.type) {\n        case tt.num:\n        case tt.bigint:\n        case tt.string:\n        case tt._true:\n        case tt._false:\n          // For compatibility to estree we cannot call parseLiteral directly here\n          // @ts-expect-error refine typings\n          node.literal = super.parseExprAtom();\n          break;\n        default:\n          this.unexpected();\n      }\n      return this.finishNode(node, \"TSLiteralType\");\n    }\n\n    tsParseTemplateLiteralType(): N.TsTemplateLiteralType | N.TsLiteralType {\n      if (process.env.BABEL_8_BREAKING) {\n        const startLoc = this.state.startLoc;\n        let curElt = this.parseTemplateElement(false);\n        const quasis = [curElt];\n        if (curElt.tail) {\n          const node = this.startNodeAt<N.TsLiteralType>(startLoc);\n          const literal = this.startNodeAt<N.TemplateLiteral>(startLoc);\n          literal.expressions = [];\n          literal.quasis = quasis;\n          node.literal = this.finishNode(literal, \"TemplateLiteral\");\n          return this.finishNode(node, \"TSLiteralType\");\n        } else {\n          const substitutions: N.TsType[] = [];\n          while (!curElt.tail) {\n            substitutions.push(this.tsParseType());\n            this.readTemplateContinuation();\n            quasis.push((curElt = this.parseTemplateElement(false)));\n          }\n          const node = this.startNodeAt<N.TsTemplateLiteralType>(startLoc);\n          node.types = substitutions;\n          node.quasis = quasis;\n          return this.finishNode(node, \"TSTemplateLiteralType\");\n        }\n      } else {\n        const node = this.startNode<N.TsLiteralType>();\n        node.literal = super.parseTemplate(false);\n        return this.finishNode(node, \"TSLiteralType\");\n      }\n    }\n\n    parseTemplateSubstitution(): N.TsType | N.Expression {\n      if (this.state.inType) return this.tsParseType();\n      return super.parseTemplateSubstitution();\n    }\n\n    tsParseThisTypeOrThisTypePredicate(): N.TsThisType | N.TsTypePredicate {\n      const thisKeyword = this.tsParseThisTypeNode();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        return this.tsParseThisTypePredicate(thisKeyword);\n      } else {\n        return thisKeyword;\n      }\n    }\n\n    tsParseNonArrayType(): N.TsType {\n      switch (this.state.type) {\n        case tt.string:\n        case tt.num:\n        case tt.bigint:\n        case tt._true:\n        case tt._false:\n          return this.tsParseLiteralTypeNode();\n        case tt.plusMin:\n          if (this.state.value === \"-\") {\n            const node = this.startNode<N.TsLiteralType>();\n            const nextToken = this.lookahead();\n            if (nextToken.type !== tt.num && nextToken.type !== tt.bigint) {\n              this.unexpected();\n            }\n            node.literal = this.parseMaybeUnary() as N.UnaryExpression;\n            return this.finishNode(node, \"TSLiteralType\");\n          }\n          break;\n        case tt._this:\n          return this.tsParseThisTypeOrThisTypePredicate();\n        case tt._typeof:\n          return this.tsParseTypeQuery();\n        case tt._import:\n          return this.tsParseImportType();\n        case tt.braceL:\n          return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this))\n            ? this.tsParseMappedType()\n            : this.tsParseTypeLiteral();\n        case tt.bracketL:\n          return this.tsParseTupleType();\n        case tt.parenL:\n          if (process.env.BABEL_8_BREAKING) {\n            if (\n              !(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)\n            ) {\n              const startLoc = this.state.startLoc;\n              this.next();\n              const type = this.tsParseType();\n              this.expect(tt.parenR);\n              this.addExtra(type, \"parenthesized\", true);\n              this.addExtra(type, \"parenStart\", startLoc.index);\n              return type;\n            }\n          }\n\n          return this.tsParseParenthesizedType();\n        case tt.templateNonTail:\n        case tt.templateTail:\n          return this.tsParseTemplateLiteralType();\n        default: {\n          const { type } = this.state;\n          if (\n            tokenIsIdentifier(type) ||\n            type === tt._void ||\n            type === tt._null\n          ) {\n            const nodeType =\n              type === tt._void\n                ? \"TSVoidKeyword\"\n                : type === tt._null\n                  ? \"TSNullKeyword\"\n                  : keywordTypeFromName(this.state.value);\n            if (\n              nodeType !== undefined &&\n              this.lookaheadCharCode() !== charCodes.dot\n            ) {\n              const node = this.startNode<N.TsKeywordType>();\n              this.next();\n              return this.finishNode(node, nodeType);\n            }\n            return this.tsParseTypeReference();\n          }\n        }\n      }\n\n      this.unexpected();\n    }\n\n    tsParseArrayTypeOrHigher(): N.TsType {\n      const { startLoc } = this.state;\n      let type = this.tsParseNonArrayType();\n      while (!this.hasPrecedingLineBreak() && this.eat(tt.bracketL)) {\n        if (this.match(tt.bracketR)) {\n          const node = this.startNodeAt<N.TsArrayType>(startLoc);\n          node.elementType = type;\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSArrayType\");\n        } else {\n          const node = this.startNodeAt<N.TsIndexedAccessType>(startLoc);\n          node.objectType = type;\n          node.indexType = this.tsParseType();\n          this.expect(tt.bracketR);\n          type = this.finishNode(node, \"TSIndexedAccessType\");\n        }\n      }\n      return type;\n    }\n\n    tsParseTypeOperator(): N.TsTypeOperator {\n      const node = this.startNode<N.TsTypeOperator>();\n      const operator = this.state.value;\n      this.next(); // eat operator\n      node.operator = operator;\n      node.typeAnnotation = this.tsParseTypeOperatorOrHigher();\n\n      if (operator === \"readonly\") {\n        this.tsCheckTypeAnnotationForReadOnly(node);\n      }\n\n      return this.finishNode(node, \"TSTypeOperator\");\n    }\n\n    tsCheckTypeAnnotationForReadOnly(node: Undone<N.TsTypeOperator>) {\n      switch (node.typeAnnotation.type) {\n        case \"TSTupleType\":\n        case \"TSArrayType\":\n          return;\n        default:\n          this.raise(TSErrors.UnexpectedReadonly, node);\n      }\n    }\n\n    tsParseInferType(): N.TsInferType {\n      const node = this.startNode<N.TsInferType>();\n      this.expectContextual(tt._infer);\n      const typeParameter = this.startNode<N.TsTypeParameter>();\n      typeParameter.name = this.tsParseTypeParameterName();\n      typeParameter.constraint = this.tsTryParse(() =>\n        this.tsParseConstraintForInferType(),\n      );\n      node.typeParameter = this.finishNode(typeParameter, \"TSTypeParameter\");\n      return this.finishNode(node, \"TSInferType\");\n    }\n\n    tsParseConstraintForInferType() {\n      if (this.eat(tt._extends)) {\n        const constraint = this.tsInDisallowConditionalTypesContext(() =>\n          this.tsParseType(),\n        );\n        if (\n          this.state.inDisallowConditionalTypesContext ||\n          !this.match(tt.question)\n        ) {\n          return constraint;\n        }\n      }\n    }\n\n    tsParseTypeOperatorOrHigher(): N.TsType {\n      const isTypeOperator =\n        tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;\n      return isTypeOperator\n        ? this.tsParseTypeOperator()\n        : this.isContextual(tt._infer)\n          ? this.tsParseInferType()\n          : this.tsInAllowConditionalTypesContext(() =>\n              this.tsParseArrayTypeOrHigher(),\n            );\n    }\n\n    tsParseUnionOrIntersectionType(\n      kind: \"TSUnionType\" | \"TSIntersectionType\",\n      parseConstituentType: () => N.TsType,\n      operator: TokenType,\n    ): N.TsType {\n      const node = this.startNode<N.TsUnionType | N.TsIntersectionType>();\n      const hasLeadingOperator = this.eat(operator);\n      const types = [];\n      do {\n        types.push(parseConstituentType());\n      } while (this.eat(operator));\n      if (types.length === 1 && !hasLeadingOperator) {\n        return types[0];\n      }\n      node.types = types;\n      return this.finishNode(node, kind);\n    }\n\n    tsParseIntersectionTypeOrHigher(): N.TsType {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSIntersectionType\",\n        this.tsParseTypeOperatorOrHigher.bind(this),\n        tt.bitwiseAND,\n      );\n    }\n\n    tsParseUnionTypeOrHigher() {\n      return this.tsParseUnionOrIntersectionType(\n        \"TSUnionType\",\n        this.tsParseIntersectionTypeOrHigher.bind(this),\n        tt.bitwiseOR,\n      );\n    }\n\n    tsIsStartOfFunctionType() {\n      if (this.match(tt.lt)) {\n        return true;\n      }\n      return (\n        this.match(tt.parenL) &&\n        this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this))\n      );\n    }\n\n    tsSkipParameterStart(): boolean {\n      if (tokenIsIdentifier(this.state.type) || this.match(tt._this)) {\n        this.next();\n        return true;\n      }\n\n      if (this.match(tt.braceL)) {\n        // Return true if we can parse an object pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          this.parseObjectLike(tt.braceR, true);\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      if (this.match(tt.bracketL)) {\n        this.next();\n        // Return true if we can parse an array pattern without errors\n        const { errors } = this.state;\n        const previousErrorCount = errors.length;\n        try {\n          super.parseBindingList(\n            tt.bracketR,\n            charCodes.rightSquareBracket,\n            ParseBindingListFlags.ALLOW_EMPTY,\n          );\n          return errors.length === previousErrorCount;\n        } catch {\n          return false;\n        }\n      }\n\n      return false;\n    }\n\n    tsIsUnambiguouslyStartOfFunctionType(): boolean {\n      this.next();\n      if (this.match(tt.parenR) || this.match(tt.ellipsis)) {\n        // ( )\n        // ( ...\n        return true;\n      }\n      if (this.tsSkipParameterStart()) {\n        if (\n          this.match(tt.colon) ||\n          this.match(tt.comma) ||\n          this.match(tt.question) ||\n          this.match(tt.eq)\n        ) {\n          // ( xxx :\n          // ( xxx ,\n          // ( xxx ?\n          // ( xxx =\n          return true;\n        }\n        if (this.match(tt.parenR)) {\n          this.next();\n          if (this.match(tt.arrow)) {\n            // ( xxx ) =>\n            return true;\n          }\n        }\n      }\n      return false;\n    }\n\n    tsParseTypeOrTypePredicateAnnotation(\n      returnToken: TokenType,\n    ): N.TsTypeAnnotation {\n      return this.tsInType(() => {\n        const t = this.startNode<N.TsTypeAnnotation>();\n        this.expect(returnToken);\n\n        const node = this.startNode<N.TsTypePredicate>();\n\n        const asserts = !!this.tsTryParse(\n          this.tsParseTypePredicateAsserts.bind(this),\n        );\n\n        if (asserts && this.match(tt._this)) {\n          // When asserts is false, thisKeyword is handled by tsParseNonArrayType\n          // : asserts this is type\n          let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();\n          // if it turns out to be a `TSThisType`, wrap it with `TSTypePredicate`\n          // : asserts this\n          if (thisTypePredicate.type === \"TSThisType\") {\n            node.parameterName = thisTypePredicate;\n            node.asserts = true;\n            (node as N.TsTypePredicate).typeAnnotation = null;\n            thisTypePredicate = this.finishNode(node, \"TSTypePredicate\");\n          } else {\n            this.resetStartLocationFromNode(thisTypePredicate, node);\n            thisTypePredicate.asserts = true;\n          }\n          t.typeAnnotation = thisTypePredicate;\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        const typePredicateVariable =\n          this.tsIsIdentifier() &&\n          this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));\n\n        if (!typePredicateVariable) {\n          if (!asserts) {\n            // : type\n            return this.tsParseTypeAnnotation(/* eatColon */ false, t);\n          }\n\n          // : asserts foo\n          node.parameterName = this.parseIdentifier();\n          node.asserts = asserts;\n          (node as N.TsTypePredicate).typeAnnotation = null;\n          t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n          return this.finishNode(t, \"TSTypeAnnotation\");\n        }\n\n        // : asserts foo is type\n        const type = this.tsParseTypeAnnotation(/* eatColon */ false);\n        node.parameterName = typePredicateVariable;\n        node.typeAnnotation = type;\n        node.asserts = asserts;\n        t.typeAnnotation = this.finishNode(node, \"TSTypePredicate\");\n        return this.finishNode(t, \"TSTypeAnnotation\");\n      });\n    }\n\n    tsTryParseTypeOrTypePredicateAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n    }\n\n    tsTryParseTypeAnnotation(): N.TsTypeAnnotation | undefined {\n      if (this.match(tt.colon)) {\n        return this.tsParseTypeAnnotation();\n      }\n    }\n\n    tsTryParseType(): N.TsType | undefined {\n      return this.tsEatThenParseType(tt.colon);\n    }\n\n    tsParseTypePredicatePrefix(): N.Identifier | undefined {\n      const id = this.parseIdentifier();\n      if (this.isContextual(tt._is) && !this.hasPrecedingLineBreak()) {\n        this.next();\n        return id;\n      }\n    }\n\n    tsParseTypePredicateAsserts(): boolean {\n      if (this.state.type !== tt._asserts) {\n        return false;\n      }\n      const containsEsc = this.state.containsEsc;\n      this.next();\n      if (!tokenIsIdentifier(this.state.type) && !this.match(tt._this)) {\n        return false;\n      }\n\n      if (containsEsc) {\n        this.raise(\n          Errors.InvalidEscapedReservedWord,\n          this.state.lastTokStartLoc,\n          {\n            reservedWord: \"asserts\",\n          },\n        );\n      }\n\n      return true;\n    }\n\n    tsParseTypeAnnotation(\n      eatColon = true,\n      t: Undone<N.TsTypeAnnotation> = this.startNode<N.TsTypeAnnotation>(),\n    ): N.TsTypeAnnotation {\n      this.tsInType(() => {\n        if (eatColon) this.expect(tt.colon);\n        t.typeAnnotation = this.tsParseType();\n      });\n      return this.finishNode(t, \"TSTypeAnnotation\");\n    }\n\n    /** Be sure to be in a type context before calling this, using `tsInType`. */\n    tsParseType(): N.TsType {\n      // Need to set `state.inType` so that we don't parse JSX in a type context.\n      assert(this.state.inType);\n      const type = this.tsParseNonConditionalType();\n\n      if (\n        this.state.inDisallowConditionalTypesContext ||\n        this.hasPrecedingLineBreak() ||\n        !this.eat(tt._extends)\n      ) {\n        return type;\n      }\n      const node = this.startNodeAtNode<N.TsConditionalType>(type);\n      node.checkType = type;\n\n      node.extendsType = this.tsInDisallowConditionalTypesContext(() =>\n        this.tsParseNonConditionalType(),\n      );\n\n      this.expect(tt.question);\n      node.trueType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      this.expect(tt.colon);\n      node.falseType = this.tsInAllowConditionalTypesContext(() =>\n        this.tsParseType(),\n      );\n\n      return this.finishNode(node, \"TSConditionalType\");\n    }\n\n    isAbstractConstructorSignature(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.isLookaheadContextual(\"new\")\n      );\n    }\n\n    tsParseNonConditionalType(): N.TsType {\n      if (this.tsIsStartOfFunctionType()) {\n        return this.tsParseFunctionOrConstructorType(\"TSFunctionType\");\n      }\n      if (this.match(tt._new)) {\n        // As in `new () => Date`\n        return this.tsParseFunctionOrConstructorType(\"TSConstructorType\");\n      } else if (this.isAbstractConstructorSignature()) {\n        // As in `abstract new () => Date`\n        return this.tsParseFunctionOrConstructorType(\n          \"TSConstructorType\",\n          /* abstract */ true,\n        );\n      }\n      return this.tsParseUnionTypeOrHigher();\n    }\n\n    tsParseTypeAssertion(): N.TsTypeAssertion {\n      if (this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")) {\n        this.raise(TSErrors.ReservedTypeAssertion, this.state.startLoc);\n      }\n\n      const node = this.startNode<N.TsTypeAssertion>();\n      node.typeAnnotation = this.tsInType(() => {\n        this.next(); // \"<\"\n        return this.match(tt._const)\n          ? this.tsParseTypeReference()\n          : this.tsParseType();\n      });\n      this.expect(tt.gt);\n      node.expression = this.parseMaybeUnary();\n      return this.finishNode(node, \"TSTypeAssertion\");\n    }\n\n    tsParseHeritageClause(token: \"extends\"): Array<N.TSInterfaceHeritage>;\n    tsParseHeritageClause(token: \"implements\"): Array<N.TSClassImplements>;\n    tsParseHeritageClause(\n      token: \"extends\" | \"implements\",\n    ): Array<N.TSClassImplements> | Array<N.TSInterfaceHeritage> {\n      const originalStartLoc = this.state.startLoc;\n\n      const delimitedList = this.tsParseDelimitedList(\n        \"HeritageClauseElement\",\n        () => {\n          if (process.env.BABEL_8_BREAKING) {\n            const expression = super.parseExprSubscripts();\n            if (!tsIsEntityName(expression)) {\n              this.raise(\n                TSErrors.InvalidHeritageClauseType,\n                expression.loc.start,\n                { token },\n              );\n            }\n            const nodeType =\n              token === \"extends\" ? \"TSInterfaceHeritage\" : \"TSClassImplements\";\n            if (expression.type === \"TSInstantiationExpression\") {\n              // @ts-expect-error cast TSInstantiationExpression to TSInterfaceHeritage/TSClassImplements\n              expression.type = nodeType;\n              return expression;\n            }\n            const node = this.startNodeAtNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >(expression);\n            node.expression = expression;\n            // The last element can not form a TSInstantiationExpression because of the bail condition in\n            // `parseSubscript`, in this case we have to parse type arguments again\n            if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n              node.typeArguments = this.tsParseTypeArgumentsInExpression();\n            }\n            return this.finishNode(node, nodeType);\n          } else {\n            const node = this.startNode<\n              N.TSInterfaceHeritage | N.TSClassImplements\n            >();\n            // @ts-expect-error Babel 7 vs Babel 8\n            node.expression = this.tsParseEntityName(\n              tsParseEntityNameFlags.ALLOW_RESERVED_WORDS |\n                tsParseEntityNameFlags.LEADING_THIS_AS_IDENTIFIER,\n            );\n            if (this.match(tt.lt)) {\n              // @ts-expect-error Babel 7 vs Babel 8\n              node.typeParameters = this.tsParseTypeArguments();\n            }\n\n            return this.finishNode(\n              node,\n              // @ts-expect-error Babel 7 vs Babel 8\n              \"TSExpressionWithTypeArguments\",\n            );\n          }\n        },\n      );\n\n      if (!delimitedList.length) {\n        this.raise(TSErrors.EmptyHeritageClauseType, originalStartLoc, {\n          token,\n        });\n      }\n\n      return delimitedList as\n        | Array<N.TSClassImplements>\n        | Array<N.TSInterfaceHeritage>;\n    }\n\n    tsParseInterfaceDeclaration(\n      node: Undone<N.TsInterfaceDeclaration>,\n      properties: {\n        declare?: true;\n      } = {},\n    ): N.TsInterfaceDeclaration | null {\n      if (this.hasFollowingLineBreak()) return null;\n      this.expectContextual(tt._interface);\n      if (properties.declare) node.declare = true;\n      if (tokenIsIdentifier(this.state.type)) {\n        node.id = this.parseIdentifier();\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_INTERFACE);\n      } else {\n        node.id = null;\n        this.raise(TSErrors.MissingInterfaceName, this.state.startLoc);\n      }\n\n      node.typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (this.eat(tt._extends)) {\n        node.extends = this.tsParseHeritageClause(\"extends\");\n      }\n      const body = this.startNode<N.TSInterfaceBody>();\n      body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));\n      node.body = this.finishNode(body, \"TSInterfaceBody\");\n      return this.finishNode(node, \"TSInterfaceDeclaration\");\n    }\n\n    tsParseTypeAliasDeclaration(\n      node: N.TsTypeAliasDeclaration,\n    ): N.TsTypeAliasDeclaration {\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_TYPE);\n\n      node.typeAnnotation = this.tsInType(() => {\n        node.typeParameters = this.tsTryParseTypeParameters(\n          this.tsParseInOutModifiers,\n        );\n\n        this.expect(tt.eq);\n\n        if (\n          this.isContextual(tt._intrinsic) &&\n          this.lookaheadCharCode() !== charCodes.dot\n        ) {\n          const node = this.startNode<N.TsKeywordType>();\n          this.next();\n          return this.finishNode(node, \"TSIntrinsicKeyword\");\n        }\n\n        return this.tsParseType();\n      });\n\n      this.semicolon();\n      return this.finishNode(node, \"TSTypeAliasDeclaration\");\n    }\n\n    // Parse in top level normal context if we are in a JSX context\n    tsInTopLevelContext<T>(cb: () => T): T {\n      if (this.curContext() !== tc.brace) {\n        const oldContext = this.state.context;\n        this.state.context = [oldContext[0]];\n        try {\n          return cb();\n        } finally {\n          this.state.context = oldContext;\n        }\n      } else {\n        return cb();\n      }\n    }\n\n    /**\n     * Runs `cb` in a type context.\n     * This should be called one token *before* the first type token,\n     * so that the call to `next()` is run in type context.\n     */\n    tsInType<T>(cb: () => T): T {\n      const oldInType = this.state.inType;\n      this.state.inType = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inType = oldInType;\n      }\n    }\n\n    tsInDisallowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = true;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsInAllowConditionalTypesContext<T>(cb: () => T): T {\n      const oldInDisallowConditionalTypesContext =\n        this.state.inDisallowConditionalTypesContext;\n      this.state.inDisallowConditionalTypesContext = false;\n      try {\n        return cb();\n      } finally {\n        this.state.inDisallowConditionalTypesContext =\n          oldInDisallowConditionalTypesContext;\n      }\n    }\n\n    tsEatThenParseType(token: TokenType): N.TsType | undefined {\n      if (this.match(token)) {\n        return this.tsNextThenParseType();\n      }\n    }\n\n    tsExpectThenParseType(token: TokenType): N.TsType {\n      return this.tsInType(() => {\n        this.expect(token);\n        return this.tsParseType();\n      });\n    }\n\n    tsNextThenParseType(): N.TsType {\n      return this.tsInType(() => {\n        this.next();\n        return this.tsParseType();\n      });\n    }\n\n    tsParseEnumMember(): N.TsEnumMember {\n      const node = this.startNode<N.TsEnumMember>();\n      // Computed property names are grammar errors in an enum, so accept just string literal or identifier.\n      node.id = this.match(tt.string)\n        ? super.parseStringLiteral(this.state.value)\n        : this.parseIdentifier(/* liberal */ true);\n      if (this.eat(tt.eq)) {\n        node.initializer = super.parseMaybeAssignAllowIn();\n      }\n      return this.finishNode(node, \"TSEnumMember\");\n    }\n\n    tsParseEnumDeclaration(\n      node: Undone<N.TsEnumDeclaration>,\n      properties: {\n        const?: true;\n        declare?: true;\n      } = {},\n    ): N.TsEnumDeclaration {\n      if (properties.const) node.const = true;\n      if (properties.declare) node.declare = true;\n      this.expectContextual(tt._enum);\n      node.id = this.parseIdentifier();\n      this.checkIdentifier(\n        node.id,\n        node.const ? BindingFlag.TYPE_TS_CONST_ENUM : BindingFlag.TYPE_TS_ENUM,\n      );\n\n      if (process.env.BABEL_8_BREAKING) {\n        node.body = this.tsParseEnumBody();\n      } else {\n        this.expect(tt.braceL);\n        node.members = this.tsParseDelimitedList(\n          \"EnumMembers\",\n          this.tsParseEnumMember.bind(this),\n        );\n        this.expect(tt.braceR);\n      }\n      return this.finishNode(node, \"TSEnumDeclaration\");\n    }\n\n    tsParseEnumBody(): N.TsEnumBody {\n      const node = this.startNode<N.TsEnumBody>();\n      this.expect(tt.braceL);\n      node.members = this.tsParseDelimitedList(\n        \"EnumMembers\",\n        this.tsParseEnumMember.bind(this),\n      );\n      this.expect(tt.braceR);\n      return this.finishNode(node, \"TSEnumBody\");\n    }\n\n    tsParseModuleBlock(): N.TsModuleBlock {\n      const node = this.startNode<N.TsModuleBlock>();\n      this.scope.enter(ScopeFlag.OTHER);\n\n      this.expect(tt.braceL);\n      // Inside of a module block is considered \"top-level\", meaning it can have imports and exports.\n      super.parseBlockOrModuleBlockBody(\n        (node.body = []),\n        /* directives */ undefined,\n        /* topLevel */ true,\n        /* end */ tt.braceR,\n      );\n      this.scope.exit();\n      return this.finishNode(node, \"TSModuleBlock\");\n    }\n\n    tsParseModuleOrNamespaceDeclaration(\n      node: Undone<N.TsModuleDeclaration>,\n      nested: boolean = false,\n    ): N.TsModuleDeclaration {\n      node.id = process.env.BABEL_8_BREAKING\n        ? this.tsParseEntityName(tsParseEntityNameFlags.ALLOW_RESERVED_WORDS)\n        : this.parseIdentifier();\n\n      if (\n        process.env.BABEL_8_BREAKING ? node.id.type === \"Identifier\" : !nested\n      ) {\n        // @ts-expect-error checked above\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_NAMESPACE);\n      }\n\n      if (!process.env.BABEL_8_BREAKING && this.eat(tt.dot)) {\n        const inner = this.startNode<N.TsModuleDeclaration>();\n        this.tsParseModuleOrNamespaceDeclaration(inner, true);\n        // @ts-expect-error Fixme: refine typings\n        node.body = inner;\n      } else {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      }\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseAmbientExternalModuleDeclaration(\n      node: N.TsModuleDeclaration,\n    ): N.TsModuleDeclaration {\n      if (this.isContextual(tt._global)) {\n        node.kind = \"global\";\n        if (!process.env.BABEL_8_BREAKING) {\n          node.global = true;\n        }\n        node.id = this.parseIdentifier();\n      } else if (this.match(tt.string)) {\n        node.kind = \"module\";\n        node.id = super.parseStringLiteral(this.state.value);\n      } else {\n        this.unexpected();\n      }\n      if (this.match(tt.braceL)) {\n        this.scope.enter(ScopeFlag.TS_MODULE);\n        this.prodParam.enter(ParamKind.PARAM);\n        node.body = this.tsParseModuleBlock();\n        this.prodParam.exit();\n        this.scope.exit();\n      } else {\n        this.semicolon();\n      }\n\n      return this.finishNode(node, \"TSModuleDeclaration\");\n    }\n\n    tsParseImportEqualsDeclaration(\n      node: Undone<N.TsImportEqualsDeclaration>,\n      maybeDefaultIdentifier?: N.Identifier | null,\n      isExport?: boolean,\n    ): N.TsImportEqualsDeclaration {\n      if (!process.env.BABEL_8_BREAKING) {\n        node.isExport = isExport || false;\n      }\n      node.id = maybeDefaultIdentifier || this.parseIdentifier();\n      this.checkIdentifier(node.id, BindingFlag.TYPE_TS_VALUE_IMPORT);\n      this.expect(tt.eq);\n      const moduleReference = this.tsParseModuleReference();\n      if (\n        node.importKind === \"type\" &&\n        moduleReference.type !== \"TSExternalModuleReference\"\n      ) {\n        this.raise(TSErrors.ImportAliasHasImportType, moduleReference);\n      }\n      node.moduleReference = moduleReference;\n      this.semicolon();\n      return this.finishNode(node, \"TSImportEqualsDeclaration\");\n    }\n\n    tsIsExternalModuleReference(): boolean {\n      return (\n        this.isContextual(tt._require) &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      );\n    }\n\n    tsParseModuleReference(): N.TsModuleReference {\n      return this.tsIsExternalModuleReference()\n        ? this.tsParseExternalModuleReference()\n        : this.tsParseEntityName(tsParseEntityNameFlags.NONE);\n    }\n\n    tsParseExternalModuleReference(): N.TsExternalModuleReference {\n      const node = this.startNode<N.TsExternalModuleReference>();\n      this.expectContextual(tt._require);\n      this.expect(tt.parenL);\n      if (!this.match(tt.string)) {\n        this.unexpected();\n      }\n      // For compatibility to estree we cannot call parseLiteral directly here\n      node.expression = super.parseExprAtom() as N.StringLiteral;\n      this.expect(tt.parenR);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node, \"TSExternalModuleReference\");\n    }\n\n    // Utilities\n\n    tsLookAhead<T>(f: () => T): T {\n      const state = this.state.clone();\n      const res = f();\n      this.state = state;\n      return res;\n    }\n\n    tsTryParseAndCatch<T extends N.NodeBase | undefined | null>(\n      f: () => T,\n    ): T | undefined | null {\n      const result = this.tryParse(\n        abort =>\n          // @ts-expect-error todo(flow->ts)\n          f() || abort(),\n      );\n\n      if (result.aborted || !result.node) return;\n      if (result.error) this.state = result.failState;\n      // @ts-expect-error refine typings\n      return result.node;\n    }\n\n    tsTryParse<T>(f: () => T | undefined | false): T | undefined {\n      const state = this.state.clone();\n      const result = f();\n      if (result !== undefined && result !== false) {\n        return result;\n      }\n      this.state = state;\n    }\n\n    tsTryParseDeclare(node: any) {\n      if (this.isLineTerminator()) {\n        return;\n      }\n      const startType = this.state.type;\n      return this.tsInAmbientContext(() => {\n        switch (startType) {\n          case tt._function:\n            node.declare = true;\n            return super.parseFunctionStatement(\n              node,\n              /* async */ false,\n              /* isHangingDeclaration */ false,\n            );\n          case tt._class:\n            // While this is also set by tsParseExpressionStatement, we need to set it\n            // before parsing the class declaration to know how to register it in the scope.\n            node.declare = true;\n            return this.parseClass(\n              node as Undone<N.ClassDeclaration>,\n              /* isStatement */ true,\n              /* optionalId */ false,\n            );\n          case tt._enum:\n            return this.tsParseEnumDeclaration(node, { declare: true });\n          case tt._global:\n            return this.tsParseAmbientExternalModuleDeclaration(node);\n          case tt._let:\n            if (this.state.containsEsc) {\n              return;\n            }\n          // fallthrough\n          case tt._const:\n          case tt._var:\n            if (!this.match(tt._const) || !this.isLookaheadContextual(\"enum\")) {\n              node.declare = true;\n              return this.parseVarStatement(node, this.state.value, true);\n            }\n\n            // `const enum = 0;` not allowed because \"enum\" is a strict mode reserved word.\n            this.expect(tt._const);\n            return this.tsParseEnumDeclaration(node, {\n              const: true,\n              declare: true,\n            });\n          case tt._using:\n            if (this.isUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              return this.parseVarStatement(node, \"using\", true);\n            }\n            break;\n          case tt._await:\n            if (this.isAwaitUsing()) {\n              this.raise(\n                TSErrors.InvalidModifierOnAwaitUsingDeclaration,\n                this.state.startLoc,\n                \"declare\",\n              );\n              node.declare = true;\n              this.next(); // eat 'await'\n              return this.parseVarStatement(node, \"await using\", true);\n            }\n            break;\n          case tt._interface: {\n            const result = this.tsParseInterfaceDeclaration(node, {\n              declare: true,\n            });\n            if (result) return result;\n          }\n          // fallthrough\n          default:\n            if (tokenIsIdentifier(startType)) {\n              return this.tsParseDeclaration(\n                node,\n                this.state.value,\n                /* next */ true,\n                /* decorators */ null,\n              );\n            }\n        }\n      });\n    }\n\n    // Note: this won't be called unless the keyword is allowed in `shouldParseExportDeclaration`.\n    tsTryParseExportDeclaration(): N.Declaration | undefined {\n      return this.tsParseDeclaration(\n        this.startNode(),\n        this.state.value,\n        /* next */ true,\n        /* decorators */ null,\n      );\n    }\n\n    tsParseExpressionStatement(\n      node: Undone<N.TsModuleDeclaration>,\n      expr: N.Identifier,\n      decorators: N.Decorator[] | null,\n    ): N.Declaration | undefined {\n      switch (expr.name) {\n        case \"declare\": {\n          const declaration = this.tsTryParseDeclare(node);\n          if (declaration) {\n            declaration.declare = true;\n          }\n          return declaration;\n        }\n        case \"global\":\n          // `global { }` (with no `declare`) may appear inside an ambient module declaration.\n          // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past \"global\".\n          if (this.match(tt.braceL)) {\n            this.scope.enter(ScopeFlag.TS_MODULE);\n            this.prodParam.enter(ParamKind.PARAM);\n            const mod = node;\n            mod.kind = \"global\";\n            if (!process.env.BABEL_8_BREAKING) {\n              node.global = true;\n            }\n            mod.id = expr;\n            mod.body = this.tsParseModuleBlock();\n            this.scope.exit();\n            this.prodParam.exit();\n            return this.finishNode(mod, \"TSModuleDeclaration\");\n          }\n          break;\n\n        default:\n          return this.tsParseDeclaration(\n            node,\n            expr.name,\n            /* next */ false,\n            decorators,\n          );\n      }\n    }\n\n    // Common to tsTryParseDeclare, tsTryParseExportDeclaration, and tsParseExpressionStatement.\n    tsParseDeclaration(\n      node: any,\n      value: string,\n      next: boolean,\n      decorators: N.Decorator[] | null,\n    ) {\n      // no declaration apart from enum can be followed by a line break.\n      switch (value) {\n        case \"abstract\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            (this.match(tt._class) || tokenIsIdentifier(this.state.type))\n          ) {\n            return this.tsParseAbstractDeclaration(node, decorators);\n          }\n          break;\n\n        case \"module\":\n          if (this.tsCheckLineTerminator(next)) {\n            if (this.match(tt.string)) {\n              return this.tsParseAmbientExternalModuleDeclaration(node);\n            } else if (tokenIsIdentifier(this.state.type)) {\n              node.kind = \"module\";\n              return this.tsParseModuleOrNamespaceDeclaration(node);\n            }\n          }\n          break;\n\n        case \"namespace\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            node.kind = \"namespace\";\n            return this.tsParseModuleOrNamespaceDeclaration(node);\n          }\n          break;\n\n        case \"type\":\n          if (\n            this.tsCheckLineTerminator(next) &&\n            tokenIsIdentifier(this.state.type)\n          ) {\n            return this.tsParseTypeAliasDeclaration(node);\n          }\n          break;\n      }\n    }\n\n    tsCheckLineTerminator(next: boolean) {\n      if (next) {\n        if (this.hasFollowingLineBreak()) return false;\n        this.next();\n        return true;\n      }\n      return !this.isLineTerminator();\n    }\n\n    tsTryParseGenericAsyncArrowFunction(\n      startLoc: Position,\n    ): N.ArrowFunctionExpression | undefined {\n      if (!this.match(tt.lt)) return;\n\n      const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n      this.state.maybeInArrowParameters = true;\n\n      const res: Undone<N.ArrowFunctionExpression> | undefined =\n        this.tsTryParseAndCatch(() => {\n          const node = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n          node.typeParameters = this.tsParseTypeParameters(\n            this.tsParseConstModifier,\n          );\n          // Don't use overloaded parseFunctionParams which would look for \"<\" again.\n          super.parseFunctionParams(node);\n          node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();\n          this.expect(tt.arrow);\n          return node;\n        });\n\n      this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n      if (!res) return;\n\n      return super.parseArrowExpression(\n        res,\n        /* params are already set */ null,\n        /* async */ true,\n      );\n    }\n\n    // Used when parsing type arguments from ES or JSX productions, where the first token\n    // has been created without state.inType. Thus we need to re-scan the lt token.\n    tsParseTypeArgumentsInExpression():\n      | N.TsTypeParameterInstantiation\n      | undefined {\n      if (this.reScan_lt() !== tt.lt) return;\n      return this.tsParseTypeArguments();\n    }\n\n    tsParseTypeArguments(): N.TsTypeParameterInstantiation {\n      const node = this.startNode<N.TsTypeParameterInstantiation>();\n      node.params = this.tsInType(() =>\n        this.tsInTopLevelContext(() => {\n          this.expect(tt.lt);\n          return this.tsParseDelimitedList(\n            \"TypeParametersOrArguments\",\n            this.tsParseType.bind(this),\n          );\n        }),\n      );\n      if (node.params.length === 0) {\n        this.raise(TSErrors.EmptyTypeArguments, node);\n      } else if (!this.state.inType && this.curContext() === tc.brace) {\n        // rescan `>` when we are no longer in type context and JSX parsing context\n        // since it was tokenized when `inType` is `true`.\n        this.reScan_lt_gt();\n      }\n      this.expect(tt.gt);\n      return this.finishNode(node, \"TSTypeParameterInstantiation\");\n    }\n\n    tsIsDeclarationStart(): boolean {\n      return tokenIsTSDeclarationStart(this.state.type);\n    }\n\n    // ======================================================\n    // OVERRIDES\n    // ======================================================\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.tsIsDeclarationStart()) return false;\n      return super.isExportDefaultSpecifier();\n    }\n\n    parseBindingElement(\n      flags: ParseBindingListFlags,\n      decorators: N.Decorator[],\n    ): N.Pattern | N.TSParameterProperty {\n      // Store original location to include decorators/modifiers in range\n      const startLoc = decorators.length\n        ? decorators[0].loc.start\n        : this.state.startLoc;\n\n      const modified: ModifierBase = {};\n      this.tsParseModifiers(\n        {\n          allowedModifiers: [\n            \"public\",\n            \"private\",\n            \"protected\",\n            \"override\",\n            \"readonly\",\n          ],\n        },\n        modified,\n      );\n      const accessibility = modified.accessibility;\n      const override = modified.override;\n      const readonly = modified.readonly;\n      if (\n        !(flags & ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS) &&\n        (accessibility || readonly || override)\n      ) {\n        this.raise(TSErrors.UnexpectedParameterModifier, startLoc);\n      }\n\n      const left = this.parseMaybeDefault();\n      if (flags & ParseBindingListFlags.IS_FUNCTION_PARAMS) {\n        this.parseFunctionParamType(left);\n      }\n      const elt = this.parseMaybeDefault(left.loc.start, left);\n      if (accessibility || readonly || override) {\n        const pp = this.startNodeAt<N.TSParameterProperty>(startLoc);\n        if (decorators.length) {\n          pp.decorators = decorators;\n        }\n        if (accessibility) pp.accessibility = accessibility;\n        if (readonly) pp.readonly = readonly;\n        if (override) pp.override = override;\n        if (elt.type !== \"Identifier\" && elt.type !== \"AssignmentPattern\") {\n          this.raise(TSErrors.UnsupportedParameterPropertyKind, pp);\n        }\n        pp.parameter = elt as any as N.Identifier | N.AssignmentPattern;\n        return this.finishNode(pp, \"TSParameterProperty\");\n      }\n\n      if (decorators.length) {\n        left.decorators = decorators;\n      }\n\n      return elt;\n    }\n\n    isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n      return (\n        (node.type === \"TSParameterProperty\" &&\n          super.isSimpleParameter(node.parameter)) ||\n        super.isSimpleParameter(node)\n      );\n    }\n\n    tsDisallowOptionalPattern(node: Undone<N.Function>) {\n      for (const param of node.params) {\n        if (\n          param.type !== \"Identifier\" &&\n          (param as any).optional &&\n          !this.state.isAmbientContext\n        ) {\n          this.raise(TSErrors.PatternIsOptional, param);\n        }\n      }\n    }\n\n    setArrowFunctionParameters(\n      node: Undone<N.ArrowFunctionExpression>,\n      params: N.Expression[],\n      trailingCommaLoc?: Position | null,\n    ): void {\n      super.setArrowFunctionParameters(node, params, trailingCommaLoc);\n      this.tsDisallowOptionalPattern(node);\n    }\n\n    parseFunctionBodyAndFinish<\n      T extends\n        | N.Function\n        | N.TSDeclareMethod\n        | N.TSDeclareFunction\n        | N.ClassPrivateMethod,\n    >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeOrTypePredicateAnnotation(tt.colon);\n      }\n\n      const bodilessType =\n        type === \"FunctionDeclaration\"\n          ? \"TSDeclareFunction\"\n          : type === \"ClassMethod\" || type === \"ClassPrivateMethod\"\n            ? \"TSDeclareMethod\"\n            : undefined;\n      if (bodilessType && !this.match(tt.braceL) && this.isLineTerminator()) {\n        return this.finishNode(node, bodilessType);\n      }\n      if (bodilessType === \"TSDeclareFunction\" && this.state.isAmbientContext) {\n        this.raise(TSErrors.DeclareFunctionHasImplementation, node);\n        if ((node as Undone<N.FunctionDeclaration>).declare) {\n          return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);\n        }\n      }\n      this.tsDisallowOptionalPattern(node);\n\n      return super.parseFunctionBodyAndFinish(node, type, isMethod);\n    }\n\n    registerFunctionStatementId(node: N.Function): void {\n      if (!node.body && node.id) {\n        // Function ids are validated after parsing their body.\n        // For bodiless function, we need to do it here.\n        this.checkIdentifier(node.id, BindingFlag.TYPE_TS_AMBIENT);\n      } else {\n        super.registerFunctionStatementId(node);\n      }\n    }\n\n    tsCheckForInvalidTypeCasts(items: Array<N.Expression | N.SpreadElement>) {\n      items.forEach(node => {\n        if (node?.type === \"TSTypeCastExpression\") {\n          this.raise(TSErrors.UnexpectedTypeAnnotation, node.typeAnnotation);\n        }\n      });\n    }\n\n    toReferencedList(\n      exprList: Array<N.Expression | undefined | null>,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      isInParens?: boolean,\n    ): Array<N.Expression | undefined | null> {\n      // Handles invalid scenarios like: `f(a:b)`, `(a:b);`, and `(a:b,c:d)`.\n      //\n      // Note that `f<T>(a:b)` goes through a different path and is handled\n      // in `parseSubscript` directly.\n      this.tsCheckForInvalidTypeCasts(exprList);\n      return exprList;\n    }\n\n    parseArrayLike(\n      close: TokenType,\n      canBePattern: boolean,\n      isTuple: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.ArrayExpression | N.TupleExpression {\n      const node = super.parseArrayLike(\n        close,\n        canBePattern,\n        isTuple,\n        refExpressionErrors,\n      );\n\n      if (node.type === \"ArrayExpression\") {\n        this.tsCheckForInvalidTypeCasts(node.elements);\n      }\n\n      return node;\n    }\n\n    parseSubscript(\n      base: N.Expression,\n\n      startLoc: Position,\n      noCalls: boolean | undefined | null,\n      state: N.ParseSubscriptState,\n    ): N.Expression {\n      if (!this.hasPrecedingLineBreak() && this.match(tt.bang)) {\n        // When ! is consumed as a postfix operator (non-null assertion),\n        // disallow JSX tag forming after. e.g. When parsing `p! < n.p!`\n        // `<n.p` can not be a start of JSX tag\n        this.state.canStartJSXElement = false;\n        this.next();\n\n        const nonNullExpression =\n          this.startNodeAt<N.TsNonNullExpression>(startLoc);\n        nonNullExpression.expression = base;\n        return this.finishNode(nonNullExpression, \"TSNonNullExpression\");\n      }\n\n      let isOptionalCall = false;\n      if (\n        this.match(tt.questionDot) &&\n        this.lookaheadCharCode() === charCodes.lessThan\n      ) {\n        if (noCalls) {\n          state.stop = true;\n          return base;\n        }\n        state.optionalChainMember = isOptionalCall = true;\n        this.next();\n      }\n\n      // handles 'f<<T>'\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        let missingParenErrorLoc;\n        // tsTryParseAndCatch is expensive, so avoid if not necessary.\n        // There are number of things we are going to \"maybe\" parse, like type arguments on\n        // tagged template expressions. If any of them fail, walk it back and continue.\n        const result = this.tsTryParseAndCatch(() => {\n          if (!noCalls && this.atPossibleAsyncArrow(base)) {\n            // Almost certainly this is a generic async function `async <T>() => ...\n            // But it might be a call with a type argument `async<T>();`\n            const asyncArrowFn =\n              this.tsTryParseGenericAsyncArrowFunction(startLoc);\n            if (asyncArrowFn) {\n              state.stop = true;\n              return asyncArrowFn;\n            }\n          }\n\n          const typeArguments = this.tsParseTypeArgumentsInExpression();\n          if (!typeArguments) return;\n\n          if (isOptionalCall && !this.match(tt.parenL)) {\n            missingParenErrorLoc = this.state.curPosition();\n            return;\n          }\n\n          if (tokenIsTemplate(this.state.type)) {\n            const result = super.parseTaggedTemplateExpression(\n              base,\n              startLoc,\n              state,\n            );\n            if (process.env.BABEL_8_BREAKING) {\n              result.typeArguments = typeArguments;\n            } else {\n              result.typeParameters = typeArguments;\n            }\n            return result;\n          }\n\n          if (!noCalls && this.eat(tt.parenL)) {\n            const node = this.startNodeAt<\n              N.CallExpression | N.OptionalCallExpression\n            >(startLoc);\n            node.callee = base;\n            // @ts-expect-error (won't be any undefined arguments)\n            node.arguments = this.parseCallExpressionArguments();\n\n            // Handles invalid case: `f<T>(a:b)`\n            this.tsCheckForInvalidTypeCasts(node.arguments);\n\n            if (process.env.BABEL_8_BREAKING) {\n              node.typeArguments = typeArguments;\n            } else {\n              node.typeParameters = typeArguments;\n            }\n\n            if (state.optionalChainMember) {\n              (node as Undone<N.OptionalCallExpression>).optional =\n                isOptionalCall;\n            }\n\n            return this.finishCallExpression(node, state.optionalChainMember);\n          }\n\n          const tokenType = this.state.type;\n          if (\n            // a<b>>c is not (a<b>)>c, but a<(b>>c)\n            tokenType === tt.gt ||\n            // a<b>>>c is not (a<b>)>>c, but a<(b>>>c)\n            tokenType === tt.bitShiftR ||\n            // a<b>c is (a<b)>c\n            (tokenType !== tt.parenL &&\n              tokenCanStartExpression(tokenType) &&\n              !this.hasPrecedingLineBreak())\n          ) {\n            // Bail out.\n            return;\n          }\n\n          const node = this.startNodeAt<N.TsInstantiationExpression>(startLoc);\n          node.expression = base;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n          return this.finishNode(node, \"TSInstantiationExpression\");\n        });\n\n        if (missingParenErrorLoc) {\n          this.unexpected(missingParenErrorLoc, tt.parenL);\n        }\n\n        if (result) {\n          if (result.type === \"TSInstantiationExpression\") {\n            if (\n              this.match(tt.dot) ||\n              (this.match(tt.questionDot) &&\n                this.lookaheadCharCode() !== charCodes.leftParenthesis)\n            ) {\n              this.raise(\n                TSErrors.InvalidPropertyAccessAfterInstantiationExpression,\n                this.state.startLoc,\n              );\n            }\n            if (!this.match(tt.dot) && !this.match(tt.questionDot)) {\n              // If TSInstantiationExpression is not followed by . / ?.,\n              // it must be the end of a subscript chain. Note that `(` already forms\n              // call expression arguments\n              result.expression = super.stopParseSubscript(base, state);\n            }\n          }\n          return result;\n        }\n      }\n\n      return super.parseSubscript(base, startLoc, noCalls, state);\n    }\n\n    parseNewCallee(node: N.NewExpression): void {\n      super.parseNewCallee(node);\n\n      const { callee } = node;\n      if (\n        callee.type === \"TSInstantiationExpression\" &&\n        !callee.extra?.parenthesized\n      ) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.typeArguments = callee.typeArguments;\n        } else {\n          node.typeParameters = callee.typeParameters;\n        }\n        node.callee = callee.expression;\n      }\n    }\n\n    parseExprOp(\n      left: N.Expression,\n      leftStartLoc: Position,\n      minPrec: number,\n    ): N.Expression {\n      let isSatisfies: boolean;\n      if (\n        tokenOperatorPrecedence(tt._in) > minPrec &&\n        !this.hasPrecedingLineBreak() &&\n        (this.isContextual(tt._as) ||\n          (isSatisfies = this.isContextual(tt._satisfies)))\n      ) {\n        const node = this.startNodeAt<\n          N.TsAsExpression | N.TsSatisfiesExpression\n        >(leftStartLoc);\n        node.expression = left;\n        node.typeAnnotation = this.tsInType(() => {\n          this.next(); // \"as\" or \"satisfies\"\n          if (this.match(tt._const)) {\n            if (isSatisfies) {\n              this.raise(Errors.UnexpectedKeyword, this.state.startLoc, {\n                keyword: \"const\",\n              });\n            }\n            return this.tsParseTypeReference();\n          }\n\n          return this.tsParseType();\n        });\n        this.finishNode(\n          node,\n          isSatisfies ? \"TSSatisfiesExpression\" : \"TSAsExpression\",\n        );\n        // rescan `<`, `>` because they were scanned when this.state.inType was true\n        this.reScan_lt_gt();\n        return this.parseExprOp(\n          // @ts-expect-error todo(flow->ts)\n          node,\n          leftStartLoc,\n          minPrec,\n        );\n      }\n\n      return super.parseExprOp(left, leftStartLoc, minPrec);\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ): void {\n      // Strict mode words may be allowed as in `declare namespace N { const static: number; }`.\n      // And we have a type checker anyway, so don't bother having the parser do it.\n      if (!this.state.isAmbientContext) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    checkImportReflection(node: Undone<N.ImportDeclaration>) {\n      super.checkImportReflection(node);\n      if (node.module && node.importKind !== \"value\") {\n        this.raise(\n          TSErrors.ImportReflectionHasImportType,\n          node.specifiers[0].loc.start,\n        );\n      }\n    }\n\n    /*\n    Don't bother doing this check in TypeScript code because:\n    1. We may have a nested export statement with the same name:\n      export const x = 0;\n      export namespace N {\n        export const x = 1;\n      }\n    2. We have a type checker to warn us about this sort of thing.\n    */\n    checkDuplicateExports() {}\n\n    isPotentialImportPhase(isExport: boolean): boolean {\n      if (super.isPotentialImportPhase(isExport)) return true;\n      if (this.isContextual(tt._type)) {\n        const ch = this.lookaheadCharCode();\n        return isExport\n          ? ch === charCodes.leftCurlyBrace || ch === charCodes.asterisk\n          : ch !== charCodes.equalsTo;\n      }\n      return !isExport && this.isContextual(tt._typeof);\n    }\n\n    applyImportPhase(\n      node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n      isExport: boolean,\n      phase: string | null,\n      loc?: Position,\n    ): void {\n      super.applyImportPhase(node, isExport, phase, loc);\n      if (isExport) {\n        (node as N.ExportNamedDeclaration).exportKind =\n          phase === \"type\" ? \"type\" : \"value\";\n      } else {\n        (node as N.ImportDeclaration).importKind =\n          phase === \"type\" || phase === \"typeof\" ? phase : \"value\";\n      }\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    ): N.AnyImport {\n      if (this.match(tt.string)) {\n        node.importKind = \"value\";\n        return super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      let importNode;\n      if (\n        tokenIsIdentifier(this.state.type) &&\n        this.lookaheadCharCode() === charCodes.equalsTo\n      ) {\n        node.importKind = \"value\";\n        return this.tsParseImportEqualsDeclaration(\n          node as Undone<N.TsImportEqualsDeclaration>,\n        );\n      } else if (this.isContextual(tt._type)) {\n        const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n          node as Undone<N.ImportDeclaration>,\n          /* isExport */ false,\n        );\n        if (this.lookaheadCharCode() === charCodes.equalsTo) {\n          return this.tsParseImportEqualsDeclaration(\n            node as Undone<N.TsImportEqualsDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        } else {\n          importNode = super.parseImportSpecifiersAndAfter(\n            node as Undone<N.ImportDeclaration>,\n            maybeDefaultIdentifier,\n          );\n        }\n      } else {\n        importNode = super.parseImport(node as Undone<N.ImportDeclaration>);\n      }\n\n      // `import type` can only be used on imports with named imports or with a\n      // default import - but not both\n      if (\n        importNode.importKind === \"type\" &&\n        // @ts-expect-error refine typings\n        importNode.specifiers.length > 1 &&\n        // @ts-expect-error refine typings\n        importNode.specifiers[0].type === \"ImportDefaultSpecifier\"\n      ) {\n        this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, importNode);\n      }\n\n      return importNode;\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      if (this.match(tt._import)) {\n        // `export import A = B;`\n        const nodeImportEquals = process.env.BABEL_8_BREAKING\n          ? this.startNode<N.TsImportEqualsDeclaration>()\n          : (node as Undone<N.TsImportEqualsDeclaration>);\n        this.next(); // eat `tt._import`\n        let maybeDefaultIdentifier: N.Identifier | null = null;\n        if (\n          this.isContextual(tt._type) &&\n          // We pass false here, because we are parsing an `import ... =`\n          this.isPotentialImportPhase(/* isExport */ false)\n        ) {\n          maybeDefaultIdentifier = this.parseMaybeImportPhase(\n            nodeImportEquals,\n            /* isExport */ false,\n          );\n        } else {\n          nodeImportEquals.importKind = \"value\";\n        }\n        const declaration = this.tsParseImportEqualsDeclaration(\n          nodeImportEquals,\n          maybeDefaultIdentifier,\n          /* isExport */ true,\n        );\n        if (process.env.BABEL_8_BREAKING) {\n          (node as Undone<N.ExportNamedDeclaration>).attributes = [];\n          (node as Undone<N.ExportNamedDeclaration>).declaration = declaration;\n          (node as Undone<N.ExportNamedDeclaration>).exportKind = \"value\";\n          (node as Undone<N.ExportNamedDeclaration>).source = null;\n          (node as Undone<N.ExportNamedDeclaration>).specifiers = [];\n          return this.finishNode(node, \"ExportNamedDeclaration\");\n        } else {\n          return declaration;\n        }\n      } else if (this.eat(tt.eq)) {\n        // `export = x;`\n        const assign = node as Undone<N.TsExportAssignment>;\n        assign.expression = super.parseExpression();\n        this.semicolon();\n        this.sawUnambiguousESM = true;\n        return this.finishNode(assign, \"TSExportAssignment\");\n      } else if (this.eatContextual(tt._as)) {\n        // `export as namespace A;`\n        const decl = node as Undone<N.TsNamespaceExportDeclaration>;\n        // See `parseNamespaceExportDeclaration` in TypeScript's own parser\n        this.expectContextual(tt._namespace);\n        decl.id = this.parseIdentifier();\n        this.semicolon();\n        return this.finishNode(decl, \"TSNamespaceExportDeclaration\");\n      } else {\n        return super.parseExport(\n          node as Undone<N.ExportAllDeclaration | N.ExportDefaultDeclaration>,\n          decorators,\n        );\n      }\n    }\n\n    isAbstractClass(): boolean {\n      return (\n        this.isContextual(tt._abstract) && this.isLookaheadContextual(\"class\")\n      );\n    }\n\n    parseExportDefaultExpression(): N.ExportDefaultDeclaration[\"declaration\"] {\n      if (this.isAbstractClass()) {\n        const cls = this.startNode<N.Class>();\n        this.next(); // Skip \"abstract\"\n        cls.abstract = true;\n        return this.parseClass(cls, true, true);\n      }\n\n      // export default interface allowed in:\n      // https://github.com/Microsoft/TypeScript/pull/16040\n      if (this.match(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(\n          this.startNode<N.TsInterfaceDeclaration>(),\n        );\n        if (result) return result;\n      }\n\n      return super.parseExportDefaultExpression();\n    }\n\n    parseVarStatement(\n      node: N.VariableDeclaration,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n      allowMissingInitializer: boolean = false,\n    ) {\n      const { isAmbientContext } = this.state;\n      const declaration = super.parseVarStatement(\n        node,\n        kind,\n        allowMissingInitializer || isAmbientContext,\n      );\n\n      if (!isAmbientContext) return declaration;\n\n      // If node.declare is true, the error has already been raised in tsTryParseDeclare.\n      if (!node.declare && (kind === \"using\" || kind === \"await using\")) {\n        this.raiseOverwrite(\n          TSErrors.UsingDeclarationInAmbientContext,\n          node,\n          kind,\n        );\n        return declaration;\n      }\n\n      for (const { id, init } of declaration.declarations) {\n        // Empty initializer is the easy case that we want.\n        if (!init) continue;\n\n        // var and let aren't ever allowed initializers.\n        if (kind === \"var\" || kind === \"let\" || !!id.typeAnnotation) {\n          this.raise(TSErrors.InitializerNotAllowedInAmbientContext, init);\n        } else if (\n          !isValidAmbientConstInitializer(init, this.hasPlugin(\"estree\"))\n        ) {\n          this.raise(\n            TSErrors.ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference,\n            init,\n          );\n        }\n      }\n\n      return declaration;\n    }\n\n    parseStatementContent(\n      flags: ParseStatementFlag,\n      decorators?: N.Decorator[] | null,\n    ): N.Statement {\n      if (this.match(tt._const) && this.isLookaheadContextual(\"enum\")) {\n        const node = this.startNode<N.TsEnumDeclaration>();\n        this.expect(tt._const); // eat 'const'\n        return this.tsParseEnumDeclaration(node, { const: true });\n      }\n\n      if (this.isContextual(tt._enum)) {\n        return this.tsParseEnumDeclaration(\n          this.startNode<N.TsEnumDeclaration>(),\n        );\n      }\n\n      if (this.isContextual(tt._interface)) {\n        const result = this.tsParseInterfaceDeclaration(this.startNode());\n        if (result) return result;\n      }\n\n      return super.parseStatementContent(flags, decorators);\n    }\n\n    parseAccessModifier(): N.Accessibility | undefined | null {\n      return this.tsParseModifier([\"public\", \"protected\", \"private\"]);\n    }\n\n    tsHasSomeModifiers(member: any, modifiers: readonly TsModifier[]): boolean {\n      return modifiers.some(modifier => {\n        if (tsIsAccessModifier(modifier)) {\n          return member.accessibility === modifier;\n        }\n        return !!member[modifier];\n      });\n    }\n\n    tsIsStartOfStaticBlocks() {\n      return (\n        this.isContextual(tt._static) &&\n        this.lookaheadCharCode() === charCodes.leftCurlyBrace\n      );\n    }\n\n    parseClassMember(\n      classBody: N.ClassBody,\n      member: any,\n      state: N.ParseClassMemberState,\n    ): void {\n      const modifiers = [\n        \"declare\",\n        \"private\",\n        \"public\",\n        \"protected\",\n        \"override\",\n        \"abstract\",\n        \"readonly\",\n        \"static\",\n      ] as const;\n      this.tsParseModifiers(\n        {\n          allowedModifiers: modifiers,\n          disallowedModifiers: [\"in\", \"out\"],\n          stopOnStartOfClassStaticBlock: true,\n          errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions,\n        },\n        member,\n      );\n\n      const callParseClassMemberWithIsStatic = () => {\n        if (this.tsIsStartOfStaticBlocks()) {\n          this.next(); // eat \"static\"\n          this.next(); // eat \"{\"\n          if (this.tsHasSomeModifiers(member, modifiers)) {\n            this.raise(\n              TSErrors.StaticBlockCannotHaveModifier,\n              this.state.curPosition(),\n            );\n          }\n          super.parseClassStaticBlock(classBody, member as N.StaticBlock);\n        } else {\n          this.parseClassMemberWithIsStatic(\n            classBody,\n            member,\n            state,\n            !!member.static,\n          );\n        }\n      };\n      if (member.declare) {\n        this.tsInAmbientContext(callParseClassMemberWithIsStatic);\n      } else {\n        callParseClassMemberWithIsStatic();\n      }\n    }\n\n    parseClassMemberWithIsStatic(\n      classBody: N.ClassBody,\n      member: Undone<N.ClassMember | N.TsIndexSignature>,\n      state: N.ParseClassMemberState,\n      isStatic: boolean,\n    ): void {\n      const idx = this.tsTryParseIndexSignature(\n        member as Undone<N.TsIndexSignature>,\n      );\n      if (idx) {\n        classBody.body.push(idx);\n\n        if ((member as any).abstract) {\n          this.raise(TSErrors.IndexSignatureHasAbstract, member);\n        }\n        if ((member as any).accessibility) {\n          this.raise(TSErrors.IndexSignatureHasAccessibility, member, {\n            modifier: (member as any).accessibility,\n          });\n        }\n        if ((member as any).declare) {\n          this.raise(TSErrors.IndexSignatureHasDeclare, member);\n        }\n        if ((member as any).override) {\n          this.raise(TSErrors.IndexSignatureHasOverride, member);\n        }\n\n        return;\n      }\n\n      if (!this.state.inAbstractClass && (member as any).abstract) {\n        this.raise(TSErrors.NonAbstractClassHasAbstractMethod, member);\n      }\n\n      if ((member as any).override) {\n        if (!state.hadSuperClass) {\n          this.raise(TSErrors.OverrideNotInSubClass, member);\n        }\n      }\n\n      /*:: invariant(member.type !== \"TSIndexSignature\") */\n\n      super.parseClassMemberWithIsStatic(\n        classBody,\n        member as Undone<N.ClassMember>,\n        state,\n        isStatic,\n      );\n    }\n\n    parsePostMemberNameModifiers(\n      methodOrProp: N.ClassMethod | N.ClassProperty | N.ClassPrivateProperty,\n    ): void {\n      const optional = this.eat(tt.question);\n      if (optional) methodOrProp.optional = true;\n\n      if ((methodOrProp as any).readonly && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasReadonly, methodOrProp);\n      }\n\n      if ((methodOrProp as any).declare && this.match(tt.parenL)) {\n        this.raise(TSErrors.ClassMethodHasDeclare, methodOrProp);\n      }\n    }\n\n    // Note: The reason we do this in `parseExpressionStatement` and not `parseStatement`\n    // is that e.g. `type()` is valid JS, so we must try parsing that first.\n    // If it's really a type, we will parse `type` as the statement, and can correct it here\n    // by parsing the rest.\n    // @ts-expect-error plugin overrides interfaces\n    parseExpressionStatement(\n      node: Undone<N.ExpressionStatement>,\n      expr: N.Expression,\n      decorators: N.Decorator[] | null,\n    ): N.Statement {\n      const decl =\n        expr.type === \"Identifier\"\n          ? // @ts-expect-error refine typings\n            this.tsParseExpressionStatement(node, expr, decorators)\n          : undefined;\n      return decl || super.parseExpressionStatement(node, expr, decorators);\n    }\n\n    // export type\n    // Should be true for anything parsed by `tsTryParseExportDeclaration`.\n    shouldParseExportDeclaration(): boolean {\n      if (this.tsIsDeclarationStart()) return true;\n      return super.shouldParseExportDeclaration();\n    }\n\n    // An apparent conditional expression could actually be an optional parameter in an arrow function.\n    parseConditional(\n      expr: N.Expression,\n\n      startLoc: Position,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): N.Expression {\n      if (!this.match(tt.question)) return expr;\n\n      if (this.state.maybeInArrowParameters) {\n        const nextCh = this.lookaheadCharCode();\n        // These tokens cannot start an expression, so if one of them follows\n        // ? then we are probably in an arrow function parameters list and we\n        // don't parse the conditional expression.\n        if (\n          nextCh === charCodes.comma || // (a?, b) => c\n          nextCh === charCodes.equalsTo || // (a? = b) => c\n          nextCh === charCodes.colon || // (a?: b) => c\n          nextCh === charCodes.rightParenthesis // (a?) => c\n        ) {\n          /*:: invariant(refExpressionErrors != null) */\n          this.setOptionalParametersError(refExpressionErrors);\n          return expr;\n        }\n      }\n\n      return super.parseConditional(expr, startLoc, refExpressionErrors);\n    }\n\n    // Note: These \"type casts\" are *not* valid TS expressions.\n    // But we parse them here and change them when completing the arrow function.\n    parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n      node: T,\n      startLoc: Position,\n    ): T | N.TsTypeCastExpression {\n      const newNode = super.parseParenItem(node, startLoc);\n      if (this.eat(tt.question)) {\n        (newNode as N.Identifier).optional = true;\n        // Include questionmark in location of node\n        // Don't use this.finishNode() as otherwise we might process comments twice and\n        // include already consumed parens\n        this.resetEndLocation(node);\n      }\n\n      if (this.match(tt.colon)) {\n        const typeCastNode = this.startNodeAt<N.TsTypeCastExpression>(startLoc);\n        typeCastNode.expression = node as N.Expression;\n        typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();\n\n        return this.finishNode(typeCastNode, \"TSTypeCastExpression\");\n      }\n\n      return node;\n    }\n\n    parseExportDeclaration(\n      node: N.ExportNamedDeclaration,\n    ): N.Declaration | undefined | null {\n      if (!this.state.isAmbientContext && this.isContextual(tt._declare)) {\n        return this.tsInAmbientContext(() => this.parseExportDeclaration(node));\n      }\n\n      // Store original location\n      const startLoc = this.state.startLoc;\n\n      const isDeclare = this.eatContextual(tt._declare);\n\n      if (\n        isDeclare &&\n        (this.isContextual(tt._declare) || !this.shouldParseExportDeclaration())\n      ) {\n        throw this.raise(\n          TSErrors.ExpectedAmbientAfterExportDeclare,\n          this.state.startLoc,\n        );\n      }\n\n      const isIdentifier = tokenIsIdentifier(this.state.type);\n      const declaration: N.Declaration | undefined | null =\n        (isIdentifier && this.tsTryParseExportDeclaration()) ||\n        super.parseExportDeclaration(node);\n\n      if (!declaration) return null;\n\n      if (\n        declaration.type === \"TSInterfaceDeclaration\" ||\n        declaration.type === \"TSTypeAliasDeclaration\" ||\n        isDeclare\n      ) {\n        node.exportKind = \"type\";\n      }\n\n      if (isDeclare && declaration.type !== \"TSImportEqualsDeclaration\") {\n        // Reset location to include `declare` in range\n        this.resetStartLocation(declaration, startLoc);\n\n        declaration.declare = true;\n      }\n\n      return declaration;\n    }\n\n    parseClassId(\n      node: N.Class,\n      isStatement: boolean,\n      optionalId?: boolean | null,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType?: BindingFlag,\n    ): void {\n      if ((!isStatement || optionalId) && this.isContextual(tt._implements)) {\n        return;\n      }\n\n      super.parseClassId(\n        node,\n        isStatement,\n        optionalId,\n        (node as any).declare\n          ? BindingFlag.TYPE_TS_AMBIENT\n          : BindingFlag.TYPE_CLASS,\n      );\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseInOutConstModifiers,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n    }\n\n    parseClassPropertyAnnotation(\n      node: N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty,\n    ): void {\n      if (!node.optional) {\n        if (this.eat(tt.bang)) {\n          node.definite = true;\n        } else if (this.eat(tt.question)) {\n          node.optional = true;\n        }\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) node.typeAnnotation = type;\n    }\n\n    parseClassProperty(node: N.ClassProperty): N.ClassProperty {\n      this.parseClassPropertyAnnotation(node);\n\n      if (\n        this.state.isAmbientContext &&\n        !(node.readonly && !node.typeAnnotation) &&\n        this.match(tt.eq)\n      ) {\n        this.raise(\n          TSErrors.DeclareClassFieldHasInitializer,\n          this.state.startLoc,\n        );\n      }\n      if (node.abstract && this.match(tt.eq)) {\n        const { key } = node;\n        this.raise(\n          TSErrors.AbstractPropertyHasInitializer,\n          this.state.startLoc,\n          {\n            propertyName:\n              key.type === \"Identifier\" && !node.computed\n                ? key.name\n                : `[${this.input.slice(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          },\n        );\n      }\n\n      return super.parseClassProperty(node);\n    }\n\n    parseClassPrivateProperty(\n      node: N.ClassPrivateProperty,\n    ): N.ClassPrivateProperty {\n      if (node.abstract) {\n        this.raise(TSErrors.PrivateElementHasAbstract, node);\n      }\n\n      if (node.accessibility) {\n        this.raise(TSErrors.PrivateElementHasAccessibility, node, {\n          modifier: node.accessibility,\n        });\n      }\n\n      this.parseClassPropertyAnnotation(node);\n      return super.parseClassPrivateProperty(node);\n    }\n\n    parseClassAccessorProperty(\n      node: N.ClassAccessorProperty,\n    ): N.ClassAccessorProperty {\n      this.parseClassPropertyAnnotation(node);\n      if (node.optional) {\n        this.raise(TSErrors.AccessorCannotBeOptional, node);\n      }\n      return super.parseClassAccessorProperty(node);\n    }\n\n    pushClassMethod(\n      classBody: N.ClassBody,\n      method: N.ClassMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowsDirectSuper: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters && isConstructor) {\n        this.raise(TSErrors.ConstructorHasTypeParameters, typeParameters);\n      }\n\n      const { declare = false, kind } = method;\n\n      if (declare && (kind === \"get\" || kind === \"set\")) {\n        this.raise(TSErrors.DeclareAccessor, method, { kind });\n      }\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassMethod(\n        classBody,\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    }\n\n    pushClassPrivateMethod(\n      classBody: N.ClassBody,\n      method: N.ClassPrivateMethod,\n      isGenerator: boolean,\n      isAsync: boolean,\n    ): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) method.typeParameters = typeParameters;\n      super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);\n    }\n\n    declareClassPrivateMethodInScope(\n      node: N.ClassPrivateMethod | N.TSDeclareMethod,\n      kind: number,\n    ) {\n      if (node.type === \"TSDeclareMethod\") return;\n      // This happens when using the \"estree\" plugin.\n      if (\n        (node as N.Node).type === \"MethodDefinition\" &&\n        (node as unknown as N.EstreeMethodDefinition).value.body == null\n      ) {\n        return;\n      }\n\n      super.declareClassPrivateMethodInScope(node, kind);\n    }\n\n    parseClassSuper(node: N.Class): void {\n      super.parseClassSuper(node);\n      // handle `extends f<<T>\n      if (node.superClass && (this.match(tt.lt) || this.match(tt.bitShiftL))) {\n        if (process.env.BABEL_8_BREAKING) {\n          node.superTypeArguments = this.tsParseTypeArgumentsInExpression();\n        } else {\n          node.superTypeParameters = this.tsParseTypeArgumentsInExpression();\n        }\n      }\n      if (this.eatContextual(tt._implements)) {\n        node.implements = this.tsParseHeritageClause(\"implements\");\n      }\n    }\n\n    parseObjPropValue<T extends N.ObjectMember>(\n      prop: Undone<T>,\n      startLoc: Position | undefined | null,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isPattern: boolean,\n      isAccessor: boolean,\n      refExpressionErrors?: ExpressionErrors | null,\n    ): T {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) prop.typeParameters = typeParameters;\n\n      return super.parseObjPropValue(\n        prop,\n\n        startLoc,\n        isGenerator,\n        isAsync,\n        isPattern,\n        isAccessor,\n        refExpressionErrors,\n      );\n    }\n\n    parseFunctionParams(node: N.Function, isConstructor: boolean): void {\n      const typeParameters = this.tsTryParseTypeParameters(\n        this.tsParseConstModifier,\n      );\n      if (typeParameters) node.typeParameters = typeParameters;\n      super.parseFunctionParams(node, isConstructor);\n    }\n\n    // `let x: number;`\n    parseVarId(\n      decl: N.VariableDeclarator,\n      kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    ): void {\n      super.parseVarId(decl, kind);\n      if (\n        decl.id.type === \"Identifier\" &&\n        !this.hasPrecedingLineBreak() &&\n        this.eat(tt.bang)\n      ) {\n        decl.definite = true;\n      }\n\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) {\n        decl.id.typeAnnotation = type;\n        this.resetEndLocation(decl.id); // set end position to end of type\n      }\n    }\n\n    // parse the return type of an async arrow function - let foo = (async (): number => {});\n    parseAsyncArrowFromCallExpression(\n      node: N.ArrowFunctionExpression,\n      call: N.CallExpression,\n    ): N.ArrowFunctionExpression {\n      if (this.match(tt.colon)) {\n        node.returnType = this.tsParseTypeAnnotation();\n      }\n      return super.parseAsyncArrowFromCallExpression(node, call);\n    }\n\n    parseMaybeAssign(\n      refExpressionErrors?: ExpressionErrors | null,\n      afterLeftParse?: Function,\n    ): N.Expression {\n      // Note: When the JSX plugin is on, type assertions (`<T> x`) aren't valid syntax.\n\n      let state: State | undefined | null;\n      let jsx;\n      let typeCast;\n\n      if (\n        this.hasPlugin(\"jsx\") &&\n        (this.match(tt.jsxTagStart) || this.match(tt.lt))\n      ) {\n        // Prefer to parse JSX if possible. But may be an arrow fn.\n        state = this.state.clone();\n\n        jsx = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n\n        /*:: invariant(!jsx.aborted) */\n        /*:: invariant(jsx.node != null) */\n        if (!jsx.error) return jsx.node;\n\n        // Remove `tc.j_expr` or `tc.j_oTag` from context added\n        // by parsing `jsxTagStart` to stop the JSX plugin from\n        // messing with the tokens\n        const { context } = this.state;\n        const currentContext = context[context.length - 1];\n        if (currentContext === tc.j_oTag || currentContext === tc.j_expr) {\n          context.pop();\n        }\n      }\n\n      if (!jsx?.error && !this.match(tt.lt)) {\n        return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);\n      }\n\n      // Either way, we're looking at a '<': tt.jsxTagStart or relational.\n\n      // If the state was cloned in the JSX parsing branch above but there\n      // have been any error in the tryParse call, this.state is set to state\n      // so we still need to clone it.\n      if (!state || state === this.state) state = this.state.clone();\n\n      let typeParameters: N.TsTypeParameterDeclaration | undefined | null;\n      // We need to explicitly annotate 'abort' for microsoft/TypeScript#58170\n      const arrow = this.tryParse((abort: () => never) => {\n        // This is similar to TypeScript's `tryParseParenthesizedArrowFunctionExpression`.\n        typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);\n        const expr = super.parseMaybeAssign(\n          refExpressionErrors,\n          afterLeftParse,\n        );\n\n        if (\n          expr.type !== \"ArrowFunctionExpression\" ||\n          expr.extra?.parenthesized\n        ) {\n          abort();\n        }\n\n        // Correct TypeScript code should have at least 1 type parameter, but don't crash on bad code.\n        if (typeParameters?.params.length !== 0) {\n          this.resetStartLocationFromNode(expr, typeParameters);\n        }\n        expr.typeParameters = typeParameters;\n\n        if (process.env.BABEL_8_BREAKING) {\n          if (\n            this.hasPlugin(\"jsx\") &&\n            expr.typeParameters.params.length === 1 &&\n            !expr.typeParameters.extra?.trailingComma\n          ) {\n            // report error if single type parameter used without trailing comma.\n            const parameter = expr.typeParameters\n              .params[0] as N.TsTypeParameter;\n            if (!parameter.constraint) {\n              // A single type parameter must either have constraints\n              // or a trailing comma, otherwise it's ambiguous with JSX.\n              this.raise(\n                TSErrors.SingleTypeParameterWithoutTrailingComma,\n                createPositionWithColumnOffset(parameter.loc.end, 1),\n                {\n                  typeParameterName: process.env.BABEL_8_BREAKING\n                    ? (parameter.name as N.Identifier).name\n                    : (parameter.name as string),\n                },\n              );\n            }\n          }\n        }\n\n        return expr;\n      }, state);\n\n      /*:: invariant(arrow.node != null) */\n      if (!arrow.error && !arrow.aborted) {\n        // This error is reported outside of the this.tryParse call so that\n        // in case of <T>(x) => 2, we don't consider <T>(x) as a type assertion\n        // because of this error.\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (!jsx) {\n        // Try parsing a type cast instead of an arrow function.\n        // This will never happen outside of JSX.\n        // (Because in JSX the '<' should be a jsxTagStart and not a relational.\n        assert(!this.hasPlugin(\"jsx\"));\n\n        // This will start with a type assertion (via parseMaybeUnary).\n        // But don't directly call `this.tsParseTypeAssertion` because we want to handle any binary after it.\n        typeCast = this.tryParse(\n          () => super.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n          state,\n        );\n        /*:: invariant(!typeCast.aborted) */\n        /*:: invariant(typeCast.node != null) */\n        if (!typeCast.error) return typeCast.node;\n      }\n\n      if (jsx?.node) {\n        /*:: invariant(jsx.failState) */\n        this.state = jsx.failState;\n        return jsx.node;\n      }\n\n      if (arrow.node) {\n        /*:: invariant(arrow.failState) */\n        this.state = arrow.failState;\n        if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);\n        return arrow.node;\n      }\n\n      if (typeCast?.node) {\n        /*:: invariant(typeCast.failState) */\n        this.state = typeCast.failState;\n        return typeCast.node;\n      }\n\n      throw jsx?.error || arrow.error || typeCast?.error;\n    }\n\n    reportReservedArrowTypeParam(node: any) {\n      if (\n        node.params.length === 1 &&\n        !node.params[0].constraint &&\n        !node.extra?.trailingComma &&\n        this.getPluginOption(\"typescript\", \"disallowAmbiguousJSXLike\")\n      ) {\n        this.raise(TSErrors.ReservedArrowTypeParam, node);\n      }\n    }\n\n    // Handle type assertions\n    parseMaybeUnary(\n      refExpressionErrors?: ExpressionErrors | null,\n      sawUnary?: boolean,\n    ): N.Expression {\n      if (!this.hasPlugin(\"jsx\") && this.match(tt.lt)) {\n        return this.tsParseTypeAssertion();\n      }\n      return super.parseMaybeUnary(refExpressionErrors, sawUnary);\n    }\n\n    parseArrow(\n      node: Undone<N.ArrowFunctionExpression>,\n    ): Undone<N.ArrowFunctionExpression> | undefined | null {\n      if (this.match(tt.colon)) {\n        // This is different from how the TS parser does it.\n        // TS uses lookahead. The Babel Parser parses it as a parenthesized expression and converts.\n\n        const result = this.tryParse(abort => {\n          const returnType = this.tsParseTypeOrTypePredicateAnnotation(\n            tt.colon,\n          );\n          if (this.canInsertSemicolon() || !this.match(tt.arrow)) abort();\n          return returnType;\n        });\n\n        if (result.aborted) return;\n\n        if (!result.thrown) {\n          if (result.error) this.state = result.failState;\n          // @ts-expect-error refine typings\n          node.returnType = result.node;\n        }\n      }\n\n      return super.parseArrow(node);\n    }\n\n    // Allow type annotations inside of a parameter list.\n    parseFunctionParamType(param: N.Pattern) {\n      if (this.eat(tt.question)) {\n        (param as any as N.Identifier).optional = true;\n      }\n      const type = this.tsTryParseTypeAnnotation();\n      if (type) param.typeAnnotation = type;\n      this.resetEndLocation(param);\n\n      return param;\n    }\n\n    isAssignable(node: N.Node, isBinding?: boolean): boolean {\n      switch (node.type) {\n        case \"TSTypeCastExpression\":\n          return this.isAssignable(node.expression, isBinding);\n        case \"TSParameterProperty\":\n          return true;\n        default:\n          return super.isAssignable(node, isBinding);\n      }\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean = false): void {\n      switch (node.type) {\n        case \"ParenthesizedExpression\":\n          this.toAssignableParenthesizedExpression(node, isLHS);\n          break;\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n          if (isLHS) {\n            this.expressionScope.recordArrowParameterBindingError(\n              TSErrors.UnexpectedTypeCastInParameter,\n              node,\n            );\n          } else {\n            this.raise(TSErrors.UnexpectedTypeCastInParameter, node);\n          }\n          this.toAssignable(node.expression, isLHS);\n          break;\n        case \"AssignmentExpression\":\n          if (!isLHS && node.left.type === \"TSTypeCastExpression\") {\n            node.left = this.typeCastToParameter(node.left) as N.Assignable;\n          }\n        /* fall through */\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    toAssignableParenthesizedExpression(\n      node: N.ParenthesizedExpression,\n      isLHS: boolean,\n    ): void {\n      switch (node.expression.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSNonNullExpression\":\n        case \"TSTypeAssertion\":\n        case \"ParenthesizedExpression\":\n          this.toAssignable(node.expression, isLHS);\n          break;\n        default:\n          super.toAssignable(node, isLHS);\n      }\n    }\n\n    checkToRestConversion(node: N.Node, allowPattern: boolean): void {\n      switch (node.type) {\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n        case \"TSNonNullExpression\":\n          this.checkToRestConversion(node.expression, false);\n          break;\n        default:\n          super.checkToRestConversion(node, allowPattern);\n      }\n    }\n\n    isValidLVal(\n      type:\n        | \"TSTypeCastExpression\"\n        | \"TSParameterProperty\"\n        | \"TSNonNullExpression\"\n        | \"TSInstantiationExpression\"\n        | \"TSAsExpression\"\n        | \"TSSatisfiesExpression\"\n        | \"TSTypeAssertion\",\n      isUnparenthesizedInAssign: boolean,\n      binding: BindingFlag,\n    ) {\n      switch (type) {\n        // Allow \"typecasts\" to appear on the left of assignment expressions,\n        // because it may be in an arrow function.\n        // e.g. `const f = (foo: number = 0) => foo;`\n        case \"TSTypeCastExpression\":\n          return true;\n        case \"TSParameterProperty\":\n          return \"parameter\";\n        case \"TSNonNullExpression\":\n          return \"expression\";\n        case \"TSAsExpression\":\n        case \"TSSatisfiesExpression\":\n        case \"TSTypeAssertion\":\n          return (\n            (binding !== BindingFlag.TYPE_NONE || !isUnparenthesizedInAssign) &&\n            ([\"expression\", true] as [string, boolean])\n          );\n        default:\n          return super.isValidLVal(type, isUnparenthesizedInAssign, binding);\n      }\n    }\n\n    parseBindingAtom(): N.Pattern {\n      if (this.state.type === tt._this) {\n        return this.parseIdentifier(/* liberal */ true);\n      }\n      return super.parseBindingAtom();\n    }\n\n    parseMaybeDecoratorArguments(\n      expr: N.Expression,\n      startLoc: Position,\n    ): N.Expression {\n      // handles `@f<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsParseTypeArgumentsInExpression();\n\n        if (this.match(tt.parenL)) {\n          const call = super.parseMaybeDecoratorArguments(\n            expr,\n            startLoc,\n          ) as N.CallExpression;\n          if (process.env.BABEL_8_BREAKING) {\n            call.typeArguments = typeArguments;\n          } else {\n            call.typeParameters = typeArguments;\n          }\n\n          return call;\n        }\n\n        this.unexpected(null, tt.parenL);\n      }\n\n      return super.parseMaybeDecoratorArguments(expr, startLoc);\n    }\n\n    checkCommaAfterRest(\n      close: (typeof charCodes)[keyof typeof charCodes],\n    ): boolean {\n      if (\n        this.state.isAmbientContext &&\n        this.match(tt.comma) &&\n        this.lookaheadCharCode() === close\n      ) {\n        this.next();\n        return false;\n      }\n      return super.checkCommaAfterRest(close);\n    }\n\n    // === === === === === === === === === === === === === === === ===\n    // Note: All below methods are duplicates of something in flow.js.\n    // Not sure what the best way to combine these is.\n    // === === === === === === === === === === === === === === === ===\n\n    isClassMethod(): boolean {\n      return this.match(tt.lt) || super.isClassMethod();\n    }\n\n    isClassProperty(): boolean {\n      return (\n        this.match(tt.bang) || this.match(tt.colon) || super.isClassProperty()\n      );\n    }\n\n    parseMaybeDefault<P extends N.Pattern>(\n      startLoc?: Position | null,\n      left?: P | null,\n    ): P | N.AssignmentPattern {\n      const node = super.parseMaybeDefault(startLoc, left);\n\n      if (\n        node.type === \"AssignmentPattern\" &&\n        node.typeAnnotation &&\n        node.right.start < node.typeAnnotation.start\n      ) {\n        this.raise(TSErrors.TypeAnnotationAfterAssign, node.typeAnnotation);\n      }\n\n      return node;\n    }\n\n    // ensure that inside types, we bypass the jsx parser plugin\n    getTokenFromCode(code: number): void {\n      if (this.state.inType) {\n        if (code === charCodes.greaterThan) {\n          this.finishOp(tt.gt, 1);\n          return;\n        }\n        if (code === charCodes.lessThan) {\n          this.finishOp(tt.lt, 1);\n          return;\n        }\n      }\n      super.getTokenFromCode(code);\n    }\n\n    // used after we have finished parsing types\n    reScan_lt_gt() {\n      const { type } = this.state;\n      if (type === tt.lt) {\n        this.state.pos -= 1;\n        this.readToken_lt();\n      } else if (type === tt.gt) {\n        this.state.pos -= 1;\n        this.readToken_gt();\n      }\n    }\n\n    reScan_lt() {\n      const { type } = this.state;\n      if (type === tt.bitShiftL) {\n        this.state.pos -= 2;\n        this.finishOp(tt.lt, 1);\n        return tt.lt;\n      }\n      return type;\n    }\n\n    toAssignableListItem(\n      exprList: (N.Expression | N.SpreadElement | N.RestElement)[],\n      index: number,\n      isLHS: boolean,\n    ): void {\n      const node = exprList[index];\n      if (node.type === \"TSTypeCastExpression\") {\n        exprList[index] = this.typeCastToParameter(node);\n      }\n      super.toAssignableListItem(exprList, index, isLHS);\n    }\n\n    typeCastToParameter(node: N.TsTypeCastExpression): N.Expression {\n      (node.expression as N.Identifier).typeAnnotation = node.typeAnnotation;\n\n      this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);\n\n      return node.expression;\n    }\n\n    shouldParseArrow(params: Array<N.Node>) {\n      if (this.match(tt.colon)) {\n        return params.every(expr => this.isAssignable(expr, true));\n      }\n      return super.shouldParseArrow(params);\n    }\n\n    shouldParseAsyncArrow(): boolean {\n      return this.match(tt.colon) || super.shouldParseAsyncArrow();\n    }\n\n    canHaveLeadingDecorator() {\n      // Avoid unnecessary lookahead in checking for abstract class unless needed!\n      return super.canHaveLeadingDecorator() || this.isAbstractClass();\n    }\n\n    jsxParseOpeningElementAfterName(\n      node: N.JSXOpeningElement,\n    ): N.JSXOpeningElement {\n      // handles `<Component<<T>`\n      if (this.match(tt.lt) || this.match(tt.bitShiftL)) {\n        const typeArguments = this.tsTryParseAndCatch(() =>\n          this.tsParseTypeArgumentsInExpression(),\n        );\n        if (typeArguments) {\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments = typeArguments;\n          } else {\n            node.typeParameters = typeArguments;\n          }\n        }\n      }\n      return super.jsxParseOpeningElementAfterName(node);\n    }\n\n    getGetterSetterExpectedParamCount(\n      method: N.ObjectMethod | N.ClassMethod,\n    ): number {\n      const baseCount = super.getGetterSetterExpectedParamCount(method);\n      const params = this.getObjectOrClassMethodParams(method);\n      const firstParam = params[0];\n      const hasContextParam = firstParam && this.isThisParam(firstParam);\n\n      return hasContextParam ? baseCount + 1 : baseCount;\n    }\n\n    parseCatchClauseParam(): N.Pattern {\n      const param = super.parseCatchClauseParam();\n      const type = this.tsTryParseTypeAnnotation();\n\n      if (type) {\n        param.typeAnnotation = type;\n        this.resetEndLocation(param);\n      }\n\n      return param;\n    }\n\n    tsInAmbientContext<T>(cb: () => T): T {\n      const { isAmbientContext: oldIsAmbientContext, strict: oldStrict } =\n        this.state;\n      this.state.isAmbientContext = true;\n      this.state.strict = false;\n      try {\n        return cb();\n      } finally {\n        this.state.isAmbientContext = oldIsAmbientContext;\n        this.state.strict = oldStrict;\n      }\n    }\n\n    parseClass<T extends N.Class>(\n      node: Undone<T>,\n      isStatement: boolean,\n      optionalId?: boolean,\n    ): T {\n      const oldInAbstractClass = this.state.inAbstractClass;\n      this.state.inAbstractClass = !!(node as any).abstract;\n      try {\n        return super.parseClass(node, isStatement, optionalId);\n      } finally {\n        this.state.inAbstractClass = oldInAbstractClass;\n      }\n    }\n\n    tsParseAbstractDeclaration(\n      node: any,\n      decorators: N.Decorator[] | null,\n    ): N.ClassDeclaration | N.TsInterfaceDeclaration | undefined | null {\n      if (this.match(tt._class)) {\n        node.abstract = true;\n        return this.maybeTakeDecorators(\n          decorators,\n          this.parseClass<N.ClassDeclaration>(\n            node as N.ClassDeclaration,\n            /* isStatement */ true,\n            /* optionalId */ false,\n          ),\n        );\n      } else if (this.isContextual(tt._interface)) {\n        // for invalid abstract interface\n\n        // To avoid\n        //   abstract interface\n        //   Foo {}\n        if (!this.hasFollowingLineBreak()) {\n          node.abstract = true;\n          this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifier, node);\n          return this.tsParseInterfaceDeclaration(\n            node as N.TsInterfaceDeclaration,\n          );\n        }\n      } else {\n        this.unexpected(null, tt._class);\n      }\n    }\n\n    parseMethod<\n      T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod,\n    >(\n      node: Undone<T>,\n      isGenerator: boolean,\n      isAsync: boolean,\n      isConstructor: boolean,\n      allowDirectSuper: boolean,\n      type: T[\"type\"],\n      inClassScope?: boolean,\n    ) {\n      const method = super.parseMethod<T>(\n        node,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowDirectSuper,\n        type,\n        inClassScope,\n      );\n      // @ts-expect-error todo(flow->ts) property not defined for all types in union\n      if (method.abstract || method.type === \"TSAbstractMethodDefinition\") {\n        const hasEstreePlugin = this.hasPlugin(\"estree\");\n        const methodFn = hasEstreePlugin\n          ? // @ts-expect-error estree typings\n            method.value\n          : method;\n        if (methodFn.body) {\n          const { key } = method;\n          this.raise(TSErrors.AbstractMethodHasImplementation, method, {\n            methodName:\n              key.type === \"Identifier\" && !method.computed\n                ? key.name\n                : `[${this.input.slice(this.offsetToSourcePos(key.start), this.offsetToSourcePos(key.end))}]`,\n          });\n        }\n      }\n      return method;\n    }\n\n    tsParseTypeParameterName(): N.Identifier | string {\n      const typeName: N.Identifier = this.parseIdentifier();\n      return process.env.BABEL_8_BREAKING ? typeName : typeName.name;\n    }\n\n    shouldParseAsAmbientContext(): boolean {\n      return !!this.getPluginOption(\"typescript\", \"dts\");\n    }\n\n    parse() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.parse();\n    }\n\n    getExpression() {\n      if (this.shouldParseAsAmbientContext()) {\n        this.state.isAmbientContext = true;\n      }\n      return super.getExpression();\n    }\n\n    parseExportSpecifier(\n      node: Undone<N.ExportSpecifier>,\n      isString: boolean,\n      isInTypeExport: boolean,\n      isMaybeTypeOnly: boolean,\n    ) {\n      if (!isString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          node,\n          /* isImport */ false,\n          isInTypeExport,\n        );\n        return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n      }\n      node.exportKind = \"value\";\n      return super.parseExportSpecifier(\n        node,\n        isString,\n        isInTypeExport,\n        isMaybeTypeOnly,\n      );\n    }\n\n    parseImportSpecifier(\n      specifier: Undone<N.ImportSpecifier>,\n      importedIsString: boolean,\n      isInTypeOnlyImport: boolean,\n      isMaybeTypeOnly: boolean,\n      // eslint-disable-next-line @typescript-eslint/no-unused-vars\n      bindingType: BindingFlag | undefined,\n    ): N.ImportSpecifier {\n      if (!importedIsString && isMaybeTypeOnly) {\n        this.parseTypeOnlyImportExportSpecifier(\n          specifier,\n          /* isImport */ true,\n          isInTypeOnlyImport,\n        );\n        return this.finishNode<N.ImportSpecifier>(specifier, \"ImportSpecifier\");\n      }\n      specifier.importKind = \"value\";\n      return super.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        isInTypeOnlyImport,\n        isMaybeTypeOnly,\n        isInTypeOnlyImport\n          ? BindingFlag.TYPE_TS_TYPE_IMPORT\n          : BindingFlag.TYPE_TS_VALUE_IMPORT,\n      );\n    }\n\n    parseTypeOnlyImportExportSpecifier(\n      node: any,\n      isImport: boolean,\n      isInTypeOnlyImportExport: boolean,\n    ): void {\n      const leftOfAsKey = isImport ? \"imported\" : \"local\";\n      const rightOfAsKey = isImport ? \"local\" : \"exported\";\n\n      let leftOfAs = node[leftOfAsKey];\n      let rightOfAs;\n\n      let hasTypeSpecifier = false;\n      let canParseAsKeyword = true;\n\n      const loc = leftOfAs.loc.start;\n\n      // https://github.com/microsoft/TypeScript/blob/fc4f9d83d5939047aa6bb2a43965c6e9bbfbc35b/src/compiler/parser.ts#L7411-L7456\n      // import { type } from \"mod\";          - hasTypeSpecifier: false, leftOfAs: type\n      // import { type as } from \"mod\";       - hasTypeSpecifier: true,  leftOfAs: as\n      // import { type as as } from \"mod\";    - hasTypeSpecifier: false, leftOfAs: type, rightOfAs: as\n      // import { type as as as } from \"mod\"; - hasTypeSpecifier: true,  leftOfAs: as,   rightOfAs: as\n      if (this.isContextual(tt._as)) {\n        // { type as ...? }\n        const firstAs = this.parseIdentifier();\n        if (this.isContextual(tt._as)) {\n          // { type as as ...? }\n          const secondAs = this.parseIdentifier();\n          if (tokenIsKeywordOrIdentifier(this.state.type)) {\n            // { type as as something }\n            hasTypeSpecifier = true;\n            leftOfAs = firstAs;\n            rightOfAs = isImport\n              ? this.parseIdentifier()\n              : this.parseModuleExportName();\n            canParseAsKeyword = false;\n          } else {\n            // { type as as }\n            rightOfAs = secondAs;\n            canParseAsKeyword = false;\n          }\n        } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n          // { type as something }\n          canParseAsKeyword = false;\n          rightOfAs = isImport\n            ? this.parseIdentifier()\n            : this.parseModuleExportName();\n        } else {\n          // { type as }\n          hasTypeSpecifier = true;\n          leftOfAs = firstAs;\n        }\n      } else if (tokenIsKeywordOrIdentifier(this.state.type)) {\n        // { type something ...? }\n        hasTypeSpecifier = true;\n        if (isImport) {\n          leftOfAs = this.parseIdentifier(true);\n          if (!this.isContextual(tt._as)) {\n            this.checkReservedWord(\n              leftOfAs.name,\n              leftOfAs.loc.start,\n              true,\n              true,\n            );\n          }\n        } else {\n          leftOfAs = this.parseModuleExportName();\n        }\n      }\n      if (hasTypeSpecifier && isInTypeOnlyImportExport) {\n        this.raise(\n          isImport\n            ? TSErrors.TypeModifierIsUsedInTypeImports\n            : TSErrors.TypeModifierIsUsedInTypeExports,\n          loc,\n        );\n      }\n\n      node[leftOfAsKey] = leftOfAs;\n      node[rightOfAsKey] = rightOfAs;\n\n      const kindKey = isImport ? \"importKind\" : \"exportKind\";\n      node[kindKey] = hasTypeSpecifier ? \"type\" : \"value\";\n\n      if (canParseAsKeyword && this.eatContextual(tt._as)) {\n        node[rightOfAsKey] = isImport\n          ? this.parseIdentifier()\n          : this.parseModuleExportName();\n      }\n      if (!node[rightOfAsKey]) {\n        node[rightOfAsKey] = this.cloneIdentifier(node[leftOfAsKey]);\n      }\n      if (isImport) {\n        this.checkIdentifier(\n          node[rightOfAsKey],\n          hasTypeSpecifier\n            ? BindingFlag.TYPE_TS_TYPE_IMPORT\n            : BindingFlag.TYPE_TS_VALUE_IMPORT,\n        );\n      }\n    }\n\n    /**\n     * This hook is defined in the ESTree plugin.\n     * The TS-ESLint always define optional AST properties, here we provide the\n     * default value for such properties immediately after `finishNode` was invoked.\n     *\n     * @param node The AST node finished by finishNode\n     * @returns\n     */\n    fillOptionalPropertiesForTSESLint(node: N.Node): void {\n      switch (node.type) {\n        case \"ExpressionStatement\":\n          node.directive ??= undefined;\n          return;\n        case \"RestElement\":\n          node.value = undefined;\n        /* fallthrough */\n        case \"Identifier\":\n        case \"ArrayPattern\":\n        case \"AssignmentPattern\":\n        case \"ObjectPattern\":\n          node.decorators ??= [];\n          node.optional ??= false;\n          node.typeAnnotation ??= undefined;\n          return;\n        case \"TSParameterProperty\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSEmptyBodyFunctionExpression\":\n          node.body = null;\n        /* fallthrough */\n        case \"TSDeclareFunction\":\n        case \"FunctionDeclaration\":\n        case \"FunctionExpression\":\n        case \"ClassMethod\":\n        case \"ClassPrivateMethod\":\n          node.declare ??= false;\n          node.returnType ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"Property\":\n          node.optional ??= false;\n          return;\n        case \"TSMethodSignature\":\n        case \"TSPropertySignature\":\n          node.optional ??= false;\n        /* fallthrough */\n        case \"TSIndexSignature\":\n          node.accessibility ??= undefined;\n          node.readonly ??= false;\n          node.static ??= false;\n          return;\n        case \"TSAbstractPropertyDefinition\":\n        case \"PropertyDefinition\":\n        case \"TSAbstractAccessorProperty\":\n        case \"AccessorProperty\":\n          node.declare ??= false;\n          node.definite ??= false;\n          node.readonly ??= false;\n          node.typeAnnotation ??= undefined;\n        /* fallthrough */\n        case \"TSAbstractMethodDefinition\":\n        case \"MethodDefinition\":\n          node.accessibility ??= undefined;\n          node.decorators ??= [];\n          node.override ??= false;\n          node.optional ??= false;\n          return;\n        case \"ClassExpression\":\n          node.id ??= null;\n        /* fallthrough */\n        case \"ClassDeclaration\":\n          node.abstract ??= false;\n          node.declare ??= false;\n          node.decorators ??= [];\n          node.implements ??= [];\n          node.superTypeArguments ??= undefined;\n          node.typeParameters ??= undefined;\n          return;\n        case \"TSTypeAliasDeclaration\":\n        case \"VariableDeclaration\":\n          node.declare ??= false;\n          return;\n        case \"VariableDeclarator\":\n          node.definite ??= false;\n          return;\n        case \"TSEnumDeclaration\":\n          node.const ??= false;\n          node.declare ??= false;\n          return;\n        case \"TSEnumMember\":\n          node.computed ??= false;\n          return;\n        case \"TSImportType\":\n          node.qualifier ??= null;\n          node.options ??= null;\n          if (process.env.BABEL_8_BREAKING) {\n            node.typeArguments ??= null;\n          }\n          return;\n        case \"TSInterfaceDeclaration\":\n          node.declare ??= false;\n          node.extends ??= [];\n          return;\n        case \"TSModuleDeclaration\":\n          node.declare ??= false;\n          node.global ??= node.kind === \"global\";\n          return;\n        case \"TSTypeParameter\":\n          node.const ??= false;\n          node.in ??= false;\n          node.out ??= false;\n          return;\n      }\n    }\n  };\n\nfunction isPossiblyLiteralEnum(expression: N.Expression): boolean {\n  if (expression.type !== \"MemberExpression\") return false;\n\n  const { computed, property } = expression;\n\n  if (\n    computed &&\n    property.type !== \"StringLiteral\" &&\n    (property.type !== \"TemplateLiteral\" || property.expressions.length > 0)\n  ) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n\n// If a const declaration has no type annotation and is initialized to\n// a string literal, numeric literal, or enum reference, then it is\n// allowed. In an ideal world, we'd check whether init was *actually* an\n// enum reference, but we allow anything that \"could be\" a literal enum\n// in `isPossiblyLiteralEnum` since we don't have all the information\n// that the typescript compiler has.\nfunction isValidAmbientConstInitializer(\n  expression: N.Expression,\n  estree: boolean,\n): boolean {\n  const { type } = expression;\n  if (expression.extra?.parenthesized) {\n    return false;\n  }\n  if (estree) {\n    if (type === \"Literal\") {\n      const { value } = expression;\n      if (typeof value === \"string\" || typeof value === \"boolean\") {\n        return true;\n      }\n    }\n  } else {\n    if (type === \"StringLiteral\" || type === \"BooleanLiteral\") {\n      return true;\n    }\n  }\n  if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {\n    return true;\n  }\n  if (type === \"TemplateLiteral\" && expression.expressions.length === 0) {\n    return true;\n  }\n  if (isPossiblyLiteralEnum(expression)) {\n    return true;\n  }\n  return false;\n}\n\nfunction isNumber(expression: N.Expression, estree: boolean): boolean {\n  if (estree) {\n    return (\n      expression.type === \"Literal\" &&\n      (typeof expression.value === \"number\" || \"bigint\" in expression)\n    );\n  }\n  return (\n    expression.type === \"NumericLiteral\" || expression.type === \"BigIntLiteral\"\n  );\n}\n\nfunction isNegativeNumber(expression: N.Expression, estree: boolean): boolean {\n  if (expression.type === \"UnaryExpression\") {\n    const { operator, argument } = expression;\n    if (operator === \"-\" && isNumber(argument, estree)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nfunction isUncomputedMemberExpressionChain(expression: N.Expression): boolean {\n  if (expression.type === \"Identifier\") return true;\n  if (expression.type !== \"MemberExpression\" || expression.computed) {\n    return false;\n  }\n\n  return isUncomputedMemberExpressionChain(expression.object);\n}\n","import * as charCodes from \"charcodes\";\n\nimport { tokenLabelName, tt } from \"../tokenizer/types.ts\";\nimport type Parser from \"../parser/index.ts\";\nimport type * as N from \"../types.ts\";\nimport { ParseErrorEnum } from \"../parse-error.ts\";\nimport type { Undone } from \"../parser/node.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\nimport type { BindingFlag } from \"../util/scopeflags.ts\";\nimport type { Position } from \"../util/location.ts\";\n\ntype PossiblePlaceholders = {\n  Identifier: N.Identifier;\n  StringLiteral: N.StringLiteral;\n  Expression: N.Expression;\n  Statement: N.Statement;\n  Declaration: N.Declaration;\n  BlockStatement: N.BlockStatement;\n  ClassBody: N.ClassBody;\n  Pattern: N.Pattern;\n};\nexport type PlaceholderTypes = keyof PossiblePlaceholders;\n\ntype NodeOf<T extends keyof PossiblePlaceholders> = PossiblePlaceholders[T];\n// todo: when there  is proper union type for Node\n// type NodeOf<T extends PlaceholderTypes> = Extract<N.Node, { type: T }>;\n\n// todo: Placeholder<T> breaks everything, because its type is incompatible with\n// the substituted nodes.\ntype MaybePlaceholder<T extends PlaceholderTypes> = NodeOf<T>; // | Placeholder<T>\n\n/* eslint sort-keys: \"error\" */\nconst PlaceholderErrors = ParseErrorEnum`placeholders`({\n  ClassNameIsRequired: \"A class name is required.\",\n  UnexpectedSpace: \"Unexpected space in placeholder.\",\n});\n\nexport default (superClass: typeof Parser) =>\n  class PlaceholdersParserMixin extends superClass implements Parser {\n    parsePlaceholder<T extends PlaceholderTypes>(\n      expectedNode: T,\n    ): /*?N.Placeholder<T>*/ MaybePlaceholder<T> | undefined {\n      if (this.match(tt.placeholder)) {\n        const node = this.startNode<N.Placeholder<T>>();\n        this.next();\n        this.assertNoSpace();\n\n        // We can't use this.parseIdentifier because\n        // we don't want nested placeholders.\n        node.name = super.parseIdentifier(/* liberal */ true);\n\n        this.assertNoSpace();\n        this.expect(tt.placeholder);\n        return this.finishPlaceholder(node, expectedNode);\n      }\n    }\n\n    finishPlaceholder<T extends PlaceholderTypes>(\n      node: Undone<N.Placeholder> | Undone<NodeOf<PlaceholderTypes>>,\n      expectedNode: T,\n    ): /*N.Placeholder<T>*/ MaybePlaceholder<T> {\n      let placeholder = node as unknown as N.Placeholder<T>;\n\n      if (!placeholder.expectedNode || !placeholder.type) {\n        placeholder = this.finishNode(\n          placeholder,\n          \"Placeholder\",\n        ) as unknown as N.Placeholder<T>;\n      }\n\n      placeholder.expectedNode = expectedNode;\n      return placeholder as unknown as MaybePlaceholder<T>;\n    }\n\n    /* ============================================================ *\n     * tokenizer/index.ts                                           *\n     * ============================================================ */\n\n    getTokenFromCode(code: number) {\n      if (\n        code === charCodes.percentSign &&\n        this.input.charCodeAt(this.state.pos + 1) === charCodes.percentSign\n      ) {\n        this.finishOp(tt.placeholder, 2);\n      } else {\n        super.getTokenFromCode(code);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.ts                                         *\n     * ============================================================ */\n\n    parseExprAtom(\n      refExpressionErrors?: ExpressionErrors | null,\n    ): MaybePlaceholder<\"Expression\"> {\n      return (\n        this.parsePlaceholder(\"Expression\") ||\n        super.parseExprAtom(refExpressionErrors)\n      );\n    }\n\n    parseIdentifier(liberal?: boolean): MaybePlaceholder<\"Identifier\"> {\n      // NOTE: This function only handles identifiers outside of\n      // expressions and binding patterns, since they are already\n      // handled by the parseExprAtom and parseBindingAtom functions.\n      // This is needed, for example, to parse \"class %%NAME%% {}\".\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseIdentifier(liberal)\n      );\n    }\n\n    checkReservedWord(\n      word: string,\n      startLoc: Position,\n      checkKeywords: boolean,\n      isBinding: boolean,\n    ) {\n      // Sometimes we call #checkReservedWord(node.name), expecting\n      // that node is an Identifier. If it is a Placeholder, name\n      // will be undefined.\n      if (word !== undefined) {\n        super.checkReservedWord(word, startLoc, checkKeywords, isBinding);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/node.ts                                               *\n     * ============================================================ */\n\n    cloneIdentifier<T extends N.Identifier | N.Placeholder>(node: T): T {\n      const cloned = super.cloneIdentifier(node);\n      if (cloned.type === \"Placeholder\") {\n        cloned.expectedNode = (node as N.Placeholder).expectedNode;\n      }\n      return cloned;\n    }\n\n    cloneStringLiteral<\n      T extends N.EstreeLiteral | N.StringLiteral | N.Placeholder,\n    >(node: T): T {\n      if (node.type === \"Placeholder\") {\n        return this.cloneIdentifier(node) as T;\n      }\n      return super.cloneStringLiteral(node);\n    }\n\n    /* ============================================================ *\n     * parser/lval.ts                                               *\n     * ============================================================ */\n\n    parseBindingAtom(): MaybePlaceholder<\"Pattern\"> {\n      return this.parsePlaceholder(\"Pattern\") || super.parseBindingAtom();\n    }\n\n    isValidLVal(type: string, isParenthesized: boolean, binding: BindingFlag) {\n      return (\n        type === \"Placeholder\" ||\n        super.isValidLVal(type, isParenthesized, binding)\n      );\n    }\n\n    toAssignable(node: N.Node, isLHS: boolean): void {\n      if (\n        node &&\n        node.type === \"Placeholder\" &&\n        node.expectedNode === \"Expression\"\n      ) {\n        node.expectedNode = \"Pattern\";\n      } else {\n        super.toAssignable(node, isLHS);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/statement.ts                                          *\n     * ============================================================ */\n\n    chStartsBindingIdentifier(ch: number, pos: number): boolean {\n      if (super.chStartsBindingIdentifier(ch, pos)) {\n        return true;\n      }\n\n      // Accept \"let %%\" as the start of \"let %%placeholder%%\", as though the\n      // placeholder were an identifier.\n      const next = this.nextTokenStart();\n      if (\n        this.input.charCodeAt(next) === charCodes.percentSign &&\n        this.input.charCodeAt(next + 1) === charCodes.percentSign\n      ) {\n        return true;\n      }\n\n      return false;\n    }\n\n    verifyBreakContinue(\n      node: N.BreakStatement | N.ContinueStatement,\n      isBreak: boolean,\n    ) {\n      // @ts-expect-error: node.label could be Placeholder\n      if (node.label && node.label.type === \"Placeholder\") return;\n      super.verifyBreakContinue(node, isBreak);\n    }\n\n    // @ts-expect-error Plugin will override parser interface\n    parseExpressionStatement(\n      node: MaybePlaceholder<\"Statement\">,\n      expr: MaybePlaceholder<\"Expression\">,\n    ): MaybePlaceholder<\"Statement\"> {\n      // @ts-expect-error placeholder typings\n      if (expr.type !== \"Placeholder\" || expr.extra?.parenthesized) {\n        // @ts-expect-error placeholder typings\n        return super.parseExpressionStatement(node, expr);\n      }\n\n      if (this.match(tt.colon)) {\n        // @ts-expect-error placeholder typings\n        const stmt: N.LabeledStatement = node;\n        stmt.label = this.finishPlaceholder(expr, \"Identifier\");\n        this.next();\n        stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();\n        return this.finishNode(stmt, \"LabeledStatement\");\n      }\n\n      this.semicolon();\n      const stmtPlaceholder = node as unknown as N.Placeholder<\"Statement\">;\n      stmtPlaceholder.name = (expr as N.Placeholder).name;\n      return this.finishPlaceholder(stmtPlaceholder, \"Statement\");\n    }\n\n    parseBlock(\n      allowDirectives?: boolean,\n      createNewLexicalScope?: boolean,\n      afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n    ): MaybePlaceholder<\"BlockStatement\"> {\n      return (\n        this.parsePlaceholder(\"BlockStatement\") ||\n        super.parseBlock(\n          allowDirectives,\n          createNewLexicalScope,\n          afterBlockParse,\n        )\n      );\n    }\n\n    parseFunctionId(\n      requireId?: boolean,\n    ): MaybePlaceholder<\"Identifier\"> | undefined | null {\n      return (\n        this.parsePlaceholder(\"Identifier\") || super.parseFunctionId(requireId)\n      );\n    }\n    // @ts-expect-error Plugin will override parser interface\n    parseClass<T extends N.Class>(\n      node: T,\n      isStatement: /* T === ClassDeclaration */ boolean,\n      optionalId?: boolean,\n    ): T {\n      const type = isStatement ? \"ClassDeclaration\" : \"ClassExpression\";\n\n      this.next();\n      const oldStrict = this.state.strict;\n\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (placeholder) {\n        if (\n          this.match(tt._extends) ||\n          this.match(tt.placeholder) ||\n          this.match(tt.braceL)\n        ) {\n          node.id = placeholder;\n        } else if (optionalId || !isStatement) {\n          node.id = null;\n          node.body = this.finishPlaceholder(placeholder, \"ClassBody\");\n          return this.finishNode(node, type);\n        } else {\n          throw this.raise(\n            PlaceholderErrors.ClassNameIsRequired,\n            this.state.startLoc,\n          );\n        }\n      } else {\n        this.parseClassId(node, isStatement, optionalId);\n      }\n\n      super.parseClassSuper(node);\n      node.body =\n        this.parsePlaceholder(\"ClassBody\") ||\n        super.parseClassBody(!!node.superClass, oldStrict);\n      return this.finishNode(node, type);\n    }\n\n    parseExport(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      decorators: N.Decorator[] | null,\n    ): N.AnyExport {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseExport(node, decorators);\n\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // export %%DECL%%;\n        node2.specifiers = [];\n        node2.source = null;\n        node2.declaration = this.finishPlaceholder(placeholder, \"Declaration\");\n        return this.finishNode(node2, \"ExportNamedDeclaration\");\n      }\n\n      // export %%NAME%% from \"foo\";\n      this.expectPlugin(\"exportDefaultFrom\");\n      const specifier = this.startNode<N.ExportDefaultSpecifier>();\n      specifier.exported = placeholder;\n      node2.specifiers = [this.finishNode(specifier, \"ExportDefaultSpecifier\")];\n\n      return super.parseExport(node2, decorators);\n    }\n\n    isExportDefaultSpecifier(): boolean {\n      if (this.match(tt._default)) {\n        const next = this.nextTokenStart();\n        if (this.isUnparsedContextual(next, \"from\")) {\n          if (\n            this.input.startsWith(\n              tokenLabelName(tt.placeholder),\n              this.nextTokenStartSince(next + 4),\n            )\n          ) {\n            return true;\n          }\n        }\n      }\n      return super.isExportDefaultSpecifier();\n    }\n\n    maybeParseExportDefaultSpecifier(\n      node: Undone<\n        | N.ExportDefaultDeclaration\n        | N.ExportAllDeclaration\n        | N.ExportNamedDeclaration\n      >,\n      maybeDefaultIdentifier: N.Identifier | null,\n    ): node is Undone<N.ExportNamedDeclaration> {\n      if ((node as N.ExportNamedDeclaration).specifiers?.length) {\n        // \"export %%NAME%%\" has already been parsed by #parseExport.\n        return true;\n      }\n      return super.maybeParseExportDefaultSpecifier(\n        node,\n        maybeDefaultIdentifier,\n      );\n    }\n\n    checkExport(node: N.ExportNamedDeclaration): void {\n      const { specifiers } = node;\n      if (specifiers?.length) {\n        node.specifiers = specifiers.filter(\n          // @ts-expect-error placeholder typings\n          node => node.exported.type === \"Placeholder\",\n        );\n      }\n      super.checkExport(node);\n      node.specifiers = specifiers;\n    }\n\n    parseImport(\n      node: Undone<N.ImportDeclaration>,\n    ): N.ImportDeclaration | N.TsImportEqualsDeclaration {\n      const placeholder = this.parsePlaceholder(\"Identifier\");\n      if (!placeholder) return super.parseImport(node);\n\n      node.specifiers = [];\n\n      if (!this.isContextual(tt._from) && !this.match(tt.comma)) {\n        // import %%STRING%%;\n        node.source = this.finishPlaceholder(placeholder, \"StringLiteral\");\n        this.semicolon();\n        return this.finishNode(node, \"ImportDeclaration\");\n      }\n\n      // import %%DEFAULT%% ...\n      const specifier =\n        this.startNodeAtNode<N.ImportDefaultSpecifier>(placeholder);\n      specifier.local = placeholder;\n      node.specifiers.push(\n        this.finishNode(specifier, \"ImportDefaultSpecifier\"),\n      );\n\n      if (this.eat(tt.comma)) {\n        // import %%DEFAULT%%, * as ...\n        const hasStarImport = this.maybeParseStarImportSpecifier(node);\n\n        // import %%DEFAULT%%, { ...\n        if (!hasStarImport) this.parseNamedImportSpecifiers(node);\n      }\n\n      this.expectContextual(tt._from);\n      node.source = this.parseImportSource();\n      this.semicolon();\n      return this.finishNode(node, \"ImportDeclaration\");\n    }\n\n    parseImportSource(): MaybePlaceholder<\"StringLiteral\"> {\n      // import ... from %%STRING%%;\n\n      return (\n        this.parsePlaceholder(\"StringLiteral\") || super.parseImportSource()\n      );\n    }\n\n    // Throws if the current token and the prev one are separated by a space.\n    assertNoSpace(): void {\n      if (\n        this.state.start >\n        this.offsetToSourcePos(this.state.lastTokEndLoc.index)\n      ) {\n        this.raise(PlaceholderErrors.UnexpectedSpace, this.state.lastTokEndLoc);\n      }\n    }\n  };\n","import type Parser from \"../parser/index.ts\";\nimport { tokenIsIdentifier, tt } from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport type { ExpressionErrors } from \"../parser/util.ts\";\n\nexport default (superClass: typeof Parser) =>\n  class V8IntrinsicMixin extends superClass implements Parser {\n    parseV8Intrinsic(): N.Expression {\n      if (this.match(tt.modulo)) {\n        const v8IntrinsicStartLoc = this.state.startLoc;\n        // let the `loc` of Identifier starts from `%`\n        const node = this.startNode<N.Identifier>();\n        this.next(); // eat '%'\n        if (tokenIsIdentifier(this.state.type)) {\n          const name = this.parseIdentifierName();\n          const identifier = this.createIdentifier(node, name);\n          this.castNodeTo(identifier, \"V8IntrinsicIdentifier\");\n          if (this.match(tt.parenL)) {\n            return identifier;\n          }\n        }\n        this.unexpected(v8IntrinsicStartLoc);\n      }\n    }\n\n    /* ============================================================ *\n     * parser/expression.js                                         *\n     * ============================================================ */\n\n    parseExprAtom(refExpressionErrors?: ExpressionErrors | null): N.Expression {\n      return (\n        this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors)\n      );\n    }\n  };\n","import type Parser from \"./parser/index.ts\";\nimport type { PluginConfig } from \"./typings.ts\";\n\nexport type Plugin = PluginConfig;\n\nexport type MixinPlugin = (\n  superClass: new (...args: any) => Parser,\n) => new (...args: any) => Parser;\n\nconst PIPELINE_PROPOSALS = process.env.BABEL_8_BREAKING\n  ? [\"fsharp\", \"hack\"]\n  : [\"minimal\", \"fsharp\", \"hack\", \"smart\"];\nconst TOPIC_TOKENS = [\"^^\", \"@@\", \"^\", \"%\", \"#\"];\n\nexport function validatePlugins(pluginsMap: Map<string, any>) {\n  if (pluginsMap.has(\"decorators\")) {\n    if (pluginsMap.has(\"decorators-legacy\")) {\n      throw new Error(\n        \"Cannot use the decorators and decorators-legacy plugin together\",\n      );\n    }\n\n    const decoratorsBeforeExport =\n      pluginsMap.get(\"decorators\").decoratorsBeforeExport;\n    if (\n      decoratorsBeforeExport != null &&\n      typeof decoratorsBeforeExport !== \"boolean\"\n    ) {\n      throw new Error(\n        \"'decoratorsBeforeExport' must be a boolean, if specified.\",\n      );\n    }\n\n    const allowCallParenthesized =\n      pluginsMap.get(\"decorators\").allowCallParenthesized;\n    if (\n      allowCallParenthesized != null &&\n      typeof allowCallParenthesized !== \"boolean\"\n    ) {\n      throw new Error(\"'allowCallParenthesized' must be a boolean.\");\n    }\n  }\n\n  if (pluginsMap.has(\"flow\") && pluginsMap.has(\"typescript\")) {\n    throw new Error(\"Cannot combine flow and typescript plugins.\");\n  }\n\n  if (pluginsMap.has(\"placeholders\") && pluginsMap.has(\"v8intrinsic\")) {\n    throw new Error(\"Cannot combine placeholders and v8intrinsic plugins.\");\n  }\n\n  if (pluginsMap.has(\"pipelineOperator\")) {\n    const proposal = pluginsMap.get(\"pipelineOperator\").proposal;\n\n    if (!PIPELINE_PROPOSALS.includes(proposal)) {\n      const proposalList = PIPELINE_PROPOSALS.map(p => `\"${p}\"`).join(\", \");\n      throw new Error(\n        `\"pipelineOperator\" requires \"proposal\" option whose value must be one of: ${proposalList}.`,\n      );\n    }\n\n    if (proposal === \"hack\") {\n      if (pluginsMap.has(\"placeholders\")) {\n        throw new Error(\n          \"Cannot combine placeholders plugin and Hack-style pipes.\",\n        );\n      }\n\n      if (pluginsMap.has(\"v8intrinsic\")) {\n        throw new Error(\n          \"Cannot combine v8intrinsic plugin and Hack-style pipes.\",\n        );\n      }\n\n      const topicToken = pluginsMap.get(\"pipelineOperator\").topicToken;\n\n      if (!TOPIC_TOKENS.includes(topicToken)) {\n        const tokenList = TOPIC_TOKENS.map(t => `\"${t}\"`).join(\", \");\n\n        throw new Error(\n          `\"pipelineOperator\" in \"proposal\": \"hack\" mode also requires a \"topicToken\" option whose value must be one of: ${tokenList}.`,\n        );\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        if (\n          topicToken === \"#\" &&\n          pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n        ) {\n          throw new Error(\n            `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"hack\", topicToken: \"#\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n          );\n        }\n      }\n    } else if (\n      !process.env.BABEL_8_BREAKING &&\n      proposal === \"smart\" &&\n      pluginsMap.get(\"recordAndTuple\")?.syntaxType === \"hash\"\n    ) {\n      throw new Error(\n        `Plugin conflict between \\`[\"pipelineOperator\", { proposal: \"smart\" }]\\` and \\`${JSON.stringify([\"recordAndTuple\", pluginsMap.get(\"recordAndTuple\")])}\\`.`,\n      );\n    }\n  }\n\n  if (pluginsMap.has(\"moduleAttributes\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`moduleAttributes` has been removed in Babel 8, please migrate to import attributes instead.\",\n      );\n    } else {\n      if (\n        pluginsMap.has(\"deprecatedImportAssert\") ||\n        pluginsMap.has(\"importAssertions\")\n      ) {\n        throw new Error(\n          \"Cannot combine importAssertions, deprecatedImportAssert and moduleAttributes plugins.\",\n        );\n      }\n      const moduleAttributesVersionPluginOption =\n        pluginsMap.get(\"moduleAttributes\").version;\n      if (moduleAttributesVersionPluginOption !== \"may-2020\") {\n        throw new Error(\n          \"The 'moduleAttributes' plugin requires a 'version' option,\" +\n            \" representing the last proposal update. Currently, the\" +\n            \" only supported value is 'may-2020'.\",\n        );\n      }\n    }\n  }\n  if (pluginsMap.has(\"importAssertions\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"`importAssertions` has been removed in Babel 8, please use import attributes instead.\" +\n          \" To use the non-standard `assert` syntax you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else if (pluginsMap.has(\"deprecatedImportAssert\")) {\n      throw new Error(\n        \"Cannot combine importAssertions and deprecatedImportAssert plugins.\",\n      );\n    }\n  }\n  if (\n    !pluginsMap.has(\"deprecatedImportAssert\") &&\n    pluginsMap.has(\"importAttributes\") &&\n    pluginsMap.get(\"importAttributes\").deprecatedAssertSyntax\n  ) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'importAttributes' plugin has been removed in Babel 8. If you need to enable support \" +\n          \"for the deprecated `assert` syntax, you can enable the `deprecatedImportAssert` parser plugin.\",\n      );\n    } else {\n      pluginsMap.set(\"deprecatedImportAssert\", {});\n    }\n  }\n\n  if (pluginsMap.has(\"recordAndTuple\")) {\n    if (process.env.BABEL_8_BREAKING) {\n      throw new Error(\n        \"The 'recordAndTuple' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    } else {\n      const syntaxType = pluginsMap.get(\"recordAndTuple\").syntaxType;\n      if (syntaxType != null) {\n        const RECORD_AND_TUPLE_SYNTAX_TYPES = [\"hash\", \"bar\"];\n        if (!RECORD_AND_TUPLE_SYNTAX_TYPES.includes(syntaxType)) {\n          throw new Error(\n            \"The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: \" +\n              RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(\", \"),\n          );\n        }\n      }\n    }\n  }\n\n  if (\n    pluginsMap.has(\"asyncDoExpressions\") &&\n    !pluginsMap.has(\"doExpressions\")\n  ) {\n    const error = new Error(\n      \"'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.\",\n    );\n    // @ts-expect-error so @babel/core can provide better error message\n    error.missingPlugins = \"doExpressions\";\n    throw error;\n  }\n\n  if (\n    pluginsMap.has(\"optionalChainingAssign\") &&\n    pluginsMap.get(\"optionalChainingAssign\").version !== \"2023-07\"\n  ) {\n    throw new Error(\n      \"The 'optionalChainingAssign' plugin requires a 'version' option,\" +\n        \" representing the last proposal update. Currently, the\" +\n        \" only supported value is '2023-07'.\",\n    );\n  }\n\n  if (\n    pluginsMap.has(\"discardBinding\") &&\n    pluginsMap.get(\"discardBinding\").syntaxType !== \"void\"\n  ) {\n    throw new Error(\n      \"The 'discardBinding' plugin requires a 'syntaxType' option. Currently the only supported value is 'void'.\",\n    );\n  }\n\n  if (process.env.BABEL_8_BREAKING) {\n    if (pluginsMap.has(\"decimal\")) {\n      throw new Error(\n        \"The 'decimal' plugin has been removed in Babel 8. Please remove it from your configuration.\",\n      );\n    }\n    if (pluginsMap.has(\"importReflection\")) {\n      throw new Error(\n        \"The 'importReflection' plugin has been removed in Babel 8. Use 'sourcePhaseImports' instead, and \" +\n          \"replace 'import module' with 'import source' in your code.\",\n      );\n    }\n  }\n}\n\n// These plugins are defined using a mixin which extends the parser class.\n\nimport estree from \"./plugins/estree.ts\";\nimport flow from \"./plugins/flow/index.ts\";\nimport jsx from \"./plugins/jsx/index.ts\";\nimport typescript from \"./plugins/typescript/index.ts\";\nimport placeholders from \"./plugins/placeholders.ts\";\nimport v8intrinsic from \"./plugins/v8intrinsic.ts\";\n\n// NOTE: order is important. estree must come first; placeholders must come last.\nexport const mixinPlugins = {\n  estree,\n  jsx,\n  flow,\n  typescript,\n  v8intrinsic,\n  placeholders,\n};\n\nexport const mixinPluginNames = Object.keys(mixinPlugins) as ReadonlyArray<\n  \"estree\" | \"jsx\" | \"flow\" | \"typescript\" | \"v8intrinsic\" | \"placeholders\"\n>;\n","// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\nimport {\n  tokenCanStartExpression,\n  tokenIsAssignment,\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsOperator,\n  tokenIsPostfix,\n  tokenIsPrefix,\n  tokenIsRightAssociative,\n  tokenIsTemplate,\n  tokenKeywordOrIdentifierIsKeyword,\n  tokenLabelName,\n  tokenOperatorPrecedence,\n  tt,\n  type TokenType,\n} from \"../tokenizer/types.ts\";\nimport type * as N from \"../types.ts\";\nimport LValParser from \"./lval.ts\";\nimport {\n  isKeyword,\n  isReservedWord,\n  isStrictReservedWord,\n  isStrictBindReservedWord,\n  isIdentifierStart,\n  canBeReservedWord,\n} from \"../util/identifier.ts\";\nimport {\n  type Position,\n  createPositionWithColumnOffset,\n} from \"../util/location.ts\";\nimport * as charCodes from \"charcodes\";\nimport { ScopeFlag, BindingFlag } from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newArrowHeadScope,\n  newAsyncArrowScope,\n  newExpressionScope,\n} from \"../util/expression-scope.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport {\n  UnparenthesizedPipeBodyDescriptions,\n  type UnparenthesizedPipeBodyTypes,\n} from \"../parse-error/pipeline-operator-errors.ts\";\nimport { setInnerComments } from \"./comments.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\n\nimport { OptionFlags, type SourceType } from \"../options.ts\";\n\nexport default abstract class ExpressionParser extends LValParser {\n  // Forward-declaration: defined in statement.js\n  abstract parseBlock(\n    allowDirectives?: boolean,\n    createNewLexicalScope?: boolean,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement;\n  abstract parseClass(\n    node: N.Class,\n    isStatement: boolean,\n    optionalId?: boolean,\n  ): N.Class;\n  abstract parseDecorators(allowExport?: boolean): void;\n  abstract parseFunction<T extends N.NormalFunction>(\n    node: T,\n    statement?: number,\n    allowExpressionBody?: boolean,\n    isAsync?: boolean,\n  ): T;\n  abstract parseFunctionParams(node: N.Function, isConstructor?: boolean): void;\n  abstract parseBlockOrModuleBlockBody(\n    body: N.Statement[],\n    directives: N.Directive[] | null | undefined,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void;\n  abstract parseProgram(\n    program: N.Program,\n    end: TokenType,\n    sourceType?: SourceType,\n  ): N.Program;\n\n  // For object literal, check if property __proto__ has been used more than once.\n  // If the expression is a destructuring assignment, then __proto__ may appear\n  // multiple times. Otherwise, __proto__ is a duplicated key.\n\n  // For record expression, check if property __proto__ exists\n\n  checkProto(\n    prop: N.ObjectMember | N.SpreadElement,\n    isRecord: boolean | undefined | null,\n    sawProto: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): boolean {\n    if (\n      prop.type === \"SpreadElement\" ||\n      this.isObjectMethod(prop) ||\n      prop.computed ||\n      prop.shorthand\n    ) {\n      return sawProto;\n    }\n\n    const key = prop.key as\n      | N.Identifier\n      | N.StringLiteral\n      | N.NumericLiteral\n      | N.BigIntLiteral;\n    // It is either an Identifier or a String/NumericLiteral\n    const name = key.type === \"Identifier\" ? key.name : key.value;\n\n    if (name === \"__proto__\") {\n      if (isRecord) {\n        this.raise(Errors.RecordNoProto, key);\n        return true;\n      }\n      if (sawProto) {\n        if (refExpressionErrors) {\n          // Store the first redefinition's position, otherwise ignore because\n          // we are parsing ambiguous pattern\n          if (refExpressionErrors.doubleProtoLoc === null) {\n            refExpressionErrors.doubleProtoLoc = key.loc.start;\n          }\n        } else {\n          this.raise(Errors.DuplicateProto, key);\n        }\n      }\n\n      return true;\n    }\n\n    return sawProto;\n  }\n\n  shouldExitDescending(\n    expr: N.Expression | N.PrivateName,\n    potentialArrowAt: number,\n  ): expr is N.ArrowFunctionExpression {\n    return (\n      expr.type === \"ArrowFunctionExpression\" &&\n      this.offsetToSourcePos(expr.start) === potentialArrowAt\n    );\n  }\n\n  // Convenience method to parse an Expression only\n  getExpression(this: Parser): N.Expression & N.ParserOutput {\n    this.enterInitialScopes();\n    this.nextToken();\n    if (this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionEmptyInput, this.state.startLoc);\n    }\n    const expr = this.parseExpression() as N.Expression & N.ParserOutput;\n    if (!this.match(tt.eof)) {\n      throw this.raise(Errors.ParseExpressionExpectsEOF, this.state.startLoc, {\n        unexpected: this.input.codePointAt(this.state.start),\n      });\n    }\n    // Unlike parseTopLevel, we need to drain remaining commentStacks\n    // because the top level node is _not_ Program.\n    this.finalizeRemainingComments();\n    expr.comments = this.comments;\n    expr.errors = this.state.errors;\n    if (this.optionFlags & OptionFlags.Tokens) {\n      expr.tokens = this.tokens;\n    }\n    return expr;\n  }\n\n  // ### Expression parsing\n\n  // These nest, from the most general expression type at the top to\n  // 'atomic', nondivisible expression types at the bottom. Most of\n  // the functions will simply let the function (s) below them parse,\n  // and, *if* the syntactic construct they handle is present, wrap\n  // the AST node that the inner parser gave them in another node.\n\n  // Parse a full expression.\n  // - `disallowIn`\n  //   is used to forbid the `in` operator (in for loops initialization expressions)\n  //   When `disallowIn` is true, the production parameter [In] is not present.\n\n  // - `refExpressionErrors `\n  //   provides reference for storing '=' operator inside shorthand\n  //   property assignment in contexts where both object expression\n  //   and object pattern might appear (so it's possible to raise\n  //   delayed syntax error at correct position).\n\n  parseExpression(\n    this: Parser,\n    disallowIn?: boolean,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    if (disallowIn) {\n      return this.disallowInAnd(() =>\n        this.parseExpressionBase(refExpressionErrors),\n      );\n    }\n    return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));\n  }\n\n  // https://tc39.es/ecma262/#prod-Expression\n  parseExpressionBase(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const expr = this.parseMaybeAssign(refExpressionErrors);\n    if (this.match(tt.comma)) {\n      const node = this.startNodeAt<N.SequenceExpression>(startLoc);\n      node.expressions = [expr];\n      while (this.eat(tt.comma)) {\n        node.expressions.push(this.parseMaybeAssign(refExpressionErrors));\n      }\n      this.toReferencedList(node.expressions);\n      return this.finishNode(node, \"SequenceExpression\");\n    }\n    return expr;\n  }\n\n  // Set [~In] parameter for assignment expression\n  parseMaybeAssignDisallowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.disallowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // Set [+In] parameter for assignment expression\n  parseMaybeAssignAllowIn(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    return this.allowInAnd(() =>\n      this.parseMaybeAssign(refExpressionErrors, afterLeftParse),\n    );\n  }\n\n  // This method is only used by\n  // the typescript and flow plugins.\n  setOptionalParametersError(refExpressionErrors: ExpressionErrors) {\n    refExpressionErrors.optionalParametersLoc = this.state.startLoc;\n  }\n\n  // Parse an assignment expression. This includes applications of\n  // operators like `+=`.\n  // https://tc39.es/ecma262/#prod-AssignmentExpression\n  parseMaybeAssign(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isYield = this.isContextual(tt._yield);\n    if (isYield) {\n      if (this.prodParam.hasYield) {\n        this.next();\n        let left = this.parseYield(startLoc);\n        if (afterLeftParse) {\n          left = afterLeftParse.call(this, left, startLoc);\n        }\n        return left;\n      }\n    }\n\n    let ownExpressionErrors;\n    if (refExpressionErrors) {\n      ownExpressionErrors = false;\n    } else {\n      refExpressionErrors = new ExpressionErrors();\n      ownExpressionErrors = true;\n    }\n    const { type } = this.state;\n\n    if (type === tt.parenL || tokenIsIdentifier(type)) {\n      this.state.potentialArrowAt = this.state.start;\n    }\n\n    let left = this.parseMaybeConditional(refExpressionErrors);\n    if (afterLeftParse) {\n      left = afterLeftParse.call(this, left, startLoc);\n    }\n    if (tokenIsAssignment(this.state.type)) {\n      const node = this.startNodeAt<N.AssignmentExpression>(startLoc);\n      const operator = this.state.value;\n      node.operator = operator;\n\n      if (this.match(tt.eq)) {\n        this.toAssignable(left, /* isLHS */ true);\n        node.left = left;\n\n        const startIndex = startLoc.index;\n        if (\n          refExpressionErrors.doubleProtoLoc != null &&\n          refExpressionErrors.doubleProtoLoc.index >= startIndex\n        ) {\n          refExpressionErrors.doubleProtoLoc = null; // reset because double __proto__ is valid in assignment expression\n        }\n        if (\n          refExpressionErrors.shorthandAssignLoc != null &&\n          refExpressionErrors.shorthandAssignLoc.index >= startIndex\n        ) {\n          refExpressionErrors.shorthandAssignLoc = null; // reset because shorthand default was used correctly\n        }\n        if (\n          refExpressionErrors.privateKeyLoc != null &&\n          refExpressionErrors.privateKeyLoc.index >= startIndex\n        ) {\n          this.checkDestructuringPrivate(refExpressionErrors);\n          refExpressionErrors.privateKeyLoc = null; // reset because `({ #x: x })` is an assignable pattern\n        }\n        if (\n          refExpressionErrors.voidPatternLoc != null &&\n          refExpressionErrors.voidPatternLoc.index >= startIndex\n        ) {\n          refExpressionErrors.voidPatternLoc = null;\n        }\n      } else {\n        node.left = left as unknown as N.Assignable; // checked a few lines further down\n      }\n\n      this.next();\n      node.right = this.parseMaybeAssign();\n      this.checkLVal(left, this.finishNode(node, \"AssignmentExpression\"));\n      // @ts-expect-error todo(flow->ts) improve node types\n      return node;\n    } else if (ownExpressionErrors) {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n\n    if (isYield) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.YieldNotInGeneratorFunction, startLoc);\n        return this.parseYield(startLoc);\n      }\n    }\n\n    return left;\n  }\n\n  // Parse a ternary conditional (`?:`) operator.\n  // https://tc39.es/ecma262/#prod-ConditionalExpression\n\n  parseMaybeConditional(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprOps(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseConditional(expr, startLoc, refExpressionErrors);\n  }\n\n  parseConditional(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (this.eat(tt.question)) {\n      const node = this.startNodeAt<N.ConditionalExpression>(startLoc);\n      node.test = expr;\n      node.consequent = this.parseMaybeAssignAllowIn();\n      this.expect(tt.colon);\n      node.alternate = this.parseMaybeAssign();\n      return this.finishNode(node, \"ConditionalExpression\");\n    }\n    return expr;\n  }\n\n  parseMaybeUnaryOrPrivate(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors,\n  ): N.Expression | N.PrivateName {\n    return this.match(tt.privateName)\n      ? this.parsePrivateName()\n      : this.parseMaybeUnary(refExpressionErrors);\n  }\n\n  // Start the precedence parser.\n  // https://tc39.es/ecma262/#prod-ShortCircuitExpression\n\n  parseExprOps(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseExprOp(expr, startLoc, -1);\n  }\n\n  // Parse binary operators with the operator precedence parsing\n  // algorithm. `left` is the left-hand side of the operator.\n  // `minPrec` provides context that allows the function to stop and\n  // defer further parser to one of its callers when it encounters an\n  // operator that has a lower precedence than the set it is parsing.\n\n  parseExprOp(\n    this: Parser,\n    left: N.Expression | N.PrivateName,\n    leftStartLoc: Position,\n    minPrec: number,\n  ): N.Expression {\n    if (this.isPrivateName(left)) {\n      // https://tc39.es/ecma262/#prod-RelationalExpression\n      // RelationalExpression [In, Yield, Await]\n      //   [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]\n\n      const value = this.getPrivateNameSV(left);\n\n      if (\n        minPrec >= tokenOperatorPrecedence(tt._in) ||\n        !this.prodParam.hasIn ||\n        !this.match(tt._in)\n      ) {\n        this.raise(Errors.PrivateInExpectedIn, left, {\n          identifierName: value,\n        });\n      }\n\n      this.classScope.usePrivateName(value, left.loc.start);\n    }\n\n    const op = this.state.type;\n    if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(tt._in))) {\n      let prec = tokenOperatorPrecedence(op);\n      if (prec > minPrec) {\n        if (op === tt.pipeline) {\n          this.expectPlugin(\"pipelineOperator\");\n          if (this.state.inFSharpPipelineDirectBody) {\n            // PrivateName must be followed by `in`, but we have `|>`\n            return left as N.Expression;\n          }\n          this.checkPipelineAtInfixOperator(left as N.Expression, leftStartLoc);\n        }\n        const node = this.startNodeAt<N.LogicalExpression | N.BinaryExpression>(\n          leftStartLoc,\n        );\n        node.left = left;\n        node.operator = this.state.value;\n\n        const logical = op === tt.logicalOR || op === tt.logicalAND;\n        const coalesce = op === tt.nullishCoalescing;\n\n        if (coalesce) {\n          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n          prec = tokenOperatorPrecedence(tt.logicalAND);\n        }\n\n        this.next();\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          op === tt.pipeline &&\n          // @ts-expect-error: Only in Babel 7\n          this.hasPlugin([\"pipelineOperator\", { proposal: \"minimal\" }])\n        ) {\n          if (this.state.type === tt._await && this.prodParam.hasAwait) {\n            throw this.raise(\n              Errors.UnexpectedAwaitAfterPipelineBody,\n              this.state.startLoc,\n            );\n          }\n        }\n\n        node.right = this.parseExprOpRightExpr(op, prec);\n        const finishedNode = this.finishNode(\n          node,\n          logical || coalesce ? \"LogicalExpression\" : \"BinaryExpression\",\n        );\n        /* this check is for all ?? operators\n         * a ?? b && c for this example\n         * when op is coalesce and nextOp is logical (&&), throw at the pos of nextOp that it can not be mixed.\n         * Symmetrically it also throws when op is logical and nextOp is coalesce\n         */\n        const nextOp = this.state.type;\n        if (\n          (coalesce && (nextOp === tt.logicalOR || nextOp === tt.logicalAND)) ||\n          (logical && nextOp === tt.nullishCoalescing)\n        ) {\n          throw this.raise(\n            Errors.MixingCoalesceWithLogical,\n            this.state.startLoc,\n          );\n        }\n\n        return this.parseExprOp(finishedNode, leftStartLoc, minPrec);\n      }\n    }\n    // PrivateName is followed by `in` and handled by the previous if statement\n    return left as N.Expression;\n  }\n\n  // Helper function for `parseExprOp`. Parse the right-hand side of binary-\n  // operator expressions, then apply any operator-specific functions.\n\n  parseExprOpRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    switch (op) {\n      case tt.pipeline:\n        switch (this.getPluginOption(\"pipelineOperator\", \"proposal\")) {\n          case \"hack\":\n            return this.withTopicBindingContext(() => {\n              return this.parseHackPipeBody();\n            });\n\n          case \"fsharp\":\n            return this.withSoloAwaitPermittingContext(() => {\n              return this.parseFSharpPipelineBody(prec);\n            });\n        }\n\n        if (\n          !process.env.BABEL_8_BREAKING &&\n          // @ts-expect-error: Babel 7 only\n          this.getPluginOption(\"pipelineOperator\", \"proposal\") === \"smart\"\n        ) {\n          return this.withTopicBindingContext(() => {\n            if (this.prodParam.hasYield && this.isContextual(tt._yield)) {\n              throw this.raise(Errors.PipeBodyIsTighter, this.state.startLoc);\n            }\n            return this.parseSmartPipelineBodyInStyle(\n              this.parseExprOpBaseRightExpr(op, prec),\n              startLoc,\n            );\n          });\n        }\n\n      // Falls through.\n      default:\n        return this.parseExprOpBaseRightExpr(op, prec);\n    }\n  }\n\n  // Helper function for `parseExprOpRightExpr`. Parse the right-hand side of\n  // binary-operator expressions without applying any operator-specific functions.\n\n  parseExprOpBaseRightExpr(\n    this: Parser,\n    op: TokenType,\n    prec: number,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    return this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      tokenIsRightAssociative(op) ? prec - 1 : prec,\n    );\n  }\n\n  parseHackPipeBody(this: Parser): N.Expression {\n    const { startLoc } = this.state;\n    const body = this.parseMaybeAssign();\n    const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(\n      // @ts-expect-error TS2345: Argument of type 'string' is not assignable to parameter of type '\"ArrowFunctionExpression\" | \"YieldExpression\" | \"AssignmentExpression\" | \"ConditionalExpression\"'.\n      body.type,\n    );\n\n    // TODO: Check how to handle type casts in Flow and TS once they are supported\n    if (requiredParentheses && !body.extra?.parenthesized) {\n      this.raise(Errors.PipeUnparenthesizedBody, startLoc, {\n        type: body.type as UnparenthesizedPipeBodyTypes,\n      });\n    }\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      // A Hack pipe body must use the topic reference at least once.\n      this.raise(Errors.PipeTopicUnused, startLoc);\n    }\n\n    return body;\n  }\n\n  checkExponentialAfterUnary(\n    node: N.AwaitExpression | Undone<N.UnaryExpression>,\n  ) {\n    if (this.match(tt.exponent)) {\n      this.raise(Errors.UnexpectedTokenUnaryExponentiation, node.argument);\n    }\n  }\n\n  // Parse unary operators, both prefix and postfix.\n  // https://tc39.es/ecma262/#prod-UnaryExpression\n  parseMaybeUnary(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n    sawUnary?: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const isAwait = this.isContextual(tt._await);\n\n    if (isAwait && this.recordAwaitIfAllowed()) {\n      this.next();\n      const expr = this.parseAwait(startLoc);\n      if (!sawUnary) this.checkExponentialAfterUnary(expr);\n      return expr;\n    }\n    const update = this.match(tt.incDec);\n    const node = this.startNode<N.UnaryExpression | N.UpdateExpression>();\n    if (tokenIsPrefix(this.state.type)) {\n      node.operator = this.state.value;\n      node.prefix = true;\n\n      if (this.match(tt._throw)) {\n        this.expectPlugin(\"throwExpressions\");\n      }\n      const isDelete = this.match(tt._delete);\n      this.next();\n\n      node.argument = this.parseMaybeUnary(null, true);\n\n      this.checkExpressionErrors(refExpressionErrors, true);\n\n      if (this.state.strict && isDelete) {\n        const arg = node.argument;\n\n        if (arg.type === \"Identifier\") {\n          this.raise(Errors.StrictDelete, node);\n        } else if (this.hasPropertyAsPrivateName(arg)) {\n          this.raise(Errors.DeletePrivateField, node);\n        }\n      }\n\n      if (!update) {\n        if (!sawUnary) {\n          this.checkExponentialAfterUnary(node as Undone<N.UnaryExpression>);\n        }\n        return this.finishNode(node, \"UnaryExpression\");\n      }\n    }\n\n    const expr = this.parseUpdate(\n      // @ts-expect-error using \"Undone\" node as \"done\"\n      node,\n      update,\n      refExpressionErrors,\n    );\n\n    if (isAwait) {\n      const { type } = this.state;\n      const startsExpr = this.hasPlugin(\"v8intrinsic\")\n        ? tokenCanStartExpression(type)\n        : tokenCanStartExpression(type) && !this.match(tt.modulo);\n      if (startsExpr && !this.isAmbiguousPrefixOrIdentifier()) {\n        this.raiseOverwrite(Errors.AwaitNotInAsyncContext, startLoc);\n        return this.parseAwait(startLoc);\n      }\n    }\n\n    return expr;\n  }\n\n  // https://tc39.es/ecma262/#prod-UpdateExpression\n  parseUpdate(\n    this: Parser,\n    node: N.Expression,\n    update: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    if (update) {\n      const updateExpressionNode = node as Undone<N.UpdateExpression>;\n      this.checkLVal(\n        updateExpressionNode.argument,\n        this.finishNode(updateExpressionNode, \"UpdateExpression\"),\n      );\n      return node;\n    }\n\n    const startLoc = this.state.startLoc;\n    let expr = this.parseExprSubscripts(refExpressionErrors);\n    if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;\n    while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {\n      const node = this.startNodeAt<N.UpdateExpression>(startLoc);\n      node.operator = this.state.value;\n      node.prefix = false;\n      node.argument = expr;\n      this.next();\n      this.checkLVal(expr, (expr = this.finishNode(node, \"UpdateExpression\")));\n    }\n    return expr;\n  }\n\n  // Parse call, dot, and `[]`-subscript expressions.\n  // https://tc39.es/ecma262/#prod-LeftHandSideExpression\n  parseExprSubscripts(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n    const potentialArrowAt = this.state.potentialArrowAt;\n    const expr = this.parseExprAtom(refExpressionErrors);\n\n    if (this.shouldExitDescending(expr, potentialArrowAt)) {\n      return expr;\n    }\n\n    return this.parseSubscripts(expr, startLoc);\n  }\n\n  parseSubscripts(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls?: boolean | null,\n  ): N.Expression {\n    const state = {\n      optionalChainMember: false,\n      maybeAsyncArrow: this.atPossibleAsyncArrow(base),\n      stop: false,\n    };\n    do {\n      base = this.parseSubscript(base, startLoc, noCalls, state);\n\n      // After parsing a subscript, this isn't \"async\" for sure.\n      state.maybeAsyncArrow = false;\n    } while (!state.stop);\n    return base;\n  }\n\n  /**\n   * @param state Set 'state.stop = true' to indicate that we should stop parsing subscripts.\n   *   state.optionalChainMember to indicate that the member is currently in OptionalChain\n   */\n  parseSubscript(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const { type } = this.state;\n    if (!noCalls && type === tt.doubleColon) {\n      return this.parseBind(base, startLoc, noCalls, state);\n    } else if (tokenIsTemplate(type)) {\n      return this.parseTaggedTemplateExpression(base, startLoc, state);\n    }\n\n    let optional = false;\n\n    if (type === tt.questionDot) {\n      if (noCalls) {\n        this.raise(Errors.OptionalChainingNoNew, this.state.startLoc);\n        if (this.lookaheadCharCode() === charCodes.leftParenthesis) {\n          // stop at `?.` when parsing `new a?.()`\n          return this.stopParseSubscript(base, state);\n        }\n      }\n      state.optionalChainMember = optional = true;\n      this.next();\n    }\n\n    if (!noCalls && this.match(tt.parenL)) {\n      return this.parseCoverCallAndAsyncArrowHead(\n        base,\n        startLoc,\n        state,\n        optional,\n      );\n    } else {\n      const computed = this.eat(tt.bracketL);\n      if (computed || optional || this.eat(tt.dot)) {\n        return this.parseMember(base, startLoc, state, computed, optional);\n      } else {\n        return this.stopParseSubscript(base, state);\n      }\n    }\n  }\n\n  stopParseSubscript(\n    this: Parser,\n    base: N.Expression,\n    state: N.ParseSubscriptState,\n  ) {\n    state.stop = true;\n    return base;\n  }\n\n  // base[?Yield, ?Await] [ Expression[+In, ?Yield, ?Await] ]\n  // base[?Yield, ?Await] . IdentifierName\n  // base[?Yield, ?Await] . PrivateIdentifier\n  //   where `base` is one of CallExpression, MemberExpression and OptionalChain\n  parseMember(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    computed: boolean,\n    optional: boolean,\n  ): N.OptionalMemberExpression | N.MemberExpression {\n    const node = this.startNodeAt<\n      N.OptionalMemberExpression | N.MemberExpression\n    >(startLoc);\n    node.object = base;\n    node.computed = computed;\n    if (computed) {\n      node.property = this.parseExpression();\n      this.expect(tt.bracketR);\n    } else if (this.match(tt.privateName)) {\n      if (base.type === \"Super\") {\n        this.raise(Errors.SuperPrivateField, startLoc);\n      }\n      this.classScope.usePrivateName(this.state.value, this.state.startLoc);\n      node.property = this.parsePrivateName();\n    } else {\n      node.property = this.parseIdentifier(true);\n    }\n\n    if (state.optionalChainMember) {\n      (node as Undone<N.OptionalMemberExpression>).optional = optional;\n      return this.finishNode(node, \"OptionalMemberExpression\");\n    } else {\n      return this.finishNode(node, \"MemberExpression\");\n    }\n  }\n\n  // https://github.com/tc39/proposal-bind-operator#syntax\n  parseBind(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    noCalls: boolean | undefined | null,\n    state: N.ParseSubscriptState,\n  ): N.Expression {\n    const node = this.startNodeAt<N.BindExpression>(startLoc);\n    node.object = base;\n    this.next(); // eat '::'\n    node.callee = this.parseNoCallExpr();\n    state.stop = true;\n    return this.parseSubscripts(\n      this.finishNode(node, \"BindExpression\"),\n      startLoc,\n      noCalls,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverCallExpressionAndAsyncArrowHead\n  // CoverCallExpressionAndAsyncArrowHead\n  // CallExpression[?Yield, ?Await] Arguments[?Yield, ?Await]\n  // OptionalChain[?Yield, ?Await] Arguments[?Yield, ?Await]\n  parseCoverCallAndAsyncArrowHead(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n    optional: boolean,\n  ): N.Expression {\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    let refExpressionErrors: ExpressionErrors | null = null;\n\n    this.state.maybeInArrowParameters = true;\n    this.next(); // eat `(`\n\n    const node = this.startNodeAt<N.CallExpression | N.OptionalCallExpression>(\n      startLoc,\n    );\n    node.callee = base;\n    const { maybeAsyncArrow, optionalChainMember } = state;\n\n    if (maybeAsyncArrow) {\n      this.expressionScope.enter(newAsyncArrowScope());\n      refExpressionErrors = new ExpressionErrors();\n    }\n\n    if (optionalChainMember) {\n      (node as Undone<N.OptionalCallExpression>).optional = optional;\n    }\n\n    if (optional) {\n      node.arguments = this.parseCallExpressionArguments();\n    } else {\n      node.arguments = this.parseCallExpressionArguments(\n        base.type !== \"Super\",\n        node,\n        refExpressionErrors,\n      );\n    }\n    let finishedNode:\n      | N.CallExpression\n      | N.OptionalCallExpression\n      | N.ArrowFunctionExpression = this.finishCallExpression(\n      node,\n      optionalChainMember,\n    );\n\n    if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {\n      /*:: invariant(refExpressionErrors != null) */\n      state.stop = true;\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      finishedNode = this.parseAsyncArrowFromCallExpression(\n        this.startNodeAt<N.ArrowFunctionExpression>(startLoc),\n        finishedNode as N.CallExpression,\n      );\n    } else {\n      if (maybeAsyncArrow) {\n        this.checkExpressionErrors(refExpressionErrors, true);\n        this.expressionScope.exit();\n      }\n      this.toReferencedArguments(finishedNode);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return finishedNode;\n  }\n\n  toReferencedArguments(\n    node: N.CallExpression | N.OptionalCallExpression,\n    isParenthesizedExpr?: boolean,\n  ) {\n    this.toReferencedListDeep(node.arguments, isParenthesizedExpr);\n  }\n\n  // MemberExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  // CallExpression [?Yield, ?Await] TemplateLiteral[?Yield, ?Await, +Tagged]\n  parseTaggedTemplateExpression(\n    this: Parser,\n    base: N.Expression,\n    startLoc: Position,\n    state: N.ParseSubscriptState,\n  ): N.TaggedTemplateExpression {\n    const node = this.startNodeAt<N.TaggedTemplateExpression>(startLoc);\n    node.tag = base;\n    node.quasi = this.parseTemplate(true);\n    if (state.optionalChainMember) {\n      this.raise(Errors.OptionalChainingNoTemplate, startLoc);\n    }\n    return this.finishNode(node, \"TaggedTemplateExpression\");\n  }\n\n  atPossibleAsyncArrow(base: N.Expression): boolean {\n    return (\n      base.type === \"Identifier\" &&\n      base.name === \"async\" &&\n      this.state.lastTokEndLoc.index === base.end &&\n      !this.canInsertSemicolon() &&\n      // check there are no escape sequences, such as \\u{61}sync\n      base.end - base.start === 5 &&\n      this.offsetToSourcePos(base.start) === this.state.potentialArrowAt\n    );\n  }\n\n  finishCallExpression<T extends N.CallExpression | N.OptionalCallExpression>(\n    node: Undone<T>,\n    optional: boolean,\n  ): T {\n    if (node.callee.type === \"Import\") {\n      if (node.arguments.length === 0 || node.arguments.length > 2) {\n        this.raise(Errors.ImportCallArity, node);\n      } else {\n        for (const arg of node.arguments) {\n          if (arg.type === \"SpreadElement\") {\n            this.raise(Errors.ImportCallSpreadArgument, arg);\n          }\n        }\n      }\n    }\n    return this.finishNode(\n      node,\n      optional ? \"OptionalCallExpression\" : \"CallExpression\",\n    );\n  }\n\n  parseCallExpressionArguments(\n    this: Parser,\n    allowPlaceholder?: boolean,\n    nodeForExtra?: Undone<N.Node> | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): Array<N.Expression> {\n    const elts: N.Expression[] = [];\n    let first = true;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    while (!this.eat(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(tt.parenR)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(\n        this.parseExprListItem(\n          tt.parenR,\n          false,\n          refExpressionErrors,\n          allowPlaceholder,\n        ),\n      );\n    }\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return elts;\n  }\n\n  shouldParseAsyncArrow(): boolean {\n    return this.match(tt.arrow) && !this.canInsertSemicolon();\n  }\n\n  parseAsyncArrowFromCallExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    call: N.CallExpression,\n  ): N.ArrowFunctionExpression {\n    this.resetPreviousNodeTrailingComments(call);\n    this.expect(tt.arrow);\n    this.parseArrowExpression(\n      node,\n      call.arguments,\n      true,\n      call.extra?.trailingCommaLoc,\n    );\n    // mark inner comments of `async()` as inner comments of `async () =>`\n    if (call.innerComments) {\n      setInnerComments(node, call.innerComments);\n    }\n    // mark trailing comments of `async` to be inner comments\n    if (call.callee.trailingComments) {\n      setInnerComments(node, call.callee.trailingComments);\n    }\n    return node as N.ArrowFunctionExpression;\n  }\n\n  // Parse a no-call expression (like argument of `new` or `::` operators).\n  // https://tc39.es/ecma262/#prod-MemberExpression\n  parseNoCallExpr(this: Parser): N.Expression {\n    const startLoc = this.state.startLoc;\n    return this.parseSubscripts(this.parseExprAtom(), startLoc, true);\n  }\n\n  // Parse an atomic expression — either a single token that is an\n  // expression, an expression started by a keyword like `function` or\n  // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n  // or `{}`.\n\n  // https://tc39.es/ecma262/#prod-PrimaryExpression\n  // https://tc39.es/ecma262/#prod-AsyncArrowFunction\n  // PrimaryExpression\n  // Super\n  // Import\n  // AsyncArrowFunction\n\n  parseExprAtom(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.Expression {\n    let node;\n    let decorators: N.Decorator[] | null = null;\n\n    const { type } = this.state;\n    switch (type) {\n      case tt._super:\n        return this.parseSuper();\n\n      case tt._import:\n        node = this.startNode<N.MetaProperty | N.Import | N.ImportExpression>();\n        this.next();\n\n        if (this.match(tt.dot)) {\n          return this.parseImportMetaPropertyOrPhaseCall(\n            node as Undone<N.MetaProperty | N.ImportExpression>,\n          );\n        }\n\n        if (this.match(tt.parenL)) {\n          if (this.optionFlags & OptionFlags.CreateImportExpressions) {\n            return this.parseImportCall(node as Undone<N.ImportExpression>);\n          } else {\n            return this.finishNode(node, \"Import\");\n          }\n        } else {\n          this.raise(Errors.UnsupportedImport, this.state.lastTokStartLoc);\n          return this.finishNode(node, \"Import\");\n        }\n\n      case tt._this:\n        node = this.startNode<N.ThisExpression>();\n        this.next();\n        return this.finishNode(node, \"ThisExpression\");\n\n      case tt._do: {\n        return this.parseDo(this.startNode(), false);\n      }\n\n      case tt.slash:\n      case tt.slashAssign: {\n        this.readRegexp();\n        return this.parseRegExpLiteral(this.state.value);\n      }\n\n      case tt.num:\n        return this.parseNumericLiteral(this.state.value);\n\n      case tt.bigint:\n        return this.parseBigIntLiteral(this.state.value);\n\n      case tt.string:\n        return this.parseStringLiteral(this.state.value);\n\n      case tt._null:\n        return this.parseNullLiteral();\n\n      case tt._true:\n        return this.parseBooleanLiteral(true);\n      case tt._false:\n        return this.parseBooleanLiteral(false);\n\n      case tt.parenL: {\n        const canBeArrow = this.state.potentialArrowAt === this.state.start;\n        return this.parseParenAndDistinguishExpression(canBeArrow);\n      }\n\n      case tt.bracketL: {\n        return this.parseArrayLike(\n          tt.bracketR,\n          /* canBePattern */ true,\n          /* isTuple */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt.braceL: {\n        return this.parseObjectLike(\n          tt.braceR,\n          /* isPattern */ false,\n          /* isRecord */ false,\n          refExpressionErrors,\n        );\n      }\n      case tt._function:\n        return this.parseFunctionOrFunctionSent();\n\n      case tt.at:\n        decorators = this.parseDecorators();\n      // fall through\n      case tt._class:\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            this.startNode<N.ClassExpression>(),\n          ),\n          false,\n        );\n\n      case tt._new:\n        return this.parseNewOrNewTarget();\n\n      case tt.templateNonTail:\n      case tt.templateTail:\n        return this.parseTemplate(false);\n\n      // BindExpression[Yield]\n      //   :: MemberExpression[?Yield]\n      case tt.doubleColon: {\n        node = this.startNode<N.BindExpression>();\n        this.next();\n        node.object = null;\n        const callee = (node.callee = this.parseNoCallExpr());\n        if (callee.type === \"MemberExpression\") {\n          return this.finishNode(node, \"BindExpression\");\n        } else {\n          throw this.raise(Errors.UnsupportedBind, callee);\n        }\n      }\n\n      case tt.privateName: {\n        // Standalone private names are only allowed in \"#x in obj\"\n        // expressions, and they are directly handled by callers of\n        // parseExprOp. If we reach this, the input is always invalid.\n        // We can throw a better error message and recover, rather than\n        // just throwing \"Unexpected token\" (which is the default\n        // behavior of this big switch statement).\n        this.raise(Errors.PrivateInExpectedIn, this.state.startLoc, {\n          identifierName: this.state.value,\n        });\n        return this.parsePrivateName() as unknown as N.Expression;\n      }\n\n      case tt.moduloAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.modulo, \"%\");\n      }\n\n      case tt.xorAssign: {\n        return this.parseTopicReferenceThenEqualsSign(tt.bitwiseXOR, \"^\");\n      }\n\n      case tt.doubleCaret:\n      case tt.doubleAt: {\n        return this.parseTopicReference(\"hack\");\n      }\n\n      case tt.bitwiseXOR:\n      case tt.modulo:\n      case tt.hash: {\n        const pipeProposal = this.getPluginOption(\n          \"pipelineOperator\",\n          \"proposal\",\n        );\n\n        if (pipeProposal) {\n          return this.parseTopicReference(pipeProposal);\n        }\n        this.unexpected();\n        break;\n      }\n\n      case tt.lt: {\n        const lookaheadCh = this.input.codePointAt(this.nextTokenStart());\n        if (\n          isIdentifierStart(lookaheadCh) || // Element/Type Parameter <foo>\n          lookaheadCh === charCodes.greaterThan // Fragment <>\n        ) {\n          this.expectOnePlugin([\"jsx\", \"flow\", \"typescript\"]);\n        } else {\n          this.unexpected();\n        }\n        break;\n      }\n\n      default:\n        if (!process.env.BABEL_8_BREAKING) {\n          if (type === tt.decimal) {\n            return this.parseDecimalLiteral(this.state.value);\n          } else if (type === tt.bracketBarL || type === tt.bracketHashL) {\n            return this.parseArrayLike(\n              this.state.type === tt.bracketBarL ? tt.bracketBarR : tt.bracketR,\n              /* canBePattern */ false,\n              /* isTuple */ true,\n            );\n          } else if (type === tt.braceBarL || type === tt.braceHashL) {\n            return this.parseObjectLike(\n              this.state.type === tt.braceBarL ? tt.braceBarR : tt.braceR,\n              /* isPattern */ false,\n              /* isRecord */ true,\n            );\n          }\n        }\n\n        if (tokenIsIdentifier(type)) {\n          if (\n            this.isContextual(tt._module) &&\n            this.lookaheadInLineCharCode() === charCodes.leftCurlyBrace\n          ) {\n            return this.parseModuleExpression();\n          }\n          const canBeArrow = this.state.potentialArrowAt === this.state.start;\n          const containsEsc = this.state.containsEsc;\n          const id = this.parseIdentifier();\n\n          if (\n            !containsEsc &&\n            id.name === \"async\" &&\n            !this.canInsertSemicolon()\n          ) {\n            const { type } = this.state;\n            if (type === tt._function) {\n              this.resetPreviousNodeTrailingComments(id);\n              this.next();\n              return this.parseAsyncFunctionExpression(\n                this.startNodeAtNode(id),\n              );\n            } else if (tokenIsIdentifier(type)) {\n              // If the next token begins with \"=\", commit to parsing an async\n              // arrow function. (Peeking ahead for \"=\" lets us avoid a more\n              // expensive full-token lookahead on this common path.)\n              if (this.lookaheadCharCode() === charCodes.equalsTo) {\n                // although `id` is not used in async arrow unary function,\n                // we don't need to reset `async`'s trailing comments because\n                // it will be attached to the upcoming async arrow binding identifier\n                return this.parseAsyncArrowUnaryFunction(\n                  this.startNodeAtNode(id),\n                );\n              } else {\n                // Otherwise, treat \"async\" as an identifier and let calling code\n                // deal with the current tt.name token.\n                return id;\n              }\n            } else if (type === tt._do) {\n              this.resetPreviousNodeTrailingComments(id);\n              return this.parseDo(this.startNodeAtNode(id), true);\n            }\n          }\n\n          if (\n            canBeArrow &&\n            this.match(tt.arrow) &&\n            !this.canInsertSemicolon()\n          ) {\n            this.next();\n            return this.parseArrowExpression(\n              this.startNodeAtNode(id),\n              [id],\n              false,\n            );\n          }\n\n          return id;\n        } else {\n          this.unexpected();\n        }\n    }\n  }\n\n  // This helper method should only be called\n  // when the parser has reached a potential Hack pipe topic token\n  // that is followed by an equals sign.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  // If we find ^= or %= in an expression position\n  // (i.e., the tt.moduloAssign or tt.xorAssign token types), and if the\n  // Hack-pipes proposal is active with ^ or % as its topicToken, then the ^ or\n  // % could be the topic token (e.g., in x |> ^==y or x |> ^===y), and so we\n  // reparse the current token as ^ or %.\n  // Otherwise, this throws an unexpected-token error.\n  parseTopicReferenceThenEqualsSign(\n    topicTokenType: TokenType,\n    topicTokenValue: string,\n  ): N.Expression {\n    const pipeProposal = this.getPluginOption(\"pipelineOperator\", \"proposal\");\n\n    if (pipeProposal) {\n      // Set the most-recent token to be a topic token\n      // given by the tokenType and tokenValue.\n      // Now the next readToken() call (in parseTopicReference)\n      // will consume that “topic token”.\n      this.state.type = topicTokenType;\n      this.state.value = topicTokenValue;\n      // Rewind the tokenizer to the end of the “topic token”, so that the\n      // following token starts at the equals sign after that topic token.\n      this.state.pos--;\n      this.state.end--;\n      // This is safe to do since the preceding character was either ^ or %, and\n      // thus not a newline.\n      this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);\n      // Now actually consume the topic token.\n      return this.parseTopicReference(pipeProposal);\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // This helper method should only be called\n  // when the proposal-pipeline-operator plugin is active,\n  // and when the parser has reached a potential Hack pipe topic token.\n  // Although a pipe-operator proposal is assumed to be active,\n  // its configuration might not match the current token’s type.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  parseTopicReference(pipeProposal: string): N.Expression {\n    const node = this.startNode<N.TopicReference>();\n    const startLoc = this.state.startLoc;\n    const tokenType = this.state.type;\n\n    // Consume the current token.\n    this.next();\n\n    // If the pipe-operator plugin’s configuration matches the current token’s type,\n    // then this will return `node`, will have been finished as a topic reference.\n    // Otherwise, this will throw a `PipeTopicUnconfiguredToken` error.\n    return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);\n  }\n\n  // This helper method attempts to finish the given `node`\n  // into a topic-reference node for the given `pipeProposal`.\n  // See <https://github.com/js-choi/proposal-hack-pipes>.\n  //\n  // The method assumes that any topic token was consumed before it was called.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // and if the given `tokenType` matches the plugin’s configuration,\n  // then this method will return the finished `node`.\n  //\n  // If the `pipelineOperator` plugin is active,\n  // but if the given `tokenType` does not match the plugin’s configuration,\n  // then this method will throw a `PipeTopicUnconfiguredToken` error.\n  finishTopicReference<\n    T extends N.PipelinePrimaryTopicReference | N.TopicReference,\n  >(\n    node: Undone<T>,\n    startLoc: Position,\n    pipeProposal: string,\n    tokenType: TokenType,\n  ): T {\n    if (\n      this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)\n    ) {\n      // The token matches the plugin’s configuration.\n      // The token is therefore a topic reference.\n\n      if (process.env.BABEL_8_BREAKING || pipeProposal === \"hack\") {\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PipeTopicUnbound, startLoc);\n        }\n\n        // Register the topic reference so that its pipe body knows\n        // that its topic was used at least once.\n        this.registerTopicReference();\n\n        return this.finishNode(node, \"TopicReference\");\n      } else {\n        // pipeProposal is \"smart\"\n\n        if (!this.topicReferenceIsAllowedInCurrentContext()) {\n          this.raise(Errors.PrimaryTopicNotAllowed, startLoc);\n        }\n        this.registerTopicReference();\n        return this.finishNode(node, \"PipelinePrimaryTopicReference\");\n      }\n    } else {\n      // The token does not match the plugin’s configuration.\n      throw this.raise(Errors.PipeTopicUnconfiguredToken, startLoc, {\n        token: tokenLabelName(tokenType),\n      });\n    }\n  }\n\n  // This helper method tests whether the given token type\n  // matches the pipelineOperator parser plugin’s configuration.\n  // If the active pipe proposal is Hack style,\n  // and if the given token is the same as the plugin configuration’s `topicToken`,\n  // then this is a valid topic reference.\n  // If the active pipe proposal is smart mix,\n  // then the topic token must always be `#`.\n  // If the active pipe proposal is neither (e.g., \"minimal\"(Babel 7) or \"fsharp\"),\n  // then an error is thrown.\n  testTopicReferenceConfiguration(\n    pipeProposal: string,\n    startLoc: Position,\n    tokenType: TokenType,\n  ): boolean {\n    switch (pipeProposal) {\n      case \"hack\": {\n        return this.hasPlugin([\n          \"pipelineOperator\",\n          {\n            // @ts-expect-error token must have a label\n            topicToken: tokenLabelName(tokenType),\n          },\n        ]);\n      }\n      case \"smart\":\n        return tokenType === tt.hash;\n      default:\n        throw this.raise(Errors.PipeTopicRequiresHackPipes, startLoc);\n    }\n  }\n\n  // async [no LineTerminator here] AsyncArrowBindingIdentifier[?Yield] [no LineTerminator here] => AsyncConciseBody[?In]\n  parseAsyncArrowUnaryFunction(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n  ): N.ArrowFunctionExpression {\n    // We don't need to push a new ParameterDeclarationScope here since we are sure\n    // 1) it is an async arrow, 2) no biding pattern is allowed in params\n    this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));\n    const params = [this.parseIdentifier()];\n    this.prodParam.exit();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.LineTerminatorBeforeArrow, this.state.curPosition());\n    }\n    this.expect(tt.arrow);\n    // let foo = async bar => {};\n    return this.parseArrowExpression(node, params, true);\n  }\n\n  // https://github.com/tc39/proposal-do-expressions\n  // https://github.com/tc39/proposal-async-do-expressions\n  parseDo(\n    this: Parser,\n    node: Undone<N.DoExpression>,\n    isAsync: boolean,\n  ): N.DoExpression {\n    this.expectPlugin(\"doExpressions\");\n    if (isAsync) {\n      this.expectPlugin(\"asyncDoExpressions\");\n    }\n    node.async = isAsync;\n    this.next(); // eat `do`\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    if (isAsync) {\n      // AsyncDoExpression :\n      // async [no LineTerminator here] do Block[~Yield, +Await, ~Return]\n      this.prodParam.enter(ParamKind.PARAM_AWAIT);\n      node.body = this.parseBlock();\n      this.prodParam.exit();\n    } else {\n      node.body = this.parseBlock();\n    }\n\n    this.state.labels = oldLabels;\n    return this.finishNode(node, \"DoExpression\");\n  }\n\n  // Parse the `super` keyword\n  parseSuper(): N.Super {\n    const node = this.startNode<N.Super>();\n    this.next(); // eat `super`\n    if (\n      this.match(tt.parenL) &&\n      !this.scope.allowDirectSuper &&\n      !(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)\n    ) {\n      this.raise(Errors.SuperNotAllowed, node);\n    } else if (\n      !this.scope.allowSuper &&\n      !(this.optionFlags & OptionFlags.AllowSuperOutsideMethod)\n    ) {\n      this.raise(Errors.UnexpectedSuper, node);\n    }\n\n    if (\n      !this.match(tt.parenL) &&\n      !this.match(tt.bracketL) &&\n      !this.match(tt.dot)\n    ) {\n      this.raise(Errors.UnsupportedSuper, node);\n    }\n\n    return this.finishNode(node, \"Super\");\n  }\n\n  parsePrivateName(): N.PrivateName {\n    const node = this.startNode<N.PrivateName>();\n    const id = this.startNodeAt<N.Identifier>(\n      // The position is hardcoded because we merge `#` and name into a single\n      // tt.privateName token\n      createPositionWithColumnOffset(this.state.startLoc, 1),\n    );\n    const name = this.state.value;\n    this.next(); // eat #name;\n    node.id = this.createIdentifier(id, name);\n    return this.finishNode(node, \"PrivateName\");\n  }\n\n  parseFunctionOrFunctionSent(\n    this: Parser,\n  ): N.FunctionExpression | N.MetaProperty {\n    const node = this.startNode<N.FunctionExpression | N.MetaProperty>();\n\n    // We do not do parseIdentifier here because when parseFunctionOrFunctionSent\n    // is called we already know that the current token is a \"name\" with the value \"function\"\n    // This will improve perf a tiny little bit as we do not do validation but more importantly\n    // here is that parseIdentifier will remove an item from the expression stack\n    // if \"function\" or \"class\" is parsed as identifier (in objects e.g.), which should not happen here.\n    this.next(); // eat `function`\n\n    if (this.prodParam.hasYield && this.match(tt.dot)) {\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"function\",\n      );\n      this.next(); // eat `.`\n      // https://github.com/tc39/proposal-function.sent#syntax-1\n      if (this.match(tt._sent)) {\n        this.expectPlugin(\"functionSent\");\n      } else if (!this.hasPlugin(\"functionSent\")) {\n        // The code wasn't `function.sent` but just `function.`, so a simple error is less confusing.\n        this.unexpected();\n      }\n      return this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"sent\",\n      );\n    }\n    return this.parseFunction(node as Undone<N.FunctionExpression>);\n  }\n\n  parseMetaProperty(\n    node: Undone<N.MetaProperty>,\n    meta: N.Identifier,\n    propertyName: string,\n  ): N.MetaProperty {\n    node.meta = meta;\n\n    const containsEsc = this.state.containsEsc;\n\n    node.property = this.parseIdentifier(true);\n\n    if (node.property.name !== propertyName || containsEsc) {\n      this.raise(Errors.UnsupportedMetaProperty, node.property, {\n        target: meta.name,\n        onlyValidPropertyName: propertyName,\n      });\n    }\n\n    return this.finishNode(node, \"MetaProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportMeta\n  // https://tc39.es/proposal-source-phase-imports/\n  parseImportMetaPropertyOrPhaseCall(\n    this: Parser,\n    node: Undone<N.MetaProperty | N.ImportExpression>,\n  ): N.MetaProperty | N.ImportExpression {\n    this.next(); // eat `.`\n\n    if (this.isContextual(tt._source) || this.isContextual(tt._defer)) {\n      const isSource = this.isContextual(tt._source);\n\n      this.expectPlugin(\n        isSource ? \"sourcePhaseImports\" : \"deferredImportEvaluation\",\n      );\n      this.next();\n      (node as Undone<N.ImportExpression>).phase = isSource\n        ? \"source\"\n        : \"defer\";\n      return this.parseImportCall(node as Undone<N.ImportExpression>);\n    } else {\n      const id = this.createIdentifierAt(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"import\",\n        this.state.lastTokStartLoc,\n      );\n      if (this.isContextual(tt._meta)) {\n        if (!this.inModule) {\n          this.raise(Errors.ImportMetaOutsideModule, id);\n        }\n        this.sawUnambiguousESM = true;\n      }\n      return this.parseMetaProperty(node as Undone<N.MetaProperty>, id, \"meta\");\n    }\n  }\n\n  parseLiteralAtNode<T extends N.Node>(\n    value: any,\n    type: T[\"type\"],\n    node: any,\n  ): T {\n    this.addExtra(node, \"rawValue\", value);\n    this.addExtra(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\n    node.value = value;\n    this.next();\n    return this.finishNode<T>(node, type);\n  }\n\n  parseLiteral<T extends N.Node>(value: any, type: T[\"type\"]): T {\n    const node = this.startNode();\n    return this.parseLiteralAtNode(value, type, node);\n  }\n\n  parseStringLiteral(value: any) {\n    return this.parseLiteral<N.StringLiteral>(value, \"StringLiteral\");\n  }\n\n  parseNumericLiteral(value: any) {\n    return this.parseLiteral<N.NumericLiteral>(value, \"NumericLiteral\");\n  }\n\n  parseBigIntLiteral(value: any) {\n    if (process.env.BABEL_8_BREAKING) {\n      let bigInt: bigint | null;\n      try {\n        bigInt = BigInt(value);\n      } catch {\n        // parser supports invalid bigints like `1.0n` or `1e1n` such that it\n        // can throw a recoverable error, but BigInt constructor does not\n        // support them.\n        bigInt = null;\n      }\n      const node = this.parseLiteral<N.BigIntLiteral>(bigInt, \"BigIntLiteral\");\n      return node;\n    } else {\n      return this.parseLiteral<N.BigIntLiteral>(value, \"BigIntLiteral\");\n    }\n  }\n\n  // TODO: Remove this in Babel 8\n  parseDecimalLiteral(value: any) {\n    return this.parseLiteral<N.DecimalLiteral>(value, \"DecimalLiteral\");\n  }\n\n  parseRegExpLiteral(value: {\n    value: any;\n    pattern: string;\n    flags: N.RegExpLiteral[\"flags\"];\n  }) {\n    const node = this.startNode<N.RegExpLiteral>();\n    this.addExtra(\n      node,\n      \"raw\",\n      this.input.slice(this.offsetToSourcePos(node.start), this.state.end),\n    );\n    node.pattern = value.pattern;\n    node.flags = value.flags;\n    this.next();\n    return this.finishNode(node, \"RegExpLiteral\");\n  }\n\n  parseBooleanLiteral(value: boolean) {\n    const node = this.startNode<N.BooleanLiteral>();\n    node.value = value;\n    this.next();\n    return this.finishNode(node, \"BooleanLiteral\");\n  }\n\n  parseNullLiteral() {\n    const node = this.startNode<N.NullLiteral>();\n    this.next();\n    return this.finishNode(node, \"NullLiteral\");\n  }\n\n  // https://tc39.es/ecma262/#prod-CoverParenthesizedExpressionAndArrowParameterList\n  parseParenAndDistinguishExpression(\n    this: Parser,\n    canBeArrow: boolean,\n  ): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    let val;\n    this.next(); // eat `(`\n    this.expressionScope.enter(newArrowHeadScope());\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.maybeInArrowParameters = true;\n    this.state.inFSharpPipelineDirectBody = false;\n\n    const innerStartLoc = this.state.startLoc;\n    const exprList: (\n      | N.Expression\n      | N.RestElement\n      | N.VoidPattern\n      | N.AssignmentPattern\n    )[] = [];\n    const refExpressionErrors = new ExpressionErrors();\n    let first = true;\n    let spreadStartLoc;\n    let optionalCommaStartLoc;\n\n    while (!this.match(tt.parenR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(\n          tt.comma,\n          refExpressionErrors.optionalParametersLoc === null\n            ? null\n            : refExpressionErrors.optionalParametersLoc,\n        );\n        if (this.match(tt.parenR)) {\n          optionalCommaStartLoc = this.state.startLoc;\n          break;\n        }\n      }\n\n      if (this.match(tt.ellipsis)) {\n        const spreadNodeStartLoc = this.state.startLoc;\n        spreadStartLoc = this.state.startLoc;\n        exprList.push(\n          this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc),\n        );\n\n        if (!this.checkCommaAfterRest(charCodes.rightParenthesis)) {\n          break;\n        }\n      } else {\n        exprList.push(\n          this.parseMaybeAssignAllowInOrVoidPattern(\n            tt.parenR,\n            refExpressionErrors,\n            this.parseParenItem,\n          ),\n        );\n      }\n    }\n\n    const innerEndLoc = this.state.lastTokEndLoc;\n    this.expect(tt.parenR);\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    let arrowNode = this.startNodeAt<N.ArrowFunctionExpression>(startLoc);\n    if (\n      canBeArrow &&\n      this.shouldParseArrow(exprList) &&\n      (arrowNode = this.parseArrow(arrowNode))\n    ) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.expressionScope.validateAsPattern();\n      this.expressionScope.exit();\n      this.parseArrowExpression(arrowNode, exprList, false);\n      // @ts-expect-error todo(flow->ts) improve node types\n      return arrowNode;\n    }\n    this.expressionScope.exit();\n\n    if (!exprList.length) {\n      this.unexpected(this.state.lastTokStartLoc);\n    }\n    if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);\n    if (spreadStartLoc) this.unexpected(spreadStartLoc);\n    this.checkExpressionErrors(refExpressionErrors, true);\n\n    this.toReferencedListDeep(exprList, /* isParenthesizedExpr */ true);\n    if (exprList.length > 1) {\n      val = this.startNodeAt<N.SequenceExpression>(innerStartLoc);\n      val.expressions = exprList as N.Expression[];\n      // finish node at current location so it can pick up comments after `)`\n      this.finishNode(val, \"SequenceExpression\");\n      this.resetEndLocation(val, innerEndLoc);\n    } else {\n      val = exprList[0];\n    }\n\n    return this.wrapParenthesis(\n      startLoc,\n      // @ts-expect-error todo(flow->ts)\n      val,\n    );\n  }\n\n  wrapParenthesis(startLoc: Position, expression: N.Expression): N.Expression {\n    if (!(this.optionFlags & OptionFlags.CreateParenthesizedExpressions)) {\n      this.addExtra(expression, \"parenthesized\", true);\n      this.addExtra(expression, \"parenStart\", startLoc.index);\n\n      this.takeSurroundingComments(\n        expression,\n        startLoc.index,\n        this.state.lastTokEndLoc.index,\n      );\n\n      return expression;\n    }\n\n    const parenExpression =\n      this.startNodeAt<N.ParenthesizedExpression>(startLoc);\n    parenExpression.expression = expression;\n    return this.finishNode(parenExpression, \"ParenthesizedExpression\");\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `params` is used in typescript plugin\n  shouldParseArrow(params: Array<N.Node>): boolean {\n    return !this.canInsertSemicolon();\n  }\n\n  parseArrow(\n    node: Undone<N.ArrowFunctionExpression>,\n  ): Undone<N.ArrowFunctionExpression> | undefined {\n    if (this.eat(tt.arrow)) {\n      return node;\n    }\n  }\n\n  parseParenItem<T extends N.Expression | N.RestElement | N.SpreadElement>(\n    node: T,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    startLoc: Position,\n  ): T | N.TypeCastExpression | N.TsTypeCastExpression {\n    return node;\n  }\n\n  parseNewOrNewTarget(this: Parser): N.NewExpression | N.MetaProperty {\n    const node = this.startNode<N.NewExpression | N.MetaProperty>();\n    this.next();\n    if (this.match(tt.dot)) {\n      // https://tc39.es/ecma262/#prod-NewTarget\n      const meta = this.createIdentifier(\n        this.startNodeAtNode<N.Identifier>(node),\n        \"new\",\n      );\n      this.next();\n      const metaProp = this.parseMetaProperty(\n        node as Undone<N.MetaProperty>,\n        meta,\n        \"target\",\n      );\n\n      if (!this.scope.allowNewTarget) {\n        this.raise(Errors.UnexpectedNewTarget, metaProp);\n      }\n\n      return metaProp;\n    }\n\n    return this.parseNew(node as Undone<N.NewExpression>);\n  }\n\n  // New's precedence is slightly tricky. It must allow its argument to\n  // be a `[]` or dot subscript expression, but not a call — at least,\n  // not without wrapping it in parentheses. Thus, it uses the noCalls\n  // argument to parseSubscripts to prevent it from consuming the\n  // argument list.\n  // https://tc39.es/ecma262/#prod-NewExpression\n  parseNew(this: Parser, node: Undone<N.NewExpression>): N.NewExpression {\n    this.parseNewCallee(node);\n\n    if (this.eat(tt.parenL)) {\n      const args = this.parseExprList(tt.parenR);\n      this.toReferencedList(args);\n      // (parseExprList should be all non-null in this case)\n      node.arguments = args;\n    } else {\n      node.arguments = [];\n    }\n\n    return this.finishNode(node, \"NewExpression\");\n  }\n\n  parseNewCallee(this: Parser, node: Undone<N.NewExpression>): void {\n    const isImport = this.match(tt._import);\n    const callee = this.parseNoCallExpr();\n    node.callee = callee;\n    if (\n      isImport &&\n      (callee.type === \"Import\" || callee.type === \"ImportExpression\")\n    ) {\n      this.raise(Errors.ImportCallNotNewExpression, callee);\n    }\n  }\n\n  // Parse template expression.\n\n  parseTemplateElement(isTagged: boolean): N.TemplateElement {\n    const { start, startLoc, end, value } = this.state;\n    const elemStart = start + 1;\n    const elem = this.startNodeAt<N.TemplateElement>(\n      createPositionWithColumnOffset(startLoc, 1),\n    );\n    if (value === null) {\n      if (!isTagged) {\n        this.raise(\n          Errors.InvalidEscapeSequenceTemplate,\n          // FIXME: Adding 1 is probably wrong.\n          createPositionWithColumnOffset(\n            this.state.firstInvalidTemplateEscapePos,\n            1,\n          ),\n        );\n      }\n    }\n\n    const isTail = this.match(tt.templateTail);\n    const endOffset = isTail ? -1 : -2;\n    const elemEnd = end + endOffset;\n    elem.value = {\n      raw: this.input.slice(elemStart, elemEnd).replace(/\\r\\n?/g, \"\\n\"),\n      cooked: value === null ? null : value.slice(1, endOffset),\n    };\n    elem.tail = isTail;\n    this.next();\n    const finishedNode = this.finishNode(elem, \"TemplateElement\");\n    this.resetEndLocation(\n      finishedNode,\n      createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset),\n    );\n    return finishedNode;\n  }\n\n  // https://tc39.es/ecma262/#prod-TemplateLiteral\n  parseTemplate(this: Parser, isTagged: boolean): N.TemplateLiteral {\n    const node = this.startNode<N.TemplateLiteral>();\n    let curElt = this.parseTemplateElement(isTagged);\n    const quasis = [curElt];\n    const substitutions = [];\n    while (!curElt.tail) {\n      substitutions.push(this.parseTemplateSubstitution());\n      this.readTemplateContinuation();\n      quasis.push((curElt = this.parseTemplateElement(isTagged)));\n    }\n    // Type cast from (N.Expression[] | N.TsType[]). parseTemplateSubstitution\n    // returns consistent results.\n    node.expressions = substitutions as N.Expression[] | N.TsType[];\n    node.quasis = quasis;\n    return this.finishNode(node, \"TemplateLiteral\");\n  }\n\n  // This is overwritten by the TypeScript plugin to parse template types\n  parseTemplateSubstitution(this: Parser): N.Expression | N.TsType {\n    return this.parseExpression();\n  }\n\n  // Parse an object literal, binding pattern, or record.\n\n  parseObjectLike(\n    close: TokenType,\n    isPattern: true,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectPattern;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: false | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectExpression;\n  parseObjectLike(\n    close: TokenType,\n    isPattern: false,\n    isRecord?: true,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.RecordExpression;\n  parseObjectLike<T extends N.ObjectPattern | N.ObjectExpression>(\n    this: Parser,\n    close: TokenType,\n    isPattern: boolean,\n    isRecord?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    if (isRecord) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    let sawProto = false;\n    let first = true;\n    const node = this.startNode<\n      N.ObjectExpression | N.ObjectPattern | N.RecordExpression\n    >();\n\n    node.properties = [];\n    this.next();\n\n    while (!this.match(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          this.addTrailingCommaExtraToNode(node);\n          break;\n        }\n      }\n\n      let prop;\n      if (isPattern) {\n        prop = this.parseBindingProperty();\n      } else {\n        prop = this.parsePropertyDefinition(refExpressionErrors);\n        sawProto = this.checkProto(\n          prop,\n          isRecord,\n          sawProto,\n          refExpressionErrors,\n        );\n      }\n\n      if (\n        isRecord &&\n        !this.isObjectProperty(prop) &&\n        prop.type !== \"SpreadElement\"\n      ) {\n        this.raise(Errors.InvalidRecordProperty, prop);\n      }\n\n      if (!process.env.BABEL_8_BREAKING) {\n        // @ts-expect-error shorthand may not index prop\n        if (prop.shorthand) {\n          this.addExtra(prop, \"shorthand\", true);\n        }\n      }\n\n      // @ts-expect-error Fixme: refine typings\n      node.properties.push(prop);\n    }\n\n    this.next();\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    let type = \"ObjectExpression\";\n    if (isPattern) {\n      type = \"ObjectPattern\";\n    } else if (isRecord) {\n      type = \"RecordExpression\";\n    }\n    // @ts-expect-error type is well defined\n    return this.finishNode(node, type);\n  }\n\n  addTrailingCommaExtraToNode(node: Undone<N.Node>): void {\n    this.addExtra(node, \"trailingComma\", this.state.lastTokStartLoc.index);\n    this.addExtra(node, \"trailingCommaLoc\", this.state.lastTokStartLoc, false);\n  }\n\n  // Check grammar production:\n  //   IdentifierName *_opt PropertyName\n  // It is used in `parsePropertyDefinition` to detect AsyncMethod and Accessors\n  maybeAsyncOrAccessorProp(\n    prop: Undone<N.ObjectProperty>,\n  ): prop is typeof prop & { key: N.Identifier } {\n    return (\n      !prop.computed &&\n      prop.key.type === \"Identifier\" &&\n      (this.isLiteralPropertyName() ||\n        this.match(tt.bracketL) ||\n        this.match(tt.star))\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyDefinition\n  parsePropertyDefinition(\n    this: Parser,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectMember | N.SpreadElement {\n    let decorators = [];\n    if (this.match(tt.at)) {\n      if (this.hasPlugin(\"decorators\")) {\n        this.raise(Errors.UnsupportedPropertyDecorator, this.state.startLoc);\n      }\n\n      // we needn't check if decorators (stage 0) plugin is enabled since it's checked by\n      // the call to this.parseDecorator\n      while (this.match(tt.at)) {\n        decorators.push(this.parseDecorator());\n      }\n    }\n\n    const prop = this.startNode<N.ObjectProperty>();\n    let isAsync = false;\n    let isAccessor = false;\n    let startLoc;\n\n    if (this.match(tt.ellipsis)) {\n      if (decorators.length) this.unexpected();\n      return this.parseSpread();\n    }\n\n    if (decorators.length) {\n      prop.decorators = decorators;\n      decorators = [];\n    }\n\n    prop.method = false;\n\n    if (refExpressionErrors) {\n      startLoc = this.state.startLoc;\n    }\n\n    let isGenerator = this.eat(tt.star);\n    this.parsePropertyNamePrefixOperator(prop);\n    const containsEsc = this.state.containsEsc;\n    this.parsePropertyName(prop, refExpressionErrors);\n\n    if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {\n      const { key } = prop;\n      const keyName = key.name;\n      // https://tc39.es/ecma262/#prod-AsyncMethod\n      // https://tc39.es/ecma262/#prod-AsyncGeneratorMethod\n      if (keyName === \"async\" && !this.hasPrecedingLineBreak()) {\n        isAsync = true;\n        this.resetPreviousNodeTrailingComments(key);\n        isGenerator = this.eat(tt.star);\n        this.parsePropertyName(prop);\n      }\n      // get PropertyName[?Yield, ?Await] () { FunctionBody[~Yield, ~Await] }\n      // set PropertyName[?Yield, ?Await] ( PropertySetParameterList ) { FunctionBody[~Yield, ~Await] }\n      if (keyName === \"get\" || keyName === \"set\") {\n        isAccessor = true;\n        this.resetPreviousNodeTrailingComments(key);\n        prop.kind = keyName;\n        if (this.match(tt.star)) {\n          isGenerator = true;\n          this.raise(Errors.AccessorIsGenerator, this.state.curPosition(), {\n            kind: keyName,\n          });\n          this.next();\n        }\n        this.parsePropertyName(prop);\n      }\n    }\n\n    return this.parseObjPropValue(\n      prop,\n      startLoc,\n      isGenerator,\n      isAsync,\n      false /* isPattern */,\n      isAccessor,\n      refExpressionErrors,\n    );\n  }\n\n  getGetterSetterExpectedParamCount(\n    method: N.ObjectMethod | N.ClassMethod,\n  ): number {\n    return method.kind === \"get\" ? 0 : 1;\n  }\n\n  // This exists so we can override within the ESTree plugin\n  getObjectOrClassMethodParams(method: N.ObjectMethod | N.ClassMethod) {\n    return method.params;\n  }\n\n  // get methods aren't allowed to have any parameters\n  // set methods must have exactly 1 parameter which is not a rest parameter\n  checkGetterSetterParams(method: N.ObjectMethod | N.ClassMethod): void {\n    const paramCount = this.getGetterSetterExpectedParamCount(method);\n    const params = this.getObjectOrClassMethodParams(method);\n\n    if (params.length !== paramCount) {\n      this.raise(\n        method.kind === \"get\" ? Errors.BadGetterArity : Errors.BadSetterArity,\n        method,\n      );\n    }\n\n    if (\n      method.kind === \"set\" &&\n      params[params.length - 1]?.type === \"RestElement\"\n    ) {\n      this.raise(Errors.BadSetterRestParameter, method);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-MethodDefinition\n  parseObjectMethod(\n    this: Parser,\n    prop: Undone<N.ObjectMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n  ): N.ObjectMethod | undefined | null {\n    if (isAccessor) {\n      // isAccessor implies isAsync: false, isPattern: false, isGenerator: false\n      const finishedProp = this.parseMethod(\n        prop,\n        // This _should_ be false, but with error recovery, we allow it to be\n        // set for informational purposes\n        isGenerator,\n        /* isAsync */ false,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n      this.checkGetterSetterParams(finishedProp);\n      return finishedProp;\n    }\n\n    if (isAsync || isGenerator || this.match(tt.parenL)) {\n      if (isPattern) this.unexpected();\n      prop.kind = \"method\";\n      prop.method = true;\n      return this.parseMethod(\n        prop,\n        isGenerator,\n        isAsync,\n        /* isConstructor */ false,\n        false,\n        \"ObjectMethod\",\n      );\n    }\n  }\n\n  // if `isPattern` is true, parse https://tc39.es/ecma262/#prod-BindingProperty\n  // else https://tc39.es/ecma262/#prod-PropertyDefinition\n  parseObjectProperty(\n    this: Parser,\n    prop: Undone<N.ObjectProperty>,\n    startLoc: Position | undefined | null,\n    isPattern: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ObjectProperty | undefined | null {\n    prop.shorthand = false;\n\n    if (this.eat(tt.colon)) {\n      prop.value = isPattern\n        ? this.parseMaybeDefault(this.state.startLoc)\n        : this.parseMaybeAssignAllowInOrVoidPattern(\n            tt.braceR,\n            refExpressionErrors,\n          );\n\n      return this.finishObjectProperty(prop);\n    }\n\n    if (!prop.computed && prop.key.type === \"Identifier\") {\n      // PropertyDefinition:\n      //   IdentifierReference\n      //   CoverInitializedName\n      // Note: `{ eval } = {}` will be checked in `checkLVal` later.\n      this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);\n\n      if (isPattern) {\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          this.cloneIdentifier(prop.key),\n        );\n      } else if (this.match(tt.eq)) {\n        const shorthandAssignLoc = this.state.startLoc;\n        if (refExpressionErrors != null) {\n          if (refExpressionErrors.shorthandAssignLoc === null) {\n            refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;\n          }\n        } else {\n          this.raise(Errors.InvalidCoverInitializedName, shorthandAssignLoc);\n        }\n        prop.value = this.parseMaybeDefault(\n          startLoc,\n          this.cloneIdentifier(prop.key),\n        );\n      } else {\n        prop.value = this.cloneIdentifier(prop.key);\n      }\n      prop.shorthand = true;\n\n      return this.finishObjectProperty(prop);\n    }\n  }\n\n  finishObjectProperty(node: Undone<N.ObjectProperty>) {\n    return this.finishNode(node, \"ObjectProperty\");\n  }\n\n  parseObjPropValue<T extends N.ObjectMember>(\n    this: Parser,\n    prop: Undone<T>,\n    startLoc: Position | undefined | null,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isPattern: boolean,\n    isAccessor: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): T {\n    const node = (this.parseObjectMethod(\n      prop as Undone<N.ObjectMethod>,\n      isGenerator,\n      isAsync,\n      isPattern,\n      isAccessor,\n    ) ||\n      this.parseObjectProperty(\n        prop as Undone<N.ObjectProperty>,\n        startLoc,\n        isPattern,\n        refExpressionErrors,\n      )) as T;\n\n    if (!node) this.unexpected();\n\n    return node;\n  }\n\n  // https://tc39.es/ecma262/#prod-PropertyName\n  // when refExpressionErrors presents, it will parse private name\n  // and record the position of the first private name\n  parsePropertyName(\n    this: Parser,\n    prop:\n      | Undone<N.ObjectOrClassMember | N.ClassMember>\n      | N.TsNamedTypeElementBase,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): void {\n    if (this.eat(tt.bracketL)) {\n      (prop as Undone<N.ObjectOrClassMember>).computed = true;\n      prop.key = this.parseMaybeAssignAllowIn();\n      this.expect(tt.bracketR);\n    } else {\n      // We check if it's valid for it to be a private name when we push it.\n      const { type, value } = this.state;\n      let key;\n      // most un-computed property names are identifiers\n      if (tokenIsKeywordOrIdentifier(type)) {\n        key = this.parseIdentifier(true);\n      } else {\n        switch (type) {\n          case tt.num:\n            key = this.parseNumericLiteral(value);\n            break;\n          case tt.string:\n            key = this.parseStringLiteral(value);\n            break;\n          case tt.bigint:\n            key = this.parseBigIntLiteral(value);\n            break;\n          case tt.privateName: {\n            // the class private key has been handled in parseClassElementName\n            const privateKeyLoc = this.state.startLoc;\n            if (refExpressionErrors != null) {\n              if (refExpressionErrors.privateKeyLoc === null) {\n                refExpressionErrors.privateKeyLoc = privateKeyLoc;\n              }\n            } else {\n              this.raise(Errors.UnexpectedPrivateField, privateKeyLoc);\n            }\n            key = this.parsePrivateName();\n            break;\n          }\n          default:\n            if (!process.env.BABEL_8_BREAKING && type === tt.decimal) {\n              key = this.parseDecimalLiteral(value);\n              break;\n            }\n\n            this.unexpected();\n        }\n      }\n      (prop as any).key = key;\n      if (type !== tt.privateName) {\n        // ClassPrivateProperty is never computed, so we don't assign in that case.\n        prop.computed = false;\n      }\n    }\n  }\n\n  // Initialize empty function node.\n\n  initFunction(node: N.BodilessFunctionOrMethodBase, isAsync: boolean): void {\n    node.id = null;\n    node.generator = false;\n    node.async = isAsync;\n  }\n\n  // Parse object or class method.\n\n  parseMethod<T extends N.ObjectMethod | N.ClassMethod | N.ClassPrivateMethod>(\n    this: Parser,\n    node: Undone<T>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowDirectSuper: boolean,\n    type: T[\"type\"],\n    inClassScope: boolean = false,\n  ): T {\n    this.initFunction(node, isAsync);\n    node.generator = isGenerator;\n    this.scope.enter(\n      ScopeFlag.FUNCTION |\n        ScopeFlag.SUPER |\n        (inClassScope ? ScopeFlag.CLASS : 0) |\n        (allowDirectSuper ? ScopeFlag.DIRECT_SUPER : 0),\n    );\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n    this.parseFunctionParams(node, isConstructor);\n    const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);\n    this.prodParam.exit();\n    this.scope.exit();\n\n    return finishedNode;\n  }\n\n  // parse an array literal or tuple literal\n  // https://tc39.es/ecma262/#prod-ArrayLiteral\n  // https://tc39.es/proposal-record-tuple/#prod-TupleLiteral\n  parseArrayLike(\n    this: Parser,\n    close: TokenType,\n    canBePattern: boolean,\n    isTuple: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n  ): N.ArrayExpression | N.TupleExpression {\n    if (isTuple) {\n      this.expectPlugin(\"recordAndTuple\");\n    }\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = false;\n    const node = this.startNode<N.ArrayExpression | N.TupleExpression>();\n    this.next();\n    node.elements = this.parseExprList(\n      close,\n      /* allowEmpty */ !isTuple,\n      refExpressionErrors,\n      // @ts-expect-error todo(flow->ts)\n      node,\n    );\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n    return this.finishNode(\n      node,\n      isTuple ? \"TupleExpression\" : \"ArrayExpression\",\n    );\n  }\n\n  // Parse arrow function expression.\n  // If the parameters are provided, they will be converted to an\n  // assignable list.\n  parseArrowExpression(\n    this: Parser,\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<\n          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >,\n    isAsync: boolean,\n    trailingCommaLoc?: Position | null,\n  ): N.ArrowFunctionExpression {\n    this.scope.enter(ScopeFlag.FUNCTION | ScopeFlag.ARROW);\n    let flags = functionFlags(isAsync, false);\n    // ConciseBody[In] :\n    //   [lookahead ≠ {] ExpressionBody[?In, ~Await]\n    //   { FunctionBody[~Yield, ~Await] }\n    if (!this.match(tt.braceL) && this.prodParam.hasIn) {\n      flags |= ParamKind.PARAM_IN;\n    }\n    this.prodParam.enter(flags);\n    this.initFunction(node, isAsync);\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n\n    if (params) {\n      this.state.maybeInArrowParameters = true;\n      this.setArrowFunctionParameters(node, params, trailingCommaLoc);\n    }\n    this.state.maybeInArrowParameters = false;\n    this.parseFunctionBody(node, true);\n\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n\n    return this.finishNode(node, \"ArrowFunctionExpression\");\n  }\n\n  setArrowFunctionParameters(\n    node: Undone<N.ArrowFunctionExpression>,\n    params:\n      | Array<\n          N.Expression | N.SpreadElement | N.VoidPattern | N.AssignmentPattern\n        >\n      | Array<\n          N.Expression | N.RestElement | N.VoidPattern | N.AssignmentPattern\n        >,\n    trailingCommaLoc?: Position | null,\n  ): void {\n    this.toAssignableList(params, trailingCommaLoc, false);\n    node.params = params as (N.Pattern | N.TSParameterProperty)[];\n  }\n\n  parseFunctionBodyAndFinish<\n    T extends\n      | N.Function\n      | N.TSDeclareMethod\n      | N.TSDeclareFunction\n      | N.ClassPrivateMethod,\n  >(node: Undone<T>, type: T[\"type\"], isMethod: boolean = false): T {\n    // @ts-expect-error (node is not bodiless if we get here)\n    this.parseFunctionBody(node, false, isMethod);\n    return this.finishNode(node, type);\n  }\n\n  // Parse function body and check parameters.\n  parseFunctionBody(\n    this: Parser,\n    node: Undone<N.Function>,\n    allowExpression?: boolean | null,\n    isMethod: boolean = false,\n  ): void {\n    const isExpression = allowExpression && !this.match(tt.braceL);\n    this.expressionScope.enter(newExpressionScope());\n\n    if (isExpression) {\n      // https://tc39.es/ecma262/#prod-ExpressionBody\n      (node as Undone<N.ArrowFunctionExpression>).body =\n        this.parseMaybeAssign();\n      this.checkParams(node, false, allowExpression, false);\n    } else {\n      const oldStrict = this.state.strict;\n      // Start a new scope with regard to labels\n      // flag (restore them to their old value afterwards).\n      const oldLabels = this.state.labels;\n      this.state.labels = [];\n\n      // FunctionBody[Yield, Await]:\n      //   StatementList[?Yield, ?Await, +Return] opt\n      this.prodParam.enter(\n        this.prodParam.currentFlags() | ParamKind.PARAM_RETURN,\n      );\n      node.body = this.parseBlock(\n        true,\n        false,\n        // Strict mode function checks after we parse the statements in the function body.\n        (hasStrictModeDirective: boolean) => {\n          const nonSimple = !this.isSimpleParamList(node.params);\n\n          if (hasStrictModeDirective && nonSimple) {\n            // This logic is here to align the error location with the ESTree plugin.\n            this.raise(\n              Errors.IllegalLanguageModeDirective,\n              // @ts-expect-error kind may not index node\n              (node.kind === \"method\" || node.kind === \"constructor\") &&\n                // @ts-expect-error key may not index node\n                !!node.key\n                ? // @ts-expect-error node.key has been guarded\n                  node.key.loc.end\n                : node,\n            );\n          }\n\n          const strictModeChanged = !oldStrict && this.state.strict;\n\n          // Add the params to varDeclaredNames to ensure that an error is thrown\n          // if a let/const declaration in the function clashes with one of the params.\n          this.checkParams(\n            node,\n            !this.state.strict && !allowExpression && !isMethod && !nonSimple,\n            allowExpression,\n            strictModeChanged,\n          );\n\n          // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n          if (this.state.strict && node.id) {\n            this.checkIdentifier(\n              node.id,\n              BindingFlag.TYPE_OUTSIDE,\n              strictModeChanged,\n            );\n          }\n        },\n      );\n      this.prodParam.exit();\n      this.state.labels = oldLabels;\n    }\n    this.expressionScope.exit();\n  }\n\n  isSimpleParameter(node: N.Pattern | N.TSParameterProperty): boolean {\n    return node.type === \"Identifier\";\n  }\n\n  isSimpleParamList(\n    params: ReadonlyArray<N.Pattern | N.TSParameterProperty>,\n  ): boolean {\n    for (let i = 0, len = params.length; i < len; i++) {\n      if (!this.isSimpleParameter(params[i])) return false;\n    }\n    return true;\n  }\n\n  checkParams(\n    node: Undone<N.Function>,\n    allowDuplicates: boolean,\n    isArrowFunction?: boolean | null,\n    strictModeChanged: boolean = true,\n  ): void {\n    const checkClashes = !allowDuplicates && new Set<string>();\n    // We create a fake node with the \"ephemeral\" type `FormalParameters`[1]\n    // since we just store an array of parameters. Perhaps someday we can have\n    // something like class FormalParameters extends Array { ... }, which would\n    // also be helpful when traversing this node.\n    //\n    // 1. https://tc39.es/ecma262/#prod-FormalParameters\n    const formalParameters = { type: \"FormalParameters\" } as const;\n    for (const param of node.params) {\n      this.checkLVal(\n        param,\n        formalParameters,\n        BindingFlag.TYPE_VAR,\n        checkClashes,\n        strictModeChanged,\n      );\n    }\n  }\n\n  // Parses a comma-separated list of expressions, and returns them as\n  // an array. `close` is the token type that ends the list, and\n  // `allowEmpty` can be turned on to allow subsequent commas with\n  // nothing in between them to be parsed as `null` (which is needed\n  // for array literals).\n  // https://tc39.es/ecma262/#prod-ElementList\n  parseExprList(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    nodeForExtra?: N.Node | null,\n  ): (N.Expression | null)[] {\n    const elts: (N.Expression | null)[] = [];\n    let first = true;\n\n    while (!this.eat(close)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.match(close)) {\n          if (nodeForExtra) {\n            this.addTrailingCommaExtraToNode(nodeForExtra);\n          }\n          this.next();\n          break;\n        }\n      }\n\n      elts.push(this.parseExprListItem(close, allowEmpty, refExpressionErrors));\n    }\n    return elts;\n  }\n\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression | null;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: false,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ): N.Expression;\n  parseExprListItem(\n    this: Parser,\n    close: TokenType,\n    allowEmpty?: boolean | null,\n    refExpressionErrors?: ExpressionErrors | null,\n    allowPlaceholder?: boolean | null,\n  ):\n    | N.Expression\n    | N.SpreadElement\n    | N.ArgumentPlaceholder\n    | N.VoidPattern\n    | N.AssignmentPattern\n    | null {\n    let elt;\n    if (this.match(tt.comma)) {\n      if (!allowEmpty) {\n        this.raise(Errors.UnexpectedToken, this.state.curPosition(), {\n          unexpected: \",\",\n        });\n      }\n      elt = null;\n    } else if (this.match(tt.ellipsis)) {\n      const spreadNodeStartLoc = this.state.startLoc;\n\n      elt = this.parseParenItem(\n        this.parseSpread(refExpressionErrors),\n        spreadNodeStartLoc,\n      );\n    } else if (this.match(tt.question)) {\n      this.expectPlugin(\"partialApplication\");\n      if (!allowPlaceholder) {\n        this.raise(Errors.UnexpectedArgumentPlaceholder, this.state.startLoc);\n      }\n      const node = this.startNode<N.ArgumentPlaceholder>();\n      this.next();\n      elt = this.finishNode(node, \"ArgumentPlaceholder\");\n    } else {\n      elt = this.parseMaybeAssignAllowInOrVoidPattern(\n        close,\n        refExpressionErrors,\n        this.parseParenItem,\n      );\n    }\n    return elt;\n  }\n\n  // Parse the next token as an identifier. If `liberal` is true (used\n  // when parsing properties), it will also convert keywords into\n  // identifiers.\n  // This shouldn't be used to parse the keywords of meta properties, since they\n  // are not identifiers and cannot contain escape sequences.\n\n  parseIdentifier(liberal?: boolean): N.Identifier {\n    const node = this.startNode<N.Identifier>();\n    const name = this.parseIdentifierName(liberal);\n\n    return this.createIdentifier(node, name);\n  }\n\n  createIdentifier(node: Undone<N.Identifier>, name: string): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNode(node, \"Identifier\");\n  }\n\n  createIdentifierAt(\n    node: Undone<N.Identifier>,\n    name: string,\n    endLoc: Position,\n  ): N.Identifier {\n    node.name = name;\n    node.loc.identifierName = name;\n\n    return this.finishNodeAt(node, \"Identifier\", endLoc);\n  }\n\n  parseIdentifierName(liberal?: boolean): string {\n    let name: string;\n\n    const { startLoc, type } = this.state;\n\n    if (tokenIsKeywordOrIdentifier(type)) {\n      name = this.state.value;\n    } else {\n      this.unexpected();\n    }\n\n    const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);\n\n    if (liberal) {\n      // If the current token is not used as a keyword, set its type to \"tt.name\".\n      // This will prevent this.next() from throwing about unexpected escapes.\n      if (tokenIsKeyword) {\n        this.replaceToken(tt.name);\n      }\n    } else {\n      this.checkReservedWord(name, startLoc, tokenIsKeyword, false);\n    }\n\n    this.next();\n\n    return name;\n  }\n\n  checkReservedWord(\n    word: string,\n    startLoc: Position,\n    checkKeywords: boolean,\n    isBinding: boolean,\n  ): void {\n    // Every JavaScript reserved word is 10 characters or less.\n    if (word.length > 10) {\n      return;\n    }\n    // Most identifiers are not reservedWord-like, they don't need special\n    // treatments afterward, which very likely ends up throwing errors\n    if (!canBeReservedWord(word)) {\n      return;\n    }\n\n    if (checkKeywords && isKeyword(word)) {\n      this.raise(Errors.UnexpectedKeyword, startLoc, {\n        keyword: word,\n      });\n      return;\n    }\n\n    const reservedTest = !this.state.strict\n      ? isReservedWord\n      : isBinding\n        ? isStrictBindReservedWord\n        : isStrictReservedWord;\n\n    if (reservedTest(word, this.inModule)) {\n      this.raise(Errors.UnexpectedReservedWord, startLoc, {\n        reservedWord: word,\n      });\n      return;\n    } else if (word === \"yield\") {\n      if (this.prodParam.hasYield) {\n        this.raise(Errors.YieldBindingIdentifier, startLoc);\n        return;\n      }\n    } else if (word === \"await\") {\n      if (this.prodParam.hasAwait) {\n        this.raise(Errors.AwaitBindingIdentifier, startLoc);\n        return;\n      }\n\n      if (this.scope.inStaticBlock) {\n        this.raise(Errors.AwaitBindingIdentifierInStaticBlock, startLoc);\n        return;\n      }\n\n      this.expressionScope.recordAsyncArrowParametersError(startLoc);\n    } else if (word === \"arguments\") {\n      if (this.scope.inClassAndNotInNonArrowFunction) {\n        this.raise(Errors.ArgumentsInClass, startLoc);\n        return;\n      }\n    }\n  }\n\n  // Returns whether `await` is allowed or not in this context, and if it is\n  // keeps track of it to determine whether a module uses top-level await.\n  recordAwaitIfAllowed(): boolean {\n    const isAwaitAllowed = this.prodParam.hasAwait;\n\n    if (isAwaitAllowed && !this.scope.inFunction) {\n      this.state.hasTopLevelAwait = true;\n    }\n\n    return isAwaitAllowed;\n  }\n\n  // Parses await expression inside async function.\n\n  parseAwait(this: Parser, startLoc: Position): N.AwaitExpression {\n    const node = this.startNodeAt<N.AwaitExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.AwaitExpressionFormalParameter,\n      node,\n    );\n\n    if (this.eat(tt.star)) {\n      this.raise(Errors.ObsoleteAwaitStar, node);\n    }\n\n    if (\n      !this.scope.inFunction &&\n      !(this.optionFlags & OptionFlags.AllowAwaitOutsideFunction)\n    ) {\n      if (this.isAmbiguousPrefixOrIdentifier()) {\n        this.ambiguousScriptDifferentAst = true;\n      } else {\n        this.sawUnambiguousESM = true;\n      }\n    }\n\n    if (!this.state.soloAwait) {\n      node.argument = this.parseMaybeUnary(null, true);\n    }\n\n    return this.finishNode(node, \"AwaitExpression\");\n  }\n\n  isAmbiguousPrefixOrIdentifier(): boolean {\n    if (this.hasPrecedingLineBreak()) return true;\n    const { type } = this.state;\n    return (\n      // All the following expressions are ambiguous:\n      //   await + 0, await - 0, await ( 0 ), await [ 0 ], await / 0 /u, await ``, await of []\n      type === tt.plusMin ||\n      type === tt.parenL ||\n      type === tt.bracketL ||\n      tokenIsTemplate(type) ||\n      (type === tt._of && !this.state.containsEsc) ||\n      // Sometimes the tokenizer generates tt.slash for regexps, and this is\n      // handler by parseExprAtom\n      type === tt.regexp ||\n      type === tt.slash ||\n      // This code could be parsed both as a modulo operator or as an intrinsic:\n      //   await %x(0)\n      (this.hasPlugin(\"v8intrinsic\") && type === tt.modulo)\n    );\n  }\n\n  // Parses yield expression inside generator.\n\n  parseYield(this: Parser, startLoc: Position): N.YieldExpression {\n    const node = this.startNodeAt<N.YieldExpression>(startLoc);\n\n    this.expressionScope.recordParameterInitializerError(\n      Errors.YieldInParameter,\n      node,\n    );\n\n    let delegating = false;\n    let argument: N.Expression | null = null;\n    if (!this.hasPrecedingLineBreak()) {\n      delegating = this.eat(tt.star);\n      switch (this.state.type) {\n        case tt.semi:\n        case tt.eof:\n        case tt.braceR:\n        case tt.parenR:\n        case tt.bracketR:\n        case tt.braceBarR:\n        case tt.colon:\n        case tt.comma:\n          // The above is the complete set of tokens that can\n          // follow an AssignmentExpression, and none of them\n          // can start an AssignmentExpression\n          if (!delegating) break;\n        /* fallthrough */\n        default:\n          argument = this.parseMaybeAssign();\n      }\n    }\n    node.delegate = delegating;\n    node.argument = argument;\n    return this.finishNode(node, \"YieldExpression\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportCall\n  parseImportCall(\n    this: Parser,\n    node: Undone<N.ImportExpression>,\n  ): N.ImportExpression {\n    this.next(); // eat tt.parenL\n    node.source = this.parseMaybeAssignAllowIn();\n    node.options = null;\n    if (this.eat(tt.comma)) {\n      if (!this.match(tt.parenR)) {\n        node.options = this.parseMaybeAssignAllowIn();\n        if (this.eat(tt.comma)) {\n          this.addTrailingCommaExtraToNode(node.options);\n          if (!this.match(tt.parenR)) {\n            // keep consuming arguments, to then throw ImportCallArity\n            // instead of \"expected )\"\n            do {\n              this.parseMaybeAssignAllowIn();\n            } while (this.eat(tt.comma) && !this.match(tt.parenR));\n\n            this.raise(Errors.ImportCallArity, node);\n          }\n        }\n      } else {\n        this.addTrailingCommaExtraToNode(node.source);\n      }\n    }\n    this.expect(tt.parenR);\n    return this.finishNode(node, \"ImportExpression\");\n  }\n\n  // Validates a pipeline (for any of the pipeline Babylon plugins) at the point\n  // of the infix operator `|>`.\n\n  checkPipelineAtInfixOperator(left: N.Expression, leftStartLoc: Position) {\n    // @ts-expect-error Remove this in Babel 8\n    if (this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])) {\n      if (left.type === \"SequenceExpression\") {\n        // Ensure that the pipeline head is not a comma-delimited\n        // sequence expression.\n        this.raise(Errors.PipelineHeadSequenceExpression, leftStartLoc);\n      }\n    }\n  }\n\n  parseSmartPipelineBodyInStyle(childExpr: N.Expression, startLoc: Position) {\n    if (this.isSimpleReference(childExpr)) {\n      const bodyNode = this.startNodeAt<N.PipelineBareFunction>(startLoc);\n      bodyNode.callee = childExpr;\n      return this.finishNode(bodyNode, \"PipelineBareFunction\");\n    } else {\n      const bodyNode = this.startNodeAt<N.PipelineTopicExpression>(startLoc);\n      this.checkSmartPipeTopicBodyEarlyErrors(startLoc);\n      bodyNode.expression = childExpr;\n      return this.finishNode(bodyNode, \"PipelineTopicExpression\");\n    }\n  }\n\n  isSimpleReference(expression: N.Expression): boolean {\n    switch (expression.type) {\n      case \"MemberExpression\":\n        return (\n          !expression.computed && this.isSimpleReference(expression.object)\n        );\n      case \"Identifier\":\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  // This helper method is to be called immediately\n  // after a topic-style smart-mix pipe body is parsed.\n  // The `startLoc` is the starting position of the pipe body.\n\n  checkSmartPipeTopicBodyEarlyErrors(startLoc: Position): void {\n    // If the following token is invalidly `=>`, then throw a human-friendly error\n    // instead of something like 'Unexpected token, expected \";\"'.\n    // For example, `x => x |> y => #` (assuming `#` is the topic reference)\n    // groups into `x => (x |> y) => #`,\n    // and `(x |> y) => #` is an invalid arrow function.\n    // This is because smart-mix `|>` has tighter precedence than `=>`.\n    if (this.match(tt.arrow)) {\n      throw this.raise(Errors.PipelineBodyNoArrow, this.state.startLoc);\n    }\n\n    // A topic-style smart-mix pipe body must use the topic reference at least once.\n    if (!this.topicReferenceWasUsedInCurrentContext()) {\n      this.raise(Errors.PipelineTopicUnused, startLoc);\n    }\n  }\n\n  // Enable topic references from outer contexts within Hack-style pipe bodies.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references.\n  // The function then calls a callback, then resets the parser\n  // to the old topic-context state that it had before the function was called.\n\n  withTopicBindingContext<T>(callback: () => T): T {\n    const outerContextTopicState = this.state.topicContext;\n    this.state.topicContext = {\n      // Enable the use of the primary topic reference.\n      maxNumOfResolvableTopics: 1,\n      // Hide the use of any topic references from outer contexts.\n      maxTopicIndex: null,\n    };\n\n    try {\n      return callback();\n    } finally {\n      this.state.topicContext = outerContextTopicState;\n    }\n  }\n\n  // This helper method is used only with the deprecated smart-mix pipe proposal.\n  // Disables topic references from outer contexts within syntax constructs\n  // such as the bodies of iteration statements.\n  // The function modifies the parser's topic-context state to enable or disable\n  // the use of topic references with the smartPipelines plugin. They then run a\n  // callback, then they reset the parser to the old topic-context state that it\n  // had before the function was called.\n\n  withSmartMixTopicForbiddingContext<T>(callback: () => T): T {\n    // TODO(Babel 8): Remove this method\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      // @ts-expect-error Babel 7 only\n      this.hasPlugin([\"pipelineOperator\", { proposal: \"smart\" }])\n    ) {\n      // Reset the parser’s topic context only if the smart-mix pipe proposal is active.\n      const outerContextTopicState = this.state.topicContext;\n      this.state.topicContext = {\n        // Disable the use of the primary topic reference.\n        maxNumOfResolvableTopics: 0,\n        // Hide the use of any topic references from outer contexts.\n        maxTopicIndex: null,\n      };\n\n      try {\n        return callback();\n      } finally {\n        this.state.topicContext = outerContextTopicState;\n      }\n    } else {\n      // If the pipe proposal is \"minimal\"(Babel 7), \"fsharp\", or \"hack\",\n      // or if no pipe proposal is active,\n      // then the callback result is returned\n      // without touching any extra parser state.\n      return callback();\n    }\n  }\n\n  withSoloAwaitPermittingContext<T>(callback: () => T): T {\n    const outerContextSoloAwaitState = this.state.soloAwait;\n    this.state.soloAwait = true;\n\n    try {\n      return callback();\n    } finally {\n      this.state.soloAwait = outerContextSoloAwaitState;\n    }\n  }\n\n  allowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToSet = ParamKind.PARAM_IN & ~flags;\n    if (prodParamToSet) {\n      this.prodParam.enter(flags | ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  disallowInAnd<T>(callback: () => T): T {\n    const flags = this.prodParam.currentFlags();\n    const prodParamToClear = ParamKind.PARAM_IN & flags;\n    if (prodParamToClear) {\n      this.prodParam.enter(flags & ~ParamKind.PARAM_IN);\n      try {\n        return callback();\n      } finally {\n        this.prodParam.exit();\n      }\n    }\n    return callback();\n  }\n\n  // Register the use of a topic reference within the current\n  // topic-binding context.\n  registerTopicReference(): void {\n    this.state.topicContext.maxTopicIndex = 0;\n  }\n\n  topicReferenceIsAllowedInCurrentContext(): boolean {\n    return this.state.topicContext.maxNumOfResolvableTopics >= 1;\n  }\n\n  topicReferenceWasUsedInCurrentContext(): boolean {\n    return (\n      this.state.topicContext.maxTopicIndex != null &&\n      this.state.topicContext.maxTopicIndex >= 0\n    );\n  }\n\n  parseFSharpPipelineBody(this: Parser, prec: number): N.Expression {\n    const startLoc = this.state.startLoc;\n\n    this.state.potentialArrowAt = this.state.start;\n    const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;\n    this.state.inFSharpPipelineDirectBody = true;\n\n    const ret = this.parseExprOp(\n      this.parseMaybeUnaryOrPrivate(),\n      startLoc,\n      prec,\n    );\n\n    this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;\n\n    return ret;\n  }\n\n  // https://github.com/tc39/proposal-js-module-blocks\n  parseModuleExpression(this: Parser): N.ModuleExpression {\n    this.expectPlugin(\"moduleBlocks\");\n    const node = this.startNode<N.ModuleExpression>();\n    this.next(); // eat \"module\"\n    if (!this.match(tt.braceL)) {\n      this.unexpected(null, tt.braceL);\n    }\n    // start program node immediately after `{`\n    const program = this.startNodeAt<N.Program>(this.state.endLoc);\n    this.next(); // eat `{`\n\n    const revertScopes = this.initializeScopes(/** inModule */ true);\n    this.enterInitialScopes();\n\n    try {\n      node.body = this.parseProgram(program, tt.braceR, \"module\");\n    } finally {\n      revertScopes();\n    }\n    return this.finishNode<N.ModuleExpression>(node, \"ModuleExpression\");\n  }\n\n  parseVoidPattern(\n    this: Parser,\n    refExpressionErrors: ExpressionErrors | null,\n  ): N.VoidPattern {\n    this.expectPlugin(\"discardBinding\");\n    const node = this.startNode<N.VoidPattern>();\n    if (refExpressionErrors != null) {\n      refExpressionErrors.voidPatternLoc = this.state.startLoc;\n    }\n    this.next();\n    return this.finishNode(node, \"VoidPattern\");\n  }\n\n  parseMaybeAssignAllowInOrVoidPattern(\n    this: Parser,\n    close: TokenType,\n    refExpressionErrors: ExpressionErrors | null,\n    afterLeftParse?: Function,\n  ) {\n    if (refExpressionErrors != null && this.match(tt._void)) {\n      const nextCode = this.lookaheadCharCode();\n      if (\n        nextCode === charCodes.comma ||\n        nextCode ===\n          (close === tt.bracketR\n            ? charCodes.rightSquareBracket\n            : close === tt.braceR\n              ? charCodes.rightCurlyBrace\n              : charCodes.rightParenthesis) ||\n        nextCode === charCodes.equalsTo\n      ) {\n        // `void = Initializer` is not allowed, here we parse the production as an assignment pattern\n        // so that we can recover from this error\n        return this.parseMaybeDefault(\n          this.state.startLoc,\n          this.parseVoidPattern(refExpressionErrors),\n        );\n      }\n    }\n    return this.parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse);\n  }\n\n  // Used in Flow plugin\n  parsePropertyNamePrefixOperator(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    prop: Undone<N.ObjectOrClassMember | N.ClassMember>,\n  ): void {}\n}\n","import type * as N from \"../types.ts\";\nimport {\n  tokenIsIdentifier,\n  tokenIsKeywordOrIdentifier,\n  tokenIsLoop,\n  tokenIsTemplate,\n  tt,\n  type TokenType,\n  getExportedToken,\n} from \"../tokenizer/types.ts\";\nimport ExpressionParser from \"./expression.ts\";\nimport { Errors } from \"../parse-error.ts\";\nimport { isIdentifierChar, isIdentifierStart } from \"../util/identifier.ts\";\nimport * as charCodes from \"charcodes\";\nimport {\n  ScopeFlag,\n  ClassElementType,\n  BindingFlag,\n} from \"../util/scopeflags.ts\";\nimport { ExpressionErrors } from \"./util.ts\";\nimport { ParamKind, functionFlags } from \"../util/production-parameter.ts\";\nimport {\n  newExpressionScope,\n  newParameterDeclarationScope,\n} from \"../util/expression-scope.ts\";\nimport { OptionFlags, type SourceType } from \"../options.ts\";\nimport { Token } from \"../tokenizer/index.ts\";\nimport type { Position } from \"../util/location.ts\";\nimport { createPositionWithColumnOffset } from \"../util/location.ts\";\nimport type { Undone } from \"./node.ts\";\nimport type Parser from \"./index.ts\";\nimport { ParseBindingListFlags } from \"./lval.ts\";\nimport { LoopLabelKind } from \"../tokenizer/state.ts\";\n\nconst loopLabel = { kind: LoopLabelKind.Loop } as const,\n  switchLabel = { kind: LoopLabelKind.Switch } as const;\n\nexport const enum ParseFunctionFlag {\n  Expression = 0b0000,\n  Declaration = 0b0001,\n  HangingDeclaration = 0b0010,\n  NullableId = 0b0100,\n  Async = 0b1000,\n}\n\nexport const enum ParseStatementFlag {\n  StatementOnly = 0b0000,\n  AllowImportExport = 0b0001,\n  AllowDeclaration = 0b0010,\n  AllowFunctionDeclaration = 0b0100,\n  AllowLabeledFunction = 0b1000,\n}\n\nconst loneSurrogate = /[\\uD800-\\uDFFF]/u;\n\nconst keywordRelationalOperator = /in(?:stanceof)?/y;\n\n/**\n * Convert tokens for backward Babel 7 compat.\n * tt.privateName => tt.hash + tt.name\n * tt.templateTail => tt.backquote/tt.braceR + tt.template + tt.backquote\n * tt.templateNonTail => tt.backquote/tt.braceR + tt.template + tt.dollarBraceL\n * For performance reasons this routine mutates `tokens`, it is okay\n * here since we execute `parseTopLevel` once for every file.\n */\nfunction babel7CompatTokens(\n  tokens: (Token | N.Comment)[],\n  input: string,\n  startIndex: number,\n) {\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i];\n    const { type } = token;\n    if (typeof type === \"number\") {\n      if (!process.env.BABEL_8_BREAKING) {\n        if (type === tt.privateName) {\n          const { loc, start, value, end } = token;\n          const hashEndPos = start + 1;\n          const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          tokens.splice(\n            i,\n            1,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.hash),\n              value: \"#\",\n              start: start,\n              end: hashEndPos,\n              startLoc: loc.start,\n              endLoc: hashEndLoc,\n            }),\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.name),\n              value: value,\n              start: hashEndPos,\n              end: end,\n              startLoc: hashEndLoc,\n              endLoc: loc.end,\n            }),\n          );\n          i++;\n          continue;\n        }\n\n        if (tokenIsTemplate(type)) {\n          const { loc, start, value, end } = token;\n          const backquoteEnd = start + 1;\n          const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);\n          let startToken;\n          if (input.charCodeAt(start - startIndex) === charCodes.graveAccent) {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          } else {\n            startToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.braceR),\n              value: \"}\",\n              start: start,\n              end: backquoteEnd,\n              startLoc: loc.start,\n              endLoc: backquoteEndLoc,\n            });\n          }\n          let templateValue,\n            templateElementEnd,\n            templateElementEndLoc,\n            endToken;\n          if (type === tt.templateTail) {\n            // ends with '`'\n            templateElementEnd = end - 1;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);\n            templateValue = value === null ? null : value.slice(1, -1);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.backQuote),\n              value: \"`\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          } else {\n            // ends with `${`\n            templateElementEnd = end - 2;\n            templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);\n            templateValue = value === null ? null : value.slice(1, -2);\n            endToken = new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.dollarBraceL),\n              value: \"${\",\n              start: templateElementEnd,\n              end: end,\n              startLoc: templateElementEndLoc,\n              endLoc: loc.end,\n            });\n          }\n          tokens.splice(\n            i,\n            1,\n            startToken,\n            new Token({\n              // @ts-expect-error: hacky way to create token\n              type: getExportedToken(tt.template),\n              value: templateValue,\n              start: backquoteEnd,\n              end: templateElementEnd,\n              startLoc: backquoteEndLoc,\n              endLoc: templateElementEndLoc,\n            }),\n            endToken,\n          );\n          i += 2;\n          continue;\n        }\n      }\n      // @ts-expect-error: we manipulate `token` for performance reasons\n      token.type = getExportedToken(type);\n    }\n  }\n  return tokens;\n}\nexport default abstract class StatementParser extends ExpressionParser {\n  // ### Statement parsing\n\n  // Parse a program. Initializes the parser, reads any number of\n  // statements, and wraps them in a Program node.  Optionally takes a\n  // `program` argument.  If present, the statements will be appended\n  // to its body instead of creating a new node.\n\n  parseTopLevel(\n    this: Parser,\n    file: Undone<N.File>,\n    program: Undone<N.Program>,\n  ): N.File {\n    file.program = this.parseProgram(\n      program,\n      tt.eof,\n      this.options.sourceType === \"module\" ? \"module\" : \"script\",\n    );\n    file.comments = this.comments;\n\n    if (this.optionFlags & OptionFlags.Tokens) {\n      file.tokens = babel7CompatTokens(\n        this.tokens,\n        this.input,\n        this.startIndex,\n      );\n    }\n\n    return this.finishNode(file, \"File\");\n  }\n\n  parseProgram(\n    this: Parser,\n    program: Undone<N.Program>,\n    end: TokenType,\n    sourceType: SourceType,\n  ): N.Program {\n    program.sourceType = sourceType;\n    program.interpreter = this.parseInterpreterDirective();\n    this.parseBlockBody(program, true, true, end);\n    if (this.inModule) {\n      if (\n        !(this.optionFlags & OptionFlags.AllowUndeclaredExports) &&\n        this.scope.undefinedExports.size > 0\n      ) {\n        for (const [localName, at] of Array.from(this.scope.undefinedExports)) {\n          this.raise(Errors.ModuleExportUndefined, at, { localName });\n        }\n      }\n      this.addExtra(program, \"topLevelAwait\", this.state.hasTopLevelAwait);\n    }\n    let finishedProgram: N.Program;\n    if (end === tt.eof) {\n      // finish at eof for top level program\n      finishedProgram = this.finishNode(program, \"Program\");\n    } else {\n      // finish immediately before the end token\n      finishedProgram = this.finishNodeAt(\n        program,\n        \"Program\",\n        createPositionWithColumnOffset(this.state.startLoc, -1),\n      );\n    }\n    return finishedProgram;\n  }\n\n  /**\n   * cast a Statement to a Directive. This method mutates input statement.\n   */\n  stmtToDirective(stmt: N.ExpressionStatement): N.Directive {\n    const directive = this.castNodeTo(stmt, \"Directive\");\n\n    const directiveLiteral = this.castNodeTo(\n      stmt.expression,\n      \"DirectiveLiteral\",\n    );\n    const expressionValue = directiveLiteral.value;\n    const raw = this.input.slice(\n      this.offsetToSourcePos(directiveLiteral.start),\n      this.offsetToSourcePos(directiveLiteral.end),\n    );\n    const val = (directiveLiteral.value = raw.slice(1, -1)); // remove quotes\n\n    this.addExtra(directiveLiteral, \"raw\", raw);\n    this.addExtra(directiveLiteral, \"rawValue\", val);\n    this.addExtra(directiveLiteral, \"expressionValue\", expressionValue);\n\n    directive.value = directiveLiteral;\n    delete stmt.expression;\n\n    return directive;\n  }\n\n  parseInterpreterDirective(): N.InterpreterDirective | null {\n    if (!this.match(tt.interpreterDirective)) {\n      return null;\n    }\n\n    const node = this.startNode<N.InterpreterDirective>();\n    node.value = this.state.value;\n    this.next();\n    return this.finishNode(node, \"InterpreterDirective\");\n  }\n\n  isLet(): boolean {\n    if (!this.isContextual(tt._let)) {\n      return false;\n    }\n    return this.hasFollowingBindingAtom();\n  }\n\n  isUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return this.chStartsBindingIdentifier(nextCh, next);\n  }\n\n  isForUsing(): boolean {\n    if (!this.isContextual(tt._using)) {\n      return false;\n    }\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    if (this.isUnparsedContextual(next, \"of\")) {\n      const nextCharAfterOf = this.lookaheadCharCodeSince(next + 2);\n      // `for( using of` must start either a for-lhs-of statement\n      // or a for lexical declaration\n      if (\n        nextCharAfterOf !== charCodes.equalsTo &&\n        nextCharAfterOf !== charCodes.colon &&\n        // recover from `for(using of;...);`\n        nextCharAfterOf !== charCodes.semicolon\n      ) {\n        return false;\n      }\n    }\n    if (\n      this.chStartsBindingIdentifier(nextCh, next) ||\n      this.isUnparsedContextual(next, \"void\")\n    ) {\n      return true;\n    }\n    return false;\n  }\n\n  isAwaitUsing(): boolean {\n    if (!this.isContextual(tt._await)) {\n      return false;\n    }\n    let next = this.nextTokenInLineStart();\n    if (this.isUnparsedContextual(next, \"using\")) {\n      next = this.nextTokenInLineStartSince(next + 5);\n      const nextCh = this.codePointAtPos(next);\n      if (this.chStartsBindingIdentifier(nextCh, next)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  chStartsBindingIdentifier(ch: number, pos: number) {\n    if (isIdentifierStart(ch)) {\n      keywordRelationalOperator.lastIndex = pos;\n      if (keywordRelationalOperator.test(this.input)) {\n        // We have seen `in` or `instanceof` so far, now check if the identifier\n        // ends here\n        const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);\n        if (!isIdentifierChar(endCh) && endCh !== charCodes.backslash) {\n          return false;\n        }\n      }\n      return true;\n    } else if (ch === charCodes.backslash) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  chStartsBindingPattern(ch: number) {\n    return (\n      ch === charCodes.leftSquareBracket || ch === charCodes.leftCurlyBrace\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `let` and declaration is allowed, check if it\n   * starts a variable declaration so that it should be interpreted as a keyword.\n   */\n  hasFollowingBindingAtom(): boolean {\n    const next = this.nextTokenStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      this.chStartsBindingPattern(nextCh) ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  /**\n   * Assuming we have seen a contextual `using` and declaration is allowed, check if it\n   * starts a variable declaration in the same line so that it should be interpreted as\n   * a keyword.\n   */\n  hasInLineFollowingBindingIdentifierOrBrace(): boolean {\n    const next = this.nextTokenInLineStart();\n    const nextCh = this.codePointAtPos(next);\n    return (\n      nextCh === charCodes.leftCurlyBrace ||\n      this.chStartsBindingIdentifier(nextCh, next)\n    );\n  }\n\n  allowsUsing(): boolean {\n    return (\n      (this.scope.inModule || !this.scope.inTopLevel) &&\n      !this.scope.inBareCaseStatement\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleItem\n  parseModuleItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowImportExport |\n        ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        // This function is actually also used to parse StatementItems,\n        // which with Annex B enabled allows labeled functions.\n        ParseStatementFlag.AllowLabeledFunction,\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-StatementListItem\n  parseStatementListItem(this: Parser) {\n    return this.parseStatementLike(\n      ParseStatementFlag.AllowDeclaration |\n        ParseStatementFlag.AllowFunctionDeclaration |\n        (!this.options.annexB || this.state.strict\n          ? 0\n          : ParseStatementFlag.AllowLabeledFunction),\n    );\n  }\n\n  parseStatementOrSloppyAnnexBFunctionDeclaration(\n    this: Parser,\n    allowLabeledFunction: boolean = false,\n  ) {\n    let flags: ParseStatementFlag = ParseStatementFlag.StatementOnly;\n    if (this.options.annexB && !this.state.strict) {\n      flags |= ParseStatementFlag.AllowFunctionDeclaration;\n      if (allowLabeledFunction) {\n        flags |= ParseStatementFlag.AllowLabeledFunction;\n      }\n    }\n    return this.parseStatementLike(flags);\n  }\n\n  // Parse a single statement.\n  //\n  // If expecting a statement and finding a slash operator, parse a\n  // regular expression literal. This is to handle cases like\n  // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n  // does not help.\n  // https://tc39.es/ecma262/#prod-Statement\n  parseStatement(this: Parser) {\n    return this.parseStatementLike(ParseStatementFlag.StatementOnly);\n  }\n\n  // ImportDeclaration and ExportDeclaration are also handled here so we can throw recoverable errors\n  // when they are not at the top level\n  parseStatementLike(\n    this: Parser,\n    flags: ParseStatementFlag,\n  ):\n    | N.Statement\n    | N.Declaration\n    | N.ImportDeclaration\n    | N.ExportDefaultDeclaration\n    | N.ExportNamedDeclaration\n    | N.ExportAllDeclaration {\n    let decorators: N.Decorator[] | null = null;\n\n    if (this.match(tt.at)) {\n      decorators = this.parseDecorators(true);\n    }\n    return this.parseStatementContent(flags, decorators);\n  }\n\n  parseStatementContent(\n    this: Parser,\n    flags: ParseStatementFlag,\n    decorators?: N.Decorator[] | null,\n  ): N.Statement {\n    const startType = this.state.type;\n    const node = this.startNode();\n    const allowDeclaration = !!(flags & ParseStatementFlag.AllowDeclaration);\n    const allowFunctionDeclaration = !!(\n      flags & ParseStatementFlag.AllowFunctionDeclaration\n    );\n    const topLevel = flags & ParseStatementFlag.AllowImportExport;\n\n    // Most types of statements are recognized by the keyword they\n    // start with. Many are trivial to parse, some require a bit of\n    // complexity.\n\n    switch (startType) {\n      case tt._break:\n        return this.parseBreakContinueStatement(node, /* isBreak */ true);\n      case tt._continue:\n        return this.parseBreakContinueStatement(node, /* isBreak */ false);\n      case tt._debugger:\n        return this.parseDebuggerStatement(node as Undone<N.DebuggerStatement>);\n      case tt._do:\n        return this.parseDoWhileStatement(node as Undone<N.DoWhileStatement>);\n      case tt._for:\n        return this.parseForStatement(node as Undone<N.ForStatement>);\n      case tt._function:\n        if (this.lookaheadCharCode() === charCodes.dot) break;\n        if (!allowFunctionDeclaration) {\n          this.raise(\n            this.state.strict\n              ? Errors.StrictFunction\n              : this.options.annexB\n                ? Errors.SloppyFunctionAnnexB\n                : Errors.SloppyFunction,\n            this.state.startLoc,\n          );\n        }\n        return this.parseFunctionStatement(\n          node as Undone<N.FunctionDeclaration>,\n          false,\n          !allowDeclaration && allowFunctionDeclaration,\n        );\n      case tt._class:\n        if (!allowDeclaration) this.unexpected();\n        return this.parseClass(\n          this.maybeTakeDecorators(\n            decorators,\n            node as Undone<N.ClassDeclaration>,\n          ),\n          true,\n        );\n\n      case tt._if:\n        return this.parseIfStatement(node as Undone<N.IfStatement>);\n      case tt._return:\n        return this.parseReturnStatement(node as Undone<N.ReturnStatement>);\n      case tt._switch:\n        return this.parseSwitchStatement(node as Undone<N.SwitchStatement>);\n      case tt._throw:\n        return this.parseThrowStatement(node as Undone<N.ThrowStatement>);\n      case tt._try:\n        return this.parseTryStatement(node as Undone<N.TryStatement>);\n\n      case tt._await:\n        // [+Await] await [no LineTerminator here] using [no LineTerminator here] BindingList[+Using]\n        if (this.isAwaitUsing()) {\n          if (!this.allowsUsing()) {\n            this.raise(Errors.UnexpectedUsingDeclaration, node);\n          } else if (!allowDeclaration) {\n            this.raise(Errors.UnexpectedLexicalDeclaration, node);\n          } else if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, node);\n          }\n          this.next(); // eat 'await'\n          return this.parseVarStatement(\n            node as Undone<N.VariableDeclaration>,\n            \"await using\",\n          );\n        }\n        break;\n      case tt._using:\n        // using [no LineTerminator here] BindingList[+Using]\n        if (\n          this.state.containsEsc ||\n          !this.hasInLineFollowingBindingIdentifierOrBrace()\n        ) {\n          break;\n        }\n        if (!this.allowsUsing()) {\n          this.raise(Errors.UnexpectedUsingDeclaration, this.state.startLoc);\n        } else if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          \"using\",\n        );\n      case tt._let: {\n        if (this.state.containsEsc) {\n          break;\n        }\n        // `let [` is an explicit negative lookahead for\n        // ExpressionStatement, so special-case it first.\n        const next = this.nextTokenStart();\n        const nextCh = this.codePointAtPos(next);\n        if (nextCh !== charCodes.leftSquareBracket) {\n          if (!allowDeclaration && this.hasFollowingLineBreak()) break;\n          if (\n            !this.chStartsBindingIdentifier(nextCh, next) &&\n            nextCh !== charCodes.leftCurlyBrace\n          ) {\n            break;\n          }\n        }\n      }\n      // fall through\n      case tt._const: {\n        if (!allowDeclaration) {\n          this.raise(Errors.UnexpectedLexicalDeclaration, this.state.startLoc);\n        }\n      }\n      // fall through\n      case tt._var: {\n        const kind = this.state.value;\n        return this.parseVarStatement(\n          node as Undone<N.VariableDeclaration>,\n          kind,\n        );\n      }\n      case tt._while:\n        return this.parseWhileStatement(node as Undone<N.WhileStatement>);\n      case tt._with:\n        return this.parseWithStatement(node as Undone<N.WithStatement>);\n      case tt.braceL:\n        return this.parseBlock();\n      case tt.semi:\n        return this.parseEmptyStatement(node as Undone<N.EmptyStatement>);\n      case tt._import: {\n        const nextTokenCharCode = this.lookaheadCharCode();\n        if (\n          nextTokenCharCode === charCodes.leftParenthesis || // import()\n          nextTokenCharCode === charCodes.dot // import.meta\n        ) {\n          break;\n        }\n      }\n      // fall through\n      case tt._export: {\n        if (\n          !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n          !topLevel\n        ) {\n          this.raise(Errors.UnexpectedImportExport, this.state.startLoc);\n        }\n\n        this.next(); // eat `import`/`export`\n\n        let result;\n        if (startType === tt._import) {\n          result = this.parseImport(node as Undone<N.ImportDeclaration>);\n        } else {\n          result = this.parseExport(\n            node as Undone<\n              | N.ExportAllDeclaration\n              | N.ExportDefaultDeclaration\n              | N.ExportNamedDeclaration\n            >,\n            decorators,\n          );\n        }\n\n        this.assertModuleNodeAllowed(result);\n\n        return result;\n      }\n\n      default: {\n        if (this.isAsyncFunction()) {\n          if (!allowDeclaration) {\n            this.raise(\n              Errors.AsyncFunctionInSingleStatementContext,\n              this.state.startLoc,\n            );\n          }\n          this.next(); // eat 'async'\n          return this.parseFunctionStatement(\n            node as Undone<N.FunctionDeclaration>,\n            true,\n            !allowDeclaration && allowFunctionDeclaration,\n          );\n        }\n      }\n    }\n\n    // If the statement does not start with a statement keyword or a\n    // brace, it's an ExpressionStatement or LabeledStatement. We\n    // simply start parsing an expression, and afterwards, if the\n    // next token is a colon and the expression was a simple\n    // Identifier node, we switch to interpreting it as a label.\n    const maybeName = this.state.value;\n    const expr = this.parseExpression();\n\n    if (\n      tokenIsIdentifier(startType) &&\n      expr.type === \"Identifier\" &&\n      this.eat(tt.colon)\n    ) {\n      return this.parseLabeledStatement(\n        node as Undone<N.LabeledStatement>,\n        maybeName,\n        expr,\n        flags,\n      );\n    } else {\n      return this.parseExpressionStatement(\n        node as Undone<N.ExpressionStatement>,\n        expr,\n        decorators,\n      );\n    }\n  }\n\n  assertModuleNodeAllowed(node: N.Node): void {\n    if (\n      !(this.optionFlags & OptionFlags.AllowImportExportEverywhere) &&\n      !this.inModule\n    ) {\n      this.raise(Errors.ImportOutsideModule, node);\n    }\n  }\n\n  decoratorsEnabledBeforeExport(): boolean {\n    if (this.hasPlugin(\"decorators-legacy\")) return true;\n    return (\n      this.hasPlugin(\"decorators\") &&\n      this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") !== false\n    );\n  }\n\n  // Attach the decorators to the given class.\n  // NOTE: This method changes the .start location of the class, and thus\n  // can affect comment attachment. Calling it before or after finalizing\n  // the class node (and thus finalizing its comments) changes how comments\n  // before the `class` keyword or before the final .start location of the\n  // class are attached.\n  maybeTakeDecorators<T extends Undone<N.Class>>(\n    maybeDecorators: N.Decorator[] | null,\n    classNode: T,\n    exportNode?: Undone<N.ExportDefaultDeclaration | N.ExportNamedDeclaration>,\n  ): T {\n    if (maybeDecorators) {\n      if (classNode.decorators?.length) {\n        // Note: decorators attachment is only attempred multiple times\n        // when the class is part of an export declaration.\n        if (\n          typeof this.getPluginOption(\n            \"decorators\",\n            \"decoratorsBeforeExport\",\n          ) !== \"boolean\"\n        ) {\n          // If `decoratorsBeforeExport` was set to `true` or `false`, we\n          // already threw an error about decorators not being in a valid\n          // position.\n          this.raise(\n            Errors.DecoratorsBeforeAfterExport,\n            classNode.decorators[0],\n          );\n        }\n        classNode.decorators.unshift(...maybeDecorators);\n      } else {\n        classNode.decorators = maybeDecorators;\n      }\n      this.resetStartLocationFromNode(classNode, maybeDecorators[0]);\n      if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);\n    }\n    return classNode;\n  }\n\n  canHaveLeadingDecorator(): boolean {\n    return this.match(tt._class);\n  }\n\n  parseDecorators(this: Parser, allowExport?: boolean): N.Decorator[] {\n    const decorators = [];\n    do {\n      decorators.push(this.parseDecorator());\n    } while (this.match(tt.at));\n\n    if (this.match(tt._export)) {\n      if (!allowExport) {\n        this.unexpected();\n      }\n\n      if (!this.decoratorsEnabledBeforeExport()) {\n        this.raise(Errors.DecoratorExportClass, this.state.startLoc);\n      }\n    } else if (!this.canHaveLeadingDecorator()) {\n      throw this.raise(Errors.UnexpectedLeadingDecorator, this.state.startLoc);\n    }\n\n    return decorators;\n  }\n\n  parseDecorator(this: Parser): N.Decorator {\n    this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n\n    const node = this.startNode<N.Decorator>();\n    this.next();\n\n    if (this.hasPlugin(\"decorators\")) {\n      const startLoc = this.state.startLoc;\n      let expr: N.Expression;\n\n      if (this.match(tt.parenL)) {\n        const startLoc = this.state.startLoc;\n        this.next(); // eat '('\n        expr = this.parseExpression();\n        this.expect(tt.parenR);\n        expr = this.wrapParenthesis(startLoc, expr);\n\n        const paramsStartLoc = this.state.startLoc;\n        node.expression = this.parseMaybeDecoratorArguments(expr, startLoc);\n        if (\n          this.getPluginOption(\"decorators\", \"allowCallParenthesized\") ===\n            false &&\n          node.expression !== expr\n        ) {\n          this.raise(\n            Errors.DecoratorArgumentsOutsideParentheses,\n            paramsStartLoc,\n          );\n        }\n      } else {\n        expr = this.parseIdentifier(false);\n\n        while (this.eat(tt.dot)) {\n          const node = this.startNodeAt<N.MemberExpression>(startLoc);\n          node.object = expr;\n          if (this.match(tt.privateName)) {\n            this.classScope.usePrivateName(\n              this.state.value,\n              this.state.startLoc,\n            );\n            node.property = this.parsePrivateName();\n          } else {\n            node.property = this.parseIdentifier(true);\n          }\n          node.computed = false;\n          expr = this.finishNode(node, \"MemberExpression\");\n        }\n\n        node.expression = this.parseMaybeDecoratorArguments(expr, startLoc);\n      }\n    } else {\n      node.expression = this.parseExprSubscripts();\n    }\n    return this.finishNode(node, \"Decorator\");\n  }\n\n  parseMaybeDecoratorArguments(\n    this: Parser,\n    expr: N.Expression,\n    startLoc: Position,\n  ): N.Expression {\n    if (this.eat(tt.parenL)) {\n      const node = this.startNodeAt<N.CallExpression>(startLoc);\n      node.callee = expr;\n      node.arguments = this.parseCallExpressionArguments();\n      this.toReferencedList(node.arguments);\n      return this.finishNode(node, \"CallExpression\");\n    }\n\n    return expr;\n  }\n\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: true,\n  ): N.BreakStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.Node>,\n    isBreak: false,\n  ): N.ContinueStatement;\n  parseBreakContinueStatement(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ): N.BreakStatement | N.ContinueStatement {\n    this.next();\n\n    if (this.isLineTerminator()) {\n      node.label = null;\n    } else {\n      node.label = this.parseIdentifier();\n      this.semicolon();\n    }\n\n    this.verifyBreakContinue(node, isBreak);\n\n    return this.finishNode(\n      node,\n      isBreak ? \"BreakStatement\" : \"ContinueStatement\",\n    );\n  }\n\n  verifyBreakContinue(\n    node: Undone<N.BreakStatement | N.ContinueStatement>,\n    isBreak: boolean,\n  ) {\n    let i;\n    for (i = 0; i < this.state.labels.length; ++i) {\n      const lab = this.state.labels[i];\n      if (node.label == null || lab.name === node.label.name) {\n        if (lab.kind != null && (isBreak || lab.kind === LoopLabelKind.Loop)) {\n          break;\n        }\n        if (node.label && isBreak) break;\n      }\n    }\n    if (i === this.state.labels.length) {\n      const type = isBreak ? \"BreakStatement\" : \"ContinueStatement\";\n      this.raise(Errors.IllegalBreakContinue, node, { type });\n    }\n  }\n\n  parseDebuggerStatement(\n    node: Undone<N.DebuggerStatement>,\n  ): N.DebuggerStatement {\n    this.next();\n    this.semicolon();\n    return this.finishNode(node, \"DebuggerStatement\");\n  }\n\n  parseHeaderExpression(this: Parser): N.Expression {\n    this.expect(tt.parenL);\n    const val = this.parseExpression();\n    this.expect(tt.parenR);\n    return val;\n  }\n\n  // https://tc39.es/ecma262/#prod-DoWhileStatement\n  parseDoWhileStatement(\n    this: Parser,\n    node: Undone<N.DoWhileStatement>,\n  ): N.DoWhileStatement {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body's body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body's body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    this.expect(tt._while);\n    node.test = this.parseHeaderExpression();\n    this.eat(tt.semi);\n    return this.finishNode(node, \"DoWhileStatement\");\n  }\n\n  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n  // loop is non-trivial. Basically, we have to parse the init `var`\n  // statement or expression, disallowing the `in` operator (see\n  // the second parameter to `parseExpression`), and then check\n  // whether the next token is `in` or `of`. When there is no init\n  // part (semicolon immediately after the opening parenthesis), it\n  // is a regular `for` loop.\n\n  parseForStatement(\n    this: Parser,\n    node: Undone<N.ForStatement | N.ForInOf>,\n  ): N.ForLike {\n    this.next();\n    this.state.labels.push(loopLabel);\n\n    let awaitAt = null;\n\n    if (this.isContextual(tt._await) && this.recordAwaitIfAllowed()) {\n      awaitAt = this.state.startLoc;\n      this.next();\n    }\n    this.scope.enter(ScopeFlag.OTHER);\n    this.expect(tt.parenL);\n\n    if (this.match(tt.semi)) {\n      if (awaitAt !== null) {\n        this.unexpected(awaitAt);\n      }\n      return this.parseFor(node as Undone<N.ForStatement>, null);\n    }\n\n    const startsWithLet = this.isContextual(tt._let);\n    {\n      const startsWithAwaitUsing = this.isAwaitUsing();\n      const starsWithUsingDeclaration =\n        startsWithAwaitUsing || this.isForUsing();\n      const isLetOrUsing =\n        (startsWithLet && this.hasFollowingBindingAtom()) ||\n        starsWithUsingDeclaration;\n\n      if (this.match(tt._var) || this.match(tt._const) || isLetOrUsing) {\n        const initNode = this.startNode<N.VariableDeclaration>();\n        let kind;\n        if (startsWithAwaitUsing) {\n          kind = \"await using\";\n          if (!this.recordAwaitIfAllowed()) {\n            this.raise(Errors.AwaitUsingNotInAsyncContext, this.state.startLoc);\n          }\n          this.next(); // eat 'await'\n        } else {\n          kind = this.state.value;\n        }\n        this.next();\n        this.parseVar(initNode, true, kind);\n        const init = this.finishNode(initNode, \"VariableDeclaration\");\n\n        const isForIn = this.match(tt._in);\n        if (isForIn && starsWithUsingDeclaration) {\n          this.raise(Errors.ForInUsing, init);\n        }\n        if (\n          (isForIn || this.isContextual(tt._of)) &&\n          init.declarations.length === 1\n        ) {\n          return this.parseForIn(node as Undone<N.ForInOf>, init, awaitAt);\n        }\n        if (awaitAt !== null) {\n          this.unexpected(awaitAt);\n        }\n        return this.parseFor(node as Undone<N.ForStatement>, init);\n      }\n    }\n\n    // Check whether the first token is possibly a contextual keyword, so that\n    // we can forbid `for (async of` if this turns out to be a for-of loop.\n    const startsWithAsync = this.isContextual(tt._async);\n\n    const refExpressionErrors = new ExpressionErrors();\n    const init = this.parseExpression(true, refExpressionErrors);\n    const isForOf = this.isContextual(tt._of);\n    if (isForOf) {\n      // Check for leading tokens that are forbidden in for-of loops:\n      if (startsWithLet) {\n        this.raise(Errors.ForOfLet, init);\n      }\n\n      if (\n        // `for await (async of []);` is allowed.\n        awaitAt === null &&\n        startsWithAsync &&\n        init.type === \"Identifier\"\n      ) {\n        // This catches the case where the `async` in `for (async of` was\n        // parsed as an identifier. If it was parsed as the start of an async\n        // arrow function (e.g. `for (async of => {} of []);`), the LVal check\n        // further down will raise a more appropriate error.\n        this.raise(Errors.ForOfAsync, init);\n      }\n    }\n    if (isForOf || this.match(tt._in)) {\n      this.checkDestructuringPrivate(refExpressionErrors);\n      this.toAssignable(init, /* isLHS */ true);\n      const type = isForOf ? \"ForOfStatement\" : \"ForInStatement\";\n      this.checkLVal(init, { type });\n      return this.parseForIn(\n        node as Undone<N.ForInStatement | N.ForOfStatement>,\n        // @ts-expect-error init has been transformed to an assignable\n        init,\n        awaitAt,\n      );\n    } else {\n      this.checkExpressionErrors(refExpressionErrors, true);\n    }\n    if (awaitAt !== null) {\n      this.unexpected(awaitAt);\n    }\n    return this.parseFor(node as Undone<N.ForStatement>, init);\n  }\n\n  // https://tc39.es/ecma262/#prod-HoistableDeclaration\n  parseFunctionStatement(\n    this: Parser,\n    node: Undone<N.FunctionDeclaration>,\n    isAsync: boolean,\n    isHangingDeclaration: boolean,\n  ): N.FunctionDeclaration {\n    this.next(); // eat 'function'\n    return this.parseFunction(\n      node,\n      ParseFunctionFlag.Declaration |\n        (isHangingDeclaration ? ParseFunctionFlag.HangingDeclaration : 0) |\n        (isAsync ? ParseFunctionFlag.Async : 0),\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-IfStatement\n  parseIfStatement(this: Parser, node: Undone<N.IfStatement>) {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    // Annex B.3.3\n    // https://tc39.es/ecma262/#sec-functiondeclarations-in-ifstatement-statement-clauses\n    node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();\n    node.alternate = this.eat(tt._else)\n      ? this.parseStatementOrSloppyAnnexBFunctionDeclaration()\n      : null;\n    return this.finishNode(node, \"IfStatement\");\n  }\n\n  parseReturnStatement(this: Parser, node: Undone<N.ReturnStatement>) {\n    if (!this.prodParam.hasReturn) {\n      this.raise(Errors.IllegalReturn, this.state.startLoc);\n    }\n\n    this.next();\n\n    // In `return` (and `break`/`continue`), the keywords with\n    // optional arguments, we eagerly look for a semicolon or the\n    // possibility to insert one.\n\n    if (this.isLineTerminator()) {\n      node.argument = null;\n    } else {\n      node.argument = this.parseExpression();\n      this.semicolon();\n    }\n\n    return this.finishNode(node, \"ReturnStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-SwitchStatement\n  parseSwitchStatement(this: Parser, node: Undone<N.SwitchStatement>) {\n    this.next();\n    node.discriminant = this.parseHeaderExpression();\n    const cases: N.SwitchStatement[\"cases\"] = (node.cases = []);\n    this.expect(tt.braceL);\n    this.state.labels.push(switchLabel);\n    this.scope.enter(ScopeFlag.SWITCH);\n\n    // Statements under must be grouped (by label) in SwitchCase\n    // nodes. `cur` is used to keep the node that we are currently\n    // adding statements to.\n\n    let cur;\n    for (let sawDefault; !this.match(tt.braceR); ) {\n      if (this.match(tt._case) || this.match(tt._default)) {\n        const isCase = this.match(tt._case);\n        if (cur) this.finishNode(cur, \"SwitchCase\");\n        // @ts-expect-error Fixme\n        cases.push((cur = this.startNode<N.SwitchCase>()));\n        cur.consequent = [];\n        this.next();\n        if (isCase) {\n          cur.test = this.parseExpression();\n        } else {\n          if (sawDefault) {\n            this.raise(\n              Errors.MultipleDefaultsInSwitch,\n              this.state.lastTokStartLoc,\n            );\n          }\n          sawDefault = true;\n          cur.test = null;\n        }\n        this.expect(tt.colon);\n      } else {\n        if (cur) {\n          cur.consequent.push(this.parseStatementListItem());\n        } else {\n          this.unexpected();\n        }\n      }\n    }\n    this.scope.exit();\n    if (cur) this.finishNode(cur, \"SwitchCase\");\n    this.next(); // Closing brace\n    this.state.labels.pop();\n    return this.finishNode(node, \"SwitchStatement\");\n  }\n\n  parseThrowStatement(this: Parser, node: Undone<N.ThrowStatement>) {\n    this.next();\n    if (this.hasPrecedingLineBreak()) {\n      this.raise(Errors.NewlineAfterThrow, this.state.lastTokEndLoc);\n    }\n    node.argument = this.parseExpression();\n    this.semicolon();\n    return this.finishNode(node, \"ThrowStatement\");\n  }\n\n  parseCatchClauseParam(this: Parser): N.Pattern {\n    const param = this.parseBindingAtom();\n\n    this.scope.enter(\n      this.options.annexB && param.type === \"Identifier\"\n        ? ScopeFlag.SIMPLE_CATCH\n        : ScopeFlag.OTHER,\n    );\n    this.checkLVal(\n      param,\n      { type: \"CatchClause\" },\n      BindingFlag.TYPE_CATCH_PARAM,\n    );\n\n    return param;\n  }\n\n  parseTryStatement(\n    this: Parser,\n    node: Undone<N.TryStatement>,\n  ): N.TryStatement {\n    this.next();\n\n    node.block = this.parseBlock();\n    node.handler = null;\n\n    if (this.match(tt._catch)) {\n      const clause = this.startNode<N.CatchClause>();\n      this.next();\n      if (this.match(tt.parenL)) {\n        this.expect(tt.parenL);\n        clause.param = this.parseCatchClauseParam();\n        this.expect(tt.parenR);\n      } else {\n        clause.param = null;\n        this.scope.enter(ScopeFlag.OTHER);\n      }\n\n      // Parse the catch clause's body.\n      clause.body =\n        // For the smartPipelines plugin: Disable topic references from outer\n        // contexts within the catch clause's body.\n        this.withSmartMixTopicForbiddingContext(() =>\n          // Parse the catch clause's body.\n          this.parseBlock(false, false),\n        );\n\n      this.scope.exit();\n      node.handler = this.finishNode(clause, \"CatchClause\");\n    }\n\n    node.finalizer = this.eat(tt._finally) ? this.parseBlock() : null;\n\n    if (!node.handler && !node.finalizer) {\n      this.raise(Errors.NoCatchOrFinally, node);\n    }\n\n    return this.finishNode(node, \"TryStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-VariableStatement\n  // https://tc39.es/ecma262/#prod-LexicalDeclaration\n  parseVarStatement(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): N.VariableDeclaration {\n    this.next();\n    this.parseVar(node, false, kind, allowMissingInitializer);\n    this.semicolon();\n    return this.finishNode(node, \"VariableDeclaration\");\n  }\n\n  // https://tc39.es/ecma262/#prod-WhileStatement\n  parseWhileStatement(\n    this: Parser,\n    node: Undone<N.WhileStatement>,\n  ): N.WhileStatement {\n    this.next();\n    node.test = this.parseHeaderExpression();\n    this.state.labels.push(loopLabel);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"WhileStatement\");\n  }\n\n  parseWithStatement(\n    this: Parser,\n    node: Undone<N.WithStatement>,\n  ): N.WithStatement {\n    if (this.state.strict) {\n      this.raise(Errors.StrictWith, this.state.startLoc);\n    }\n    this.next();\n    node.object = this.parseHeaderExpression();\n\n    // Parse the statement body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the with statement's body.\n      // They are permitted in function default-parameter expressions, which are\n      // part of the outer context, outside of the with statement's body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the statement body.\n        this.parseStatement(),\n      );\n\n    return this.finishNode(node, \"WithStatement\");\n  }\n\n  parseEmptyStatement(node: Undone<N.EmptyStatement>): N.EmptyStatement {\n    this.next();\n    return this.finishNode(node, \"EmptyStatement\");\n  }\n\n  // https://tc39.es/ecma262/#prod-LabelledStatement\n  parseLabeledStatement(\n    this: Parser,\n    node: Undone<N.LabeledStatement>,\n    maybeName: string,\n    expr: N.Identifier,\n    flags: ParseStatementFlag,\n  ): N.LabeledStatement {\n    for (const label of this.state.labels) {\n      if (label.name === maybeName) {\n        this.raise(Errors.LabelRedeclaration, expr, {\n          labelName: maybeName,\n        });\n      }\n    }\n\n    const kind = tokenIsLoop(this.state.type)\n      ? LoopLabelKind.Loop\n      : this.match(tt._switch)\n        ? LoopLabelKind.Switch\n        : null;\n    for (let i = this.state.labels.length - 1; i >= 0; i--) {\n      const label = this.state.labels[i];\n      if (label.statementStart === node.start) {\n        label.statementStart = this.sourceToOffsetPos(this.state.start);\n        label.kind = kind;\n      } else {\n        break;\n      }\n    }\n\n    this.state.labels.push({\n      name: maybeName,\n      kind: kind,\n      statementStart: this.sourceToOffsetPos(this.state.start),\n    });\n    // https://tc39.es/ecma262/#prod-LabelledItem\n    node.body =\n      flags & ParseStatementFlag.AllowLabeledFunction\n        ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true)\n        : this.parseStatement();\n\n    this.state.labels.pop();\n    node.label = expr;\n    return this.finishNode(node, \"LabeledStatement\");\n  }\n\n  parseExpressionStatement(\n    node: Undone<N.ExpressionStatement>,\n    expr: N.Expression,\n    /* eslint-disable-next-line @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    decorators: N.Decorator[] | null,\n  ) {\n    node.expression = expr;\n    this.semicolon();\n    return this.finishNode(node, \"ExpressionStatement\");\n  }\n\n  // Parse a semicolon-enclosed block of statements, handling `\"use\n  // strict\"` declarations when `allowDirectives` is true (used for\n  // function bodies).\n\n  parseBlock(\n    this: Parser,\n    allowDirectives: boolean = false,\n    createNewLexicalScope: boolean = true,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): N.BlockStatement {\n    const node = this.startNode<N.BlockStatement>();\n    if (allowDirectives) {\n      this.state.strictErrors.clear();\n    }\n    this.expect(tt.braceL);\n    if (createNewLexicalScope) {\n      this.scope.enter(ScopeFlag.OTHER);\n    }\n    this.parseBlockBody(\n      node,\n      allowDirectives,\n      false,\n      tt.braceR,\n      afterBlockParse,\n    );\n    if (createNewLexicalScope) {\n      this.scope.exit();\n    }\n    return this.finishNode(node, \"BlockStatement\");\n  }\n\n  isValidDirective(stmt: N.Statement): stmt is N.ExpressionStatement {\n    return (\n      stmt.type === \"ExpressionStatement\" &&\n      stmt.expression.type === \"StringLiteral\" &&\n      !stmt.expression.extra.parenthesized\n    );\n  }\n\n  parseBlockBody(\n    this: Parser,\n    node: Undone<N.BlockStatementLike>,\n    allowDirectives: boolean | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const body: N.BlockStatementLike[\"body\"] = (node.body = []);\n    const directives: N.BlockStatementLike[\"directives\"] = (node.directives =\n      []);\n    this.parseBlockOrModuleBlockBody(\n      body,\n      allowDirectives ? directives : undefined,\n      topLevel,\n      end,\n      afterBlockParse,\n    );\n  }\n\n  // Undefined directives means that directives are not allowed.\n  // https://tc39.es/ecma262/#prod-Block\n  // https://tc39.es/ecma262/#prod-ModuleBody\n  parseBlockOrModuleBlockBody(\n    this: Parser,\n    body: N.Statement[],\n    directives: N.Directive[] | undefined | null,\n    topLevel: boolean,\n    end: TokenType,\n    afterBlockParse?: (hasStrictModeDirective: boolean) => void,\n  ): void {\n    const oldStrict = this.state.strict;\n    let hasStrictModeDirective = false;\n    let parsedNonDirective = false;\n\n    while (!this.match(end)) {\n      const stmt = topLevel\n        ? this.parseModuleItem()\n        : this.parseStatementListItem();\n\n      if (directives && !parsedNonDirective) {\n        if (this.isValidDirective(stmt)) {\n          const directive = this.stmtToDirective(stmt);\n          directives.push(directive);\n\n          if (\n            !hasStrictModeDirective &&\n            directive.value.value === \"use strict\"\n          ) {\n            hasStrictModeDirective = true;\n            this.setStrict(true);\n          }\n\n          continue;\n        }\n        parsedNonDirective = true;\n        // clear strict errors since the strict mode will not change within the block\n        this.state.strictErrors.clear();\n      }\n      body.push(stmt);\n    }\n\n    afterBlockParse?.call(this, hasStrictModeDirective);\n\n    if (!oldStrict) {\n      this.setStrict(false);\n    }\n\n    this.next();\n  }\n\n  // Parse a regular `for` loop. The disambiguation code in\n  // `parseStatement` will already have parsed the init statement or\n  // expression.\n\n  parseFor(\n    this: Parser,\n    node: Undone<N.ForStatement>,\n    init?: N.VariableDeclaration | N.Expression | null,\n  ): N.ForStatement {\n    node.init = init;\n    this.semicolon(/* allowAsi */ false);\n    node.test = this.match(tt.semi) ? null : this.parseExpression();\n    this.semicolon(/* allowAsi */ false);\n    node.update = this.match(tt.parenR) ? null : this.parseExpression();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin: Disable topic references from outer\n      // contexts within the loop body. They are permitted in test expressions,\n      // outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse the loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, \"ForStatement\");\n  }\n\n  // Parse a `for`/`in` and `for`/`of` loop, which are almost\n  // same from parser's perspective.\n\n  parseForIn(\n    this: Parser,\n    node: Undone<N.ForInOf>,\n    init: N.VariableDeclaration | N.AssignmentPattern,\n    awaitAt?: Position | null,\n  ): N.ForInOf {\n    const isForIn = this.match(tt._in);\n    this.next();\n\n    if (isForIn) {\n      if (awaitAt !== null) this.unexpected(awaitAt);\n    } else {\n      node.await = awaitAt !== null;\n    }\n\n    if (\n      init.type === \"VariableDeclaration\" &&\n      init.declarations[0].init != null &&\n      (!isForIn ||\n        !this.options.annexB ||\n        this.state.strict ||\n        init.kind !== \"var\" ||\n        init.declarations[0].id.type !== \"Identifier\")\n    ) {\n      this.raise(Errors.ForInOfLoopInitializer, init, {\n        type: isForIn ? \"ForInStatement\" : \"ForOfStatement\",\n      });\n    }\n\n    if (init.type === \"AssignmentPattern\") {\n      this.raise(Errors.InvalidLhs, init, {\n        ancestor: { type: \"ForStatement\" },\n      });\n    }\n\n    node.left = init;\n    node.right = isForIn\n      ? this.parseExpression()\n      : this.parseMaybeAssignAllowIn();\n    this.expect(tt.parenR);\n\n    // Parse the loop body.\n    node.body =\n      // For the smartPipelines plugin:\n      // Disable topic references from outer contexts within the loop body.\n      // They are permitted in test expressions, outside of the loop body.\n      this.withSmartMixTopicForbiddingContext(() =>\n        // Parse loop body.\n        this.parseStatement(),\n      );\n\n    this.scope.exit();\n    this.state.labels.pop();\n\n    return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n  }\n\n  // Parse a list of variable declarations.\n\n  parseVar(\n    this: Parser,\n    node: Undone<N.VariableDeclaration>,\n    isFor: boolean,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n    allowMissingInitializer: boolean = false,\n  ): Undone<N.VariableDeclaration> {\n    const declarations: N.VariableDeclarator[] = (node.declarations = []);\n    node.kind = kind;\n    for (;;) {\n      const decl = this.startNode<N.VariableDeclarator>();\n      this.parseVarId(decl, kind);\n      decl.init = !this.eat(tt.eq)\n        ? null\n        : isFor\n          ? this.parseMaybeAssignDisallowIn()\n          : this.parseMaybeAssignAllowIn();\n\n      if (decl.init === null && !allowMissingInitializer) {\n        if (\n          decl.id.type !== \"Identifier\" &&\n          !(isFor && (this.match(tt._in) || this.isContextual(tt._of)))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            {\n              kind: \"destructuring\",\n            },\n          );\n        } else if (\n          (kind === \"const\" || kind === \"using\" || kind === \"await using\") &&\n          !(this.match(tt._in) || this.isContextual(tt._of))\n        ) {\n          this.raise(\n            Errors.DeclarationMissingInitializer,\n            this.state.lastTokEndLoc,\n            { kind },\n          );\n        }\n      }\n      declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n      if (!this.eat(tt.comma)) break;\n    }\n    return node;\n  }\n\n  parseVarId(\n    this: Parser,\n    decl: Undone<N.VariableDeclarator>,\n    kind: \"var\" | \"let\" | \"const\" | \"using\" | \"await using\",\n  ): void {\n    const id = this.parseBindingAtom();\n    if (kind === \"using\" || kind === \"await using\") {\n      if (id.type === \"ArrayPattern\" || id.type === \"ObjectPattern\") {\n        this.raise(Errors.UsingDeclarationHasBindingPattern, id.loc.start);\n      }\n    } else {\n      if (id.type === \"VoidPattern\") {\n        this.raise(Errors.UnexpectedVoidPattern, id.loc.start);\n      }\n    }\n    this.checkLVal(\n      id,\n      { type: \"VariableDeclarator\" },\n      kind === \"var\" ? BindingFlag.TYPE_VAR : BindingFlag.TYPE_LEXICAL,\n    );\n    decl.id = id;\n  }\n\n  // https://tc39.es/ecma262/#prod-AsyncFunctionExpression\n  parseAsyncFunctionExpression(\n    this: Parser,\n    node: Undone<N.FunctionExpression>,\n  ): N.FunctionExpression {\n    return this.parseFunction(node, ParseFunctionFlag.Async);\n  }\n\n  // Parse a function declaration or expression (depending on the\n  // ParseFunctionFlag.Declaration flag).\n\n  parseFunction<T extends N.NormalFunction>(\n    this: Parser,\n    node: Undone<T>,\n    flags: ParseFunctionFlag = ParseFunctionFlag.Expression,\n  ): T {\n    const hangingDeclaration = flags & ParseFunctionFlag.HangingDeclaration;\n    const isDeclaration = !!(flags & ParseFunctionFlag.Declaration);\n    const requireId = isDeclaration && !(flags & ParseFunctionFlag.NullableId);\n    const isAsync = !!(flags & ParseFunctionFlag.Async);\n\n    this.initFunction(node, isAsync);\n\n    if (this.match(tt.star)) {\n      if (hangingDeclaration) {\n        this.raise(\n          Errors.GeneratorInSingleStatementContext,\n          this.state.startLoc,\n        );\n      }\n      this.next(); // eat *\n      node.generator = true;\n    }\n\n    if (isDeclaration) {\n      node.id = this.parseFunctionId(requireId);\n    }\n\n    const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;\n    this.state.maybeInArrowParameters = false;\n    this.scope.enter(ScopeFlag.FUNCTION);\n    this.prodParam.enter(functionFlags(isAsync, node.generator));\n\n    if (!isDeclaration) {\n      node.id = this.parseFunctionId();\n    }\n\n    this.parseFunctionParams(node, /* isConstructor */ false);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the function body. They are permitted in function\n    // default-parameter expressions, outside of the function body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the function body.\n      this.parseFunctionBodyAndFinish(\n        node,\n        isDeclaration ? \"FunctionDeclaration\" : \"FunctionExpression\",\n      );\n    });\n\n    this.prodParam.exit();\n    this.scope.exit();\n\n    if (isDeclaration && !hangingDeclaration) {\n      // We need to register this _after_ parsing the function body\n      // because of TypeScript body-less function declarations,\n      // which shouldn't be added to the scope.\n      this.registerFunctionStatementId(node as T);\n    }\n\n    this.state.maybeInArrowParameters = oldMaybeInArrowParameters;\n    return node as T;\n  }\n\n  parseFunctionId(requireId?: boolean): N.Identifier | undefined | null {\n    return requireId || tokenIsIdentifier(this.state.type)\n      ? this.parseIdentifier()\n      : null;\n  }\n\n  parseFunctionParams(\n    this: Parser,\n    node: Undone<N.Function>,\n    isConstructor?: boolean,\n  ): void {\n    this.expect(tt.parenL);\n    this.expressionScope.enter(newParameterDeclarationScope());\n    node.params = this.parseBindingList(\n      tt.parenR,\n      charCodes.rightParenthesis,\n      ParseBindingListFlags.IS_FUNCTION_PARAMS |\n        (isConstructor ? ParseBindingListFlags.IS_CONSTRUCTOR_PARAMS : 0),\n    );\n\n    this.expressionScope.exit();\n  }\n\n  registerFunctionStatementId(node: N.Function): void {\n    if (!node.id) return;\n\n    // If it is a regular function declaration in sloppy mode, then it is\n    // subject to Annex B semantics (BindingFlag.TYPE_FUNCTION). Otherwise, the binding\n    // mode depends on properties of the current scope (see\n    // treatFunctionsAsVar).\n    this.scope.declareName(\n      node.id.name,\n      !this.options.annexB || this.state.strict || node.generator || node.async\n        ? this.scope.treatFunctionsAsVar\n          ? BindingFlag.TYPE_VAR\n          : BindingFlag.TYPE_LEXICAL\n        : BindingFlag.TYPE_FUNCTION,\n      node.id.loc.start,\n    );\n  }\n\n  // Parse a class declaration or literal (depending on the\n  // `isStatement` parameter).\n\n  parseClass<T extends N.Class>(\n    this: Parser,\n    node: Undone<T>,\n    isStatement: /* T === ClassDeclaration */ boolean,\n    optionalId?: boolean,\n  ): T {\n    this.next(); // 'class'\n\n    // A class definition is always strict mode code.\n    const oldStrict = this.state.strict;\n    this.state.strict = true;\n\n    this.parseClassId(node, isStatement, optionalId);\n    this.parseClassSuper(node);\n    // this.state.strict is restored in parseClassBody\n    node.body = this.parseClassBody(!!node.superClass, oldStrict);\n\n    return this.finishNode(\n      node,\n      isStatement ? \"ClassDeclaration\" : \"ClassExpression\",\n    );\n  }\n\n  isClassProperty(): boolean {\n    return this.match(tt.eq) || this.match(tt.semi) || this.match(tt.braceR);\n  }\n\n  isClassMethod(): boolean {\n    return this.match(tt.parenL);\n  }\n\n  nameIsConstructor(key: N.Expression | N.PrivateName): boolean {\n    return (\n      (key.type === \"Identifier\" && key.name === \"constructor\") ||\n      (key.type === \"StringLiteral\" && key.value === \"constructor\")\n    );\n  }\n\n  isNonstaticConstructor(method: N.ClassMethod | N.ClassProperty): boolean {\n    return (\n      !method.computed && !method.static && this.nameIsConstructor(method.key)\n    );\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassBody\n  parseClassBody(\n    this: Parser,\n    hadSuperClass: boolean,\n    oldStrict: boolean,\n  ): N.ClassBody {\n    this.classScope.enter();\n\n    const state: N.ParseClassMemberState = {\n      hadConstructor: false,\n      hadSuperClass,\n    };\n    let decorators: N.Decorator[] = [];\n    const classBody = this.startNode<N.ClassBody>();\n    classBody.body = [];\n\n    this.expect(tt.braceL);\n\n    // For the smartPipelines plugin: Disable topic references from outer\n    // contexts within the class body.\n    this.withSmartMixTopicForbiddingContext(() => {\n      // Parse the contents within the braces.\n      while (!this.match(tt.braceR)) {\n        if (this.eat(tt.semi)) {\n          if (decorators.length > 0) {\n            throw this.raise(\n              Errors.DecoratorSemicolon,\n              this.state.lastTokEndLoc,\n            );\n          }\n          continue;\n        }\n\n        if (this.match(tt.at)) {\n          decorators.push(this.parseDecorator());\n          continue;\n        }\n\n        const member = this.startNode<N.ClassMember>();\n\n        // steal the decorators if there are any\n        if (decorators.length) {\n          // @ts-expect-error Fixme\n          member.decorators = decorators;\n          this.resetStartLocationFromNode(member, decorators[0]);\n          decorators = [];\n        }\n\n        this.parseClassMember(classBody, member, state);\n\n        if (\n          // @ts-expect-error Fixme\n          member.kind === \"constructor\" &&\n          // @ts-expect-error Fixme\n          member.decorators &&\n          // @ts-expect-error Fixme\n          member.decorators.length > 0\n        ) {\n          this.raise(Errors.DecoratorConstructor, member);\n        }\n      }\n    });\n\n    this.state.strict = oldStrict;\n\n    this.next(); // eat `}`\n\n    if (decorators.length) {\n      throw this.raise(Errors.TrailingDecorator, this.state.startLoc);\n    }\n\n    this.classScope.exit();\n\n    return this.finishNode(classBody, \"ClassBody\");\n  }\n\n  // returns true if the current identifier is a method/field name,\n  // false if it is a modifier\n  parseClassMemberFromModifier(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n  ): boolean {\n    const key = this.parseIdentifier(true); // eats the modifier\n\n    if (this.isClassMethod()) {\n      const method: N.ClassMethod = member as any;\n\n      // a method named like the modifier\n      method.kind = \"method\";\n      method.computed = false;\n      method.key = key;\n      method.static = false;\n      this.pushClassMethod(\n        classBody,\n        method,\n        false,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n      return true;\n    } else if (this.isClassProperty()) {\n      const prop: N.ClassProperty = member as any;\n\n      // a property named like the modifier\n      prop.computed = false;\n      prop.key = key;\n      prop.static = false;\n      classBody.body.push(this.parseClassProperty(prop));\n      return true;\n    }\n    this.resetPreviousNodeTrailingComments(key);\n    return false;\n  }\n\n  parseClassMember(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n  ): void {\n    const isStatic = this.isContextual(tt._static);\n\n    if (isStatic) {\n      if (this.parseClassMemberFromModifier(classBody, member)) {\n        // a class element named 'static'\n        return;\n      }\n      if (this.eat(tt.braceL)) {\n        this.parseClassStaticBlock(classBody, member as any as N.StaticBlock);\n        return;\n      }\n    }\n\n    this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);\n  }\n\n  parseClassMemberWithIsStatic(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<N.ClassMember>,\n    state: N.ParseClassMemberState,\n    isStatic: boolean,\n  ) {\n    const publicMethod = member as N.ClassMethod;\n    const privateMethod = member as N.ClassPrivateMethod;\n    const publicProp = member as N.ClassProperty;\n    const privateProp = member as N.ClassPrivateProperty;\n    const accessorProp = member as N.ClassAccessorProperty;\n\n    const method: typeof publicMethod | typeof privateMethod = publicMethod;\n    const publicMember: typeof publicMethod | typeof publicProp = publicMethod;\n\n    member.static = isStatic;\n    this.parsePropertyNamePrefixOperator(member);\n\n    if (this.eat(tt.star)) {\n      // a generator\n      method.kind = \"method\";\n      const isPrivateName = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(method);\n\n      if (isPrivateName) {\n        // Private generator method\n        this.pushClassPrivateMethod(classBody, privateMethod, true, false);\n        return;\n      }\n\n      if (this.isNonstaticConstructor(publicMethod)) {\n        this.raise(Errors.ConstructorIsGenerator, publicMethod.key);\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        true,\n        false,\n        /* isConstructor */ false,\n        false,\n      );\n\n      return;\n    }\n\n    const isContextual =\n      !this.state.containsEsc && tokenIsIdentifier(this.state.type);\n    const key = this.parseClassElementName(member);\n    const maybeContextualKw = isContextual ? (key as N.Identifier).name : null;\n    const isPrivate = this.isPrivateName(key);\n    const maybeQuestionTokenStartLoc = this.state.startLoc;\n\n    this.parsePostMemberNameModifiers(publicMember);\n\n    if (this.isClassMethod()) {\n      method.kind = \"method\";\n\n      if (isPrivate) {\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n        return;\n      }\n\n      // a normal method\n      const isConstructor = this.isNonstaticConstructor(publicMethod);\n      let allowsDirectSuper = false;\n      if (isConstructor) {\n        publicMethod.kind = \"constructor\";\n\n        // TypeScript allows multiple overloaded constructor declarations.\n        if (state.hadConstructor && !this.hasPlugin(\"typescript\")) {\n          this.raise(Errors.DuplicateConstructor, key);\n        }\n        if (isConstructor && this.hasPlugin(\"typescript\") && member.override) {\n          this.raise(Errors.OverrideOnConstructor, key);\n        }\n        state.hadConstructor = true;\n        allowsDirectSuper = state.hadSuperClass;\n      }\n\n      this.pushClassMethod(\n        classBody,\n        publicMethod,\n        false,\n        false,\n        isConstructor,\n        allowsDirectSuper,\n      );\n    } else if (this.isClassProperty()) {\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else if (maybeContextualKw === \"async\" && !this.isLineTerminator()) {\n      // an async method\n      this.resetPreviousNodeTrailingComments(key);\n      const isGenerator = this.eat(tt.star);\n\n      if (publicMember.optional) {\n        this.unexpected(maybeQuestionTokenStartLoc);\n      }\n\n      method.kind = \"method\";\n      // The so-called parsed name would have been \"async\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(method);\n      this.parsePostMemberNameModifiers(publicMember);\n\n      if (isPrivate) {\n        // private async method\n        this.pushClassPrivateMethod(\n          classBody,\n          privateMethod,\n          isGenerator,\n          true,\n        );\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAsync, publicMethod.key);\n        }\n\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          isGenerator,\n          true,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n    } else if (\n      (maybeContextualKw === \"get\" || maybeContextualKw === \"set\") &&\n      !(this.match(tt.star) && this.isLineTerminator())\n    ) {\n      // `get\\n*` is an uninitialized property named 'get' followed by a generator.\n      // a getter or setter\n      this.resetPreviousNodeTrailingComments(key);\n      method.kind = maybeContextualKw;\n      // The so-called parsed name would have been \"get/set\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicMethod);\n\n      if (isPrivate) {\n        // private getter/setter\n        this.pushClassPrivateMethod(classBody, privateMethod, false, false);\n      } else {\n        if (this.isNonstaticConstructor(publicMethod)) {\n          this.raise(Errors.ConstructorIsAccessor, publicMethod.key);\n        }\n        this.pushClassMethod(\n          classBody,\n          publicMethod,\n          false,\n          false,\n          /* isConstructor */ false,\n          false,\n        );\n      }\n\n      this.checkGetterSetterParams(publicMethod);\n    } else if (maybeContextualKw === \"accessor\" && !this.isLineTerminator()) {\n      this.expectPlugin(\"decoratorAutoAccessors\");\n      this.resetPreviousNodeTrailingComments(key);\n\n      // The so-called parsed name would have been \"accessor\": get the real name.\n      const isPrivate = this.match(tt.privateName);\n      this.parseClassElementName(publicProp);\n      this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);\n    } else if (this.isLineTerminator()) {\n      // an uninitialized class property (due to ASI, since we don't otherwise recognize the next token)\n      if (isPrivate) {\n        this.pushClassPrivateProperty(classBody, privateProp);\n      } else {\n        this.pushClassProperty(classBody, publicProp);\n      }\n    } else {\n      this.unexpected();\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassElementName\n  parseClassElementName(\n    this: Parser,\n    member: Undone<N.ClassMember>,\n  ): N.Expression | N.Identifier | N.PrivateName {\n    const { type, value } = this.state;\n    if (\n      (type === tt.name || type === tt.string) &&\n      member.static &&\n      value === \"prototype\"\n    ) {\n      this.raise(Errors.StaticPrototype, this.state.startLoc);\n    }\n\n    if (type === tt.privateName) {\n      if (value === \"constructor\") {\n        this.raise(Errors.ConstructorClassPrivateField, this.state.startLoc);\n      }\n      const key = this.parsePrivateName();\n      member.key = key;\n      return key;\n    }\n\n    this.parsePropertyName(member);\n    return member.key;\n  }\n\n  parseClassStaticBlock(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    member: Undone<\n      N.StaticBlock & {\n        decorators?: Array<N.Decorator>;\n      }\n    >,\n  ) {\n    // Start a new lexical scope\n    this.scope.enter(\n      ScopeFlag.CLASS | ScopeFlag.STATIC_BLOCK | ScopeFlag.SUPER,\n    );\n    // Start a new scope with regard to loop labels\n    const oldLabels = this.state.labels;\n    this.state.labels = [];\n    // ClassStaticBlockStatementList:\n    //   StatementList[~Yield, ~Await, ~Return] opt\n    this.prodParam.enter(ParamKind.PARAM);\n    const body: N.Statement[] = (member.body = []);\n    this.parseBlockOrModuleBlockBody(body, undefined, false, tt.braceR);\n    this.prodParam.exit();\n    this.scope.exit();\n    this.state.labels = oldLabels;\n    classBody.body.push(this.finishNode<N.StaticBlock>(member, \"StaticBlock\"));\n    if (member.decorators?.length) {\n      this.raise(Errors.DecoratorStaticBlock, member);\n    }\n  }\n\n  pushClassProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassProperty,\n  ) {\n    if (!prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    classBody.body.push(this.parseClassProperty(prop));\n  }\n\n  pushClassPrivateProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: Undone<N.ClassPrivateProperty>,\n  ) {\n    const node = this.parseClassPrivateProperty(prop);\n    classBody.body.push(node);\n\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key),\n      ClassElementType.OTHER,\n      node.key.loc.start,\n    );\n  }\n\n  pushClassAccessorProperty(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    prop: N.ClassAccessorProperty,\n    isPrivate: boolean,\n  ) {\n    if (!isPrivate && !prop.computed && this.nameIsConstructor(prop.key)) {\n      // Non-computed field, which is either an identifier named \"constructor\"\n      // or a string literal named \"constructor\"\n      this.raise(Errors.ConstructorClassField, prop.key);\n    }\n\n    const node = this.parseClassAccessorProperty(prop);\n    classBody.body.push(node);\n\n    if (isPrivate) {\n      this.classScope.declarePrivateName(\n        this.getPrivateNameSV(node.key as N.PrivateName),\n        ClassElementType.OTHER,\n        node.key.loc.start,\n      );\n    }\n  }\n\n  pushClassMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n    isConstructor: boolean,\n    allowsDirectSuper: boolean,\n  ): void {\n    classBody.body.push(\n      this.parseMethod(\n        method,\n        isGenerator,\n        isAsync,\n        isConstructor,\n        allowsDirectSuper,\n        \"ClassMethod\",\n        true,\n      ),\n    );\n  }\n\n  pushClassPrivateMethod(\n    this: Parser,\n    classBody: Undone<N.ClassBody>,\n    method: Undone<N.ClassPrivateMethod>,\n    isGenerator: boolean,\n    isAsync: boolean,\n  ): void {\n    const node = this.parseMethod(\n      method,\n      isGenerator,\n      isAsync,\n      /* isConstructor */ false,\n      false,\n      \"ClassPrivateMethod\",\n      true,\n    );\n    classBody.body.push(node);\n\n    const kind =\n      node.kind === \"get\"\n        ? node.static\n          ? ClassElementType.STATIC_GETTER\n          : ClassElementType.INSTANCE_GETTER\n        : node.kind === \"set\"\n          ? node.static\n            ? ClassElementType.STATIC_SETTER\n            : ClassElementType.INSTANCE_SETTER\n          : ClassElementType.OTHER;\n    this.declareClassPrivateMethodInScope(node, kind);\n  }\n\n  declareClassPrivateMethodInScope(\n    node: Undone<N.ClassPrivateMethod | N.TSDeclareMethod>,\n    kind: number,\n  ) {\n    this.classScope.declarePrivateName(\n      this.getPrivateNameSV(node.key as N.PrivateName),\n      kind,\n      node.key.loc.start,\n    );\n  }\n\n  // Overridden in typescript.js\n  parsePostMemberNameModifiers(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    methodOrProp: Undone<N.ClassMethod | N.ClassProperty>,\n  ): void {}\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassPrivateProperty(\n    this: Parser,\n    node: Undone<N.ClassPrivateProperty>,\n  ): N.ClassPrivateProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassPrivateProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-FieldDefinition\n  parseClassProperty(this: Parser, node: N.ClassProperty): N.ClassProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassProperty\");\n  }\n\n  parseClassAccessorProperty(\n    this: Parser,\n    node: N.ClassAccessorProperty,\n  ): N.ClassAccessorProperty {\n    this.parseInitializer(node);\n    this.semicolon();\n    return this.finishNode(node, \"ClassAccessorProperty\");\n  }\n\n  // https://tc39.es/ecma262/#prod-Initializer\n  parseInitializer(\n    this: Parser,\n    node: Undone<\n      N.ClassProperty | N.ClassPrivateProperty | N.ClassAccessorProperty\n    >,\n  ): void {\n    this.scope.enter(ScopeFlag.CLASS | ScopeFlag.SUPER);\n    this.expressionScope.enter(newExpressionScope());\n    this.prodParam.enter(ParamKind.PARAM);\n    node.value = this.eat(tt.eq) ? this.parseMaybeAssignAllowIn() : null;\n    this.expressionScope.exit();\n    this.prodParam.exit();\n    this.scope.exit();\n  }\n\n  parseClassId(\n    node: Undone<N.Class>,\n    isStatement: boolean,\n    optionalId?: boolean | null,\n    bindingType: BindingFlag = BindingFlag.TYPE_CLASS,\n  ): void {\n    if (tokenIsIdentifier(this.state.type)) {\n      node.id = this.parseIdentifier();\n      if (isStatement) {\n        this.declareNameFromIdentifier(node.id, bindingType);\n      }\n    } else {\n      if (optionalId || !isStatement) {\n        node.id = null;\n      } else {\n        throw this.raise(Errors.MissingClassName, this.state.startLoc);\n      }\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ClassHeritage\n  parseClassSuper(this: Parser, node: Undone<N.Class>): void {\n    node.superClass = this.eat(tt._extends) ? this.parseExprSubscripts() : null;\n  }\n\n  // Parses module export declaration.\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n\n  parseExport(\n    this: Parser,\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    decorators: N.Decorator[] | null,\n  ): N.AnyExport {\n    const maybeDefaultIdentifier = this.parseMaybeImportPhase(\n      node,\n      /* isExport */ true,\n    );\n    const hasDefault = this.maybeParseExportDefaultSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    const parseAfterDefault = !hasDefault || this.eat(tt.comma);\n    const hasStar = parseAfterDefault && this.eatExportStar(node);\n    const hasNamespace =\n      hasStar && this.maybeParseExportNamespaceSpecifier(node);\n    const parseAfterNamespace =\n      parseAfterDefault && (!hasNamespace || this.eat(tt.comma));\n    const isFromRequired = hasDefault || hasStar;\n\n    if (hasStar && !hasNamespace) {\n      if (hasDefault) this.unexpected();\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(node, true);\n\n      this.sawUnambiguousESM = true;\n\n      return this.finishNode(node, \"ExportAllDeclaration\");\n    }\n\n    const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);\n\n    if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {\n      this.unexpected(null, tt.braceL);\n    }\n\n    if (hasNamespace && parseAfterNamespace) {\n      this.unexpected(null, tt._from);\n    }\n\n    let hasDeclaration;\n    if (isFromRequired || hasSpecifiers) {\n      hasDeclaration = false;\n      if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.parseExportFrom(\n        node as Undone<N.ExportNamedDeclaration>,\n        isFromRequired,\n      );\n    } else {\n      hasDeclaration = this.maybeParseExportDeclaration(\n        node as Undone<N.ExportNamedDeclaration>,\n      );\n    }\n\n    if (isFromRequired || hasSpecifiers || hasDeclaration) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n      this.checkExport(node2, true, false, !!node2.source);\n      if (node2.declaration?.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, node2.declaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportNamedDeclaration\");\n    }\n\n    if (this.eat(tt._default)) {\n      const node2 = node as Undone<N.ExportDefaultDeclaration>;\n      // export default ...\n      const decl = this.parseExportDefaultExpression();\n      node2.declaration = decl;\n\n      if (decl.type === \"ClassDeclaration\") {\n        this.maybeTakeDecorators(decorators, decl as N.ClassDeclaration, node2);\n      } else if (decorators) {\n        throw this.raise(Errors.UnsupportedDecoratorExport, node);\n      }\n\n      this.checkExport(node2, true, true);\n      this.sawUnambiguousESM = true;\n      return this.finishNode(node2, \"ExportDefaultDeclaration\");\n    }\n\n    this.unexpected(null, tt.braceL);\n  }\n\n  eatExportStar(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration> {\n    return this.eat(tt.star);\n  }\n\n  maybeParseExportDefaultSpecifier(\n    node: Undone<\n      | N.ExportDefaultDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportNamedDeclaration\n    >,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {\n      // export defaultObj ...\n      this.expectPlugin(\"exportDefaultFrom\", maybeDefaultIdentifier?.loc.start);\n      const id = maybeDefaultIdentifier || this.parseIdentifier(true);\n      const specifier = this.startNodeAtNode<N.ExportDefaultSpecifier>(id);\n      specifier.exported = id;\n      (node as Undone<N.ExportNamedDeclaration>).specifiers = [\n        this.finishNode(specifier, \"ExportDefaultSpecifier\"),\n      ];\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamespaceSpecifier(\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.isContextual(tt._as)) {\n      (node as Undone<N.ExportNamedDeclaration>).specifiers ??= [];\n\n      const specifier = this.startNodeAt<N.ExportNamespaceSpecifier>(\n        this.state.lastTokStartLoc,\n      );\n\n      this.next();\n\n      specifier.exported = this.parseModuleExportName();\n      (node as Undone<N.ExportNamedDeclaration>).specifiers.push(\n        this.finishNode(specifier, \"ExportNamespaceSpecifier\"),\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportNamedSpecifiers(\n    node: Undone<N.Node>,\n  ): node is Undone<N.ExportNamedDeclaration> {\n    if (this.match(tt.braceL)) {\n      const node2 = node as Undone<N.ExportNamedDeclaration>;\n\n      if (!node2.specifiers) node2.specifiers = [];\n      const isTypeExport = node2.exportKind === \"type\";\n      node2.specifiers.push(...this.parseExportSpecifiers(isTypeExport));\n      node2.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node2.assertions = [];\n      } else {\n        node2.attributes = [];\n      }\n      node2.declaration = null;\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseExportDeclaration(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration>,\n  ): boolean {\n    if (this.shouldParseExportDeclaration()) {\n      node.specifiers = [];\n      node.source = null;\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"importAssertions\")) {\n        node.assertions = [];\n      } else {\n        node.attributes = [];\n      }\n      node.declaration = this.parseExportDeclaration(node);\n      return true;\n    }\n    return false;\n  }\n\n  isAsyncFunction(): boolean {\n    if (!this.isContextual(tt._async)) return false;\n    const next = this.nextTokenInLineStart();\n    return this.isUnparsedContextual(next, \"function\");\n  }\n\n  parseExportDefaultExpression(\n    this: Parser,\n  ): N.ExportDefaultDeclaration[\"declaration\"] {\n    const expr = this.startNode();\n\n    if (this.match(tt._function)) {\n      this.next();\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration | ParseFunctionFlag.NullableId,\n      );\n    } else if (this.isAsyncFunction()) {\n      this.next(); // eat 'async'\n      this.next(); // eat 'function'\n      return this.parseFunction(\n        expr as Undone<N.FunctionDeclaration>,\n        ParseFunctionFlag.Declaration |\n          ParseFunctionFlag.NullableId |\n          ParseFunctionFlag.Async,\n      );\n    }\n\n    if (this.match(tt._class)) {\n      return this.parseClass(expr as Undone<N.ClassExpression>, true, true);\n    }\n\n    if (this.match(tt.at)) {\n      if (\n        this.hasPlugin(\"decorators\") &&\n        this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n      ) {\n        this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n      }\n      return this.parseClass(\n        this.maybeTakeDecorators(\n          this.parseDecorators(false),\n          this.startNode<N.ClassDeclaration>(),\n        ),\n        true,\n        true,\n      );\n    }\n\n    if (\n      this.match(tt._const) ||\n      this.match(tt._var) ||\n      this.isLet() ||\n      this.isUsing() ||\n      this.isAwaitUsing()\n    ) {\n      throw this.raise(Errors.UnsupportedDefaultExport, this.state.startLoc);\n    }\n\n    const res = this.parseMaybeAssignAllowIn();\n    this.semicolon();\n    return res;\n  }\n\n  // https://tc39.es/ecma262/#prod-ExportDeclaration\n  parseExportDeclaration(\n    this: Parser,\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    node: Undone<N.ExportNamedDeclaration>,\n  ): N.Declaration | undefined | null {\n    if (this.match(tt._class)) {\n      const node = this.parseClass(\n        this.startNode<N.ClassDeclaration>(),\n        true,\n        false,\n      );\n      return node;\n    }\n    return this.parseStatementListItem() as N.Declaration;\n  }\n\n  isExportDefaultSpecifier(): boolean {\n    const { type } = this.state;\n    if (tokenIsIdentifier(type)) {\n      if ((type === tt._async && !this.state.containsEsc) || type === tt._let) {\n        return false;\n      }\n      if (\n        (type === tt._type || type === tt._interface) &&\n        !this.state.containsEsc\n      ) {\n        // If we see any variable name other than `from` after `type` keyword,\n        // we consider it as flow/typescript type exports\n        // note that this approach may fail on some pedantic cases\n        // export type from = number\n        const next = this.nextTokenStart();\n        const nextChar = this.input.charCodeAt(next);\n        if (\n          nextChar === charCodes.leftCurlyBrace ||\n          (this.chStartsBindingIdentifier(nextChar, next) &&\n            !this.input.startsWith(\"from\", next))\n        ) {\n          this.expectOnePlugin([\"flow\", \"typescript\"]);\n          return false;\n        }\n      }\n    } else if (!this.match(tt._default)) {\n      return false;\n    }\n\n    const next = this.nextTokenStart();\n    const hasFrom = this.isUnparsedContextual(next, \"from\");\n    if (\n      this.input.charCodeAt(next) === charCodes.comma ||\n      (tokenIsIdentifier(this.state.type) && hasFrom)\n    ) {\n      return true;\n    }\n    // lookahead again when `export default from` is seen\n    if (this.match(tt._default) && hasFrom) {\n      const nextAfterFrom = this.input.charCodeAt(\n        this.nextTokenStartSince(next + 4),\n      );\n      return (\n        nextAfterFrom === charCodes.quotationMark ||\n        nextAfterFrom === charCodes.apostrophe\n      );\n    }\n    return false;\n  }\n\n  parseExportFrom(\n    this: Parser,\n    node: Undone<N.ExportNamedDeclaration | N.ExportAllDeclaration>,\n    expect?: boolean,\n  ): void {\n    if (this.eatContextual(tt._from)) {\n      node.source = this.parseImportSource();\n      this.checkExport(node);\n      this.maybeParseImportAttributes(node);\n      this.checkJSONModuleImport(node);\n    } else if (expect) {\n      this.unexpected();\n    }\n\n    this.semicolon();\n  }\n\n  shouldParseExportDeclaration(): boolean {\n    const { type } = this.state;\n    if (type === tt.at) {\n      this.expectOnePlugin([\"decorators\", \"decorators-legacy\"]);\n      if (this.hasPlugin(\"decorators\")) {\n        if (\n          this.getPluginOption(\"decorators\", \"decoratorsBeforeExport\") === true\n        ) {\n          this.raise(Errors.DecoratorBeforeExport, this.state.startLoc);\n        }\n\n        return true;\n      }\n    }\n\n    if (this.isUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    if (this.isAwaitUsing()) {\n      this.raise(Errors.UsingDeclarationExport, this.state.startLoc);\n      return true;\n    }\n\n    return (\n      type === tt._var ||\n      type === tt._const ||\n      type === tt._function ||\n      type === tt._class ||\n      this.isLet() ||\n      this.isAsyncFunction()\n    );\n  }\n\n  checkExport(\n    node: Undone<\n      | N.ExportNamedDeclaration\n      | N.ExportAllDeclaration\n      | N.ExportDefaultDeclaration\n    >,\n    checkNames?: boolean,\n    isDefault?: boolean,\n    isFrom?: boolean,\n  ): void {\n    if (checkNames) {\n      // Check for duplicate exports\n      if (isDefault) {\n        // Default exports\n        this.checkDuplicateExports(node, \"default\");\n        if (this.hasPlugin(\"exportDefaultFrom\")) {\n          const declaration = (node as any as N.ExportDefaultDeclaration)\n            .declaration;\n          if (\n            declaration.type === \"Identifier\" &&\n            declaration.name === \"from\" &&\n            declaration.end - declaration.start === 4 && // does not contain escape\n            !declaration.extra?.parenthesized\n          ) {\n            this.raise(Errors.ExportDefaultFromAsIdentifier, declaration);\n          }\n        }\n        // @ts-expect-error node.specifiers may not exist\n      } else if (node.specifiers?.length) {\n        // Named exports\n        // @ts-expect-error node.specifiers may not exist\n        for (const specifier of node.specifiers) {\n          const { exported } = specifier;\n          const exportName =\n            exported.type === \"Identifier\" ? exported.name : exported.value;\n          this.checkDuplicateExports(specifier, exportName);\n          if (!isFrom && specifier.local) {\n            const { local } = specifier;\n            if (local.type !== \"Identifier\") {\n              this.raise(Errors.ExportBindingIsString, specifier, {\n                localName: local.value,\n                exportName,\n              });\n            } else {\n              // check for keywords used as local names\n              this.checkReservedWord(local.name, local.loc.start, true, false);\n              // check if export is defined\n              this.scope.checkLocalExport(local);\n            }\n          }\n        }\n      } else if ((node as Undone<N.ExportNamedDeclaration>).declaration) {\n        const decl = (node as Undone<N.ExportNamedDeclaration>).declaration;\n        // Exported declarations\n        if (\n          decl.type === \"FunctionDeclaration\" ||\n          decl.type === \"ClassDeclaration\"\n        ) {\n          const { id } = decl;\n          if (!id) throw new Error(\"Assertion failure\");\n\n          this.checkDuplicateExports(node, id.name);\n        } else if (decl.type === \"VariableDeclaration\") {\n          for (const declaration of decl.declarations) {\n            this.checkDeclaration(declaration.id);\n          }\n        }\n      }\n    }\n  }\n\n  checkDeclaration(node: N.Pattern | N.ObjectProperty): void {\n    if (node.type === \"Identifier\") {\n      this.checkDuplicateExports(node, node.name);\n    } else if (node.type === \"ObjectPattern\") {\n      for (const prop of node.properties) {\n        this.checkDeclaration(prop);\n      }\n    } else if (node.type === \"ArrayPattern\") {\n      for (const elem of node.elements) {\n        if (elem) {\n          this.checkDeclaration(elem);\n        }\n      }\n    } else if (node.type === \"ObjectProperty\") {\n      // @ts-expect-error migrate to Babel types\n      this.checkDeclaration(node.value);\n    } else if (node.type === \"RestElement\") {\n      this.checkDeclaration(node.argument);\n    } else if (node.type === \"AssignmentPattern\") {\n      this.checkDeclaration(node.left);\n    }\n  }\n\n  checkDuplicateExports(\n    node: Undone<\n      | N.Identifier\n      | N.StringLiteral\n      | N.ExportNamedDeclaration\n      | N.ExportSpecifier\n      | N.ExportDefaultSpecifier\n    >,\n    exportName: string,\n  ): void {\n    if (this.exportedIdentifiers.has(exportName)) {\n      if (exportName === \"default\") {\n        this.raise(Errors.DuplicateDefaultExport, node);\n      } else {\n        this.raise(Errors.DuplicateExport, node, { exportName });\n      }\n    }\n    this.exportedIdentifiers.add(exportName);\n  }\n\n  // Parses a comma-separated list of module exports.\n\n  parseExportSpecifiers(isInTypeExport: boolean): Array<N.ExportSpecifier> {\n    const nodes = [];\n    let first = true;\n\n    // export { x, y as z } [from '...']\n    this.expect(tt.braceL);\n\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      const isString = this.match(tt.string);\n      const node = this.startNode<N.ExportSpecifier>();\n      node.local = this.parseModuleExportName() as N.Identifier;\n      nodes.push(\n        this.parseExportSpecifier(\n          node,\n          isString,\n          isInTypeExport,\n          isMaybeTypeOnly,\n        ),\n      );\n    }\n\n    return nodes;\n  }\n\n  parseExportSpecifier(\n    node: any,\n    isString: boolean,\n    /* eslint-disable @typescript-eslint/no-unused-vars -- used in TypeScript parser */\n    isInTypeExport: boolean,\n    isMaybeTypeOnly: boolean,\n    /* eslint-enable @typescript-eslint/no-unused-vars */\n  ): N.ExportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      node.exported = this.parseModuleExportName();\n    } else if (isString) {\n      node.exported = this.cloneStringLiteral(node.local);\n    } else if (!node.exported) {\n      node.exported = this.cloneIdentifier(node.local);\n    }\n    return this.finishNode<N.ExportSpecifier>(node, \"ExportSpecifier\");\n  }\n\n  // https://tc39.es/ecma262/#prod-ModuleExportName\n  parseModuleExportName(): N.StringLiteral | N.Identifier {\n    if (this.match(tt.string)) {\n      const result = this.parseStringLiteral(this.state.value);\n      const surrogate = loneSurrogate.exec(result.value);\n      if (surrogate) {\n        this.raise(Errors.ModuleExportNameHasLoneSurrogate, result, {\n          surrogateCharCode: surrogate[0].charCodeAt(0),\n        });\n      }\n      return result;\n    }\n    return this.parseIdentifier(true);\n  }\n\n  isJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ): boolean {\n    if (node.assertions != null) {\n      return node.assertions.some(({ key, value }) => {\n        return (\n          value.value === \"json\" &&\n          (key.type === \"Identifier\"\n            ? key.name === \"type\"\n            : key.value === \"type\")\n        );\n      });\n    }\n    return false;\n  }\n\n  checkImportReflection(node: Undone<N.ImportDeclaration>) {\n    const { specifiers } = node;\n    const singleBindingType =\n      specifiers.length === 1 ? specifiers[0].type : null;\n\n    if (node.phase === \"source\") {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(\n          Errors.SourcePhaseImportRequiresDefault,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.phase === \"defer\") {\n      if (singleBindingType !== \"ImportNamespaceSpecifier\") {\n        this.raise(\n          Errors.DeferImportRequiresNamespace,\n          specifiers[0].loc.start,\n        );\n      }\n    } else if (node.module) {\n      if (singleBindingType !== \"ImportDefaultSpecifier\") {\n        this.raise(Errors.ImportReflectionNotBinding, specifiers[0].loc.start);\n      }\n      if (node.assertions?.length > 0) {\n        this.raise(\n          Errors.ImportReflectionHasAssertion,\n          specifiers[0].loc.start,\n        );\n      }\n    }\n  }\n\n  checkJSONModuleImport(\n    node: Undone<\n      N.ExportAllDeclaration | N.ExportNamedDeclaration | N.ImportDeclaration\n    >,\n  ) {\n    // @ts-expect-error Fixme: node.type must be undefined because they are undone\n    if (this.isJSONModuleImport(node) && node.type !== \"ExportAllDeclaration\") {\n      // @ts-expect-error specifiers may not index node\n      const { specifiers } = node;\n      if (specifiers != null) {\n        // @ts-expect-error refine specifier types\n        const nonDefaultNamedSpecifier = specifiers.find(specifier => {\n          let imported;\n          if (specifier.type === \"ExportSpecifier\") {\n            imported = specifier.local;\n          } else if (specifier.type === \"ImportSpecifier\") {\n            imported = specifier.imported;\n          }\n          if (imported !== undefined) {\n            return imported.type === \"Identifier\"\n              ? imported.name !== \"default\"\n              : imported.value !== \"default\";\n          }\n        });\n        if (nonDefaultNamedSpecifier !== undefined) {\n          this.raise(\n            Errors.ImportJSONBindingNotDefault,\n            nonDefaultNamedSpecifier.loc.start,\n          );\n        }\n      }\n    }\n  }\n\n  isPotentialImportPhase(isExport: boolean): boolean {\n    if (isExport) return false;\n    return (\n      this.isContextual(tt._source) ||\n      this.isContextual(tt._defer) ||\n      (!process.env.BABEL_8_BREAKING && this.isContextual(tt._module))\n    );\n  }\n\n  applyImportPhase(\n    node: Undone<N.ImportDeclaration | N.ExportNamedDeclaration>,\n    isExport: boolean,\n    phase: string | null,\n    loc?: Position,\n  ): void {\n    if (isExport) {\n      if (!process.env.IS_PUBLISH) {\n        if (\n          (!process.env.BABEL_8_BREAKING && phase === \"module\") ||\n          phase === \"source\"\n        ) {\n          throw new Error(\n            `Assertion failure: export declarations do not support the '${phase}' phase.`,\n          );\n        }\n      }\n      return;\n    }\n\n    if (!process.env.BABEL_8_BREAKING && phase === \"module\") {\n      this.expectPlugin(\"importReflection\", loc);\n      (node as N.ImportDeclaration).module = true;\n    } else if (this.hasPlugin(\"importReflection\")) {\n      (node as N.ImportDeclaration).module = false;\n    }\n\n    if (phase === \"source\") {\n      this.expectPlugin(\"sourcePhaseImports\", loc);\n      (node as N.ImportDeclaration).phase = \"source\";\n    } else if (phase === \"defer\") {\n      this.expectPlugin(\"deferredImportEvaluation\", loc);\n      (node as N.ImportDeclaration).phase = \"defer\";\n    } else if (this.hasPlugin(\"sourcePhaseImports\")) {\n      (node as N.ImportDeclaration).phase = null;\n    }\n  }\n\n  /*\n   * Parse `source` in `import source x from \"x\"`, disambiguating\n   * `import source from \"x\"` and `import source from from \"x\"`.\n   *\n   * This function might return an identifier representing the `source`\n   * if it eats `source` and then discovers that it was the default import\n   * binding and not the import reflection.\n   *\n   * This function is also used to parse `import type` and `import typeof`\n   * in the TS and Flow plugins, and for parsing `import defer`.\n   */\n  parseMaybeImportPhase(\n    node: Undone<N.ImportDeclaration | N.TsImportEqualsDeclaration>,\n    isExport: boolean,\n  ): N.Identifier | null {\n    if (!this.isPotentialImportPhase(isExport)) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      return null;\n    }\n\n    const phaseIdentifier = this.startNode<N.Identifier>();\n    const phaseIdentifierName = this.parseIdentifierName(true);\n\n    const { type } = this.state;\n    const isImportPhase = tokenIsKeywordOrIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n\n    if (isImportPhase) {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        phaseIdentifierName,\n        phaseIdentifier.loc.start,\n      );\n      return null;\n    } else {\n      this.applyImportPhase(\n        node as Undone<N.ImportDeclaration>,\n        isExport,\n        null,\n      );\n      // `<phase>` is a default binding, return it to the main import declaration parser\n      return this.createIdentifier(phaseIdentifier, phaseIdentifierName);\n    }\n  }\n\n  isPrecedingIdImportPhase(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    phase: string,\n  ) {\n    const { type } = this.state;\n    return tokenIsIdentifier(type)\n      ? // OK: import <phase> x from \"foo\";\n        // OK: import <phase> from from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // NO: import <phase> from 'foo';\n        // With the module declarations proposals, we will need further disambiguation\n        // for `import module from from;`.\n        type !== tt._from || this.lookaheadCharCode() === charCodes.lowercaseF\n      : // OK: import <phase> { x } from \"foo\";\n        // OK: import <phase> x from \"foo\";\n        // OK: import <phase> * as T from \"foo\";\n        // NO: import <phase> from \"foo\";\n        // OK: import <phase> \"foo\";\n        // The last one is invalid, we will continue parsing and throw\n        // an error later\n        type !== tt.comma;\n  }\n\n  // Parses import declaration.\n  // https://tc39.es/ecma262/#prod-ImportDeclaration\n\n  parseImport(this: Parser, node: Undone<N.ImportDeclaration>): N.AnyImport {\n    if (this.match(tt.string)) {\n      // import '...'\n      return this.parseImportSourceAndAttributes(node);\n    }\n\n    return this.parseImportSpecifiersAndAfter(\n      node,\n      this.parseMaybeImportPhase(node, /* isExport */ false),\n    );\n  }\n\n  parseImportSpecifiersAndAfter(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): N.AnyImport {\n    node.specifiers = [];\n\n    // check if we have a default import like\n    // import React from \"react\";\n    const hasDefault = this.maybeParseDefaultImportSpecifier(\n      node,\n      maybeDefaultIdentifier,\n    );\n    /* we are checking if we do not have a default import, then it is obvious that we need named imports\n     * import { get } from \"axios\";\n     * but if we do have a default import\n     * we need to check if we have a comma after that and\n     * that is where this `|| this.eat` condition comes into play\n     */\n    const parseNext = !hasDefault || this.eat(tt.comma);\n    // if we do have to parse the next set of specifiers, we first check for star imports\n    // import React, * from \"react\";\n    const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);\n    // now we check if we need to parse the next imports\n    // but only if they are not importing * (everything)\n    if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);\n    this.expectContextual(tt._from);\n\n    return this.parseImportSourceAndAttributes(node);\n  }\n\n  parseImportSourceAndAttributes(\n    this: Parser,\n    node: Undone<N.ImportDeclaration>,\n  ): N.AnyImport {\n    node.specifiers ??= [];\n    node.source = this.parseImportSource();\n    this.maybeParseImportAttributes(node);\n    this.checkImportReflection(node);\n    this.checkJSONModuleImport(node);\n\n    this.semicolon();\n    this.sawUnambiguousESM = true;\n    return this.finishNode(node, \"ImportDeclaration\");\n  }\n\n  parseImportSource(this: Parser): N.StringLiteral {\n    if (!this.match(tt.string)) this.unexpected();\n    return this.parseExprAtom() as N.StringLiteral;\n  }\n\n  parseImportSpecifierLocal<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    node: Undone<N.ImportDeclaration>,\n    specifier: Undone<T>,\n    type: T[\"type\"],\n  ): void {\n    specifier.local = this.parseIdentifier();\n    node.specifiers.push(this.finishImportSpecifier(specifier, type));\n  }\n\n  finishImportSpecifier<\n    T extends\n      | N.ImportSpecifier\n      | N.ImportDefaultSpecifier\n      | N.ImportNamespaceSpecifier,\n  >(\n    specifier: Undone<T>,\n    type: T[\"type\"],\n    bindingType: BindingFlag = BindingFlag.TYPE_LEXICAL,\n  ) {\n    this.checkLVal(specifier.local, { type }, bindingType);\n    return this.finishNode(specifier, type);\n  }\n\n  /**\n   * parse assert entries\n   *\n   * @see {@link https://tc39.es/proposal-import-attributes/#prod-WithEntries WithEntries}\n   */\n  parseImportAttributes(): N.ImportAttribute[] {\n    this.expect(tt.braceL);\n\n    const attrs = [];\n    const attrNames = new Set();\n\n    do {\n      if (this.match(tt.braceR)) {\n        break;\n      }\n\n      const node = this.startNode<N.ImportAttribute>();\n\n      // parse AssertionKey : IdentifierName, StringLiteral\n      const keyName = this.state.value;\n      // check if we already have an entry for an attribute\n      // if a duplicate entry is found, throw an error\n      // for now this logic will come into play only when someone declares `type` twice\n      if (attrNames.has(keyName)) {\n        this.raise(\n          Errors.ModuleAttributesWithDuplicateKeys,\n          this.state.startLoc,\n          {\n            key: keyName,\n          },\n        );\n      }\n      attrNames.add(keyName);\n      if (this.match(tt.string)) {\n        node.key = this.parseStringLiteral(keyName);\n      } else {\n        node.key = this.parseIdentifier(true);\n      }\n      this.expect(tt.colon);\n\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    this.expect(tt.braceR);\n\n    return attrs;\n  }\n\n  /**\n   * parse module attributes\n   * @deprecated It will be removed in Babel 8\n   */\n  parseModuleAttributes() {\n    const attrs: N.ImportAttribute[] = [];\n    const attributes = new Set();\n    do {\n      const node = this.startNode<N.ImportAttribute>();\n      node.key = this.parseIdentifier(true);\n\n      if (node.key.name !== \"type\") {\n        this.raise(Errors.ModuleAttributeDifferentFromType, node.key);\n      }\n\n      if (attributes.has(node.key.name)) {\n        this.raise(Errors.ModuleAttributesWithDuplicateKeys, node.key, {\n          key: node.key.name,\n        });\n      }\n      attributes.add(node.key.name);\n      this.expect(tt.colon);\n      if (!this.match(tt.string)) {\n        throw this.raise(\n          Errors.ModuleAttributeInvalidValue,\n          this.state.startLoc,\n        );\n      }\n      node.value = this.parseStringLiteral(this.state.value);\n      attrs.push(this.finishNode(node, \"ImportAttribute\"));\n    } while (this.eat(tt.comma));\n\n    return attrs;\n  }\n\n  maybeParseImportAttributes(\n    node: Undone<\n      N.ImportDeclaration | N.ExportNamedDeclaration | N.ExportAllDeclaration\n    >,\n  ) {\n    let attributes: N.ImportAttribute[];\n    if (!process.env.BABEL_8_BREAKING) {\n      // eslint-disable-next-line no-var\n      var useWith = false;\n    }\n\n    // https://tc39.es/proposal-import-attributes/#prod-WithClause\n    if (this.match(tt._with)) {\n      if (\n        this.hasPrecedingLineBreak() &&\n        this.lookaheadCharCode() === charCodes.leftParenthesis\n      ) {\n        // This will be parsed as a with statement, and we will throw a\n        // better error about it not being supported in strict mode.\n        return;\n      }\n\n      this.next(); // eat `with`\n\n      if (!process.env.BABEL_8_BREAKING && this.hasPlugin(\"moduleAttributes\")) {\n        attributes = this.parseModuleAttributes();\n        this.addExtra(node, \"deprecatedWithLegacySyntax\", true);\n      } else {\n        attributes = this.parseImportAttributes();\n      }\n      if (!process.env.BABEL_8_BREAKING) {\n        useWith = true;\n      }\n    } else if (this.isContextual(tt._assert) && !this.hasPrecedingLineBreak()) {\n      if (\n        !this.hasPlugin(\"deprecatedImportAssert\") &&\n        (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\"))\n      ) {\n        this.raise(Errors.ImportAttributesUseAssert, this.state.startLoc);\n      }\n      if (process.env.BABEL_8_BREAKING || !this.hasPlugin(\"importAssertions\")) {\n        this.addExtra(node, \"deprecatedAssertSyntax\", true);\n      }\n      this.next(); // eat `assert`\n      attributes = this.parseImportAttributes();\n    } else {\n      attributes = [];\n    }\n\n    if (\n      !process.env.BABEL_8_BREAKING &&\n      !useWith &&\n      this.hasPlugin(\"importAssertions\")\n    ) {\n      node.assertions = attributes;\n    } else {\n      node.attributes = attributes;\n    }\n  }\n\n  maybeParseDefaultImportSpecifier(\n    node: Undone<N.ImportDeclaration>,\n    maybeDefaultIdentifier: N.Identifier | null,\n  ): boolean {\n    // import defaultObj, { x, y as z } from '...'\n    if (maybeDefaultIdentifier) {\n      const specifier = this.startNodeAtNode<N.ImportDefaultSpecifier>(\n        maybeDefaultIdentifier,\n      );\n      specifier.local = maybeDefaultIdentifier;\n      node.specifiers.push(\n        this.finishImportSpecifier(specifier, \"ImportDefaultSpecifier\"),\n      );\n      return true;\n    } else if (\n      // We allow keywords, and parseImportSpecifierLocal will report a recoverable error\n      tokenIsKeywordOrIdentifier(this.state.type)\n    ) {\n      this.parseImportSpecifierLocal(\n        node,\n        this.startNode<N.ImportDefaultSpecifier>(),\n        \"ImportDefaultSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  maybeParseStarImportSpecifier(node: Undone<N.ImportDeclaration>): boolean {\n    if (this.match(tt.star)) {\n      const specifier = this.startNode<N.ImportNamespaceSpecifier>();\n      this.next();\n      this.expectContextual(tt._as);\n\n      this.parseImportSpecifierLocal(\n        node,\n        specifier,\n        \"ImportNamespaceSpecifier\",\n      );\n      return true;\n    }\n    return false;\n  }\n\n  parseNamedImportSpecifiers(node: Undone<N.ImportDeclaration>) {\n    let first = true;\n    this.expect(tt.braceL);\n    while (!this.eat(tt.braceR)) {\n      if (first) {\n        first = false;\n      } else {\n        // Detect an attempt to deep destructure\n        if (this.eat(tt.colon)) {\n          throw this.raise(Errors.DestructureNamedImport, this.state.startLoc);\n        }\n\n        this.expect(tt.comma);\n        if (this.eat(tt.braceR)) break;\n      }\n\n      const specifier = this.startNode<N.ImportSpecifier>();\n      const importedIsString = this.match(tt.string);\n      const isMaybeTypeOnly = this.isContextual(tt._type);\n      specifier.imported = this.parseModuleExportName();\n      const importSpecifier = this.parseImportSpecifier(\n        specifier,\n        importedIsString,\n        node.importKind === \"type\" || node.importKind === \"typeof\",\n        isMaybeTypeOnly,\n        undefined,\n      );\n      node.specifiers.push(importSpecifier);\n    }\n  }\n\n  // https://tc39.es/ecma262/#prod-ImportSpecifier\n  parseImportSpecifier(\n    specifier: Undone<N.ImportSpecifier>,\n    importedIsString: boolean,\n    /* used in TypeScript and Flow parser */\n    isInTypeOnlyImport: boolean,\n    isMaybeTypeOnly: boolean,\n    bindingType: BindingFlag | undefined,\n  ): N.ImportSpecifier {\n    if (this.eatContextual(tt._as)) {\n      specifier.local = this.parseIdentifier();\n    } else {\n      const { imported } = specifier;\n      if (importedIsString) {\n        throw this.raise(Errors.ImportBindingIsString, specifier, {\n          importName: (imported as N.StringLiteral).value,\n        });\n      }\n      this.checkReservedWord(\n        (imported as N.Identifier).name,\n        specifier.loc.start,\n        true,\n        true,\n      );\n      if (!specifier.local) {\n        specifier.local = this.cloneIdentifier(imported as N.Identifier);\n      }\n    }\n    return this.finishImportSpecifier(\n      specifier,\n      \"ImportSpecifier\",\n      bindingType,\n    );\n  }\n\n  // This is used in flow and typescript plugin\n  // Determine whether a parameter is a this param\n  isThisParam(\n    param: N.Pattern | N.Identifier | N.TSParameterProperty,\n  ): boolean {\n    return param.type === \"Identifier\" && param.name === \"this\";\n  }\n}\n","import type { Options } from \"../options.ts\";\nimport type * as N from \"../types.ts\";\nimport { getOptions, OptionFlags } from \"../options.ts\";\nimport StatementParser from \"./statement.ts\";\nimport ScopeHandler from \"../util/scope.ts\";\n\nexport type PluginsMap = Map<\n  string,\n  {\n    [x: string]: any;\n  }\n>;\n\nexport default class Parser extends StatementParser {\n  // Forward-declaration so typescript plugin can override jsx plugin\n  // todo(flow->ts) - this probably can be removed\n  // abstract jsxParseOpeningElementAfterName(\n  //   node: N.JSXOpeningElement,\n  // ): N.JSXOpeningElement;\n\n  constructor(\n    options: Options | undefined | null,\n    input: string,\n    pluginsMap: PluginsMap,\n  ) {\n    options = getOptions(options);\n    super(options, input);\n\n    this.options = options;\n    this.initializeScopes();\n    this.plugins = pluginsMap;\n    this.filename = options.sourceFilename;\n    this.startIndex = options.startIndex;\n\n    let optionFlags = 0;\n    if (options.allowAwaitOutsideFunction) {\n      optionFlags |= OptionFlags.AllowAwaitOutsideFunction;\n    }\n    if (options.allowReturnOutsideFunction) {\n      optionFlags |= OptionFlags.AllowReturnOutsideFunction;\n    }\n    if (options.allowImportExportEverywhere) {\n      optionFlags |= OptionFlags.AllowImportExportEverywhere;\n    }\n    if (options.allowSuperOutsideMethod) {\n      optionFlags |= OptionFlags.AllowSuperOutsideMethod;\n    }\n    if (options.allowUndeclaredExports) {\n      optionFlags |= OptionFlags.AllowUndeclaredExports;\n    }\n    if (options.allowNewTargetOutsideFunction) {\n      optionFlags |= OptionFlags.AllowNewTargetOutsideFunction;\n    }\n    if (options.allowYieldOutsideFunction) {\n      optionFlags |= OptionFlags.AllowYieldOutsideFunction;\n    }\n    if (options.ranges) {\n      optionFlags |= OptionFlags.Ranges;\n    }\n    if (options.tokens) {\n      optionFlags |= OptionFlags.Tokens;\n    }\n    if (options.createImportExpressions) {\n      optionFlags |= OptionFlags.CreateImportExpressions;\n    }\n    if (options.createParenthesizedExpressions) {\n      optionFlags |= OptionFlags.CreateParenthesizedExpressions;\n    }\n    if (options.errorRecovery) {\n      optionFlags |= OptionFlags.ErrorRecovery;\n    }\n    if (options.attachComment) {\n      optionFlags |= OptionFlags.AttachComment;\n    }\n    if (options.annexB) {\n      optionFlags |= OptionFlags.AnnexB;\n    }\n\n    this.optionFlags = optionFlags;\n  }\n\n  // This can be overwritten, for example, by the TypeScript plugin.\n  getScopeHandler(): new (...args: any) => ScopeHandler {\n    return ScopeHandler;\n  }\n\n  parse(): N.File {\n    this.enterInitialScopes();\n    const file = this.startNode<N.File>();\n    const program = this.startNode<N.Program>();\n    this.nextToken();\n    file.errors = null;\n    this.parseTopLevel(file, program);\n    file.errors = this.state.errors;\n    file.comments.length = this.state.commentsLen;\n    return file as N.File;\n  }\n}\n","import type { Options } from \"./options.ts\";\nimport {\n  validatePlugins,\n  mixinPluginNames,\n  mixinPlugins,\n} from \"./plugin-utils.ts\";\nexport type {\n  PluginConfig as ParserPlugin,\n  DecoratorsPluginOptions,\n  FlowPluginOptions,\n  PipelineOperatorPluginOptions,\n  RecordAndTuplePluginOptions,\n  TypeScriptPluginOptions,\n} from \"./typings.ts\";\nimport Parser, { type PluginsMap } from \"./parser/index.ts\";\n\nimport type { ExportedTokenType } from \"./tokenizer/types.ts\";\nimport {\n  getExportedToken,\n  tt as internalTokenTypes,\n  type InternalTokenTypes,\n} from \"./tokenizer/types.ts\";\nexport type { Token } from \"./tokenizer/index.ts\";\n\n// TODO: Rather than type-casting the internal AST definitions to the\n// @babel/types one, we should actually unify them.\nimport type { Expression, File } from \"@babel/types\";\nexport type { Expression, File };\n\nexport type ParserOptions = Partial<Options>;\n\nexport interface ParseError {\n  code: string;\n  reasonCode: string;\n}\nexport type ParseResult<Result extends File | Expression = File> = Result & {\n  errors: null | ParseError[];\n};\n\n/**\n * Parse the provided code as an entire ECMAScript program.\n */\nexport function parse(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<File> {\n  if (options?.sourceType === \"unambiguous\") {\n    options = {\n      ...options,\n    };\n    try {\n      options.sourceType = \"module\";\n      const parser = getParser(options, input);\n      const ast = parser.parse();\n\n      if (parser.sawUnambiguousESM) {\n        return ast as unknown as ParseResult<File>;\n      }\n\n      if (parser.ambiguousScriptDifferentAst) {\n        // Top level await introduces code which can be both a valid script and\n        // a valid module, but which produces different ASTs:\n        //    await\n        //    0\n        // can be parsed either as an AwaitExpression, or as two ExpressionStatements.\n        try {\n          options.sourceType = \"script\";\n          return getParser(\n            options,\n            input,\n          ).parse() as unknown as ParseResult<File>;\n        } catch {}\n      } else {\n        // This is both a valid module and a valid script, but\n        // we parse it as a script by default\n        ast.program.sourceType = \"script\";\n      }\n\n      return ast as unknown as ParseResult<File>;\n    } catch (moduleError) {\n      try {\n        options.sourceType = \"script\";\n        return getParser(\n          options,\n          input,\n        ).parse() as unknown as ParseResult<File>;\n      } catch {}\n\n      throw moduleError;\n    }\n  } else {\n    return getParser(options, input).parse() as unknown as ParseResult<File>;\n  }\n}\n\nexport function parseExpression(\n  input: string,\n  options?: ParserOptions,\n): ParseResult<Expression> {\n  const parser = getParser(options, input);\n  if (parser.options.strictMode) {\n    parser.state.strict = true;\n  }\n  return parser.getExpression() as unknown as ParseResult<Expression>;\n}\n\nfunction generateExportedTokenTypes(\n  internalTokenTypes: InternalTokenTypes,\n): Record<string, ExportedTokenType> {\n  const tokenTypes: Record<string, ExportedTokenType> = {};\n  for (const typeName of Object.keys(\n    internalTokenTypes,\n  ) as (keyof InternalTokenTypes)[]) {\n    tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);\n  }\n  return tokenTypes;\n}\n\nexport const tokTypes = generateExportedTokenTypes(internalTokenTypes);\n\nfunction getParser(options: Options | undefined | null, input: string): Parser {\n  let cls = Parser;\n  const pluginsMap: PluginsMap = new Map();\n  if (options?.plugins) {\n    for (const plugin of options.plugins) {\n      let name, opts;\n      if (typeof plugin === \"string\") {\n        name = plugin;\n      } else {\n        [name, opts] = plugin;\n      }\n      if (!pluginsMap.has(name)) {\n        pluginsMap.set(name, opts || {});\n      }\n    }\n    validatePlugins(pluginsMap);\n    cls = getParserClass(pluginsMap);\n  }\n\n  return new cls(options, input, pluginsMap);\n}\n\nconst parserClassCache = new Map<string, new (...args: any) => Parser>();\n\n/** Get a Parser class with plugins applied. */\nfunction getParserClass(\n  pluginsMap: Map<string, any>,\n): new (...args: any) => Parser {\n  const pluginList = [];\n  for (const name of mixinPluginNames) {\n    if (pluginsMap.has(name)) {\n      pluginList.push(name);\n    }\n  }\n  const key = pluginList.join(\"|\");\n  let cls = parserClassCache.get(key);\n  if (!cls) {\n    cls = Parser;\n    for (const plugin of pluginList) {\n      // @ts-expect-error todo(flow->ts)\n      cls = mixinPlugins[plugin](cls);\n    }\n    parserClassCache.set(key, cls);\n  }\n  return cls;\n}\n","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(global = global || self, factory(global.estreeWalker = {}));\n}(this, (function (exports) { 'use strict';\n\n\t// @ts-check\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\n\t/** @typedef {{\n\t\tskip: () => void;\n\t\tremove: () => void;\n\t\treplace: (node: BaseNode) => void;\n\t}} WalkerContext */\n\n\tclass WalkerBase {\n\t\tconstructor() {\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_skip = false;\n\n\t\t\t/** @type {boolean} */\n\t\t\tthis.should_remove = false;\n\n\t\t\t/** @type {BaseNode | null} */\n\t\t\tthis.replacement = null;\n\n\t\t\t/** @type {WalkerContext} */\n\t\t\tthis.context = {\n\t\t\t\tskip: () => (this.should_skip = true),\n\t\t\t\tremove: () => (this.should_remove = true),\n\t\t\t\treplace: (node) => (this.replacement = node)\n\t\t\t};\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t * @param {BaseNode} node\n\t\t */\n\t\treplace(parent, prop, index, node) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop][index] = node;\n\t\t\t\t} else {\n\t\t\t\t\tparent[prop] = node;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {any} parent\n\t\t * @param {string} prop\n\t\t * @param {number} index\n\t\t */\n\t\tremove(parent, prop, index) {\n\t\t\tif (parent) {\n\t\t\t\tif (index !== null) {\n\t\t\t\t\tparent[prop].splice(index, 1);\n\t\t\t\t} else {\n\t\t\t\t\tdelete parent[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker.js').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => void} SyncHandler */\n\n\tclass SyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {SyncHandler} enter\n\t\t * @param {SyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {SyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {BaseNode}\n\t\t */\n\t\tvisit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tthis.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!this.visit(value[i], node, key, i)) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tthis.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tthis.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./walker').WalkerContext} WalkerContext */\n\n\t/** @typedef {(\n\t *    this: WalkerContext,\n\t *    node: BaseNode,\n\t *    parent: BaseNode,\n\t *    key: string,\n\t *    index: number\n\t * ) => Promise<void>} AsyncHandler */\n\n\tclass AsyncWalker extends WalkerBase {\n\t\t/**\n\t\t *\n\t\t * @param {AsyncHandler} enter\n\t\t * @param {AsyncHandler} leave\n\t\t */\n\t\tconstructor(enter, leave) {\n\t\t\tsuper();\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.enter = enter;\n\n\t\t\t/** @type {AsyncHandler} */\n\t\t\tthis.leave = leave;\n\t\t}\n\n\t\t/**\n\t\t *\n\t\t * @param {BaseNode} node\n\t\t * @param {BaseNode} parent\n\t\t * @param {string} [prop]\n\t\t * @param {number} [index]\n\t\t * @returns {Promise<BaseNode>}\n\t\t */\n\t\tasync visit(node, parent, prop, index) {\n\t\t\tif (node) {\n\t\t\t\tif (this.enter) {\n\t\t\t\t\tconst _should_skip = this.should_skip;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tthis.should_skip = false;\n\t\t\t\t\tthis.should_remove = false;\n\t\t\t\t\tthis.replacement = null;\n\n\t\t\t\t\tawait this.enter.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst skipped = this.should_skip;\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.should_skip = _should_skip;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\t\t\t\t\tthis.replacement = _replacement;\n\n\t\t\t\t\tif (skipped) return node;\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\n\t\t\t\tfor (const key in node) {\n\t\t\t\t\tconst value = node[key];\n\n\t\t\t\t\tif (typeof value !== \"object\") {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (Array.isArray(value)) {\n\t\t\t\t\t\tfor (let i = 0; i < value.length; i += 1) {\n\t\t\t\t\t\t\tif (value[i] !== null && typeof value[i].type === 'string') {\n\t\t\t\t\t\t\t\tif (!(await this.visit(value[i], node, key, i))) {\n\t\t\t\t\t\t\t\t\t// removed\n\t\t\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== null && typeof value.type === \"string\") {\n\t\t\t\t\t\tawait this.visit(value, node, key, null);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.leave) {\n\t\t\t\t\tconst _replacement = this.replacement;\n\t\t\t\t\tconst _should_remove = this.should_remove;\n\t\t\t\t\tthis.replacement = null;\n\t\t\t\t\tthis.should_remove = false;\n\n\t\t\t\t\tawait this.leave.call(this.context, node, parent, prop, index);\n\n\t\t\t\t\tif (this.replacement) {\n\t\t\t\t\t\tnode = this.replacement;\n\t\t\t\t\t\tthis.replace(parent, prop, index, node);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.should_remove) {\n\t\t\t\t\t\tthis.remove(parent, prop, index);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst removed = this.should_remove;\n\n\t\t\t\t\tthis.replacement = _replacement;\n\t\t\t\t\tthis.should_remove = _should_remove;\n\n\t\t\t\t\tif (removed) return null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn node;\n\t\t}\n\t}\n\n\t// @ts-check\n\n\t/** @typedef { import('estree').BaseNode} BaseNode */\n\t/** @typedef { import('./sync.js').SyncHandler} SyncHandler */\n\t/** @typedef { import('./async.js').AsyncHandler} AsyncHandler */\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: SyncHandler\n\t *   leave?: SyncHandler\n\t * }} walker\n\t * @returns {BaseNode}\n\t */\n\tfunction walk(ast, { enter, leave }) {\n\t\tconst instance = new SyncWalker(enter, leave);\n\t\treturn instance.visit(ast, null);\n\t}\n\n\t/**\n\t *\n\t * @param {BaseNode} ast\n\t * @param {{\n\t *   enter?: AsyncHandler\n\t *   leave?: AsyncHandler\n\t * }} walker\n\t * @returns {Promise<BaseNode>}\n\t */\n\tasync function asyncWalk(ast, { enter, leave }) {\n\t\tconst instance = new AsyncWalker(enter, leave);\n\t\treturn await instance.visit(ast, null);\n\t}\n\n\texports.asyncWalk = asyncWalk;\n\texports.walk = walk;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65;     // 'A'\n  var bigZ = 90;     // 'Z'\n\n  var littleA = 97;  // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48;     // '0'\n  var nine = 57;     // '9'\n\n  var plus = 43;     // '+'\n  var slash = 47;    // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return (charCode - bigA);\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return (charCode - littleA + littleOffset);\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return (charCode - zero + numberOffset);\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0\n    ? ((-aValue) << 1) + 1\n    : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative\n    ? -shifted\n    : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n\n  var vlq = toVLQSigned(aValue);\n\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\nvar MAX_CACHED_INPUTS = 32;\n\n/**\n * Takes some function `f(input) -> result` and returns a memoized version of\n * `f`.\n *\n * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The\n * memoization is a dumb-simple, linear least-recently-used cache.\n */\nfunction lruMemoize(f) {\n  var cache = [];\n\n  return function(input) {\n    for (var i = 0; i < cache.length; i++) {\n      if (cache[i].input === input) {\n        var temp = cache[0];\n        cache[0] = cache[i];\n        cache[i] = temp;\n        return cache[0].result;\n      }\n    }\n\n    var result = f(input);\n\n    cache.unshift({\n      input,\n      result,\n    });\n\n    if (cache.length > MAX_CACHED_INPUTS) {\n      cache.pop();\n    }\n\n    return result;\n  };\n}\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nvar normalize = lruMemoize(function normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  // Split the path into parts between `/` characters. This is much faster than\n  // using `.split(/\\/+/g)`.\n  var parts = [];\n  var start = 0;\n  var i = 0;\n  while (true) {\n    start = i;\n    i = path.indexOf(\"/\", start);\n    if (i === -1) {\n      parts.push(path.slice(start));\n      break;\n    } else {\n      parts.push(path.slice(start, i));\n      while (i < path.length && path[i] === \"/\") {\n        i++;\n      }\n    }\n  }\n\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n});\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\nfunction compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   “sources” entry.  This value is prepended to the individual\n    //   entries in the “source” field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   “sourceRoot”, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\n\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA ||\n         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n  function MappingList_forEach(aCallback, aThisArg) {\n    this._array.forEach(aCallback, aThisArg);\n  };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\n\nexports.MappingList = MappingList;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._ignoreInvalidMapping = util.getArg(aArgs, 'ignoreInvalidMapping', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer, generatorOps) {\n    var sourceRoot = aSourceMapConsumer.sourceRoot;\n    var generator = new SourceMapGenerator(Object.assign(generatorOps || {}, {\n      file: aSourceMapConsumer.file,\n      sourceRoot: sourceRoot\n    }));\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      var newMapping = {\n        generated: {\n          line: mapping.generatedLine,\n          column: mapping.generatedColumn\n        }\n      };\n\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        generator.setSourceContent(sourceFile, content);\n      }\n    });\n    return generator;\n  };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n  function SourceMapGenerator_addMapping(aArgs) {\n    var generated = util.getArg(aArgs, 'generated');\n    var original = util.getArg(aArgs, 'original', null);\n    var source = util.getArg(aArgs, 'source', null);\n    var name = util.getArg(aArgs, 'name', null);\n\n    if (!this._skipValidation) {\n      if (this._validateMapping(generated, original, source, name) === false) {\n        return;\n      }\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\n    }\n\n    this._mappings.add({\n      generatedLine: generated.line,\n      generatedColumn: generated.column,\n      originalLine: original != null && original.line,\n      originalColumn: original != null && original.column,\n      source: source,\n      name: name\n    });\n  };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\n\n    if (aSourceContent != null) {\n      // Add the source content to the _sourcesContents map.\n      // Create a new _sourcesContents map if the property is null.\n      if (!this._sourcesContents) {\n        this._sourcesContents = Object.create(null);\n      }\n      this._sourcesContents[util.toSetString(source)] = aSourceContent;\n    } else if (this._sourcesContents) {\n      // Remove the source file from the _sourcesContents map.\n      // If the _sourcesContents map is empty, set the property to null.\n      delete this._sourcesContents[util.toSetString(source)];\n      if (Object.keys(this._sourcesContents).length === 0) {\n        this._sourcesContents = null;\n      }\n    }\n  };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n    var sourceFile = aSourceFile;\n    // If aSourceFile is omitted, we will use the file property of the SourceMap\n    if (aSourceFile == null) {\n      if (aSourceMapConsumer.file == null) {\n        throw new Error(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\n      }\n      sourceFile = aSourceMapConsumer.file;\n    }\n    var sourceRoot = this._sourceRoot;\n    // Make \"sourceFile\" relative if an absolute Url is passed.\n    if (sourceRoot != null) {\n      sourceFile = util.relative(sourceRoot, sourceFile);\n    }\n    // Applying the SourceMap can add and remove items from the sources and\n    // the names array.\n    var newSources = new ArraySet();\n    var newNames = new ArraySet();\n\n    // Find mappings for the \"sourceFile\"\n    this._mappings.unsortedForEach(function (mapping) {\n      if (mapping.source === sourceFile && mapping.originalLine != null) {\n        // Check if it can be mapped by the source map, then update the mapping.\n        var original = aSourceMapConsumer.originalPositionFor({\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        });\n        if (original.source != null) {\n          // Copy mapping\n          mapping.source = original.source;\n          if (aSourceMapPath != null) {\n            mapping.source = util.join(aSourceMapPath, mapping.source)\n          }\n          if (sourceRoot != null) {\n            mapping.source = util.relative(sourceRoot, mapping.source);\n          }\n          mapping.originalLine = original.line;\n          mapping.originalColumn = original.column;\n          if (original.name != null) {\n            mapping.name = original.name;\n          }\n        }\n      }\n\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\n\n    }, this);\n    this._sources = newSources;\n    this._names = newNames;\n\n    // Copy sourcesContents of applied map.\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aSourceMapPath != null) {\n          sourceFile = util.join(aSourceMapPath, sourceFile);\n        }\n        if (sourceRoot != null) {\n          sourceFile = util.relative(sourceRoot, sourceFile);\n        }\n        this.setSourceContent(sourceFile, content);\n      }\n    }, this);\n  };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n      var message = 'original.line and original.column are not numbers -- you probably meant to omit ' +\n      'the original mapping entirely and only map the generated position. If so, pass ' +\n      'null for the original mapping instead of an object with empty or null values.'\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message);\n      }\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\n    else {\n      var message = 'Invalid mapping: ' + JSON.stringify({\n        generated: aGenerated,\n        source: aSource,\n        original: aOriginal,\n        name: aName\n      });\n\n      if (this._ignoreInvalidMapping) {\n        if (typeof console !== 'undefined' && console.warn) {\n          console.warn(message);\n        }\n        return false;\n      } else {\n        throw new Error(message)\n      }\n    }\n  };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n  function SourceMapGenerator_serializeMappings() {\n    var previousGeneratedColumn = 0;\n    var previousGeneratedLine = 1;\n    var previousOriginalColumn = 0;\n    var previousOriginalLine = 0;\n    var previousName = 0;\n    var previousSource = 0;\n    var result = '';\n    var next;\n    var mapping;\n    var nameIdx;\n    var sourceIdx;\n\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\n      if (mapping.source != null) {\n        sourceIdx = this._sources.indexOf(mapping.source);\n        next += base64VLQ.encode(sourceIdx - previousSource);\n        previousSource = sourceIdx;\n\n        // lines are stored 0-based in SourceMap spec version 3\n        next += base64VLQ.encode(mapping.originalLine - 1\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n    return aSources.map(function (source) {\n      if (!this._sourcesContents) {\n        return null;\n      }\n      if (aSourceRoot != null) {\n        source = util.relative(aSourceRoot, source);\n      }\n      var key = util.toSetString(source);\n      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  function SourceMapGenerator_toJSON() {\n    var map = {\n      version: this._version,\n      sources: this._sources.toArray(),\n      names: this._names.toArray(),\n      mappings: this._serializeMappings()\n    };\n    if (this._file != null) {\n      map.file = this._file;\n    }\n    if (this._sourceRoot != null) {\n      map.sourceRoot = this._sourceRoot;\n    }\n    if (this._sourcesContents) {\n      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n    }\n\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  }\n  else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  }\n  else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n\n  return index;\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\nfunction SortTemplate(comparator) {\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot, false) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n  return doQuickSort;\n}\n\nfunction cloneSort(comparator) {\n  let template = SortTemplate.toString();\n  let templateFn = new Function(`return ${template}`)();\n  return templateFn(comparator);\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\n\nlet sortCache = new WeakMap();\nexports.quickSort = function (ary, comparator, start = 0) {\n  let doQuickSort = sortCache.get(comparator);\n  if (doQuickSort === void 0) {\n    doQuickSort = cloneSort(comparator);\n    sortCache.set(comparator, doQuickSort);\n  }\n  doQuickSort(ary, comparator, start, ary.length - 1);\n};\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n    var c = aStr.charAt(index);\n    return c === \";\" || c === \",\";\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n    var mappings;\n    switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n    }\n\n    var sourceRoot = this.sourceRoot;\n    var boundCallback = aCallback.bind(context);\n    var names = this._names;\n    var sources = this._sources;\n    var sourceMapURL = this._sourceMapURL;\n\n    for (var i = 0, n = mappings.length; i < n; i++) {\n      var mapping = mappings[i];\n      var source = mapping.source === null ? null : sources.at(mapping.source);\n      if(source !== null) {\n        source = util.computeSourceURL(sourceRoot, source, sourceMapURL);\n      }\n      boundCallback({\n        source: source,\n        generatedLine: mapping.generatedLine,\n        generatedColumn: mapping.generatedColumn,\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: mapping.name === null ? null : names.at(mapping.name)\n      });\n    }\n  };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n    var line = util.getArg(aArgs, 'line');\n\n    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n    // returns the index of the closest mapping less than the needle. By\n    // setting needle.originalColumn to 0, we thus find the last mapping for\n    // the given line, provided such a mapping exists.\n    var needle = {\n      source: util.getArg(aArgs, 'source'),\n      originalLine: line,\n      originalColumn: util.getArg(aArgs, 'column', 0)\n    };\n\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (aArgs.column === undefined) {\n        var originalLine = mapping.originalLine;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we found. Since\n        // mappings are sorted, this is guaranteed to find all mappings for\n        // the line we found.\n        while (mapping && mapping.originalLine === originalLine) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      } else {\n        var originalColumn = mapping.originalColumn;\n\n        // Iterate until either we run out of mappings, or we run into\n        // a mapping for a different line than the one we were searching for.\n        // Since mappings are sorted, this is guaranteed to find all mappings for\n        // the line we are searching for.\n        while (mapping &&\n               mapping.originalLine === line &&\n               mapping.originalColumn == originalColumn) {\n          mappings.push({\n            line: util.getArg(mapping, 'generatedLine', null),\n            column: util.getArg(mapping, 'generatedColumn', null),\n            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n          });\n\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .map(String)\n    // Some source maps produce relative source paths like \"./foo.js\" instead of\n    // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n    // See bugzil.la/1090768.\n    .map(util.normalize)\n    // Always ensure that absolute sources are internally stored relative to\n    // the source root, if the source root is absolute. Not doing this would\n    // be particularly problematic when the source root is a prefix of the\n    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n    .map(function (source) {\n      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n        ? util.relative(sourceRoot, source)\n        : source;\n    });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n    smc.sourceRoot = aSourceMap._sourceRoot;\n    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\n\n    // Because we are modifying the entries (by converting string sources and\n    // names to indices into the sources and names ArraySets), we have to make\n    // a copy of the entry or else bad things happen. Shared mutable state\n    // strikes again! See github issue #191.\n\n    var generatedMappings = aSourceMap._mappings.toArray().slice();\n    var destGeneratedMappings = smc.__generatedMappings = [];\n    var destOriginalMappings = smc.__originalMappings = [];\n\n    for (var i = 0, length = generatedMappings.length; i < length; i++) {\n      var srcMapping = generatedMappings[i];\n      var destMapping = new Mapping;\n      destMapping.generatedLine = srcMapping.generatedLine;\n      destMapping.generatedColumn = srcMapping.generatedColumn;\n\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n    return smc;\n  };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._absoluteSources.slice();\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\n\nconst compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;\nfunction sortGenerated(array, start) {\n  let l = array.length;\n  let n = array.length - start;\n  if (n <= 1) {\n    return;\n  } else if (n == 2) {\n    let a = array[start];\n    let b = array[start + 1];\n    if (compareGenerated(a, b) > 0) {\n      array[start] = b;\n      array[start + 1] = a;\n    }\n  } else if (n < 20) {\n    for (let i = start; i < l; i++) {\n      for (let j = i; j > start; j--) {\n        let a = array[j - 1];\n        let b = array[j];\n        if (compareGenerated(a, b) <= 0) {\n          break;\n        }\n        array[j - 1] = b;\n        array[j] = a;\n      }\n    }\n  } else {\n    quickSort(array, compareGenerated, start);\n  }\n}\nBasicSourceMapConsumer.prototype._parseMappings =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    var generatedLine = 1;\n    var previousGeneratedColumn = 0;\n    var previousOriginalLine = 0;\n    var previousOriginalColumn = 0;\n    var previousSource = 0;\n    var previousName = 0;\n    var length = aStr.length;\n    var index = 0;\n    var cachedSegments = {};\n    var temp = {};\n    var originalMappings = [];\n    var generatedMappings = [];\n    var mapping, str, segment, end, value;\n\n    let subarrayStart = 0;\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n\n        sortGenerated(generatedMappings, subarrayStart);\n        subarrayStart = generatedMappings.length;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\n      else {\n        mapping = new Mapping();\n        mapping.generatedLine = generatedLine;\n\n        for (end = index; end < length; end++) {\n          if (this._charIsMappingSeparator(aStr, end)) {\n            break;\n          }\n        }\n        str = aStr.slice(index, end);\n\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\n        if (segment.length > 1) {\n          // Original source.\n          mapping.source = previousSource + segment[1];\n          previousSource += segment[1];\n\n          // Original line.\n          mapping.originalLine = previousOriginalLine + segment[2];\n          previousOriginalLine = mapping.originalLine;\n          // Lines are stored 0-based\n          mapping.originalLine += 1;\n\n          // Original column.\n          mapping.originalColumn = previousOriginalColumn + segment[3];\n          previousOriginalColumn = mapping.originalColumn;\n\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          let currentSource = mapping.source;\n          while (originalMappings.length <= currentSource) {\n            originalMappings.push(null);\n          }\n          if (originalMappings[currentSource] === null) {\n            originalMappings[currentSource] = [];\n          }\n          originalMappings[currentSource].push(mapping);\n        }\n      }\n    }\n\n    sortGenerated(generatedMappings, subarrayStart);\n    this.__generatedMappings = generatedMappings;\n\n    for (var i = 0; i < originalMappings.length; i++) {\n      if (originalMappings[i] != null) {\n        quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);\n      }\n    }\n    this.__originalMappings = [].concat(...originalMappings);\n  };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         aColumnName, aComparator, aBias) {\n    // To return the position we are searching for, we must first find the\n    // mapping for the given position and then return the opposite position it\n    // points to. Because the mappings are sorted, we can use binary search to\n    // find the best mapping.\n\n    if (aNeedle[aLineName] <= 0) {\n      throw new TypeError('Line must be greater than or equal to 1, got '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\n\n    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n  };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n  function SourceMapConsumer_computeColumnSpans() {\n    for (var index = 0; index < this._generatedMappings.length; ++index) {\n      var mapping = this._generatedMappings[index];\n\n      // Mappings do not contain a field for the last generated columnt. We\n      // can come up with an optimistic estimate, however, by assuming that\n      // mappings are contiguous (i.e. given two consecutive mappings, the\n      // first mapping ends where the second one starts).\n      if (index + 1 < this._generatedMappings.length) {\n        var nextMapping = this._generatedMappings[index + 1];\n\n        if (mapping.generatedLine === nextMapping.generatedLine) {\n          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n          continue;\n        }\n      }\n\n      // The last mapping for each line spans the entire line.\n      mapping.lastGeneratedColumn = Infinity;\n    }\n  };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\n      if (mapping.generatedLine === needle.generatedLine) {\n        var source = util.getArg(mapping, 'source', null);\n        if (source !== null) {\n          source = this._sources.at(source);\n          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n        }\n        var name = util.getArg(mapping, 'name', null);\n        if (name !== null) {\n          name = this._names.at(name);\n        }\n        return {\n          source: source,\n          line: util.getArg(mapping, 'originalLine', null),\n          column: util.getArg(mapping, 'originalColumn', null),\n          name: name\n        };\n      }\n    }\n\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (url = util.urlParse(this.sourceRoot))) {\n      // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n      // many users. We can help them out when they expect file:// URIs to\n      // behave like it would if they were running a local HTTP server. See\n      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n      var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n      }\n    }\n\n    // This function is used recursively from\n    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n    // don't want to throw if we can't find the source - we just want to\n    // return null, so we provide a flag to exit gracefully.\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\n      if (mapping.source === needle.source) {\n        return {\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        };\n      }\n    }\n\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n    }\n  });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    // Find the section containing the generated position we're trying to map\n    // to an original position.\n    var sectionIndex = binarySearch.search(needle, this._sections,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 0),\n      bias: aArgs.bias\n    });\n  };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n  function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n    return this._sections.every(function (s) {\n      return s.consumer.hasContentsOfAllSources();\n    });\n  };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content || content === '') {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\n    else {\n      throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n    }\n  };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      // Only consider this section if the requested source is in the list of\n      // sources of the consumer.\n      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n        continue;\n      }\n      var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n      if (generatedPosition) {\n        var ret = {\n          line: generatedPosition.line +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\n    }\n\n    return {\n      line: null,\n      column: null\n    };\n  };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    this.__generatedMappings = [];\n    this.__originalMappings = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n      var sectionMappings = section.consumer._generatedMappings;\n      for (var j = 0; j < sectionMappings.length; j++) {\n        var mapping = sectionMappings[j];\n\n        var source = section.consumer._sources.at(mapping.source);\n        if(source !== null) {\n          source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        }\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\n\n        // The mappings coming from the consumer for the section have\n        // generated positions relative to the start of the section, so we\n        // need to offset them to be relative to the start of the concatenated\n        // generated file.\n        var adjustedMapping = {\n          source: source,\n          generatedLine: mapping.generatedLine +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n    // The SourceNode we want to fill with the generated code\n    // and the SourceMap\n    var node = new SourceNode();\n\n    // All even indices of this array are one line of the generated code,\n    // while all odd indices are the newlines between two adjacent lines\n    // (since `REGEX_NEWLINE` captures its match).\n    // Processed fragments are accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n    // The generate SourceNodes we need a code range.\n    // To extract it current and last mapping is used.\n    // Here we store the last mapping.\n    var lastMapping = null;\n\n    aSourceMapConsumer.eachMapping(function (mapping) {\n      if (lastMapping !== null) {\n        // We add the code from \"lastMapping\" to \"mapping\":\n        // First check if there is a new line in between.\n        if (lastGeneratedLine < mapping.generatedLine) {\n          // Associate first line with \"lastMapping\"\n          addMappingWithCode(lastMapping, shiftNextLine());\n          lastGeneratedLine++;\n          lastGeneratedColumn = 0;\n          // The remaining code is added without mapping\n        } else {\n          // There is no new line in between.\n          // Associate the code between \"lastGeneratedColumn\" and\n          // \"mapping.generatedColumn\" with \"lastMapping\"\n          var nextLine = remainingLines[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              lastGeneratedColumn);\n          lastGeneratedColumn = mapping.generatedColumn;\n          addMappingWithCode(lastMapping, code);\n          // No more remaining code, continue\n          lastMapping = mapping;\n          return;\n        }\n      }\n      // We add the generated code until the first mapping\n      // to the SourceNode without any mapping.\n      // Each line is added as separate string.\n      while (lastGeneratedLine < mapping.generatedLine) {\n        node.add(shiftNextLine());\n        lastGeneratedLine++;\n      }\n      if (lastGeneratedColumn < mapping.generatedColumn) {\n        var nextLine = remainingLines[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\n      if (lastMapping) {\n        // Associate the remaining code in the current line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n      }\n      // and add the remaining lines without any mapping\n      node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n    }\n\n    // Copy sourcesContent into SourceNode\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n      if (content != null) {\n        if (aRelativePath != null) {\n          sourceFile = util.join(aRelativePath, sourceFile);\n        }\n        node.setSourceContent(sourceFile, content);\n      }\n    });\n\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                mapping.name));\n      }\n    }\n  };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length-1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len-1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\n  else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n  };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n  function SourceNode_walkSourceContents(aFn) {\n    for (var i = 0, len = this.children.length; i < len; i++) {\n      if (this.children[i][isSourceNode]) {\n        this.children[i].walkSourceContents(aFn);\n      }\n    }\n\n    var sources = Object.keys(this.sourceContents);\n    for (var i = 0, len = sources.length; i < len; i++) {\n      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n    }\n  };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n","/**\n* @vue/compiler-core v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\nvar decode_js = require('entities/lib/decode.js');\nvar parser = require('@babel/parser');\nvar estreeWalker = require('estree-walker');\nvar sourceMapJs = require('source-map-js');\n\nconst FRAGMENT = Symbol(``);\nconst TELEPORT = Symbol(``);\nconst SUSPENSE = Symbol(``);\nconst KEEP_ALIVE = Symbol(``);\nconst BASE_TRANSITION = Symbol(\n  ``\n);\nconst OPEN_BLOCK = Symbol(``);\nconst CREATE_BLOCK = Symbol(``);\nconst CREATE_ELEMENT_BLOCK = Symbol(\n  ``\n);\nconst CREATE_VNODE = Symbol(``);\nconst CREATE_ELEMENT_VNODE = Symbol(\n  ``\n);\nconst CREATE_COMMENT = Symbol(\n  ``\n);\nconst CREATE_TEXT = Symbol(\n  ``\n);\nconst CREATE_STATIC = Symbol(\n  ``\n);\nconst RESOLVE_COMPONENT = Symbol(\n  ``\n);\nconst RESOLVE_DYNAMIC_COMPONENT = Symbol(\n  ``\n);\nconst RESOLVE_DIRECTIVE = Symbol(\n  ``\n);\nconst RESOLVE_FILTER = Symbol(\n  ``\n);\nconst WITH_DIRECTIVES = Symbol(\n  ``\n);\nconst RENDER_LIST = Symbol(``);\nconst RENDER_SLOT = Symbol(``);\nconst CREATE_SLOTS = Symbol(``);\nconst TO_DISPLAY_STRING = Symbol(\n  ``\n);\nconst MERGE_PROPS = Symbol(``);\nconst NORMALIZE_CLASS = Symbol(\n  ``\n);\nconst NORMALIZE_STYLE = Symbol(\n  ``\n);\nconst NORMALIZE_PROPS = Symbol(\n  ``\n);\nconst GUARD_REACTIVE_PROPS = Symbol(\n  ``\n);\nconst TO_HANDLERS = Symbol(``);\nconst CAMELIZE = Symbol(``);\nconst CAPITALIZE = Symbol(``);\nconst TO_HANDLER_KEY = Symbol(\n  ``\n);\nconst SET_BLOCK_TRACKING = Symbol(\n  ``\n);\nconst PUSH_SCOPE_ID = Symbol(``);\nconst POP_SCOPE_ID = Symbol(``);\nconst WITH_CTX = Symbol(``);\nconst UNREF = Symbol(``);\nconst IS_REF = Symbol(``);\nconst WITH_MEMO = Symbol(``);\nconst IS_MEMO_SAME = Symbol(``);\nconst helperNameMap = {\n  [FRAGMENT]: `Fragment`,\n  [TELEPORT]: `Teleport`,\n  [SUSPENSE]: `Suspense`,\n  [KEEP_ALIVE]: `KeepAlive`,\n  [BASE_TRANSITION]: `BaseTransition`,\n  [OPEN_BLOCK]: `openBlock`,\n  [CREATE_BLOCK]: `createBlock`,\n  [CREATE_ELEMENT_BLOCK]: `createElementBlock`,\n  [CREATE_VNODE]: `createVNode`,\n  [CREATE_ELEMENT_VNODE]: `createElementVNode`,\n  [CREATE_COMMENT]: `createCommentVNode`,\n  [CREATE_TEXT]: `createTextVNode`,\n  [CREATE_STATIC]: `createStaticVNode`,\n  [RESOLVE_COMPONENT]: `resolveComponent`,\n  [RESOLVE_DYNAMIC_COMPONENT]: `resolveDynamicComponent`,\n  [RESOLVE_DIRECTIVE]: `resolveDirective`,\n  [RESOLVE_FILTER]: `resolveFilter`,\n  [WITH_DIRECTIVES]: `withDirectives`,\n  [RENDER_LIST]: `renderList`,\n  [RENDER_SLOT]: `renderSlot`,\n  [CREATE_SLOTS]: `createSlots`,\n  [TO_DISPLAY_STRING]: `toDisplayString`,\n  [MERGE_PROPS]: `mergeProps`,\n  [NORMALIZE_CLASS]: `normalizeClass`,\n  [NORMALIZE_STYLE]: `normalizeStyle`,\n  [NORMALIZE_PROPS]: `normalizeProps`,\n  [GUARD_REACTIVE_PROPS]: `guardReactiveProps`,\n  [TO_HANDLERS]: `toHandlers`,\n  [CAMELIZE]: `camelize`,\n  [CAPITALIZE]: `capitalize`,\n  [TO_HANDLER_KEY]: `toHandlerKey`,\n  [SET_BLOCK_TRACKING]: `setBlockTracking`,\n  [PUSH_SCOPE_ID]: `pushScopeId`,\n  [POP_SCOPE_ID]: `popScopeId`,\n  [WITH_CTX]: `withCtx`,\n  [UNREF]: `unref`,\n  [IS_REF]: `isRef`,\n  [WITH_MEMO]: `withMemo`,\n  [IS_MEMO_SAME]: `isMemoSame`\n};\nfunction registerRuntimeHelpers(helpers) {\n  Object.getOwnPropertySymbols(helpers).forEach((s) => {\n    helperNameMap[s] = helpers[s];\n  });\n}\n\nconst Namespaces = {\n  \"HTML\": 0,\n  \"0\": \"HTML\",\n  \"SVG\": 1,\n  \"1\": \"SVG\",\n  \"MATH_ML\": 2,\n  \"2\": \"MATH_ML\"\n};\nconst NodeTypes = {\n  \"ROOT\": 0,\n  \"0\": \"ROOT\",\n  \"ELEMENT\": 1,\n  \"1\": \"ELEMENT\",\n  \"TEXT\": 2,\n  \"2\": \"TEXT\",\n  \"COMMENT\": 3,\n  \"3\": \"COMMENT\",\n  \"SIMPLE_EXPRESSION\": 4,\n  \"4\": \"SIMPLE_EXPRESSION\",\n  \"INTERPOLATION\": 5,\n  \"5\": \"INTERPOLATION\",\n  \"ATTRIBUTE\": 6,\n  \"6\": \"ATTRIBUTE\",\n  \"DIRECTIVE\": 7,\n  \"7\": \"DIRECTIVE\",\n  \"COMPOUND_EXPRESSION\": 8,\n  \"8\": \"COMPOUND_EXPRESSION\",\n  \"IF\": 9,\n  \"9\": \"IF\",\n  \"IF_BRANCH\": 10,\n  \"10\": \"IF_BRANCH\",\n  \"FOR\": 11,\n  \"11\": \"FOR\",\n  \"TEXT_CALL\": 12,\n  \"12\": \"TEXT_CALL\",\n  \"VNODE_CALL\": 13,\n  \"13\": \"VNODE_CALL\",\n  \"JS_CALL_EXPRESSION\": 14,\n  \"14\": \"JS_CALL_EXPRESSION\",\n  \"JS_OBJECT_EXPRESSION\": 15,\n  \"15\": \"JS_OBJECT_EXPRESSION\",\n  \"JS_PROPERTY\": 16,\n  \"16\": \"JS_PROPERTY\",\n  \"JS_ARRAY_EXPRESSION\": 17,\n  \"17\": \"JS_ARRAY_EXPRESSION\",\n  \"JS_FUNCTION_EXPRESSION\": 18,\n  \"18\": \"JS_FUNCTION_EXPRESSION\",\n  \"JS_CONDITIONAL_EXPRESSION\": 19,\n  \"19\": \"JS_CONDITIONAL_EXPRESSION\",\n  \"JS_CACHE_EXPRESSION\": 20,\n  \"20\": \"JS_CACHE_EXPRESSION\",\n  \"JS_BLOCK_STATEMENT\": 21,\n  \"21\": \"JS_BLOCK_STATEMENT\",\n  \"JS_TEMPLATE_LITERAL\": 22,\n  \"22\": \"JS_TEMPLATE_LITERAL\",\n  \"JS_IF_STATEMENT\": 23,\n  \"23\": \"JS_IF_STATEMENT\",\n  \"JS_ASSIGNMENT_EXPRESSION\": 24,\n  \"24\": \"JS_ASSIGNMENT_EXPRESSION\",\n  \"JS_SEQUENCE_EXPRESSION\": 25,\n  \"25\": \"JS_SEQUENCE_EXPRESSION\",\n  \"JS_RETURN_STATEMENT\": 26,\n  \"26\": \"JS_RETURN_STATEMENT\"\n};\nconst ElementTypes = {\n  \"ELEMENT\": 0,\n  \"0\": \"ELEMENT\",\n  \"COMPONENT\": 1,\n  \"1\": \"COMPONENT\",\n  \"SLOT\": 2,\n  \"2\": \"SLOT\",\n  \"TEMPLATE\": 3,\n  \"3\": \"TEMPLATE\"\n};\nconst ConstantTypes = {\n  \"NOT_CONSTANT\": 0,\n  \"0\": \"NOT_CONSTANT\",\n  \"CAN_SKIP_PATCH\": 1,\n  \"1\": \"CAN_SKIP_PATCH\",\n  \"CAN_CACHE\": 2,\n  \"2\": \"CAN_CACHE\",\n  \"CAN_STRINGIFY\": 3,\n  \"3\": \"CAN_STRINGIFY\"\n};\nconst locStub = {\n  start: { line: 1, column: 1, offset: 0 },\n  end: { line: 1, column: 1, offset: 0 },\n  source: \"\"\n};\nfunction createRoot(children, source = \"\") {\n  return {\n    type: 0,\n    source,\n    children,\n    helpers: /* @__PURE__ */ new Set(),\n    components: [],\n    directives: [],\n    hoists: [],\n    imports: [],\n    cached: [],\n    temps: 0,\n    codegenNode: void 0,\n    loc: locStub\n  };\n}\nfunction createVNodeCall(context, tag, props, children, patchFlag, dynamicProps, directives, isBlock = false, disableTracking = false, isComponent = false, loc = locStub) {\n  if (context) {\n    if (isBlock) {\n      context.helper(OPEN_BLOCK);\n      context.helper(getVNodeBlockHelper(context.inSSR, isComponent));\n    } else {\n      context.helper(getVNodeHelper(context.inSSR, isComponent));\n    }\n    if (directives) {\n      context.helper(WITH_DIRECTIVES);\n    }\n  }\n  return {\n    type: 13,\n    tag,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    directives,\n    isBlock,\n    disableTracking,\n    isComponent,\n    loc\n  };\n}\nfunction createArrayExpression(elements, loc = locStub) {\n  return {\n    type: 17,\n    loc,\n    elements\n  };\n}\nfunction createObjectExpression(properties, loc = locStub) {\n  return {\n    type: 15,\n    loc,\n    properties\n  };\n}\nfunction createObjectProperty(key, value) {\n  return {\n    type: 16,\n    loc: locStub,\n    key: shared.isString(key) ? createSimpleExpression(key, true) : key,\n    value\n  };\n}\nfunction createSimpleExpression(content, isStatic = false, loc = locStub, constType = 0) {\n  return {\n    type: 4,\n    loc,\n    content,\n    isStatic,\n    constType: isStatic ? 3 : constType\n  };\n}\nfunction createInterpolation(content, loc) {\n  return {\n    type: 5,\n    loc,\n    content: shared.isString(content) ? createSimpleExpression(content, false, loc) : content\n  };\n}\nfunction createCompoundExpression(children, loc = locStub) {\n  return {\n    type: 8,\n    loc,\n    children\n  };\n}\nfunction createCallExpression(callee, args = [], loc = locStub) {\n  return {\n    type: 14,\n    loc,\n    callee,\n    arguments: args\n  };\n}\nfunction createFunctionExpression(params, returns = void 0, newline = false, isSlot = false, loc = locStub) {\n  return {\n    type: 18,\n    params,\n    returns,\n    newline,\n    isSlot,\n    loc\n  };\n}\nfunction createConditionalExpression(test, consequent, alternate, newline = true) {\n  return {\n    type: 19,\n    test,\n    consequent,\n    alternate,\n    newline,\n    loc: locStub\n  };\n}\nfunction createCacheExpression(index, value, needPauseTracking = false, inVOnce = false) {\n  return {\n    type: 20,\n    index,\n    value,\n    needPauseTracking,\n    inVOnce,\n    needArraySpread: false,\n    loc: locStub\n  };\n}\nfunction createBlockStatement(body) {\n  return {\n    type: 21,\n    body,\n    loc: locStub\n  };\n}\nfunction createTemplateLiteral(elements) {\n  return {\n    type: 22,\n    elements,\n    loc: locStub\n  };\n}\nfunction createIfStatement(test, consequent, alternate) {\n  return {\n    type: 23,\n    test,\n    consequent,\n    alternate,\n    loc: locStub\n  };\n}\nfunction createAssignmentExpression(left, right) {\n  return {\n    type: 24,\n    left,\n    right,\n    loc: locStub\n  };\n}\nfunction createSequenceExpression(expressions) {\n  return {\n    type: 25,\n    expressions,\n    loc: locStub\n  };\n}\nfunction createReturnStatement(returns) {\n  return {\n    type: 26,\n    returns,\n    loc: locStub\n  };\n}\nfunction getVNodeHelper(ssr, isComponent) {\n  return ssr || isComponent ? CREATE_VNODE : CREATE_ELEMENT_VNODE;\n}\nfunction getVNodeBlockHelper(ssr, isComponent) {\n  return ssr || isComponent ? CREATE_BLOCK : CREATE_ELEMENT_BLOCK;\n}\nfunction convertToBlock(node, { helper, removeHelper, inSSR }) {\n  if (!node.isBlock) {\n    node.isBlock = true;\n    removeHelper(getVNodeHelper(inSSR, node.isComponent));\n    helper(OPEN_BLOCK);\n    helper(getVNodeBlockHelper(inSSR, node.isComponent));\n  }\n}\n\nconst defaultDelimitersOpen = new Uint8Array([123, 123]);\nconst defaultDelimitersClose = new Uint8Array([125, 125]);\nfunction isTagStartChar(c) {\n  return c >= 97 && c <= 122 || c >= 65 && c <= 90;\n}\nfunction isWhitespace(c) {\n  return c === 32 || c === 10 || c === 9 || c === 12 || c === 13;\n}\nfunction isEndOfTagSection(c) {\n  return c === 47 || c === 62 || isWhitespace(c);\n}\nfunction toCharCodes(str) {\n  const ret = new Uint8Array(str.length);\n  for (let i = 0; i < str.length; i++) {\n    ret[i] = str.charCodeAt(i);\n  }\n  return ret;\n}\nconst Sequences = {\n  Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),\n  // CDATA[\n  CdataEnd: new Uint8Array([93, 93, 62]),\n  // ]]>\n  CommentEnd: new Uint8Array([45, 45, 62]),\n  // `-->`\n  ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),\n  // `<\\/script`\n  StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),\n  // `</style`\n  TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),\n  // `</title`\n  TextareaEnd: new Uint8Array([\n    60,\n    47,\n    116,\n    101,\n    120,\n    116,\n    97,\n    114,\n    101,\n    97\n  ])\n  // `</textarea\n};\nclass Tokenizer {\n  constructor(stack, cbs) {\n    this.stack = stack;\n    this.cbs = cbs;\n    /** The current state the tokenizer is in. */\n    this.state = 1;\n    /** The read buffer. */\n    this.buffer = \"\";\n    /** The beginning of the section that is currently being read. */\n    this.sectionStart = 0;\n    /** The index within the buffer that we are currently looking at. */\n    this.index = 0;\n    /** The start of the last entity. */\n    this.entityStart = 0;\n    /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n    this.baseState = 1;\n    /** For special parsing behavior inside of script and style tags. */\n    this.inRCDATA = false;\n    /** For disabling RCDATA tags handling */\n    this.inXML = false;\n    /** For disabling interpolation parsing in v-pre */\n    this.inVPre = false;\n    /** Record newline positions for fast line / column calculation */\n    this.newlines = [];\n    this.mode = 0;\n    this.delimiterOpen = defaultDelimitersOpen;\n    this.delimiterClose = defaultDelimitersClose;\n    this.delimiterIndex = -1;\n    this.currentSequence = void 0;\n    this.sequenceIndex = 0;\n    {\n      this.entityDecoder = new decode_js.EntityDecoder(\n        decode_js.htmlDecodeTree,\n        (cp, consumed) => this.emitCodePoint(cp, consumed)\n      );\n    }\n  }\n  get inSFCRoot() {\n    return this.mode === 2 && this.stack.length === 0;\n  }\n  reset() {\n    this.state = 1;\n    this.mode = 0;\n    this.buffer = \"\";\n    this.sectionStart = 0;\n    this.index = 0;\n    this.baseState = 1;\n    this.inRCDATA = false;\n    this.currentSequence = void 0;\n    this.newlines.length = 0;\n    this.delimiterOpen = defaultDelimitersOpen;\n    this.delimiterClose = defaultDelimitersClose;\n  }\n  /**\n   * Generate Position object with line / column information using recorded\n   * newline positions. We know the index is always going to be an already\n   * processed index, so all the newlines up to this index should have been\n   * recorded.\n   */\n  getPos(index) {\n    let line = 1;\n    let column = index + 1;\n    for (let i = this.newlines.length - 1; i >= 0; i--) {\n      const newlineIndex = this.newlines[i];\n      if (index > newlineIndex) {\n        line = i + 2;\n        column = index - newlineIndex;\n        break;\n      }\n    }\n    return {\n      column,\n      line,\n      offset: index\n    };\n  }\n  peek() {\n    return this.buffer.charCodeAt(this.index + 1);\n  }\n  stateText(c) {\n    if (c === 60) {\n      if (this.index > this.sectionStart) {\n        this.cbs.ontext(this.sectionStart, this.index);\n      }\n      this.state = 5;\n      this.sectionStart = this.index;\n    } else if (c === 38) {\n      this.startEntity();\n    } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n      this.state = 2;\n      this.delimiterIndex = 0;\n      this.stateInterpolationOpen(c);\n    }\n  }\n  stateInterpolationOpen(c) {\n    if (c === this.delimiterOpen[this.delimiterIndex]) {\n      if (this.delimiterIndex === this.delimiterOpen.length - 1) {\n        const start = this.index + 1 - this.delimiterOpen.length;\n        if (start > this.sectionStart) {\n          this.cbs.ontext(this.sectionStart, start);\n        }\n        this.state = 3;\n        this.sectionStart = start;\n      } else {\n        this.delimiterIndex++;\n      }\n    } else if (this.inRCDATA) {\n      this.state = 32;\n      this.stateInRCDATA(c);\n    } else {\n      this.state = 1;\n      this.stateText(c);\n    }\n  }\n  stateInterpolation(c) {\n    if (c === this.delimiterClose[0]) {\n      this.state = 4;\n      this.delimiterIndex = 0;\n      this.stateInterpolationClose(c);\n    }\n  }\n  stateInterpolationClose(c) {\n    if (c === this.delimiterClose[this.delimiterIndex]) {\n      if (this.delimiterIndex === this.delimiterClose.length - 1) {\n        this.cbs.oninterpolation(this.sectionStart, this.index + 1);\n        if (this.inRCDATA) {\n          this.state = 32;\n        } else {\n          this.state = 1;\n        }\n        this.sectionStart = this.index + 1;\n      } else {\n        this.delimiterIndex++;\n      }\n    } else {\n      this.state = 3;\n      this.stateInterpolation(c);\n    }\n  }\n  stateSpecialStartSequence(c) {\n    const isEnd = this.sequenceIndex === this.currentSequence.length;\n    const isMatch = isEnd ? (\n      // If we are at the end of the sequence, make sure the tag name has ended\n      isEndOfTagSection(c)\n    ) : (\n      // Otherwise, do a case-insensitive comparison\n      (c | 32) === this.currentSequence[this.sequenceIndex]\n    );\n    if (!isMatch) {\n      this.inRCDATA = false;\n    } else if (!isEnd) {\n      this.sequenceIndex++;\n      return;\n    }\n    this.sequenceIndex = 0;\n    this.state = 6;\n    this.stateInTagName(c);\n  }\n  /** Look for an end tag. For <title> and <textarea>, also decode entities. */\n  stateInRCDATA(c) {\n    if (this.sequenceIndex === this.currentSequence.length) {\n      if (c === 62 || isWhitespace(c)) {\n        const endOfText = this.index - this.currentSequence.length;\n        if (this.sectionStart < endOfText) {\n          const actualIndex = this.index;\n          this.index = endOfText;\n          this.cbs.ontext(this.sectionStart, endOfText);\n          this.index = actualIndex;\n        }\n        this.sectionStart = endOfText + 2;\n        this.stateInClosingTagName(c);\n        this.inRCDATA = false;\n        return;\n      }\n      this.sequenceIndex = 0;\n    }\n    if ((c | 32) === this.currentSequence[this.sequenceIndex]) {\n      this.sequenceIndex += 1;\n    } else if (this.sequenceIndex === 0) {\n      if (this.currentSequence === Sequences.TitleEnd || this.currentSequence === Sequences.TextareaEnd && !this.inSFCRoot) {\n        if (c === 38) {\n          this.startEntity();\n        } else if (!this.inVPre && c === this.delimiterOpen[0]) {\n          this.state = 2;\n          this.delimiterIndex = 0;\n          this.stateInterpolationOpen(c);\n        }\n      } else if (this.fastForwardTo(60)) {\n        this.sequenceIndex = 1;\n      }\n    } else {\n      this.sequenceIndex = Number(c === 60);\n    }\n  }\n  stateCDATASequence(c) {\n    if (c === Sequences.Cdata[this.sequenceIndex]) {\n      if (++this.sequenceIndex === Sequences.Cdata.length) {\n        this.state = 28;\n        this.currentSequence = Sequences.CdataEnd;\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n      }\n    } else {\n      this.sequenceIndex = 0;\n      this.state = 23;\n      this.stateInDeclaration(c);\n    }\n  }\n  /**\n   * When we wait for one specific character, we can speed things up\n   * by skipping through the buffer until we find it.\n   *\n   * @returns Whether the character was found.\n   */\n  fastForwardTo(c) {\n    while (++this.index < this.buffer.length) {\n      const cc = this.buffer.charCodeAt(this.index);\n      if (cc === 10) {\n        this.newlines.push(this.index);\n      }\n      if (cc === c) {\n        return true;\n      }\n    }\n    this.index = this.buffer.length - 1;\n    return false;\n  }\n  /**\n   * Comments and CDATA end with `-->` and `]]>`.\n   *\n   * Their common qualities are:\n   * - Their end sequences have a distinct character they start with.\n   * - That character is then repeated, so we have to check multiple repeats.\n   * - All characters but the start character of the sequence can be skipped.\n   */\n  stateInCommentLike(c) {\n    if (c === this.currentSequence[this.sequenceIndex]) {\n      if (++this.sequenceIndex === this.currentSequence.length) {\n        if (this.currentSequence === Sequences.CdataEnd) {\n          this.cbs.oncdata(this.sectionStart, this.index - 2);\n        } else {\n          this.cbs.oncomment(this.sectionStart, this.index - 2);\n        }\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n        this.state = 1;\n      }\n    } else if (this.sequenceIndex === 0) {\n      if (this.fastForwardTo(this.currentSequence[0])) {\n        this.sequenceIndex = 1;\n      }\n    } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n      this.sequenceIndex = 0;\n    }\n  }\n  startSpecial(sequence, offset) {\n    this.enterRCDATA(sequence, offset);\n    this.state = 31;\n  }\n  enterRCDATA(sequence, offset) {\n    this.inRCDATA = true;\n    this.currentSequence = sequence;\n    this.sequenceIndex = offset;\n  }\n  stateBeforeTagName(c) {\n    if (c === 33) {\n      this.state = 22;\n      this.sectionStart = this.index + 1;\n    } else if (c === 63) {\n      this.state = 24;\n      this.sectionStart = this.index + 1;\n    } else if (isTagStartChar(c)) {\n      this.sectionStart = this.index;\n      if (this.mode === 0) {\n        this.state = 6;\n      } else if (this.inSFCRoot) {\n        this.state = 34;\n      } else if (!this.inXML) {\n        if (c === 116) {\n          this.state = 30;\n        } else {\n          this.state = c === 115 ? 29 : 6;\n        }\n      } else {\n        this.state = 6;\n      }\n    } else if (c === 47) {\n      this.state = 8;\n    } else {\n      this.state = 1;\n      this.stateText(c);\n    }\n  }\n  stateInTagName(c) {\n    if (isEndOfTagSection(c)) {\n      this.handleTagName(c);\n    }\n  }\n  stateInSFCRootTagName(c) {\n    if (isEndOfTagSection(c)) {\n      const tag = this.buffer.slice(this.sectionStart, this.index);\n      if (tag !== \"template\") {\n        this.enterRCDATA(toCharCodes(`</` + tag), 0);\n      }\n      this.handleTagName(c);\n    }\n  }\n  handleTagName(c) {\n    this.cbs.onopentagname(this.sectionStart, this.index);\n    this.sectionStart = -1;\n    this.state = 11;\n    this.stateBeforeAttrName(c);\n  }\n  stateBeforeClosingTagName(c) {\n    if (isWhitespace(c)) ; else if (c === 62) {\n      {\n        this.cbs.onerr(14, this.index);\n      }\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = isTagStartChar(c) ? 9 : 27;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInClosingTagName(c) {\n    if (c === 62 || isWhitespace(c)) {\n      this.cbs.onclosetag(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.state = 10;\n      this.stateAfterClosingTagName(c);\n    }\n  }\n  stateAfterClosingTagName(c) {\n    if (c === 62) {\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeAttrName(c) {\n    if (c === 62) {\n      this.cbs.onopentagend(this.index);\n      if (this.inRCDATA) {\n        this.state = 32;\n      } else {\n        this.state = 1;\n      }\n      this.sectionStart = this.index + 1;\n    } else if (c === 47) {\n      this.state = 7;\n      if (this.peek() !== 62) {\n        this.cbs.onerr(22, this.index);\n      }\n    } else if (c === 60 && this.peek() === 47) {\n      this.cbs.onopentagend(this.index);\n      this.state = 5;\n      this.sectionStart = this.index;\n    } else if (!isWhitespace(c)) {\n      if (c === 61) {\n        this.cbs.onerr(\n          19,\n          this.index\n        );\n      }\n      this.handleAttrStart(c);\n    }\n  }\n  handleAttrStart(c) {\n    if (c === 118 && this.peek() === 45) {\n      this.state = 13;\n      this.sectionStart = this.index;\n    } else if (c === 46 || c === 58 || c === 64 || c === 35) {\n      this.cbs.ondirname(this.index, this.index + 1);\n      this.state = 14;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = 12;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInSelfClosingTag(c) {\n    if (c === 62) {\n      this.cbs.onselfclosingtag(this.index);\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n      this.inRCDATA = false;\n    } else if (!isWhitespace(c)) {\n      this.state = 11;\n      this.stateBeforeAttrName(c);\n    }\n  }\n  stateInAttrName(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.onattribname(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 34 || c === 39 || c === 60) {\n      this.cbs.onerr(\n        17,\n        this.index\n      );\n    }\n  }\n  stateInDirName(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirname(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 58) {\n      this.cbs.ondirname(this.sectionStart, this.index);\n      this.state = 14;\n      this.sectionStart = this.index + 1;\n    } else if (c === 46) {\n      this.cbs.ondirname(this.sectionStart, this.index);\n      this.state = 16;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInDirArg(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirarg(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 91) {\n      this.state = 15;\n    } else if (c === 46) {\n      this.cbs.ondirarg(this.sectionStart, this.index);\n      this.state = 16;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInDynamicDirArg(c) {\n    if (c === 93) {\n      this.state = 14;\n    } else if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirarg(this.sectionStart, this.index + 1);\n      this.handleAttrNameEnd(c);\n      {\n        this.cbs.onerr(\n          27,\n          this.index\n        );\n      }\n    }\n  }\n  stateInDirModifier(c) {\n    if (c === 61 || isEndOfTagSection(c)) {\n      this.cbs.ondirmodifier(this.sectionStart, this.index);\n      this.handleAttrNameEnd(c);\n    } else if (c === 46) {\n      this.cbs.ondirmodifier(this.sectionStart, this.index);\n      this.sectionStart = this.index + 1;\n    }\n  }\n  handleAttrNameEnd(c) {\n    this.sectionStart = this.index;\n    this.state = 17;\n    this.cbs.onattribnameend(this.index);\n    this.stateAfterAttrName(c);\n  }\n  stateAfterAttrName(c) {\n    if (c === 61) {\n      this.state = 18;\n    } else if (c === 47 || c === 62) {\n      this.cbs.onattribend(0, this.sectionStart);\n      this.sectionStart = -1;\n      this.state = 11;\n      this.stateBeforeAttrName(c);\n    } else if (!isWhitespace(c)) {\n      this.cbs.onattribend(0, this.sectionStart);\n      this.handleAttrStart(c);\n    }\n  }\n  stateBeforeAttrValue(c) {\n    if (c === 34) {\n      this.state = 19;\n      this.sectionStart = this.index + 1;\n    } else if (c === 39) {\n      this.state = 20;\n      this.sectionStart = this.index + 1;\n    } else if (!isWhitespace(c)) {\n      this.sectionStart = this.index;\n      this.state = 21;\n      this.stateInAttrValueNoQuotes(c);\n    }\n  }\n  handleInAttrValue(c, quote) {\n    if (c === quote || false) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(\n        quote === 34 ? 3 : 2,\n        this.index + 1\n      );\n      this.state = 11;\n    } else if (c === 38) {\n      this.startEntity();\n    }\n  }\n  stateInAttrValueDoubleQuotes(c) {\n    this.handleInAttrValue(c, 34);\n  }\n  stateInAttrValueSingleQuotes(c) {\n    this.handleInAttrValue(c, 39);\n  }\n  stateInAttrValueNoQuotes(c) {\n    if (isWhitespace(c) || c === 62) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(1, this.index);\n      this.state = 11;\n      this.stateBeforeAttrName(c);\n    } else if (c === 34 || c === 39 || c === 60 || c === 61 || c === 96) {\n      this.cbs.onerr(\n        18,\n        this.index\n      );\n    } else if (c === 38) {\n      this.startEntity();\n    }\n  }\n  stateBeforeDeclaration(c) {\n    if (c === 91) {\n      this.state = 26;\n      this.sequenceIndex = 0;\n    } else {\n      this.state = c === 45 ? 25 : 23;\n    }\n  }\n  stateInDeclaration(c) {\n    if (c === 62 || this.fastForwardTo(62)) {\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInProcessingInstruction(c) {\n    if (c === 62 || this.fastForwardTo(62)) {\n      this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeComment(c) {\n    if (c === 45) {\n      this.state = 28;\n      this.currentSequence = Sequences.CommentEnd;\n      this.sequenceIndex = 2;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = 23;\n    }\n  }\n  stateInSpecialComment(c) {\n    if (c === 62 || this.fastForwardTo(62)) {\n      this.cbs.oncomment(this.sectionStart, this.index);\n      this.state = 1;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeSpecialS(c) {\n    if (c === Sequences.ScriptEnd[3]) {\n      this.startSpecial(Sequences.ScriptEnd, 4);\n    } else if (c === Sequences.StyleEnd[3]) {\n      this.startSpecial(Sequences.StyleEnd, 4);\n    } else {\n      this.state = 6;\n      this.stateInTagName(c);\n    }\n  }\n  stateBeforeSpecialT(c) {\n    if (c === Sequences.TitleEnd[3]) {\n      this.startSpecial(Sequences.TitleEnd, 4);\n    } else if (c === Sequences.TextareaEnd[3]) {\n      this.startSpecial(Sequences.TextareaEnd, 4);\n    } else {\n      this.state = 6;\n      this.stateInTagName(c);\n    }\n  }\n  startEntity() {\n    {\n      this.baseState = this.state;\n      this.state = 33;\n      this.entityStart = this.index;\n      this.entityDecoder.startEntity(\n        this.baseState === 1 || this.baseState === 32 ? decode_js.DecodingMode.Legacy : decode_js.DecodingMode.Attribute\n      );\n    }\n  }\n  stateInEntity() {\n    {\n      const length = this.entityDecoder.write(this.buffer, this.index);\n      if (length >= 0) {\n        this.state = this.baseState;\n        if (length === 0) {\n          this.index = this.entityStart;\n        }\n      } else {\n        this.index = this.buffer.length - 1;\n      }\n    }\n  }\n  /**\n   * Iterates through the buffer, calling the function corresponding to the current state.\n   *\n   * States that are more likely to be hit are higher up, as a performance improvement.\n   */\n  parse(input) {\n    this.buffer = input;\n    while (this.index < this.buffer.length) {\n      const c = this.buffer.charCodeAt(this.index);\n      if (c === 10 && this.state !== 33) {\n        this.newlines.push(this.index);\n      }\n      switch (this.state) {\n        case 1: {\n          this.stateText(c);\n          break;\n        }\n        case 2: {\n          this.stateInterpolationOpen(c);\n          break;\n        }\n        case 3: {\n          this.stateInterpolation(c);\n          break;\n        }\n        case 4: {\n          this.stateInterpolationClose(c);\n          break;\n        }\n        case 31: {\n          this.stateSpecialStartSequence(c);\n          break;\n        }\n        case 32: {\n          this.stateInRCDATA(c);\n          break;\n        }\n        case 26: {\n          this.stateCDATASequence(c);\n          break;\n        }\n        case 19: {\n          this.stateInAttrValueDoubleQuotes(c);\n          break;\n        }\n        case 12: {\n          this.stateInAttrName(c);\n          break;\n        }\n        case 13: {\n          this.stateInDirName(c);\n          break;\n        }\n        case 14: {\n          this.stateInDirArg(c);\n          break;\n        }\n        case 15: {\n          this.stateInDynamicDirArg(c);\n          break;\n        }\n        case 16: {\n          this.stateInDirModifier(c);\n          break;\n        }\n        case 28: {\n          this.stateInCommentLike(c);\n          break;\n        }\n        case 27: {\n          this.stateInSpecialComment(c);\n          break;\n        }\n        case 11: {\n          this.stateBeforeAttrName(c);\n          break;\n        }\n        case 6: {\n          this.stateInTagName(c);\n          break;\n        }\n        case 34: {\n          this.stateInSFCRootTagName(c);\n          break;\n        }\n        case 9: {\n          this.stateInClosingTagName(c);\n          break;\n        }\n        case 5: {\n          this.stateBeforeTagName(c);\n          break;\n        }\n        case 17: {\n          this.stateAfterAttrName(c);\n          break;\n        }\n        case 20: {\n          this.stateInAttrValueSingleQuotes(c);\n          break;\n        }\n        case 18: {\n          this.stateBeforeAttrValue(c);\n          break;\n        }\n        case 8: {\n          this.stateBeforeClosingTagName(c);\n          break;\n        }\n        case 10: {\n          this.stateAfterClosingTagName(c);\n          break;\n        }\n        case 29: {\n          this.stateBeforeSpecialS(c);\n          break;\n        }\n        case 30: {\n          this.stateBeforeSpecialT(c);\n          break;\n        }\n        case 21: {\n          this.stateInAttrValueNoQuotes(c);\n          break;\n        }\n        case 7: {\n          this.stateInSelfClosingTag(c);\n          break;\n        }\n        case 23: {\n          this.stateInDeclaration(c);\n          break;\n        }\n        case 22: {\n          this.stateBeforeDeclaration(c);\n          break;\n        }\n        case 25: {\n          this.stateBeforeComment(c);\n          break;\n        }\n        case 24: {\n          this.stateInProcessingInstruction(c);\n          break;\n        }\n        case 33: {\n          this.stateInEntity();\n          break;\n        }\n      }\n      this.index++;\n    }\n    this.cleanup();\n    this.finish();\n  }\n  /**\n   * Remove data that has already been consumed from the buffer.\n   */\n  cleanup() {\n    if (this.sectionStart !== this.index) {\n      if (this.state === 1 || this.state === 32 && this.sequenceIndex === 0) {\n        this.cbs.ontext(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      } else if (this.state === 19 || this.state === 20 || this.state === 21) {\n        this.cbs.onattribdata(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      }\n    }\n  }\n  finish() {\n    if (this.state === 33) {\n      this.entityDecoder.end();\n      this.state = this.baseState;\n    }\n    this.handleTrailingData();\n    this.cbs.onend();\n  }\n  /** Handle any trailing data. */\n  handleTrailingData() {\n    const endIndex = this.buffer.length;\n    if (this.sectionStart >= endIndex) {\n      return;\n    }\n    if (this.state === 28) {\n      if (this.currentSequence === Sequences.CdataEnd) {\n        this.cbs.oncdata(this.sectionStart, endIndex);\n      } else {\n        this.cbs.oncomment(this.sectionStart, endIndex);\n      }\n    } else if (this.state === 6 || this.state === 11 || this.state === 18 || this.state === 17 || this.state === 12 || this.state === 13 || this.state === 14 || this.state === 15 || this.state === 16 || this.state === 20 || this.state === 19 || this.state === 21 || this.state === 9) ; else {\n      this.cbs.ontext(this.sectionStart, endIndex);\n    }\n  }\n  emitCodePoint(cp, consumed) {\n    {\n      if (this.baseState !== 1 && this.baseState !== 32) {\n        if (this.sectionStart < this.entityStart) {\n          this.cbs.onattribdata(this.sectionStart, this.entityStart);\n        }\n        this.sectionStart = this.entityStart + consumed;\n        this.index = this.sectionStart - 1;\n        this.cbs.onattribentity(\n          decode_js.fromCodePoint(cp),\n          this.entityStart,\n          this.sectionStart\n        );\n      } else {\n        if (this.sectionStart < this.entityStart) {\n          this.cbs.ontext(this.sectionStart, this.entityStart);\n        }\n        this.sectionStart = this.entityStart + consumed;\n        this.index = this.sectionStart - 1;\n        this.cbs.ontextentity(\n          decode_js.fromCodePoint(cp),\n          this.entityStart,\n          this.sectionStart\n        );\n      }\n    }\n  }\n}\n\nconst CompilerDeprecationTypes = {\n  \"COMPILER_IS_ON_ELEMENT\": \"COMPILER_IS_ON_ELEMENT\",\n  \"COMPILER_V_BIND_SYNC\": \"COMPILER_V_BIND_SYNC\",\n  \"COMPILER_V_BIND_OBJECT_ORDER\": \"COMPILER_V_BIND_OBJECT_ORDER\",\n  \"COMPILER_V_ON_NATIVE\": \"COMPILER_V_ON_NATIVE\",\n  \"COMPILER_V_IF_V_FOR_PRECEDENCE\": \"COMPILER_V_IF_V_FOR_PRECEDENCE\",\n  \"COMPILER_NATIVE_TEMPLATE\": \"COMPILER_NATIVE_TEMPLATE\",\n  \"COMPILER_INLINE_TEMPLATE\": \"COMPILER_INLINE_TEMPLATE\",\n  \"COMPILER_FILTERS\": \"COMPILER_FILTERS\"\n};\nconst deprecationData = {\n  [\"COMPILER_IS_ON_ELEMENT\"]: {\n    message: `Platform-native elements with \"is\" prop will no longer be treated as components in Vue 3 unless the \"is\" value is explicitly prefixed with \"vue:\".`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/custom-elements-interop.html`\n  },\n  [\"COMPILER_V_BIND_SYNC\"]: {\n    message: (key) => `.sync modifier for v-bind has been removed. Use v-model with argument instead. \\`v-bind:${key}.sync\\` should be changed to \\`v-model:${key}\\`.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-model.html`\n  },\n  [\"COMPILER_V_BIND_OBJECT_ORDER\"]: {\n    message: `v-bind=\"obj\" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-bind.html`\n  },\n  [\"COMPILER_V_ON_NATIVE\"]: {\n    message: `.native modifier for v-on has been removed as is no longer necessary.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html`\n  },\n  [\"COMPILER_V_IF_V_FOR_PRECEDENCE\"]: {\n    message: `v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with <template> tags or use a computed property that filters v-for data source.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/v-if-v-for.html`\n  },\n  [\"COMPILER_NATIVE_TEMPLATE\"]: {\n    message: `<template> with no special directives will render as a native template element instead of its inner content in Vue 3.`\n  },\n  [\"COMPILER_INLINE_TEMPLATE\"]: {\n    message: `\"inline-template\" has been removed in Vue 3.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/inline-template-attribute.html`\n  },\n  [\"COMPILER_FILTERS\"]: {\n    message: `filters have been removed in Vue 3. The \"|\" symbol will be treated as native JavaScript bitwise OR operator. Use method calls or computed properties instead.`,\n    link: `https://v3-migration.vuejs.org/breaking-changes/filters.html`\n  }\n};\nfunction getCompatValue(key, { compatConfig }) {\n  const value = compatConfig && compatConfig[key];\n  if (key === \"MODE\") {\n    return value || 3;\n  } else {\n    return value;\n  }\n}\nfunction isCompatEnabled(key, context) {\n  const mode = getCompatValue(\"MODE\", context);\n  const value = getCompatValue(key, context);\n  return mode === 3 ? value === true : value !== false;\n}\nfunction checkCompatEnabled(key, context, loc, ...args) {\n  const enabled = isCompatEnabled(key, context);\n  return enabled;\n}\nfunction warnDeprecation(key, context, loc, ...args) {\n  const val = getCompatValue(key, context);\n  if (val === \"suppress-warning\") {\n    return;\n  }\n  const { message, link } = deprecationData[key];\n  const msg = `(deprecation ${key}) ${typeof message === \"function\" ? message(...args) : message}${link ? `\n  Details: ${link}` : ``}`;\n  const err = new SyntaxError(msg);\n  err.code = key;\n  if (loc) err.loc = loc;\n  context.onWarn(err);\n}\n\nfunction defaultOnError(error) {\n  throw error;\n}\nfunction defaultOnWarn(msg) {\n}\nfunction createCompilerError(code, loc, messages, additionalMessage) {\n  const msg = (messages || errorMessages)[code] + (additionalMessage || ``) ;\n  const error = new SyntaxError(String(msg));\n  error.code = code;\n  error.loc = loc;\n  return error;\n}\nconst ErrorCodes = {\n  \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\": 0,\n  \"0\": \"ABRUPT_CLOSING_OF_EMPTY_COMMENT\",\n  \"CDATA_IN_HTML_CONTENT\": 1,\n  \"1\": \"CDATA_IN_HTML_CONTENT\",\n  \"DUPLICATE_ATTRIBUTE\": 2,\n  \"2\": \"DUPLICATE_ATTRIBUTE\",\n  \"END_TAG_WITH_ATTRIBUTES\": 3,\n  \"3\": \"END_TAG_WITH_ATTRIBUTES\",\n  \"END_TAG_WITH_TRAILING_SOLIDUS\": 4,\n  \"4\": \"END_TAG_WITH_TRAILING_SOLIDUS\",\n  \"EOF_BEFORE_TAG_NAME\": 5,\n  \"5\": \"EOF_BEFORE_TAG_NAME\",\n  \"EOF_IN_CDATA\": 6,\n  \"6\": \"EOF_IN_CDATA\",\n  \"EOF_IN_COMMENT\": 7,\n  \"7\": \"EOF_IN_COMMENT\",\n  \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\": 8,\n  \"8\": \"EOF_IN_SCRIPT_HTML_COMMENT_LIKE_TEXT\",\n  \"EOF_IN_TAG\": 9,\n  \"9\": \"EOF_IN_TAG\",\n  \"INCORRECTLY_CLOSED_COMMENT\": 10,\n  \"10\": \"INCORRECTLY_CLOSED_COMMENT\",\n  \"INCORRECTLY_OPENED_COMMENT\": 11,\n  \"11\": \"INCORRECTLY_OPENED_COMMENT\",\n  \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\": 12,\n  \"12\": \"INVALID_FIRST_CHARACTER_OF_TAG_NAME\",\n  \"MISSING_ATTRIBUTE_VALUE\": 13,\n  \"13\": \"MISSING_ATTRIBUTE_VALUE\",\n  \"MISSING_END_TAG_NAME\": 14,\n  \"14\": \"MISSING_END_TAG_NAME\",\n  \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\": 15,\n  \"15\": \"MISSING_WHITESPACE_BETWEEN_ATTRIBUTES\",\n  \"NESTED_COMMENT\": 16,\n  \"16\": \"NESTED_COMMENT\",\n  \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\": 17,\n  \"17\": \"UNEXPECTED_CHARACTER_IN_ATTRIBUTE_NAME\",\n  \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\": 18,\n  \"18\": \"UNEXPECTED_CHARACTER_IN_UNQUOTED_ATTRIBUTE_VALUE\",\n  \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\": 19,\n  \"19\": \"UNEXPECTED_EQUALS_SIGN_BEFORE_ATTRIBUTE_NAME\",\n  \"UNEXPECTED_NULL_CHARACTER\": 20,\n  \"20\": \"UNEXPECTED_NULL_CHARACTER\",\n  \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\": 21,\n  \"21\": \"UNEXPECTED_QUESTION_MARK_INSTEAD_OF_TAG_NAME\",\n  \"UNEXPECTED_SOLIDUS_IN_TAG\": 22,\n  \"22\": \"UNEXPECTED_SOLIDUS_IN_TAG\",\n  \"X_INVALID_END_TAG\": 23,\n  \"23\": \"X_INVALID_END_TAG\",\n  \"X_MISSING_END_TAG\": 24,\n  \"24\": \"X_MISSING_END_TAG\",\n  \"X_MISSING_INTERPOLATION_END\": 25,\n  \"25\": \"X_MISSING_INTERPOLATION_END\",\n  \"X_MISSING_DIRECTIVE_NAME\": 26,\n  \"26\": \"X_MISSING_DIRECTIVE_NAME\",\n  \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\": 27,\n  \"27\": \"X_MISSING_DYNAMIC_DIRECTIVE_ARGUMENT_END\",\n  \"X_V_IF_NO_EXPRESSION\": 28,\n  \"28\": \"X_V_IF_NO_EXPRESSION\",\n  \"X_V_IF_SAME_KEY\": 29,\n  \"29\": \"X_V_IF_SAME_KEY\",\n  \"X_V_ELSE_NO_ADJACENT_IF\": 30,\n  \"30\": \"X_V_ELSE_NO_ADJACENT_IF\",\n  \"X_V_FOR_NO_EXPRESSION\": 31,\n  \"31\": \"X_V_FOR_NO_EXPRESSION\",\n  \"X_V_FOR_MALFORMED_EXPRESSION\": 32,\n  \"32\": \"X_V_FOR_MALFORMED_EXPRESSION\",\n  \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\": 33,\n  \"33\": \"X_V_FOR_TEMPLATE_KEY_PLACEMENT\",\n  \"X_V_BIND_NO_EXPRESSION\": 34,\n  \"34\": \"X_V_BIND_NO_EXPRESSION\",\n  \"X_V_ON_NO_EXPRESSION\": 35,\n  \"35\": \"X_V_ON_NO_EXPRESSION\",\n  \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\": 36,\n  \"36\": \"X_V_SLOT_UNEXPECTED_DIRECTIVE_ON_SLOT_OUTLET\",\n  \"X_V_SLOT_MIXED_SLOT_USAGE\": 37,\n  \"37\": \"X_V_SLOT_MIXED_SLOT_USAGE\",\n  \"X_V_SLOT_DUPLICATE_SLOT_NAMES\": 38,\n  \"38\": \"X_V_SLOT_DUPLICATE_SLOT_NAMES\",\n  \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\": 39,\n  \"39\": \"X_V_SLOT_EXTRANEOUS_DEFAULT_SLOT_CHILDREN\",\n  \"X_V_SLOT_MISPLACED\": 40,\n  \"40\": \"X_V_SLOT_MISPLACED\",\n  \"X_V_MODEL_NO_EXPRESSION\": 41,\n  \"41\": \"X_V_MODEL_NO_EXPRESSION\",\n  \"X_V_MODEL_MALFORMED_EXPRESSION\": 42,\n  \"42\": \"X_V_MODEL_MALFORMED_EXPRESSION\",\n  \"X_V_MODEL_ON_SCOPE_VARIABLE\": 43,\n  \"43\": \"X_V_MODEL_ON_SCOPE_VARIABLE\",\n  \"X_V_MODEL_ON_PROPS\": 44,\n  \"44\": \"X_V_MODEL_ON_PROPS\",\n  \"X_INVALID_EXPRESSION\": 45,\n  \"45\": \"X_INVALID_EXPRESSION\",\n  \"X_KEEP_ALIVE_INVALID_CHILDREN\": 46,\n  \"46\": \"X_KEEP_ALIVE_INVALID_CHILDREN\",\n  \"X_PREFIX_ID_NOT_SUPPORTED\": 47,\n  \"47\": \"X_PREFIX_ID_NOT_SUPPORTED\",\n  \"X_MODULE_MODE_NOT_SUPPORTED\": 48,\n  \"48\": \"X_MODULE_MODE_NOT_SUPPORTED\",\n  \"X_CACHE_HANDLER_NOT_SUPPORTED\": 49,\n  \"49\": \"X_CACHE_HANDLER_NOT_SUPPORTED\",\n  \"X_SCOPE_ID_NOT_SUPPORTED\": 50,\n  \"50\": \"X_SCOPE_ID_NOT_SUPPORTED\",\n  \"X_VNODE_HOOKS\": 51,\n  \"51\": \"X_VNODE_HOOKS\",\n  \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\": 52,\n  \"52\": \"X_V_BIND_INVALID_SAME_NAME_ARGUMENT\",\n  \"__EXTEND_POINT__\": 53,\n  \"53\": \"__EXTEND_POINT__\"\n};\nconst errorMessages = {\n  // parse errors\n  [0]: \"Illegal comment.\",\n  [1]: \"CDATA section is allowed only in XML context.\",\n  [2]: \"Duplicate attribute.\",\n  [3]: \"End tag cannot have attributes.\",\n  [4]: \"Illegal '/' in tags.\",\n  [5]: \"Unexpected EOF in tag.\",\n  [6]: \"Unexpected EOF in CDATA section.\",\n  [7]: \"Unexpected EOF in comment.\",\n  [8]: \"Unexpected EOF in script.\",\n  [9]: \"Unexpected EOF in tag.\",\n  [10]: \"Incorrectly closed comment.\",\n  [11]: \"Incorrectly opened comment.\",\n  [12]: \"Illegal tag name. Use '&lt;' to print '<'.\",\n  [13]: \"Attribute value was expected.\",\n  [14]: \"End tag name was expected.\",\n  [15]: \"Whitespace was expected.\",\n  [16]: \"Unexpected '<!--' in comment.\",\n  [17]: `Attribute name cannot contain U+0022 (\"), U+0027 ('), and U+003C (<).`,\n  [18]: \"Unquoted attribute value cannot contain U+0022 (\\\"), U+0027 ('), U+003C (<), U+003D (=), and U+0060 (`).\",\n  [19]: \"Attribute name cannot start with '='.\",\n  [21]: \"'<?' is allowed only in XML context.\",\n  [20]: `Unexpected null character.`,\n  [22]: \"Illegal '/' in tags.\",\n  // Vue-specific parse errors\n  [23]: \"Invalid end tag.\",\n  [24]: \"Element is missing end tag.\",\n  [25]: \"Interpolation end sign was not found.\",\n  [27]: \"End bracket for dynamic directive argument was not found. Note that dynamic directive argument cannot contain spaces.\",\n  [26]: \"Legal directive name was expected.\",\n  // transform errors\n  [28]: `v-if/v-else-if is missing expression.`,\n  [29]: `v-if/else branches must use unique keys.`,\n  [30]: `v-else/v-else-if has no adjacent v-if or v-else-if.`,\n  [31]: `v-for is missing expression.`,\n  [32]: `v-for has invalid expression.`,\n  [33]: `<template v-for> key should be placed on the <template> tag.`,\n  [34]: `v-bind is missing expression.`,\n  [52]: `v-bind with same-name shorthand only allows static argument.`,\n  [35]: `v-on is missing expression.`,\n  [36]: `Unexpected custom directive on <slot> outlet.`,\n  [37]: `Mixed v-slot usage on both the component and nested <template>. When there are multiple named slots, all slots should use <template> syntax to avoid scope ambiguity.`,\n  [38]: `Duplicate slot names found. `,\n  [39]: `Extraneous children found when component already has explicitly named default slot. These children will be ignored.`,\n  [40]: `v-slot can only be used on components or <template> tags.`,\n  [41]: `v-model is missing expression.`,\n  [42]: `v-model value must be a valid JavaScript member expression.`,\n  [43]: `v-model cannot be used on v-for or v-slot scope variables because they are not writable.`,\n  [44]: `v-model cannot be used on a prop, because local prop bindings are not writable.\nUse a v-bind binding combined with a v-on listener that emits update:x event instead.`,\n  [45]: `Error parsing JavaScript expression: `,\n  [46]: `<KeepAlive> expects exactly one child component.`,\n  [51]: `@vnode-* hooks in templates are no longer supported. Use the vue: prefix instead. For example, @vnode-mounted should be changed to @vue:mounted. @vnode-* hooks support has been removed in 3.4.`,\n  // generic errors\n  [47]: `\"prefixIdentifiers\" option is not supported in this build of compiler.`,\n  [48]: `ES module mode is not supported in this build of compiler.`,\n  [49]: `\"cacheHandlers\" option is only supported when the \"prefixIdentifiers\" option is enabled.`,\n  [50]: `\"scopeId\" option is only supported in module mode.`,\n  // just to fulfill types\n  [53]: ``\n};\n\nfunction walkIdentifiers(root, onIdentifier, includeAll = false, parentStack = [], knownIds = /* @__PURE__ */ Object.create(null)) {\n  const rootExp = root.type === \"Program\" ? root.body[0].type === \"ExpressionStatement\" && root.body[0].expression : root;\n  estreeWalker.walk(root, {\n    enter(node, parent) {\n      parent && parentStack.push(parent);\n      if (parent && parent.type.startsWith(\"TS\") && !TS_NODE_TYPES.includes(parent.type)) {\n        return this.skip();\n      }\n      if (node.type === \"Identifier\") {\n        const isLocal = !!knownIds[node.name];\n        const isRefed = isReferencedIdentifier(node, parent, parentStack);\n        if (includeAll || isRefed && !isLocal) {\n          onIdentifier(node, parent, parentStack, isRefed, isLocal);\n        }\n      } else if (node.type === \"ObjectProperty\" && // eslint-disable-next-line no-restricted-syntax\n      (parent == null ? void 0 : parent.type) === \"ObjectPattern\") {\n        node.inPattern = true;\n      } else if (isFunctionType(node)) {\n        if (node.scopeIds) {\n          node.scopeIds.forEach((id) => markKnownIds(id, knownIds));\n        } else {\n          walkFunctionParams(\n            node,\n            (id) => markScopeIdentifier(node, id, knownIds)\n          );\n        }\n      } else if (node.type === \"BlockStatement\") {\n        if (node.scopeIds) {\n          node.scopeIds.forEach((id) => markKnownIds(id, knownIds));\n        } else {\n          walkBlockDeclarations(\n            node,\n            (id) => markScopeIdentifier(node, id, knownIds)\n          );\n        }\n      } else if (node.type === \"CatchClause\" && node.param) {\n        for (const id of extractIdentifiers(node.param)) {\n          markScopeIdentifier(node, id, knownIds);\n        }\n      } else if (isForStatement(node)) {\n        walkForStatement(\n          node,\n          false,\n          (id) => markScopeIdentifier(node, id, knownIds)\n        );\n      }\n    },\n    leave(node, parent) {\n      parent && parentStack.pop();\n      if (node !== rootExp && node.scopeIds) {\n        for (const id of node.scopeIds) {\n          knownIds[id]--;\n          if (knownIds[id] === 0) {\n            delete knownIds[id];\n          }\n        }\n      }\n    }\n  });\n}\nfunction isReferencedIdentifier(id, parent, parentStack) {\n  if (!parent) {\n    return true;\n  }\n  if (id.name === \"arguments\") {\n    return false;\n  }\n  if (isReferenced(id, parent, parentStack[parentStack.length - 2])) {\n    return true;\n  }\n  switch (parent.type) {\n    case \"AssignmentExpression\":\n    case \"AssignmentPattern\":\n      return true;\n    case \"ObjectProperty\":\n      return parent.key !== id && isInDestructureAssignment(parent, parentStack);\n    case \"ArrayPattern\":\n      return isInDestructureAssignment(parent, parentStack);\n  }\n  return false;\n}\nfunction isInDestructureAssignment(parent, parentStack) {\n  if (parent && (parent.type === \"ObjectProperty\" || parent.type === \"ArrayPattern\")) {\n    let i = parentStack.length;\n    while (i--) {\n      const p = parentStack[i];\n      if (p.type === \"AssignmentExpression\") {\n        return true;\n      } else if (p.type !== \"ObjectProperty\" && !p.type.endsWith(\"Pattern\")) {\n        break;\n      }\n    }\n  }\n  return false;\n}\nfunction isInNewExpression(parentStack) {\n  let i = parentStack.length;\n  while (i--) {\n    const p = parentStack[i];\n    if (p.type === \"NewExpression\") {\n      return true;\n    } else if (p.type !== \"MemberExpression\") {\n      break;\n    }\n  }\n  return false;\n}\nfunction walkFunctionParams(node, onIdent) {\n  for (const p of node.params) {\n    for (const id of extractIdentifiers(p)) {\n      onIdent(id);\n    }\n  }\n}\nfunction walkBlockDeclarations(block, onIdent) {\n  for (const stmt of block.body) {\n    if (stmt.type === \"VariableDeclaration\") {\n      if (stmt.declare) continue;\n      for (const decl of stmt.declarations) {\n        for (const id of extractIdentifiers(decl.id)) {\n          onIdent(id);\n        }\n      }\n    } else if (stmt.type === \"FunctionDeclaration\" || stmt.type === \"ClassDeclaration\") {\n      if (stmt.declare || !stmt.id) continue;\n      onIdent(stmt.id);\n    } else if (isForStatement(stmt)) {\n      walkForStatement(stmt, true, onIdent);\n    }\n  }\n}\nfunction isForStatement(stmt) {\n  return stmt.type === \"ForOfStatement\" || stmt.type === \"ForInStatement\" || stmt.type === \"ForStatement\";\n}\nfunction walkForStatement(stmt, isVar, onIdent) {\n  const variable = stmt.type === \"ForStatement\" ? stmt.init : stmt.left;\n  if (variable && variable.type === \"VariableDeclaration\" && (variable.kind === \"var\" ? isVar : !isVar)) {\n    for (const decl of variable.declarations) {\n      for (const id of extractIdentifiers(decl.id)) {\n        onIdent(id);\n      }\n    }\n  }\n}\nfunction extractIdentifiers(param, nodes = []) {\n  switch (param.type) {\n    case \"Identifier\":\n      nodes.push(param);\n      break;\n    case \"MemberExpression\":\n      let object = param;\n      while (object.type === \"MemberExpression\") {\n        object = object.object;\n      }\n      nodes.push(object);\n      break;\n    case \"ObjectPattern\":\n      for (const prop of param.properties) {\n        if (prop.type === \"RestElement\") {\n          extractIdentifiers(prop.argument, nodes);\n        } else {\n          extractIdentifiers(prop.value, nodes);\n        }\n      }\n      break;\n    case \"ArrayPattern\":\n      param.elements.forEach((element) => {\n        if (element) extractIdentifiers(element, nodes);\n      });\n      break;\n    case \"RestElement\":\n      extractIdentifiers(param.argument, nodes);\n      break;\n    case \"AssignmentPattern\":\n      extractIdentifiers(param.left, nodes);\n      break;\n  }\n  return nodes;\n}\nfunction markKnownIds(name, knownIds) {\n  if (name in knownIds) {\n    knownIds[name]++;\n  } else {\n    knownIds[name] = 1;\n  }\n}\nfunction markScopeIdentifier(node, child, knownIds) {\n  const { name } = child;\n  if (node.scopeIds && node.scopeIds.has(name)) {\n    return;\n  }\n  markKnownIds(name, knownIds);\n  (node.scopeIds || (node.scopeIds = /* @__PURE__ */ new Set())).add(name);\n}\nconst isFunctionType = (node) => {\n  return /Function(?:Expression|Declaration)$|Method$/.test(node.type);\n};\nconst isStaticProperty = (node) => node && (node.type === \"ObjectProperty\" || node.type === \"ObjectMethod\") && !node.computed;\nconst isStaticPropertyKey = (node, parent) => isStaticProperty(parent) && parent.key === node;\nfunction isReferenced(node, parent, grandparent) {\n  switch (parent.type) {\n    // yes: PARENT[NODE]\n    // yes: NODE.child\n    // no: parent.NODE\n    case \"MemberExpression\":\n    case \"OptionalMemberExpression\":\n      if (parent.property === node) {\n        return !!parent.computed;\n      }\n      return parent.object === node;\n    case \"JSXMemberExpression\":\n      return parent.object === node;\n    // no: let NODE = init;\n    // yes: let id = NODE;\n    case \"VariableDeclarator\":\n      return parent.init === node;\n    // yes: () => NODE\n    // no: (NODE) => {}\n    case \"ArrowFunctionExpression\":\n      return parent.body === node;\n    // no: class { #NODE; }\n    // no: class { get #NODE() {} }\n    // no: class { #NODE() {} }\n    // no: class { fn() { return this.#NODE; } }\n    case \"PrivateName\":\n      return false;\n    // no: class { NODE() {} }\n    // yes: class { [NODE]() {} }\n    // no: class { foo(NODE) {} }\n    case \"ClassMethod\":\n    case \"ClassPrivateMethod\":\n    case \"ObjectMethod\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return false;\n    // yes: { [NODE]: \"\" }\n    // no: { NODE: \"\" }\n    // depends: { NODE }\n    // depends: { key: NODE }\n    case \"ObjectProperty\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return !grandparent || grandparent.type !== \"ObjectPattern\";\n    // no: class { NODE = value; }\n    // yes: class { [NODE] = value; }\n    // yes: class { key = NODE; }\n    case \"ClassProperty\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return true;\n    case \"ClassPrivateProperty\":\n      return parent.key !== node;\n    // no: class NODE {}\n    // yes: class Foo extends NODE {}\n    case \"ClassDeclaration\":\n    case \"ClassExpression\":\n      return parent.superClass === node;\n    // yes: left = NODE;\n    // no: NODE = right;\n    case \"AssignmentExpression\":\n      return parent.right === node;\n    // no: [NODE = foo] = [];\n    // yes: [foo = NODE] = [];\n    case \"AssignmentPattern\":\n      return parent.right === node;\n    // no: NODE: for (;;) {}\n    case \"LabeledStatement\":\n      return false;\n    // no: try {} catch (NODE) {}\n    case \"CatchClause\":\n      return false;\n    // no: function foo(...NODE) {}\n    case \"RestElement\":\n      return false;\n    case \"BreakStatement\":\n    case \"ContinueStatement\":\n      return false;\n    // no: function NODE() {}\n    // no: function foo(NODE) {}\n    case \"FunctionDeclaration\":\n    case \"FunctionExpression\":\n      return false;\n    // no: export NODE from \"foo\";\n    // no: export * as NODE from \"foo\";\n    case \"ExportNamespaceSpecifier\":\n    case \"ExportDefaultSpecifier\":\n      return false;\n    // no: export { foo as NODE };\n    // yes: export { NODE as foo };\n    // no: export { NODE as foo } from \"foo\";\n    case \"ExportSpecifier\":\n      if (grandparent == null ? void 0 : grandparent.source) {\n        return false;\n      }\n      return parent.local === node;\n    // no: import NODE from \"foo\";\n    // no: import * as NODE from \"foo\";\n    // no: import { NODE as foo } from \"foo\";\n    // no: import { foo as NODE } from \"foo\";\n    // no: import NODE from \"bar\";\n    case \"ImportDefaultSpecifier\":\n    case \"ImportNamespaceSpecifier\":\n    case \"ImportSpecifier\":\n      return false;\n    // no: import \"foo\" assert { NODE: \"json\" }\n    case \"ImportAttribute\":\n      return false;\n    // no: <div NODE=\"foo\" />\n    case \"JSXAttribute\":\n      return false;\n    // no: [NODE] = [];\n    // no: ({ NODE }) = [];\n    case \"ObjectPattern\":\n    case \"ArrayPattern\":\n      return false;\n    // no: new.NODE\n    // no: NODE.target\n    case \"MetaProperty\":\n      return false;\n    // yes: type X = { someProperty: NODE }\n    // no: type X = { NODE: OtherType }\n    case \"ObjectTypeProperty\":\n      return parent.key !== node;\n    // yes: enum X { Foo = NODE }\n    // no: enum X { NODE }\n    case \"TSEnumMember\":\n      return parent.id !== node;\n    // yes: { [NODE]: value }\n    // no: { NODE: value }\n    case \"TSPropertySignature\":\n      if (parent.key === node) {\n        return !!parent.computed;\n      }\n      return true;\n  }\n  return true;\n}\nconst TS_NODE_TYPES = [\n  \"TSAsExpression\",\n  // foo as number\n  \"TSTypeAssertion\",\n  // (<number>foo)\n  \"TSNonNullExpression\",\n  // foo!\n  \"TSInstantiationExpression\",\n  // foo<string>\n  \"TSSatisfiesExpression\"\n  // foo satisfies T\n];\nfunction unwrapTSNode(node) {\n  if (TS_NODE_TYPES.includes(node.type)) {\n    return unwrapTSNode(node.expression);\n  } else {\n    return node;\n  }\n}\n\nconst isStaticExp = (p) => p.type === 4 && p.isStatic;\nfunction isCoreComponent(tag) {\n  switch (tag) {\n    case \"Teleport\":\n    case \"teleport\":\n      return TELEPORT;\n    case \"Suspense\":\n    case \"suspense\":\n      return SUSPENSE;\n    case \"KeepAlive\":\n    case \"keep-alive\":\n      return KEEP_ALIVE;\n    case \"BaseTransition\":\n    case \"base-transition\":\n      return BASE_TRANSITION;\n  }\n}\nconst nonIdentifierRE = /^$|^\\d|[^\\$\\w\\xA0-\\uFFFF]/;\nconst isSimpleIdentifier = (name) => !nonIdentifierRE.test(name);\nconst validFirstIdentCharRE = /[A-Za-z_$\\xA0-\\uFFFF]/;\nconst validIdentCharRE = /[\\.\\?\\w$\\xA0-\\uFFFF]/;\nconst whitespaceRE = /\\s+[.[]\\s*|\\s*[.[]\\s+/g;\nconst getExpSource = (exp) => exp.type === 4 ? exp.content : exp.loc.source;\nconst isMemberExpressionBrowser = (exp) => {\n  const path = getExpSource(exp).trim().replace(whitespaceRE, (s) => s.trim());\n  let state = 0 /* inMemberExp */;\n  let stateStack = [];\n  let currentOpenBracketCount = 0;\n  let currentOpenParensCount = 0;\n  let currentStringType = null;\n  for (let i = 0; i < path.length; i++) {\n    const char = path.charAt(i);\n    switch (state) {\n      case 0 /* inMemberExp */:\n        if (char === \"[\") {\n          stateStack.push(state);\n          state = 1 /* inBrackets */;\n          currentOpenBracketCount++;\n        } else if (char === \"(\") {\n          stateStack.push(state);\n          state = 2 /* inParens */;\n          currentOpenParensCount++;\n        } else if (!(i === 0 ? validFirstIdentCharRE : validIdentCharRE).test(char)) {\n          return false;\n        }\n        break;\n      case 1 /* inBrackets */:\n        if (char === `'` || char === `\"` || char === \"`\") {\n          stateStack.push(state);\n          state = 3 /* inString */;\n          currentStringType = char;\n        } else if (char === `[`) {\n          currentOpenBracketCount++;\n        } else if (char === `]`) {\n          if (!--currentOpenBracketCount) {\n            state = stateStack.pop();\n          }\n        }\n        break;\n      case 2 /* inParens */:\n        if (char === `'` || char === `\"` || char === \"`\") {\n          stateStack.push(state);\n          state = 3 /* inString */;\n          currentStringType = char;\n        } else if (char === `(`) {\n          currentOpenParensCount++;\n        } else if (char === `)`) {\n          if (i === path.length - 1) {\n            return false;\n          }\n          if (!--currentOpenParensCount) {\n            state = stateStack.pop();\n          }\n        }\n        break;\n      case 3 /* inString */:\n        if (char === currentStringType) {\n          state = stateStack.pop();\n          currentStringType = null;\n        }\n        break;\n    }\n  }\n  return !currentOpenBracketCount && !currentOpenParensCount;\n};\nconst isMemberExpressionNode = (exp, context) => {\n  try {\n    let ret = exp.ast || parser.parseExpression(getExpSource(exp), {\n      plugins: context.expressionPlugins ? [...context.expressionPlugins, \"typescript\"] : [\"typescript\"]\n    });\n    ret = unwrapTSNode(ret);\n    return ret.type === \"MemberExpression\" || ret.type === \"OptionalMemberExpression\" || ret.type === \"Identifier\" && ret.name !== \"undefined\";\n  } catch (e) {\n    return false;\n  }\n};\nconst isMemberExpression = isMemberExpressionNode;\nconst fnExpRE = /^\\s*(async\\s*)?(\\([^)]*?\\)|[\\w$_]+)\\s*(:[^=]+)?=>|^\\s*(async\\s+)?function(?:\\s+[\\w$]+)?\\s*\\(/;\nconst isFnExpressionBrowser = (exp) => fnExpRE.test(getExpSource(exp));\nconst isFnExpressionNode = (exp, context) => {\n  try {\n    let ret = exp.ast || parser.parseExpression(getExpSource(exp), {\n      plugins: context.expressionPlugins ? [...context.expressionPlugins, \"typescript\"] : [\"typescript\"]\n    });\n    if (ret.type === \"Program\") {\n      ret = ret.body[0];\n      if (ret.type === \"ExpressionStatement\") {\n        ret = ret.expression;\n      }\n    }\n    ret = unwrapTSNode(ret);\n    return ret.type === \"FunctionExpression\" || ret.type === \"ArrowFunctionExpression\";\n  } catch (e) {\n    return false;\n  }\n};\nconst isFnExpression = isFnExpressionNode;\nfunction advancePositionWithClone(pos, source, numberOfCharacters = source.length) {\n  return advancePositionWithMutation(\n    {\n      offset: pos.offset,\n      line: pos.line,\n      column: pos.column\n    },\n    source,\n    numberOfCharacters\n  );\n}\nfunction advancePositionWithMutation(pos, source, numberOfCharacters = source.length) {\n  let linesCount = 0;\n  let lastNewLinePos = -1;\n  for (let i = 0; i < numberOfCharacters; i++) {\n    if (source.charCodeAt(i) === 10) {\n      linesCount++;\n      lastNewLinePos = i;\n    }\n  }\n  pos.offset += numberOfCharacters;\n  pos.line += linesCount;\n  pos.column = lastNewLinePos === -1 ? pos.column + numberOfCharacters : numberOfCharacters - lastNewLinePos;\n  return pos;\n}\nfunction assert(condition, msg) {\n  if (!condition) {\n    throw new Error(msg || `unexpected compiler condition`);\n  }\n}\nfunction findDir(node, name, allowEmpty = false) {\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 7 && (allowEmpty || p.exp) && (shared.isString(name) ? p.name === name : name.test(p.name))) {\n      return p;\n    }\n  }\n}\nfunction findProp(node, name, dynamicOnly = false, allowEmpty = false) {\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 6) {\n      if (dynamicOnly) continue;\n      if (p.name === name && (p.value || allowEmpty)) {\n        return p;\n      }\n    } else if (p.name === \"bind\" && (p.exp || allowEmpty) && isStaticArgOf(p.arg, name)) {\n      return p;\n    }\n  }\n}\nfunction isStaticArgOf(arg, name) {\n  return !!(arg && isStaticExp(arg) && arg.content === name);\n}\nfunction hasDynamicKeyVBind(node) {\n  return node.props.some(\n    (p) => p.type === 7 && p.name === \"bind\" && (!p.arg || // v-bind=\"obj\"\n    p.arg.type !== 4 || // v-bind:[_ctx.foo]\n    !p.arg.isStatic)\n    // v-bind:[foo]\n  );\n}\nfunction isText$1(node) {\n  return node.type === 5 || node.type === 2;\n}\nfunction isVPre(p) {\n  return p.type === 7 && p.name === \"pre\";\n}\nfunction isVSlot(p) {\n  return p.type === 7 && p.name === \"slot\";\n}\nfunction isTemplateNode(node) {\n  return node.type === 1 && node.tagType === 3;\n}\nfunction isSlotOutlet(node) {\n  return node.type === 1 && node.tagType === 2;\n}\nconst propsHelperSet = /* @__PURE__ */ new Set([NORMALIZE_PROPS, GUARD_REACTIVE_PROPS]);\nfunction getUnnormalizedProps(props, callPath = []) {\n  if (props && !shared.isString(props) && props.type === 14) {\n    const callee = props.callee;\n    if (!shared.isString(callee) && propsHelperSet.has(callee)) {\n      return getUnnormalizedProps(\n        props.arguments[0],\n        callPath.concat(props)\n      );\n    }\n  }\n  return [props, callPath];\n}\nfunction injectProp(node, prop, context) {\n  let propsWithInjection;\n  let props = node.type === 13 ? node.props : node.arguments[2];\n  let callPath = [];\n  let parentCall;\n  if (props && !shared.isString(props) && props.type === 14) {\n    const ret = getUnnormalizedProps(props);\n    props = ret[0];\n    callPath = ret[1];\n    parentCall = callPath[callPath.length - 1];\n  }\n  if (props == null || shared.isString(props)) {\n    propsWithInjection = createObjectExpression([prop]);\n  } else if (props.type === 14) {\n    const first = props.arguments[0];\n    if (!shared.isString(first) && first.type === 15) {\n      if (!hasProp(prop, first)) {\n        first.properties.unshift(prop);\n      }\n    } else {\n      if (props.callee === TO_HANDLERS) {\n        propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n          createObjectExpression([prop]),\n          props\n        ]);\n      } else {\n        props.arguments.unshift(createObjectExpression([prop]));\n      }\n    }\n    !propsWithInjection && (propsWithInjection = props);\n  } else if (props.type === 15) {\n    if (!hasProp(prop, props)) {\n      props.properties.unshift(prop);\n    }\n    propsWithInjection = props;\n  } else {\n    propsWithInjection = createCallExpression(context.helper(MERGE_PROPS), [\n      createObjectExpression([prop]),\n      props\n    ]);\n    if (parentCall && parentCall.callee === GUARD_REACTIVE_PROPS) {\n      parentCall = callPath[callPath.length - 2];\n    }\n  }\n  if (node.type === 13) {\n    if (parentCall) {\n      parentCall.arguments[0] = propsWithInjection;\n    } else {\n      node.props = propsWithInjection;\n    }\n  } else {\n    if (parentCall) {\n      parentCall.arguments[0] = propsWithInjection;\n    } else {\n      node.arguments[2] = propsWithInjection;\n    }\n  }\n}\nfunction hasProp(prop, props) {\n  let result = false;\n  if (prop.key.type === 4) {\n    const propKeyName = prop.key.content;\n    result = props.properties.some(\n      (p) => p.key.type === 4 && p.key.content === propKeyName\n    );\n  }\n  return result;\n}\nfunction toValidAssetId(name, type) {\n  return `_${type}_${name.replace(/[^\\w]/g, (searchValue, replaceValue) => {\n    return searchValue === \"-\" ? \"_\" : name.charCodeAt(replaceValue).toString();\n  })}`;\n}\nfunction hasScopeRef(node, ids) {\n  if (!node || Object.keys(ids).length === 0) {\n    return false;\n  }\n  switch (node.type) {\n    case 1:\n      for (let i = 0; i < node.props.length; i++) {\n        const p = node.props[i];\n        if (p.type === 7 && (hasScopeRef(p.arg, ids) || hasScopeRef(p.exp, ids))) {\n          return true;\n        }\n      }\n      return node.children.some((c) => hasScopeRef(c, ids));\n    case 11:\n      if (hasScopeRef(node.source, ids)) {\n        return true;\n      }\n      return node.children.some((c) => hasScopeRef(c, ids));\n    case 9:\n      return node.branches.some((b) => hasScopeRef(b, ids));\n    case 10:\n      if (hasScopeRef(node.condition, ids)) {\n        return true;\n      }\n      return node.children.some((c) => hasScopeRef(c, ids));\n    case 4:\n      return !node.isStatic && isSimpleIdentifier(node.content) && !!ids[node.content];\n    case 8:\n      return node.children.some((c) => shared.isObject(c) && hasScopeRef(c, ids));\n    case 5:\n    case 12:\n      return hasScopeRef(node.content, ids);\n    case 2:\n    case 3:\n    case 20:\n      return false;\n    default:\n      return false;\n  }\n}\nfunction getMemoedVNodeCall(node) {\n  if (node.type === 14 && node.callee === WITH_MEMO) {\n    return node.arguments[1].returns;\n  } else {\n    return node;\n  }\n}\nconst forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+(\\S[\\s\\S]*)/;\n\nconst defaultParserOptions = {\n  parseMode: \"base\",\n  ns: 0,\n  delimiters: [`{{`, `}}`],\n  getNamespace: () => 0,\n  isVoidTag: shared.NO,\n  isPreTag: shared.NO,\n  isIgnoreNewlineTag: shared.NO,\n  isCustomElement: shared.NO,\n  onError: defaultOnError,\n  onWarn: defaultOnWarn,\n  comments: false,\n  prefixIdentifiers: false\n};\nlet currentOptions = defaultParserOptions;\nlet currentRoot = null;\nlet currentInput = \"\";\nlet currentOpenTag = null;\nlet currentProp = null;\nlet currentAttrValue = \"\";\nlet currentAttrStartIndex = -1;\nlet currentAttrEndIndex = -1;\nlet inPre = 0;\nlet inVPre = false;\nlet currentVPreBoundary = null;\nconst stack = [];\nconst tokenizer = new Tokenizer(stack, {\n  onerr: emitError,\n  ontext(start, end) {\n    onText(getSlice(start, end), start, end);\n  },\n  ontextentity(char, start, end) {\n    onText(char, start, end);\n  },\n  oninterpolation(start, end) {\n    if (inVPre) {\n      return onText(getSlice(start, end), start, end);\n    }\n    let innerStart = start + tokenizer.delimiterOpen.length;\n    let innerEnd = end - tokenizer.delimiterClose.length;\n    while (isWhitespace(currentInput.charCodeAt(innerStart))) {\n      innerStart++;\n    }\n    while (isWhitespace(currentInput.charCodeAt(innerEnd - 1))) {\n      innerEnd--;\n    }\n    let exp = getSlice(innerStart, innerEnd);\n    if (exp.includes(\"&\")) {\n      {\n        exp = decode_js.decodeHTML(exp);\n      }\n    }\n    addNode({\n      type: 5,\n      content: createExp(exp, false, getLoc(innerStart, innerEnd)),\n      loc: getLoc(start, end)\n    });\n  },\n  onopentagname(start, end) {\n    const name = getSlice(start, end);\n    currentOpenTag = {\n      type: 1,\n      tag: name,\n      ns: currentOptions.getNamespace(name, stack[0], currentOptions.ns),\n      tagType: 0,\n      // will be refined on tag close\n      props: [],\n      children: [],\n      loc: getLoc(start - 1, end),\n      codegenNode: void 0\n    };\n  },\n  onopentagend(end) {\n    endOpenTag(end);\n  },\n  onclosetag(start, end) {\n    const name = getSlice(start, end);\n    if (!currentOptions.isVoidTag(name)) {\n      let found = false;\n      for (let i = 0; i < stack.length; i++) {\n        const e = stack[i];\n        if (e.tag.toLowerCase() === name.toLowerCase()) {\n          found = true;\n          if (i > 0) {\n            emitError(24, stack[0].loc.start.offset);\n          }\n          for (let j = 0; j <= i; j++) {\n            const el = stack.shift();\n            onCloseTag(el, end, j < i);\n          }\n          break;\n        }\n      }\n      if (!found) {\n        emitError(23, backTrack(start, 60));\n      }\n    }\n  },\n  onselfclosingtag(end) {\n    const name = currentOpenTag.tag;\n    currentOpenTag.isSelfClosing = true;\n    endOpenTag(end);\n    if (stack[0] && stack[0].tag === name) {\n      onCloseTag(stack.shift(), end);\n    }\n  },\n  onattribname(start, end) {\n    currentProp = {\n      type: 6,\n      name: getSlice(start, end),\n      nameLoc: getLoc(start, end),\n      value: void 0,\n      loc: getLoc(start)\n    };\n  },\n  ondirname(start, end) {\n    const raw = getSlice(start, end);\n    const name = raw === \".\" || raw === \":\" ? \"bind\" : raw === \"@\" ? \"on\" : raw === \"#\" ? \"slot\" : raw.slice(2);\n    if (!inVPre && name === \"\") {\n      emitError(26, start);\n    }\n    if (inVPre || name === \"\") {\n      currentProp = {\n        type: 6,\n        name: raw,\n        nameLoc: getLoc(start, end),\n        value: void 0,\n        loc: getLoc(start)\n      };\n    } else {\n      currentProp = {\n        type: 7,\n        name,\n        rawName: raw,\n        exp: void 0,\n        arg: void 0,\n        modifiers: raw === \".\" ? [createSimpleExpression(\"prop\")] : [],\n        loc: getLoc(start)\n      };\n      if (name === \"pre\") {\n        inVPre = tokenizer.inVPre = true;\n        currentVPreBoundary = currentOpenTag;\n        const props = currentOpenTag.props;\n        for (let i = 0; i < props.length; i++) {\n          if (props[i].type === 7) {\n            props[i] = dirToAttr(props[i]);\n          }\n        }\n      }\n    }\n  },\n  ondirarg(start, end) {\n    if (start === end) return;\n    const arg = getSlice(start, end);\n    if (inVPre && !isVPre(currentProp)) {\n      currentProp.name += arg;\n      setLocEnd(currentProp.nameLoc, end);\n    } else {\n      const isStatic = arg[0] !== `[`;\n      currentProp.arg = createExp(\n        isStatic ? arg : arg.slice(1, -1),\n        isStatic,\n        getLoc(start, end),\n        isStatic ? 3 : 0\n      );\n    }\n  },\n  ondirmodifier(start, end) {\n    const mod = getSlice(start, end);\n    if (inVPre && !isVPre(currentProp)) {\n      currentProp.name += \".\" + mod;\n      setLocEnd(currentProp.nameLoc, end);\n    } else if (currentProp.name === \"slot\") {\n      const arg = currentProp.arg;\n      if (arg) {\n        arg.content += \".\" + mod;\n        setLocEnd(arg.loc, end);\n      }\n    } else {\n      const exp = createSimpleExpression(mod, true, getLoc(start, end));\n      currentProp.modifiers.push(exp);\n    }\n  },\n  onattribdata(start, end) {\n    currentAttrValue += getSlice(start, end);\n    if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n    currentAttrEndIndex = end;\n  },\n  onattribentity(char, start, end) {\n    currentAttrValue += char;\n    if (currentAttrStartIndex < 0) currentAttrStartIndex = start;\n    currentAttrEndIndex = end;\n  },\n  onattribnameend(end) {\n    const start = currentProp.loc.start.offset;\n    const name = getSlice(start, end);\n    if (currentProp.type === 7) {\n      currentProp.rawName = name;\n    }\n    if (currentOpenTag.props.some(\n      (p) => (p.type === 7 ? p.rawName : p.name) === name\n    )) {\n      emitError(2, start);\n    }\n  },\n  onattribend(quote, end) {\n    if (currentOpenTag && currentProp) {\n      setLocEnd(currentProp.loc, end);\n      if (quote !== 0) {\n        if (currentProp.type === 6) {\n          if (currentProp.name === \"class\") {\n            currentAttrValue = condense(currentAttrValue).trim();\n          }\n          if (quote === 1 && !currentAttrValue) {\n            emitError(13, end);\n          }\n          currentProp.value = {\n            type: 2,\n            content: currentAttrValue,\n            loc: quote === 1 ? getLoc(currentAttrStartIndex, currentAttrEndIndex) : getLoc(currentAttrStartIndex - 1, currentAttrEndIndex + 1)\n          };\n          if (tokenizer.inSFCRoot && currentOpenTag.tag === \"template\" && currentProp.name === \"lang\" && currentAttrValue && currentAttrValue !== \"html\") {\n            tokenizer.enterRCDATA(toCharCodes(`</template`), 0);\n          }\n        } else {\n          let expParseMode = 0 /* Normal */;\n          {\n            if (currentProp.name === \"for\") {\n              expParseMode = 3 /* Skip */;\n            } else if (currentProp.name === \"slot\") {\n              expParseMode = 1 /* Params */;\n            } else if (currentProp.name === \"on\" && currentAttrValue.includes(\";\")) {\n              expParseMode = 2 /* Statements */;\n            }\n          }\n          currentProp.exp = createExp(\n            currentAttrValue,\n            false,\n            getLoc(currentAttrStartIndex, currentAttrEndIndex),\n            0,\n            expParseMode\n          );\n          if (currentProp.name === \"for\") {\n            currentProp.forParseResult = parseForExpression(currentProp.exp);\n          }\n          let syncIndex = -1;\n          if (currentProp.name === \"bind\" && (syncIndex = currentProp.modifiers.findIndex(\n            (mod) => mod.content === \"sync\"\n          )) > -1 && checkCompatEnabled(\n            \"COMPILER_V_BIND_SYNC\",\n            currentOptions,\n            currentProp.loc,\n            currentProp.arg.loc.source\n          )) {\n            currentProp.name = \"model\";\n            currentProp.modifiers.splice(syncIndex, 1);\n          }\n        }\n      }\n      if (currentProp.type !== 7 || currentProp.name !== \"pre\") {\n        currentOpenTag.props.push(currentProp);\n      }\n    }\n    currentAttrValue = \"\";\n    currentAttrStartIndex = currentAttrEndIndex = -1;\n  },\n  oncomment(start, end) {\n    if (currentOptions.comments) {\n      addNode({\n        type: 3,\n        content: getSlice(start, end),\n        loc: getLoc(start - 4, end + 3)\n      });\n    }\n  },\n  onend() {\n    const end = currentInput.length;\n    if (tokenizer.state !== 1) {\n      switch (tokenizer.state) {\n        case 5:\n        case 8:\n          emitError(5, end);\n          break;\n        case 3:\n        case 4:\n          emitError(\n            25,\n            tokenizer.sectionStart\n          );\n          break;\n        case 28:\n          if (tokenizer.currentSequence === Sequences.CdataEnd) {\n            emitError(6, end);\n          } else {\n            emitError(7, end);\n          }\n          break;\n        case 6:\n        case 7:\n        case 9:\n        case 11:\n        case 12:\n        case 13:\n        case 14:\n        case 15:\n        case 16:\n        case 17:\n        case 18:\n        case 19:\n        // \"\n        case 20:\n        // '\n        case 21:\n          emitError(9, end);\n          break;\n      }\n    }\n    for (let index = 0; index < stack.length; index++) {\n      onCloseTag(stack[index], end - 1);\n      emitError(24, stack[index].loc.start.offset);\n    }\n  },\n  oncdata(start, end) {\n    if (stack[0].ns !== 0) {\n      onText(getSlice(start, end), start, end);\n    } else {\n      emitError(1, start - 9);\n    }\n  },\n  onprocessinginstruction(start) {\n    if ((stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n      emitError(\n        21,\n        start - 1\n      );\n    }\n  }\n});\nconst forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nconst stripParensRE = /^\\(|\\)$/g;\nfunction parseForExpression(input) {\n  const loc = input.loc;\n  const exp = input.content;\n  const inMatch = exp.match(forAliasRE);\n  if (!inMatch) return;\n  const [, LHS, RHS] = inMatch;\n  const createAliasExpression = (content, offset, asParam = false) => {\n    const start = loc.start.offset + offset;\n    const end = start + content.length;\n    return createExp(\n      content,\n      false,\n      getLoc(start, end),\n      0,\n      asParam ? 1 /* Params */ : 0 /* Normal */\n    );\n  };\n  const result = {\n    source: createAliasExpression(RHS.trim(), exp.indexOf(RHS, LHS.length)),\n    value: void 0,\n    key: void 0,\n    index: void 0,\n    finalized: false\n  };\n  let valueContent = LHS.trim().replace(stripParensRE, \"\").trim();\n  const trimmedOffset = LHS.indexOf(valueContent);\n  const iteratorMatch = valueContent.match(forIteratorRE);\n  if (iteratorMatch) {\n    valueContent = valueContent.replace(forIteratorRE, \"\").trim();\n    const keyContent = iteratorMatch[1].trim();\n    let keyOffset;\n    if (keyContent) {\n      keyOffset = exp.indexOf(keyContent, trimmedOffset + valueContent.length);\n      result.key = createAliasExpression(keyContent, keyOffset, true);\n    }\n    if (iteratorMatch[2]) {\n      const indexContent = iteratorMatch[2].trim();\n      if (indexContent) {\n        result.index = createAliasExpression(\n          indexContent,\n          exp.indexOf(\n            indexContent,\n            result.key ? keyOffset + keyContent.length : trimmedOffset + valueContent.length\n          ),\n          true\n        );\n      }\n    }\n  }\n  if (valueContent) {\n    result.value = createAliasExpression(valueContent, trimmedOffset, true);\n  }\n  return result;\n}\nfunction getSlice(start, end) {\n  return currentInput.slice(start, end);\n}\nfunction endOpenTag(end) {\n  if (tokenizer.inSFCRoot) {\n    currentOpenTag.innerLoc = getLoc(end + 1, end + 1);\n  }\n  addNode(currentOpenTag);\n  const { tag, ns } = currentOpenTag;\n  if (ns === 0 && currentOptions.isPreTag(tag)) {\n    inPre++;\n  }\n  if (currentOptions.isVoidTag(tag)) {\n    onCloseTag(currentOpenTag, end);\n  } else {\n    stack.unshift(currentOpenTag);\n    if (ns === 1 || ns === 2) {\n      tokenizer.inXML = true;\n    }\n  }\n  currentOpenTag = null;\n}\nfunction onText(content, start, end) {\n  const parent = stack[0] || currentRoot;\n  const lastNode = parent.children[parent.children.length - 1];\n  if (lastNode && lastNode.type === 2) {\n    lastNode.content += content;\n    setLocEnd(lastNode.loc, end);\n  } else {\n    parent.children.push({\n      type: 2,\n      content,\n      loc: getLoc(start, end)\n    });\n  }\n}\nfunction onCloseTag(el, end, isImplied = false) {\n  if (isImplied) {\n    setLocEnd(el.loc, backTrack(end, 60));\n  } else {\n    setLocEnd(el.loc, lookAhead(end, 62) + 1);\n  }\n  if (tokenizer.inSFCRoot) {\n    if (el.children.length) {\n      el.innerLoc.end = shared.extend({}, el.children[el.children.length - 1].loc.end);\n    } else {\n      el.innerLoc.end = shared.extend({}, el.innerLoc.start);\n    }\n    el.innerLoc.source = getSlice(\n      el.innerLoc.start.offset,\n      el.innerLoc.end.offset\n    );\n  }\n  const { tag, ns, children } = el;\n  if (!inVPre) {\n    if (tag === \"slot\") {\n      el.tagType = 2;\n    } else if (isFragmentTemplate(el)) {\n      el.tagType = 3;\n    } else if (isComponent(el)) {\n      el.tagType = 1;\n    }\n  }\n  if (!tokenizer.inRCDATA) {\n    el.children = condenseWhitespace(children);\n  }\n  if (ns === 0 && currentOptions.isIgnoreNewlineTag(tag)) {\n    const first = children[0];\n    if (first && first.type === 2) {\n      first.content = first.content.replace(/^\\r?\\n/, \"\");\n    }\n  }\n  if (ns === 0 && currentOptions.isPreTag(tag)) {\n    inPre--;\n  }\n  if (currentVPreBoundary === el) {\n    inVPre = tokenizer.inVPre = false;\n    currentVPreBoundary = null;\n  }\n  if (tokenizer.inXML && (stack[0] ? stack[0].ns : currentOptions.ns) === 0) {\n    tokenizer.inXML = false;\n  }\n  {\n    const props = el.props;\n    if (!tokenizer.inSFCRoot && isCompatEnabled(\n      \"COMPILER_NATIVE_TEMPLATE\",\n      currentOptions\n    ) && el.tag === \"template\" && !isFragmentTemplate(el)) {\n      const parent = stack[0] || currentRoot;\n      const index = parent.children.indexOf(el);\n      parent.children.splice(index, 1, ...el.children);\n    }\n    const inlineTemplateProp = props.find(\n      (p) => p.type === 6 && p.name === \"inline-template\"\n    );\n    if (inlineTemplateProp && checkCompatEnabled(\n      \"COMPILER_INLINE_TEMPLATE\",\n      currentOptions,\n      inlineTemplateProp.loc\n    ) && el.children.length) {\n      inlineTemplateProp.value = {\n        type: 2,\n        content: getSlice(\n          el.children[0].loc.start.offset,\n          el.children[el.children.length - 1].loc.end.offset\n        ),\n        loc: inlineTemplateProp.loc\n      };\n    }\n  }\n}\nfunction lookAhead(index, c) {\n  let i = index;\n  while (currentInput.charCodeAt(i) !== c && i < currentInput.length - 1) i++;\n  return i;\n}\nfunction backTrack(index, c) {\n  let i = index;\n  while (currentInput.charCodeAt(i) !== c && i >= 0) i--;\n  return i;\n}\nconst specialTemplateDir = /* @__PURE__ */ new Set([\"if\", \"else\", \"else-if\", \"for\", \"slot\"]);\nfunction isFragmentTemplate({ tag, props }) {\n  if (tag === \"template\") {\n    for (let i = 0; i < props.length; i++) {\n      if (props[i].type === 7 && specialTemplateDir.has(props[i].name)) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\nfunction isComponent({ tag, props }) {\n  if (currentOptions.isCustomElement(tag)) {\n    return false;\n  }\n  if (tag === \"component\" || isUpperCase(tag.charCodeAt(0)) || isCoreComponent(tag) || currentOptions.isBuiltInComponent && currentOptions.isBuiltInComponent(tag) || currentOptions.isNativeTag && !currentOptions.isNativeTag(tag)) {\n    return true;\n  }\n  for (let i = 0; i < props.length; i++) {\n    const p = props[i];\n    if (p.type === 6) {\n      if (p.name === \"is\" && p.value) {\n        if (p.value.content.startsWith(\"vue:\")) {\n          return true;\n        } else if (checkCompatEnabled(\n          \"COMPILER_IS_ON_ELEMENT\",\n          currentOptions,\n          p.loc\n        )) {\n          return true;\n        }\n      }\n    } else if (// :is on plain element - only treat as component in compat mode\n    p.name === \"bind\" && isStaticArgOf(p.arg, \"is\") && checkCompatEnabled(\n      \"COMPILER_IS_ON_ELEMENT\",\n      currentOptions,\n      p.loc\n    )) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction isUpperCase(c) {\n  return c > 64 && c < 91;\n}\nconst windowsNewlineRE = /\\r\\n/g;\nfunction condenseWhitespace(nodes) {\n  const shouldCondense = currentOptions.whitespace !== \"preserve\";\n  let removedWhitespace = false;\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (node.type === 2) {\n      if (!inPre) {\n        if (isAllWhitespace(node.content)) {\n          const prev = nodes[i - 1] && nodes[i - 1].type;\n          const next = nodes[i + 1] && nodes[i + 1].type;\n          if (!prev || !next || shouldCondense && (prev === 3 && (next === 3 || next === 1) || prev === 1 && (next === 3 || next === 1 && hasNewlineChar(node.content)))) {\n            removedWhitespace = true;\n            nodes[i] = null;\n          } else {\n            node.content = \" \";\n          }\n        } else if (shouldCondense) {\n          node.content = condense(node.content);\n        }\n      } else {\n        node.content = node.content.replace(windowsNewlineRE, \"\\n\");\n      }\n    }\n  }\n  return removedWhitespace ? nodes.filter(Boolean) : nodes;\n}\nfunction isAllWhitespace(str) {\n  for (let i = 0; i < str.length; i++) {\n    if (!isWhitespace(str.charCodeAt(i))) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction hasNewlineChar(str) {\n  for (let i = 0; i < str.length; i++) {\n    const c = str.charCodeAt(i);\n    if (c === 10 || c === 13) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction condense(str) {\n  let ret = \"\";\n  let prevCharIsWhitespace = false;\n  for (let i = 0; i < str.length; i++) {\n    if (isWhitespace(str.charCodeAt(i))) {\n      if (!prevCharIsWhitespace) {\n        ret += \" \";\n        prevCharIsWhitespace = true;\n      }\n    } else {\n      ret += str[i];\n      prevCharIsWhitespace = false;\n    }\n  }\n  return ret;\n}\nfunction addNode(node) {\n  (stack[0] || currentRoot).children.push(node);\n}\nfunction getLoc(start, end) {\n  return {\n    start: tokenizer.getPos(start),\n    // @ts-expect-error allow late attachment\n    end: end == null ? end : tokenizer.getPos(end),\n    // @ts-expect-error allow late attachment\n    source: end == null ? end : getSlice(start, end)\n  };\n}\nfunction cloneLoc(loc) {\n  return getLoc(loc.start.offset, loc.end.offset);\n}\nfunction setLocEnd(loc, end) {\n  loc.end = tokenizer.getPos(end);\n  loc.source = getSlice(loc.start.offset, end);\n}\nfunction dirToAttr(dir) {\n  const attr = {\n    type: 6,\n    name: dir.rawName,\n    nameLoc: getLoc(\n      dir.loc.start.offset,\n      dir.loc.start.offset + dir.rawName.length\n    ),\n    value: void 0,\n    loc: dir.loc\n  };\n  if (dir.exp) {\n    const loc = dir.exp.loc;\n    if (loc.end.offset < dir.loc.end.offset) {\n      loc.start.offset--;\n      loc.start.column--;\n      loc.end.offset++;\n      loc.end.column++;\n    }\n    attr.value = {\n      type: 2,\n      content: dir.exp.content,\n      loc\n    };\n  }\n  return attr;\n}\nfunction createExp(content, isStatic = false, loc, constType = 0, parseMode = 0 /* Normal */) {\n  const exp = createSimpleExpression(content, isStatic, loc, constType);\n  if (!isStatic && currentOptions.prefixIdentifiers && parseMode !== 3 /* Skip */ && content.trim()) {\n    if (isSimpleIdentifier(content)) {\n      exp.ast = null;\n      return exp;\n    }\n    try {\n      const plugins = currentOptions.expressionPlugins;\n      const options = {\n        plugins: plugins ? [...plugins, \"typescript\"] : [\"typescript\"]\n      };\n      if (parseMode === 2 /* Statements */) {\n        exp.ast = parser.parse(` ${content} `, options).program;\n      } else if (parseMode === 1 /* Params */) {\n        exp.ast = parser.parseExpression(`(${content})=>{}`, options);\n      } else {\n        exp.ast = parser.parseExpression(`(${content})`, options);\n      }\n    } catch (e) {\n      exp.ast = false;\n      emitError(45, loc.start.offset, e.message);\n    }\n  }\n  return exp;\n}\nfunction emitError(code, index, message) {\n  currentOptions.onError(\n    createCompilerError(code, getLoc(index, index), void 0, message)\n  );\n}\nfunction reset() {\n  tokenizer.reset();\n  currentOpenTag = null;\n  currentProp = null;\n  currentAttrValue = \"\";\n  currentAttrStartIndex = -1;\n  currentAttrEndIndex = -1;\n  stack.length = 0;\n}\nfunction baseParse(input, options) {\n  reset();\n  currentInput = input;\n  currentOptions = shared.extend({}, defaultParserOptions);\n  if (options) {\n    let key;\n    for (key in options) {\n      if (options[key] != null) {\n        currentOptions[key] = options[key];\n      }\n    }\n  }\n  tokenizer.mode = currentOptions.parseMode === \"html\" ? 1 : currentOptions.parseMode === \"sfc\" ? 2 : 0;\n  tokenizer.inXML = currentOptions.ns === 1 || currentOptions.ns === 2;\n  const delimiters = options && options.delimiters;\n  if (delimiters) {\n    tokenizer.delimiterOpen = toCharCodes(delimiters[0]);\n    tokenizer.delimiterClose = toCharCodes(delimiters[1]);\n  }\n  const root = currentRoot = createRoot([], input);\n  tokenizer.parse(currentInput);\n  root.loc = getLoc(0, input.length);\n  root.children = condenseWhitespace(root.children);\n  currentRoot = null;\n  return root;\n}\n\nfunction cacheStatic(root, context) {\n  walk(\n    root,\n    void 0,\n    context,\n    // Root node is unfortunately non-hoistable due to potential parent\n    // fallthrough attributes.\n    !!getSingleElementRoot(root)\n  );\n}\nfunction getSingleElementRoot(root) {\n  const children = root.children.filter((x) => x.type !== 3);\n  return children.length === 1 && children[0].type === 1 && !isSlotOutlet(children[0]) ? children[0] : null;\n}\nfunction walk(node, parent, context, doNotHoistNode = false, inFor = false) {\n  const { children } = node;\n  const toCache = [];\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    if (child.type === 1 && child.tagType === 0) {\n      const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n      if (constantType > 0) {\n        if (constantType >= 2) {\n          child.codegenNode.patchFlag = -1;\n          toCache.push(child);\n          continue;\n        }\n      } else {\n        const codegenNode = child.codegenNode;\n        if (codegenNode.type === 13) {\n          const flag = codegenNode.patchFlag;\n          if ((flag === void 0 || flag === 512 || flag === 1) && getGeneratedPropsConstantType(child, context) >= 2) {\n            const props = getNodeProps(child);\n            if (props) {\n              codegenNode.props = context.hoist(props);\n            }\n          }\n          if (codegenNode.dynamicProps) {\n            codegenNode.dynamicProps = context.hoist(codegenNode.dynamicProps);\n          }\n        }\n      }\n    } else if (child.type === 12) {\n      const constantType = doNotHoistNode ? 0 : getConstantType(child, context);\n      if (constantType >= 2) {\n        if (child.codegenNode.type === 14 && child.codegenNode.arguments.length > 0) {\n          child.codegenNode.arguments.push(\n            -1 + (``)\n          );\n        }\n        toCache.push(child);\n        continue;\n      }\n    }\n    if (child.type === 1) {\n      const isComponent = child.tagType === 1;\n      if (isComponent) {\n        context.scopes.vSlot++;\n      }\n      walk(child, node, context, false, inFor);\n      if (isComponent) {\n        context.scopes.vSlot--;\n      }\n    } else if (child.type === 11) {\n      walk(child, node, context, child.children.length === 1, true);\n    } else if (child.type === 9) {\n      for (let i2 = 0; i2 < child.branches.length; i2++) {\n        walk(\n          child.branches[i2],\n          node,\n          context,\n          child.branches[i2].children.length === 1,\n          inFor\n        );\n      }\n    }\n  }\n  let cachedAsArray = false;\n  const slotCacheKeys = [];\n  if (toCache.length === children.length && node.type === 1) {\n    if (node.tagType === 0 && node.codegenNode && node.codegenNode.type === 13 && shared.isArray(node.codegenNode.children)) {\n      node.codegenNode.children = getCacheExpression(\n        createArrayExpression(node.codegenNode.children)\n      );\n      cachedAsArray = true;\n    } else if (node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !shared.isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n      const slot = getSlotNode(node.codegenNode, \"default\");\n      if (slot) {\n        slotCacheKeys.push(context.cached.length);\n        slot.returns = getCacheExpression(\n          createArrayExpression(slot.returns)\n        );\n        cachedAsArray = true;\n      }\n    } else if (node.tagType === 3 && parent && parent.type === 1 && parent.tagType === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !shared.isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 15) {\n      const slotName = findDir(node, \"slot\", true);\n      const slot = slotName && slotName.arg && getSlotNode(parent.codegenNode, slotName.arg);\n      if (slot) {\n        slotCacheKeys.push(context.cached.length);\n        slot.returns = getCacheExpression(\n          createArrayExpression(slot.returns)\n        );\n        cachedAsArray = true;\n      }\n    }\n  }\n  if (!cachedAsArray) {\n    for (const child of toCache) {\n      slotCacheKeys.push(context.cached.length);\n      child.codegenNode = context.cache(child.codegenNode);\n    }\n  }\n  if (slotCacheKeys.length && node.type === 1 && node.tagType === 1 && node.codegenNode && node.codegenNode.type === 13 && node.codegenNode.children && !shared.isArray(node.codegenNode.children) && node.codegenNode.children.type === 15) {\n    node.codegenNode.children.properties.push(\n      createObjectProperty(\n        `__`,\n        createSimpleExpression(JSON.stringify(slotCacheKeys), false)\n      )\n    );\n  }\n  function getCacheExpression(value) {\n    const exp = context.cache(value);\n    if (inFor && context.hmr) {\n      exp.needArraySpread = true;\n    }\n    return exp;\n  }\n  function getSlotNode(node2, name) {\n    if (node2.children && !shared.isArray(node2.children) && node2.children.type === 15) {\n      const slot = node2.children.properties.find(\n        (p) => p.key === name || p.key.content === name\n      );\n      return slot && slot.value;\n    }\n  }\n  if (toCache.length && context.transformHoist) {\n    context.transformHoist(children, context, node);\n  }\n}\nfunction getConstantType(node, context) {\n  const { constantCache } = context;\n  switch (node.type) {\n    case 1:\n      if (node.tagType !== 0) {\n        return 0;\n      }\n      const cached = constantCache.get(node);\n      if (cached !== void 0) {\n        return cached;\n      }\n      const codegenNode = node.codegenNode;\n      if (codegenNode.type !== 13) {\n        return 0;\n      }\n      if (codegenNode.isBlock && node.tag !== \"svg\" && node.tag !== \"foreignObject\" && node.tag !== \"math\") {\n        return 0;\n      }\n      if (codegenNode.patchFlag === void 0) {\n        let returnType2 = 3;\n        const generatedPropsType = getGeneratedPropsConstantType(node, context);\n        if (generatedPropsType === 0) {\n          constantCache.set(node, 0);\n          return 0;\n        }\n        if (generatedPropsType < returnType2) {\n          returnType2 = generatedPropsType;\n        }\n        for (let i = 0; i < node.children.length; i++) {\n          const childType = getConstantType(node.children[i], context);\n          if (childType === 0) {\n            constantCache.set(node, 0);\n            return 0;\n          }\n          if (childType < returnType2) {\n            returnType2 = childType;\n          }\n        }\n        if (returnType2 > 1) {\n          for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            if (p.type === 7 && p.name === \"bind\" && p.exp) {\n              const expType = getConstantType(p.exp, context);\n              if (expType === 0) {\n                constantCache.set(node, 0);\n                return 0;\n              }\n              if (expType < returnType2) {\n                returnType2 = expType;\n              }\n            }\n          }\n        }\n        if (codegenNode.isBlock) {\n          for (let i = 0; i < node.props.length; i++) {\n            const p = node.props[i];\n            if (p.type === 7) {\n              constantCache.set(node, 0);\n              return 0;\n            }\n          }\n          context.removeHelper(OPEN_BLOCK);\n          context.removeHelper(\n            getVNodeBlockHelper(context.inSSR, codegenNode.isComponent)\n          );\n          codegenNode.isBlock = false;\n          context.helper(getVNodeHelper(context.inSSR, codegenNode.isComponent));\n        }\n        constantCache.set(node, returnType2);\n        return returnType2;\n      } else {\n        constantCache.set(node, 0);\n        return 0;\n      }\n    case 2:\n    case 3:\n      return 3;\n    case 9:\n    case 11:\n    case 10:\n      return 0;\n    case 5:\n    case 12:\n      return getConstantType(node.content, context);\n    case 4:\n      return node.constType;\n    case 8:\n      let returnType = 3;\n      for (let i = 0; i < node.children.length; i++) {\n        const child = node.children[i];\n        if (shared.isString(child) || shared.isSymbol(child)) {\n          continue;\n        }\n        const childType = getConstantType(child, context);\n        if (childType === 0) {\n          return 0;\n        } else if (childType < returnType) {\n          returnType = childType;\n        }\n      }\n      return returnType;\n    case 20:\n      return 2;\n    default:\n      return 0;\n  }\n}\nconst allowHoistedHelperSet = /* @__PURE__ */ new Set([\n  NORMALIZE_CLASS,\n  NORMALIZE_STYLE,\n  NORMALIZE_PROPS,\n  GUARD_REACTIVE_PROPS\n]);\nfunction getConstantTypeOfHelperCall(value, context) {\n  if (value.type === 14 && !shared.isString(value.callee) && allowHoistedHelperSet.has(value.callee)) {\n    const arg = value.arguments[0];\n    if (arg.type === 4) {\n      return getConstantType(arg, context);\n    } else if (arg.type === 14) {\n      return getConstantTypeOfHelperCall(arg, context);\n    }\n  }\n  return 0;\n}\nfunction getGeneratedPropsConstantType(node, context) {\n  let returnType = 3;\n  const props = getNodeProps(node);\n  if (props && props.type === 15) {\n    const { properties } = props;\n    for (let i = 0; i < properties.length; i++) {\n      const { key, value } = properties[i];\n      const keyType = getConstantType(key, context);\n      if (keyType === 0) {\n        return keyType;\n      }\n      if (keyType < returnType) {\n        returnType = keyType;\n      }\n      let valueType;\n      if (value.type === 4) {\n        valueType = getConstantType(value, context);\n      } else if (value.type === 14) {\n        valueType = getConstantTypeOfHelperCall(value, context);\n      } else {\n        valueType = 0;\n      }\n      if (valueType === 0) {\n        return valueType;\n      }\n      if (valueType < returnType) {\n        returnType = valueType;\n      }\n    }\n  }\n  return returnType;\n}\nfunction getNodeProps(node) {\n  const codegenNode = node.codegenNode;\n  if (codegenNode.type === 13) {\n    return codegenNode.props;\n  }\n}\n\nfunction createTransformContext(root, {\n  filename = \"\",\n  prefixIdentifiers = false,\n  hoistStatic = false,\n  hmr = false,\n  cacheHandlers = false,\n  nodeTransforms = [],\n  directiveTransforms = {},\n  transformHoist = null,\n  isBuiltInComponent = shared.NOOP,\n  isCustomElement = shared.NOOP,\n  expressionPlugins = [],\n  scopeId = null,\n  slotted = true,\n  ssr = false,\n  inSSR = false,\n  ssrCssVars = ``,\n  bindingMetadata = shared.EMPTY_OBJ,\n  inline = false,\n  isTS = false,\n  onError = defaultOnError,\n  onWarn = defaultOnWarn,\n  compatConfig\n}) {\n  const nameMatch = filename.replace(/\\?.*$/, \"\").match(/([^/\\\\]+)\\.\\w+$/);\n  const context = {\n    // options\n    filename,\n    selfName: nameMatch && shared.capitalize(shared.camelize(nameMatch[1])),\n    prefixIdentifiers,\n    hoistStatic,\n    hmr,\n    cacheHandlers,\n    nodeTransforms,\n    directiveTransforms,\n    transformHoist,\n    isBuiltInComponent,\n    isCustomElement,\n    expressionPlugins,\n    scopeId,\n    slotted,\n    ssr,\n    inSSR,\n    ssrCssVars,\n    bindingMetadata,\n    inline,\n    isTS,\n    onError,\n    onWarn,\n    compatConfig,\n    // state\n    root,\n    helpers: /* @__PURE__ */ new Map(),\n    components: /* @__PURE__ */ new Set(),\n    directives: /* @__PURE__ */ new Set(),\n    hoists: [],\n    imports: [],\n    cached: [],\n    constantCache: /* @__PURE__ */ new WeakMap(),\n    temps: 0,\n    identifiers: /* @__PURE__ */ Object.create(null),\n    scopes: {\n      vFor: 0,\n      vSlot: 0,\n      vPre: 0,\n      vOnce: 0\n    },\n    parent: null,\n    grandParent: null,\n    currentNode: root,\n    childIndex: 0,\n    inVOnce: false,\n    // methods\n    helper(name) {\n      const count = context.helpers.get(name) || 0;\n      context.helpers.set(name, count + 1);\n      return name;\n    },\n    removeHelper(name) {\n      const count = context.helpers.get(name);\n      if (count) {\n        const currentCount = count - 1;\n        if (!currentCount) {\n          context.helpers.delete(name);\n        } else {\n          context.helpers.set(name, currentCount);\n        }\n      }\n    },\n    helperString(name) {\n      return `_${helperNameMap[context.helper(name)]}`;\n    },\n    replaceNode(node) {\n      context.parent.children[context.childIndex] = context.currentNode = node;\n    },\n    removeNode(node) {\n      const list = context.parent.children;\n      const removalIndex = node ? list.indexOf(node) : context.currentNode ? context.childIndex : -1;\n      if (!node || node === context.currentNode) {\n        context.currentNode = null;\n        context.onNodeRemoved();\n      } else {\n        if (context.childIndex > removalIndex) {\n          context.childIndex--;\n          context.onNodeRemoved();\n        }\n      }\n      context.parent.children.splice(removalIndex, 1);\n    },\n    onNodeRemoved: shared.NOOP,\n    addIdentifiers(exp) {\n      {\n        if (shared.isString(exp)) {\n          addId(exp);\n        } else if (exp.identifiers) {\n          exp.identifiers.forEach(addId);\n        } else if (exp.type === 4) {\n          addId(exp.content);\n        }\n      }\n    },\n    removeIdentifiers(exp) {\n      {\n        if (shared.isString(exp)) {\n          removeId(exp);\n        } else if (exp.identifiers) {\n          exp.identifiers.forEach(removeId);\n        } else if (exp.type === 4) {\n          removeId(exp.content);\n        }\n      }\n    },\n    hoist(exp) {\n      if (shared.isString(exp)) exp = createSimpleExpression(exp);\n      context.hoists.push(exp);\n      const identifier = createSimpleExpression(\n        `_hoisted_${context.hoists.length}`,\n        false,\n        exp.loc,\n        2\n      );\n      identifier.hoisted = exp;\n      return identifier;\n    },\n    cache(exp, isVNode = false, inVOnce = false) {\n      const cacheExp = createCacheExpression(\n        context.cached.length,\n        exp,\n        isVNode,\n        inVOnce\n      );\n      context.cached.push(cacheExp);\n      return cacheExp;\n    }\n  };\n  {\n    context.filters = /* @__PURE__ */ new Set();\n  }\n  function addId(id) {\n    const { identifiers } = context;\n    if (identifiers[id] === void 0) {\n      identifiers[id] = 0;\n    }\n    identifiers[id]++;\n  }\n  function removeId(id) {\n    context.identifiers[id]--;\n  }\n  return context;\n}\nfunction transform(root, options) {\n  const context = createTransformContext(root, options);\n  traverseNode(root, context);\n  if (options.hoistStatic) {\n    cacheStatic(root, context);\n  }\n  if (!options.ssr) {\n    createRootCodegen(root, context);\n  }\n  root.helpers = /* @__PURE__ */ new Set([...context.helpers.keys()]);\n  root.components = [...context.components];\n  root.directives = [...context.directives];\n  root.imports = context.imports;\n  root.hoists = context.hoists;\n  root.temps = context.temps;\n  root.cached = context.cached;\n  root.transformed = true;\n  {\n    root.filters = [...context.filters];\n  }\n}\nfunction createRootCodegen(root, context) {\n  const { helper } = context;\n  const { children } = root;\n  if (children.length === 1) {\n    const singleElementRootChild = getSingleElementRoot(root);\n    if (singleElementRootChild && singleElementRootChild.codegenNode) {\n      const codegenNode = singleElementRootChild.codegenNode;\n      if (codegenNode.type === 13) {\n        convertToBlock(codegenNode, context);\n      }\n      root.codegenNode = codegenNode;\n    } else {\n      root.codegenNode = children[0];\n    }\n  } else if (children.length > 1) {\n    let patchFlag = 64;\n    root.codegenNode = createVNodeCall(\n      context,\n      helper(FRAGMENT),\n      void 0,\n      root.children,\n      patchFlag,\n      void 0,\n      void 0,\n      true,\n      void 0,\n      false\n    );\n  } else ;\n}\nfunction traverseChildren(parent, context) {\n  let i = 0;\n  const nodeRemoved = () => {\n    i--;\n  };\n  for (; i < parent.children.length; i++) {\n    const child = parent.children[i];\n    if (shared.isString(child)) continue;\n    context.grandParent = context.parent;\n    context.parent = parent;\n    context.childIndex = i;\n    context.onNodeRemoved = nodeRemoved;\n    traverseNode(child, context);\n  }\n}\nfunction traverseNode(node, context) {\n  context.currentNode = node;\n  const { nodeTransforms } = context;\n  const exitFns = [];\n  for (let i2 = 0; i2 < nodeTransforms.length; i2++) {\n    const onExit = nodeTransforms[i2](node, context);\n    if (onExit) {\n      if (shared.isArray(onExit)) {\n        exitFns.push(...onExit);\n      } else {\n        exitFns.push(onExit);\n      }\n    }\n    if (!context.currentNode) {\n      return;\n    } else {\n      node = context.currentNode;\n    }\n  }\n  switch (node.type) {\n    case 3:\n      if (!context.ssr) {\n        context.helper(CREATE_COMMENT);\n      }\n      break;\n    case 5:\n      if (!context.ssr) {\n        context.helper(TO_DISPLAY_STRING);\n      }\n      break;\n    // for container types, further traverse downwards\n    case 9:\n      for (let i2 = 0; i2 < node.branches.length; i2++) {\n        traverseNode(node.branches[i2], context);\n      }\n      break;\n    case 10:\n    case 11:\n    case 1:\n    case 0:\n      traverseChildren(node, context);\n      break;\n  }\n  context.currentNode = node;\n  let i = exitFns.length;\n  while (i--) {\n    exitFns[i]();\n  }\n}\nfunction createStructuralDirectiveTransform(name, fn) {\n  const matches = shared.isString(name) ? (n) => n === name : (n) => name.test(n);\n  return (node, context) => {\n    if (node.type === 1) {\n      const { props } = node;\n      if (node.tagType === 3 && props.some(isVSlot)) {\n        return;\n      }\n      const exitFns = [];\n      for (let i = 0; i < props.length; i++) {\n        const prop = props[i];\n        if (prop.type === 7 && matches(prop.name)) {\n          props.splice(i, 1);\n          i--;\n          const onExit = fn(node, prop, context);\n          if (onExit) exitFns.push(onExit);\n        }\n      }\n      return exitFns;\n    }\n  };\n}\n\nconst PURE_ANNOTATION = `/*@__PURE__*/`;\nconst aliasHelper = (s) => `${helperNameMap[s]}: _${helperNameMap[s]}`;\nfunction createCodegenContext(ast, {\n  mode = \"function\",\n  prefixIdentifiers = mode === \"module\",\n  sourceMap = false,\n  filename = `template.vue.html`,\n  scopeId = null,\n  optimizeImports = false,\n  runtimeGlobalName = `Vue`,\n  runtimeModuleName = `vue`,\n  ssrRuntimeModuleName = \"vue/server-renderer\",\n  ssr = false,\n  isTS = false,\n  inSSR = false\n}) {\n  const context = {\n    mode,\n    prefixIdentifiers,\n    sourceMap,\n    filename,\n    scopeId,\n    optimizeImports,\n    runtimeGlobalName,\n    runtimeModuleName,\n    ssrRuntimeModuleName,\n    ssr,\n    isTS,\n    inSSR,\n    source: ast.source,\n    code: ``,\n    column: 1,\n    line: 1,\n    offset: 0,\n    indentLevel: 0,\n    pure: false,\n    map: void 0,\n    helper(key) {\n      return `_${helperNameMap[key]}`;\n    },\n    push(code, newlineIndex = -2 /* None */, node) {\n      context.code += code;\n      if (context.map) {\n        if (node) {\n          let name;\n          if (node.type === 4 && !node.isStatic) {\n            const content = node.content.replace(/^_ctx\\./, \"\");\n            if (content !== node.content && isSimpleIdentifier(content)) {\n              name = content;\n            }\n          }\n          if (node.loc.source) {\n            addMapping(node.loc.start, name);\n          }\n        }\n        if (newlineIndex === -3 /* Unknown */) {\n          advancePositionWithMutation(context, code);\n        } else {\n          context.offset += code.length;\n          if (newlineIndex === -2 /* None */) {\n            context.column += code.length;\n          } else {\n            if (newlineIndex === -1 /* End */) {\n              newlineIndex = code.length - 1;\n            }\n            context.line++;\n            context.column = code.length - newlineIndex;\n          }\n        }\n        if (node && node.loc !== locStub && node.loc.source) {\n          addMapping(node.loc.end);\n        }\n      }\n    },\n    indent() {\n      newline(++context.indentLevel);\n    },\n    deindent(withoutNewLine = false) {\n      if (withoutNewLine) {\n        --context.indentLevel;\n      } else {\n        newline(--context.indentLevel);\n      }\n    },\n    newline() {\n      newline(context.indentLevel);\n    }\n  };\n  function newline(n) {\n    context.push(\"\\n\" + `  `.repeat(n), 0 /* Start */);\n  }\n  function addMapping(loc, name = null) {\n    const { _names, _mappings } = context.map;\n    if (name !== null && !_names.has(name)) _names.add(name);\n    _mappings.add({\n      originalLine: loc.line,\n      originalColumn: loc.column - 1,\n      // source-map column is 0 based\n      generatedLine: context.line,\n      generatedColumn: context.column - 1,\n      source: filename,\n      name\n    });\n  }\n  if (sourceMap) {\n    context.map = new sourceMapJs.SourceMapGenerator();\n    context.map.setSourceContent(filename, context.source);\n    context.map._sources.add(filename);\n  }\n  return context;\n}\nfunction generate(ast, options = {}) {\n  const context = createCodegenContext(ast, options);\n  if (options.onContextCreated) options.onContextCreated(context);\n  const {\n    mode,\n    push,\n    prefixIdentifiers,\n    indent,\n    deindent,\n    newline,\n    scopeId,\n    ssr\n  } = context;\n  const helpers = Array.from(ast.helpers);\n  const hasHelpers = helpers.length > 0;\n  const useWithBlock = !prefixIdentifiers && mode !== \"module\";\n  const genScopeId = scopeId != null && mode === \"module\";\n  const isSetupInlined = !!options.inline;\n  const preambleContext = isSetupInlined ? createCodegenContext(ast, options) : context;\n  if (mode === \"module\") {\n    genModulePreamble(ast, preambleContext, genScopeId, isSetupInlined);\n  } else {\n    genFunctionPreamble(ast, preambleContext);\n  }\n  const functionName = ssr ? `ssrRender` : `render`;\n  const args = ssr ? [\"_ctx\", \"_push\", \"_parent\", \"_attrs\"] : [\"_ctx\", \"_cache\"];\n  if (options.bindingMetadata && !options.inline) {\n    args.push(\"$props\", \"$setup\", \"$data\", \"$options\");\n  }\n  const signature = options.isTS ? args.map((arg) => `${arg}: any`).join(\",\") : args.join(\", \");\n  if (isSetupInlined) {\n    push(`(${signature}) => {`);\n  } else {\n    push(`function ${functionName}(${signature}) {`);\n  }\n  indent();\n  if (useWithBlock) {\n    push(`with (_ctx) {`);\n    indent();\n    if (hasHelpers) {\n      push(\n        `const { ${helpers.map(aliasHelper).join(\", \")} } = _Vue\n`,\n        -1 /* End */\n      );\n      newline();\n    }\n  }\n  if (ast.components.length) {\n    genAssets(ast.components, \"component\", context);\n    if (ast.directives.length || ast.temps > 0) {\n      newline();\n    }\n  }\n  if (ast.directives.length) {\n    genAssets(ast.directives, \"directive\", context);\n    if (ast.temps > 0) {\n      newline();\n    }\n  }\n  if (ast.filters && ast.filters.length) {\n    newline();\n    genAssets(ast.filters, \"filter\", context);\n    newline();\n  }\n  if (ast.temps > 0) {\n    push(`let `);\n    for (let i = 0; i < ast.temps; i++) {\n      push(`${i > 0 ? `, ` : ``}_temp${i}`);\n    }\n  }\n  if (ast.components.length || ast.directives.length || ast.temps) {\n    push(`\n`, 0 /* Start */);\n    newline();\n  }\n  if (!ssr) {\n    push(`return `);\n  }\n  if (ast.codegenNode) {\n    genNode(ast.codegenNode, context);\n  } else {\n    push(`null`);\n  }\n  if (useWithBlock) {\n    deindent();\n    push(`}`);\n  }\n  deindent();\n  push(`}`);\n  return {\n    ast,\n    code: context.code,\n    preamble: isSetupInlined ? preambleContext.code : ``,\n    map: context.map ? context.map.toJSON() : void 0\n  };\n}\nfunction genFunctionPreamble(ast, context) {\n  const {\n    ssr,\n    prefixIdentifiers,\n    push,\n    newline,\n    runtimeModuleName,\n    runtimeGlobalName,\n    ssrRuntimeModuleName\n  } = context;\n  const VueBinding = ssr ? `require(${JSON.stringify(runtimeModuleName)})` : runtimeGlobalName;\n  const helpers = Array.from(ast.helpers);\n  if (helpers.length > 0) {\n    if (prefixIdentifiers) {\n      push(\n        `const { ${helpers.map(aliasHelper).join(\", \")} } = ${VueBinding}\n`,\n        -1 /* End */\n      );\n    } else {\n      push(`const _Vue = ${VueBinding}\n`, -1 /* End */);\n      if (ast.hoists.length) {\n        const staticHelpers = [\n          CREATE_VNODE,\n          CREATE_ELEMENT_VNODE,\n          CREATE_COMMENT,\n          CREATE_TEXT,\n          CREATE_STATIC\n        ].filter((helper) => helpers.includes(helper)).map(aliasHelper).join(\", \");\n        push(`const { ${staticHelpers} } = _Vue\n`, -1 /* End */);\n      }\n    }\n  }\n  if (ast.ssrHelpers && ast.ssrHelpers.length) {\n    push(\n      `const { ${ast.ssrHelpers.map(aliasHelper).join(\", \")} } = require(\"${ssrRuntimeModuleName}\")\n`,\n      -1 /* End */\n    );\n  }\n  genHoists(ast.hoists, context);\n  newline();\n  push(`return `);\n}\nfunction genModulePreamble(ast, context, genScopeId, inline) {\n  const {\n    push,\n    newline,\n    optimizeImports,\n    runtimeModuleName,\n    ssrRuntimeModuleName\n  } = context;\n  if (ast.helpers.size) {\n    const helpers = Array.from(ast.helpers);\n    if (optimizeImports) {\n      push(\n        `import { ${helpers.map((s) => helperNameMap[s]).join(\", \")} } from ${JSON.stringify(runtimeModuleName)}\n`,\n        -1 /* End */\n      );\n      push(\n        `\n// Binding optimization for webpack code-split\nconst ${helpers.map((s) => `_${helperNameMap[s]} = ${helperNameMap[s]}`).join(\", \")}\n`,\n        -1 /* End */\n      );\n    } else {\n      push(\n        `import { ${helpers.map((s) => `${helperNameMap[s]} as _${helperNameMap[s]}`).join(\", \")} } from ${JSON.stringify(runtimeModuleName)}\n`,\n        -1 /* End */\n      );\n    }\n  }\n  if (ast.ssrHelpers && ast.ssrHelpers.length) {\n    push(\n      `import { ${ast.ssrHelpers.map((s) => `${helperNameMap[s]} as _${helperNameMap[s]}`).join(\", \")} } from \"${ssrRuntimeModuleName}\"\n`,\n      -1 /* End */\n    );\n  }\n  if (ast.imports.length) {\n    genImports(ast.imports, context);\n    newline();\n  }\n  genHoists(ast.hoists, context);\n  newline();\n  if (!inline) {\n    push(`export `);\n  }\n}\nfunction genAssets(assets, type, { helper, push, newline, isTS }) {\n  const resolver = helper(\n    type === \"filter\" ? RESOLVE_FILTER : type === \"component\" ? RESOLVE_COMPONENT : RESOLVE_DIRECTIVE\n  );\n  for (let i = 0; i < assets.length; i++) {\n    let id = assets[i];\n    const maybeSelfReference = id.endsWith(\"__self\");\n    if (maybeSelfReference) {\n      id = id.slice(0, -6);\n    }\n    push(\n      `const ${toValidAssetId(id, type)} = ${resolver}(${JSON.stringify(id)}${maybeSelfReference ? `, true` : ``})${isTS ? `!` : ``}`\n    );\n    if (i < assets.length - 1) {\n      newline();\n    }\n  }\n}\nfunction genHoists(hoists, context) {\n  if (!hoists.length) {\n    return;\n  }\n  context.pure = true;\n  const { push, newline } = context;\n  newline();\n  for (let i = 0; i < hoists.length; i++) {\n    const exp = hoists[i];\n    if (exp) {\n      push(`const _hoisted_${i + 1} = `);\n      genNode(exp, context);\n      newline();\n    }\n  }\n  context.pure = false;\n}\nfunction genImports(importsOptions, context) {\n  if (!importsOptions.length) {\n    return;\n  }\n  importsOptions.forEach((imports) => {\n    context.push(`import `);\n    genNode(imports.exp, context);\n    context.push(` from '${imports.path}'`);\n    context.newline();\n  });\n}\nfunction isText(n) {\n  return shared.isString(n) || n.type === 4 || n.type === 2 || n.type === 5 || n.type === 8;\n}\nfunction genNodeListAsArray(nodes, context) {\n  const multilines = nodes.length > 3 || nodes.some((n) => shared.isArray(n) || !isText(n));\n  context.push(`[`);\n  multilines && context.indent();\n  genNodeList(nodes, context, multilines);\n  multilines && context.deindent();\n  context.push(`]`);\n}\nfunction genNodeList(nodes, context, multilines = false, comma = true) {\n  const { push, newline } = context;\n  for (let i = 0; i < nodes.length; i++) {\n    const node = nodes[i];\n    if (shared.isString(node)) {\n      push(node, -3 /* Unknown */);\n    } else if (shared.isArray(node)) {\n      genNodeListAsArray(node, context);\n    } else {\n      genNode(node, context);\n    }\n    if (i < nodes.length - 1) {\n      if (multilines) {\n        comma && push(\",\");\n        newline();\n      } else {\n        comma && push(\", \");\n      }\n    }\n  }\n}\nfunction genNode(node, context) {\n  if (shared.isString(node)) {\n    context.push(node, -3 /* Unknown */);\n    return;\n  }\n  if (shared.isSymbol(node)) {\n    context.push(context.helper(node));\n    return;\n  }\n  switch (node.type) {\n    case 1:\n    case 9:\n    case 11:\n      genNode(node.codegenNode, context);\n      break;\n    case 2:\n      genText(node, context);\n      break;\n    case 4:\n      genExpression(node, context);\n      break;\n    case 5:\n      genInterpolation(node, context);\n      break;\n    case 12:\n      genNode(node.codegenNode, context);\n      break;\n    case 8:\n      genCompoundExpression(node, context);\n      break;\n    case 3:\n      genComment(node, context);\n      break;\n    case 13:\n      genVNodeCall(node, context);\n      break;\n    case 14:\n      genCallExpression(node, context);\n      break;\n    case 15:\n      genObjectExpression(node, context);\n      break;\n    case 17:\n      genArrayExpression(node, context);\n      break;\n    case 18:\n      genFunctionExpression(node, context);\n      break;\n    case 19:\n      genConditionalExpression(node, context);\n      break;\n    case 20:\n      genCacheExpression(node, context);\n      break;\n    case 21:\n      genNodeList(node.body, context, true, false);\n      break;\n    // SSR only types\n    case 22:\n      genTemplateLiteral(node, context);\n      break;\n    case 23:\n      genIfStatement(node, context);\n      break;\n    case 24:\n      genAssignmentExpression(node, context);\n      break;\n    case 25:\n      genSequenceExpression(node, context);\n      break;\n    case 26:\n      genReturnStatement(node, context);\n      break;\n  }\n}\nfunction genText(node, context) {\n  context.push(JSON.stringify(node.content), -3 /* Unknown */, node);\n}\nfunction genExpression(node, context) {\n  const { content, isStatic } = node;\n  context.push(\n    isStatic ? JSON.stringify(content) : content,\n    -3 /* Unknown */,\n    node\n  );\n}\nfunction genInterpolation(node, context) {\n  const { push, helper, pure } = context;\n  if (pure) push(PURE_ANNOTATION);\n  push(`${helper(TO_DISPLAY_STRING)}(`);\n  genNode(node.content, context);\n  push(`)`);\n}\nfunction genCompoundExpression(node, context) {\n  for (let i = 0; i < node.children.length; i++) {\n    const child = node.children[i];\n    if (shared.isString(child)) {\n      context.push(child, -3 /* Unknown */);\n    } else {\n      genNode(child, context);\n    }\n  }\n}\nfunction genExpressionAsPropertyKey(node, context) {\n  const { push } = context;\n  if (node.type === 8) {\n    push(`[`);\n    genCompoundExpression(node, context);\n    push(`]`);\n  } else if (node.isStatic) {\n    const text = isSimpleIdentifier(node.content) ? node.content : JSON.stringify(node.content);\n    push(text, -2 /* None */, node);\n  } else {\n    push(`[${node.content}]`, -3 /* Unknown */, node);\n  }\n}\nfunction genComment(node, context) {\n  const { push, helper, pure } = context;\n  if (pure) {\n    push(PURE_ANNOTATION);\n  }\n  push(\n    `${helper(CREATE_COMMENT)}(${JSON.stringify(node.content)})`,\n    -3 /* Unknown */,\n    node\n  );\n}\nfunction genVNodeCall(node, context) {\n  const { push, helper, pure } = context;\n  const {\n    tag,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    directives,\n    isBlock,\n    disableTracking,\n    isComponent\n  } = node;\n  let patchFlagString;\n  if (patchFlag) {\n    {\n      patchFlagString = String(patchFlag);\n    }\n  }\n  if (directives) {\n    push(helper(WITH_DIRECTIVES) + `(`);\n  }\n  if (isBlock) {\n    push(`(${helper(OPEN_BLOCK)}(${disableTracking ? `true` : ``}), `);\n  }\n  if (pure) {\n    push(PURE_ANNOTATION);\n  }\n  const callHelper = isBlock ? getVNodeBlockHelper(context.inSSR, isComponent) : getVNodeHelper(context.inSSR, isComponent);\n  push(helper(callHelper) + `(`, -2 /* None */, node);\n  genNodeList(\n    genNullableArgs([tag, props, children, patchFlagString, dynamicProps]),\n    context\n  );\n  push(`)`);\n  if (isBlock) {\n    push(`)`);\n  }\n  if (directives) {\n    push(`, `);\n    genNode(directives, context);\n    push(`)`);\n  }\n}\nfunction genNullableArgs(args) {\n  let i = args.length;\n  while (i--) {\n    if (args[i] != null) break;\n  }\n  return args.slice(0, i + 1).map((arg) => arg || `null`);\n}\nfunction genCallExpression(node, context) {\n  const { push, helper, pure } = context;\n  const callee = shared.isString(node.callee) ? node.callee : helper(node.callee);\n  if (pure) {\n    push(PURE_ANNOTATION);\n  }\n  push(callee + `(`, -2 /* None */, node);\n  genNodeList(node.arguments, context);\n  push(`)`);\n}\nfunction genObjectExpression(node, context) {\n  const { push, indent, deindent, newline } = context;\n  const { properties } = node;\n  if (!properties.length) {\n    push(`{}`, -2 /* None */, node);\n    return;\n  }\n  const multilines = properties.length > 1 || properties.some((p) => p.value.type !== 4);\n  push(multilines ? `{` : `{ `);\n  multilines && indent();\n  for (let i = 0; i < properties.length; i++) {\n    const { key, value } = properties[i];\n    genExpressionAsPropertyKey(key, context);\n    push(`: `);\n    genNode(value, context);\n    if (i < properties.length - 1) {\n      push(`,`);\n      newline();\n    }\n  }\n  multilines && deindent();\n  push(multilines ? `}` : ` }`);\n}\nfunction genArrayExpression(node, context) {\n  genNodeListAsArray(node.elements, context);\n}\nfunction genFunctionExpression(node, context) {\n  const { push, indent, deindent } = context;\n  const { params, returns, body, newline, isSlot } = node;\n  if (isSlot) {\n    push(`_${helperNameMap[WITH_CTX]}(`);\n  }\n  push(`(`, -2 /* None */, node);\n  if (shared.isArray(params)) {\n    genNodeList(params, context);\n  } else if (params) {\n    genNode(params, context);\n  }\n  push(`) => `);\n  if (newline || body) {\n    push(`{`);\n    indent();\n  }\n  if (returns) {\n    if (newline) {\n      push(`return `);\n    }\n    if (shared.isArray(returns)) {\n      genNodeListAsArray(returns, context);\n    } else {\n      genNode(returns, context);\n    }\n  } else if (body) {\n    genNode(body, context);\n  }\n  if (newline || body) {\n    deindent();\n    push(`}`);\n  }\n  if (isSlot) {\n    if (node.isNonScopedSlot) {\n      push(`, undefined, true`);\n    }\n    push(`)`);\n  }\n}\nfunction genConditionalExpression(node, context) {\n  const { test, consequent, alternate, newline: needNewline } = node;\n  const { push, indent, deindent, newline } = context;\n  if (test.type === 4) {\n    const needsParens = !isSimpleIdentifier(test.content);\n    needsParens && push(`(`);\n    genExpression(test, context);\n    needsParens && push(`)`);\n  } else {\n    push(`(`);\n    genNode(test, context);\n    push(`)`);\n  }\n  needNewline && indent();\n  context.indentLevel++;\n  needNewline || push(` `);\n  push(`? `);\n  genNode(consequent, context);\n  context.indentLevel--;\n  needNewline && newline();\n  needNewline || push(` `);\n  push(`: `);\n  const isNested = alternate.type === 19;\n  if (!isNested) {\n    context.indentLevel++;\n  }\n  genNode(alternate, context);\n  if (!isNested) {\n    context.indentLevel--;\n  }\n  needNewline && deindent(\n    true\n    /* without newline */\n  );\n}\nfunction genCacheExpression(node, context) {\n  const { push, helper, indent, deindent, newline } = context;\n  const { needPauseTracking, needArraySpread } = node;\n  if (needArraySpread) {\n    push(`[...(`);\n  }\n  push(`_cache[${node.index}] || (`);\n  if (needPauseTracking) {\n    indent();\n    push(`${helper(SET_BLOCK_TRACKING)}(-1`);\n    if (node.inVOnce) push(`, true`);\n    push(`),`);\n    newline();\n    push(`(`);\n  }\n  push(`_cache[${node.index}] = `);\n  genNode(node.value, context);\n  if (needPauseTracking) {\n    push(`).cacheIndex = ${node.index},`);\n    newline();\n    push(`${helper(SET_BLOCK_TRACKING)}(1),`);\n    newline();\n    push(`_cache[${node.index}]`);\n    deindent();\n  }\n  push(`)`);\n  if (needArraySpread) {\n    push(`)]`);\n  }\n}\nfunction genTemplateLiteral(node, context) {\n  const { push, indent, deindent } = context;\n  push(\"`\");\n  const l = node.elements.length;\n  const multilines = l > 3;\n  for (let i = 0; i < l; i++) {\n    const e = node.elements[i];\n    if (shared.isString(e)) {\n      push(e.replace(/(`|\\$|\\\\)/g, \"\\\\$1\"), -3 /* Unknown */);\n    } else {\n      push(\"${\");\n      if (multilines) indent();\n      genNode(e, context);\n      if (multilines) deindent();\n      push(\"}\");\n    }\n  }\n  push(\"`\");\n}\nfunction genIfStatement(node, context) {\n  const { push, indent, deindent } = context;\n  const { test, consequent, alternate } = node;\n  push(`if (`);\n  genNode(test, context);\n  push(`) {`);\n  indent();\n  genNode(consequent, context);\n  deindent();\n  push(`}`);\n  if (alternate) {\n    push(` else `);\n    if (alternate.type === 23) {\n      genIfStatement(alternate, context);\n    } else {\n      push(`{`);\n      indent();\n      genNode(alternate, context);\n      deindent();\n      push(`}`);\n    }\n  }\n}\nfunction genAssignmentExpression(node, context) {\n  genNode(node.left, context);\n  context.push(` = `);\n  genNode(node.right, context);\n}\nfunction genSequenceExpression(node, context) {\n  context.push(`(`);\n  genNodeList(node.expressions, context);\n  context.push(`)`);\n}\nfunction genReturnStatement({ returns }, context) {\n  context.push(`return `);\n  if (shared.isArray(returns)) {\n    genNodeListAsArray(returns, context);\n  } else {\n    genNode(returns, context);\n  }\n}\n\nconst isLiteralWhitelisted = /* @__PURE__ */ shared.makeMap(\"true,false,null,this\");\nconst transformExpression = (node, context) => {\n  if (node.type === 5) {\n    node.content = processExpression(\n      node.content,\n      context\n    );\n  } else if (node.type === 1) {\n    const memo = findDir(node, \"memo\");\n    for (let i = 0; i < node.props.length; i++) {\n      const dir = node.props[i];\n      if (dir.type === 7 && dir.name !== \"for\") {\n        const exp = dir.exp;\n        const arg = dir.arg;\n        if (exp && exp.type === 4 && !(dir.name === \"on\" && arg) && // key has been processed in transformFor(vMemo + vFor)\n        !(memo && arg && arg.type === 4 && arg.content === \"key\")) {\n          dir.exp = processExpression(\n            exp,\n            context,\n            // slot args must be processed as function params\n            dir.name === \"slot\"\n          );\n        }\n        if (arg && arg.type === 4 && !arg.isStatic) {\n          dir.arg = processExpression(arg, context);\n        }\n      }\n    }\n  }\n};\nfunction processExpression(node, context, asParams = false, asRawStatements = false, localVars = Object.create(context.identifiers)) {\n  if (!context.prefixIdentifiers || !node.content.trim()) {\n    return node;\n  }\n  const { inline, bindingMetadata } = context;\n  const rewriteIdentifier = (raw, parent, id) => {\n    const type = shared.hasOwn(bindingMetadata, raw) && bindingMetadata[raw];\n    if (inline) {\n      const isAssignmentLVal = parent && parent.type === \"AssignmentExpression\" && parent.left === id;\n      const isUpdateArg = parent && parent.type === \"UpdateExpression\" && parent.argument === id;\n      const isDestructureAssignment = parent && isInDestructureAssignment(parent, parentStack);\n      const isNewExpression = parent && isInNewExpression(parentStack);\n      const wrapWithUnref = (raw2) => {\n        const wrapped = `${context.helperString(UNREF)}(${raw2})`;\n        return isNewExpression ? `(${wrapped})` : wrapped;\n      };\n      if (isConst(type) || type === \"setup-reactive-const\" || localVars[raw]) {\n        return raw;\n      } else if (type === \"setup-ref\") {\n        return `${raw}.value`;\n      } else if (type === \"setup-maybe-ref\") {\n        return isAssignmentLVal || isUpdateArg || isDestructureAssignment ? `${raw}.value` : wrapWithUnref(raw);\n      } else if (type === \"setup-let\") {\n        if (isAssignmentLVal) {\n          const { right: rVal, operator } = parent;\n          const rExp = rawExp.slice(rVal.start - 1, rVal.end - 1);\n          const rExpString = stringifyExpression(\n            processExpression(\n              createSimpleExpression(rExp, false),\n              context,\n              false,\n              false,\n              knownIds\n            )\n          );\n          return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\n` : ``} ? ${raw}.value ${operator} ${rExpString} : ${raw}`;\n        } else if (isUpdateArg) {\n          id.start = parent.start;\n          id.end = parent.end;\n          const { prefix: isPrefix, operator } = parent;\n          const prefix = isPrefix ? operator : ``;\n          const postfix = isPrefix ? `` : operator;\n          return `${context.helperString(IS_REF)}(${raw})${context.isTS ? ` //@ts-ignore\n` : ``} ? ${prefix}${raw}.value${postfix} : ${prefix}${raw}${postfix}`;\n        } else if (isDestructureAssignment) {\n          return raw;\n        } else {\n          return wrapWithUnref(raw);\n        }\n      } else if (type === \"props\") {\n        return shared.genPropsAccessExp(raw);\n      } else if (type === \"props-aliased\") {\n        return shared.genPropsAccessExp(bindingMetadata.__propsAliases[raw]);\n      }\n    } else {\n      if (type && type.startsWith(\"setup\") || type === \"literal-const\") {\n        return `$setup.${raw}`;\n      } else if (type === \"props-aliased\") {\n        return `$props['${bindingMetadata.__propsAliases[raw]}']`;\n      } else if (type) {\n        return `$${type}.${raw}`;\n      }\n    }\n    return `_ctx.${raw}`;\n  };\n  const rawExp = node.content;\n  let ast = node.ast;\n  if (ast === false) {\n    return node;\n  }\n  if (ast === null || !ast && isSimpleIdentifier(rawExp)) {\n    const isScopeVarReference = context.identifiers[rawExp];\n    const isAllowedGlobal = shared.isGloballyAllowed(rawExp);\n    const isLiteral = isLiteralWhitelisted(rawExp);\n    if (!asParams && !isScopeVarReference && !isLiteral && (!isAllowedGlobal || bindingMetadata[rawExp])) {\n      if (isConst(bindingMetadata[rawExp])) {\n        node.constType = 1;\n      }\n      node.content = rewriteIdentifier(rawExp);\n    } else if (!isScopeVarReference) {\n      if (isLiteral) {\n        node.constType = 3;\n      } else {\n        node.constType = 2;\n      }\n    }\n    return node;\n  }\n  if (!ast) {\n    const source = asRawStatements ? ` ${rawExp} ` : `(${rawExp})${asParams ? `=>{}` : ``}`;\n    try {\n      ast = parser.parseExpression(source, {\n        sourceType: \"module\",\n        plugins: context.expressionPlugins\n      });\n    } catch (e) {\n      context.onError(\n        createCompilerError(\n          45,\n          node.loc,\n          void 0,\n          e.message\n        )\n      );\n      return node;\n    }\n  }\n  const ids = [];\n  const parentStack = [];\n  const knownIds = Object.create(context.identifiers);\n  walkIdentifiers(\n    ast,\n    (node2, parent, _, isReferenced, isLocal) => {\n      if (isStaticPropertyKey(node2, parent)) {\n        return;\n      }\n      if (node2.name.startsWith(\"_filter_\")) {\n        return;\n      }\n      const needPrefix = isReferenced && canPrefix(node2);\n      if (needPrefix && !isLocal) {\n        if (isStaticProperty(parent) && parent.shorthand) {\n          node2.prefix = `${node2.name}: `;\n        }\n        node2.name = rewriteIdentifier(node2.name, parent, node2);\n        ids.push(node2);\n      } else {\n        if (!(needPrefix && isLocal) && (!parent || parent.type !== \"CallExpression\" && parent.type !== \"NewExpression\" && parent.type !== \"MemberExpression\")) {\n          node2.isConstant = true;\n        }\n        ids.push(node2);\n      }\n    },\n    true,\n    // invoke on ALL identifiers\n    parentStack,\n    knownIds\n  );\n  const children = [];\n  ids.sort((a, b) => a.start - b.start);\n  ids.forEach((id, i) => {\n    const start = id.start - 1;\n    const end = id.end - 1;\n    const last = ids[i - 1];\n    const leadingText = rawExp.slice(last ? last.end - 1 : 0, start);\n    if (leadingText.length || id.prefix) {\n      children.push(leadingText + (id.prefix || ``));\n    }\n    const source = rawExp.slice(start, end);\n    children.push(\n      createSimpleExpression(\n        id.name,\n        false,\n        {\n          start: advancePositionWithClone(node.loc.start, source, start),\n          end: advancePositionWithClone(node.loc.start, source, end),\n          source\n        },\n        id.isConstant ? 3 : 0\n      )\n    );\n    if (i === ids.length - 1 && end < rawExp.length) {\n      children.push(rawExp.slice(end));\n    }\n  });\n  let ret;\n  if (children.length) {\n    ret = createCompoundExpression(children, node.loc);\n    ret.ast = ast;\n  } else {\n    ret = node;\n    ret.constType = 3;\n  }\n  ret.identifiers = Object.keys(knownIds);\n  return ret;\n}\nfunction canPrefix(id) {\n  if (shared.isGloballyAllowed(id.name)) {\n    return false;\n  }\n  if (id.name === \"require\") {\n    return false;\n  }\n  return true;\n}\nfunction stringifyExpression(exp) {\n  if (shared.isString(exp)) {\n    return exp;\n  } else if (exp.type === 4) {\n    return exp.content;\n  } else {\n    return exp.children.map(stringifyExpression).join(\"\");\n  }\n}\nfunction isConst(type) {\n  return type === \"setup-const\" || type === \"literal-const\";\n}\n\nconst transformIf = createStructuralDirectiveTransform(\n  /^(if|else|else-if)$/,\n  (node, dir, context) => {\n    return processIf(node, dir, context, (ifNode, branch, isRoot) => {\n      const siblings = context.parent.children;\n      let i = siblings.indexOf(ifNode);\n      let key = 0;\n      while (i-- >= 0) {\n        const sibling = siblings[i];\n        if (sibling && sibling.type === 9) {\n          key += sibling.branches.length;\n        }\n      }\n      return () => {\n        if (isRoot) {\n          ifNode.codegenNode = createCodegenNodeForBranch(\n            branch,\n            key,\n            context\n          );\n        } else {\n          const parentCondition = getParentCondition(ifNode.codegenNode);\n          parentCondition.alternate = createCodegenNodeForBranch(\n            branch,\n            key + ifNode.branches.length - 1,\n            context\n          );\n        }\n      };\n    });\n  }\n);\nfunction processIf(node, dir, context, processCodegen) {\n  if (dir.name !== \"else\" && (!dir.exp || !dir.exp.content.trim())) {\n    const loc = dir.exp ? dir.exp.loc : node.loc;\n    context.onError(\n      createCompilerError(28, dir.loc)\n    );\n    dir.exp = createSimpleExpression(`true`, false, loc);\n  }\n  if (context.prefixIdentifiers && dir.exp) {\n    dir.exp = processExpression(dir.exp, context);\n  }\n  if (dir.name === \"if\") {\n    const branch = createIfBranch(node, dir);\n    const ifNode = {\n      type: 9,\n      loc: cloneLoc(node.loc),\n      branches: [branch]\n    };\n    context.replaceNode(ifNode);\n    if (processCodegen) {\n      return processCodegen(ifNode, branch, true);\n    }\n  } else {\n    const siblings = context.parent.children;\n    let i = siblings.indexOf(node);\n    while (i-- >= -1) {\n      const sibling = siblings[i];\n      if (sibling && sibling.type === 3) {\n        context.removeNode(sibling);\n        continue;\n      }\n      if (sibling && sibling.type === 2 && !sibling.content.trim().length) {\n        context.removeNode(sibling);\n        continue;\n      }\n      if (sibling && sibling.type === 9) {\n        if (dir.name === \"else-if\" && sibling.branches[sibling.branches.length - 1].condition === void 0) {\n          context.onError(\n            createCompilerError(30, node.loc)\n          );\n        }\n        context.removeNode();\n        const branch = createIfBranch(node, dir);\n        {\n          const key = branch.userKey;\n          if (key) {\n            sibling.branches.forEach(({ userKey }) => {\n              if (isSameKey(userKey, key)) {\n                context.onError(\n                  createCompilerError(\n                    29,\n                    branch.userKey.loc\n                  )\n                );\n              }\n            });\n          }\n        }\n        sibling.branches.push(branch);\n        const onExit = processCodegen && processCodegen(sibling, branch, false);\n        traverseNode(branch, context);\n        if (onExit) onExit();\n        context.currentNode = null;\n      } else {\n        context.onError(\n          createCompilerError(30, node.loc)\n        );\n      }\n      break;\n    }\n  }\n}\nfunction createIfBranch(node, dir) {\n  const isTemplateIf = node.tagType === 3;\n  return {\n    type: 10,\n    loc: node.loc,\n    condition: dir.name === \"else\" ? void 0 : dir.exp,\n    children: isTemplateIf && !findDir(node, \"for\") ? node.children : [node],\n    userKey: findProp(node, `key`),\n    isTemplateIf\n  };\n}\nfunction createCodegenNodeForBranch(branch, keyIndex, context) {\n  if (branch.condition) {\n    return createConditionalExpression(\n      branch.condition,\n      createChildrenCodegenNode(branch, keyIndex, context),\n      // make sure to pass in asBlock: true so that the comment node call\n      // closes the current block.\n      createCallExpression(context.helper(CREATE_COMMENT), [\n        '\"\"',\n        \"true\"\n      ])\n    );\n  } else {\n    return createChildrenCodegenNode(branch, keyIndex, context);\n  }\n}\nfunction createChildrenCodegenNode(branch, keyIndex, context) {\n  const { helper } = context;\n  const keyProperty = createObjectProperty(\n    `key`,\n    createSimpleExpression(\n      `${keyIndex}`,\n      false,\n      locStub,\n      2\n    )\n  );\n  const { children } = branch;\n  const firstChild = children[0];\n  const needFragmentWrapper = children.length !== 1 || firstChild.type !== 1;\n  if (needFragmentWrapper) {\n    if (children.length === 1 && firstChild.type === 11) {\n      const vnodeCall = firstChild.codegenNode;\n      injectProp(vnodeCall, keyProperty, context);\n      return vnodeCall;\n    } else {\n      let patchFlag = 64;\n      return createVNodeCall(\n        context,\n        helper(FRAGMENT),\n        createObjectExpression([keyProperty]),\n        children,\n        patchFlag,\n        void 0,\n        void 0,\n        true,\n        false,\n        false,\n        branch.loc\n      );\n    }\n  } else {\n    const ret = firstChild.codegenNode;\n    const vnodeCall = getMemoedVNodeCall(ret);\n    if (vnodeCall.type === 13) {\n      convertToBlock(vnodeCall, context);\n    }\n    injectProp(vnodeCall, keyProperty, context);\n    return ret;\n  }\n}\nfunction isSameKey(a, b) {\n  if (!a || a.type !== b.type) {\n    return false;\n  }\n  if (a.type === 6) {\n    if (a.value.content !== b.value.content) {\n      return false;\n    }\n  } else {\n    const exp = a.exp;\n    const branchExp = b.exp;\n    if (exp.type !== branchExp.type) {\n      return false;\n    }\n    if (exp.type !== 4 || exp.isStatic !== branchExp.isStatic || exp.content !== branchExp.content) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction getParentCondition(node) {\n  while (true) {\n    if (node.type === 19) {\n      if (node.alternate.type === 19) {\n        node = node.alternate;\n      } else {\n        return node;\n      }\n    } else if (node.type === 20) {\n      node = node.value;\n    }\n  }\n}\n\nconst transformBind = (dir, _node, context) => {\n  const { modifiers, loc } = dir;\n  const arg = dir.arg;\n  let { exp } = dir;\n  if (exp && exp.type === 4 && !exp.content.trim()) {\n    {\n      context.onError(\n        createCompilerError(34, loc)\n      );\n      return {\n        props: [\n          createObjectProperty(arg, createSimpleExpression(\"\", true, loc))\n        ]\n      };\n    }\n  }\n  if (!exp) {\n    if (arg.type !== 4 || !arg.isStatic) {\n      context.onError(\n        createCompilerError(\n          52,\n          arg.loc\n        )\n      );\n      return {\n        props: [\n          createObjectProperty(arg, createSimpleExpression(\"\", true, loc))\n        ]\n      };\n    }\n    transformBindShorthand(dir, context);\n    exp = dir.exp;\n  }\n  if (arg.type !== 4) {\n    arg.children.unshift(`(`);\n    arg.children.push(`) || \"\"`);\n  } else if (!arg.isStatic) {\n    arg.content = arg.content ? `${arg.content} || \"\"` : `\"\"`;\n  }\n  if (modifiers.some((mod) => mod.content === \"camel\")) {\n    if (arg.type === 4) {\n      if (arg.isStatic) {\n        arg.content = shared.camelize(arg.content);\n      } else {\n        arg.content = `${context.helperString(CAMELIZE)}(${arg.content})`;\n      }\n    } else {\n      arg.children.unshift(`${context.helperString(CAMELIZE)}(`);\n      arg.children.push(`)`);\n    }\n  }\n  if (!context.inSSR) {\n    if (modifiers.some((mod) => mod.content === \"prop\")) {\n      injectPrefix(arg, \".\");\n    }\n    if (modifiers.some((mod) => mod.content === \"attr\")) {\n      injectPrefix(arg, \"^\");\n    }\n  }\n  return {\n    props: [createObjectProperty(arg, exp)]\n  };\n};\nconst transformBindShorthand = (dir, context) => {\n  const arg = dir.arg;\n  const propName = shared.camelize(arg.content);\n  dir.exp = createSimpleExpression(propName, false, arg.loc);\n  {\n    dir.exp = processExpression(dir.exp, context);\n  }\n};\nconst injectPrefix = (arg, prefix) => {\n  if (arg.type === 4) {\n    if (arg.isStatic) {\n      arg.content = prefix + arg.content;\n    } else {\n      arg.content = `\\`${prefix}\\${${arg.content}}\\``;\n    }\n  } else {\n    arg.children.unshift(`'${prefix}' + (`);\n    arg.children.push(`)`);\n  }\n};\n\nconst transformFor = createStructuralDirectiveTransform(\n  \"for\",\n  (node, dir, context) => {\n    const { helper, removeHelper } = context;\n    return processFor(node, dir, context, (forNode) => {\n      const renderExp = createCallExpression(helper(RENDER_LIST), [\n        forNode.source\n      ]);\n      const isTemplate = isTemplateNode(node);\n      const memo = findDir(node, \"memo\");\n      const keyProp = findProp(node, `key`, false, true);\n      const isDirKey = keyProp && keyProp.type === 7;\n      if (isDirKey && !keyProp.exp) {\n        transformBindShorthand(keyProp, context);\n      }\n      let keyExp = keyProp && (keyProp.type === 6 ? keyProp.value ? createSimpleExpression(keyProp.value.content, true) : void 0 : keyProp.exp);\n      if (memo && keyExp && isDirKey) {\n        {\n          keyProp.exp = keyExp = processExpression(\n            keyExp,\n            context\n          );\n        }\n      }\n      const keyProperty = keyProp && keyExp ? createObjectProperty(`key`, keyExp) : null;\n      if (isTemplate) {\n        if (memo) {\n          memo.exp = processExpression(\n            memo.exp,\n            context\n          );\n        }\n        if (keyProperty && keyProp.type !== 6) {\n          keyProperty.value = processExpression(\n            keyProperty.value,\n            context\n          );\n        }\n      }\n      const isStableFragment = forNode.source.type === 4 && forNode.source.constType > 0;\n      const fragmentFlag = isStableFragment ? 64 : keyProp ? 128 : 256;\n      forNode.codegenNode = createVNodeCall(\n        context,\n        helper(FRAGMENT),\n        void 0,\n        renderExp,\n        fragmentFlag,\n        void 0,\n        void 0,\n        true,\n        !isStableFragment,\n        false,\n        node.loc\n      );\n      return () => {\n        let childBlock;\n        const { children } = forNode;\n        if (isTemplate) {\n          node.children.some((c) => {\n            if (c.type === 1) {\n              const key = findProp(c, \"key\");\n              if (key) {\n                context.onError(\n                  createCompilerError(\n                    33,\n                    key.loc\n                  )\n                );\n                return true;\n              }\n            }\n          });\n        }\n        const needFragmentWrapper = children.length !== 1 || children[0].type !== 1;\n        const slotOutlet = isSlotOutlet(node) ? node : isTemplate && node.children.length === 1 && isSlotOutlet(node.children[0]) ? node.children[0] : null;\n        if (slotOutlet) {\n          childBlock = slotOutlet.codegenNode;\n          if (isTemplate && keyProperty) {\n            injectProp(childBlock, keyProperty, context);\n          }\n        } else if (needFragmentWrapper) {\n          childBlock = createVNodeCall(\n            context,\n            helper(FRAGMENT),\n            keyProperty ? createObjectExpression([keyProperty]) : void 0,\n            node.children,\n            64,\n            void 0,\n            void 0,\n            true,\n            void 0,\n            false\n          );\n        } else {\n          childBlock = children[0].codegenNode;\n          if (isTemplate && keyProperty) {\n            injectProp(childBlock, keyProperty, context);\n          }\n          if (childBlock.isBlock !== !isStableFragment) {\n            if (childBlock.isBlock) {\n              removeHelper(OPEN_BLOCK);\n              removeHelper(\n                getVNodeBlockHelper(context.inSSR, childBlock.isComponent)\n              );\n            } else {\n              removeHelper(\n                getVNodeHelper(context.inSSR, childBlock.isComponent)\n              );\n            }\n          }\n          childBlock.isBlock = !isStableFragment;\n          if (childBlock.isBlock) {\n            helper(OPEN_BLOCK);\n            helper(getVNodeBlockHelper(context.inSSR, childBlock.isComponent));\n          } else {\n            helper(getVNodeHelper(context.inSSR, childBlock.isComponent));\n          }\n        }\n        if (memo) {\n          const loop = createFunctionExpression(\n            createForLoopParams(forNode.parseResult, [\n              createSimpleExpression(`_cached`)\n            ])\n          );\n          loop.body = createBlockStatement([\n            createCompoundExpression([`const _memo = (`, memo.exp, `)`]),\n            createCompoundExpression([\n              `if (_cached`,\n              ...keyExp ? [` && _cached.key === `, keyExp] : [],\n              ` && ${context.helperString(\n                IS_MEMO_SAME\n              )}(_cached, _memo)) return _cached`\n            ]),\n            createCompoundExpression([`const _item = `, childBlock]),\n            createSimpleExpression(`_item.memo = _memo`),\n            createSimpleExpression(`return _item`)\n          ]);\n          renderExp.arguments.push(\n            loop,\n            createSimpleExpression(`_cache`),\n            createSimpleExpression(String(context.cached.length))\n          );\n          context.cached.push(null);\n        } else {\n          renderExp.arguments.push(\n            createFunctionExpression(\n              createForLoopParams(forNode.parseResult),\n              childBlock,\n              true\n            )\n          );\n        }\n      };\n    });\n  }\n);\nfunction processFor(node, dir, context, processCodegen) {\n  if (!dir.exp) {\n    context.onError(\n      createCompilerError(31, dir.loc)\n    );\n    return;\n  }\n  const parseResult = dir.forParseResult;\n  if (!parseResult) {\n    context.onError(\n      createCompilerError(32, dir.loc)\n    );\n    return;\n  }\n  finalizeForParseResult(parseResult, context);\n  const { addIdentifiers, removeIdentifiers, scopes } = context;\n  const { source, value, key, index } = parseResult;\n  const forNode = {\n    type: 11,\n    loc: dir.loc,\n    source,\n    valueAlias: value,\n    keyAlias: key,\n    objectIndexAlias: index,\n    parseResult,\n    children: isTemplateNode(node) ? node.children : [node]\n  };\n  context.replaceNode(forNode);\n  scopes.vFor++;\n  if (context.prefixIdentifiers) {\n    value && addIdentifiers(value);\n    key && addIdentifiers(key);\n    index && addIdentifiers(index);\n  }\n  const onExit = processCodegen && processCodegen(forNode);\n  return () => {\n    scopes.vFor--;\n    if (context.prefixIdentifiers) {\n      value && removeIdentifiers(value);\n      key && removeIdentifiers(key);\n      index && removeIdentifiers(index);\n    }\n    if (onExit) onExit();\n  };\n}\nfunction finalizeForParseResult(result, context) {\n  if (result.finalized) return;\n  if (context.prefixIdentifiers) {\n    result.source = processExpression(\n      result.source,\n      context\n    );\n    if (result.key) {\n      result.key = processExpression(\n        result.key,\n        context,\n        true\n      );\n    }\n    if (result.index) {\n      result.index = processExpression(\n        result.index,\n        context,\n        true\n      );\n    }\n    if (result.value) {\n      result.value = processExpression(\n        result.value,\n        context,\n        true\n      );\n    }\n  }\n  result.finalized = true;\n}\nfunction createForLoopParams({ value, key, index }, memoArgs = []) {\n  return createParamsList([value, key, index, ...memoArgs]);\n}\nfunction createParamsList(args) {\n  let i = args.length;\n  while (i--) {\n    if (args[i]) break;\n  }\n  return args.slice(0, i + 1).map((arg, i2) => arg || createSimpleExpression(`_`.repeat(i2 + 1), false));\n}\n\nconst defaultFallback = createSimpleExpression(`undefined`, false);\nconst trackSlotScopes = (node, context) => {\n  if (node.type === 1 && (node.tagType === 1 || node.tagType === 3)) {\n    const vSlot = findDir(node, \"slot\");\n    if (vSlot) {\n      const slotProps = vSlot.exp;\n      if (context.prefixIdentifiers) {\n        slotProps && context.addIdentifiers(slotProps);\n      }\n      context.scopes.vSlot++;\n      return () => {\n        if (context.prefixIdentifiers) {\n          slotProps && context.removeIdentifiers(slotProps);\n        }\n        context.scopes.vSlot--;\n      };\n    }\n  }\n};\nconst trackVForSlotScopes = (node, context) => {\n  let vFor;\n  if (isTemplateNode(node) && node.props.some(isVSlot) && (vFor = findDir(node, \"for\"))) {\n    const result = vFor.forParseResult;\n    if (result) {\n      finalizeForParseResult(result, context);\n      const { value, key, index } = result;\n      const { addIdentifiers, removeIdentifiers } = context;\n      value && addIdentifiers(value);\n      key && addIdentifiers(key);\n      index && addIdentifiers(index);\n      return () => {\n        value && removeIdentifiers(value);\n        key && removeIdentifiers(key);\n        index && removeIdentifiers(index);\n      };\n    }\n  }\n};\nconst buildClientSlotFn = (props, _vForExp, children, loc) => createFunctionExpression(\n  props,\n  children,\n  false,\n  true,\n  children.length ? children[0].loc : loc\n);\nfunction buildSlots(node, context, buildSlotFn = buildClientSlotFn) {\n  context.helper(WITH_CTX);\n  const { children, loc } = node;\n  const slotsProperties = [];\n  const dynamicSlots = [];\n  let hasDynamicSlots = context.scopes.vSlot > 0 || context.scopes.vFor > 0;\n  if (!context.ssr && context.prefixIdentifiers) {\n    hasDynamicSlots = hasScopeRef(node, context.identifiers);\n  }\n  const onComponentSlot = findDir(node, \"slot\", true);\n  if (onComponentSlot) {\n    const { arg, exp } = onComponentSlot;\n    if (arg && !isStaticExp(arg)) {\n      hasDynamicSlots = true;\n    }\n    slotsProperties.push(\n      createObjectProperty(\n        arg || createSimpleExpression(\"default\", true),\n        buildSlotFn(exp, void 0, children, loc)\n      )\n    );\n  }\n  let hasTemplateSlots = false;\n  let hasNamedDefaultSlot = false;\n  const implicitDefaultChildren = [];\n  const seenSlotNames = /* @__PURE__ */ new Set();\n  let conditionalBranchIndex = 0;\n  for (let i = 0; i < children.length; i++) {\n    const slotElement = children[i];\n    let slotDir;\n    if (!isTemplateNode(slotElement) || !(slotDir = findDir(slotElement, \"slot\", true))) {\n      if (slotElement.type !== 3) {\n        implicitDefaultChildren.push(slotElement);\n      }\n      continue;\n    }\n    if (onComponentSlot) {\n      context.onError(\n        createCompilerError(37, slotDir.loc)\n      );\n      break;\n    }\n    hasTemplateSlots = true;\n    const { children: slotChildren, loc: slotLoc } = slotElement;\n    const {\n      arg: slotName = createSimpleExpression(`default`, true),\n      exp: slotProps,\n      loc: dirLoc\n    } = slotDir;\n    let staticSlotName;\n    if (isStaticExp(slotName)) {\n      staticSlotName = slotName ? slotName.content : `default`;\n    } else {\n      hasDynamicSlots = true;\n    }\n    const vFor = findDir(slotElement, \"for\");\n    const slotFunction = buildSlotFn(slotProps, vFor, slotChildren, slotLoc);\n    let vIf;\n    let vElse;\n    if (vIf = findDir(slotElement, \"if\")) {\n      hasDynamicSlots = true;\n      dynamicSlots.push(\n        createConditionalExpression(\n          vIf.exp,\n          buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++),\n          defaultFallback\n        )\n      );\n    } else if (vElse = findDir(\n      slotElement,\n      /^else(-if)?$/,\n      true\n      /* allowEmpty */\n    )) {\n      let j = i;\n      let prev;\n      while (j--) {\n        prev = children[j];\n        if (prev.type !== 3 && isNonWhitespaceContent(prev)) {\n          break;\n        }\n      }\n      if (prev && isTemplateNode(prev) && findDir(prev, /^(else-)?if$/)) {\n        let conditional = dynamicSlots[dynamicSlots.length - 1];\n        while (conditional.alternate.type === 19) {\n          conditional = conditional.alternate;\n        }\n        conditional.alternate = vElse.exp ? createConditionalExpression(\n          vElse.exp,\n          buildDynamicSlot(\n            slotName,\n            slotFunction,\n            conditionalBranchIndex++\n          ),\n          defaultFallback\n        ) : buildDynamicSlot(slotName, slotFunction, conditionalBranchIndex++);\n      } else {\n        context.onError(\n          createCompilerError(30, vElse.loc)\n        );\n      }\n    } else if (vFor) {\n      hasDynamicSlots = true;\n      const parseResult = vFor.forParseResult;\n      if (parseResult) {\n        finalizeForParseResult(parseResult, context);\n        dynamicSlots.push(\n          createCallExpression(context.helper(RENDER_LIST), [\n            parseResult.source,\n            createFunctionExpression(\n              createForLoopParams(parseResult),\n              buildDynamicSlot(slotName, slotFunction),\n              true\n            )\n          ])\n        );\n      } else {\n        context.onError(\n          createCompilerError(\n            32,\n            vFor.loc\n          )\n        );\n      }\n    } else {\n      if (staticSlotName) {\n        if (seenSlotNames.has(staticSlotName)) {\n          context.onError(\n            createCompilerError(\n              38,\n              dirLoc\n            )\n          );\n          continue;\n        }\n        seenSlotNames.add(staticSlotName);\n        if (staticSlotName === \"default\") {\n          hasNamedDefaultSlot = true;\n        }\n      }\n      slotsProperties.push(createObjectProperty(slotName, slotFunction));\n    }\n  }\n  if (!onComponentSlot) {\n    const buildDefaultSlotProperty = (props, children2) => {\n      const fn = buildSlotFn(props, void 0, children2, loc);\n      if (context.compatConfig) {\n        fn.isNonScopedSlot = true;\n      }\n      return createObjectProperty(`default`, fn);\n    };\n    if (!hasTemplateSlots) {\n      slotsProperties.push(buildDefaultSlotProperty(void 0, children));\n    } else if (implicitDefaultChildren.length && // #3766\n    // with whitespace: 'preserve', whitespaces between slots will end up in\n    // implicitDefaultChildren. Ignore if all implicit children are whitespaces.\n    implicitDefaultChildren.some((node2) => isNonWhitespaceContent(node2))) {\n      if (hasNamedDefaultSlot) {\n        context.onError(\n          createCompilerError(\n            39,\n            implicitDefaultChildren[0].loc\n          )\n        );\n      } else {\n        slotsProperties.push(\n          buildDefaultSlotProperty(void 0, implicitDefaultChildren)\n        );\n      }\n    }\n  }\n  const slotFlag = hasDynamicSlots ? 2 : hasForwardedSlots(node.children) ? 3 : 1;\n  let slots = createObjectExpression(\n    slotsProperties.concat(\n      createObjectProperty(\n        `_`,\n        // 2 = compiled but dynamic = can skip normalization, but must run diff\n        // 1 = compiled and static = can skip normalization AND diff as optimized\n        createSimpleExpression(\n          slotFlag + (``),\n          false\n        )\n      )\n    ),\n    loc\n  );\n  if (dynamicSlots.length) {\n    slots = createCallExpression(context.helper(CREATE_SLOTS), [\n      slots,\n      createArrayExpression(dynamicSlots)\n    ]);\n  }\n  return {\n    slots,\n    hasDynamicSlots\n  };\n}\nfunction buildDynamicSlot(name, fn, index) {\n  const props = [\n    createObjectProperty(`name`, name),\n    createObjectProperty(`fn`, fn)\n  ];\n  if (index != null) {\n    props.push(\n      createObjectProperty(`key`, createSimpleExpression(String(index), true))\n    );\n  }\n  return createObjectExpression(props);\n}\nfunction hasForwardedSlots(children) {\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    switch (child.type) {\n      case 1:\n        if (child.tagType === 2 || hasForwardedSlots(child.children)) {\n          return true;\n        }\n        break;\n      case 9:\n        if (hasForwardedSlots(child.branches)) return true;\n        break;\n      case 10:\n      case 11:\n        if (hasForwardedSlots(child.children)) return true;\n        break;\n    }\n  }\n  return false;\n}\nfunction isNonWhitespaceContent(node) {\n  if (node.type !== 2 && node.type !== 12)\n    return true;\n  return node.type === 2 ? !!node.content.trim() : isNonWhitespaceContent(node.content);\n}\n\nconst directiveImportMap = /* @__PURE__ */ new WeakMap();\nconst transformElement = (node, context) => {\n  return function postTransformElement() {\n    node = context.currentNode;\n    if (!(node.type === 1 && (node.tagType === 0 || node.tagType === 1))) {\n      return;\n    }\n    const { tag, props } = node;\n    const isComponent = node.tagType === 1;\n    let vnodeTag = isComponent ? resolveComponentType(node, context) : `\"${tag}\"`;\n    const isDynamicComponent = shared.isObject(vnodeTag) && vnodeTag.callee === RESOLVE_DYNAMIC_COMPONENT;\n    let vnodeProps;\n    let vnodeChildren;\n    let patchFlag = 0;\n    let vnodeDynamicProps;\n    let dynamicPropNames;\n    let vnodeDirectives;\n    let shouldUseBlock = (\n      // dynamic component may resolve to plain elements\n      isDynamicComponent || vnodeTag === TELEPORT || vnodeTag === SUSPENSE || !isComponent && // <svg> and <foreignObject> must be forced into blocks so that block\n      // updates inside get proper isSVG flag at runtime. (#639, #643)\n      // This is technically web-specific, but splitting the logic out of core\n      // leads to too much unnecessary complexity.\n      (tag === \"svg\" || tag === \"foreignObject\" || tag === \"math\")\n    );\n    if (props.length > 0) {\n      const propsBuildResult = buildProps(\n        node,\n        context,\n        void 0,\n        isComponent,\n        isDynamicComponent\n      );\n      vnodeProps = propsBuildResult.props;\n      patchFlag = propsBuildResult.patchFlag;\n      dynamicPropNames = propsBuildResult.dynamicPropNames;\n      const directives = propsBuildResult.directives;\n      vnodeDirectives = directives && directives.length ? createArrayExpression(\n        directives.map((dir) => buildDirectiveArgs(dir, context))\n      ) : void 0;\n      if (propsBuildResult.shouldUseBlock) {\n        shouldUseBlock = true;\n      }\n    }\n    if (node.children.length > 0) {\n      if (vnodeTag === KEEP_ALIVE) {\n        shouldUseBlock = true;\n        patchFlag |= 1024;\n      }\n      const shouldBuildAsSlots = isComponent && // Teleport is not a real component and has dedicated runtime handling\n      vnodeTag !== TELEPORT && // explained above.\n      vnodeTag !== KEEP_ALIVE;\n      if (shouldBuildAsSlots) {\n        const { slots, hasDynamicSlots } = buildSlots(node, context);\n        vnodeChildren = slots;\n        if (hasDynamicSlots) {\n          patchFlag |= 1024;\n        }\n      } else if (node.children.length === 1 && vnodeTag !== TELEPORT) {\n        const child = node.children[0];\n        const type = child.type;\n        const hasDynamicTextChild = type === 5 || type === 8;\n        if (hasDynamicTextChild && getConstantType(child, context) === 0) {\n          patchFlag |= 1;\n        }\n        if (hasDynamicTextChild || type === 2) {\n          vnodeChildren = child;\n        } else {\n          vnodeChildren = node.children;\n        }\n      } else {\n        vnodeChildren = node.children;\n      }\n    }\n    if (dynamicPropNames && dynamicPropNames.length) {\n      vnodeDynamicProps = stringifyDynamicPropNames(dynamicPropNames);\n    }\n    node.codegenNode = createVNodeCall(\n      context,\n      vnodeTag,\n      vnodeProps,\n      vnodeChildren,\n      patchFlag === 0 ? void 0 : patchFlag,\n      vnodeDynamicProps,\n      vnodeDirectives,\n      !!shouldUseBlock,\n      false,\n      isComponent,\n      node.loc\n    );\n  };\n};\nfunction resolveComponentType(node, context, ssr = false) {\n  let { tag } = node;\n  const isExplicitDynamic = isComponentTag(tag);\n  const isProp = findProp(\n    node,\n    \"is\",\n    false,\n    true\n    /* allow empty */\n  );\n  if (isProp) {\n    if (isExplicitDynamic || isCompatEnabled(\n      \"COMPILER_IS_ON_ELEMENT\",\n      context\n    )) {\n      let exp;\n      if (isProp.type === 6) {\n        exp = isProp.value && createSimpleExpression(isProp.value.content, true);\n      } else {\n        exp = isProp.exp;\n        if (!exp) {\n          exp = createSimpleExpression(`is`, false, isProp.arg.loc);\n          {\n            exp = isProp.exp = processExpression(exp, context);\n          }\n        }\n      }\n      if (exp) {\n        return createCallExpression(context.helper(RESOLVE_DYNAMIC_COMPONENT), [\n          exp\n        ]);\n      }\n    } else if (isProp.type === 6 && isProp.value.content.startsWith(\"vue:\")) {\n      tag = isProp.value.content.slice(4);\n    }\n  }\n  const builtIn = isCoreComponent(tag) || context.isBuiltInComponent(tag);\n  if (builtIn) {\n    if (!ssr) context.helper(builtIn);\n    return builtIn;\n  }\n  {\n    const fromSetup = resolveSetupReference(tag, context);\n    if (fromSetup) {\n      return fromSetup;\n    }\n    const dotIndex = tag.indexOf(\".\");\n    if (dotIndex > 0) {\n      const ns = resolveSetupReference(tag.slice(0, dotIndex), context);\n      if (ns) {\n        return ns + tag.slice(dotIndex);\n      }\n    }\n  }\n  if (context.selfName && shared.capitalize(shared.camelize(tag)) === context.selfName) {\n    context.helper(RESOLVE_COMPONENT);\n    context.components.add(tag + `__self`);\n    return toValidAssetId(tag, `component`);\n  }\n  context.helper(RESOLVE_COMPONENT);\n  context.components.add(tag);\n  return toValidAssetId(tag, `component`);\n}\nfunction resolveSetupReference(name, context) {\n  const bindings = context.bindingMetadata;\n  if (!bindings || bindings.__isScriptSetup === false) {\n    return;\n  }\n  const camelName = shared.camelize(name);\n  const PascalName = shared.capitalize(camelName);\n  const checkType = (type) => {\n    if (bindings[name] === type) {\n      return name;\n    }\n    if (bindings[camelName] === type) {\n      return camelName;\n    }\n    if (bindings[PascalName] === type) {\n      return PascalName;\n    }\n  };\n  const fromConst = checkType(\"setup-const\") || checkType(\"setup-reactive-const\") || checkType(\"literal-const\");\n  if (fromConst) {\n    return context.inline ? (\n      // in inline mode, const setup bindings (e.g. imports) can be used as-is\n      fromConst\n    ) : `$setup[${JSON.stringify(fromConst)}]`;\n  }\n  const fromMaybeRef = checkType(\"setup-let\") || checkType(\"setup-ref\") || checkType(\"setup-maybe-ref\");\n  if (fromMaybeRef) {\n    return context.inline ? (\n      // setup scope bindings that may be refs need to be unrefed\n      `${context.helperString(UNREF)}(${fromMaybeRef})`\n    ) : `$setup[${JSON.stringify(fromMaybeRef)}]`;\n  }\n  const fromProps = checkType(\"props\");\n  if (fromProps) {\n    return `${context.helperString(UNREF)}(${context.inline ? \"__props\" : \"$props\"}[${JSON.stringify(fromProps)}])`;\n  }\n}\nfunction buildProps(node, context, props = node.props, isComponent, isDynamicComponent, ssr = false) {\n  const { tag, loc: elementLoc, children } = node;\n  let properties = [];\n  const mergeArgs = [];\n  const runtimeDirectives = [];\n  const hasChildren = children.length > 0;\n  let shouldUseBlock = false;\n  let patchFlag = 0;\n  let hasRef = false;\n  let hasClassBinding = false;\n  let hasStyleBinding = false;\n  let hasHydrationEventBinding = false;\n  let hasDynamicKeys = false;\n  let hasVnodeHook = false;\n  const dynamicPropNames = [];\n  const pushMergeArg = (arg) => {\n    if (properties.length) {\n      mergeArgs.push(\n        createObjectExpression(dedupeProperties(properties), elementLoc)\n      );\n      properties = [];\n    }\n    if (arg) mergeArgs.push(arg);\n  };\n  const pushRefVForMarker = () => {\n    if (context.scopes.vFor > 0) {\n      properties.push(\n        createObjectProperty(\n          createSimpleExpression(\"ref_for\", true),\n          createSimpleExpression(\"true\")\n        )\n      );\n    }\n  };\n  const analyzePatchFlag = ({ key, value }) => {\n    if (isStaticExp(key)) {\n      const name = key.content;\n      const isEventHandler = shared.isOn(name);\n      if (isEventHandler && (!isComponent || isDynamicComponent) && // omit the flag for click handlers because hydration gives click\n      // dedicated fast path.\n      name.toLowerCase() !== \"onclick\" && // omit v-model handlers\n      name !== \"onUpdate:modelValue\" && // omit onVnodeXXX hooks\n      !shared.isReservedProp(name)) {\n        hasHydrationEventBinding = true;\n      }\n      if (isEventHandler && shared.isReservedProp(name)) {\n        hasVnodeHook = true;\n      }\n      if (isEventHandler && value.type === 14) {\n        value = value.arguments[0];\n      }\n      if (value.type === 20 || (value.type === 4 || value.type === 8) && getConstantType(value, context) > 0) {\n        return;\n      }\n      if (name === \"ref\") {\n        hasRef = true;\n      } else if (name === \"class\") {\n        hasClassBinding = true;\n      } else if (name === \"style\") {\n        hasStyleBinding = true;\n      } else if (name !== \"key\" && !dynamicPropNames.includes(name)) {\n        dynamicPropNames.push(name);\n      }\n      if (isComponent && (name === \"class\" || name === \"style\") && !dynamicPropNames.includes(name)) {\n        dynamicPropNames.push(name);\n      }\n    } else {\n      hasDynamicKeys = true;\n    }\n  };\n  for (let i = 0; i < props.length; i++) {\n    const prop = props[i];\n    if (prop.type === 6) {\n      const { loc, name, nameLoc, value } = prop;\n      let isStatic = true;\n      if (name === \"ref\") {\n        hasRef = true;\n        pushRefVForMarker();\n        if (value && context.inline) {\n          const binding = context.bindingMetadata[value.content];\n          if (binding === \"setup-let\" || binding === \"setup-ref\" || binding === \"setup-maybe-ref\") {\n            isStatic = false;\n            properties.push(\n              createObjectProperty(\n                createSimpleExpression(\"ref_key\", true),\n                createSimpleExpression(value.content, true, value.loc)\n              )\n            );\n          }\n        }\n      }\n      if (name === \"is\" && (isComponentTag(tag) || value && value.content.startsWith(\"vue:\") || isCompatEnabled(\n        \"COMPILER_IS_ON_ELEMENT\",\n        context\n      ))) {\n        continue;\n      }\n      properties.push(\n        createObjectProperty(\n          createSimpleExpression(name, true, nameLoc),\n          createSimpleExpression(\n            value ? value.content : \"\",\n            isStatic,\n            value ? value.loc : loc\n          )\n        )\n      );\n    } else {\n      const { name, arg, exp, loc, modifiers } = prop;\n      const isVBind = name === \"bind\";\n      const isVOn = name === \"on\";\n      if (name === \"slot\") {\n        if (!isComponent) {\n          context.onError(\n            createCompilerError(40, loc)\n          );\n        }\n        continue;\n      }\n      if (name === \"once\" || name === \"memo\") {\n        continue;\n      }\n      if (name === \"is\" || isVBind && isStaticArgOf(arg, \"is\") && (isComponentTag(tag) || isCompatEnabled(\n        \"COMPILER_IS_ON_ELEMENT\",\n        context\n      ))) {\n        continue;\n      }\n      if (isVOn && ssr) {\n        continue;\n      }\n      if (\n        // #938: elements with dynamic keys should be forced into blocks\n        isVBind && isStaticArgOf(arg, \"key\") || // inline before-update hooks need to force block so that it is invoked\n        // before children\n        isVOn && hasChildren && isStaticArgOf(arg, \"vue:before-update\")\n      ) {\n        shouldUseBlock = true;\n      }\n      if (isVBind && isStaticArgOf(arg, \"ref\")) {\n        pushRefVForMarker();\n      }\n      if (!arg && (isVBind || isVOn)) {\n        hasDynamicKeys = true;\n        if (exp) {\n          if (isVBind) {\n            {\n              pushMergeArg();\n              if (isCompatEnabled(\n                \"COMPILER_V_BIND_OBJECT_ORDER\",\n                context\n              )) {\n                mergeArgs.unshift(exp);\n                continue;\n              }\n            }\n            pushRefVForMarker();\n            pushMergeArg();\n            mergeArgs.push(exp);\n          } else {\n            pushMergeArg({\n              type: 14,\n              loc,\n              callee: context.helper(TO_HANDLERS),\n              arguments: isComponent ? [exp] : [exp, `true`]\n            });\n          }\n        } else {\n          context.onError(\n            createCompilerError(\n              isVBind ? 34 : 35,\n              loc\n            )\n          );\n        }\n        continue;\n      }\n      if (isVBind && modifiers.some((mod) => mod.content === \"prop\")) {\n        patchFlag |= 32;\n      }\n      const directiveTransform = context.directiveTransforms[name];\n      if (directiveTransform) {\n        const { props: props2, needRuntime } = directiveTransform(prop, node, context);\n        !ssr && props2.forEach(analyzePatchFlag);\n        if (isVOn && arg && !isStaticExp(arg)) {\n          pushMergeArg(createObjectExpression(props2, elementLoc));\n        } else {\n          properties.push(...props2);\n        }\n        if (needRuntime) {\n          runtimeDirectives.push(prop);\n          if (shared.isSymbol(needRuntime)) {\n            directiveImportMap.set(prop, needRuntime);\n          }\n        }\n      } else if (!shared.isBuiltInDirective(name)) {\n        runtimeDirectives.push(prop);\n        if (hasChildren) {\n          shouldUseBlock = true;\n        }\n      }\n    }\n  }\n  let propsExpression = void 0;\n  if (mergeArgs.length) {\n    pushMergeArg();\n    if (mergeArgs.length > 1) {\n      propsExpression = createCallExpression(\n        context.helper(MERGE_PROPS),\n        mergeArgs,\n        elementLoc\n      );\n    } else {\n      propsExpression = mergeArgs[0];\n    }\n  } else if (properties.length) {\n    propsExpression = createObjectExpression(\n      dedupeProperties(properties),\n      elementLoc\n    );\n  }\n  if (hasDynamicKeys) {\n    patchFlag |= 16;\n  } else {\n    if (hasClassBinding && !isComponent) {\n      patchFlag |= 2;\n    }\n    if (hasStyleBinding && !isComponent) {\n      patchFlag |= 4;\n    }\n    if (dynamicPropNames.length) {\n      patchFlag |= 8;\n    }\n    if (hasHydrationEventBinding) {\n      patchFlag |= 32;\n    }\n  }\n  if (!shouldUseBlock && (patchFlag === 0 || patchFlag === 32) && (hasRef || hasVnodeHook || runtimeDirectives.length > 0)) {\n    patchFlag |= 512;\n  }\n  if (!context.inSSR && propsExpression) {\n    switch (propsExpression.type) {\n      case 15:\n        let classKeyIndex = -1;\n        let styleKeyIndex = -1;\n        let hasDynamicKey = false;\n        for (let i = 0; i < propsExpression.properties.length; i++) {\n          const key = propsExpression.properties[i].key;\n          if (isStaticExp(key)) {\n            if (key.content === \"class\") {\n              classKeyIndex = i;\n            } else if (key.content === \"style\") {\n              styleKeyIndex = i;\n            }\n          } else if (!key.isHandlerKey) {\n            hasDynamicKey = true;\n          }\n        }\n        const classProp = propsExpression.properties[classKeyIndex];\n        const styleProp = propsExpression.properties[styleKeyIndex];\n        if (!hasDynamicKey) {\n          if (classProp && !isStaticExp(classProp.value)) {\n            classProp.value = createCallExpression(\n              context.helper(NORMALIZE_CLASS),\n              [classProp.value]\n            );\n          }\n          if (styleProp && // the static style is compiled into an object,\n          // so use `hasStyleBinding` to ensure that it is a dynamic style binding\n          (hasStyleBinding || styleProp.value.type === 4 && styleProp.value.content.trim()[0] === `[` || // v-bind:style and style both exist,\n          // v-bind:style with static literal object\n          styleProp.value.type === 17)) {\n            styleProp.value = createCallExpression(\n              context.helper(NORMALIZE_STYLE),\n              [styleProp.value]\n            );\n          }\n        } else {\n          propsExpression = createCallExpression(\n            context.helper(NORMALIZE_PROPS),\n            [propsExpression]\n          );\n        }\n        break;\n      case 14:\n        break;\n      default:\n        propsExpression = createCallExpression(\n          context.helper(NORMALIZE_PROPS),\n          [\n            createCallExpression(context.helper(GUARD_REACTIVE_PROPS), [\n              propsExpression\n            ])\n          ]\n        );\n        break;\n    }\n  }\n  return {\n    props: propsExpression,\n    directives: runtimeDirectives,\n    patchFlag,\n    dynamicPropNames,\n    shouldUseBlock\n  };\n}\nfunction dedupeProperties(properties) {\n  const knownProps = /* @__PURE__ */ new Map();\n  const deduped = [];\n  for (let i = 0; i < properties.length; i++) {\n    const prop = properties[i];\n    if (prop.key.type === 8 || !prop.key.isStatic) {\n      deduped.push(prop);\n      continue;\n    }\n    const name = prop.key.content;\n    const existing = knownProps.get(name);\n    if (existing) {\n      if (name === \"style\" || name === \"class\" || shared.isOn(name)) {\n        mergeAsArray(existing, prop);\n      }\n    } else {\n      knownProps.set(name, prop);\n      deduped.push(prop);\n    }\n  }\n  return deduped;\n}\nfunction mergeAsArray(existing, incoming) {\n  if (existing.value.type === 17) {\n    existing.value.elements.push(incoming.value);\n  } else {\n    existing.value = createArrayExpression(\n      [existing.value, incoming.value],\n      existing.loc\n    );\n  }\n}\nfunction buildDirectiveArgs(dir, context) {\n  const dirArgs = [];\n  const runtime = directiveImportMap.get(dir);\n  if (runtime) {\n    dirArgs.push(context.helperString(runtime));\n  } else {\n    const fromSetup = resolveSetupReference(\"v-\" + dir.name, context);\n    if (fromSetup) {\n      dirArgs.push(fromSetup);\n    } else {\n      context.helper(RESOLVE_DIRECTIVE);\n      context.directives.add(dir.name);\n      dirArgs.push(toValidAssetId(dir.name, `directive`));\n    }\n  }\n  const { loc } = dir;\n  if (dir.exp) dirArgs.push(dir.exp);\n  if (dir.arg) {\n    if (!dir.exp) {\n      dirArgs.push(`void 0`);\n    }\n    dirArgs.push(dir.arg);\n  }\n  if (Object.keys(dir.modifiers).length) {\n    if (!dir.arg) {\n      if (!dir.exp) {\n        dirArgs.push(`void 0`);\n      }\n      dirArgs.push(`void 0`);\n    }\n    const trueExpression = createSimpleExpression(`true`, false, loc);\n    dirArgs.push(\n      createObjectExpression(\n        dir.modifiers.map(\n          (modifier) => createObjectProperty(modifier, trueExpression)\n        ),\n        loc\n      )\n    );\n  }\n  return createArrayExpression(dirArgs, dir.loc);\n}\nfunction stringifyDynamicPropNames(props) {\n  let propsNamesString = `[`;\n  for (let i = 0, l = props.length; i < l; i++) {\n    propsNamesString += JSON.stringify(props[i]);\n    if (i < l - 1) propsNamesString += \", \";\n  }\n  return propsNamesString + `]`;\n}\nfunction isComponentTag(tag) {\n  return tag === \"component\" || tag === \"Component\";\n}\n\nconst transformSlotOutlet = (node, context) => {\n  if (isSlotOutlet(node)) {\n    const { children, loc } = node;\n    const { slotName, slotProps } = processSlotOutlet(node, context);\n    const slotArgs = [\n      context.prefixIdentifiers ? `_ctx.$slots` : `$slots`,\n      slotName,\n      \"{}\",\n      \"undefined\",\n      \"true\"\n    ];\n    let expectedLen = 2;\n    if (slotProps) {\n      slotArgs[2] = slotProps;\n      expectedLen = 3;\n    }\n    if (children.length) {\n      slotArgs[3] = createFunctionExpression([], children, false, false, loc);\n      expectedLen = 4;\n    }\n    if (context.scopeId && !context.slotted) {\n      expectedLen = 5;\n    }\n    slotArgs.splice(expectedLen);\n    node.codegenNode = createCallExpression(\n      context.helper(RENDER_SLOT),\n      slotArgs,\n      loc\n    );\n  }\n};\nfunction processSlotOutlet(node, context) {\n  let slotName = `\"default\"`;\n  let slotProps = void 0;\n  const nonNameProps = [];\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 6) {\n      if (p.value) {\n        if (p.name === \"name\") {\n          slotName = JSON.stringify(p.value.content);\n        } else {\n          p.name = shared.camelize(p.name);\n          nonNameProps.push(p);\n        }\n      }\n    } else {\n      if (p.name === \"bind\" && isStaticArgOf(p.arg, \"name\")) {\n        if (p.exp) {\n          slotName = p.exp;\n        } else if (p.arg && p.arg.type === 4) {\n          const name = shared.camelize(p.arg.content);\n          slotName = p.exp = createSimpleExpression(name, false, p.arg.loc);\n          {\n            slotName = p.exp = processExpression(p.exp, context);\n          }\n        }\n      } else {\n        if (p.name === \"bind\" && p.arg && isStaticExp(p.arg)) {\n          p.arg.content = shared.camelize(p.arg.content);\n        }\n        nonNameProps.push(p);\n      }\n    }\n  }\n  if (nonNameProps.length > 0) {\n    const { props, directives } = buildProps(\n      node,\n      context,\n      nonNameProps,\n      false,\n      false\n    );\n    slotProps = props;\n    if (directives.length) {\n      context.onError(\n        createCompilerError(\n          36,\n          directives[0].loc\n        )\n      );\n    }\n  }\n  return {\n    slotName,\n    slotProps\n  };\n}\n\nconst transformOn = (dir, node, context, augmentor) => {\n  const { loc, modifiers, arg } = dir;\n  if (!dir.exp && !modifiers.length) {\n    context.onError(createCompilerError(35, loc));\n  }\n  let eventName;\n  if (arg.type === 4) {\n    if (arg.isStatic) {\n      let rawName = arg.content;\n      if (rawName.startsWith(\"vue:\")) {\n        rawName = `vnode-${rawName.slice(4)}`;\n      }\n      const eventString = node.tagType !== 0 || rawName.startsWith(\"vnode\") || !/[A-Z]/.test(rawName) ? (\n        // for non-element and vnode lifecycle event listeners, auto convert\n        // it to camelCase. See issue #2249\n        shared.toHandlerKey(shared.camelize(rawName))\n      ) : (\n        // preserve case for plain element listeners that have uppercase\n        // letters, as these may be custom elements' custom events\n        `on:${rawName}`\n      );\n      eventName = createSimpleExpression(eventString, true, arg.loc);\n    } else {\n      eventName = createCompoundExpression([\n        `${context.helperString(TO_HANDLER_KEY)}(`,\n        arg,\n        `)`\n      ]);\n    }\n  } else {\n    eventName = arg;\n    eventName.children.unshift(`${context.helperString(TO_HANDLER_KEY)}(`);\n    eventName.children.push(`)`);\n  }\n  let exp = dir.exp;\n  if (exp && !exp.content.trim()) {\n    exp = void 0;\n  }\n  let shouldCache = context.cacheHandlers && !exp && !context.inVOnce;\n  if (exp) {\n    const isMemberExp = isMemberExpression(exp, context);\n    const isInlineStatement = !(isMemberExp || isFnExpression(exp, context));\n    const hasMultipleStatements = exp.content.includes(`;`);\n    if (context.prefixIdentifiers) {\n      isInlineStatement && context.addIdentifiers(`$event`);\n      exp = dir.exp = processExpression(\n        exp,\n        context,\n        false,\n        hasMultipleStatements\n      );\n      isInlineStatement && context.removeIdentifiers(`$event`);\n      shouldCache = context.cacheHandlers && // unnecessary to cache inside v-once\n      !context.inVOnce && // runtime constants don't need to be cached\n      // (this is analyzed by compileScript in SFC <script setup>)\n      !(exp.type === 4 && exp.constType > 0) && // #1541 bail if this is a member exp handler passed to a component -\n      // we need to use the original function to preserve arity,\n      // e.g. <transition> relies on checking cb.length to determine\n      // transition end handling. Inline function is ok since its arity\n      // is preserved even when cached.\n      !(isMemberExp && node.tagType === 1) && // bail if the function references closure variables (v-for, v-slot)\n      // it must be passed fresh to avoid stale values.\n      !hasScopeRef(exp, context.identifiers);\n      if (shouldCache && isMemberExp) {\n        if (exp.type === 4) {\n          exp.content = `${exp.content} && ${exp.content}(...args)`;\n        } else {\n          exp.children = [...exp.children, ` && `, ...exp.children, `(...args)`];\n        }\n      }\n    }\n    if (isInlineStatement || shouldCache && isMemberExp) {\n      exp = createCompoundExpression([\n        `${isInlineStatement ? context.isTS ? `($event: any)` : `$event` : `${context.isTS ? `\n//@ts-ignore\n` : ``}(...args)`} => ${hasMultipleStatements ? `{` : `(`}`,\n        exp,\n        hasMultipleStatements ? `}` : `)`\n      ]);\n    }\n  }\n  let ret = {\n    props: [\n      createObjectProperty(\n        eventName,\n        exp || createSimpleExpression(`() => {}`, false, loc)\n      )\n    ]\n  };\n  if (augmentor) {\n    ret = augmentor(ret);\n  }\n  if (shouldCache) {\n    ret.props[0].value = context.cache(ret.props[0].value);\n  }\n  ret.props.forEach((p) => p.key.isHandlerKey = true);\n  return ret;\n};\n\nconst transformText = (node, context) => {\n  if (node.type === 0 || node.type === 1 || node.type === 11 || node.type === 10) {\n    return () => {\n      const children = node.children;\n      let currentContainer = void 0;\n      let hasText = false;\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (isText$1(child)) {\n          hasText = true;\n          for (let j = i + 1; j < children.length; j++) {\n            const next = children[j];\n            if (isText$1(next)) {\n              if (!currentContainer) {\n                currentContainer = children[i] = createCompoundExpression(\n                  [child],\n                  child.loc\n                );\n              }\n              currentContainer.children.push(` + `, next);\n              children.splice(j, 1);\n              j--;\n            } else {\n              currentContainer = void 0;\n              break;\n            }\n          }\n        }\n      }\n      if (!hasText || // if this is a plain element with a single text child, leave it\n      // as-is since the runtime has dedicated fast path for this by directly\n      // setting textContent of the element.\n      // for component root it's always normalized anyway.\n      children.length === 1 && (node.type === 0 || node.type === 1 && node.tagType === 0 && // #3756\n      // custom directives can potentially add DOM elements arbitrarily,\n      // we need to avoid setting textContent of the element at runtime\n      // to avoid accidentally overwriting the DOM elements added\n      // by the user through custom directives.\n      !node.props.find(\n        (p) => p.type === 7 && !context.directiveTransforms[p.name]\n      ) && // in compat mode, <template> tags with no special directives\n      // will be rendered as a fragment so its children must be\n      // converted into vnodes.\n      !(node.tag === \"template\"))) {\n        return;\n      }\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (isText$1(child) || child.type === 8) {\n          const callArgs = [];\n          if (child.type !== 2 || child.content !== \" \") {\n            callArgs.push(child);\n          }\n          if (!context.ssr && getConstantType(child, context) === 0) {\n            callArgs.push(\n              1 + (``)\n            );\n          }\n          children[i] = {\n            type: 12,\n            content: child,\n            loc: child.loc,\n            codegenNode: createCallExpression(\n              context.helper(CREATE_TEXT),\n              callArgs\n            )\n          };\n        }\n      }\n    };\n  }\n};\n\nconst seen$1 = /* @__PURE__ */ new WeakSet();\nconst transformOnce = (node, context) => {\n  if (node.type === 1 && findDir(node, \"once\", true)) {\n    if (seen$1.has(node) || context.inVOnce || context.inSSR) {\n      return;\n    }\n    seen$1.add(node);\n    context.inVOnce = true;\n    context.helper(SET_BLOCK_TRACKING);\n    return () => {\n      context.inVOnce = false;\n      const cur = context.currentNode;\n      if (cur.codegenNode) {\n        cur.codegenNode = context.cache(\n          cur.codegenNode,\n          true,\n          true\n        );\n      }\n    };\n  }\n};\n\nconst transformModel = (dir, node, context) => {\n  const { exp, arg } = dir;\n  if (!exp) {\n    context.onError(\n      createCompilerError(41, dir.loc)\n    );\n    return createTransformProps();\n  }\n  const rawExp = exp.loc.source.trim();\n  const expString = exp.type === 4 ? exp.content : rawExp;\n  const bindingType = context.bindingMetadata[rawExp];\n  if (bindingType === \"props\" || bindingType === \"props-aliased\") {\n    context.onError(createCompilerError(44, exp.loc));\n    return createTransformProps();\n  }\n  const maybeRef = context.inline && (bindingType === \"setup-let\" || bindingType === \"setup-ref\" || bindingType === \"setup-maybe-ref\");\n  if (!expString.trim() || !isMemberExpression(exp, context) && !maybeRef) {\n    context.onError(\n      createCompilerError(42, exp.loc)\n    );\n    return createTransformProps();\n  }\n  if (context.prefixIdentifiers && isSimpleIdentifier(expString) && context.identifiers[expString]) {\n    context.onError(\n      createCompilerError(43, exp.loc)\n    );\n    return createTransformProps();\n  }\n  const propName = arg ? arg : createSimpleExpression(\"modelValue\", true);\n  const eventName = arg ? isStaticExp(arg) ? `onUpdate:${shared.camelize(arg.content)}` : createCompoundExpression(['\"onUpdate:\" + ', arg]) : `onUpdate:modelValue`;\n  let assignmentExp;\n  const eventArg = context.isTS ? `($event: any)` : `$event`;\n  if (maybeRef) {\n    if (bindingType === \"setup-ref\") {\n      assignmentExp = createCompoundExpression([\n        `${eventArg} => ((`,\n        createSimpleExpression(rawExp, false, exp.loc),\n        `).value = $event)`\n      ]);\n    } else {\n      const altAssignment = bindingType === \"setup-let\" ? `${rawExp} = $event` : `null`;\n      assignmentExp = createCompoundExpression([\n        `${eventArg} => (${context.helperString(IS_REF)}(${rawExp}) ? (`,\n        createSimpleExpression(rawExp, false, exp.loc),\n        `).value = $event : ${altAssignment})`\n      ]);\n    }\n  } else {\n    assignmentExp = createCompoundExpression([\n      `${eventArg} => ((`,\n      exp,\n      `) = $event)`\n    ]);\n  }\n  const props = [\n    // modelValue: foo\n    createObjectProperty(propName, dir.exp),\n    // \"onUpdate:modelValue\": $event => (foo = $event)\n    createObjectProperty(eventName, assignmentExp)\n  ];\n  if (context.prefixIdentifiers && !context.inVOnce && context.cacheHandlers && !hasScopeRef(exp, context.identifiers)) {\n    props[1].value = context.cache(props[1].value);\n  }\n  if (dir.modifiers.length && node.tagType === 1) {\n    const modifiers = dir.modifiers.map((m) => m.content).map((m) => (isSimpleIdentifier(m) ? m : JSON.stringify(m)) + `: true`).join(`, `);\n    const modifiersKey = arg ? isStaticExp(arg) ? `${arg.content}Modifiers` : createCompoundExpression([arg, ' + \"Modifiers\"']) : `modelModifiers`;\n    props.push(\n      createObjectProperty(\n        modifiersKey,\n        createSimpleExpression(\n          `{ ${modifiers} }`,\n          false,\n          dir.loc,\n          2\n        )\n      )\n    );\n  }\n  return createTransformProps(props);\n};\nfunction createTransformProps(props = []) {\n  return { props };\n}\n\nconst validDivisionCharRE = /[\\w).+\\-_$\\]]/;\nconst transformFilter = (node, context) => {\n  if (!isCompatEnabled(\"COMPILER_FILTERS\", context)) {\n    return;\n  }\n  if (node.type === 5) {\n    rewriteFilter(node.content, context);\n  } else if (node.type === 1) {\n    node.props.forEach((prop) => {\n      if (prop.type === 7 && prop.name !== \"for\" && prop.exp) {\n        rewriteFilter(prop.exp, context);\n      }\n    });\n  }\n};\nfunction rewriteFilter(node, context) {\n  if (node.type === 4) {\n    parseFilter(node, context);\n  } else {\n    for (let i = 0; i < node.children.length; i++) {\n      const child = node.children[i];\n      if (typeof child !== \"object\") continue;\n      if (child.type === 4) {\n        parseFilter(child, context);\n      } else if (child.type === 8) {\n        rewriteFilter(node, context);\n      } else if (child.type === 5) {\n        rewriteFilter(child.content, context);\n      }\n    }\n  }\n}\nfunction parseFilter(node, context) {\n  const exp = node.content;\n  let inSingle = false;\n  let inDouble = false;\n  let inTemplateString = false;\n  let inRegex = false;\n  let curly = 0;\n  let square = 0;\n  let paren = 0;\n  let lastFilterIndex = 0;\n  let c, prev, i, expression, filters = [];\n  for (i = 0; i < exp.length; i++) {\n    prev = c;\n    c = exp.charCodeAt(i);\n    if (inSingle) {\n      if (c === 39 && prev !== 92) inSingle = false;\n    } else if (inDouble) {\n      if (c === 34 && prev !== 92) inDouble = false;\n    } else if (inTemplateString) {\n      if (c === 96 && prev !== 92) inTemplateString = false;\n    } else if (inRegex) {\n      if (c === 47 && prev !== 92) inRegex = false;\n    } else if (c === 124 && // pipe\n    exp.charCodeAt(i + 1) !== 124 && exp.charCodeAt(i - 1) !== 124 && !curly && !square && !paren) {\n      if (expression === void 0) {\n        lastFilterIndex = i + 1;\n        expression = exp.slice(0, i).trim();\n      } else {\n        pushFilter();\n      }\n    } else {\n      switch (c) {\n        case 34:\n          inDouble = true;\n          break;\n        // \"\n        case 39:\n          inSingle = true;\n          break;\n        // '\n        case 96:\n          inTemplateString = true;\n          break;\n        // `\n        case 40:\n          paren++;\n          break;\n        // (\n        case 41:\n          paren--;\n          break;\n        // )\n        case 91:\n          square++;\n          break;\n        // [\n        case 93:\n          square--;\n          break;\n        // ]\n        case 123:\n          curly++;\n          break;\n        // {\n        case 125:\n          curly--;\n          break;\n      }\n      if (c === 47) {\n        let j = i - 1;\n        let p;\n        for (; j >= 0; j--) {\n          p = exp.charAt(j);\n          if (p !== \" \") break;\n        }\n        if (!p || !validDivisionCharRE.test(p)) {\n          inRegex = true;\n        }\n      }\n    }\n  }\n  if (expression === void 0) {\n    expression = exp.slice(0, i).trim();\n  } else if (lastFilterIndex !== 0) {\n    pushFilter();\n  }\n  function pushFilter() {\n    filters.push(exp.slice(lastFilterIndex, i).trim());\n    lastFilterIndex = i + 1;\n  }\n  if (filters.length) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i], context);\n    }\n    node.content = expression;\n    node.ast = void 0;\n  }\n}\nfunction wrapFilter(exp, filter, context) {\n  context.helper(RESOLVE_FILTER);\n  const i = filter.indexOf(\"(\");\n  if (i < 0) {\n    context.filters.add(filter);\n    return `${toValidAssetId(filter, \"filter\")}(${exp})`;\n  } else {\n    const name = filter.slice(0, i);\n    const args = filter.slice(i + 1);\n    context.filters.add(name);\n    return `${toValidAssetId(name, \"filter\")}(${exp}${args !== \")\" ? \",\" + args : args}`;\n  }\n}\n\nconst seen = /* @__PURE__ */ new WeakSet();\nconst transformMemo = (node, context) => {\n  if (node.type === 1) {\n    const dir = findDir(node, \"memo\");\n    if (!dir || seen.has(node)) {\n      return;\n    }\n    seen.add(node);\n    return () => {\n      const codegenNode = node.codegenNode || context.currentNode.codegenNode;\n      if (codegenNode && codegenNode.type === 13) {\n        if (node.tagType !== 1) {\n          convertToBlock(codegenNode, context);\n        }\n        node.codegenNode = createCallExpression(context.helper(WITH_MEMO), [\n          dir.exp,\n          createFunctionExpression(void 0, codegenNode),\n          `_cache`,\n          String(context.cached.length)\n        ]);\n        context.cached.push(null);\n      }\n    };\n  }\n};\n\nfunction getBaseTransformPreset(prefixIdentifiers) {\n  return [\n    [\n      transformOnce,\n      transformIf,\n      transformMemo,\n      transformFor,\n      ...[transformFilter] ,\n      ...prefixIdentifiers ? [\n        // order is important\n        trackVForSlotScopes,\n        transformExpression\n      ] : [],\n      transformSlotOutlet,\n      transformElement,\n      trackSlotScopes,\n      transformText\n    ],\n    {\n      on: transformOn,\n      bind: transformBind,\n      model: transformModel\n    }\n  ];\n}\nfunction baseCompile(source, options = {}) {\n  const onError = options.onError || defaultOnError;\n  const isModuleMode = options.mode === \"module\";\n  const prefixIdentifiers = options.prefixIdentifiers === true || isModuleMode;\n  if (!prefixIdentifiers && options.cacheHandlers) {\n    onError(createCompilerError(49));\n  }\n  if (options.scopeId && !isModuleMode) {\n    onError(createCompilerError(50));\n  }\n  const resolvedOptions = shared.extend({}, options, {\n    prefixIdentifiers\n  });\n  const ast = shared.isString(source) ? baseParse(source, resolvedOptions) : source;\n  const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(prefixIdentifiers);\n  if (options.isTS) {\n    const { expressionPlugins } = options;\n    if (!expressionPlugins || !expressionPlugins.includes(\"typescript\")) {\n      options.expressionPlugins = [...expressionPlugins || [], \"typescript\"];\n    }\n  }\n  transform(\n    ast,\n    shared.extend({}, resolvedOptions, {\n      nodeTransforms: [\n        ...nodeTransforms,\n        ...options.nodeTransforms || []\n        // user transforms\n      ],\n      directiveTransforms: shared.extend(\n        {},\n        directiveTransforms,\n        options.directiveTransforms || {}\n        // user transforms\n      )\n    })\n  );\n  return generate(ast, resolvedOptions);\n}\n\nconst BindingTypes = {\n  \"DATA\": \"data\",\n  \"PROPS\": \"props\",\n  \"PROPS_ALIASED\": \"props-aliased\",\n  \"SETUP_LET\": \"setup-let\",\n  \"SETUP_CONST\": \"setup-const\",\n  \"SETUP_REACTIVE_CONST\": \"setup-reactive-const\",\n  \"SETUP_MAYBE_REF\": \"setup-maybe-ref\",\n  \"SETUP_REF\": \"setup-ref\",\n  \"OPTIONS\": \"options\",\n  \"LITERAL_CONST\": \"literal-const\"\n};\n\nconst noopDirectiveTransform = () => ({ props: [] });\n\nexports.generateCodeFrame = shared.generateCodeFrame;\nexports.BASE_TRANSITION = BASE_TRANSITION;\nexports.BindingTypes = BindingTypes;\nexports.CAMELIZE = CAMELIZE;\nexports.CAPITALIZE = CAPITALIZE;\nexports.CREATE_BLOCK = CREATE_BLOCK;\nexports.CREATE_COMMENT = CREATE_COMMENT;\nexports.CREATE_ELEMENT_BLOCK = CREATE_ELEMENT_BLOCK;\nexports.CREATE_ELEMENT_VNODE = CREATE_ELEMENT_VNODE;\nexports.CREATE_SLOTS = CREATE_SLOTS;\nexports.CREATE_STATIC = CREATE_STATIC;\nexports.CREATE_TEXT = CREATE_TEXT;\nexports.CREATE_VNODE = CREATE_VNODE;\nexports.CompilerDeprecationTypes = CompilerDeprecationTypes;\nexports.ConstantTypes = ConstantTypes;\nexports.ElementTypes = ElementTypes;\nexports.ErrorCodes = ErrorCodes;\nexports.FRAGMENT = FRAGMENT;\nexports.GUARD_REACTIVE_PROPS = GUARD_REACTIVE_PROPS;\nexports.IS_MEMO_SAME = IS_MEMO_SAME;\nexports.IS_REF = IS_REF;\nexports.KEEP_ALIVE = KEEP_ALIVE;\nexports.MERGE_PROPS = MERGE_PROPS;\nexports.NORMALIZE_CLASS = NORMALIZE_CLASS;\nexports.NORMALIZE_PROPS = NORMALIZE_PROPS;\nexports.NORMALIZE_STYLE = NORMALIZE_STYLE;\nexports.Namespaces = Namespaces;\nexports.NodeTypes = NodeTypes;\nexports.OPEN_BLOCK = OPEN_BLOCK;\nexports.POP_SCOPE_ID = POP_SCOPE_ID;\nexports.PUSH_SCOPE_ID = PUSH_SCOPE_ID;\nexports.RENDER_LIST = RENDER_LIST;\nexports.RENDER_SLOT = RENDER_SLOT;\nexports.RESOLVE_COMPONENT = RESOLVE_COMPONENT;\nexports.RESOLVE_DIRECTIVE = RESOLVE_DIRECTIVE;\nexports.RESOLVE_DYNAMIC_COMPONENT = RESOLVE_DYNAMIC_COMPONENT;\nexports.RESOLVE_FILTER = RESOLVE_FILTER;\nexports.SET_BLOCK_TRACKING = SET_BLOCK_TRACKING;\nexports.SUSPENSE = SUSPENSE;\nexports.TELEPORT = TELEPORT;\nexports.TO_DISPLAY_STRING = TO_DISPLAY_STRING;\nexports.TO_HANDLERS = TO_HANDLERS;\nexports.TO_HANDLER_KEY = TO_HANDLER_KEY;\nexports.TS_NODE_TYPES = TS_NODE_TYPES;\nexports.UNREF = UNREF;\nexports.WITH_CTX = WITH_CTX;\nexports.WITH_DIRECTIVES = WITH_DIRECTIVES;\nexports.WITH_MEMO = WITH_MEMO;\nexports.advancePositionWithClone = advancePositionWithClone;\nexports.advancePositionWithMutation = advancePositionWithMutation;\nexports.assert = assert;\nexports.baseCompile = baseCompile;\nexports.baseParse = baseParse;\nexports.buildDirectiveArgs = buildDirectiveArgs;\nexports.buildProps = buildProps;\nexports.buildSlots = buildSlots;\nexports.checkCompatEnabled = checkCompatEnabled;\nexports.convertToBlock = convertToBlock;\nexports.createArrayExpression = createArrayExpression;\nexports.createAssignmentExpression = createAssignmentExpression;\nexports.createBlockStatement = createBlockStatement;\nexports.createCacheExpression = createCacheExpression;\nexports.createCallExpression = createCallExpression;\nexports.createCompilerError = createCompilerError;\nexports.createCompoundExpression = createCompoundExpression;\nexports.createConditionalExpression = createConditionalExpression;\nexports.createForLoopParams = createForLoopParams;\nexports.createFunctionExpression = createFunctionExpression;\nexports.createIfStatement = createIfStatement;\nexports.createInterpolation = createInterpolation;\nexports.createObjectExpression = createObjectExpression;\nexports.createObjectProperty = createObjectProperty;\nexports.createReturnStatement = createReturnStatement;\nexports.createRoot = createRoot;\nexports.createSequenceExpression = createSequenceExpression;\nexports.createSimpleExpression = createSimpleExpression;\nexports.createStructuralDirectiveTransform = createStructuralDirectiveTransform;\nexports.createTemplateLiteral = createTemplateLiteral;\nexports.createTransformContext = createTransformContext;\nexports.createVNodeCall = createVNodeCall;\nexports.errorMessages = errorMessages;\nexports.extractIdentifiers = extractIdentifiers;\nexports.findDir = findDir;\nexports.findProp = findProp;\nexports.forAliasRE = forAliasRE;\nexports.generate = generate;\nexports.getBaseTransformPreset = getBaseTransformPreset;\nexports.getConstantType = getConstantType;\nexports.getMemoedVNodeCall = getMemoedVNodeCall;\nexports.getVNodeBlockHelper = getVNodeBlockHelper;\nexports.getVNodeHelper = getVNodeHelper;\nexports.hasDynamicKeyVBind = hasDynamicKeyVBind;\nexports.hasScopeRef = hasScopeRef;\nexports.helperNameMap = helperNameMap;\nexports.injectProp = injectProp;\nexports.isCoreComponent = isCoreComponent;\nexports.isFnExpression = isFnExpression;\nexports.isFnExpressionBrowser = isFnExpressionBrowser;\nexports.isFnExpressionNode = isFnExpressionNode;\nexports.isFunctionType = isFunctionType;\nexports.isInDestructureAssignment = isInDestructureAssignment;\nexports.isInNewExpression = isInNewExpression;\nexports.isMemberExpression = isMemberExpression;\nexports.isMemberExpressionBrowser = isMemberExpressionBrowser;\nexports.isMemberExpressionNode = isMemberExpressionNode;\nexports.isReferencedIdentifier = isReferencedIdentifier;\nexports.isSimpleIdentifier = isSimpleIdentifier;\nexports.isSlotOutlet = isSlotOutlet;\nexports.isStaticArgOf = isStaticArgOf;\nexports.isStaticExp = isStaticExp;\nexports.isStaticProperty = isStaticProperty;\nexports.isStaticPropertyKey = isStaticPropertyKey;\nexports.isTemplateNode = isTemplateNode;\nexports.isText = isText$1;\nexports.isVPre = isVPre;\nexports.isVSlot = isVSlot;\nexports.locStub = locStub;\nexports.noopDirectiveTransform = noopDirectiveTransform;\nexports.processExpression = processExpression;\nexports.processFor = processFor;\nexports.processIf = processIf;\nexports.processSlotOutlet = processSlotOutlet;\nexports.registerRuntimeHelpers = registerRuntimeHelpers;\nexports.resolveComponentType = resolveComponentType;\nexports.stringifyExpression = stringifyExpression;\nexports.toValidAssetId = toValidAssetId;\nexports.trackSlotScopes = trackSlotScopes;\nexports.trackVForSlotScopes = trackVForSlotScopes;\nexports.transform = transform;\nexports.transformBind = transformBind;\nexports.transformElement = transformElement;\nexports.transformExpression = transformExpression;\nexports.transformModel = transformModel;\nexports.transformOn = transformOn;\nexports.traverseNode = traverseNode;\nexports.unwrapTSNode = unwrapTSNode;\nexports.walkBlockDeclarations = walkBlockDeclarations;\nexports.walkFunctionParams = walkFunctionParams;\nexports.walkIdentifiers = walkIdentifiers;\nexports.warnDeprecation = warnDeprecation;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/compiler-core.cjs.prod.js')\n} else {\n  module.exports = require('./dist/compiler-core.cjs.js')\n}\n","/**\n* @vue/compiler-dom v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerCore = require('@vue/compiler-core');\nvar shared = require('@vue/shared');\n\nconst V_MODEL_RADIO = Symbol(``);\nconst V_MODEL_CHECKBOX = Symbol(\n  ``\n);\nconst V_MODEL_TEXT = Symbol(``);\nconst V_MODEL_SELECT = Symbol(\n  ``\n);\nconst V_MODEL_DYNAMIC = Symbol(\n  ``\n);\nconst V_ON_WITH_MODIFIERS = Symbol(\n  ``\n);\nconst V_ON_WITH_KEYS = Symbol(\n  ``\n);\nconst V_SHOW = Symbol(``);\nconst TRANSITION = Symbol(``);\nconst TRANSITION_GROUP = Symbol(\n  ``\n);\ncompilerCore.registerRuntimeHelpers({\n  [V_MODEL_RADIO]: `vModelRadio`,\n  [V_MODEL_CHECKBOX]: `vModelCheckbox`,\n  [V_MODEL_TEXT]: `vModelText`,\n  [V_MODEL_SELECT]: `vModelSelect`,\n  [V_MODEL_DYNAMIC]: `vModelDynamic`,\n  [V_ON_WITH_MODIFIERS]: `withModifiers`,\n  [V_ON_WITH_KEYS]: `withKeys`,\n  [V_SHOW]: `vShow`,\n  [TRANSITION]: `Transition`,\n  [TRANSITION_GROUP]: `TransitionGroup`\n});\n\nconst parserOptions = {\n  parseMode: \"html\",\n  isVoidTag: shared.isVoidTag,\n  isNativeTag: (tag) => shared.isHTMLTag(tag) || shared.isSVGTag(tag) || shared.isMathMLTag(tag),\n  isPreTag: (tag) => tag === \"pre\",\n  isIgnoreNewlineTag: (tag) => tag === \"pre\" || tag === \"textarea\",\n  decodeEntities: void 0,\n  isBuiltInComponent: (tag) => {\n    if (tag === \"Transition\" || tag === \"transition\") {\n      return TRANSITION;\n    } else if (tag === \"TransitionGroup\" || tag === \"transition-group\") {\n      return TRANSITION_GROUP;\n    }\n  },\n  // https://html.spec.whatwg.org/multipage/parsing.html#tree-construction-dispatcher\n  getNamespace(tag, parent, rootNamespace) {\n    let ns = parent ? parent.ns : rootNamespace;\n    if (parent && ns === 2) {\n      if (parent.tag === \"annotation-xml\") {\n        if (tag === \"svg\") {\n          return 1;\n        }\n        if (parent.props.some(\n          (a) => a.type === 6 && a.name === \"encoding\" && a.value != null && (a.value.content === \"text/html\" || a.value.content === \"application/xhtml+xml\")\n        )) {\n          ns = 0;\n        }\n      } else if (/^m(?:[ions]|text)$/.test(parent.tag) && tag !== \"mglyph\" && tag !== \"malignmark\") {\n        ns = 0;\n      }\n    } else if (parent && ns === 1) {\n      if (parent.tag === \"foreignObject\" || parent.tag === \"desc\" || parent.tag === \"title\") {\n        ns = 0;\n      }\n    }\n    if (ns === 0) {\n      if (tag === \"svg\") {\n        return 1;\n      }\n      if (tag === \"math\") {\n        return 2;\n      }\n    }\n    return ns;\n  }\n};\n\nconst transformStyle = (node) => {\n  if (node.type === 1) {\n    node.props.forEach((p, i) => {\n      if (p.type === 6 && p.name === \"style\" && p.value) {\n        node.props[i] = {\n          type: 7,\n          name: `bind`,\n          arg: compilerCore.createSimpleExpression(`style`, true, p.loc),\n          exp: parseInlineCSS(p.value.content, p.loc),\n          modifiers: [],\n          loc: p.loc\n        };\n      }\n    });\n  }\n};\nconst parseInlineCSS = (cssText, loc) => {\n  const normalized = shared.parseStringStyle(cssText);\n  return compilerCore.createSimpleExpression(\n    JSON.stringify(normalized),\n    false,\n    loc,\n    3\n  );\n};\n\nfunction createDOMCompilerError(code, loc) {\n  return compilerCore.createCompilerError(\n    code,\n    loc,\n    DOMErrorMessages \n  );\n}\nconst DOMErrorCodes = {\n  \"X_V_HTML_NO_EXPRESSION\": 53,\n  \"53\": \"X_V_HTML_NO_EXPRESSION\",\n  \"X_V_HTML_WITH_CHILDREN\": 54,\n  \"54\": \"X_V_HTML_WITH_CHILDREN\",\n  \"X_V_TEXT_NO_EXPRESSION\": 55,\n  \"55\": \"X_V_TEXT_NO_EXPRESSION\",\n  \"X_V_TEXT_WITH_CHILDREN\": 56,\n  \"56\": \"X_V_TEXT_WITH_CHILDREN\",\n  \"X_V_MODEL_ON_INVALID_ELEMENT\": 57,\n  \"57\": \"X_V_MODEL_ON_INVALID_ELEMENT\",\n  \"X_V_MODEL_ARG_ON_ELEMENT\": 58,\n  \"58\": \"X_V_MODEL_ARG_ON_ELEMENT\",\n  \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\": 59,\n  \"59\": \"X_V_MODEL_ON_FILE_INPUT_ELEMENT\",\n  \"X_V_MODEL_UNNECESSARY_VALUE\": 60,\n  \"60\": \"X_V_MODEL_UNNECESSARY_VALUE\",\n  \"X_V_SHOW_NO_EXPRESSION\": 61,\n  \"61\": \"X_V_SHOW_NO_EXPRESSION\",\n  \"X_TRANSITION_INVALID_CHILDREN\": 62,\n  \"62\": \"X_TRANSITION_INVALID_CHILDREN\",\n  \"X_IGNORED_SIDE_EFFECT_TAG\": 63,\n  \"63\": \"X_IGNORED_SIDE_EFFECT_TAG\",\n  \"__EXTEND_POINT__\": 64,\n  \"64\": \"__EXTEND_POINT__\"\n};\nconst DOMErrorMessages = {\n  [53]: `v-html is missing expression.`,\n  [54]: `v-html will override element children.`,\n  [55]: `v-text is missing expression.`,\n  [56]: `v-text will override element children.`,\n  [57]: `v-model can only be used on <input>, <textarea> and <select> elements.`,\n  [58]: `v-model argument is not supported on plain elements.`,\n  [59]: `v-model cannot be used on file inputs since they are read-only. Use a v-on:change listener instead.`,\n  [60]: `Unnecessary value binding used alongside v-model. It will interfere with v-model's behavior.`,\n  [61]: `v-show is missing expression.`,\n  [62]: `<Transition> expects exactly one child element or component.`,\n  [63]: `Tags with side effect (<script> and <style>) are ignored in client component templates.`\n};\n\nconst transformVHtml = (dir, node, context) => {\n  const { exp, loc } = dir;\n  if (!exp) {\n    context.onError(\n      createDOMCompilerError(53, loc)\n    );\n  }\n  if (node.children.length) {\n    context.onError(\n      createDOMCompilerError(54, loc)\n    );\n    node.children.length = 0;\n  }\n  return {\n    props: [\n      compilerCore.createObjectProperty(\n        compilerCore.createSimpleExpression(`innerHTML`, true, loc),\n        exp || compilerCore.createSimpleExpression(\"\", true)\n      )\n    ]\n  };\n};\n\nconst transformVText = (dir, node, context) => {\n  const { exp, loc } = dir;\n  if (!exp) {\n    context.onError(\n      createDOMCompilerError(55, loc)\n    );\n  }\n  if (node.children.length) {\n    context.onError(\n      createDOMCompilerError(56, loc)\n    );\n    node.children.length = 0;\n  }\n  return {\n    props: [\n      compilerCore.createObjectProperty(\n        compilerCore.createSimpleExpression(`textContent`, true),\n        exp ? compilerCore.getConstantType(exp, context) > 0 ? exp : compilerCore.createCallExpression(\n          context.helperString(compilerCore.TO_DISPLAY_STRING),\n          [exp],\n          loc\n        ) : compilerCore.createSimpleExpression(\"\", true)\n      )\n    ]\n  };\n};\n\nconst transformModel = (dir, node, context) => {\n  const baseResult = compilerCore.transformModel(dir, node, context);\n  if (!baseResult.props.length || node.tagType === 1) {\n    return baseResult;\n  }\n  if (dir.arg) {\n    context.onError(\n      createDOMCompilerError(\n        58,\n        dir.arg.loc\n      )\n    );\n  }\n  const { tag } = node;\n  const isCustomElement = context.isCustomElement(tag);\n  if (tag === \"input\" || tag === \"textarea\" || tag === \"select\" || isCustomElement) {\n    let directiveToUse = V_MODEL_TEXT;\n    let isInvalidType = false;\n    if (tag === \"input\" || isCustomElement) {\n      const type = compilerCore.findProp(node, `type`);\n      if (type) {\n        if (type.type === 7) {\n          directiveToUse = V_MODEL_DYNAMIC;\n        } else if (type.value) {\n          switch (type.value.content) {\n            case \"radio\":\n              directiveToUse = V_MODEL_RADIO;\n              break;\n            case \"checkbox\":\n              directiveToUse = V_MODEL_CHECKBOX;\n              break;\n            case \"file\":\n              isInvalidType = true;\n              context.onError(\n                createDOMCompilerError(\n                  59,\n                  dir.loc\n                )\n              );\n              break;\n          }\n        }\n      } else if (compilerCore.hasDynamicKeyVBind(node)) {\n        directiveToUse = V_MODEL_DYNAMIC;\n      } else ;\n    } else if (tag === \"select\") {\n      directiveToUse = V_MODEL_SELECT;\n    } else ;\n    if (!isInvalidType) {\n      baseResult.needRuntime = context.helper(directiveToUse);\n    }\n  } else {\n    context.onError(\n      createDOMCompilerError(\n        57,\n        dir.loc\n      )\n    );\n  }\n  baseResult.props = baseResult.props.filter(\n    (p) => !(p.key.type === 4 && p.key.content === \"modelValue\")\n  );\n  return baseResult;\n};\n\nconst isEventOptionModifier = /* @__PURE__ */ shared.makeMap(`passive,once,capture`);\nconst isNonKeyModifier = /* @__PURE__ */ shared.makeMap(\n  // event propagation management\n  `stop,prevent,self,ctrl,shift,alt,meta,exact,middle`\n);\nconst maybeKeyModifier = /* @__PURE__ */ shared.makeMap(\"left,right\");\nconst isKeyboardEvent = /* @__PURE__ */ shared.makeMap(`onkeyup,onkeydown,onkeypress`);\nconst resolveModifiers = (key, modifiers, context, loc) => {\n  const keyModifiers = [];\n  const nonKeyModifiers = [];\n  const eventOptionModifiers = [];\n  for (let i = 0; i < modifiers.length; i++) {\n    const modifier = modifiers[i].content;\n    if (modifier === \"native\" && compilerCore.checkCompatEnabled(\n      \"COMPILER_V_ON_NATIVE\",\n      context,\n      loc\n    )) {\n      eventOptionModifiers.push(modifier);\n    } else if (isEventOptionModifier(modifier)) {\n      eventOptionModifiers.push(modifier);\n    } else {\n      if (maybeKeyModifier(modifier)) {\n        if (compilerCore.isStaticExp(key)) {\n          if (isKeyboardEvent(key.content.toLowerCase())) {\n            keyModifiers.push(modifier);\n          } else {\n            nonKeyModifiers.push(modifier);\n          }\n        } else {\n          keyModifiers.push(modifier);\n          nonKeyModifiers.push(modifier);\n        }\n      } else {\n        if (isNonKeyModifier(modifier)) {\n          nonKeyModifiers.push(modifier);\n        } else {\n          keyModifiers.push(modifier);\n        }\n      }\n    }\n  }\n  return {\n    keyModifiers,\n    nonKeyModifiers,\n    eventOptionModifiers\n  };\n};\nconst transformClick = (key, event) => {\n  const isStaticClick = compilerCore.isStaticExp(key) && key.content.toLowerCase() === \"onclick\";\n  return isStaticClick ? compilerCore.createSimpleExpression(event, true) : key.type !== 4 ? compilerCore.createCompoundExpression([\n    `(`,\n    key,\n    `) === \"onClick\" ? \"${event}\" : (`,\n    key,\n    `)`\n  ]) : key;\n};\nconst transformOn = (dir, node, context) => {\n  return compilerCore.transformOn(dir, node, context, (baseResult) => {\n    const { modifiers } = dir;\n    if (!modifiers.length) return baseResult;\n    let { key, value: handlerExp } = baseResult.props[0];\n    const { keyModifiers, nonKeyModifiers, eventOptionModifiers } = resolveModifiers(key, modifiers, context, dir.loc);\n    if (nonKeyModifiers.includes(\"right\")) {\n      key = transformClick(key, `onContextmenu`);\n    }\n    if (nonKeyModifiers.includes(\"middle\")) {\n      key = transformClick(key, `onMouseup`);\n    }\n    if (nonKeyModifiers.length) {\n      handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_MODIFIERS), [\n        handlerExp,\n        JSON.stringify(nonKeyModifiers)\n      ]);\n    }\n    if (keyModifiers.length && // if event name is dynamic, always wrap with keys guard\n    (!compilerCore.isStaticExp(key) || isKeyboardEvent(key.content.toLowerCase()))) {\n      handlerExp = compilerCore.createCallExpression(context.helper(V_ON_WITH_KEYS), [\n        handlerExp,\n        JSON.stringify(keyModifiers)\n      ]);\n    }\n    if (eventOptionModifiers.length) {\n      const modifierPostfix = eventOptionModifiers.map(shared.capitalize).join(\"\");\n      key = compilerCore.isStaticExp(key) ? compilerCore.createSimpleExpression(`${key.content}${modifierPostfix}`, true) : compilerCore.createCompoundExpression([`(`, key, `) + \"${modifierPostfix}\"`]);\n    }\n    return {\n      props: [compilerCore.createObjectProperty(key, handlerExp)]\n    };\n  });\n};\n\nconst transformShow = (dir, node, context) => {\n  const { exp, loc } = dir;\n  if (!exp) {\n    context.onError(\n      createDOMCompilerError(61, loc)\n    );\n  }\n  return {\n    props: [],\n    needRuntime: context.helper(V_SHOW)\n  };\n};\n\nconst expReplaceRE = /__VUE_EXP_START__(.*?)__VUE_EXP_END__/g;\nconst stringifyStatic = (children, context, parent) => {\n  if (context.scopes.vSlot > 0) {\n    return;\n  }\n  const isParentCached = parent.type === 1 && parent.codegenNode && parent.codegenNode.type === 13 && parent.codegenNode.children && !shared.isArray(parent.codegenNode.children) && parent.codegenNode.children.type === 20;\n  let nc = 0;\n  let ec = 0;\n  const currentChunk = [];\n  const stringifyCurrentChunk = (currentIndex) => {\n    if (nc >= 20 || ec >= 5) {\n      const staticCall = compilerCore.createCallExpression(context.helper(compilerCore.CREATE_STATIC), [\n        JSON.stringify(\n          currentChunk.map((node) => stringifyNode(node, context)).join(\"\")\n        ).replace(expReplaceRE, `\" + $1 + \"`),\n        // the 2nd argument indicates the number of DOM nodes this static vnode\n        // will insert / hydrate\n        String(currentChunk.length)\n      ]);\n      const deleteCount = currentChunk.length - 1;\n      if (isParentCached) {\n        children.splice(\n          currentIndex - currentChunk.length,\n          currentChunk.length,\n          // @ts-expect-error\n          staticCall\n        );\n      } else {\n        currentChunk[0].codegenNode.value = staticCall;\n        if (currentChunk.length > 1) {\n          children.splice(currentIndex - currentChunk.length + 1, deleteCount);\n          const cacheIndex = context.cached.indexOf(\n            currentChunk[currentChunk.length - 1].codegenNode\n          );\n          if (cacheIndex > -1) {\n            for (let i2 = cacheIndex; i2 < context.cached.length; i2++) {\n              const c = context.cached[i2];\n              if (c) c.index -= deleteCount;\n            }\n            context.cached.splice(cacheIndex - deleteCount + 1, deleteCount);\n          }\n        }\n      }\n      return deleteCount;\n    }\n    return 0;\n  };\n  let i = 0;\n  for (; i < children.length; i++) {\n    const child = children[i];\n    const isCached = isParentCached || getCachedNode(child);\n    if (isCached) {\n      const result = analyzeNode(child);\n      if (result) {\n        nc += result[0];\n        ec += result[1];\n        currentChunk.push(child);\n        continue;\n      }\n    }\n    i -= stringifyCurrentChunk(i);\n    nc = 0;\n    ec = 0;\n    currentChunk.length = 0;\n  }\n  stringifyCurrentChunk(i);\n};\nconst getCachedNode = (node) => {\n  if ((node.type === 1 && node.tagType === 0 || node.type === 12) && node.codegenNode && node.codegenNode.type === 20) {\n    return node.codegenNode;\n  }\n};\nconst dataAriaRE = /^(data|aria)-/;\nconst isStringifiableAttr = (name, ns) => {\n  return (ns === 0 ? shared.isKnownHtmlAttr(name) : ns === 1 ? shared.isKnownSvgAttr(name) : ns === 2 ? shared.isKnownMathMLAttr(name) : false) || dataAriaRE.test(name);\n};\nconst isNonStringifiable = /* @__PURE__ */ shared.makeMap(\n  `caption,thead,tr,th,tbody,td,tfoot,colgroup,col`\n);\nfunction analyzeNode(node) {\n  if (node.type === 1 && isNonStringifiable(node.tag)) {\n    return false;\n  }\n  if (node.type === 12) {\n    return [1, 0];\n  }\n  let nc = 1;\n  let ec = node.props.length > 0 ? 1 : 0;\n  let bailed = false;\n  const bail = () => {\n    bailed = true;\n    return false;\n  };\n  function walk(node2) {\n    const isOptionTag = node2.tag === \"option\" && node2.ns === 0;\n    for (let i = 0; i < node2.props.length; i++) {\n      const p = node2.props[i];\n      if (p.type === 6 && !isStringifiableAttr(p.name, node2.ns)) {\n        return bail();\n      }\n      if (p.type === 7 && p.name === \"bind\") {\n        if (p.arg && (p.arg.type === 8 || p.arg.isStatic && !isStringifiableAttr(p.arg.content, node2.ns))) {\n          return bail();\n        }\n        if (p.exp && (p.exp.type === 8 || p.exp.constType < 3)) {\n          return bail();\n        }\n        if (isOptionTag && compilerCore.isStaticArgOf(p.arg, \"value\") && p.exp && !p.exp.isStatic) {\n          return bail();\n        }\n      }\n    }\n    for (let i = 0; i < node2.children.length; i++) {\n      nc++;\n      const child = node2.children[i];\n      if (child.type === 1) {\n        if (child.props.length > 0) {\n          ec++;\n        }\n        walk(child);\n        if (bailed) {\n          return false;\n        }\n      }\n    }\n    return true;\n  }\n  return walk(node) ? [nc, ec] : false;\n}\nfunction stringifyNode(node, context) {\n  if (shared.isString(node)) {\n    return node;\n  }\n  if (shared.isSymbol(node)) {\n    return ``;\n  }\n  switch (node.type) {\n    case 1:\n      return stringifyElement(node, context);\n    case 2:\n      return shared.escapeHtml(node.content);\n    case 3:\n      return `<!--${shared.escapeHtml(node.content)}-->`;\n    case 5:\n      return shared.escapeHtml(shared.toDisplayString(evaluateConstant(node.content)));\n    case 8:\n      return shared.escapeHtml(evaluateConstant(node));\n    case 12:\n      return stringifyNode(node.content, context);\n    default:\n      return \"\";\n  }\n}\nfunction stringifyElement(node, context) {\n  let res = `<${node.tag}`;\n  let innerHTML = \"\";\n  for (let i = 0; i < node.props.length; i++) {\n    const p = node.props[i];\n    if (p.type === 6) {\n      res += ` ${p.name}`;\n      if (p.value) {\n        res += `=\"${shared.escapeHtml(p.value.content)}\"`;\n      }\n    } else if (p.type === 7) {\n      if (p.name === \"bind\") {\n        const exp = p.exp;\n        if (exp.content[0] === \"_\") {\n          res += ` ${p.arg.content}=\"__VUE_EXP_START__${exp.content}__VUE_EXP_END__\"`;\n          continue;\n        }\n        if (shared.isBooleanAttr(p.arg.content) && exp.content === \"false\") {\n          continue;\n        }\n        let evaluated = evaluateConstant(exp);\n        if (evaluated != null) {\n          const arg = p.arg && p.arg.content;\n          if (arg === \"class\") {\n            evaluated = shared.normalizeClass(evaluated);\n          } else if (arg === \"style\") {\n            evaluated = shared.stringifyStyle(shared.normalizeStyle(evaluated));\n          }\n          res += ` ${p.arg.content}=\"${shared.escapeHtml(\n            evaluated\n          )}\"`;\n        }\n      } else if (p.name === \"html\") {\n        innerHTML = evaluateConstant(p.exp);\n      } else if (p.name === \"text\") {\n        innerHTML = shared.escapeHtml(\n          shared.toDisplayString(evaluateConstant(p.exp))\n        );\n      }\n    }\n  }\n  if (context.scopeId) {\n    res += ` ${context.scopeId}`;\n  }\n  res += `>`;\n  if (innerHTML) {\n    res += innerHTML;\n  } else {\n    for (let i = 0; i < node.children.length; i++) {\n      res += stringifyNode(node.children[i], context);\n    }\n  }\n  if (!shared.isVoidTag(node.tag)) {\n    res += `</${node.tag}>`;\n  }\n  return res;\n}\nfunction evaluateConstant(exp) {\n  if (exp.type === 4) {\n    return new Function(`return (${exp.content})`)();\n  } else {\n    let res = ``;\n    exp.children.forEach((c) => {\n      if (shared.isString(c) || shared.isSymbol(c)) {\n        return;\n      }\n      if (c.type === 2) {\n        res += c.content;\n      } else if (c.type === 5) {\n        res += shared.toDisplayString(evaluateConstant(c.content));\n      } else {\n        res += evaluateConstant(c);\n      }\n    });\n    return res;\n  }\n}\n\nconst ignoreSideEffectTags = (node, context) => {\n  if (node.type === 1 && node.tagType === 0 && (node.tag === \"script\" || node.tag === \"style\")) {\n    context.removeNode();\n  }\n};\n\nconst DOMNodeTransforms = [\n  transformStyle,\n  ...[]\n];\nconst DOMDirectiveTransforms = {\n  cloak: compilerCore.noopDirectiveTransform,\n  html: transformVHtml,\n  text: transformVText,\n  model: transformModel,\n  // override compiler-core\n  on: transformOn,\n  // override compiler-core\n  show: transformShow\n};\nfunction compile(src, options = {}) {\n  return compilerCore.baseCompile(\n    src,\n    shared.extend({}, parserOptions, options, {\n      nodeTransforms: [\n        // ignore <script> and <tag>\n        // this is not put inside DOMNodeTransforms because that list is used\n        // by compiler-ssr to generate vnode fallback branches\n        ignoreSideEffectTags,\n        ...DOMNodeTransforms,\n        ...options.nodeTransforms || []\n      ],\n      directiveTransforms: shared.extend(\n        {},\n        DOMDirectiveTransforms,\n        options.directiveTransforms || {}\n      ),\n      transformHoist: stringifyStatic\n    })\n  );\n}\nfunction parse(template, options = {}) {\n  return compilerCore.baseParse(template, shared.extend({}, parserOptions, options));\n}\n\nexports.DOMDirectiveTransforms = DOMDirectiveTransforms;\nexports.DOMErrorCodes = DOMErrorCodes;\nexports.DOMErrorMessages = DOMErrorMessages;\nexports.DOMNodeTransforms = DOMNodeTransforms;\nexports.TRANSITION = TRANSITION;\nexports.TRANSITION_GROUP = TRANSITION_GROUP;\nexports.V_MODEL_CHECKBOX = V_MODEL_CHECKBOX;\nexports.V_MODEL_DYNAMIC = V_MODEL_DYNAMIC;\nexports.V_MODEL_RADIO = V_MODEL_RADIO;\nexports.V_MODEL_SELECT = V_MODEL_SELECT;\nexports.V_MODEL_TEXT = V_MODEL_TEXT;\nexports.V_ON_WITH_KEYS = V_ON_WITH_KEYS;\nexports.V_ON_WITH_MODIFIERS = V_ON_WITH_MODIFIERS;\nexports.V_SHOW = V_SHOW;\nexports.compile = compile;\nexports.createDOMCompilerError = createDOMCompilerError;\nexports.parse = parse;\nexports.parserOptions = parserOptions;\nexports.transformStyle = transformStyle;\nObject.keys(compilerCore).forEach(function (k) {\n  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = compilerCore[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/compiler-dom.cjs.prod.js')\n} else {\n  module.exports = require('./dist/compiler-dom.cjs.js')\n}\n","/**\n* @vue/reactivity v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar shared = require('@vue/shared');\n\nlet activeEffectScope;\nclass EffectScope {\n  constructor(detached = false) {\n    this.detached = detached;\n    /**\n     * @internal\n     */\n    this._active = true;\n    /**\n     * @internal track `on` calls, allow `on` call multiple times\n     */\n    this._on = 0;\n    /**\n     * @internal\n     */\n    this.effects = [];\n    /**\n     * @internal\n     */\n    this.cleanups = [];\n    this._isPaused = false;\n    this.parent = activeEffectScope;\n    if (!detached && activeEffectScope) {\n      this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n        this\n      ) - 1;\n    }\n  }\n  get active() {\n    return this._active;\n  }\n  pause() {\n    if (this._active) {\n      this._isPaused = true;\n      let i, l;\n      if (this.scopes) {\n        for (i = 0, l = this.scopes.length; i < l; i++) {\n          this.scopes[i].pause();\n        }\n      }\n      for (i = 0, l = this.effects.length; i < l; i++) {\n        this.effects[i].pause();\n      }\n    }\n  }\n  /**\n   * Resumes the effect scope, including all child scopes and effects.\n   */\n  resume() {\n    if (this._active) {\n      if (this._isPaused) {\n        this._isPaused = false;\n        let i, l;\n        if (this.scopes) {\n          for (i = 0, l = this.scopes.length; i < l; i++) {\n            this.scopes[i].resume();\n          }\n        }\n        for (i = 0, l = this.effects.length; i < l; i++) {\n          this.effects[i].resume();\n        }\n      }\n    }\n  }\n  run(fn) {\n    if (this._active) {\n      const currentEffectScope = activeEffectScope;\n      try {\n        activeEffectScope = this;\n        return fn();\n      } finally {\n        activeEffectScope = currentEffectScope;\n      }\n    }\n  }\n  /**\n   * This should only be called on non-detached scopes\n   * @internal\n   */\n  on() {\n    if (++this._on === 1) {\n      this.prevScope = activeEffectScope;\n      activeEffectScope = this;\n    }\n  }\n  /**\n   * This should only be called on non-detached scopes\n   * @internal\n   */\n  off() {\n    if (this._on > 0 && --this._on === 0) {\n      activeEffectScope = this.prevScope;\n      this.prevScope = void 0;\n    }\n  }\n  stop(fromParent) {\n    if (this._active) {\n      this._active = false;\n      let i, l;\n      for (i = 0, l = this.effects.length; i < l; i++) {\n        this.effects[i].stop();\n      }\n      this.effects.length = 0;\n      for (i = 0, l = this.cleanups.length; i < l; i++) {\n        this.cleanups[i]();\n      }\n      this.cleanups.length = 0;\n      if (this.scopes) {\n        for (i = 0, l = this.scopes.length; i < l; i++) {\n          this.scopes[i].stop(true);\n        }\n        this.scopes.length = 0;\n      }\n      if (!this.detached && this.parent && !fromParent) {\n        const last = this.parent.scopes.pop();\n        if (last && last !== this) {\n          this.parent.scopes[this.index] = last;\n          last.index = this.index;\n        }\n      }\n      this.parent = void 0;\n    }\n  }\n}\nfunction effectScope(detached) {\n  return new EffectScope(detached);\n}\nfunction getCurrentScope() {\n  return activeEffectScope;\n}\nfunction onScopeDispose(fn, failSilently = false) {\n  if (activeEffectScope) {\n    activeEffectScope.cleanups.push(fn);\n  }\n}\n\nlet activeSub;\nconst EffectFlags = {\n  \"ACTIVE\": 1,\n  \"1\": \"ACTIVE\",\n  \"RUNNING\": 2,\n  \"2\": \"RUNNING\",\n  \"TRACKING\": 4,\n  \"4\": \"TRACKING\",\n  \"NOTIFIED\": 8,\n  \"8\": \"NOTIFIED\",\n  \"DIRTY\": 16,\n  \"16\": \"DIRTY\",\n  \"ALLOW_RECURSE\": 32,\n  \"32\": \"ALLOW_RECURSE\",\n  \"PAUSED\": 64,\n  \"64\": \"PAUSED\",\n  \"EVALUATED\": 128,\n  \"128\": \"EVALUATED\"\n};\nconst pausedQueueEffects = /* @__PURE__ */ new WeakSet();\nclass ReactiveEffect {\n  constructor(fn) {\n    this.fn = fn;\n    /**\n     * @internal\n     */\n    this.deps = void 0;\n    /**\n     * @internal\n     */\n    this.depsTail = void 0;\n    /**\n     * @internal\n     */\n    this.flags = 1 | 4;\n    /**\n     * @internal\n     */\n    this.next = void 0;\n    /**\n     * @internal\n     */\n    this.cleanup = void 0;\n    this.scheduler = void 0;\n    if (activeEffectScope && activeEffectScope.active) {\n      activeEffectScope.effects.push(this);\n    }\n  }\n  pause() {\n    this.flags |= 64;\n  }\n  resume() {\n    if (this.flags & 64) {\n      this.flags &= -65;\n      if (pausedQueueEffects.has(this)) {\n        pausedQueueEffects.delete(this);\n        this.trigger();\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  notify() {\n    if (this.flags & 2 && !(this.flags & 32)) {\n      return;\n    }\n    if (!(this.flags & 8)) {\n      batch(this);\n    }\n  }\n  run() {\n    if (!(this.flags & 1)) {\n      return this.fn();\n    }\n    this.flags |= 2;\n    cleanupEffect(this);\n    prepareDeps(this);\n    const prevEffect = activeSub;\n    const prevShouldTrack = shouldTrack;\n    activeSub = this;\n    shouldTrack = true;\n    try {\n      return this.fn();\n    } finally {\n      cleanupDeps(this);\n      activeSub = prevEffect;\n      shouldTrack = prevShouldTrack;\n      this.flags &= -3;\n    }\n  }\n  stop() {\n    if (this.flags & 1) {\n      for (let link = this.deps; link; link = link.nextDep) {\n        removeSub(link);\n      }\n      this.deps = this.depsTail = void 0;\n      cleanupEffect(this);\n      this.onStop && this.onStop();\n      this.flags &= -2;\n    }\n  }\n  trigger() {\n    if (this.flags & 64) {\n      pausedQueueEffects.add(this);\n    } else if (this.scheduler) {\n      this.scheduler();\n    } else {\n      this.runIfDirty();\n    }\n  }\n  /**\n   * @internal\n   */\n  runIfDirty() {\n    if (isDirty(this)) {\n      this.run();\n    }\n  }\n  get dirty() {\n    return isDirty(this);\n  }\n}\nlet batchDepth = 0;\nlet batchedSub;\nlet batchedComputed;\nfunction batch(sub, isComputed = false) {\n  sub.flags |= 8;\n  if (isComputed) {\n    sub.next = batchedComputed;\n    batchedComputed = sub;\n    return;\n  }\n  sub.next = batchedSub;\n  batchedSub = sub;\n}\nfunction startBatch() {\n  batchDepth++;\n}\nfunction endBatch() {\n  if (--batchDepth > 0) {\n    return;\n  }\n  if (batchedComputed) {\n    let e = batchedComputed;\n    batchedComputed = void 0;\n    while (e) {\n      const next = e.next;\n      e.next = void 0;\n      e.flags &= -9;\n      e = next;\n    }\n  }\n  let error;\n  while (batchedSub) {\n    let e = batchedSub;\n    batchedSub = void 0;\n    while (e) {\n      const next = e.next;\n      e.next = void 0;\n      e.flags &= -9;\n      if (e.flags & 1) {\n        try {\n          ;\n          e.trigger();\n        } catch (err) {\n          if (!error) error = err;\n        }\n      }\n      e = next;\n    }\n  }\n  if (error) throw error;\n}\nfunction prepareDeps(sub) {\n  for (let link = sub.deps; link; link = link.nextDep) {\n    link.version = -1;\n    link.prevActiveLink = link.dep.activeLink;\n    link.dep.activeLink = link;\n  }\n}\nfunction cleanupDeps(sub) {\n  let head;\n  let tail = sub.depsTail;\n  let link = tail;\n  while (link) {\n    const prev = link.prevDep;\n    if (link.version === -1) {\n      if (link === tail) tail = prev;\n      removeSub(link);\n      removeDep(link);\n    } else {\n      head = link;\n    }\n    link.dep.activeLink = link.prevActiveLink;\n    link.prevActiveLink = void 0;\n    link = prev;\n  }\n  sub.deps = head;\n  sub.depsTail = tail;\n}\nfunction isDirty(sub) {\n  for (let link = sub.deps; link; link = link.nextDep) {\n    if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {\n      return true;\n    }\n  }\n  if (sub._dirty) {\n    return true;\n  }\n  return false;\n}\nfunction refreshComputed(computed) {\n  if (computed.flags & 4 && !(computed.flags & 16)) {\n    return;\n  }\n  computed.flags &= -17;\n  if (computed.globalVersion === globalVersion) {\n    return;\n  }\n  computed.globalVersion = globalVersion;\n  if (!computed.isSSR && computed.flags & 128 && (!computed.deps && !computed._dirty || !isDirty(computed))) {\n    return;\n  }\n  computed.flags |= 2;\n  const dep = computed.dep;\n  const prevSub = activeSub;\n  const prevShouldTrack = shouldTrack;\n  activeSub = computed;\n  shouldTrack = true;\n  try {\n    prepareDeps(computed);\n    const value = computed.fn(computed._value);\n    if (dep.version === 0 || shared.hasChanged(value, computed._value)) {\n      computed.flags |= 128;\n      computed._value = value;\n      dep.version++;\n    }\n  } catch (err) {\n    dep.version++;\n    throw err;\n  } finally {\n    activeSub = prevSub;\n    shouldTrack = prevShouldTrack;\n    cleanupDeps(computed);\n    computed.flags &= -3;\n  }\n}\nfunction removeSub(link, soft = false) {\n  const { dep, prevSub, nextSub } = link;\n  if (prevSub) {\n    prevSub.nextSub = nextSub;\n    link.prevSub = void 0;\n  }\n  if (nextSub) {\n    nextSub.prevSub = prevSub;\n    link.nextSub = void 0;\n  }\n  if (dep.subs === link) {\n    dep.subs = prevSub;\n    if (!prevSub && dep.computed) {\n      dep.computed.flags &= -5;\n      for (let l = dep.computed.deps; l; l = l.nextDep) {\n        removeSub(l, true);\n      }\n    }\n  }\n  if (!soft && !--dep.sc && dep.map) {\n    dep.map.delete(dep.key);\n  }\n}\nfunction removeDep(link) {\n  const { prevDep, nextDep } = link;\n  if (prevDep) {\n    prevDep.nextDep = nextDep;\n    link.prevDep = void 0;\n  }\n  if (nextDep) {\n    nextDep.prevDep = prevDep;\n    link.nextDep = void 0;\n  }\n}\nfunction effect(fn, options) {\n  if (fn.effect instanceof ReactiveEffect) {\n    fn = fn.effect.fn;\n  }\n  const e = new ReactiveEffect(fn);\n  if (options) {\n    shared.extend(e, options);\n  }\n  try {\n    e.run();\n  } catch (err) {\n    e.stop();\n    throw err;\n  }\n  const runner = e.run.bind(e);\n  runner.effect = e;\n  return runner;\n}\nfunction stop(runner) {\n  runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = false;\n}\nfunction enableTracking() {\n  trackStack.push(shouldTrack);\n  shouldTrack = true;\n}\nfunction resetTracking() {\n  const last = trackStack.pop();\n  shouldTrack = last === void 0 ? true : last;\n}\nfunction onEffectCleanup(fn, failSilently = false) {\n  if (activeSub instanceof ReactiveEffect) {\n    activeSub.cleanup = fn;\n  }\n}\nfunction cleanupEffect(e) {\n  const { cleanup } = e;\n  e.cleanup = void 0;\n  if (cleanup) {\n    const prevSub = activeSub;\n    activeSub = void 0;\n    try {\n      cleanup();\n    } finally {\n      activeSub = prevSub;\n    }\n  }\n}\n\nlet globalVersion = 0;\nclass Link {\n  constructor(sub, dep) {\n    this.sub = sub;\n    this.dep = dep;\n    this.version = dep.version;\n    this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;\n  }\n}\nclass Dep {\n  // TODO isolatedDeclarations \"__v_skip\"\n  constructor(computed) {\n    this.computed = computed;\n    this.version = 0;\n    /**\n     * Link between this dep and the current active effect\n     */\n    this.activeLink = void 0;\n    /**\n     * Doubly linked list representing the subscribing effects (tail)\n     */\n    this.subs = void 0;\n    /**\n     * For object property deps cleanup\n     */\n    this.map = void 0;\n    this.key = void 0;\n    /**\n     * Subscriber counter\n     */\n    this.sc = 0;\n    /**\n     * @internal\n     */\n    this.__v_skip = true;\n  }\n  track(debugInfo) {\n    if (!activeSub || !shouldTrack || activeSub === this.computed) {\n      return;\n    }\n    let link = this.activeLink;\n    if (link === void 0 || link.sub !== activeSub) {\n      link = this.activeLink = new Link(activeSub, this);\n      if (!activeSub.deps) {\n        activeSub.deps = activeSub.depsTail = link;\n      } else {\n        link.prevDep = activeSub.depsTail;\n        activeSub.depsTail.nextDep = link;\n        activeSub.depsTail = link;\n      }\n      addSub(link);\n    } else if (link.version === -1) {\n      link.version = this.version;\n      if (link.nextDep) {\n        const next = link.nextDep;\n        next.prevDep = link.prevDep;\n        if (link.prevDep) {\n          link.prevDep.nextDep = next;\n        }\n        link.prevDep = activeSub.depsTail;\n        link.nextDep = void 0;\n        activeSub.depsTail.nextDep = link;\n        activeSub.depsTail = link;\n        if (activeSub.deps === link) {\n          activeSub.deps = next;\n        }\n      }\n    }\n    return link;\n  }\n  trigger(debugInfo) {\n    this.version++;\n    globalVersion++;\n    this.notify(debugInfo);\n  }\n  notify(debugInfo) {\n    startBatch();\n    try {\n      if (false) ;\n      for (let link = this.subs; link; link = link.prevSub) {\n        if (link.sub.notify()) {\n          ;\n          link.sub.dep.notify();\n        }\n      }\n    } finally {\n      endBatch();\n    }\n  }\n}\nfunction addSub(link) {\n  link.dep.sc++;\n  if (link.sub.flags & 4) {\n    const computed = link.dep.computed;\n    if (computed && !link.dep.subs) {\n      computed.flags |= 4 | 16;\n      for (let l = computed.deps; l; l = l.nextDep) {\n        addSub(l);\n      }\n    }\n    const currentTail = link.dep.subs;\n    if (currentTail !== link) {\n      link.prevSub = currentTail;\n      if (currentTail) currentTail.nextSub = link;\n    }\n    link.dep.subs = link;\n  }\n}\nconst targetMap = /* @__PURE__ */ new WeakMap();\nconst ITERATE_KEY = Symbol(\n  \"\"\n);\nconst MAP_KEY_ITERATE_KEY = Symbol(\n  \"\"\n);\nconst ARRAY_ITERATE_KEY = Symbol(\n  \"\"\n);\nfunction track(target, type, key) {\n  if (shouldTrack && activeSub) {\n    let depsMap = targetMap.get(target);\n    if (!depsMap) {\n      targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n    }\n    let dep = depsMap.get(key);\n    if (!dep) {\n      depsMap.set(key, dep = new Dep());\n      dep.map = depsMap;\n      dep.key = key;\n    }\n    {\n      dep.track();\n    }\n  }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n  const depsMap = targetMap.get(target);\n  if (!depsMap) {\n    globalVersion++;\n    return;\n  }\n  const run = (dep) => {\n    if (dep) {\n      {\n        dep.trigger();\n      }\n    }\n  };\n  startBatch();\n  if (type === \"clear\") {\n    depsMap.forEach(run);\n  } else {\n    const targetIsArray = shared.isArray(target);\n    const isArrayIndex = targetIsArray && shared.isIntegerKey(key);\n    if (targetIsArray && key === \"length\") {\n      const newLength = Number(newValue);\n      depsMap.forEach((dep, key2) => {\n        if (key2 === \"length\" || key2 === ARRAY_ITERATE_KEY || !shared.isSymbol(key2) && key2 >= newLength) {\n          run(dep);\n        }\n      });\n    } else {\n      if (key !== void 0 || depsMap.has(void 0)) {\n        run(depsMap.get(key));\n      }\n      if (isArrayIndex) {\n        run(depsMap.get(ARRAY_ITERATE_KEY));\n      }\n      switch (type) {\n        case \"add\":\n          if (!targetIsArray) {\n            run(depsMap.get(ITERATE_KEY));\n            if (shared.isMap(target)) {\n              run(depsMap.get(MAP_KEY_ITERATE_KEY));\n            }\n          } else if (isArrayIndex) {\n            run(depsMap.get(\"length\"));\n          }\n          break;\n        case \"delete\":\n          if (!targetIsArray) {\n            run(depsMap.get(ITERATE_KEY));\n            if (shared.isMap(target)) {\n              run(depsMap.get(MAP_KEY_ITERATE_KEY));\n            }\n          }\n          break;\n        case \"set\":\n          if (shared.isMap(target)) {\n            run(depsMap.get(ITERATE_KEY));\n          }\n          break;\n      }\n    }\n  }\n  endBatch();\n}\nfunction getDepFromReactive(object, key) {\n  const depMap = targetMap.get(object);\n  return depMap && depMap.get(key);\n}\n\nfunction reactiveReadArray(array) {\n  const raw = toRaw(array);\n  if (raw === array) return raw;\n  track(raw, \"iterate\", ARRAY_ITERATE_KEY);\n  return isShallow(array) ? raw : raw.map(toReactive);\n}\nfunction shallowReadArray(arr) {\n  track(arr = toRaw(arr), \"iterate\", ARRAY_ITERATE_KEY);\n  return arr;\n}\nconst arrayInstrumentations = {\n  __proto__: null,\n  [Symbol.iterator]() {\n    return iterator(this, Symbol.iterator, toReactive);\n  },\n  concat(...args) {\n    return reactiveReadArray(this).concat(\n      ...args.map((x) => shared.isArray(x) ? reactiveReadArray(x) : x)\n    );\n  },\n  entries() {\n    return iterator(this, \"entries\", (value) => {\n      value[1] = toReactive(value[1]);\n      return value;\n    });\n  },\n  every(fn, thisArg) {\n    return apply(this, \"every\", fn, thisArg, void 0, arguments);\n  },\n  filter(fn, thisArg) {\n    return apply(this, \"filter\", fn, thisArg, (v) => v.map(toReactive), arguments);\n  },\n  find(fn, thisArg) {\n    return apply(this, \"find\", fn, thisArg, toReactive, arguments);\n  },\n  findIndex(fn, thisArg) {\n    return apply(this, \"findIndex\", fn, thisArg, void 0, arguments);\n  },\n  findLast(fn, thisArg) {\n    return apply(this, \"findLast\", fn, thisArg, toReactive, arguments);\n  },\n  findLastIndex(fn, thisArg) {\n    return apply(this, \"findLastIndex\", fn, thisArg, void 0, arguments);\n  },\n  // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement\n  forEach(fn, thisArg) {\n    return apply(this, \"forEach\", fn, thisArg, void 0, arguments);\n  },\n  includes(...args) {\n    return searchProxy(this, \"includes\", args);\n  },\n  indexOf(...args) {\n    return searchProxy(this, \"indexOf\", args);\n  },\n  join(separator) {\n    return reactiveReadArray(this).join(separator);\n  },\n  // keys() iterator only reads `length`, no optimisation required\n  lastIndexOf(...args) {\n    return searchProxy(this, \"lastIndexOf\", args);\n  },\n  map(fn, thisArg) {\n    return apply(this, \"map\", fn, thisArg, void 0, arguments);\n  },\n  pop() {\n    return noTracking(this, \"pop\");\n  },\n  push(...args) {\n    return noTracking(this, \"push\", args);\n  },\n  reduce(fn, ...args) {\n    return reduce(this, \"reduce\", fn, args);\n  },\n  reduceRight(fn, ...args) {\n    return reduce(this, \"reduceRight\", fn, args);\n  },\n  shift() {\n    return noTracking(this, \"shift\");\n  },\n  // slice could use ARRAY_ITERATE but also seems to beg for range tracking\n  some(fn, thisArg) {\n    return apply(this, \"some\", fn, thisArg, void 0, arguments);\n  },\n  splice(...args) {\n    return noTracking(this, \"splice\", args);\n  },\n  toReversed() {\n    return reactiveReadArray(this).toReversed();\n  },\n  toSorted(comparer) {\n    return reactiveReadArray(this).toSorted(comparer);\n  },\n  toSpliced(...args) {\n    return reactiveReadArray(this).toSpliced(...args);\n  },\n  unshift(...args) {\n    return noTracking(this, \"unshift\", args);\n  },\n  values() {\n    return iterator(this, \"values\", toReactive);\n  }\n};\nfunction iterator(self, method, wrapValue) {\n  const arr = shallowReadArray(self);\n  const iter = arr[method]();\n  if (arr !== self && !isShallow(self)) {\n    iter._next = iter.next;\n    iter.next = () => {\n      const result = iter._next();\n      if (result.value) {\n        result.value = wrapValue(result.value);\n      }\n      return result;\n    };\n  }\n  return iter;\n}\nconst arrayProto = Array.prototype;\nfunction apply(self, method, fn, thisArg, wrappedRetFn, args) {\n  const arr = shallowReadArray(self);\n  const needsWrap = arr !== self && !isShallow(self);\n  const methodFn = arr[method];\n  if (methodFn !== arrayProto[method]) {\n    const result2 = methodFn.apply(self, args);\n    return needsWrap ? toReactive(result2) : result2;\n  }\n  let wrappedFn = fn;\n  if (arr !== self) {\n    if (needsWrap) {\n      wrappedFn = function(item, index) {\n        return fn.call(this, toReactive(item), index, self);\n      };\n    } else if (fn.length > 2) {\n      wrappedFn = function(item, index) {\n        return fn.call(this, item, index, self);\n      };\n    }\n  }\n  const result = methodFn.call(arr, wrappedFn, thisArg);\n  return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result;\n}\nfunction reduce(self, method, fn, args) {\n  const arr = shallowReadArray(self);\n  let wrappedFn = fn;\n  if (arr !== self) {\n    if (!isShallow(self)) {\n      wrappedFn = function(acc, item, index) {\n        return fn.call(this, acc, toReactive(item), index, self);\n      };\n    } else if (fn.length > 3) {\n      wrappedFn = function(acc, item, index) {\n        return fn.call(this, acc, item, index, self);\n      };\n    }\n  }\n  return arr[method](wrappedFn, ...args);\n}\nfunction searchProxy(self, method, args) {\n  const arr = toRaw(self);\n  track(arr, \"iterate\", ARRAY_ITERATE_KEY);\n  const res = arr[method](...args);\n  if ((res === -1 || res === false) && isProxy(args[0])) {\n    args[0] = toRaw(args[0]);\n    return arr[method](...args);\n  }\n  return res;\n}\nfunction noTracking(self, method, args = []) {\n  pauseTracking();\n  startBatch();\n  const res = toRaw(self)[method].apply(self, args);\n  endBatch();\n  resetTracking();\n  return res;\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ shared.makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n  /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(shared.isSymbol)\n);\nfunction hasOwnProperty(key) {\n  if (!shared.isSymbol(key)) key = String(key);\n  const obj = toRaw(this);\n  track(obj, \"has\", key);\n  return obj.hasOwnProperty(key);\n}\nclass BaseReactiveHandler {\n  constructor(_isReadonly = false, _isShallow = false) {\n    this._isReadonly = _isReadonly;\n    this._isShallow = _isShallow;\n  }\n  get(target, key, receiver) {\n    if (key === \"__v_skip\") return target[\"__v_skip\"];\n    const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_isShallow\") {\n      return isShallow2;\n    } else if (key === \"__v_raw\") {\n      if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype\n      // this means the receiver is a user proxy of the reactive proxy\n      Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {\n        return target;\n      }\n      return;\n    }\n    const targetIsArray = shared.isArray(target);\n    if (!isReadonly2) {\n      let fn;\n      if (targetIsArray && (fn = arrayInstrumentations[key])) {\n        return fn;\n      }\n      if (key === \"hasOwnProperty\") {\n        return hasOwnProperty;\n      }\n    }\n    const res = Reflect.get(\n      target,\n      key,\n      // if this is a proxy wrapping a ref, return methods using the raw ref\n      // as receiver so that we don't have to call `toRaw` on the ref in all\n      // its class methods\n      isRef(target) ? target : receiver\n    );\n    if (shared.isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n      return res;\n    }\n    if (!isReadonly2) {\n      track(target, \"get\", key);\n    }\n    if (isShallow2) {\n      return res;\n    }\n    if (isRef(res)) {\n      return targetIsArray && shared.isIntegerKey(key) ? res : res.value;\n    }\n    if (shared.isObject(res)) {\n      return isReadonly2 ? readonly(res) : reactive(res);\n    }\n    return res;\n  }\n}\nclass MutableReactiveHandler extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(false, isShallow2);\n  }\n  set(target, key, value, receiver) {\n    let oldValue = target[key];\n    if (!this._isShallow) {\n      const isOldValueReadonly = isReadonly(oldValue);\n      if (!isShallow(value) && !isReadonly(value)) {\n        oldValue = toRaw(oldValue);\n        value = toRaw(value);\n      }\n      if (!shared.isArray(target) && isRef(oldValue) && !isRef(value)) {\n        if (isOldValueReadonly) {\n          return false;\n        } else {\n          oldValue.value = value;\n          return true;\n        }\n      }\n    }\n    const hadKey = shared.isArray(target) && shared.isIntegerKey(key) ? Number(key) < target.length : shared.hasOwn(target, key);\n    const result = Reflect.set(\n      target,\n      key,\n      value,\n      isRef(target) ? target : receiver\n    );\n    if (target === toRaw(receiver)) {\n      if (!hadKey) {\n        trigger(target, \"add\", key, value);\n      } else if (shared.hasChanged(value, oldValue)) {\n        trigger(target, \"set\", key, value);\n      }\n    }\n    return result;\n  }\n  deleteProperty(target, key) {\n    const hadKey = shared.hasOwn(target, key);\n    target[key];\n    const result = Reflect.deleteProperty(target, key);\n    if (result && hadKey) {\n      trigger(target, \"delete\", key, void 0);\n    }\n    return result;\n  }\n  has(target, key) {\n    const result = Reflect.has(target, key);\n    if (!shared.isSymbol(key) || !builtInSymbols.has(key)) {\n      track(target, \"has\", key);\n    }\n    return result;\n  }\n  ownKeys(target) {\n    track(\n      target,\n      \"iterate\",\n      shared.isArray(target) ? \"length\" : ITERATE_KEY\n    );\n    return Reflect.ownKeys(target);\n  }\n}\nclass ReadonlyReactiveHandler extends BaseReactiveHandler {\n  constructor(isShallow2 = false) {\n    super(true, isShallow2);\n  }\n  set(target, key) {\n    return true;\n  }\n  deleteProperty(target, key) {\n    return true;\n  }\n}\nconst mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler();\nconst readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler();\nconst shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true);\nconst shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction createIterableMethod(method, isReadonly2, isShallow2) {\n  return function(...args) {\n    const target = this[\"__v_raw\"];\n    const rawTarget = toRaw(target);\n    const targetIsMap = shared.isMap(rawTarget);\n    const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n    const isKeyOnly = method === \"keys\" && targetIsMap;\n    const innerIterator = target[method](...args);\n    const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;\n    !isReadonly2 && track(\n      rawTarget,\n      \"iterate\",\n      isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n    );\n    return {\n      // iterator protocol\n      next() {\n        const { value, done } = innerIterator.next();\n        return done ? { value, done } : {\n          value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n          done\n        };\n      },\n      // iterable protocol\n      [Symbol.iterator]() {\n        return this;\n      }\n    };\n  };\n}\nfunction createReadonlyMethod(type) {\n  return function(...args) {\n    return type === \"delete\" ? false : type === \"clear\" ? void 0 : this;\n  };\n}\nfunction createInstrumentations(readonly, shallow) {\n  const instrumentations = {\n    get(key) {\n      const target = this[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!readonly) {\n        if (shared.hasChanged(key, rawKey)) {\n          track(rawTarget, \"get\", key);\n        }\n        track(rawTarget, \"get\", rawKey);\n      }\n      const { has } = getProto(rawTarget);\n      const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n      if (has.call(rawTarget, key)) {\n        return wrap(target.get(key));\n      } else if (has.call(rawTarget, rawKey)) {\n        return wrap(target.get(rawKey));\n      } else if (target !== rawTarget) {\n        target.get(key);\n      }\n    },\n    get size() {\n      const target = this[\"__v_raw\"];\n      !readonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n      return Reflect.get(target, \"size\", target);\n    },\n    has(key) {\n      const target = this[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const rawKey = toRaw(key);\n      if (!readonly) {\n        if (shared.hasChanged(key, rawKey)) {\n          track(rawTarget, \"has\", key);\n        }\n        track(rawTarget, \"has\", rawKey);\n      }\n      return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n    },\n    forEach(callback, thisArg) {\n      const observed = this;\n      const target = observed[\"__v_raw\"];\n      const rawTarget = toRaw(target);\n      const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive;\n      !readonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n      return target.forEach((value, key) => {\n        return callback.call(thisArg, wrap(value), wrap(key), observed);\n      });\n    }\n  };\n  shared.extend(\n    instrumentations,\n    readonly ? {\n      add: createReadonlyMethod(\"add\"),\n      set: createReadonlyMethod(\"set\"),\n      delete: createReadonlyMethod(\"delete\"),\n      clear: createReadonlyMethod(\"clear\")\n    } : {\n      add(value) {\n        if (!shallow && !isShallow(value) && !isReadonly(value)) {\n          value = toRaw(value);\n        }\n        const target = toRaw(this);\n        const proto = getProto(target);\n        const hadKey = proto.has.call(target, value);\n        if (!hadKey) {\n          target.add(value);\n          trigger(target, \"add\", value, value);\n        }\n        return this;\n      },\n      set(key, value) {\n        if (!shallow && !isShallow(value) && !isReadonly(value)) {\n          value = toRaw(value);\n        }\n        const target = toRaw(this);\n        const { has, get } = getProto(target);\n        let hadKey = has.call(target, key);\n        if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n        }\n        const oldValue = get.call(target, key);\n        target.set(key, value);\n        if (!hadKey) {\n          trigger(target, \"add\", key, value);\n        } else if (shared.hasChanged(value, oldValue)) {\n          trigger(target, \"set\", key, value);\n        }\n        return this;\n      },\n      delete(key) {\n        const target = toRaw(this);\n        const { has, get } = getProto(target);\n        let hadKey = has.call(target, key);\n        if (!hadKey) {\n          key = toRaw(key);\n          hadKey = has.call(target, key);\n        }\n        get ? get.call(target, key) : void 0;\n        const result = target.delete(key);\n        if (hadKey) {\n          trigger(target, \"delete\", key, void 0);\n        }\n        return result;\n      },\n      clear() {\n        const target = toRaw(this);\n        const hadItems = target.size !== 0;\n        const result = target.clear();\n        if (hadItems) {\n          trigger(\n            target,\n            \"clear\",\n            void 0,\n            void 0);\n        }\n        return result;\n      }\n    }\n  );\n  const iteratorMethods = [\n    \"keys\",\n    \"values\",\n    \"entries\",\n    Symbol.iterator\n  ];\n  iteratorMethods.forEach((method) => {\n    instrumentations[method] = createIterableMethod(method, readonly, shallow);\n  });\n  return instrumentations;\n}\nfunction createInstrumentationGetter(isReadonly2, shallow) {\n  const instrumentations = createInstrumentations(isReadonly2, shallow);\n  return (target, key, receiver) => {\n    if (key === \"__v_isReactive\") {\n      return !isReadonly2;\n    } else if (key === \"__v_isReadonly\") {\n      return isReadonly2;\n    } else if (key === \"__v_raw\") {\n      return target;\n    }\n    return Reflect.get(\n      shared.hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n      key,\n      receiver\n    );\n  };\n}\nconst mutableCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n  get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n  switch (rawType) {\n    case \"Object\":\n    case \"Array\":\n      return 1 /* COMMON */;\n    case \"Map\":\n    case \"Set\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n      return 2 /* COLLECTION */;\n    default:\n      return 0 /* INVALID */;\n  }\n}\nfunction getTargetType(value) {\n  return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(shared.toRawType(value));\n}\nfunction reactive(target) {\n  if (isReadonly(target)) {\n    return target;\n  }\n  return createReactiveObject(\n    target,\n    false,\n    mutableHandlers,\n    mutableCollectionHandlers,\n    reactiveMap\n  );\n}\nfunction shallowReactive(target) {\n  return createReactiveObject(\n    target,\n    false,\n    shallowReactiveHandlers,\n    shallowCollectionHandlers,\n    shallowReactiveMap\n  );\n}\nfunction readonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    readonlyHandlers,\n    readonlyCollectionHandlers,\n    readonlyMap\n  );\n}\nfunction shallowReadonly(target) {\n  return createReactiveObject(\n    target,\n    true,\n    shallowReadonlyHandlers,\n    shallowReadonlyCollectionHandlers,\n    shallowReadonlyMap\n  );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n  if (!shared.isObject(target)) {\n    return target;\n  }\n  if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n    return target;\n  }\n  const targetType = getTargetType(target);\n  if (targetType === 0 /* INVALID */) {\n    return target;\n  }\n  const existingProxy = proxyMap.get(target);\n  if (existingProxy) {\n    return existingProxy;\n  }\n  const proxy = new Proxy(\n    target,\n    targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n  );\n  proxyMap.set(target, proxy);\n  return proxy;\n}\nfunction isReactive(value) {\n  if (isReadonly(value)) {\n    return isReactive(value[\"__v_raw\"]);\n  }\n  return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n  return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n  return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n  return value ? !!value[\"__v_raw\"] : false;\n}\nfunction toRaw(observed) {\n  const raw = observed && observed[\"__v_raw\"];\n  return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n  if (!shared.hasOwn(value, \"__v_skip\") && Object.isExtensible(value)) {\n    shared.def(value, \"__v_skip\", true);\n  }\n  return value;\n}\nconst toReactive = (value) => shared.isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => shared.isObject(value) ? readonly(value) : value;\n\nfunction isRef(r) {\n  return r ? r[\"__v_isRef\"] === true : false;\n}\nfunction ref(value) {\n  return createRef(value, false);\n}\nfunction shallowRef(value) {\n  return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n  if (isRef(rawValue)) {\n    return rawValue;\n  }\n  return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n  constructor(value, isShallow2) {\n    this.dep = new Dep();\n    this[\"__v_isRef\"] = true;\n    this[\"__v_isShallow\"] = false;\n    this._rawValue = isShallow2 ? value : toRaw(value);\n    this._value = isShallow2 ? value : toReactive(value);\n    this[\"__v_isShallow\"] = isShallow2;\n  }\n  get value() {\n    {\n      this.dep.track();\n    }\n    return this._value;\n  }\n  set value(newValue) {\n    const oldValue = this._rawValue;\n    const useDirectValue = this[\"__v_isShallow\"] || isShallow(newValue) || isReadonly(newValue);\n    newValue = useDirectValue ? newValue : toRaw(newValue);\n    if (shared.hasChanged(newValue, oldValue)) {\n      this._rawValue = newValue;\n      this._value = useDirectValue ? newValue : toReactive(newValue);\n      {\n        this.dep.trigger();\n      }\n    }\n  }\n}\nfunction triggerRef(ref2) {\n  if (ref2.dep) {\n    {\n      ref2.dep.trigger();\n    }\n  }\n}\nfunction unref(ref2) {\n  return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n  return shared.isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n  get: (target, key, receiver) => key === \"__v_raw\" ? target : unref(Reflect.get(target, key, receiver)),\n  set: (target, key, value, receiver) => {\n    const oldValue = target[key];\n    if (isRef(oldValue) && !isRef(value)) {\n      oldValue.value = value;\n      return true;\n    } else {\n      return Reflect.set(target, key, value, receiver);\n    }\n  }\n};\nfunction proxyRefs(objectWithRefs) {\n  return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n  constructor(factory) {\n    this[\"__v_isRef\"] = true;\n    this._value = void 0;\n    const dep = this.dep = new Dep();\n    const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep));\n    this._get = get;\n    this._set = set;\n  }\n  get value() {\n    return this._value = this._get();\n  }\n  set value(newVal) {\n    this._set(newVal);\n  }\n}\nfunction customRef(factory) {\n  return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n  const ret = shared.isArray(object) ? new Array(object.length) : {};\n  for (const key in object) {\n    ret[key] = propertyToRef(object, key);\n  }\n  return ret;\n}\nclass ObjectRefImpl {\n  constructor(_object, _key, _defaultValue) {\n    this._object = _object;\n    this._key = _key;\n    this._defaultValue = _defaultValue;\n    this[\"__v_isRef\"] = true;\n    this._value = void 0;\n  }\n  get value() {\n    const val = this._object[this._key];\n    return this._value = val === void 0 ? this._defaultValue : val;\n  }\n  set value(newVal) {\n    this._object[this._key] = newVal;\n  }\n  get dep() {\n    return getDepFromReactive(toRaw(this._object), this._key);\n  }\n}\nclass GetterRefImpl {\n  constructor(_getter) {\n    this._getter = _getter;\n    this[\"__v_isRef\"] = true;\n    this[\"__v_isReadonly\"] = true;\n    this._value = void 0;\n  }\n  get value() {\n    return this._value = this._getter();\n  }\n}\nfunction toRef(source, key, defaultValue) {\n  if (isRef(source)) {\n    return source;\n  } else if (shared.isFunction(source)) {\n    return new GetterRefImpl(source);\n  } else if (shared.isObject(source) && arguments.length > 1) {\n    return propertyToRef(source, key, defaultValue);\n  } else {\n    return ref(source);\n  }\n}\nfunction propertyToRef(source, key, defaultValue) {\n  const val = source[key];\n  return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);\n}\n\nclass ComputedRefImpl {\n  constructor(fn, setter, isSSR) {\n    this.fn = fn;\n    this.setter = setter;\n    /**\n     * @internal\n     */\n    this._value = void 0;\n    /**\n     * @internal\n     */\n    this.dep = new Dep(this);\n    /**\n     * @internal\n     */\n    this.__v_isRef = true;\n    // TODO isolatedDeclarations \"__v_isReadonly\"\n    // A computed is also a subscriber that tracks other deps\n    /**\n     * @internal\n     */\n    this.deps = void 0;\n    /**\n     * @internal\n     */\n    this.depsTail = void 0;\n    /**\n     * @internal\n     */\n    this.flags = 16;\n    /**\n     * @internal\n     */\n    this.globalVersion = globalVersion - 1;\n    /**\n     * @internal\n     */\n    this.next = void 0;\n    // for backwards compat\n    this.effect = this;\n    this[\"__v_isReadonly\"] = !setter;\n    this.isSSR = isSSR;\n  }\n  /**\n   * @internal\n   */\n  notify() {\n    this.flags |= 16;\n    if (!(this.flags & 8) && // avoid infinite self recursion\n    activeSub !== this) {\n      batch(this, true);\n      return true;\n    }\n  }\n  get value() {\n    const link = this.dep.track();\n    refreshComputed(this);\n    if (link) {\n      link.version = this.dep.version;\n    }\n    return this._value;\n  }\n  set value(newValue) {\n    if (this.setter) {\n      this.setter(newValue);\n    }\n  }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n  let getter;\n  let setter;\n  if (shared.isFunction(getterOrOptions)) {\n    getter = getterOrOptions;\n  } else {\n    getter = getterOrOptions.get;\n    setter = getterOrOptions.set;\n  }\n  const cRef = new ComputedRefImpl(getter, setter, isSSR);\n  return cRef;\n}\n\nconst TrackOpTypes = {\n  \"GET\": \"get\",\n  \"HAS\": \"has\",\n  \"ITERATE\": \"iterate\"\n};\nconst TriggerOpTypes = {\n  \"SET\": \"set\",\n  \"ADD\": \"add\",\n  \"DELETE\": \"delete\",\n  \"CLEAR\": \"clear\"\n};\nconst ReactiveFlags = {\n  \"SKIP\": \"__v_skip\",\n  \"IS_REACTIVE\": \"__v_isReactive\",\n  \"IS_READONLY\": \"__v_isReadonly\",\n  \"IS_SHALLOW\": \"__v_isShallow\",\n  \"RAW\": \"__v_raw\",\n  \"IS_REF\": \"__v_isRef\"\n};\n\nconst WatchErrorCodes = {\n  \"WATCH_GETTER\": 2,\n  \"2\": \"WATCH_GETTER\",\n  \"WATCH_CALLBACK\": 3,\n  \"3\": \"WATCH_CALLBACK\",\n  \"WATCH_CLEANUP\": 4,\n  \"4\": \"WATCH_CLEANUP\"\n};\nconst INITIAL_WATCHER_VALUE = {};\nconst cleanupMap = /* @__PURE__ */ new WeakMap();\nlet activeWatcher = void 0;\nfunction getCurrentWatcher() {\n  return activeWatcher;\n}\nfunction onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) {\n  if (owner) {\n    let cleanups = cleanupMap.get(owner);\n    if (!cleanups) cleanupMap.set(owner, cleanups = []);\n    cleanups.push(cleanupFn);\n  }\n}\nfunction watch(source, cb, options = shared.EMPTY_OBJ) {\n  const { immediate, deep, once, scheduler, augmentJob, call } = options;\n  const reactiveGetter = (source2) => {\n    if (deep) return source2;\n    if (isShallow(source2) || deep === false || deep === 0)\n      return traverse(source2, 1);\n    return traverse(source2);\n  };\n  let effect;\n  let getter;\n  let cleanup;\n  let boundCleanup;\n  let forceTrigger = false;\n  let isMultiSource = false;\n  if (isRef(source)) {\n    getter = () => source.value;\n    forceTrigger = isShallow(source);\n  } else if (isReactive(source)) {\n    getter = () => reactiveGetter(source);\n    forceTrigger = true;\n  } else if (shared.isArray(source)) {\n    isMultiSource = true;\n    forceTrigger = source.some((s) => isReactive(s) || isShallow(s));\n    getter = () => source.map((s) => {\n      if (isRef(s)) {\n        return s.value;\n      } else if (isReactive(s)) {\n        return reactiveGetter(s);\n      } else if (shared.isFunction(s)) {\n        return call ? call(s, 2) : s();\n      } else ;\n    });\n  } else if (shared.isFunction(source)) {\n    if (cb) {\n      getter = call ? () => call(source, 2) : source;\n    } else {\n      getter = () => {\n        if (cleanup) {\n          pauseTracking();\n          try {\n            cleanup();\n          } finally {\n            resetTracking();\n          }\n        }\n        const currentEffect = activeWatcher;\n        activeWatcher = effect;\n        try {\n          return call ? call(source, 3, [boundCleanup]) : source(boundCleanup);\n        } finally {\n          activeWatcher = currentEffect;\n        }\n      };\n    }\n  } else {\n    getter = shared.NOOP;\n  }\n  if (cb && deep) {\n    const baseGetter = getter;\n    const depth = deep === true ? Infinity : deep;\n    getter = () => traverse(baseGetter(), depth);\n  }\n  const scope = getCurrentScope();\n  const watchHandle = () => {\n    effect.stop();\n    if (scope && scope.active) {\n      shared.remove(scope.effects, effect);\n    }\n  };\n  if (once && cb) {\n    const _cb = cb;\n    cb = (...args) => {\n      _cb(...args);\n      watchHandle();\n    };\n  }\n  let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n  const job = (immediateFirstRun) => {\n    if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) {\n      return;\n    }\n    if (cb) {\n      const newValue = effect.run();\n      if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => shared.hasChanged(v, oldValue[i])) : shared.hasChanged(newValue, oldValue))) {\n        if (cleanup) {\n          cleanup();\n        }\n        const currentWatcher = activeWatcher;\n        activeWatcher = effect;\n        try {\n          const args = [\n            newValue,\n            // pass undefined as the old value when it's changed for the first time\n            oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n            boundCleanup\n          ];\n          oldValue = newValue;\n          call ? call(cb, 3, args) : (\n            // @ts-expect-error\n            cb(...args)\n          );\n        } finally {\n          activeWatcher = currentWatcher;\n        }\n      }\n    } else {\n      effect.run();\n    }\n  };\n  if (augmentJob) {\n    augmentJob(job);\n  }\n  effect = new ReactiveEffect(getter);\n  effect.scheduler = scheduler ? () => scheduler(job, false) : job;\n  boundCleanup = (fn) => onWatcherCleanup(fn, false, effect);\n  cleanup = effect.onStop = () => {\n    const cleanups = cleanupMap.get(effect);\n    if (cleanups) {\n      if (call) {\n        call(cleanups, 4);\n      } else {\n        for (const cleanup2 of cleanups) cleanup2();\n      }\n      cleanupMap.delete(effect);\n    }\n  };\n  if (cb) {\n    if (immediate) {\n      job(true);\n    } else {\n      oldValue = effect.run();\n    }\n  } else if (scheduler) {\n    scheduler(job.bind(null, true), true);\n  } else {\n    effect.run();\n  }\n  watchHandle.pause = effect.pause.bind(effect);\n  watchHandle.resume = effect.resume.bind(effect);\n  watchHandle.stop = watchHandle;\n  return watchHandle;\n}\nfunction traverse(value, depth = Infinity, seen) {\n  if (depth <= 0 || !shared.isObject(value) || value[\"__v_skip\"]) {\n    return value;\n  }\n  seen = seen || /* @__PURE__ */ new Set();\n  if (seen.has(value)) {\n    return value;\n  }\n  seen.add(value);\n  depth--;\n  if (isRef(value)) {\n    traverse(value.value, depth, seen);\n  } else if (shared.isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      traverse(value[i], depth, seen);\n    }\n  } else if (shared.isSet(value) || shared.isMap(value)) {\n    value.forEach((v) => {\n      traverse(v, depth, seen);\n    });\n  } else if (shared.isPlainObject(value)) {\n    for (const key in value) {\n      traverse(value[key], depth, seen);\n    }\n    for (const key of Object.getOwnPropertySymbols(value)) {\n      if (Object.prototype.propertyIsEnumerable.call(value, key)) {\n        traverse(value[key], depth, seen);\n      }\n    }\n  }\n  return value;\n}\n\nexports.ARRAY_ITERATE_KEY = ARRAY_ITERATE_KEY;\nexports.EffectFlags = EffectFlags;\nexports.EffectScope = EffectScope;\nexports.ITERATE_KEY = ITERATE_KEY;\nexports.MAP_KEY_ITERATE_KEY = MAP_KEY_ITERATE_KEY;\nexports.ReactiveEffect = ReactiveEffect;\nexports.ReactiveFlags = ReactiveFlags;\nexports.TrackOpTypes = TrackOpTypes;\nexports.TriggerOpTypes = TriggerOpTypes;\nexports.WatchErrorCodes = WatchErrorCodes;\nexports.computed = computed;\nexports.customRef = customRef;\nexports.effect = effect;\nexports.effectScope = effectScope;\nexports.enableTracking = enableTracking;\nexports.getCurrentScope = getCurrentScope;\nexports.getCurrentWatcher = getCurrentWatcher;\nexports.isProxy = isProxy;\nexports.isReactive = isReactive;\nexports.isReadonly = isReadonly;\nexports.isRef = isRef;\nexports.isShallow = isShallow;\nexports.markRaw = markRaw;\nexports.onEffectCleanup = onEffectCleanup;\nexports.onScopeDispose = onScopeDispose;\nexports.onWatcherCleanup = onWatcherCleanup;\nexports.pauseTracking = pauseTracking;\nexports.proxyRefs = proxyRefs;\nexports.reactive = reactive;\nexports.reactiveReadArray = reactiveReadArray;\nexports.readonly = readonly;\nexports.ref = ref;\nexports.resetTracking = resetTracking;\nexports.shallowReactive = shallowReactive;\nexports.shallowReadArray = shallowReadArray;\nexports.shallowReadonly = shallowReadonly;\nexports.shallowRef = shallowRef;\nexports.stop = stop;\nexports.toRaw = toRaw;\nexports.toReactive = toReactive;\nexports.toReadonly = toReadonly;\nexports.toRef = toRef;\nexports.toRefs = toRefs;\nexports.toValue = toValue;\nexports.track = track;\nexports.traverse = traverse;\nexports.trigger = trigger;\nexports.triggerRef = triggerRef;\nexports.unref = unref;\nexports.watch = watch;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/reactivity.cjs.prod.js')\n} else {\n  module.exports = require('./dist/reactivity.cjs.js')\n}\n","/**\n* @vue/runtime-core v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar reactivity = require('@vue/reactivity');\nvar shared = require('@vue/shared');\n\nfunction pushWarningContext(vnode) {\n}\nfunction popWarningContext() {\n}\nfunction assertNumber(val, type) {\n  return;\n}\n\nconst ErrorCodes = {\n  \"SETUP_FUNCTION\": 0,\n  \"0\": \"SETUP_FUNCTION\",\n  \"RENDER_FUNCTION\": 1,\n  \"1\": \"RENDER_FUNCTION\",\n  \"NATIVE_EVENT_HANDLER\": 5,\n  \"5\": \"NATIVE_EVENT_HANDLER\",\n  \"COMPONENT_EVENT_HANDLER\": 6,\n  \"6\": \"COMPONENT_EVENT_HANDLER\",\n  \"VNODE_HOOK\": 7,\n  \"7\": \"VNODE_HOOK\",\n  \"DIRECTIVE_HOOK\": 8,\n  \"8\": \"DIRECTIVE_HOOK\",\n  \"TRANSITION_HOOK\": 9,\n  \"9\": \"TRANSITION_HOOK\",\n  \"APP_ERROR_HANDLER\": 10,\n  \"10\": \"APP_ERROR_HANDLER\",\n  \"APP_WARN_HANDLER\": 11,\n  \"11\": \"APP_WARN_HANDLER\",\n  \"FUNCTION_REF\": 12,\n  \"12\": \"FUNCTION_REF\",\n  \"ASYNC_COMPONENT_LOADER\": 13,\n  \"13\": \"ASYNC_COMPONENT_LOADER\",\n  \"SCHEDULER\": 14,\n  \"14\": \"SCHEDULER\",\n  \"COMPONENT_UPDATE\": 15,\n  \"15\": \"COMPONENT_UPDATE\",\n  \"APP_UNMOUNT_CLEANUP\": 16,\n  \"16\": \"APP_UNMOUNT_CLEANUP\"\n};\nconst ErrorTypeStrings$1 = {\n  [\"sp\"]: \"serverPrefetch hook\",\n  [\"bc\"]: \"beforeCreate hook\",\n  [\"c\"]: \"created hook\",\n  [\"bm\"]: \"beforeMount hook\",\n  [\"m\"]: \"mounted hook\",\n  [\"bu\"]: \"beforeUpdate hook\",\n  [\"u\"]: \"updated\",\n  [\"bum\"]: \"beforeUnmount hook\",\n  [\"um\"]: \"unmounted hook\",\n  [\"a\"]: \"activated hook\",\n  [\"da\"]: \"deactivated hook\",\n  [\"ec\"]: \"errorCaptured hook\",\n  [\"rtc\"]: \"renderTracked hook\",\n  [\"rtg\"]: \"renderTriggered hook\",\n  [0]: \"setup function\",\n  [1]: \"render function\",\n  [2]: \"watcher getter\",\n  [3]: \"watcher callback\",\n  [4]: \"watcher cleanup function\",\n  [5]: \"native event handler\",\n  [6]: \"component event handler\",\n  [7]: \"vnode hook\",\n  [8]: \"directive hook\",\n  [9]: \"transition hook\",\n  [10]: \"app errorHandler\",\n  [11]: \"app warnHandler\",\n  [12]: \"ref function\",\n  [13]: \"async component loader\",\n  [14]: \"scheduler flush\",\n  [15]: \"component update\",\n  [16]: \"app unmount cleanup function\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n  try {\n    return args ? fn(...args) : fn();\n  } catch (err) {\n    handleError(err, instance, type);\n  }\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n  if (shared.isFunction(fn)) {\n    const res = callWithErrorHandling(fn, instance, type, args);\n    if (res && shared.isPromise(res)) {\n      res.catch((err) => {\n        handleError(err, instance, type);\n      });\n    }\n    return res;\n  }\n  if (shared.isArray(fn)) {\n    const values = [];\n    for (let i = 0; i < fn.length; i++) {\n      values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n    }\n    return values;\n  }\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n  const contextVNode = instance ? instance.vnode : null;\n  const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || shared.EMPTY_OBJ;\n  if (instance) {\n    let cur = instance.parent;\n    const exposedInstance = instance.proxy;\n    const errorInfo = `https://vuejs.org/error-reference/#runtime-${type}`;\n    while (cur) {\n      const errorCapturedHooks = cur.ec;\n      if (errorCapturedHooks) {\n        for (let i = 0; i < errorCapturedHooks.length; i++) {\n          if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n            return;\n          }\n        }\n      }\n      cur = cur.parent;\n    }\n    if (errorHandler) {\n      reactivity.pauseTracking();\n      callWithErrorHandling(errorHandler, null, 10, [\n        err,\n        exposedInstance,\n        errorInfo\n      ]);\n      reactivity.resetTracking();\n      return;\n    }\n  }\n  logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction);\n}\nfunction logError(err, type, contextVNode, throwInDev = true, throwInProd = false) {\n  if (throwInProd) {\n    throw err;\n  } else {\n    console.error(err);\n  }\n}\n\nconst queue = [];\nlet flushIndex = -1;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nfunction nextTick(fn) {\n  const p = currentFlushPromise || resolvedPromise;\n  return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n  let start = flushIndex + 1;\n  let end = queue.length;\n  while (start < end) {\n    const middle = start + end >>> 1;\n    const middleJob = queue[middle];\n    const middleJobId = getId(middleJob);\n    if (middleJobId < id || middleJobId === id && middleJob.flags & 2) {\n      start = middle + 1;\n    } else {\n      end = middle;\n    }\n  }\n  return start;\n}\nfunction queueJob(job) {\n  if (!(job.flags & 1)) {\n    const jobId = getId(job);\n    const lastJob = queue[queue.length - 1];\n    if (!lastJob || // fast path when the job id is larger than the tail\n    !(job.flags & 2) && jobId >= getId(lastJob)) {\n      queue.push(job);\n    } else {\n      queue.splice(findInsertionIndex(jobId), 0, job);\n    }\n    job.flags |= 1;\n    queueFlush();\n  }\n}\nfunction queueFlush() {\n  if (!currentFlushPromise) {\n    currentFlushPromise = resolvedPromise.then(flushJobs);\n  }\n}\nfunction queuePostFlushCb(cb) {\n  if (!shared.isArray(cb)) {\n    if (activePostFlushCbs && cb.id === -1) {\n      activePostFlushCbs.splice(postFlushIndex + 1, 0, cb);\n    } else if (!(cb.flags & 1)) {\n      pendingPostFlushCbs.push(cb);\n      cb.flags |= 1;\n    }\n  } else {\n    pendingPostFlushCbs.push(...cb);\n  }\n  queueFlush();\n}\nfunction flushPreFlushCbs(instance, seen, i = flushIndex + 1) {\n  for (; i < queue.length; i++) {\n    const cb = queue[i];\n    if (cb && cb.flags & 2) {\n      if (instance && cb.id !== instance.uid) {\n        continue;\n      }\n      queue.splice(i, 1);\n      i--;\n      if (cb.flags & 4) {\n        cb.flags &= -2;\n      }\n      cb();\n      if (!(cb.flags & 4)) {\n        cb.flags &= -2;\n      }\n    }\n  }\n}\nfunction flushPostFlushCbs(seen) {\n  if (pendingPostFlushCbs.length) {\n    const deduped = [...new Set(pendingPostFlushCbs)].sort(\n      (a, b) => getId(a) - getId(b)\n    );\n    pendingPostFlushCbs.length = 0;\n    if (activePostFlushCbs) {\n      activePostFlushCbs.push(...deduped);\n      return;\n    }\n    activePostFlushCbs = deduped;\n    for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n      const cb = activePostFlushCbs[postFlushIndex];\n      if (cb.flags & 4) {\n        cb.flags &= -2;\n      }\n      if (!(cb.flags & 8)) cb();\n      cb.flags &= -2;\n    }\n    activePostFlushCbs = null;\n    postFlushIndex = 0;\n  }\n}\nconst getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id;\nfunction flushJobs(seen) {\n  try {\n    for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n      const job = queue[flushIndex];\n      if (job && !(job.flags & 8)) {\n        if (false) ;\n        if (job.flags & 4) {\n          job.flags &= ~1;\n        }\n        callWithErrorHandling(\n          job,\n          job.i,\n          job.i ? 15 : 14\n        );\n        if (!(job.flags & 4)) {\n          job.flags &= ~1;\n        }\n      }\n    }\n  } finally {\n    for (; flushIndex < queue.length; flushIndex++) {\n      const job = queue[flushIndex];\n      if (job) {\n        job.flags &= -2;\n      }\n    }\n    flushIndex = -1;\n    queue.length = 0;\n    flushPostFlushCbs();\n    currentFlushPromise = null;\n    if (queue.length || pendingPostFlushCbs.length) {\n      flushJobs();\n    }\n  }\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n  const prev = currentRenderingInstance;\n  currentRenderingInstance = instance;\n  currentScopeId = instance && instance.type.__scopeId || null;\n  return prev;\n}\nfunction pushScopeId(id) {\n  currentScopeId = id;\n}\nfunction popScopeId() {\n  currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n  if (!ctx) return fn;\n  if (fn._n) {\n    return fn;\n  }\n  const renderFnWithContext = (...args) => {\n    if (renderFnWithContext._d) {\n      setBlockTracking(-1);\n    }\n    const prevInstance = setCurrentRenderingInstance(ctx);\n    let res;\n    try {\n      res = fn(...args);\n    } finally {\n      setCurrentRenderingInstance(prevInstance);\n      if (renderFnWithContext._d) {\n        setBlockTracking(1);\n      }\n    }\n    return res;\n  };\n  renderFnWithContext._n = true;\n  renderFnWithContext._c = true;\n  renderFnWithContext._d = true;\n  return renderFnWithContext;\n}\n\nfunction withDirectives(vnode, directives) {\n  if (currentRenderingInstance === null) {\n    return vnode;\n  }\n  const instance = getComponentPublicInstance(currentRenderingInstance);\n  const bindings = vnode.dirs || (vnode.dirs = []);\n  for (let i = 0; i < directives.length; i++) {\n    let [dir, value, arg, modifiers = shared.EMPTY_OBJ] = directives[i];\n    if (dir) {\n      if (shared.isFunction(dir)) {\n        dir = {\n          mounted: dir,\n          updated: dir\n        };\n      }\n      if (dir.deep) {\n        reactivity.traverse(value);\n      }\n      bindings.push({\n        dir,\n        instance,\n        value,\n        oldValue: void 0,\n        arg,\n        modifiers\n      });\n    }\n  }\n  return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n  const bindings = vnode.dirs;\n  const oldBindings = prevVNode && prevVNode.dirs;\n  for (let i = 0; i < bindings.length; i++) {\n    const binding = bindings[i];\n    if (oldBindings) {\n      binding.oldValue = oldBindings[i].value;\n    }\n    let hook = binding.dir[name];\n    if (hook) {\n      reactivity.pauseTracking();\n      callWithAsyncErrorHandling(hook, instance, 8, [\n        vnode.el,\n        binding,\n        vnode,\n        prevVNode\n      ]);\n      reactivity.resetTracking();\n    }\n  }\n}\n\nconst TeleportEndKey = Symbol(\"_vte\");\nconst isTeleport = (type) => type.__isTeleport;\nconst isTeleportDisabled = (props) => props && (props.disabled || props.disabled === \"\");\nconst isTeleportDeferred = (props) => props && (props.defer || props.defer === \"\");\nconst isTargetSVG = (target) => typeof SVGElement !== \"undefined\" && target instanceof SVGElement;\nconst isTargetMathML = (target) => typeof MathMLElement === \"function\" && target instanceof MathMLElement;\nconst resolveTarget = (props, select) => {\n  const targetSelector = props && props.to;\n  if (shared.isString(targetSelector)) {\n    if (!select) {\n      return null;\n    } else {\n      const target = select(targetSelector);\n      return target;\n    }\n  } else {\n    return targetSelector;\n  }\n};\nconst TeleportImpl = {\n  name: \"Teleport\",\n  __isTeleport: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) {\n    const {\n      mc: mountChildren,\n      pc: patchChildren,\n      pbc: patchBlockChildren,\n      o: { insert, querySelector, createText, createComment }\n    } = internals;\n    const disabled = isTeleportDisabled(n2.props);\n    let { shapeFlag, children, dynamicChildren } = n2;\n    if (n1 == null) {\n      const placeholder = n2.el = createText(\"\");\n      const mainAnchor = n2.anchor = createText(\"\");\n      insert(placeholder, container, anchor);\n      insert(mainAnchor, container, anchor);\n      const mount = (container2, anchor2) => {\n        if (shapeFlag & 16) {\n          if (parentComponent && parentComponent.isCE) {\n            parentComponent.ce._teleportTarget = container2;\n          }\n          mountChildren(\n            children,\n            container2,\n            anchor2,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        }\n      };\n      const mountToTarget = () => {\n        const target = n2.target = resolveTarget(n2.props, querySelector);\n        const targetAnchor = prepareAnchor(target, n2, createText, insert);\n        if (target) {\n          if (namespace !== \"svg\" && isTargetSVG(target)) {\n            namespace = \"svg\";\n          } else if (namespace !== \"mathml\" && isTargetMathML(target)) {\n            namespace = \"mathml\";\n          }\n          if (!disabled) {\n            mount(target, targetAnchor);\n            updateCssVars(n2, false);\n          }\n        }\n      };\n      if (disabled) {\n        mount(container, mainAnchor);\n        updateCssVars(n2, true);\n      }\n      if (isTeleportDeferred(n2.props)) {\n        n2.el.__isMounted = false;\n        queuePostRenderEffect(() => {\n          mountToTarget();\n          delete n2.el.__isMounted;\n        }, parentSuspense);\n      } else {\n        mountToTarget();\n      }\n    } else {\n      if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {\n        queuePostRenderEffect(() => {\n          TeleportImpl.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        }, parentSuspense);\n        return;\n      }\n      n2.el = n1.el;\n      n2.targetStart = n1.targetStart;\n      const mainAnchor = n2.anchor = n1.anchor;\n      const target = n2.target = n1.target;\n      const targetAnchor = n2.targetAnchor = n1.targetAnchor;\n      const wasDisabled = isTeleportDisabled(n1.props);\n      const currentContainer = wasDisabled ? container : target;\n      const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;\n      if (namespace === \"svg\" || isTargetSVG(target)) {\n        namespace = \"svg\";\n      } else if (namespace === \"mathml\" || isTargetMathML(target)) {\n        namespace = \"mathml\";\n      }\n      if (dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          currentContainer,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds\n        );\n        traverseStaticChildren(n1, n2, true);\n      } else if (!optimized) {\n        patchChildren(\n          n1,\n          n2,\n          currentContainer,\n          currentAnchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          false\n        );\n      }\n      if (disabled) {\n        if (!wasDisabled) {\n          moveTeleport(\n            n2,\n            container,\n            mainAnchor,\n            internals,\n            1\n          );\n        } else {\n          if (n2.props && n1.props && n2.props.to !== n1.props.to) {\n            n2.props.to = n1.props.to;\n          }\n        }\n      } else {\n        if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) {\n          const nextTarget = n2.target = resolveTarget(\n            n2.props,\n            querySelector\n          );\n          if (nextTarget) {\n            moveTeleport(\n              n2,\n              nextTarget,\n              null,\n              internals,\n              0\n            );\n          }\n        } else if (wasDisabled) {\n          moveTeleport(\n            n2,\n            target,\n            targetAnchor,\n            internals,\n            1\n          );\n        }\n      }\n      updateCssVars(n2, disabled);\n    }\n  },\n  remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) {\n    const {\n      shapeFlag,\n      children,\n      anchor,\n      targetStart,\n      targetAnchor,\n      target,\n      props\n    } = vnode;\n    if (target) {\n      hostRemove(targetStart);\n      hostRemove(targetAnchor);\n    }\n    doRemove && hostRemove(anchor);\n    if (shapeFlag & 16) {\n      const shouldRemove = doRemove || !isTeleportDisabled(props);\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        unmount(\n          child,\n          parentComponent,\n          parentSuspense,\n          shouldRemove,\n          !!child.dynamicChildren\n        );\n      }\n    }\n  },\n  move: moveTeleport,\n  hydrate: hydrateTeleport\n};\nfunction moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) {\n  if (moveType === 0) {\n    insert(vnode.targetAnchor, container, parentAnchor);\n  }\n  const { el, anchor, shapeFlag, children, props } = vnode;\n  const isReorder = moveType === 2;\n  if (isReorder) {\n    insert(el, container, parentAnchor);\n  }\n  if (!isReorder || isTeleportDisabled(props)) {\n    if (shapeFlag & 16) {\n      for (let i = 0; i < children.length; i++) {\n        move(\n          children[i],\n          container,\n          parentAnchor,\n          2\n        );\n      }\n    }\n  }\n  if (isReorder) {\n    insert(anchor, container, parentAnchor);\n  }\n}\nfunction hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, {\n  o: { nextSibling, parentNode, querySelector, insert, createText }\n}, hydrateChildren) {\n  const target = vnode.target = resolveTarget(\n    vnode.props,\n    querySelector\n  );\n  if (target) {\n    const disabled = isTeleportDisabled(vnode.props);\n    const targetNode = target._lpa || target.firstChild;\n    if (vnode.shapeFlag & 16) {\n      if (disabled) {\n        vnode.anchor = hydrateChildren(\n          nextSibling(node),\n          vnode,\n          parentNode(node),\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n        vnode.targetStart = targetNode;\n        vnode.targetAnchor = targetNode && nextSibling(targetNode);\n      } else {\n        vnode.anchor = nextSibling(node);\n        let targetAnchor = targetNode;\n        while (targetAnchor) {\n          if (targetAnchor && targetAnchor.nodeType === 8) {\n            if (targetAnchor.data === \"teleport start anchor\") {\n              vnode.targetStart = targetAnchor;\n            } else if (targetAnchor.data === \"teleport anchor\") {\n              vnode.targetAnchor = targetAnchor;\n              target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor);\n              break;\n            }\n          }\n          targetAnchor = nextSibling(targetAnchor);\n        }\n        if (!vnode.targetAnchor) {\n          prepareAnchor(target, vnode, createText, insert);\n        }\n        hydrateChildren(\n          targetNode && nextSibling(targetNode),\n          vnode,\n          target,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n    updateCssVars(vnode, disabled);\n  }\n  return vnode.anchor && nextSibling(vnode.anchor);\n}\nconst Teleport = TeleportImpl;\nfunction updateCssVars(vnode, isDisabled) {\n  const ctx = vnode.ctx;\n  if (ctx && ctx.ut) {\n    let node, anchor;\n    if (isDisabled) {\n      node = vnode.el;\n      anchor = vnode.anchor;\n    } else {\n      node = vnode.targetStart;\n      anchor = vnode.targetAnchor;\n    }\n    while (node && node !== anchor) {\n      if (node.nodeType === 1) node.setAttribute(\"data-v-owner\", ctx.uid);\n      node = node.nextSibling;\n    }\n    ctx.ut();\n  }\n}\nfunction prepareAnchor(target, vnode, createText, insert) {\n  const targetStart = vnode.targetStart = createText(\"\");\n  const targetAnchor = vnode.targetAnchor = createText(\"\");\n  targetStart[TeleportEndKey] = targetAnchor;\n  if (target) {\n    insert(targetStart, target);\n    insert(targetAnchor, target);\n  }\n  return targetAnchor;\n}\n\nconst leaveCbKey = Symbol(\"_leaveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nfunction useTransitionState() {\n  const state = {\n    isMounted: false,\n    isLeaving: false,\n    isUnmounting: false,\n    leavingVNodes: /* @__PURE__ */ new Map()\n  };\n  onMounted(() => {\n    state.isMounted = true;\n  });\n  onBeforeUnmount(() => {\n    state.isUnmounting = true;\n  });\n  return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n  mode: String,\n  appear: Boolean,\n  persisted: Boolean,\n  // enter\n  onBeforeEnter: TransitionHookValidator,\n  onEnter: TransitionHookValidator,\n  onAfterEnter: TransitionHookValidator,\n  onEnterCancelled: TransitionHookValidator,\n  // leave\n  onBeforeLeave: TransitionHookValidator,\n  onLeave: TransitionHookValidator,\n  onAfterLeave: TransitionHookValidator,\n  onLeaveCancelled: TransitionHookValidator,\n  // appear\n  onBeforeAppear: TransitionHookValidator,\n  onAppear: TransitionHookValidator,\n  onAfterAppear: TransitionHookValidator,\n  onAppearCancelled: TransitionHookValidator\n};\nconst recursiveGetSubtree = (instance) => {\n  const subTree = instance.subTree;\n  return subTree.component ? recursiveGetSubtree(subTree.component) : subTree;\n};\nconst BaseTransitionImpl = {\n  name: `BaseTransition`,\n  props: BaseTransitionPropsValidators,\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const state = useTransitionState();\n    return () => {\n      const children = slots.default && getTransitionRawChildren(slots.default(), true);\n      if (!children || !children.length) {\n        return;\n      }\n      const child = findNonCommentChild(children);\n      const rawProps = reactivity.toRaw(props);\n      const { mode } = rawProps;\n      if (state.isLeaving) {\n        return emptyPlaceholder(child);\n      }\n      const innerChild = getInnerChild$1(child);\n      if (!innerChild) {\n        return emptyPlaceholder(child);\n      }\n      let enterHooks = resolveTransitionHooks(\n        innerChild,\n        rawProps,\n        state,\n        instance,\n        // #11061, ensure enterHooks is fresh after clone\n        (hooks) => enterHooks = hooks\n      );\n      if (innerChild.type !== Comment) {\n        setTransitionHooks(innerChild, enterHooks);\n      }\n      let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree);\n      if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) {\n        let leavingHooks = resolveTransitionHooks(\n          oldInnerChild,\n          rawProps,\n          state,\n          instance\n        );\n        setTransitionHooks(oldInnerChild, leavingHooks);\n        if (mode === \"out-in\" && innerChild.type !== Comment) {\n          state.isLeaving = true;\n          leavingHooks.afterLeave = () => {\n            state.isLeaving = false;\n            if (!(instance.job.flags & 8)) {\n              instance.update();\n            }\n            delete leavingHooks.afterLeave;\n            oldInnerChild = void 0;\n          };\n          return emptyPlaceholder(child);\n        } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n          leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n            const leavingVNodesCache = getLeavingNodesForType(\n              state,\n              oldInnerChild\n            );\n            leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n            el[leaveCbKey] = () => {\n              earlyRemove();\n              el[leaveCbKey] = void 0;\n              delete enterHooks.delayedLeave;\n              oldInnerChild = void 0;\n            };\n            enterHooks.delayedLeave = () => {\n              delayedLeave();\n              delete enterHooks.delayedLeave;\n              oldInnerChild = void 0;\n            };\n          };\n        } else {\n          oldInnerChild = void 0;\n        }\n      } else if (oldInnerChild) {\n        oldInnerChild = void 0;\n      }\n      return child;\n    };\n  }\n};\nfunction findNonCommentChild(children) {\n  let child = children[0];\n  if (children.length > 1) {\n    for (const c of children) {\n      if (c.type !== Comment) {\n        child = c;\n        break;\n      }\n    }\n  }\n  return child;\n}\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n  const { leavingVNodes } = state;\n  let leavingVNodesCache = leavingVNodes.get(vnode.type);\n  if (!leavingVNodesCache) {\n    leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n    leavingVNodes.set(vnode.type, leavingVNodesCache);\n  }\n  return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance, postClone) {\n  const {\n    appear,\n    mode,\n    persisted = false,\n    onBeforeEnter,\n    onEnter,\n    onAfterEnter,\n    onEnterCancelled,\n    onBeforeLeave,\n    onLeave,\n    onAfterLeave,\n    onLeaveCancelled,\n    onBeforeAppear,\n    onAppear,\n    onAfterAppear,\n    onAppearCancelled\n  } = props;\n  const key = String(vnode.key);\n  const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n  const callHook = (hook, args) => {\n    hook && callWithAsyncErrorHandling(\n      hook,\n      instance,\n      9,\n      args\n    );\n  };\n  const callAsyncHook = (hook, args) => {\n    const done = args[1];\n    callHook(hook, args);\n    if (shared.isArray(hook)) {\n      if (hook.every((hook2) => hook2.length <= 1)) done();\n    } else if (hook.length <= 1) {\n      done();\n    }\n  };\n  const hooks = {\n    mode,\n    persisted,\n    beforeEnter(el) {\n      let hook = onBeforeEnter;\n      if (!state.isMounted) {\n        if (appear) {\n          hook = onBeforeAppear || onBeforeEnter;\n        } else {\n          return;\n        }\n      }\n      if (el[leaveCbKey]) {\n        el[leaveCbKey](\n          true\n          /* cancelled */\n        );\n      }\n      const leavingVNode = leavingVNodesCache[key];\n      if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) {\n        leavingVNode.el[leaveCbKey]();\n      }\n      callHook(hook, [el]);\n    },\n    enter(el) {\n      let hook = onEnter;\n      let afterHook = onAfterEnter;\n      let cancelHook = onEnterCancelled;\n      if (!state.isMounted) {\n        if (appear) {\n          hook = onAppear || onEnter;\n          afterHook = onAfterAppear || onAfterEnter;\n          cancelHook = onAppearCancelled || onEnterCancelled;\n        } else {\n          return;\n        }\n      }\n      let called = false;\n      const done = el[enterCbKey] = (cancelled) => {\n        if (called) return;\n        called = true;\n        if (cancelled) {\n          callHook(cancelHook, [el]);\n        } else {\n          callHook(afterHook, [el]);\n        }\n        if (hooks.delayedLeave) {\n          hooks.delayedLeave();\n        }\n        el[enterCbKey] = void 0;\n      };\n      if (hook) {\n        callAsyncHook(hook, [el, done]);\n      } else {\n        done();\n      }\n    },\n    leave(el, remove) {\n      const key2 = String(vnode.key);\n      if (el[enterCbKey]) {\n        el[enterCbKey](\n          true\n          /* cancelled */\n        );\n      }\n      if (state.isUnmounting) {\n        return remove();\n      }\n      callHook(onBeforeLeave, [el]);\n      let called = false;\n      const done = el[leaveCbKey] = (cancelled) => {\n        if (called) return;\n        called = true;\n        remove();\n        if (cancelled) {\n          callHook(onLeaveCancelled, [el]);\n        } else {\n          callHook(onAfterLeave, [el]);\n        }\n        el[leaveCbKey] = void 0;\n        if (leavingVNodesCache[key2] === vnode) {\n          delete leavingVNodesCache[key2];\n        }\n      };\n      leavingVNodesCache[key2] = vnode;\n      if (onLeave) {\n        callAsyncHook(onLeave, [el, done]);\n      } else {\n        done();\n      }\n    },\n    clone(vnode2) {\n      const hooks2 = resolveTransitionHooks(\n        vnode2,\n        props,\n        state,\n        instance,\n        postClone\n      );\n      if (postClone) postClone(hooks2);\n      return hooks2;\n    }\n  };\n  return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n  if (isKeepAlive(vnode)) {\n    vnode = cloneVNode(vnode);\n    vnode.children = null;\n    return vnode;\n  }\n}\nfunction getInnerChild$1(vnode) {\n  if (!isKeepAlive(vnode)) {\n    if (isTeleport(vnode.type) && vnode.children) {\n      return findNonCommentChild(vnode.children);\n    }\n    return vnode;\n  }\n  if (vnode.component) {\n    return vnode.component.subTree;\n  }\n  const { shapeFlag, children } = vnode;\n  if (children) {\n    if (shapeFlag & 16) {\n      return children[0];\n    }\n    if (shapeFlag & 32 && shared.isFunction(children.default)) {\n      return children.default();\n    }\n  }\n}\nfunction setTransitionHooks(vnode, hooks) {\n  if (vnode.shapeFlag & 6 && vnode.component) {\n    vnode.transition = hooks;\n    setTransitionHooks(vnode.component.subTree, hooks);\n  } else if (vnode.shapeFlag & 128) {\n    vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n    vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n  } else {\n    vnode.transition = hooks;\n  }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n  let ret = [];\n  let keyedFragmentCount = 0;\n  for (let i = 0; i < children.length; i++) {\n    let child = children[i];\n    const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n    if (child.type === Fragment) {\n      if (child.patchFlag & 128) keyedFragmentCount++;\n      ret = ret.concat(\n        getTransitionRawChildren(child.children, keepComment, key)\n      );\n    } else if (keepComment || child.type !== Comment) {\n      ret.push(key != null ? cloneVNode(child, { key }) : child);\n    }\n  }\n  if (keyedFragmentCount > 1) {\n    for (let i = 0; i < ret.length; i++) {\n      ret[i].patchFlag = -2;\n    }\n  }\n  return ret;\n}\n\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineComponent(options, extraOptions) {\n  return shared.isFunction(options) ? (\n    // #8236: extend call and options.name access are considered side-effects\n    // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n    /* @__PURE__ */ (() => shared.extend({ name: options.name }, extraOptions, { setup: options }))()\n  ) : options;\n}\n\nfunction useId() {\n  const i = getCurrentInstance();\n  if (i) {\n    return (i.appContext.config.idPrefix || \"v\") + \"-\" + i.ids[0] + i.ids[1]++;\n  }\n  return \"\";\n}\nfunction markAsyncBoundary(instance) {\n  instance.ids = [instance.ids[0] + instance.ids[2]++ + \"-\", 0, 0];\n}\n\nfunction useTemplateRef(key) {\n  const i = getCurrentInstance();\n  const r = reactivity.shallowRef(null);\n  if (i) {\n    const refs = i.refs === shared.EMPTY_OBJ ? i.refs = {} : i.refs;\n    {\n      Object.defineProperty(refs, key, {\n        enumerable: true,\n        get: () => r.value,\n        set: (val) => r.value = val\n      });\n    }\n  }\n  const ret = r;\n  return ret;\n}\n\nfunction setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {\n  if (shared.isArray(rawRef)) {\n    rawRef.forEach(\n      (r, i) => setRef(\n        r,\n        oldRawRef && (shared.isArray(oldRawRef) ? oldRawRef[i] : oldRawRef),\n        parentSuspense,\n        vnode,\n        isUnmount\n      )\n    );\n    return;\n  }\n  if (isAsyncWrapper(vnode) && !isUnmount) {\n    if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) {\n      setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree);\n    }\n    return;\n  }\n  const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el;\n  const value = isUnmount ? null : refValue;\n  const { i: owner, r: ref } = rawRef;\n  const oldRef = oldRawRef && oldRawRef.r;\n  const refs = owner.refs === shared.EMPTY_OBJ ? owner.refs = {} : owner.refs;\n  const setupState = owner.setupState;\n  const rawSetupState = reactivity.toRaw(setupState);\n  const canSetSetupRef = setupState === shared.EMPTY_OBJ ? () => false : (key) => {\n    return shared.hasOwn(rawSetupState, key);\n  };\n  if (oldRef != null && oldRef !== ref) {\n    if (shared.isString(oldRef)) {\n      refs[oldRef] = null;\n      if (canSetSetupRef(oldRef)) {\n        setupState[oldRef] = null;\n      }\n    } else if (reactivity.isRef(oldRef)) {\n      oldRef.value = null;\n    }\n  }\n  if (shared.isFunction(ref)) {\n    callWithErrorHandling(ref, owner, 12, [value, refs]);\n  } else {\n    const _isString = shared.isString(ref);\n    const _isRef = reactivity.isRef(ref);\n    if (_isString || _isRef) {\n      const doSet = () => {\n        if (rawRef.f) {\n          const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value;\n          if (isUnmount) {\n            shared.isArray(existing) && shared.remove(existing, refValue);\n          } else {\n            if (!shared.isArray(existing)) {\n              if (_isString) {\n                refs[ref] = [refValue];\n                if (canSetSetupRef(ref)) {\n                  setupState[ref] = refs[ref];\n                }\n              } else {\n                ref.value = [refValue];\n                if (rawRef.k) refs[rawRef.k] = ref.value;\n              }\n            } else if (!existing.includes(refValue)) {\n              existing.push(refValue);\n            }\n          }\n        } else if (_isString) {\n          refs[ref] = value;\n          if (canSetSetupRef(ref)) {\n            setupState[ref] = value;\n          }\n        } else if (_isRef) {\n          ref.value = value;\n          if (rawRef.k) refs[rawRef.k] = value;\n        } else ;\n      };\n      if (value) {\n        doSet.id = -1;\n        queuePostRenderEffect(doSet, parentSuspense);\n      } else {\n        doSet();\n      }\n    }\n  }\n}\n\nlet hasLoggedMismatchError = false;\nconst logMismatchError = () => {\n  if (hasLoggedMismatchError) {\n    return;\n  }\n  console.error(\"Hydration completed but contains mismatches.\");\n  hasLoggedMismatchError = true;\n};\nconst isSVGContainer = (container) => container.namespaceURI.includes(\"svg\") && container.tagName !== \"foreignObject\";\nconst isMathMLContainer = (container) => container.namespaceURI.includes(\"MathML\");\nconst getContainerType = (container) => {\n  if (container.nodeType !== 1) return void 0;\n  if (isSVGContainer(container)) return \"svg\";\n  if (isMathMLContainer(container)) return \"mathml\";\n  return void 0;\n};\nconst isComment = (node) => node.nodeType === 8;\nfunction createHydrationFunctions(rendererInternals) {\n  const {\n    mt: mountComponent,\n    p: patch,\n    o: {\n      patchProp,\n      createText,\n      nextSibling,\n      parentNode,\n      remove,\n      insert,\n      createComment\n    }\n  } = rendererInternals;\n  const hydrate = (vnode, container) => {\n    if (!container.hasChildNodes()) {\n      patch(null, vnode, container);\n      flushPostFlushCbs();\n      container._vnode = vnode;\n      return;\n    }\n    hydrateNode(container.firstChild, vnode, null, null, null);\n    flushPostFlushCbs();\n    container._vnode = vnode;\n  };\n  const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => {\n    optimized = optimized || !!vnode.dynamicChildren;\n    const isFragmentStart = isComment(node) && node.data === \"[\";\n    const onMismatch = () => handleMismatch(\n      node,\n      vnode,\n      parentComponent,\n      parentSuspense,\n      slotScopeIds,\n      isFragmentStart\n    );\n    const { type, ref, shapeFlag, patchFlag } = vnode;\n    let domType = node.nodeType;\n    vnode.el = node;\n    if (patchFlag === -2) {\n      optimized = false;\n      vnode.dynamicChildren = null;\n    }\n    let nextNode = null;\n    switch (type) {\n      case Text:\n        if (domType !== 3) {\n          if (vnode.children === \"\") {\n            insert(vnode.el = createText(\"\"), parentNode(node), node);\n            nextNode = node;\n          } else {\n            nextNode = onMismatch();\n          }\n        } else {\n          if (node.data !== vnode.children) {\n            logMismatchError();\n            node.data = vnode.children;\n          }\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Comment:\n        if (isTemplateNode(node)) {\n          nextNode = nextSibling(node);\n          replaceNode(\n            vnode.el = node.content.firstChild,\n            node,\n            parentComponent\n          );\n        } else if (domType !== 8 || isFragmentStart) {\n          nextNode = onMismatch();\n        } else {\n          nextNode = nextSibling(node);\n        }\n        break;\n      case Static:\n        if (isFragmentStart) {\n          node = nextSibling(node);\n          domType = node.nodeType;\n        }\n        if (domType === 1 || domType === 3) {\n          nextNode = node;\n          const needToAdoptContent = !vnode.children.length;\n          for (let i = 0; i < vnode.staticCount; i++) {\n            if (needToAdoptContent)\n              vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data;\n            if (i === vnode.staticCount - 1) {\n              vnode.anchor = nextNode;\n            }\n            nextNode = nextSibling(nextNode);\n          }\n          return isFragmentStart ? nextSibling(nextNode) : nextNode;\n        } else {\n          onMismatch();\n        }\n        break;\n      case Fragment:\n        if (!isFragmentStart) {\n          nextNode = onMismatch();\n        } else {\n          nextNode = hydrateFragment(\n            node,\n            vnode,\n            parentComponent,\n            parentSuspense,\n            slotScopeIds,\n            optimized\n          );\n        }\n        break;\n      default:\n        if (shapeFlag & 1) {\n          if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) {\n            nextNode = onMismatch();\n          } else {\n            nextNode = hydrateElement(\n              node,\n              vnode,\n              parentComponent,\n              parentSuspense,\n              slotScopeIds,\n              optimized\n            );\n          }\n        } else if (shapeFlag & 6) {\n          vnode.slotScopeIds = slotScopeIds;\n          const container = parentNode(node);\n          if (isFragmentStart) {\n            nextNode = locateClosingAnchor(node);\n          } else if (isComment(node) && node.data === \"teleport start\") {\n            nextNode = locateClosingAnchor(node, node.data, \"teleport end\");\n          } else {\n            nextNode = nextSibling(node);\n          }\n          mountComponent(\n            vnode,\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            getContainerType(container),\n            optimized\n          );\n          if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) {\n            let subTree;\n            if (isFragmentStart) {\n              subTree = createVNode(Fragment);\n              subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild;\n            } else {\n              subTree = node.nodeType === 3 ? createTextVNode(\"\") : createVNode(\"div\");\n            }\n            subTree.el = node;\n            vnode.component.subTree = subTree;\n          }\n        } else if (shapeFlag & 64) {\n          if (domType !== 8) {\n            nextNode = onMismatch();\n          } else {\n            nextNode = vnode.type.hydrate(\n              node,\n              vnode,\n              parentComponent,\n              parentSuspense,\n              slotScopeIds,\n              optimized,\n              rendererInternals,\n              hydrateChildren\n            );\n          }\n        } else if (shapeFlag & 128) {\n          nextNode = vnode.type.hydrate(\n            node,\n            vnode,\n            parentComponent,\n            parentSuspense,\n            getContainerType(parentNode(node)),\n            slotScopeIds,\n            optimized,\n            rendererInternals,\n            hydrateNode\n          );\n        } else ;\n    }\n    if (ref != null) {\n      setRef(ref, null, parentSuspense, vnode);\n    }\n    return nextNode;\n  };\n  const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    optimized = optimized || !!vnode.dynamicChildren;\n    const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode;\n    const forcePatch = type === \"input\" || type === \"option\";\n    if (forcePatch || patchFlag !== -1) {\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n      }\n      let needCallTransitionHooks = false;\n      if (isTemplateNode(el)) {\n        needCallTransitionHooks = needTransition(\n          null,\n          // no need check parentSuspense in hydration\n          transition\n        ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear;\n        const content = el.content.firstChild;\n        if (needCallTransitionHooks) {\n          const cls = content.getAttribute(\"class\");\n          if (cls) content.$cls = cls;\n          transition.beforeEnter(content);\n        }\n        replaceNode(content, el, parentComponent);\n        vnode.el = el = content;\n      }\n      if (shapeFlag & 16 && // skip if element has innerHTML / textContent\n      !(props && (props.innerHTML || props.textContent))) {\n        let next = hydrateChildren(\n          el.firstChild,\n          vnode,\n          el,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n        while (next) {\n          if (!isMismatchAllowed(el, 1 /* CHILDREN */)) {\n            logMismatchError();\n          }\n          const cur = next;\n          next = next.nextSibling;\n          remove(cur);\n        }\n      } else if (shapeFlag & 8) {\n        let clientText = vnode.children;\n        if (clientText[0] === \"\\n\" && (el.tagName === \"PRE\" || el.tagName === \"TEXTAREA\")) {\n          clientText = clientText.slice(1);\n        }\n        if (el.textContent !== clientText) {\n          if (!isMismatchAllowed(el, 0 /* TEXT */)) {\n            logMismatchError();\n          }\n          el.textContent = vnode.children;\n        }\n      }\n      if (props) {\n        if (forcePatch || !optimized || patchFlag & (16 | 32)) {\n          const isCustomElement = el.tagName.includes(\"-\");\n          for (const key in props) {\n            if (forcePatch && (key.endsWith(\"value\") || key === \"indeterminate\") || shared.isOn(key) && !shared.isReservedProp(key) || // force hydrate v-bind with .prop modifiers\n            key[0] === \".\" || isCustomElement) {\n              patchProp(el, key, null, props[key], void 0, parentComponent);\n            }\n          }\n        } else if (props.onClick) {\n          patchProp(\n            el,\n            \"onClick\",\n            null,\n            props.onClick,\n            void 0,\n            parentComponent\n          );\n        } else if (patchFlag & 4 && reactivity.isReactive(props.style)) {\n          for (const key in props.style) props.style[key];\n        }\n      }\n      let vnodeHooks;\n      if (vnodeHooks = props && props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n      }\n      if (dirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n      }\n      if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) {\n        queueEffectWithSuspense(() => {\n          vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode);\n          needCallTransitionHooks && transition.enter(el);\n          dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n        }, parentSuspense);\n      }\n    }\n    return el.nextSibling;\n  };\n  const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    optimized = optimized || !!parentVNode.dynamicChildren;\n    const children = parentVNode.children;\n    const l = children.length;\n    for (let i = 0; i < l; i++) {\n      const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]);\n      const isText = vnode.type === Text;\n      if (node) {\n        if (isText && !optimized) {\n          if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) {\n            insert(\n              createText(\n                node.data.slice(vnode.children.length)\n              ),\n              container,\n              nextSibling(node)\n            );\n            node.data = vnode.children;\n          }\n        }\n        node = hydrateNode(\n          node,\n          vnode,\n          parentComponent,\n          parentSuspense,\n          slotScopeIds,\n          optimized\n        );\n      } else if (isText && !vnode.children) {\n        insert(vnode.el = createText(\"\"), container);\n      } else {\n        if (!isMismatchAllowed(container, 1 /* CHILDREN */)) {\n          logMismatchError();\n        }\n        patch(\n          null,\n          vnode,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          getContainerType(container),\n          slotScopeIds\n        );\n      }\n    }\n    return node;\n  };\n  const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => {\n    const { slotScopeIds: fragmentSlotScopeIds } = vnode;\n    if (fragmentSlotScopeIds) {\n      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n    }\n    const container = parentNode(node);\n    const next = hydrateChildren(\n      nextSibling(node),\n      vnode,\n      container,\n      parentComponent,\n      parentSuspense,\n      slotScopeIds,\n      optimized\n    );\n    if (next && isComment(next) && next.data === \"]\") {\n      return nextSibling(vnode.anchor = next);\n    } else {\n      logMismatchError();\n      insert(vnode.anchor = createComment(`]`), container, next);\n      return next;\n    }\n  };\n  const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => {\n    if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) {\n      logMismatchError();\n    }\n    vnode.el = null;\n    if (isFragment) {\n      const end = locateClosingAnchor(node);\n      while (true) {\n        const next2 = nextSibling(node);\n        if (next2 && next2 !== end) {\n          remove(next2);\n        } else {\n          break;\n        }\n      }\n    }\n    const next = nextSibling(node);\n    const container = parentNode(node);\n    remove(node);\n    patch(\n      null,\n      vnode,\n      container,\n      next,\n      parentComponent,\n      parentSuspense,\n      getContainerType(container),\n      slotScopeIds\n    );\n    if (parentComponent) {\n      parentComponent.vnode.el = vnode.el;\n      updateHOCHostEl(parentComponent, vnode.el);\n    }\n    return next;\n  };\n  const locateClosingAnchor = (node, open = \"[\", close = \"]\") => {\n    let match = 0;\n    while (node) {\n      node = nextSibling(node);\n      if (node && isComment(node)) {\n        if (node.data === open) match++;\n        if (node.data === close) {\n          if (match === 0) {\n            return nextSibling(node);\n          } else {\n            match--;\n          }\n        }\n      }\n    }\n    return node;\n  };\n  const replaceNode = (newNode, oldNode, parentComponent) => {\n    const parentNode2 = oldNode.parentNode;\n    if (parentNode2) {\n      parentNode2.replaceChild(newNode, oldNode);\n    }\n    let parent = parentComponent;\n    while (parent) {\n      if (parent.vnode.el === oldNode) {\n        parent.vnode.el = parent.subTree.el = newNode;\n      }\n      parent = parent.parent;\n    }\n  };\n  const isTemplateNode = (node) => {\n    return node.nodeType === 1 && node.tagName === \"TEMPLATE\";\n  };\n  return [hydrate, hydrateNode];\n}\nconst allowMismatchAttr = \"data-allow-mismatch\";\nconst MismatchTypeString = {\n  [0 /* TEXT */]: \"text\",\n  [1 /* CHILDREN */]: \"children\",\n  [2 /* CLASS */]: \"class\",\n  [3 /* STYLE */]: \"style\",\n  [4 /* ATTRIBUTE */]: \"attribute\"\n};\nfunction isMismatchAllowed(el, allowedType) {\n  if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) {\n    while (el && !el.hasAttribute(allowMismatchAttr)) {\n      el = el.parentElement;\n    }\n  }\n  const allowedAttr = el && el.getAttribute(allowMismatchAttr);\n  if (allowedAttr == null) {\n    return false;\n  } else if (allowedAttr === \"\") {\n    return true;\n  } else {\n    const list = allowedAttr.split(\",\");\n    if (allowedType === 0 /* TEXT */ && list.includes(\"children\")) {\n      return true;\n    }\n    return list.includes(MismatchTypeString[allowedType]);\n  }\n}\n\nconst requestIdleCallback = shared.getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1));\nconst cancelIdleCallback = shared.getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id));\nconst hydrateOnIdle = (timeout = 1e4) => (hydrate) => {\n  const id = requestIdleCallback(hydrate, { timeout });\n  return () => cancelIdleCallback(id);\n};\nfunction elementIsVisibleInViewport(el) {\n  const { top, left, bottom, right } = el.getBoundingClientRect();\n  const { innerHeight, innerWidth } = window;\n  return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);\n}\nconst hydrateOnVisible = (opts) => (hydrate, forEach) => {\n  const ob = new IntersectionObserver((entries) => {\n    for (const e of entries) {\n      if (!e.isIntersecting) continue;\n      ob.disconnect();\n      hydrate();\n      break;\n    }\n  }, opts);\n  forEach((el) => {\n    if (!(el instanceof Element)) return;\n    if (elementIsVisibleInViewport(el)) {\n      hydrate();\n      ob.disconnect();\n      return false;\n    }\n    ob.observe(el);\n  });\n  return () => ob.disconnect();\n};\nconst hydrateOnMediaQuery = (query) => (hydrate) => {\n  if (query) {\n    const mql = matchMedia(query);\n    if (mql.matches) {\n      hydrate();\n    } else {\n      mql.addEventListener(\"change\", hydrate, { once: true });\n      return () => mql.removeEventListener(\"change\", hydrate);\n    }\n  }\n};\nconst hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => {\n  if (shared.isString(interactions)) interactions = [interactions];\n  let hasHydrated = false;\n  const doHydrate = (e) => {\n    if (!hasHydrated) {\n      hasHydrated = true;\n      teardown();\n      hydrate();\n      e.target.dispatchEvent(new e.constructor(e.type, e));\n    }\n  };\n  const teardown = () => {\n    forEach((el) => {\n      for (const i of interactions) {\n        el.removeEventListener(i, doHydrate);\n      }\n    });\n  };\n  forEach((el) => {\n    for (const i of interactions) {\n      el.addEventListener(i, doHydrate, { once: true });\n    }\n  });\n  return teardown;\n};\nfunction forEachElement(node, cb) {\n  if (isComment(node) && node.data === \"[\") {\n    let depth = 1;\n    let next = node.nextSibling;\n    while (next) {\n      if (next.nodeType === 1) {\n        const result = cb(next);\n        if (result === false) {\n          break;\n        }\n      } else if (isComment(next)) {\n        if (next.data === \"]\") {\n          if (--depth === 0) break;\n        } else if (next.data === \"[\") {\n          depth++;\n        }\n      }\n      next = next.nextSibling;\n    }\n  } else {\n    cb(node);\n  }\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineAsyncComponent(source) {\n  if (shared.isFunction(source)) {\n    source = { loader: source };\n  }\n  const {\n    loader,\n    loadingComponent,\n    errorComponent,\n    delay = 200,\n    hydrate: hydrateStrategy,\n    timeout,\n    // undefined = never times out\n    suspensible = true,\n    onError: userOnError\n  } = source;\n  let pendingRequest = null;\n  let resolvedComp;\n  let retries = 0;\n  const retry = () => {\n    retries++;\n    pendingRequest = null;\n    return load();\n  };\n  const load = () => {\n    let thisRequest;\n    return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n      err = err instanceof Error ? err : new Error(String(err));\n      if (userOnError) {\n        return new Promise((resolve, reject) => {\n          const userRetry = () => resolve(retry());\n          const userFail = () => reject(err);\n          userOnError(err, userRetry, userFail, retries + 1);\n        });\n      } else {\n        throw err;\n      }\n    }).then((comp) => {\n      if (thisRequest !== pendingRequest && pendingRequest) {\n        return pendingRequest;\n      }\n      if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n        comp = comp.default;\n      }\n      resolvedComp = comp;\n      return comp;\n    }));\n  };\n  return defineComponent({\n    name: \"AsyncComponentWrapper\",\n    __asyncLoader: load,\n    __asyncHydrate(el, instance, hydrate) {\n      let patched = false;\n      (instance.bu || (instance.bu = [])).push(() => patched = true);\n      const performHydrate = () => {\n        if (patched) {\n          return;\n        }\n        hydrate();\n      };\n      const doHydrate = hydrateStrategy ? () => {\n        const teardown = hydrateStrategy(\n          performHydrate,\n          (cb) => forEachElement(el, cb)\n        );\n        if (teardown) {\n          (instance.bum || (instance.bum = [])).push(teardown);\n        }\n      } : performHydrate;\n      if (resolvedComp) {\n        doHydrate();\n      } else {\n        load().then(() => !instance.isUnmounted && doHydrate());\n      }\n    },\n    get __asyncResolved() {\n      return resolvedComp;\n    },\n    setup() {\n      const instance = currentInstance;\n      markAsyncBoundary(instance);\n      if (resolvedComp) {\n        return () => createInnerComp(resolvedComp, instance);\n      }\n      const onError = (err) => {\n        pendingRequest = null;\n        handleError(\n          err,\n          instance,\n          13,\n          !errorComponent\n        );\n      };\n      if (suspensible && instance.suspense || isInSSRComponentSetup) {\n        return load().then((comp) => {\n          return () => createInnerComp(comp, instance);\n        }).catch((err) => {\n          onError(err);\n          return () => errorComponent ? createVNode(errorComponent, {\n            error: err\n          }) : null;\n        });\n      }\n      const loaded = reactivity.ref(false);\n      const error = reactivity.ref();\n      const delayed = reactivity.ref(!!delay);\n      if (delay) {\n        setTimeout(() => {\n          delayed.value = false;\n        }, delay);\n      }\n      if (timeout != null) {\n        setTimeout(() => {\n          if (!loaded.value && !error.value) {\n            const err = new Error(\n              `Async component timed out after ${timeout}ms.`\n            );\n            onError(err);\n            error.value = err;\n          }\n        }, timeout);\n      }\n      load().then(() => {\n        loaded.value = true;\n        if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n          instance.parent.update();\n        }\n      }).catch((err) => {\n        onError(err);\n        error.value = err;\n      });\n      return () => {\n        if (loaded.value && resolvedComp) {\n          return createInnerComp(resolvedComp, instance);\n        } else if (error.value && errorComponent) {\n          return createVNode(errorComponent, {\n            error: error.value\n          });\n        } else if (loadingComponent && !delayed.value) {\n          return createVNode(loadingComponent);\n        }\n      };\n    }\n  });\n}\nfunction createInnerComp(comp, parent) {\n  const { ref: ref2, props, children, ce } = parent.vnode;\n  const vnode = createVNode(comp, props, children);\n  vnode.ref = ref2;\n  vnode.ce = ce;\n  delete parent.vnode.ce;\n  return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n  name: `KeepAlive`,\n  // Marker for special handling inside the renderer. We are not using a ===\n  // check directly on KeepAlive in the renderer, because importing it directly\n  // would prevent it from being tree-shaken.\n  __isKeepAlive: true,\n  props: {\n    include: [String, RegExp, Array],\n    exclude: [String, RegExp, Array],\n    max: [String, Number]\n  },\n  setup(props, { slots }) {\n    const instance = getCurrentInstance();\n    const sharedContext = instance.ctx;\n    if (!sharedContext.renderer) {\n      return () => {\n        const children = slots.default && slots.default();\n        return children && children.length === 1 ? children[0] : children;\n      };\n    }\n    const cache = /* @__PURE__ */ new Map();\n    const keys = /* @__PURE__ */ new Set();\n    let current = null;\n    const parentSuspense = instance.suspense;\n    const {\n      renderer: {\n        p: patch,\n        m: move,\n        um: _unmount,\n        o: { createElement }\n      }\n    } = sharedContext;\n    const storageContainer = createElement(\"div\");\n    sharedContext.activate = (vnode, container, anchor, namespace, optimized) => {\n      const instance2 = vnode.component;\n      move(vnode, container, anchor, 0, parentSuspense);\n      patch(\n        instance2.vnode,\n        vnode,\n        container,\n        anchor,\n        instance2,\n        parentSuspense,\n        namespace,\n        vnode.slotScopeIds,\n        optimized\n      );\n      queuePostRenderEffect(() => {\n        instance2.isDeactivated = false;\n        if (instance2.a) {\n          shared.invokeArrayFns(instance2.a);\n        }\n        const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n        if (vnodeHook) {\n          invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n        }\n      }, parentSuspense);\n    };\n    sharedContext.deactivate = (vnode) => {\n      const instance2 = vnode.component;\n      invalidateMount(instance2.m);\n      invalidateMount(instance2.a);\n      move(vnode, storageContainer, null, 1, parentSuspense);\n      queuePostRenderEffect(() => {\n        if (instance2.da) {\n          shared.invokeArrayFns(instance2.da);\n        }\n        const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n        if (vnodeHook) {\n          invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n        }\n        instance2.isDeactivated = true;\n      }, parentSuspense);\n    };\n    function unmount(vnode) {\n      resetShapeFlag(vnode);\n      _unmount(vnode, instance, parentSuspense, true);\n    }\n    function pruneCache(filter) {\n      cache.forEach((vnode, key) => {\n        const name = getComponentName(vnode.type);\n        if (name && !filter(name)) {\n          pruneCacheEntry(key);\n        }\n      });\n    }\n    function pruneCacheEntry(key) {\n      const cached = cache.get(key);\n      if (cached && (!current || !isSameVNodeType(cached, current))) {\n        unmount(cached);\n      } else if (current) {\n        resetShapeFlag(current);\n      }\n      cache.delete(key);\n      keys.delete(key);\n    }\n    watch(\n      () => [props.include, props.exclude],\n      ([include, exclude]) => {\n        include && pruneCache((name) => matches(include, name));\n        exclude && pruneCache((name) => !matches(exclude, name));\n      },\n      // prune post-render after `current` has been updated\n      { flush: \"post\", deep: true }\n    );\n    let pendingCacheKey = null;\n    const cacheSubtree = () => {\n      if (pendingCacheKey != null) {\n        if (isSuspense(instance.subTree.type)) {\n          queuePostRenderEffect(() => {\n            cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n          }, instance.subTree.suspense);\n        } else {\n          cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n        }\n      }\n    };\n    onMounted(cacheSubtree);\n    onUpdated(cacheSubtree);\n    onBeforeUnmount(() => {\n      cache.forEach((cached) => {\n        const { subTree, suspense } = instance;\n        const vnode = getInnerChild(subTree);\n        if (cached.type === vnode.type && cached.key === vnode.key) {\n          resetShapeFlag(vnode);\n          const da = vnode.component.da;\n          da && queuePostRenderEffect(da, suspense);\n          return;\n        }\n        unmount(cached);\n      });\n    });\n    return () => {\n      pendingCacheKey = null;\n      if (!slots.default) {\n        return current = null;\n      }\n      const children = slots.default();\n      const rawVNode = children[0];\n      if (children.length > 1) {\n        current = null;\n        return children;\n      } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n        current = null;\n        return rawVNode;\n      }\n      let vnode = getInnerChild(rawVNode);\n      if (vnode.type === Comment) {\n        current = null;\n        return vnode;\n      }\n      const comp = vnode.type;\n      const name = getComponentName(\n        isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n      );\n      const { include, exclude, max } = props;\n      if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n        vnode.shapeFlag &= -257;\n        current = vnode;\n        return rawVNode;\n      }\n      const key = vnode.key == null ? comp : vnode.key;\n      const cachedVNode = cache.get(key);\n      if (vnode.el) {\n        vnode = cloneVNode(vnode);\n        if (rawVNode.shapeFlag & 128) {\n          rawVNode.ssContent = vnode;\n        }\n      }\n      pendingCacheKey = key;\n      if (cachedVNode) {\n        vnode.el = cachedVNode.el;\n        vnode.component = cachedVNode.component;\n        if (vnode.transition) {\n          setTransitionHooks(vnode, vnode.transition);\n        }\n        vnode.shapeFlag |= 512;\n        keys.delete(key);\n        keys.add(key);\n      } else {\n        keys.add(key);\n        if (max && keys.size > parseInt(max, 10)) {\n          pruneCacheEntry(keys.values().next().value);\n        }\n      }\n      vnode.shapeFlag |= 256;\n      current = vnode;\n      return isSuspense(rawVNode.type) ? rawVNode : vnode;\n    };\n  }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n  if (shared.isArray(pattern)) {\n    return pattern.some((p) => matches(p, name));\n  } else if (shared.isString(pattern)) {\n    return pattern.split(\",\").includes(name);\n  } else if (shared.isRegExp(pattern)) {\n    pattern.lastIndex = 0;\n    return pattern.test(name);\n  }\n  return false;\n}\nfunction onActivated(hook, target) {\n  registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n  registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n  const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n    let current = target;\n    while (current) {\n      if (current.isDeactivated) {\n        return;\n      }\n      current = current.parent;\n    }\n    return hook();\n  });\n  injectHook(type, wrappedHook, target);\n  if (target) {\n    let current = target.parent;\n    while (current && current.parent) {\n      if (isKeepAlive(current.parent.vnode)) {\n        injectToKeepAliveRoot(wrappedHook, type, target, current);\n      }\n      current = current.parent;\n    }\n  }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n  const injected = injectHook(\n    type,\n    hook,\n    keepAliveRoot,\n    true\n    /* prepend */\n  );\n  onUnmounted(() => {\n    shared.remove(keepAliveRoot[type], injected);\n  }, target);\n}\nfunction resetShapeFlag(vnode) {\n  vnode.shapeFlag &= -257;\n  vnode.shapeFlag &= -513;\n}\nfunction getInnerChild(vnode) {\n  return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n  if (target) {\n    const hooks = target[type] || (target[type] = []);\n    const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n      reactivity.pauseTracking();\n      const reset = setCurrentInstance(target);\n      const res = callWithAsyncErrorHandling(hook, target, type, args);\n      reset();\n      reactivity.resetTracking();\n      return res;\n    });\n    if (prepend) {\n      hooks.unshift(wrappedHook);\n    } else {\n      hooks.push(wrappedHook);\n    }\n    return wrappedHook;\n  }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => {\n  if (!isInSSRComponentSetup || lifecycle === \"sp\") {\n    injectHook(lifecycle, (...args) => hook(...args), target);\n  }\n};\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\n  \"bu\"\n);\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\n  \"bum\"\n);\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\n  \"sp\"\n);\nconst onRenderTriggered = createHook(\"rtg\");\nconst onRenderTracked = createHook(\"rtc\");\nfunction onErrorCaptured(hook, target = currentInstance) {\n  injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n  return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n  if (shared.isString(component)) {\n    return resolveAsset(COMPONENTS, component, false) || component;\n  } else {\n    return component || NULL_DYNAMIC_COMPONENT;\n  }\n}\nfunction resolveDirective(name) {\n  return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n  const instance = currentRenderingInstance || currentInstance;\n  if (instance) {\n    const Component = instance.type;\n    if (type === COMPONENTS) {\n      const selfName = getComponentName(\n        Component,\n        false\n      );\n      if (selfName && (selfName === name || selfName === shared.camelize(name) || selfName === shared.capitalize(shared.camelize(name)))) {\n        return Component;\n      }\n    }\n    const res = (\n      // local registration\n      // check instance[type] first which is resolved for options API\n      resolve(instance[type] || Component[type], name) || // global registration\n      resolve(instance.appContext[type], name)\n    );\n    if (!res && maybeSelfReference) {\n      return Component;\n    }\n    return res;\n  }\n}\nfunction resolve(registry, name) {\n  return registry && (registry[name] || registry[shared.camelize(name)] || registry[shared.capitalize(shared.camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n  let ret;\n  const cached = cache && cache[index];\n  const sourceIsArray = shared.isArray(source);\n  if (sourceIsArray || shared.isString(source)) {\n    const sourceIsReactiveArray = sourceIsArray && reactivity.isReactive(source);\n    let needsWrap = false;\n    let isReadonlySource = false;\n    if (sourceIsReactiveArray) {\n      needsWrap = !reactivity.isShallow(source);\n      isReadonlySource = reactivity.isReadonly(source);\n      source = reactivity.shallowReadArray(source);\n    }\n    ret = new Array(source.length);\n    for (let i = 0, l = source.length; i < l; i++) {\n      ret[i] = renderItem(\n        needsWrap ? isReadonlySource ? reactivity.toReadonly(reactivity.toReactive(source[i])) : reactivity.toReactive(source[i]) : source[i],\n        i,\n        void 0,\n        cached && cached[i]\n      );\n    }\n  } else if (typeof source === \"number\") {\n    ret = new Array(source);\n    for (let i = 0; i < source; i++) {\n      ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n    }\n  } else if (shared.isObject(source)) {\n    if (source[Symbol.iterator]) {\n      ret = Array.from(\n        source,\n        (item, i) => renderItem(item, i, void 0, cached && cached[i])\n      );\n    } else {\n      const keys = Object.keys(source);\n      ret = new Array(keys.length);\n      for (let i = 0, l = keys.length; i < l; i++) {\n        const key = keys[i];\n        ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n      }\n    }\n  } else {\n    ret = [];\n  }\n  if (cache) {\n    cache[index] = ret;\n  }\n  return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n  for (let i = 0; i < dynamicSlots.length; i++) {\n    const slot = dynamicSlots[i];\n    if (shared.isArray(slot)) {\n      for (let j = 0; j < slot.length; j++) {\n        slots[slot[j].name] = slot[j].fn;\n      }\n    } else if (slot) {\n      slots[slot.name] = slot.key ? (...args) => {\n        const res = slot.fn(...args);\n        if (res) res.key = slot.key;\n        return res;\n      } : slot.fn;\n    }\n  }\n  return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n  if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {\n    if (name !== \"default\") props.name = name;\n    return openBlock(), createBlock(\n      Fragment,\n      null,\n      [createVNode(\"slot\", props, fallback && fallback())],\n      64\n    );\n  }\n  let slot = slots[name];\n  if (slot && slot._c) {\n    slot._d = false;\n  }\n  openBlock();\n  const validSlotContent = slot && ensureValidVNode(slot(props));\n  const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch\n  // key attached in the `createSlots` helper, respect that\n  validSlotContent && validSlotContent.key;\n  const rendered = createBlock(\n    Fragment,\n    {\n      key: (slotKey && !shared.isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content\n      (!validSlotContent && fallback ? \"_fb\" : \"\")\n    },\n    validSlotContent || (fallback ? fallback() : []),\n    validSlotContent && slots._ === 1 ? 64 : -2\n  );\n  if (!noSlotted && rendered.scopeId) {\n    rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n  }\n  if (slot && slot._c) {\n    slot._d = true;\n  }\n  return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n  return vnodes.some((child) => {\n    if (!isVNode(child)) return true;\n    if (child.type === Comment) return false;\n    if (child.type === Fragment && !ensureValidVNode(child.children))\n      return false;\n    return true;\n  }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n  const ret = {};\n  for (const key in obj) {\n    ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : shared.toHandlerKey(key)] = obj[key];\n  }\n  return ret;\n}\n\nconst getPublicInstance = (i) => {\n  if (!i) return null;\n  if (isStatefulComponent(i)) return getComponentPublicInstance(i);\n  return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n  // Move PURE marker to new line to workaround compiler discarding it\n  // due to type annotation\n  /* @__PURE__ */ shared.extend(/* @__PURE__ */ Object.create(null), {\n    $: (i) => i,\n    $el: (i) => i.vnode.el,\n    $data: (i) => i.data,\n    $props: (i) => i.props,\n    $attrs: (i) => i.attrs,\n    $slots: (i) => i.slots,\n    $refs: (i) => i.refs,\n    $parent: (i) => getPublicInstance(i.parent),\n    $root: (i) => getPublicInstance(i.root),\n    $host: (i) => i.ce,\n    $emit: (i) => i.emit,\n    $options: (i) => resolveMergedOptions(i) ,\n    $forceUpdate: (i) => i.f || (i.f = () => {\n      queueJob(i.update);\n    }),\n    $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n    $watch: (i) => instanceWatch.bind(i) \n  })\n);\nconst hasSetupBinding = (state, key) => state !== shared.EMPTY_OBJ && !state.__isScriptSetup && shared.hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n  get({ _: instance }, key) {\n    if (key === \"__v_skip\") {\n      return true;\n    }\n    const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n    let normalizedProps;\n    if (key[0] !== \"$\") {\n      const n = accessCache[key];\n      if (n !== void 0) {\n        switch (n) {\n          case 1 /* SETUP */:\n            return setupState[key];\n          case 2 /* DATA */:\n            return data[key];\n          case 4 /* CONTEXT */:\n            return ctx[key];\n          case 3 /* PROPS */:\n            return props[key];\n        }\n      } else if (hasSetupBinding(setupState, key)) {\n        accessCache[key] = 1 /* SETUP */;\n        return setupState[key];\n      } else if (data !== shared.EMPTY_OBJ && shared.hasOwn(data, key)) {\n        accessCache[key] = 2 /* DATA */;\n        return data[key];\n      } else if (\n        // only cache other properties when instance has declared (thus stable)\n        // props\n        (normalizedProps = instance.propsOptions[0]) && shared.hasOwn(normalizedProps, key)\n      ) {\n        accessCache[key] = 3 /* PROPS */;\n        return props[key];\n      } else if (ctx !== shared.EMPTY_OBJ && shared.hasOwn(ctx, key)) {\n        accessCache[key] = 4 /* CONTEXT */;\n        return ctx[key];\n      } else if (shouldCacheAccess) {\n        accessCache[key] = 0 /* OTHER */;\n      }\n    }\n    const publicGetter = publicPropertiesMap[key];\n    let cssModule, globalProperties;\n    if (publicGetter) {\n      if (key === \"$attrs\") {\n        reactivity.track(instance.attrs, \"get\", \"\");\n      }\n      return publicGetter(instance);\n    } else if (\n      // css module (injected by vue-loader)\n      (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n    ) {\n      return cssModule;\n    } else if (ctx !== shared.EMPTY_OBJ && shared.hasOwn(ctx, key)) {\n      accessCache[key] = 4 /* CONTEXT */;\n      return ctx[key];\n    } else if (\n      // global properties\n      globalProperties = appContext.config.globalProperties, shared.hasOwn(globalProperties, key)\n    ) {\n      {\n        return globalProperties[key];\n      }\n    } else ;\n  },\n  set({ _: instance }, key, value) {\n    const { data, setupState, ctx } = instance;\n    if (hasSetupBinding(setupState, key)) {\n      setupState[key] = value;\n      return true;\n    } else if (data !== shared.EMPTY_OBJ && shared.hasOwn(data, key)) {\n      data[key] = value;\n      return true;\n    } else if (shared.hasOwn(instance.props, key)) {\n      return false;\n    }\n    if (key[0] === \"$\" && key.slice(1) in instance) {\n      return false;\n    } else {\n      {\n        ctx[key] = value;\n      }\n    }\n    return true;\n  },\n  has({\n    _: { data, setupState, accessCache, ctx, appContext, propsOptions }\n  }, key) {\n    let normalizedProps;\n    return !!accessCache[key] || data !== shared.EMPTY_OBJ && shared.hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && shared.hasOwn(normalizedProps, key) || shared.hasOwn(ctx, key) || shared.hasOwn(publicPropertiesMap, key) || shared.hasOwn(appContext.config.globalProperties, key);\n  },\n  defineProperty(target, key, descriptor) {\n    if (descriptor.get != null) {\n      target._.accessCache[key] = 0;\n    } else if (shared.hasOwn(descriptor, \"value\")) {\n      this.set(target, key, descriptor.value, null);\n    }\n    return Reflect.defineProperty(target, key, descriptor);\n  }\n};\nconst RuntimeCompiledPublicInstanceProxyHandlers = /* @__PURE__ */ shared.extend({}, PublicInstanceProxyHandlers, {\n  get(target, key) {\n    if (key === Symbol.unscopables) {\n      return;\n    }\n    return PublicInstanceProxyHandlers.get(target, key, target);\n  },\n  has(_, key) {\n    const has = key[0] !== \"_\" && !shared.isGloballyAllowed(key);\n    return has;\n  }\n});\n\nfunction defineProps() {\n  return null;\n}\nfunction defineEmits() {\n  return null;\n}\nfunction defineExpose(exposed) {\n}\nfunction defineOptions(options) {\n}\nfunction defineSlots() {\n  return null;\n}\nfunction defineModel() {\n}\nfunction withDefaults(props, defaults) {\n  return null;\n}\nfunction useSlots() {\n  return getContext().slots;\n}\nfunction useAttrs() {\n  return getContext().attrs;\n}\nfunction getContext(calledFunctionName) {\n  const i = getCurrentInstance();\n  return i.setupContext || (i.setupContext = createSetupContext(i));\n}\nfunction normalizePropsOrEmits(props) {\n  return shared.isArray(props) ? props.reduce(\n    (normalized, p) => (normalized[p] = null, normalized),\n    {}\n  ) : props;\n}\nfunction mergeDefaults(raw, defaults) {\n  const props = normalizePropsOrEmits(raw);\n  for (const key in defaults) {\n    if (key.startsWith(\"__skip\")) continue;\n    let opt = props[key];\n    if (opt) {\n      if (shared.isArray(opt) || shared.isFunction(opt)) {\n        opt = props[key] = { type: opt, default: defaults[key] };\n      } else {\n        opt.default = defaults[key];\n      }\n    } else if (opt === null) {\n      opt = props[key] = { default: defaults[key] };\n    } else ;\n    if (opt && defaults[`__skip_${key}`]) {\n      opt.skipFactory = true;\n    }\n  }\n  return props;\n}\nfunction mergeModels(a, b) {\n  if (!a || !b) return a || b;\n  if (shared.isArray(a) && shared.isArray(b)) return a.concat(b);\n  return shared.extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));\n}\nfunction createPropsRestProxy(props, excludedKeys) {\n  const ret = {};\n  for (const key in props) {\n    if (!excludedKeys.includes(key)) {\n      Object.defineProperty(ret, key, {\n        enumerable: true,\n        get: () => props[key]\n      });\n    }\n  }\n  return ret;\n}\nfunction withAsyncContext(getAwaitable) {\n  const ctx = getCurrentInstance();\n  let awaitable = getAwaitable();\n  unsetCurrentInstance();\n  if (shared.isPromise(awaitable)) {\n    awaitable = awaitable.catch((e) => {\n      setCurrentInstance(ctx);\n      throw e;\n    });\n  }\n  return [awaitable, () => setCurrentInstance(ctx)];\n}\n\nlet shouldCacheAccess = true;\nfunction applyOptions(instance) {\n  const options = resolveMergedOptions(instance);\n  const publicThis = instance.proxy;\n  const ctx = instance.ctx;\n  shouldCacheAccess = false;\n  if (options.beforeCreate) {\n    callHook(options.beforeCreate, instance, \"bc\");\n  }\n  const {\n    // state\n    data: dataOptions,\n    computed: computedOptions,\n    methods,\n    watch: watchOptions,\n    provide: provideOptions,\n    inject: injectOptions,\n    // lifecycle\n    created,\n    beforeMount,\n    mounted,\n    beforeUpdate,\n    updated,\n    activated,\n    deactivated,\n    beforeDestroy,\n    beforeUnmount,\n    destroyed,\n    unmounted,\n    render,\n    renderTracked,\n    renderTriggered,\n    errorCaptured,\n    serverPrefetch,\n    // public API\n    expose,\n    inheritAttrs,\n    // assets\n    components,\n    directives,\n    filters\n  } = options;\n  const checkDuplicateProperties = null;\n  if (injectOptions) {\n    resolveInjections(injectOptions, ctx, checkDuplicateProperties);\n  }\n  if (methods) {\n    for (const key in methods) {\n      const methodHandler = methods[key];\n      if (shared.isFunction(methodHandler)) {\n        {\n          ctx[key] = methodHandler.bind(publicThis);\n        }\n      }\n    }\n  }\n  if (dataOptions) {\n    const data = dataOptions.call(publicThis, publicThis);\n    if (!shared.isObject(data)) ; else {\n      instance.data = reactivity.reactive(data);\n    }\n  }\n  shouldCacheAccess = true;\n  if (computedOptions) {\n    for (const key in computedOptions) {\n      const opt = computedOptions[key];\n      const get = shared.isFunction(opt) ? opt.bind(publicThis, publicThis) : shared.isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : shared.NOOP;\n      const set = !shared.isFunction(opt) && shared.isFunction(opt.set) ? opt.set.bind(publicThis) : shared.NOOP;\n      const c = computed({\n        get,\n        set\n      });\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => c.value,\n        set: (v) => c.value = v\n      });\n    }\n  }\n  if (watchOptions) {\n    for (const key in watchOptions) {\n      createWatcher(watchOptions[key], ctx, publicThis, key);\n    }\n  }\n  if (provideOptions) {\n    const provides = shared.isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;\n    Reflect.ownKeys(provides).forEach((key) => {\n      provide(key, provides[key]);\n    });\n  }\n  if (created) {\n    callHook(created, instance, \"c\");\n  }\n  function registerLifecycleHook(register, hook) {\n    if (shared.isArray(hook)) {\n      hook.forEach((_hook) => register(_hook.bind(publicThis)));\n    } else if (hook) {\n      register(hook.bind(publicThis));\n    }\n  }\n  registerLifecycleHook(onBeforeMount, beforeMount);\n  registerLifecycleHook(onMounted, mounted);\n  registerLifecycleHook(onBeforeUpdate, beforeUpdate);\n  registerLifecycleHook(onUpdated, updated);\n  registerLifecycleHook(onActivated, activated);\n  registerLifecycleHook(onDeactivated, deactivated);\n  registerLifecycleHook(onErrorCaptured, errorCaptured);\n  registerLifecycleHook(onRenderTracked, renderTracked);\n  registerLifecycleHook(onRenderTriggered, renderTriggered);\n  registerLifecycleHook(onBeforeUnmount, beforeUnmount);\n  registerLifecycleHook(onUnmounted, unmounted);\n  registerLifecycleHook(onServerPrefetch, serverPrefetch);\n  if (shared.isArray(expose)) {\n    if (expose.length) {\n      const exposed = instance.exposed || (instance.exposed = {});\n      expose.forEach((key) => {\n        Object.defineProperty(exposed, key, {\n          get: () => publicThis[key],\n          set: (val) => publicThis[key] = val,\n          enumerable: true\n        });\n      });\n    } else if (!instance.exposed) {\n      instance.exposed = {};\n    }\n  }\n  if (render && instance.render === shared.NOOP) {\n    instance.render = render;\n  }\n  if (inheritAttrs != null) {\n    instance.inheritAttrs = inheritAttrs;\n  }\n  if (components) instance.components = components;\n  if (directives) instance.directives = directives;\n  if (serverPrefetch) {\n    markAsyncBoundary(instance);\n  }\n}\nfunction resolveInjections(injectOptions, ctx, checkDuplicateProperties = shared.NOOP) {\n  if (shared.isArray(injectOptions)) {\n    injectOptions = normalizeInject(injectOptions);\n  }\n  for (const key in injectOptions) {\n    const opt = injectOptions[key];\n    let injected;\n    if (shared.isObject(opt)) {\n      if (\"default\" in opt) {\n        injected = inject(\n          opt.from || key,\n          opt.default,\n          true\n        );\n      } else {\n        injected = inject(opt.from || key);\n      }\n    } else {\n      injected = inject(opt);\n    }\n    if (reactivity.isRef(injected)) {\n      Object.defineProperty(ctx, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => injected.value,\n        set: (v) => injected.value = v\n      });\n    } else {\n      ctx[key] = injected;\n    }\n  }\n}\nfunction callHook(hook, instance, type) {\n  callWithAsyncErrorHandling(\n    shared.isArray(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy),\n    instance,\n    type\n  );\n}\nfunction createWatcher(raw, ctx, publicThis, key) {\n  let getter = key.includes(\".\") ? createPathGetter(publicThis, key) : () => publicThis[key];\n  if (shared.isString(raw)) {\n    const handler = ctx[raw];\n    if (shared.isFunction(handler)) {\n      {\n        watch(getter, handler);\n      }\n    }\n  } else if (shared.isFunction(raw)) {\n    {\n      watch(getter, raw.bind(publicThis));\n    }\n  } else if (shared.isObject(raw)) {\n    if (shared.isArray(raw)) {\n      raw.forEach((r) => createWatcher(r, ctx, publicThis, key));\n    } else {\n      const handler = shared.isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];\n      if (shared.isFunction(handler)) {\n        watch(getter, handler, raw);\n      }\n    }\n  } else ;\n}\nfunction resolveMergedOptions(instance) {\n  const base = instance.type;\n  const { mixins, extends: extendsOptions } = base;\n  const {\n    mixins: globalMixins,\n    optionsCache: cache,\n    config: { optionMergeStrategies }\n  } = instance.appContext;\n  const cached = cache.get(base);\n  let resolved;\n  if (cached) {\n    resolved = cached;\n  } else if (!globalMixins.length && !mixins && !extendsOptions) {\n    {\n      resolved = base;\n    }\n  } else {\n    resolved = {};\n    if (globalMixins.length) {\n      globalMixins.forEach(\n        (m) => mergeOptions(resolved, m, optionMergeStrategies, true)\n      );\n    }\n    mergeOptions(resolved, base, optionMergeStrategies);\n  }\n  if (shared.isObject(base)) {\n    cache.set(base, resolved);\n  }\n  return resolved;\n}\nfunction mergeOptions(to, from, strats, asMixin = false) {\n  const { mixins, extends: extendsOptions } = from;\n  if (extendsOptions) {\n    mergeOptions(to, extendsOptions, strats, true);\n  }\n  if (mixins) {\n    mixins.forEach(\n      (m) => mergeOptions(to, m, strats, true)\n    );\n  }\n  for (const key in from) {\n    if (asMixin && key === \"expose\") ; else {\n      const strat = internalOptionMergeStrats[key] || strats && strats[key];\n      to[key] = strat ? strat(to[key], from[key]) : from[key];\n    }\n  }\n  return to;\n}\nconst internalOptionMergeStrats = {\n  data: mergeDataFn,\n  props: mergeEmitsOrPropsOptions,\n  emits: mergeEmitsOrPropsOptions,\n  // objects\n  methods: mergeObjectOptions,\n  computed: mergeObjectOptions,\n  // lifecycle\n  beforeCreate: mergeAsArray,\n  created: mergeAsArray,\n  beforeMount: mergeAsArray,\n  mounted: mergeAsArray,\n  beforeUpdate: mergeAsArray,\n  updated: mergeAsArray,\n  beforeDestroy: mergeAsArray,\n  beforeUnmount: mergeAsArray,\n  destroyed: mergeAsArray,\n  unmounted: mergeAsArray,\n  activated: mergeAsArray,\n  deactivated: mergeAsArray,\n  errorCaptured: mergeAsArray,\n  serverPrefetch: mergeAsArray,\n  // assets\n  components: mergeObjectOptions,\n  directives: mergeObjectOptions,\n  // watch\n  watch: mergeWatchOptions,\n  // provide / inject\n  provide: mergeDataFn,\n  inject: mergeInject\n};\nfunction mergeDataFn(to, from) {\n  if (!from) {\n    return to;\n  }\n  if (!to) {\n    return from;\n  }\n  return function mergedDataFn() {\n    return (shared.extend)(\n      shared.isFunction(to) ? to.call(this, this) : to,\n      shared.isFunction(from) ? from.call(this, this) : from\n    );\n  };\n}\nfunction mergeInject(to, from) {\n  return mergeObjectOptions(normalizeInject(to), normalizeInject(from));\n}\nfunction normalizeInject(raw) {\n  if (shared.isArray(raw)) {\n    const res = {};\n    for (let i = 0; i < raw.length; i++) {\n      res[raw[i]] = raw[i];\n    }\n    return res;\n  }\n  return raw;\n}\nfunction mergeAsArray(to, from) {\n  return to ? [...new Set([].concat(to, from))] : from;\n}\nfunction mergeObjectOptions(to, from) {\n  return to ? shared.extend(/* @__PURE__ */ Object.create(null), to, from) : from;\n}\nfunction mergeEmitsOrPropsOptions(to, from) {\n  if (to) {\n    if (shared.isArray(to) && shared.isArray(from)) {\n      return [.../* @__PURE__ */ new Set([...to, ...from])];\n    }\n    return shared.extend(\n      /* @__PURE__ */ Object.create(null),\n      normalizePropsOrEmits(to),\n      normalizePropsOrEmits(from != null ? from : {})\n    );\n  } else {\n    return from;\n  }\n}\nfunction mergeWatchOptions(to, from) {\n  if (!to) return from;\n  if (!from) return to;\n  const merged = shared.extend(/* @__PURE__ */ Object.create(null), to);\n  for (const key in from) {\n    merged[key] = mergeAsArray(to[key], from[key]);\n  }\n  return merged;\n}\n\nfunction createAppContext() {\n  return {\n    app: null,\n    config: {\n      isNativeTag: shared.NO,\n      performance: false,\n      globalProperties: {},\n      optionMergeStrategies: {},\n      errorHandler: void 0,\n      warnHandler: void 0,\n      compilerOptions: {}\n    },\n    mixins: [],\n    components: {},\n    directives: {},\n    provides: /* @__PURE__ */ Object.create(null),\n    optionsCache: /* @__PURE__ */ new WeakMap(),\n    propsCache: /* @__PURE__ */ new WeakMap(),\n    emitsCache: /* @__PURE__ */ new WeakMap()\n  };\n}\nlet uid$1 = 0;\nfunction createAppAPI(render, hydrate) {\n  return function createApp(rootComponent, rootProps = null) {\n    if (!shared.isFunction(rootComponent)) {\n      rootComponent = shared.extend({}, rootComponent);\n    }\n    if (rootProps != null && !shared.isObject(rootProps)) {\n      rootProps = null;\n    }\n    const context = createAppContext();\n    const installedPlugins = /* @__PURE__ */ new WeakSet();\n    const pluginCleanupFns = [];\n    let isMounted = false;\n    const app = context.app = {\n      _uid: uid$1++,\n      _component: rootComponent,\n      _props: rootProps,\n      _container: null,\n      _context: context,\n      _instance: null,\n      version,\n      get config() {\n        return context.config;\n      },\n      set config(v) {\n      },\n      use(plugin, ...options) {\n        if (installedPlugins.has(plugin)) ; else if (plugin && shared.isFunction(plugin.install)) {\n          installedPlugins.add(plugin);\n          plugin.install(app, ...options);\n        } else if (shared.isFunction(plugin)) {\n          installedPlugins.add(plugin);\n          plugin(app, ...options);\n        } else ;\n        return app;\n      },\n      mixin(mixin) {\n        {\n          if (!context.mixins.includes(mixin)) {\n            context.mixins.push(mixin);\n          }\n        }\n        return app;\n      },\n      component(name, component) {\n        if (!component) {\n          return context.components[name];\n        }\n        context.components[name] = component;\n        return app;\n      },\n      directive(name, directive) {\n        if (!directive) {\n          return context.directives[name];\n        }\n        context.directives[name] = directive;\n        return app;\n      },\n      mount(rootContainer, isHydrate, namespace) {\n        if (!isMounted) {\n          const vnode = app._ceVNode || createVNode(rootComponent, rootProps);\n          vnode.appContext = context;\n          if (namespace === true) {\n            namespace = \"svg\";\n          } else if (namespace === false) {\n            namespace = void 0;\n          }\n          if (isHydrate && hydrate) {\n            hydrate(vnode, rootContainer);\n          } else {\n            render(vnode, rootContainer, namespace);\n          }\n          isMounted = true;\n          app._container = rootContainer;\n          rootContainer.__vue_app__ = app;\n          return getComponentPublicInstance(vnode.component);\n        }\n      },\n      onUnmount(cleanupFn) {\n        pluginCleanupFns.push(cleanupFn);\n      },\n      unmount() {\n        if (isMounted) {\n          callWithAsyncErrorHandling(\n            pluginCleanupFns,\n            app._instance,\n            16\n          );\n          render(null, app._container);\n          delete app._container.__vue_app__;\n        }\n      },\n      provide(key, value) {\n        context.provides[key] = value;\n        return app;\n      },\n      runWithContext(fn) {\n        const lastApp = currentApp;\n        currentApp = app;\n        try {\n          return fn();\n        } finally {\n          currentApp = lastApp;\n        }\n      }\n    };\n    return app;\n  };\n}\nlet currentApp = null;\n\nfunction provide(key, value) {\n  if (!currentInstance) ; else {\n    let provides = currentInstance.provides;\n    const parentProvides = currentInstance.parent && currentInstance.parent.provides;\n    if (parentProvides === provides) {\n      provides = currentInstance.provides = Object.create(parentProvides);\n    }\n    provides[key] = value;\n  }\n}\nfunction inject(key, defaultValue, treatDefaultAsFactory = false) {\n  const instance = getCurrentInstance();\n  if (instance || currentApp) {\n    let provides = currentApp ? currentApp._context.provides : instance ? instance.parent == null || instance.ce ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : void 0;\n    if (provides && key in provides) {\n      return provides[key];\n    } else if (arguments.length > 1) {\n      return treatDefaultAsFactory && shared.isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;\n    } else ;\n  }\n}\nfunction hasInjectionContext() {\n  return !!(getCurrentInstance() || currentApp);\n}\n\nconst internalObjectProto = {};\nconst createInternalObject = () => Object.create(internalObjectProto);\nconst isInternalObject = (obj) => Object.getPrototypeOf(obj) === internalObjectProto;\n\nfunction initProps(instance, rawProps, isStateful, isSSR = false) {\n  const props = {};\n  const attrs = createInternalObject();\n  instance.propsDefaults = /* @__PURE__ */ Object.create(null);\n  setFullProps(instance, rawProps, props, attrs);\n  for (const key in instance.propsOptions[0]) {\n    if (!(key in props)) {\n      props[key] = void 0;\n    }\n  }\n  if (isStateful) {\n    instance.props = isSSR ? props : reactivity.shallowReactive(props);\n  } else {\n    if (!instance.type.props) {\n      instance.props = attrs;\n    } else {\n      instance.props = props;\n    }\n  }\n  instance.attrs = attrs;\n}\nfunction updateProps(instance, rawProps, rawPrevProps, optimized) {\n  const {\n    props,\n    attrs,\n    vnode: { patchFlag }\n  } = instance;\n  const rawCurrentProps = reactivity.toRaw(props);\n  const [options] = instance.propsOptions;\n  let hasAttrsChanged = false;\n  if (\n    // always force full diff in dev\n    // - #1942 if hmr is enabled with sfc component\n    // - vite#872 non-sfc component used by sfc component\n    (optimized || patchFlag > 0) && !(patchFlag & 16)\n  ) {\n    if (patchFlag & 8) {\n      const propsToUpdate = instance.vnode.dynamicProps;\n      for (let i = 0; i < propsToUpdate.length; i++) {\n        let key = propsToUpdate[i];\n        if (isEmitListener(instance.emitsOptions, key)) {\n          continue;\n        }\n        const value = rawProps[key];\n        if (options) {\n          if (shared.hasOwn(attrs, key)) {\n            if (value !== attrs[key]) {\n              attrs[key] = value;\n              hasAttrsChanged = true;\n            }\n          } else {\n            const camelizedKey = shared.camelize(key);\n            props[camelizedKey] = resolvePropValue(\n              options,\n              rawCurrentProps,\n              camelizedKey,\n              value,\n              instance,\n              false\n            );\n          }\n        } else {\n          if (value !== attrs[key]) {\n            attrs[key] = value;\n            hasAttrsChanged = true;\n          }\n        }\n      }\n    }\n  } else {\n    if (setFullProps(instance, rawProps, props, attrs)) {\n      hasAttrsChanged = true;\n    }\n    let kebabKey;\n    for (const key in rawCurrentProps) {\n      if (!rawProps || // for camelCase\n      !shared.hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case\n      // and converted to camelCase (#955)\n      ((kebabKey = shared.hyphenate(key)) === key || !shared.hasOwn(rawProps, kebabKey))) {\n        if (options) {\n          if (rawPrevProps && // for camelCase\n          (rawPrevProps[key] !== void 0 || // for kebab-case\n          rawPrevProps[kebabKey] !== void 0)) {\n            props[key] = resolvePropValue(\n              options,\n              rawCurrentProps,\n              key,\n              void 0,\n              instance,\n              true\n            );\n          }\n        } else {\n          delete props[key];\n        }\n      }\n    }\n    if (attrs !== rawCurrentProps) {\n      for (const key in attrs) {\n        if (!rawProps || !shared.hasOwn(rawProps, key) && true) {\n          delete attrs[key];\n          hasAttrsChanged = true;\n        }\n      }\n    }\n  }\n  if (hasAttrsChanged) {\n    reactivity.trigger(instance.attrs, \"set\", \"\");\n  }\n}\nfunction setFullProps(instance, rawProps, props, attrs) {\n  const [options, needCastKeys] = instance.propsOptions;\n  let hasAttrsChanged = false;\n  let rawCastValues;\n  if (rawProps) {\n    for (let key in rawProps) {\n      if (shared.isReservedProp(key)) {\n        continue;\n      }\n      const value = rawProps[key];\n      let camelKey;\n      if (options && shared.hasOwn(options, camelKey = shared.camelize(key))) {\n        if (!needCastKeys || !needCastKeys.includes(camelKey)) {\n          props[camelKey] = value;\n        } else {\n          (rawCastValues || (rawCastValues = {}))[camelKey] = value;\n        }\n      } else if (!isEmitListener(instance.emitsOptions, key)) {\n        if (!(key in attrs) || value !== attrs[key]) {\n          attrs[key] = value;\n          hasAttrsChanged = true;\n        }\n      }\n    }\n  }\n  if (needCastKeys) {\n    const rawCurrentProps = reactivity.toRaw(props);\n    const castValues = rawCastValues || shared.EMPTY_OBJ;\n    for (let i = 0; i < needCastKeys.length; i++) {\n      const key = needCastKeys[i];\n      props[key] = resolvePropValue(\n        options,\n        rawCurrentProps,\n        key,\n        castValues[key],\n        instance,\n        !shared.hasOwn(castValues, key)\n      );\n    }\n  }\n  return hasAttrsChanged;\n}\nfunction resolvePropValue(options, props, key, value, instance, isAbsent) {\n  const opt = options[key];\n  if (opt != null) {\n    const hasDefault = shared.hasOwn(opt, \"default\");\n    if (hasDefault && value === void 0) {\n      const defaultValue = opt.default;\n      if (opt.type !== Function && !opt.skipFactory && shared.isFunction(defaultValue)) {\n        const { propsDefaults } = instance;\n        if (key in propsDefaults) {\n          value = propsDefaults[key];\n        } else {\n          const reset = setCurrentInstance(instance);\n          value = propsDefaults[key] = defaultValue.call(\n            null,\n            props\n          );\n          reset();\n        }\n      } else {\n        value = defaultValue;\n      }\n      if (instance.ce) {\n        instance.ce._setProp(key, value);\n      }\n    }\n    if (opt[0 /* shouldCast */]) {\n      if (isAbsent && !hasDefault) {\n        value = false;\n      } else if (opt[1 /* shouldCastTrue */] && (value === \"\" || value === shared.hyphenate(key))) {\n        value = true;\n      }\n    }\n  }\n  return value;\n}\nconst mixinPropsCache = /* @__PURE__ */ new WeakMap();\nfunction normalizePropsOptions(comp, appContext, asMixin = false) {\n  const cache = asMixin ? mixinPropsCache : appContext.propsCache;\n  const cached = cache.get(comp);\n  if (cached) {\n    return cached;\n  }\n  const raw = comp.props;\n  const normalized = {};\n  const needCastKeys = [];\n  let hasExtends = false;\n  if (!shared.isFunction(comp)) {\n    const extendProps = (raw2) => {\n      hasExtends = true;\n      const [props, keys] = normalizePropsOptions(raw2, appContext, true);\n      shared.extend(normalized, props);\n      if (keys) needCastKeys.push(...keys);\n    };\n    if (!asMixin && appContext.mixins.length) {\n      appContext.mixins.forEach(extendProps);\n    }\n    if (comp.extends) {\n      extendProps(comp.extends);\n    }\n    if (comp.mixins) {\n      comp.mixins.forEach(extendProps);\n    }\n  }\n  if (!raw && !hasExtends) {\n    if (shared.isObject(comp)) {\n      cache.set(comp, shared.EMPTY_ARR);\n    }\n    return shared.EMPTY_ARR;\n  }\n  if (shared.isArray(raw)) {\n    for (let i = 0; i < raw.length; i++) {\n      const normalizedKey = shared.camelize(raw[i]);\n      if (validatePropName(normalizedKey)) {\n        normalized[normalizedKey] = shared.EMPTY_OBJ;\n      }\n    }\n  } else if (raw) {\n    for (const key in raw) {\n      const normalizedKey = shared.camelize(key);\n      if (validatePropName(normalizedKey)) {\n        const opt = raw[key];\n        const prop = normalized[normalizedKey] = shared.isArray(opt) || shared.isFunction(opt) ? { type: opt } : shared.extend({}, opt);\n        const propType = prop.type;\n        let shouldCast = false;\n        let shouldCastTrue = true;\n        if (shared.isArray(propType)) {\n          for (let index = 0; index < propType.length; ++index) {\n            const type = propType[index];\n            const typeName = shared.isFunction(type) && type.name;\n            if (typeName === \"Boolean\") {\n              shouldCast = true;\n              break;\n            } else if (typeName === \"String\") {\n              shouldCastTrue = false;\n            }\n          }\n        } else {\n          shouldCast = shared.isFunction(propType) && propType.name === \"Boolean\";\n        }\n        prop[0 /* shouldCast */] = shouldCast;\n        prop[1 /* shouldCastTrue */] = shouldCastTrue;\n        if (shouldCast || shared.hasOwn(prop, \"default\")) {\n          needCastKeys.push(normalizedKey);\n        }\n      }\n    }\n  }\n  const res = [normalized, needCastKeys];\n  if (shared.isObject(comp)) {\n    cache.set(comp, res);\n  }\n  return res;\n}\nfunction validatePropName(key) {\n  if (key[0] !== \"$\" && !shared.isReservedProp(key)) {\n    return true;\n  }\n  return false;\n}\n\nconst isInternalKey = (key) => key === \"_\" || key === \"__\" || key === \"_ctx\" || key === \"$stable\";\nconst normalizeSlotValue = (value) => shared.isArray(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];\nconst normalizeSlot = (key, rawSlot, ctx) => {\n  if (rawSlot._n) {\n    return rawSlot;\n  }\n  const normalized = withCtx((...args) => {\n    if (false) ;\n    return normalizeSlotValue(rawSlot(...args));\n  }, ctx);\n  normalized._c = false;\n  return normalized;\n};\nconst normalizeObjectSlots = (rawSlots, slots, instance) => {\n  const ctx = rawSlots._ctx;\n  for (const key in rawSlots) {\n    if (isInternalKey(key)) continue;\n    const value = rawSlots[key];\n    if (shared.isFunction(value)) {\n      slots[key] = normalizeSlot(key, value, ctx);\n    } else if (value != null) {\n      const normalized = normalizeSlotValue(value);\n      slots[key] = () => normalized;\n    }\n  }\n};\nconst normalizeVNodeSlots = (instance, children) => {\n  const normalized = normalizeSlotValue(children);\n  instance.slots.default = () => normalized;\n};\nconst assignSlots = (slots, children, optimized) => {\n  for (const key in children) {\n    if (optimized || !isInternalKey(key)) {\n      slots[key] = children[key];\n    }\n  }\n};\nconst initSlots = (instance, children, optimized) => {\n  const slots = instance.slots = createInternalObject();\n  if (instance.vnode.shapeFlag & 32) {\n    const cacheIndexes = children.__;\n    if (cacheIndexes) shared.def(slots, \"__\", cacheIndexes, true);\n    const type = children._;\n    if (type) {\n      assignSlots(slots, children, optimized);\n      if (optimized) {\n        shared.def(slots, \"_\", type, true);\n      }\n    } else {\n      normalizeObjectSlots(children, slots);\n    }\n  } else if (children) {\n    normalizeVNodeSlots(instance, children);\n  }\n};\nconst updateSlots = (instance, children, optimized) => {\n  const { vnode, slots } = instance;\n  let needDeletionCheck = true;\n  let deletionComparisonTarget = shared.EMPTY_OBJ;\n  if (vnode.shapeFlag & 32) {\n    const type = children._;\n    if (type) {\n      if (optimized && type === 1) {\n        needDeletionCheck = false;\n      } else {\n        assignSlots(slots, children, optimized);\n      }\n    } else {\n      needDeletionCheck = !children.$stable;\n      normalizeObjectSlots(children, slots);\n    }\n    deletionComparisonTarget = children;\n  } else if (children) {\n    normalizeVNodeSlots(instance, children);\n    deletionComparisonTarget = { default: 1 };\n  }\n  if (needDeletionCheck) {\n    for (const key in slots) {\n      if (!isInternalKey(key) && deletionComparisonTarget[key] == null) {\n        delete slots[key];\n      }\n    }\n  }\n};\n\nconst queuePostRenderEffect = queueEffectWithSuspense ;\nfunction createRenderer(options) {\n  return baseCreateRenderer(options);\n}\nfunction createHydrationRenderer(options) {\n  return baseCreateRenderer(options, createHydrationFunctions);\n}\nfunction baseCreateRenderer(options, createHydrationFns) {\n  const target = shared.getGlobalThis();\n  target.__VUE__ = true;\n  const {\n    insert: hostInsert,\n    remove: hostRemove,\n    patchProp: hostPatchProp,\n    createElement: hostCreateElement,\n    createText: hostCreateText,\n    createComment: hostCreateComment,\n    setText: hostSetText,\n    setElementText: hostSetElementText,\n    parentNode: hostParentNode,\n    nextSibling: hostNextSibling,\n    setScopeId: hostSetScopeId = shared.NOOP,\n    insertStaticContent: hostInsertStaticContent\n  } = options;\n  const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, namespace = void 0, slotScopeIds = null, optimized = !!n2.dynamicChildren) => {\n    if (n1 === n2) {\n      return;\n    }\n    if (n1 && !isSameVNodeType(n1, n2)) {\n      anchor = getNextHostNode(n1);\n      unmount(n1, parentComponent, parentSuspense, true);\n      n1 = null;\n    }\n    if (n2.patchFlag === -2) {\n      optimized = false;\n      n2.dynamicChildren = null;\n    }\n    const { type, ref, shapeFlag } = n2;\n    switch (type) {\n      case Text:\n        processText(n1, n2, container, anchor);\n        break;\n      case Comment:\n        processCommentNode(n1, n2, container, anchor);\n        break;\n      case Static:\n        if (n1 == null) {\n          mountStaticNode(n2, container, anchor, namespace);\n        }\n        break;\n      case Fragment:\n        processFragment(\n          n1,\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        break;\n      default:\n        if (shapeFlag & 1) {\n          processElement(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else if (shapeFlag & 6) {\n          processComponent(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else if (shapeFlag & 64) {\n          type.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else if (shapeFlag & 128) {\n          type.process(\n            n1,\n            n2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized,\n            internals\n          );\n        } else ;\n    }\n    if (ref != null && parentComponent) {\n      setRef(ref, n1 && n1.ref, parentSuspense, n2 || n1, !n2);\n    } else if (ref == null && n1 && n1.ref != null) {\n      setRef(n1.ref, null, parentSuspense, n1, true);\n    }\n  };\n  const processText = (n1, n2, container, anchor) => {\n    if (n1 == null) {\n      hostInsert(\n        n2.el = hostCreateText(n2.children),\n        container,\n        anchor\n      );\n    } else {\n      const el = n2.el = n1.el;\n      if (n2.children !== n1.children) {\n        hostSetText(el, n2.children);\n      }\n    }\n  };\n  const processCommentNode = (n1, n2, container, anchor) => {\n    if (n1 == null) {\n      hostInsert(\n        n2.el = hostCreateComment(n2.children || \"\"),\n        container,\n        anchor\n      );\n    } else {\n      n2.el = n1.el;\n    }\n  };\n  const mountStaticNode = (n2, container, anchor, namespace) => {\n    [n2.el, n2.anchor] = hostInsertStaticContent(\n      n2.children,\n      container,\n      anchor,\n      namespace,\n      n2.el,\n      n2.anchor\n    );\n  };\n  const moveStaticNode = ({ el, anchor }, container, nextSibling) => {\n    let next;\n    while (el && el !== anchor) {\n      next = hostNextSibling(el);\n      hostInsert(el, container, nextSibling);\n      el = next;\n    }\n    hostInsert(anchor, container, nextSibling);\n  };\n  const removeStaticNode = ({ el, anchor }) => {\n    let next;\n    while (el && el !== anchor) {\n      next = hostNextSibling(el);\n      hostRemove(el);\n      el = next;\n    }\n    hostRemove(anchor);\n  };\n  const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    if (n2.type === \"svg\") {\n      namespace = \"svg\";\n    } else if (n2.type === \"math\") {\n      namespace = \"mathml\";\n    }\n    if (n1 == null) {\n      mountElement(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      patchElement(\n        n1,\n        n2,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    let el;\n    let vnodeHook;\n    const { props, shapeFlag, transition, dirs } = vnode;\n    el = vnode.el = hostCreateElement(\n      vnode.type,\n      namespace,\n      props && props.is,\n      props\n    );\n    if (shapeFlag & 8) {\n      hostSetElementText(el, vnode.children);\n    } else if (shapeFlag & 16) {\n      mountChildren(\n        vnode.children,\n        el,\n        null,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(vnode, namespace),\n        slotScopeIds,\n        optimized\n      );\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"created\");\n    }\n    setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);\n    if (props) {\n      for (const key in props) {\n        if (key !== \"value\" && !shared.isReservedProp(key)) {\n          hostPatchProp(el, key, null, props[key], namespace, parentComponent);\n        }\n      }\n      if (\"value\" in props) {\n        hostPatchProp(el, \"value\", null, props.value, namespace);\n      }\n      if (vnodeHook = props.onVnodeBeforeMount) {\n        invokeVNodeHook(vnodeHook, parentComponent, vnode);\n      }\n    }\n    if (dirs) {\n      invokeDirectiveHook(vnode, null, parentComponent, \"beforeMount\");\n    }\n    const needCallTransitionHooks = needTransition(parentSuspense, transition);\n    if (needCallTransitionHooks) {\n      transition.beforeEnter(el);\n    }\n    hostInsert(el, container, anchor);\n    if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        needCallTransitionHooks && transition.enter(el);\n        dirs && invokeDirectiveHook(vnode, null, parentComponent, \"mounted\");\n      }, parentSuspense);\n    }\n  };\n  const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {\n    if (scopeId) {\n      hostSetScopeId(el, scopeId);\n    }\n    if (slotScopeIds) {\n      for (let i = 0; i < slotScopeIds.length; i++) {\n        hostSetScopeId(el, slotScopeIds[i]);\n      }\n    }\n    if (parentComponent) {\n      let subTree = parentComponent.subTree;\n      if (vnode === subTree || isSuspense(subTree.type) && (subTree.ssContent === vnode || subTree.ssFallback === vnode)) {\n        const parentVNode = parentComponent.vnode;\n        setScopeId(\n          el,\n          parentVNode,\n          parentVNode.scopeId,\n          parentVNode.slotScopeIds,\n          parentComponent.parent\n        );\n      }\n    }\n  };\n  const mountChildren = (children, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, start = 0) => {\n    for (let i = start; i < children.length; i++) {\n      const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);\n      patch(\n        null,\n        child,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n  };\n  const patchElement = (n1, n2, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    const el = n2.el = n1.el;\n    let { patchFlag, dynamicChildren, dirs } = n2;\n    patchFlag |= n1.patchFlag & 16;\n    const oldProps = n1.props || shared.EMPTY_OBJ;\n    const newProps = n2.props || shared.EMPTY_OBJ;\n    let vnodeHook;\n    parentComponent && toggleRecurse(parentComponent, false);\n    if (vnodeHook = newProps.onVnodeBeforeUpdate) {\n      invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n    }\n    if (dirs) {\n      invokeDirectiveHook(n2, n1, parentComponent, \"beforeUpdate\");\n    }\n    parentComponent && toggleRecurse(parentComponent, true);\n    if (oldProps.innerHTML && newProps.innerHTML == null || oldProps.textContent && newProps.textContent == null) {\n      hostSetElementText(el, \"\");\n    }\n    if (dynamicChildren) {\n      patchBlockChildren(\n        n1.dynamicChildren,\n        dynamicChildren,\n        el,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(n2, namespace),\n        slotScopeIds\n      );\n    } else if (!optimized) {\n      patchChildren(\n        n1,\n        n2,\n        el,\n        null,\n        parentComponent,\n        parentSuspense,\n        resolveChildrenNamespace(n2, namespace),\n        slotScopeIds,\n        false\n      );\n    }\n    if (patchFlag > 0) {\n      if (patchFlag & 16) {\n        patchProps(el, oldProps, newProps, parentComponent, namespace);\n      } else {\n        if (patchFlag & 2) {\n          if (oldProps.class !== newProps.class) {\n            hostPatchProp(el, \"class\", null, newProps.class, namespace);\n          }\n        }\n        if (patchFlag & 4) {\n          hostPatchProp(el, \"style\", oldProps.style, newProps.style, namespace);\n        }\n        if (patchFlag & 8) {\n          const propsToUpdate = n2.dynamicProps;\n          for (let i = 0; i < propsToUpdate.length; i++) {\n            const key = propsToUpdate[i];\n            const prev = oldProps[key];\n            const next = newProps[key];\n            if (next !== prev || key === \"value\") {\n              hostPatchProp(el, key, prev, next, namespace, parentComponent);\n            }\n          }\n        }\n      }\n      if (patchFlag & 1) {\n        if (n1.children !== n2.children) {\n          hostSetElementText(el, n2.children);\n        }\n      }\n    } else if (!optimized && dynamicChildren == null) {\n      patchProps(el, oldProps, newProps, parentComponent, namespace);\n    }\n    if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);\n        dirs && invokeDirectiveHook(n2, n1, parentComponent, \"updated\");\n      }, parentSuspense);\n    }\n  };\n  const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, namespace, slotScopeIds) => {\n    for (let i = 0; i < newChildren.length; i++) {\n      const oldVNode = oldChildren[i];\n      const newVNode = newChildren[i];\n      const container = (\n        // oldVNode may be an errored async setup() component inside Suspense\n        // which will not have a mounted element\n        oldVNode.el && // - In the case of a Fragment, we need to provide the actual parent\n        // of the Fragment itself so it can move its children.\n        (oldVNode.type === Fragment || // - In the case of different nodes, there is going to be a replacement\n        // which also requires the correct parent container\n        !isSameVNodeType(oldVNode, newVNode) || // - In the case of a component, it could contain anything.\n        oldVNode.shapeFlag & (6 | 64 | 128)) ? hostParentNode(oldVNode.el) : (\n          // In other cases, the parent container is not actually used so we\n          // just pass the block element here to avoid a DOM parentNode call.\n          fallbackContainer\n        )\n      );\n      patch(\n        oldVNode,\n        newVNode,\n        container,\n        null,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        true\n      );\n    }\n  };\n  const patchProps = (el, oldProps, newProps, parentComponent, namespace) => {\n    if (oldProps !== newProps) {\n      if (oldProps !== shared.EMPTY_OBJ) {\n        for (const key in oldProps) {\n          if (!shared.isReservedProp(key) && !(key in newProps)) {\n            hostPatchProp(\n              el,\n              key,\n              oldProps[key],\n              null,\n              namespace,\n              parentComponent\n            );\n          }\n        }\n      }\n      for (const key in newProps) {\n        if (shared.isReservedProp(key)) continue;\n        const next = newProps[key];\n        const prev = oldProps[key];\n        if (next !== prev && key !== \"value\") {\n          hostPatchProp(el, key, prev, next, namespace, parentComponent);\n        }\n      }\n      if (\"value\" in newProps) {\n        hostPatchProp(el, \"value\", oldProps.value, newProps.value, namespace);\n      }\n    }\n  };\n  const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText(\"\");\n    const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText(\"\");\n    let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;\n    if (fragmentSlotScopeIds) {\n      slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;\n    }\n    if (n1 == null) {\n      hostInsert(fragmentStartAnchor, container, anchor);\n      hostInsert(fragmentEndAnchor, container, anchor);\n      mountChildren(\n        // #10007\n        // such fragment like `<></>` will be compiled into\n        // a fragment which doesn't have a children.\n        // In this case fallback to an empty array\n        n2.children || [],\n        container,\n        fragmentEndAnchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    } else {\n      if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && // #2715 the previous fragment could've been a BAILed one as a result\n      // of renderSlot() with no valid children\n      n1.dynamicChildren) {\n        patchBlockChildren(\n          n1.dynamicChildren,\n          dynamicChildren,\n          container,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds\n        );\n        if (\n          // #2080 if the stable fragment has a key, it's a <template v-for> that may\n          //  get moved around. Make sure all root level vnodes inherit el.\n          // #2134 or if it's a component root, it may also get moved around\n          // as the component is being moved.\n          n2.key != null || parentComponent && n2 === parentComponent.subTree\n        ) {\n          traverseStaticChildren(\n            n1,\n            n2,\n            true\n            /* shallow */\n          );\n        }\n      } else {\n        patchChildren(\n          n1,\n          n2,\n          container,\n          fragmentEndAnchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n      }\n    }\n  };\n  const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    n2.slotScopeIds = slotScopeIds;\n    if (n1 == null) {\n      if (n2.shapeFlag & 512) {\n        parentComponent.ctx.activate(\n          n2,\n          container,\n          anchor,\n          namespace,\n          optimized\n        );\n      } else {\n        mountComponent(\n          n2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          optimized\n        );\n      }\n    } else {\n      updateComponent(n1, n2, optimized);\n    }\n  };\n  const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, namespace, optimized) => {\n    const instance = (initialVNode.component = createComponentInstance(\n      initialVNode,\n      parentComponent,\n      parentSuspense\n    ));\n    if (isKeepAlive(initialVNode)) {\n      instance.ctx.renderer = internals;\n    }\n    {\n      setupComponent(instance, false, optimized);\n    }\n    if (instance.asyncDep) {\n      parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect, optimized);\n      if (!initialVNode.el) {\n        const placeholder = instance.subTree = createVNode(Comment);\n        processCommentNode(null, placeholder, container, anchor);\n        initialVNode.placeholder = placeholder.el;\n      }\n    } else {\n      setupRenderEffect(\n        instance,\n        initialVNode,\n        container,\n        anchor,\n        parentSuspense,\n        namespace,\n        optimized\n      );\n    }\n  };\n  const updateComponent = (n1, n2, optimized) => {\n    const instance = n2.component = n1.component;\n    if (shouldUpdateComponent(n1, n2, optimized)) {\n      if (instance.asyncDep && !instance.asyncResolved) {\n        updateComponentPreRender(instance, n2, optimized);\n        return;\n      } else {\n        instance.next = n2;\n        instance.update();\n      }\n    } else {\n      n2.el = n1.el;\n      instance.vnode = n2;\n    }\n  };\n  const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, namespace, optimized) => {\n    const componentUpdateFn = () => {\n      if (!instance.isMounted) {\n        let vnodeHook;\n        const { el, props } = initialVNode;\n        const { bm, m, parent, root, type } = instance;\n        const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);\n        toggleRecurse(instance, false);\n        if (bm) {\n          shared.invokeArrayFns(bm);\n        }\n        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {\n          invokeVNodeHook(vnodeHook, parent, initialVNode);\n        }\n        toggleRecurse(instance, true);\n        if (el && hydrateNode) {\n          const hydrateSubTree = () => {\n            instance.subTree = renderComponentRoot(instance);\n            hydrateNode(\n              el,\n              instance.subTree,\n              instance,\n              parentSuspense,\n              null\n            );\n          };\n          if (isAsyncWrapperVNode && type.__asyncHydrate) {\n            type.__asyncHydrate(\n              el,\n              instance,\n              hydrateSubTree\n            );\n          } else {\n            hydrateSubTree();\n          }\n        } else {\n          if (root.ce && // @ts-expect-error _def is private\n          root.ce._def.shadowRoot !== false) {\n            root.ce._injectChildStyle(type);\n          }\n          const subTree = instance.subTree = renderComponentRoot(instance);\n          patch(\n            null,\n            subTree,\n            container,\n            anchor,\n            instance,\n            parentSuspense,\n            namespace\n          );\n          initialVNode.el = subTree.el;\n        }\n        if (m) {\n          queuePostRenderEffect(m, parentSuspense);\n        }\n        if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {\n          const scopedInitialVNode = initialVNode;\n          queuePostRenderEffect(\n            () => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode),\n            parentSuspense\n          );\n        }\n        if (initialVNode.shapeFlag & 256 || parent && isAsyncWrapper(parent.vnode) && parent.vnode.shapeFlag & 256) {\n          instance.a && queuePostRenderEffect(instance.a, parentSuspense);\n        }\n        instance.isMounted = true;\n        initialVNode = container = anchor = null;\n      } else {\n        let { next, bu, u, parent, vnode } = instance;\n        {\n          const nonHydratedAsyncRoot = locateNonHydratedAsyncRoot(instance);\n          if (nonHydratedAsyncRoot) {\n            if (next) {\n              next.el = vnode.el;\n              updateComponentPreRender(instance, next, optimized);\n            }\n            nonHydratedAsyncRoot.asyncDep.then(() => {\n              if (!instance.isUnmounted) {\n                componentUpdateFn();\n              }\n            });\n            return;\n          }\n        }\n        let originNext = next;\n        let vnodeHook;\n        toggleRecurse(instance, false);\n        if (next) {\n          next.el = vnode.el;\n          updateComponentPreRender(instance, next, optimized);\n        } else {\n          next = vnode;\n        }\n        if (bu) {\n          shared.invokeArrayFns(bu);\n        }\n        if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {\n          invokeVNodeHook(vnodeHook, parent, next, vnode);\n        }\n        toggleRecurse(instance, true);\n        const nextTree = renderComponentRoot(instance);\n        const prevTree = instance.subTree;\n        instance.subTree = nextTree;\n        patch(\n          prevTree,\n          nextTree,\n          // parent may have changed if it's in a teleport\n          hostParentNode(prevTree.el),\n          // anchor may have changed if it's in a fragment\n          getNextHostNode(prevTree),\n          instance,\n          parentSuspense,\n          namespace\n        );\n        next.el = nextTree.el;\n        if (originNext === null) {\n          updateHOCHostEl(instance, nextTree.el);\n        }\n        if (u) {\n          queuePostRenderEffect(u, parentSuspense);\n        }\n        if (vnodeHook = next.props && next.props.onVnodeUpdated) {\n          queuePostRenderEffect(\n            () => invokeVNodeHook(vnodeHook, parent, next, vnode),\n            parentSuspense\n          );\n        }\n      }\n    };\n    instance.scope.on();\n    const effect = instance.effect = new reactivity.ReactiveEffect(componentUpdateFn);\n    instance.scope.off();\n    const update = instance.update = effect.run.bind(effect);\n    const job = instance.job = effect.runIfDirty.bind(effect);\n    job.i = instance;\n    job.id = instance.uid;\n    effect.scheduler = () => queueJob(job);\n    toggleRecurse(instance, true);\n    update();\n  };\n  const updateComponentPreRender = (instance, nextVNode, optimized) => {\n    nextVNode.component = instance;\n    const prevProps = instance.vnode.props;\n    instance.vnode = nextVNode;\n    instance.next = null;\n    updateProps(instance, nextVNode.props, prevProps, optimized);\n    updateSlots(instance, nextVNode.children, optimized);\n    reactivity.pauseTracking();\n    flushPreFlushCbs(instance);\n    reactivity.resetTracking();\n  };\n  const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized = false) => {\n    const c1 = n1 && n1.children;\n    const prevShapeFlag = n1 ? n1.shapeFlag : 0;\n    const c2 = n2.children;\n    const { patchFlag, shapeFlag } = n2;\n    if (patchFlag > 0) {\n      if (patchFlag & 128) {\n        patchKeyedChildren(\n          c1,\n          c2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        return;\n      } else if (patchFlag & 256) {\n        patchUnkeyedChildren(\n          c1,\n          c2,\n          container,\n          anchor,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        return;\n      }\n    }\n    if (shapeFlag & 8) {\n      if (prevShapeFlag & 16) {\n        unmountChildren(c1, parentComponent, parentSuspense);\n      }\n      if (c2 !== c1) {\n        hostSetElementText(container, c2);\n      }\n    } else {\n      if (prevShapeFlag & 16) {\n        if (shapeFlag & 16) {\n          patchKeyedChildren(\n            c1,\n            c2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else {\n          unmountChildren(c1, parentComponent, parentSuspense, true);\n        }\n      } else {\n        if (prevShapeFlag & 8) {\n          hostSetElementText(container, \"\");\n        }\n        if (shapeFlag & 16) {\n          mountChildren(\n            c2,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        }\n      }\n    }\n  };\n  const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    c1 = c1 || shared.EMPTY_ARR;\n    c2 = c2 || shared.EMPTY_ARR;\n    const oldLength = c1.length;\n    const newLength = c2.length;\n    const commonLength = Math.min(oldLength, newLength);\n    let i;\n    for (i = 0; i < commonLength; i++) {\n      const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n      patch(\n        c1[i],\n        nextChild,\n        container,\n        null,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n    }\n    if (oldLength > newLength) {\n      unmountChildren(\n        c1,\n        parentComponent,\n        parentSuspense,\n        true,\n        false,\n        commonLength\n      );\n    } else {\n      mountChildren(\n        c2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized,\n        commonLength\n      );\n    }\n  };\n  const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized) => {\n    let i = 0;\n    const l2 = c2.length;\n    let e1 = c1.length - 1;\n    let e2 = l2 - 1;\n    while (i <= e1 && i <= e2) {\n      const n1 = c1[i];\n      const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n      if (isSameVNodeType(n1, n2)) {\n        patch(\n          n1,\n          n2,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n      } else {\n        break;\n      }\n      i++;\n    }\n    while (i <= e1 && i <= e2) {\n      const n1 = c1[e1];\n      const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);\n      if (isSameVNodeType(n1, n2)) {\n        patch(\n          n1,\n          n2,\n          container,\n          null,\n          parentComponent,\n          parentSuspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n      } else {\n        break;\n      }\n      e1--;\n      e2--;\n    }\n    if (i > e1) {\n      if (i <= e2) {\n        const nextPos = e2 + 1;\n        const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;\n        while (i <= e2) {\n          patch(\n            null,\n            c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]),\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          i++;\n        }\n      }\n    } else if (i > e2) {\n      while (i <= e1) {\n        unmount(c1[i], parentComponent, parentSuspense, true);\n        i++;\n      }\n    } else {\n      const s1 = i;\n      const s2 = i;\n      const keyToNewIndexMap = /* @__PURE__ */ new Map();\n      for (i = s2; i <= e2; i++) {\n        const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);\n        if (nextChild.key != null) {\n          keyToNewIndexMap.set(nextChild.key, i);\n        }\n      }\n      let j;\n      let patched = 0;\n      const toBePatched = e2 - s2 + 1;\n      let moved = false;\n      let maxNewIndexSoFar = 0;\n      const newIndexToOldIndexMap = new Array(toBePatched);\n      for (i = 0; i < toBePatched; i++) newIndexToOldIndexMap[i] = 0;\n      for (i = s1; i <= e1; i++) {\n        const prevChild = c1[i];\n        if (patched >= toBePatched) {\n          unmount(prevChild, parentComponent, parentSuspense, true);\n          continue;\n        }\n        let newIndex;\n        if (prevChild.key != null) {\n          newIndex = keyToNewIndexMap.get(prevChild.key);\n        } else {\n          for (j = s2; j <= e2; j++) {\n            if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {\n              newIndex = j;\n              break;\n            }\n          }\n        }\n        if (newIndex === void 0) {\n          unmount(prevChild, parentComponent, parentSuspense, true);\n        } else {\n          newIndexToOldIndexMap[newIndex - s2] = i + 1;\n          if (newIndex >= maxNewIndexSoFar) {\n            maxNewIndexSoFar = newIndex;\n          } else {\n            moved = true;\n          }\n          patch(\n            prevChild,\n            c2[newIndex],\n            container,\n            null,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          patched++;\n        }\n      }\n      const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : shared.EMPTY_ARR;\n      j = increasingNewIndexSequence.length - 1;\n      for (i = toBePatched - 1; i >= 0; i--) {\n        const nextIndex = s2 + i;\n        const nextChild = c2[nextIndex];\n        const anchorVNode = c2[nextIndex + 1];\n        const anchor = nextIndex + 1 < l2 ? (\n          // #13559, fallback to el placeholder for unresolved async component\n          anchorVNode.el || anchorVNode.placeholder\n        ) : parentAnchor;\n        if (newIndexToOldIndexMap[i] === 0) {\n          patch(\n            null,\n            nextChild,\n            container,\n            anchor,\n            parentComponent,\n            parentSuspense,\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n        } else if (moved) {\n          if (j < 0 || i !== increasingNewIndexSequence[j]) {\n            move(nextChild, container, anchor, 2);\n          } else {\n            j--;\n          }\n        }\n      }\n    }\n  };\n  const move = (vnode, container, anchor, moveType, parentSuspense = null) => {\n    const { el, type, transition, children, shapeFlag } = vnode;\n    if (shapeFlag & 6) {\n      move(vnode.component.subTree, container, anchor, moveType);\n      return;\n    }\n    if (shapeFlag & 128) {\n      vnode.suspense.move(container, anchor, moveType);\n      return;\n    }\n    if (shapeFlag & 64) {\n      type.move(vnode, container, anchor, internals);\n      return;\n    }\n    if (type === Fragment) {\n      hostInsert(el, container, anchor);\n      for (let i = 0; i < children.length; i++) {\n        move(children[i], container, anchor, moveType);\n      }\n      hostInsert(vnode.anchor, container, anchor);\n      return;\n    }\n    if (type === Static) {\n      moveStaticNode(vnode, container, anchor);\n      return;\n    }\n    const needTransition2 = moveType !== 2 && shapeFlag & 1 && transition;\n    if (needTransition2) {\n      if (moveType === 0) {\n        transition.beforeEnter(el);\n        hostInsert(el, container, anchor);\n        queuePostRenderEffect(() => transition.enter(el), parentSuspense);\n      } else {\n        const { leave, delayLeave, afterLeave } = transition;\n        const remove2 = () => {\n          if (vnode.ctx.isUnmounted) {\n            hostRemove(el);\n          } else {\n            hostInsert(el, container, anchor);\n          }\n        };\n        const performLeave = () => {\n          leave(el, () => {\n            remove2();\n            afterLeave && afterLeave();\n          });\n        };\n        if (delayLeave) {\n          delayLeave(el, remove2, performLeave);\n        } else {\n          performLeave();\n        }\n      }\n    } else {\n      hostInsert(el, container, anchor);\n    }\n  };\n  const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {\n    const {\n      type,\n      props,\n      ref,\n      children,\n      dynamicChildren,\n      shapeFlag,\n      patchFlag,\n      dirs,\n      cacheIndex\n    } = vnode;\n    if (patchFlag === -2) {\n      optimized = false;\n    }\n    if (ref != null) {\n      reactivity.pauseTracking();\n      setRef(ref, null, parentSuspense, vnode, true);\n      reactivity.resetTracking();\n    }\n    if (cacheIndex != null) {\n      parentComponent.renderCache[cacheIndex] = void 0;\n    }\n    if (shapeFlag & 256) {\n      parentComponent.ctx.deactivate(vnode);\n      return;\n    }\n    const shouldInvokeDirs = shapeFlag & 1 && dirs;\n    const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);\n    let vnodeHook;\n    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {\n      invokeVNodeHook(vnodeHook, parentComponent, vnode);\n    }\n    if (shapeFlag & 6) {\n      unmountComponent(vnode.component, parentSuspense, doRemove);\n    } else {\n      if (shapeFlag & 128) {\n        vnode.suspense.unmount(parentSuspense, doRemove);\n        return;\n      }\n      if (shouldInvokeDirs) {\n        invokeDirectiveHook(vnode, null, parentComponent, \"beforeUnmount\");\n      }\n      if (shapeFlag & 64) {\n        vnode.type.remove(\n          vnode,\n          parentComponent,\n          parentSuspense,\n          internals,\n          doRemove\n        );\n      } else if (dynamicChildren && // #5154\n      // when v-once is used inside a block, setBlockTracking(-1) marks the\n      // parent block with hasOnce: true\n      // so that it doesn't take the fast path during unmount - otherwise\n      // components nested in v-once are never unmounted.\n      !dynamicChildren.hasOnce && // #1153: fast path should not be taken for non-stable (v-for) fragments\n      (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {\n        unmountChildren(\n          dynamicChildren,\n          parentComponent,\n          parentSuspense,\n          false,\n          true\n        );\n      } else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {\n        unmountChildren(children, parentComponent, parentSuspense);\n      }\n      if (doRemove) {\n        remove(vnode);\n      }\n    }\n    if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {\n      queuePostRenderEffect(() => {\n        vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);\n        shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, \"unmounted\");\n      }, parentSuspense);\n    }\n  };\n  const remove = (vnode) => {\n    const { type, el, anchor, transition } = vnode;\n    if (type === Fragment) {\n      {\n        removeFragment(el, anchor);\n      }\n      return;\n    }\n    if (type === Static) {\n      removeStaticNode(vnode);\n      return;\n    }\n    const performRemove = () => {\n      hostRemove(el);\n      if (transition && !transition.persisted && transition.afterLeave) {\n        transition.afterLeave();\n      }\n    };\n    if (vnode.shapeFlag & 1 && transition && !transition.persisted) {\n      const { leave, delayLeave } = transition;\n      const performLeave = () => leave(el, performRemove);\n      if (delayLeave) {\n        delayLeave(vnode.el, performRemove, performLeave);\n      } else {\n        performLeave();\n      }\n    } else {\n      performRemove();\n    }\n  };\n  const removeFragment = (cur, end) => {\n    let next;\n    while (cur !== end) {\n      next = hostNextSibling(cur);\n      hostRemove(cur);\n      cur = next;\n    }\n    hostRemove(end);\n  };\n  const unmountComponent = (instance, parentSuspense, doRemove) => {\n    const {\n      bum,\n      scope,\n      job,\n      subTree,\n      um,\n      m,\n      a,\n      parent,\n      slots: { __: slotCacheKeys }\n    } = instance;\n    invalidateMount(m);\n    invalidateMount(a);\n    if (bum) {\n      shared.invokeArrayFns(bum);\n    }\n    if (parent && shared.isArray(slotCacheKeys)) {\n      slotCacheKeys.forEach((v) => {\n        parent.renderCache[v] = void 0;\n      });\n    }\n    scope.stop();\n    if (job) {\n      job.flags |= 8;\n      unmount(subTree, instance, parentSuspense, doRemove);\n    }\n    if (um) {\n      queuePostRenderEffect(um, parentSuspense);\n    }\n    queuePostRenderEffect(() => {\n      instance.isUnmounted = true;\n    }, parentSuspense);\n    if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) {\n      parentSuspense.deps--;\n      if (parentSuspense.deps === 0) {\n        parentSuspense.resolve();\n      }\n    }\n  };\n  const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start = 0) => {\n    for (let i = start; i < children.length; i++) {\n      unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);\n    }\n  };\n  const getNextHostNode = (vnode) => {\n    if (vnode.shapeFlag & 6) {\n      return getNextHostNode(vnode.component.subTree);\n    }\n    if (vnode.shapeFlag & 128) {\n      return vnode.suspense.next();\n    }\n    const el = hostNextSibling(vnode.anchor || vnode.el);\n    const teleportEnd = el && el[TeleportEndKey];\n    return teleportEnd ? hostNextSibling(teleportEnd) : el;\n  };\n  let isFlushing = false;\n  const render = (vnode, container, namespace) => {\n    if (vnode == null) {\n      if (container._vnode) {\n        unmount(container._vnode, null, null, true);\n      }\n    } else {\n      patch(\n        container._vnode || null,\n        vnode,\n        container,\n        null,\n        null,\n        null,\n        namespace\n      );\n    }\n    container._vnode = vnode;\n    if (!isFlushing) {\n      isFlushing = true;\n      flushPreFlushCbs();\n      flushPostFlushCbs();\n      isFlushing = false;\n    }\n  };\n  const internals = {\n    p: patch,\n    um: unmount,\n    m: move,\n    r: remove,\n    mt: mountComponent,\n    mc: mountChildren,\n    pc: patchChildren,\n    pbc: patchBlockChildren,\n    n: getNextHostNode,\n    o: options\n  };\n  let hydrate;\n  let hydrateNode;\n  if (createHydrationFns) {\n    [hydrate, hydrateNode] = createHydrationFns(\n      internals\n    );\n  }\n  return {\n    render,\n    hydrate,\n    createApp: createAppAPI(render, hydrate)\n  };\n}\nfunction resolveChildrenNamespace({ type, props }, currentNamespace) {\n  return currentNamespace === \"svg\" && type === \"foreignObject\" || currentNamespace === \"mathml\" && type === \"annotation-xml\" && props && props.encoding && props.encoding.includes(\"html\") ? void 0 : currentNamespace;\n}\nfunction toggleRecurse({ effect, job }, allowed) {\n  if (allowed) {\n    effect.flags |= 32;\n    job.flags |= 4;\n  } else {\n    effect.flags &= -33;\n    job.flags &= -5;\n  }\n}\nfunction needTransition(parentSuspense, transition) {\n  return (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;\n}\nfunction traverseStaticChildren(n1, n2, shallow = false) {\n  const ch1 = n1.children;\n  const ch2 = n2.children;\n  if (shared.isArray(ch1) && shared.isArray(ch2)) {\n    for (let i = 0; i < ch1.length; i++) {\n      const c1 = ch1[i];\n      let c2 = ch2[i];\n      if (c2.shapeFlag & 1 && !c2.dynamicChildren) {\n        if (c2.patchFlag <= 0 || c2.patchFlag === 32) {\n          c2 = ch2[i] = cloneIfMounted(ch2[i]);\n          c2.el = c1.el;\n        }\n        if (!shallow && c2.patchFlag !== -2)\n          traverseStaticChildren(c1, c2);\n      }\n      if (c2.type === Text) {\n        c2.el = c1.el;\n      }\n      if (c2.type === Comment && !c2.el) {\n        c2.el = c1.el;\n      }\n    }\n  }\n}\nfunction getSequence(arr) {\n  const p = arr.slice();\n  const result = [0];\n  let i, j, u, v, c;\n  const len = arr.length;\n  for (i = 0; i < len; i++) {\n    const arrI = arr[i];\n    if (arrI !== 0) {\n      j = result[result.length - 1];\n      if (arr[j] < arrI) {\n        p[i] = j;\n        result.push(i);\n        continue;\n      }\n      u = 0;\n      v = result.length - 1;\n      while (u < v) {\n        c = u + v >> 1;\n        if (arr[result[c]] < arrI) {\n          u = c + 1;\n        } else {\n          v = c;\n        }\n      }\n      if (arrI < arr[result[u]]) {\n        if (u > 0) {\n          p[i] = result[u - 1];\n        }\n        result[u] = i;\n      }\n    }\n  }\n  u = result.length;\n  v = result[u - 1];\n  while (u-- > 0) {\n    result[u] = v;\n    v = p[v];\n  }\n  return result;\n}\nfunction locateNonHydratedAsyncRoot(instance) {\n  const subComponent = instance.subTree.component;\n  if (subComponent) {\n    if (subComponent.asyncDep && !subComponent.asyncResolved) {\n      return subComponent;\n    } else {\n      return locateNonHydratedAsyncRoot(subComponent);\n    }\n  }\n}\nfunction invalidateMount(hooks) {\n  if (hooks) {\n    for (let i = 0; i < hooks.length; i++)\n      hooks[i].flags |= 8;\n  }\n}\n\nconst ssrContextKey = Symbol.for(\"v-scx\");\nconst useSSRContext = () => {\n  {\n    const ctx = inject(ssrContextKey);\n    return ctx;\n  }\n};\n\nfunction watchEffect(effect, options) {\n  return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n  return doWatch(\n    effect,\n    null,\n    { flush: \"post\" }\n  );\n}\nfunction watchSyncEffect(effect, options) {\n  return doWatch(\n    effect,\n    null,\n    { flush: \"sync\" }\n  );\n}\nfunction watch(source, cb, options) {\n  return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, options = shared.EMPTY_OBJ) {\n  const { immediate, deep, flush, once } = options;\n  const baseWatchOptions = shared.extend({}, options);\n  const runsImmediately = cb && immediate || !cb && flush !== \"post\";\n  let ssrCleanup;\n  if (isInSSRComponentSetup) {\n    if (flush === \"sync\") {\n      const ctx = useSSRContext();\n      ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n    } else if (!runsImmediately) {\n      const watchStopHandle = () => {\n      };\n      watchStopHandle.stop = shared.NOOP;\n      watchStopHandle.resume = shared.NOOP;\n      watchStopHandle.pause = shared.NOOP;\n      return watchStopHandle;\n    }\n  }\n  const instance = currentInstance;\n  baseWatchOptions.call = (fn, type, args) => callWithAsyncErrorHandling(fn, instance, type, args);\n  let isPre = false;\n  if (flush === \"post\") {\n    baseWatchOptions.scheduler = (job) => {\n      queuePostRenderEffect(job, instance && instance.suspense);\n    };\n  } else if (flush !== \"sync\") {\n    isPre = true;\n    baseWatchOptions.scheduler = (job, isFirstRun) => {\n      if (isFirstRun) {\n        job();\n      } else {\n        queueJob(job);\n      }\n    };\n  }\n  baseWatchOptions.augmentJob = (job) => {\n    if (cb) {\n      job.flags |= 4;\n    }\n    if (isPre) {\n      job.flags |= 2;\n      if (instance) {\n        job.id = instance.uid;\n        job.i = instance;\n      }\n    }\n  };\n  const watchHandle = reactivity.watch(source, cb, baseWatchOptions);\n  if (isInSSRComponentSetup) {\n    if (ssrCleanup) {\n      ssrCleanup.push(watchHandle);\n    } else if (runsImmediately) {\n      watchHandle();\n    }\n  }\n  return watchHandle;\n}\nfunction instanceWatch(source, value, options) {\n  const publicThis = this.proxy;\n  const getter = shared.isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n  let cb;\n  if (shared.isFunction(value)) {\n    cb = value;\n  } else {\n    cb = value.handler;\n    options = value;\n  }\n  const reset = setCurrentInstance(this);\n  const res = doWatch(getter, cb.bind(publicThis), options);\n  reset();\n  return res;\n}\nfunction createPathGetter(ctx, path) {\n  const segments = path.split(\".\");\n  return () => {\n    let cur = ctx;\n    for (let i = 0; i < segments.length && cur; i++) {\n      cur = cur[segments[i]];\n    }\n    return cur;\n  };\n}\n\nfunction useModel(props, name, options = shared.EMPTY_OBJ) {\n  const i = getCurrentInstance();\n  const camelizedName = shared.camelize(name);\n  const hyphenatedName = shared.hyphenate(name);\n  const modifiers = getModelModifiers(props, camelizedName);\n  const res = reactivity.customRef((track, trigger) => {\n    let localValue;\n    let prevSetValue = shared.EMPTY_OBJ;\n    let prevEmittedValue;\n    watchSyncEffect(() => {\n      const propValue = props[camelizedName];\n      if (shared.hasChanged(localValue, propValue)) {\n        localValue = propValue;\n        trigger();\n      }\n    });\n    return {\n      get() {\n        track();\n        return options.get ? options.get(localValue) : localValue;\n      },\n      set(value) {\n        const emittedValue = options.set ? options.set(value) : value;\n        if (!shared.hasChanged(emittedValue, localValue) && !(prevSetValue !== shared.EMPTY_OBJ && shared.hasChanged(value, prevSetValue))) {\n          return;\n        }\n        const rawProps = i.vnode.props;\n        if (!(rawProps && // check if parent has passed v-model\n        (name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps))) {\n          localValue = value;\n          trigger();\n        }\n        i.emit(`update:${name}`, emittedValue);\n        if (shared.hasChanged(value, emittedValue) && shared.hasChanged(value, prevSetValue) && !shared.hasChanged(emittedValue, prevEmittedValue)) {\n          trigger();\n        }\n        prevSetValue = value;\n        prevEmittedValue = emittedValue;\n      }\n    };\n  });\n  res[Symbol.iterator] = () => {\n    let i2 = 0;\n    return {\n      next() {\n        if (i2 < 2) {\n          return { value: i2++ ? modifiers || shared.EMPTY_OBJ : res, done: false };\n        } else {\n          return { done: true };\n        }\n      }\n    };\n  };\n  return res;\n}\nconst getModelModifiers = (props, modelName) => {\n  return modelName === \"modelValue\" || modelName === \"model-value\" ? props.modelModifiers : props[`${modelName}Modifiers`] || props[`${shared.camelize(modelName)}Modifiers`] || props[`${shared.hyphenate(modelName)}Modifiers`];\n};\n\nfunction emit(instance, event, ...rawArgs) {\n  if (instance.isUnmounted) return;\n  const props = instance.vnode.props || shared.EMPTY_OBJ;\n  let args = rawArgs;\n  const isModelListener = event.startsWith(\"update:\");\n  const modifiers = isModelListener && getModelModifiers(props, event.slice(7));\n  if (modifiers) {\n    if (modifiers.trim) {\n      args = rawArgs.map((a) => shared.isString(a) ? a.trim() : a);\n    }\n    if (modifiers.number) {\n      args = rawArgs.map(shared.looseToNumber);\n    }\n  }\n  let handlerName;\n  let handler = props[handlerName = shared.toHandlerKey(event)] || // also try camelCase event handler (#2249)\n  props[handlerName = shared.toHandlerKey(shared.camelize(event))];\n  if (!handler && isModelListener) {\n    handler = props[handlerName = shared.toHandlerKey(shared.hyphenate(event))];\n  }\n  if (handler) {\n    callWithAsyncErrorHandling(\n      handler,\n      instance,\n      6,\n      args\n    );\n  }\n  const onceHandler = props[handlerName + `Once`];\n  if (onceHandler) {\n    if (!instance.emitted) {\n      instance.emitted = {};\n    } else if (instance.emitted[handlerName]) {\n      return;\n    }\n    instance.emitted[handlerName] = true;\n    callWithAsyncErrorHandling(\n      onceHandler,\n      instance,\n      6,\n      args\n    );\n  }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n  const cache = appContext.emitsCache;\n  const cached = cache.get(comp);\n  if (cached !== void 0) {\n    return cached;\n  }\n  const raw = comp.emits;\n  let normalized = {};\n  let hasExtends = false;\n  if (!shared.isFunction(comp)) {\n    const extendEmits = (raw2) => {\n      const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n      if (normalizedFromExtend) {\n        hasExtends = true;\n        shared.extend(normalized, normalizedFromExtend);\n      }\n    };\n    if (!asMixin && appContext.mixins.length) {\n      appContext.mixins.forEach(extendEmits);\n    }\n    if (comp.extends) {\n      extendEmits(comp.extends);\n    }\n    if (comp.mixins) {\n      comp.mixins.forEach(extendEmits);\n    }\n  }\n  if (!raw && !hasExtends) {\n    if (shared.isObject(comp)) {\n      cache.set(comp, null);\n    }\n    return null;\n  }\n  if (shared.isArray(raw)) {\n    raw.forEach((key) => normalized[key] = null);\n  } else {\n    shared.extend(normalized, raw);\n  }\n  if (shared.isObject(comp)) {\n    cache.set(comp, normalized);\n  }\n  return normalized;\n}\nfunction isEmitListener(options, key) {\n  if (!options || !shared.isOn(key)) {\n    return false;\n  }\n  key = key.slice(2).replace(/Once$/, \"\");\n  return shared.hasOwn(options, key[0].toLowerCase() + key.slice(1)) || shared.hasOwn(options, shared.hyphenate(key)) || shared.hasOwn(options, key);\n}\n\nfunction markAttrsAccessed() {\n}\nfunction renderComponentRoot(instance) {\n  const {\n    type: Component,\n    vnode,\n    proxy,\n    withProxy,\n    propsOptions: [propsOptions],\n    slots,\n    attrs,\n    emit,\n    render,\n    renderCache,\n    props,\n    data,\n    setupState,\n    ctx,\n    inheritAttrs\n  } = instance;\n  const prev = setCurrentRenderingInstance(instance);\n  let result;\n  let fallthroughAttrs;\n  try {\n    if (vnode.shapeFlag & 4) {\n      const proxyToUse = withProxy || proxy;\n      const thisProxy = false ? new Proxy(proxyToUse, {\n        get(target, key, receiver) {\n          warn(\n            `Property '${String(\n              key\n            )}' was accessed via 'this'. Avoid using 'this' in templates.`\n          );\n          return Reflect.get(target, key, receiver);\n        }\n      }) : proxyToUse;\n      result = normalizeVNode(\n        render.call(\n          thisProxy,\n          proxyToUse,\n          renderCache,\n          false ? shallowReadonly(props) : props,\n          setupState,\n          data,\n          ctx\n        )\n      );\n      fallthroughAttrs = attrs;\n    } else {\n      const render2 = Component;\n      if (false) ;\n      result = normalizeVNode(\n        render2.length > 1 ? render2(\n          false ? shallowReadonly(props) : props,\n          false ? {\n            get attrs() {\n              markAttrsAccessed();\n              return shallowReadonly(attrs);\n            },\n            slots,\n            emit\n          } : { attrs, slots, emit }\n        ) : render2(\n          false ? shallowReadonly(props) : props,\n          null\n        )\n      );\n      fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n    }\n  } catch (err) {\n    blockStack.length = 0;\n    handleError(err, instance, 1);\n    result = createVNode(Comment);\n  }\n  let root = result;\n  if (fallthroughAttrs && inheritAttrs !== false) {\n    const keys = Object.keys(fallthroughAttrs);\n    const { shapeFlag } = root;\n    if (keys.length) {\n      if (shapeFlag & (1 | 6)) {\n        if (propsOptions && keys.some(shared.isModelListener)) {\n          fallthroughAttrs = filterModelListeners(\n            fallthroughAttrs,\n            propsOptions\n          );\n        }\n        root = cloneVNode(root, fallthroughAttrs, false, true);\n      }\n    }\n  }\n  if (vnode.dirs) {\n    root = cloneVNode(root, null, false, true);\n    root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n  }\n  if (vnode.transition) {\n    setTransitionHooks(root, vnode.transition);\n  }\n  {\n    result = root;\n  }\n  setCurrentRenderingInstance(prev);\n  return result;\n}\nfunction filterSingleRoot(children, recurse = true) {\n  let singleRoot;\n  for (let i = 0; i < children.length; i++) {\n    const child = children[i];\n    if (isVNode(child)) {\n      if (child.type !== Comment || child.children === \"v-if\") {\n        if (singleRoot) {\n          return;\n        } else {\n          singleRoot = child;\n        }\n      }\n    } else {\n      return;\n    }\n  }\n  return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n  let res;\n  for (const key in attrs) {\n    if (key === \"class\" || key === \"style\" || shared.isOn(key)) {\n      (res || (res = {}))[key] = attrs[key];\n    }\n  }\n  return res;\n};\nconst filterModelListeners = (attrs, props) => {\n  const res = {};\n  for (const key in attrs) {\n    if (!shared.isModelListener(key) || !(key.slice(9) in props)) {\n      res[key] = attrs[key];\n    }\n  }\n  return res;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n  const { props: prevProps, children: prevChildren, component } = prevVNode;\n  const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n  const emits = component.emitsOptions;\n  if (nextVNode.dirs || nextVNode.transition) {\n    return true;\n  }\n  if (optimized && patchFlag >= 0) {\n    if (patchFlag & 1024) {\n      return true;\n    }\n    if (patchFlag & 16) {\n      if (!prevProps) {\n        return !!nextProps;\n      }\n      return hasPropsChanged(prevProps, nextProps, emits);\n    } else if (patchFlag & 8) {\n      const dynamicProps = nextVNode.dynamicProps;\n      for (let i = 0; i < dynamicProps.length; i++) {\n        const key = dynamicProps[i];\n        if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n          return true;\n        }\n      }\n    }\n  } else {\n    if (prevChildren || nextChildren) {\n      if (!nextChildren || !nextChildren.$stable) {\n        return true;\n      }\n    }\n    if (prevProps === nextProps) {\n      return false;\n    }\n    if (!prevProps) {\n      return !!nextProps;\n    }\n    if (!nextProps) {\n      return true;\n    }\n    return hasPropsChanged(prevProps, nextProps, emits);\n  }\n  return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n  const nextKeys = Object.keys(nextProps);\n  if (nextKeys.length !== Object.keys(prevProps).length) {\n    return true;\n  }\n  for (let i = 0; i < nextKeys.length; i++) {\n    const key = nextKeys[i];\n    if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n  while (parent) {\n    const root = parent.subTree;\n    if (root.suspense && root.suspense.activeBranch === vnode) {\n      root.el = vnode.el;\n    }\n    if (root === vnode) {\n      (vnode = parent.vnode).el = el;\n      parent = parent.parent;\n    } else {\n      break;\n    }\n  }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nlet suspenseId = 0;\nconst SuspenseImpl = {\n  name: \"Suspense\",\n  // In order to make Suspense tree-shakable, we need to avoid importing it\n  // directly in the renderer. The renderer checks for the __isSuspense flag\n  // on a vnode's type and calls the `process` method, passing in renderer\n  // internals.\n  __isSuspense: true,\n  process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n    if (n1 == null) {\n      mountSuspense(\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        parentSuspense,\n        namespace,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    } else {\n      if (parentSuspense && parentSuspense.deps > 0 && !n1.suspense.isInFallback) {\n        n2.suspense = n1.suspense;\n        n2.suspense.vnode = n2;\n        n2.el = n1.el;\n        return;\n      }\n      patchSuspense(\n        n1,\n        n2,\n        container,\n        anchor,\n        parentComponent,\n        namespace,\n        slotScopeIds,\n        optimized,\n        rendererInternals\n      );\n    }\n  },\n  hydrate: hydrateSuspense,\n  normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n  const eventListener = vnode.props && vnode.props[name];\n  if (shared.isFunction(eventListener)) {\n    eventListener();\n  }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals) {\n  const {\n    p: patch,\n    o: { createElement }\n  } = rendererInternals;\n  const hiddenContainer = createElement(\"div\");\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    container,\n    hiddenContainer,\n    anchor,\n    namespace,\n    slotScopeIds,\n    optimized,\n    rendererInternals\n  );\n  patch(\n    null,\n    suspense.pendingBranch = vnode.ssContent,\n    hiddenContainer,\n    null,\n    parentComponent,\n    suspense,\n    namespace,\n    slotScopeIds\n  );\n  if (suspense.deps > 0) {\n    triggerEvent(vnode, \"onPending\");\n    triggerEvent(vnode, \"onFallback\");\n    patch(\n      null,\n      vnode.ssFallback,\n      container,\n      anchor,\n      parentComponent,\n      null,\n      // fallback tree will not have suspense context\n      namespace,\n      slotScopeIds\n    );\n    setActiveBranch(suspense, vnode.ssFallback);\n  } else {\n    suspense.resolve(false, true);\n  }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, namespace, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n  const suspense = n2.suspense = n1.suspense;\n  suspense.vnode = n2;\n  n2.el = n1.el;\n  const newBranch = n2.ssContent;\n  const newFallback = n2.ssFallback;\n  const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n  if (pendingBranch) {\n    suspense.pendingBranch = newBranch;\n    if (isSameVNodeType(newBranch, pendingBranch)) {\n      patch(\n        pendingBranch,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else if (isInFallback) {\n        if (!isHydrating) {\n          patch(\n            activeBranch,\n            newFallback,\n            container,\n            anchor,\n            parentComponent,\n            null,\n            // fallback tree will not have suspense context\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          setActiveBranch(suspense, newFallback);\n        }\n      }\n    } else {\n      suspense.pendingId = suspenseId++;\n      if (isHydrating) {\n        suspense.isHydrating = false;\n        suspense.activeBranch = pendingBranch;\n      } else {\n        unmount(pendingBranch, parentComponent, suspense);\n      }\n      suspense.deps = 0;\n      suspense.effects.length = 0;\n      suspense.hiddenContainer = createElement(\"div\");\n      if (isInFallback) {\n        patch(\n          null,\n          newBranch,\n          suspense.hiddenContainer,\n          null,\n          parentComponent,\n          suspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        if (suspense.deps <= 0) {\n          suspense.resolve();\n        } else {\n          patch(\n            activeBranch,\n            newFallback,\n            container,\n            anchor,\n            parentComponent,\n            null,\n            // fallback tree will not have suspense context\n            namespace,\n            slotScopeIds,\n            optimized\n          );\n          setActiveBranch(suspense, newFallback);\n        }\n      } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n        patch(\n          activeBranch,\n          newBranch,\n          container,\n          anchor,\n          parentComponent,\n          suspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        suspense.resolve(true);\n      } else {\n        patch(\n          null,\n          newBranch,\n          suspense.hiddenContainer,\n          null,\n          parentComponent,\n          suspense,\n          namespace,\n          slotScopeIds,\n          optimized\n        );\n        if (suspense.deps <= 0) {\n          suspense.resolve();\n        }\n      }\n    }\n  } else {\n    if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n      patch(\n        activeBranch,\n        newBranch,\n        container,\n        anchor,\n        parentComponent,\n        suspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n      setActiveBranch(suspense, newBranch);\n    } else {\n      triggerEvent(n2, \"onPending\");\n      suspense.pendingBranch = newBranch;\n      if (newBranch.shapeFlag & 512) {\n        suspense.pendingId = newBranch.component.suspenseId;\n      } else {\n        suspense.pendingId = suspenseId++;\n      }\n      patch(\n        null,\n        newBranch,\n        suspense.hiddenContainer,\n        null,\n        parentComponent,\n        suspense,\n        namespace,\n        slotScopeIds,\n        optimized\n      );\n      if (suspense.deps <= 0) {\n        suspense.resolve();\n      } else {\n        const { timeout, pendingId } = suspense;\n        if (timeout > 0) {\n          setTimeout(() => {\n            if (suspense.pendingId === pendingId) {\n              suspense.fallback(newFallback);\n            }\n          }, timeout);\n        } else if (timeout === 0) {\n          suspense.fallback(newFallback);\n        }\n      }\n    }\n  }\n}\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, namespace, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n  const {\n    p: patch,\n    m: move,\n    um: unmount,\n    n: next,\n    o: { parentNode, remove }\n  } = rendererInternals;\n  let parentSuspenseId;\n  const isSuspensible = isVNodeSuspensible(vnode);\n  if (isSuspensible) {\n    if (parentSuspense && parentSuspense.pendingBranch) {\n      parentSuspenseId = parentSuspense.pendingId;\n      parentSuspense.deps++;\n    }\n  }\n  const timeout = vnode.props ? shared.toNumber(vnode.props.timeout) : void 0;\n  const initialAnchor = anchor;\n  const suspense = {\n    vnode,\n    parent: parentSuspense,\n    parentComponent,\n    namespace,\n    container,\n    hiddenContainer,\n    deps: 0,\n    pendingId: suspenseId++,\n    timeout: typeof timeout === \"number\" ? timeout : -1,\n    activeBranch: null,\n    pendingBranch: null,\n    isInFallback: !isHydrating,\n    isHydrating,\n    isUnmounted: false,\n    effects: [],\n    resolve(resume = false, sync = false) {\n      const {\n        vnode: vnode2,\n        activeBranch,\n        pendingBranch,\n        pendingId,\n        effects,\n        parentComponent: parentComponent2,\n        container: container2\n      } = suspense;\n      let delayEnter = false;\n      if (suspense.isHydrating) {\n        suspense.isHydrating = false;\n      } else if (!resume) {\n        delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n        if (delayEnter) {\n          activeBranch.transition.afterLeave = () => {\n            if (pendingId === suspense.pendingId) {\n              move(\n                pendingBranch,\n                container2,\n                anchor === initialAnchor ? next(activeBranch) : anchor,\n                0\n              );\n              queuePostFlushCb(effects);\n            }\n          };\n        }\n        if (activeBranch) {\n          if (parentNode(activeBranch.el) === container2) {\n            anchor = next(activeBranch);\n          }\n          unmount(activeBranch, parentComponent2, suspense, true);\n        }\n        if (!delayEnter) {\n          move(pendingBranch, container2, anchor, 0);\n        }\n      }\n      setActiveBranch(suspense, pendingBranch);\n      suspense.pendingBranch = null;\n      suspense.isInFallback = false;\n      let parent = suspense.parent;\n      let hasUnresolvedAncestor = false;\n      while (parent) {\n        if (parent.pendingBranch) {\n          parent.effects.push(...effects);\n          hasUnresolvedAncestor = true;\n          break;\n        }\n        parent = parent.parent;\n      }\n      if (!hasUnresolvedAncestor && !delayEnter) {\n        queuePostFlushCb(effects);\n      }\n      suspense.effects = [];\n      if (isSuspensible) {\n        if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n          parentSuspense.deps--;\n          if (parentSuspense.deps === 0 && !sync) {\n            parentSuspense.resolve();\n          }\n        }\n      }\n      triggerEvent(vnode2, \"onResolve\");\n    },\n    fallback(fallbackVNode) {\n      if (!suspense.pendingBranch) {\n        return;\n      }\n      const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, namespace: namespace2 } = suspense;\n      triggerEvent(vnode2, \"onFallback\");\n      const anchor2 = next(activeBranch);\n      const mountFallback = () => {\n        if (!suspense.isInFallback) {\n          return;\n        }\n        patch(\n          null,\n          fallbackVNode,\n          container2,\n          anchor2,\n          parentComponent2,\n          null,\n          // fallback tree will not have suspense context\n          namespace2,\n          slotScopeIds,\n          optimized\n        );\n        setActiveBranch(suspense, fallbackVNode);\n      };\n      const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n      if (delayEnter) {\n        activeBranch.transition.afterLeave = mountFallback;\n      }\n      suspense.isInFallback = true;\n      unmount(\n        activeBranch,\n        parentComponent2,\n        null,\n        // no suspense so unmount hooks fire now\n        true\n        // shouldRemove\n      );\n      if (!delayEnter) {\n        mountFallback();\n      }\n    },\n    move(container2, anchor2, type) {\n      suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n      suspense.container = container2;\n    },\n    next() {\n      return suspense.activeBranch && next(suspense.activeBranch);\n    },\n    registerDep(instance, setupRenderEffect, optimized2) {\n      const isInPendingSuspense = !!suspense.pendingBranch;\n      if (isInPendingSuspense) {\n        suspense.deps++;\n      }\n      const hydratedEl = instance.vnode.el;\n      instance.asyncDep.catch((err) => {\n        handleError(err, instance, 0);\n      }).then((asyncSetupResult) => {\n        if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n          return;\n        }\n        instance.asyncResolved = true;\n        const { vnode: vnode2 } = instance;\n        handleSetupResult(instance, asyncSetupResult, false);\n        if (hydratedEl) {\n          vnode2.el = hydratedEl;\n        }\n        const placeholder = !hydratedEl && instance.subTree.el;\n        setupRenderEffect(\n          instance,\n          vnode2,\n          // component may have been moved before resolve.\n          // if this is not a hydration, instance.subTree will be the comment\n          // placeholder.\n          parentNode(hydratedEl || instance.subTree.el),\n          // anchor will not be used if this is hydration, so only need to\n          // consider the comment placeholder case.\n          hydratedEl ? null : next(instance.subTree),\n          suspense,\n          namespace,\n          optimized2\n        );\n        if (placeholder) {\n          remove(placeholder);\n        }\n        updateHOCHostEl(instance, vnode2.el);\n        if (isInPendingSuspense && --suspense.deps === 0) {\n          suspense.resolve();\n        }\n      });\n    },\n    unmount(parentSuspense2, doRemove) {\n      suspense.isUnmounted = true;\n      if (suspense.activeBranch) {\n        unmount(\n          suspense.activeBranch,\n          parentComponent,\n          parentSuspense2,\n          doRemove\n        );\n      }\n      if (suspense.pendingBranch) {\n        unmount(\n          suspense.pendingBranch,\n          parentComponent,\n          parentSuspense2,\n          doRemove\n        );\n      }\n    }\n  };\n  return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n  const suspense = vnode.suspense = createSuspenseBoundary(\n    vnode,\n    parentSuspense,\n    parentComponent,\n    node.parentNode,\n    // eslint-disable-next-line no-restricted-globals\n    document.createElement(\"div\"),\n    null,\n    namespace,\n    slotScopeIds,\n    optimized,\n    rendererInternals,\n    true\n  );\n  const result = hydrateNode(\n    node,\n    suspense.pendingBranch = vnode.ssContent,\n    parentComponent,\n    suspense,\n    slotScopeIds,\n    optimized\n  );\n  if (suspense.deps === 0) {\n    suspense.resolve(false, true);\n  }\n  return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n  const { shapeFlag, children } = vnode;\n  const isSlotChildren = shapeFlag & 32;\n  vnode.ssContent = normalizeSuspenseSlot(\n    isSlotChildren ? children.default : children\n  );\n  vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n  let block;\n  if (shared.isFunction(s)) {\n    const trackBlock = isBlockTreeEnabled && s._c;\n    if (trackBlock) {\n      s._d = false;\n      openBlock();\n    }\n    s = s();\n    if (trackBlock) {\n      s._d = true;\n      block = currentBlock;\n      closeBlock();\n    }\n  }\n  if (shared.isArray(s)) {\n    const singleChild = filterSingleRoot(s);\n    s = singleChild;\n  }\n  s = normalizeVNode(s);\n  if (block && !s.dynamicChildren) {\n    s.dynamicChildren = block.filter((c) => c !== s);\n  }\n  return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n  if (suspense && suspense.pendingBranch) {\n    if (shared.isArray(fn)) {\n      suspense.effects.push(...fn);\n    } else {\n      suspense.effects.push(fn);\n    }\n  } else {\n    queuePostFlushCb(fn);\n  }\n}\nfunction setActiveBranch(suspense, branch) {\n  suspense.activeBranch = branch;\n  const { vnode, parentComponent } = suspense;\n  let el = branch.el;\n  while (!el && branch.component) {\n    branch = branch.component.subTree;\n    el = branch.el;\n  }\n  vnode.el = el;\n  if (parentComponent && parentComponent.subTree === vnode) {\n    parentComponent.vnode.el = el;\n    updateHOCHostEl(parentComponent, el);\n  }\n}\nfunction isVNodeSuspensible(vnode) {\n  const suspensible = vnode.props && vnode.props.suspensible;\n  return suspensible != null && suspensible !== false;\n}\n\nconst Fragment = Symbol.for(\"v-fgt\");\nconst Text = Symbol.for(\"v-txt\");\nconst Comment = Symbol.for(\"v-cmt\");\nconst Static = Symbol.for(\"v-stc\");\nconst blockStack = [];\nlet currentBlock = null;\nfunction openBlock(disableTracking = false) {\n  blockStack.push(currentBlock = disableTracking ? null : []);\n}\nfunction closeBlock() {\n  blockStack.pop();\n  currentBlock = blockStack[blockStack.length - 1] || null;\n}\nlet isBlockTreeEnabled = 1;\nfunction setBlockTracking(value, inVOnce = false) {\n  isBlockTreeEnabled += value;\n  if (value < 0 && currentBlock && inVOnce) {\n    currentBlock.hasOnce = true;\n  }\n}\nfunction setupBlock(vnode) {\n  vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || shared.EMPTY_ARR : null;\n  closeBlock();\n  if (isBlockTreeEnabled > 0 && currentBlock) {\n    currentBlock.push(vnode);\n  }\n  return vnode;\n}\nfunction createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {\n  return setupBlock(\n    createBaseVNode(\n      type,\n      props,\n      children,\n      patchFlag,\n      dynamicProps,\n      shapeFlag,\n      true\n    )\n  );\n}\nfunction createBlock(type, props, children, patchFlag, dynamicProps) {\n  return setupBlock(\n    createVNode(\n      type,\n      props,\n      children,\n      patchFlag,\n      dynamicProps,\n      true\n    )\n  );\n}\nfunction isVNode(value) {\n  return value ? value.__v_isVNode === true : false;\n}\nfunction isSameVNodeType(n1, n2) {\n  return n1.type === n2.type && n1.key === n2.key;\n}\nfunction transformVNodeArgs(transformer) {\n}\nconst normalizeKey = ({ key }) => key != null ? key : null;\nconst normalizeRef = ({\n  ref,\n  ref_key,\n  ref_for\n}) => {\n  if (typeof ref === \"number\") {\n    ref = \"\" + ref;\n  }\n  return ref != null ? shared.isString(ref) || reactivity.isRef(ref) || shared.isFunction(ref) ? { i: currentRenderingInstance, r: ref, k: ref_key, f: !!ref_for } : ref : null;\n};\nfunction createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {\n  const vnode = {\n    __v_isVNode: true,\n    __v_skip: true,\n    type,\n    props,\n    key: props && normalizeKey(props),\n    ref: props && normalizeRef(props),\n    scopeId: currentScopeId,\n    slotScopeIds: null,\n    children,\n    component: null,\n    suspense: null,\n    ssContent: null,\n    ssFallback: null,\n    dirs: null,\n    transition: null,\n    el: null,\n    anchor: null,\n    target: null,\n    targetStart: null,\n    targetAnchor: null,\n    staticCount: 0,\n    shapeFlag,\n    patchFlag,\n    dynamicProps,\n    dynamicChildren: null,\n    appContext: null,\n    ctx: currentRenderingInstance\n  };\n  if (needFullChildrenNormalization) {\n    normalizeChildren(vnode, children);\n    if (shapeFlag & 128) {\n      type.normalize(vnode);\n    }\n  } else if (children) {\n    vnode.shapeFlag |= shared.isString(children) ? 8 : 16;\n  }\n  if (isBlockTreeEnabled > 0 && // avoid a block node from tracking itself\n  !isBlockNode && // has current parent block\n  currentBlock && // presence of a patch flag indicates this node needs patching on updates.\n  // component nodes also should always be patched, because even if the\n  // component doesn't need to update, it needs to persist the instance on to\n  // the next vnode so that it can be properly unmounted later.\n  (vnode.patchFlag > 0 || shapeFlag & 6) && // the EVENTS flag is only for hydration and if it is the only flag, the\n  // vnode should not be considered dynamic due to handler caching.\n  vnode.patchFlag !== 32) {\n    currentBlock.push(vnode);\n  }\n  return vnode;\n}\nconst createVNode = _createVNode;\nfunction _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {\n  if (!type || type === NULL_DYNAMIC_COMPONENT) {\n    type = Comment;\n  }\n  if (isVNode(type)) {\n    const cloned = cloneVNode(\n      type,\n      props,\n      true\n      /* mergeRef: true */\n    );\n    if (children) {\n      normalizeChildren(cloned, children);\n    }\n    if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock) {\n      if (cloned.shapeFlag & 6) {\n        currentBlock[currentBlock.indexOf(type)] = cloned;\n      } else {\n        currentBlock.push(cloned);\n      }\n    }\n    cloned.patchFlag = -2;\n    return cloned;\n  }\n  if (isClassComponent(type)) {\n    type = type.__vccOpts;\n  }\n  if (props) {\n    props = guardReactiveProps(props);\n    let { class: klass, style } = props;\n    if (klass && !shared.isString(klass)) {\n      props.class = shared.normalizeClass(klass);\n    }\n    if (shared.isObject(style)) {\n      if (reactivity.isProxy(style) && !shared.isArray(style)) {\n        style = shared.extend({}, style);\n      }\n      props.style = shared.normalizeStyle(style);\n    }\n  }\n  const shapeFlag = shared.isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : shared.isObject(type) ? 4 : shared.isFunction(type) ? 2 : 0;\n  return createBaseVNode(\n    type,\n    props,\n    children,\n    patchFlag,\n    dynamicProps,\n    shapeFlag,\n    isBlockNode,\n    true\n  );\n}\nfunction guardReactiveProps(props) {\n  if (!props) return null;\n  return reactivity.isProxy(props) || isInternalObject(props) ? shared.extend({}, props) : props;\n}\nfunction cloneVNode(vnode, extraProps, mergeRef = false, cloneTransition = false) {\n  const { props, ref, patchFlag, children, transition } = vnode;\n  const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;\n  const cloned = {\n    __v_isVNode: true,\n    __v_skip: true,\n    type: vnode.type,\n    props: mergedProps,\n    key: mergedProps && normalizeKey(mergedProps),\n    ref: extraProps && extraProps.ref ? (\n      // #2078 in the case of <component :is=\"vnode\" ref=\"extra\"/>\n      // if the vnode itself already has a ref, cloneVNode will need to merge\n      // the refs so the single vnode can be set on multiple refs\n      mergeRef && ref ? shared.isArray(ref) ? ref.concat(normalizeRef(extraProps)) : [ref, normalizeRef(extraProps)] : normalizeRef(extraProps)\n    ) : ref,\n    scopeId: vnode.scopeId,\n    slotScopeIds: vnode.slotScopeIds,\n    children: children,\n    target: vnode.target,\n    targetStart: vnode.targetStart,\n    targetAnchor: vnode.targetAnchor,\n    staticCount: vnode.staticCount,\n    shapeFlag: vnode.shapeFlag,\n    // if the vnode is cloned with extra props, we can no longer assume its\n    // existing patch flag to be reliable and need to add the FULL_PROPS flag.\n    // note: preserve flag for fragments since they use the flag for children\n    // fast paths only.\n    patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,\n    dynamicProps: vnode.dynamicProps,\n    dynamicChildren: vnode.dynamicChildren,\n    appContext: vnode.appContext,\n    dirs: vnode.dirs,\n    transition,\n    // These should technically only be non-null on mounted VNodes. However,\n    // they *should* be copied for kept-alive vnodes. So we just always copy\n    // them since them being non-null during a mount doesn't affect the logic as\n    // they will simply be overwritten.\n    component: vnode.component,\n    suspense: vnode.suspense,\n    ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),\n    ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),\n    placeholder: vnode.placeholder,\n    el: vnode.el,\n    anchor: vnode.anchor,\n    ctx: vnode.ctx,\n    ce: vnode.ce\n  };\n  if (transition && cloneTransition) {\n    setTransitionHooks(\n      cloned,\n      transition.clone(cloned)\n    );\n  }\n  return cloned;\n}\nfunction createTextVNode(text = \" \", flag = 0) {\n  return createVNode(Text, null, text, flag);\n}\nfunction createStaticVNode(content, numberOfNodes) {\n  const vnode = createVNode(Static, null, content);\n  vnode.staticCount = numberOfNodes;\n  return vnode;\n}\nfunction createCommentVNode(text = \"\", asBlock = false) {\n  return asBlock ? (openBlock(), createBlock(Comment, null, text)) : createVNode(Comment, null, text);\n}\nfunction normalizeVNode(child) {\n  if (child == null || typeof child === \"boolean\") {\n    return createVNode(Comment);\n  } else if (shared.isArray(child)) {\n    return createVNode(\n      Fragment,\n      null,\n      // #3666, avoid reference pollution when reusing vnode\n      child.slice()\n    );\n  } else if (isVNode(child)) {\n    return cloneIfMounted(child);\n  } else {\n    return createVNode(Text, null, String(child));\n  }\n}\nfunction cloneIfMounted(child) {\n  return child.el === null && child.patchFlag !== -1 || child.memo ? child : cloneVNode(child);\n}\nfunction normalizeChildren(vnode, children) {\n  let type = 0;\n  const { shapeFlag } = vnode;\n  if (children == null) {\n    children = null;\n  } else if (shared.isArray(children)) {\n    type = 16;\n  } else if (typeof children === \"object\") {\n    if (shapeFlag & (1 | 64)) {\n      const slot = children.default;\n      if (slot) {\n        slot._c && (slot._d = false);\n        normalizeChildren(vnode, slot());\n        slot._c && (slot._d = true);\n      }\n      return;\n    } else {\n      type = 32;\n      const slotFlag = children._;\n      if (!slotFlag && !isInternalObject(children)) {\n        children._ctx = currentRenderingInstance;\n      } else if (slotFlag === 3 && currentRenderingInstance) {\n        if (currentRenderingInstance.slots._ === 1) {\n          children._ = 1;\n        } else {\n          children._ = 2;\n          vnode.patchFlag |= 1024;\n        }\n      }\n    }\n  } else if (shared.isFunction(children)) {\n    children = { default: children, _ctx: currentRenderingInstance };\n    type = 32;\n  } else {\n    children = String(children);\n    if (shapeFlag & 64) {\n      type = 16;\n      children = [createTextVNode(children)];\n    } else {\n      type = 8;\n    }\n  }\n  vnode.children = children;\n  vnode.shapeFlag |= type;\n}\nfunction mergeProps(...args) {\n  const ret = {};\n  for (let i = 0; i < args.length; i++) {\n    const toMerge = args[i];\n    for (const key in toMerge) {\n      if (key === \"class\") {\n        if (ret.class !== toMerge.class) {\n          ret.class = shared.normalizeClass([ret.class, toMerge.class]);\n        }\n      } else if (key === \"style\") {\n        ret.style = shared.normalizeStyle([ret.style, toMerge.style]);\n      } else if (shared.isOn(key)) {\n        const existing = ret[key];\n        const incoming = toMerge[key];\n        if (incoming && existing !== incoming && !(shared.isArray(existing) && existing.includes(incoming))) {\n          ret[key] = existing ? [].concat(existing, incoming) : incoming;\n        }\n      } else if (key !== \"\") {\n        ret[key] = toMerge[key];\n      }\n    }\n  }\n  return ret;\n}\nfunction invokeVNodeHook(hook, instance, vnode, prevVNode = null) {\n  callWithAsyncErrorHandling(hook, instance, 7, [\n    vnode,\n    prevVNode\n  ]);\n}\n\nconst emptyAppContext = createAppContext();\nlet uid = 0;\nfunction createComponentInstance(vnode, parent, suspense) {\n  const type = vnode.type;\n  const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;\n  const instance = {\n    uid: uid++,\n    vnode,\n    type,\n    parent,\n    appContext,\n    root: null,\n    // to be immediately set\n    next: null,\n    subTree: null,\n    // will be set synchronously right after creation\n    effect: null,\n    update: null,\n    // will be set synchronously right after creation\n    job: null,\n    scope: new reactivity.EffectScope(\n      true\n      /* detached */\n    ),\n    render: null,\n    proxy: null,\n    exposed: null,\n    exposeProxy: null,\n    withProxy: null,\n    provides: parent ? parent.provides : Object.create(appContext.provides),\n    ids: parent ? parent.ids : [\"\", 0, 0],\n    accessCache: null,\n    renderCache: [],\n    // local resolved assets\n    components: null,\n    directives: null,\n    // resolved props and emits options\n    propsOptions: normalizePropsOptions(type, appContext),\n    emitsOptions: normalizeEmitsOptions(type, appContext),\n    // emit\n    emit: null,\n    // to be set immediately\n    emitted: null,\n    // props default value\n    propsDefaults: shared.EMPTY_OBJ,\n    // inheritAttrs\n    inheritAttrs: type.inheritAttrs,\n    // state\n    ctx: shared.EMPTY_OBJ,\n    data: shared.EMPTY_OBJ,\n    props: shared.EMPTY_OBJ,\n    attrs: shared.EMPTY_OBJ,\n    slots: shared.EMPTY_OBJ,\n    refs: shared.EMPTY_OBJ,\n    setupState: shared.EMPTY_OBJ,\n    setupContext: null,\n    // suspense related\n    suspense,\n    suspenseId: suspense ? suspense.pendingId : 0,\n    asyncDep: null,\n    asyncResolved: false,\n    // lifecycle hooks\n    // not using enums here because it results in computed properties\n    isMounted: false,\n    isUnmounted: false,\n    isDeactivated: false,\n    bc: null,\n    c: null,\n    bm: null,\n    m: null,\n    bu: null,\n    u: null,\n    um: null,\n    bum: null,\n    da: null,\n    a: null,\n    rtg: null,\n    rtc: null,\n    ec: null,\n    sp: null\n  };\n  {\n    instance.ctx = { _: instance };\n  }\n  instance.root = parent ? parent.root : instance;\n  instance.emit = emit.bind(null, instance);\n  if (vnode.ce) {\n    vnode.ce(instance);\n  }\n  return instance;\n}\nlet currentInstance = null;\nconst getCurrentInstance = () => currentInstance || currentRenderingInstance;\nlet internalSetCurrentInstance;\nlet setInSSRSetupState;\n{\n  const g = shared.getGlobalThis();\n  const registerGlobalSetter = (key, setter) => {\n    let setters;\n    if (!(setters = g[key])) setters = g[key] = [];\n    setters.push(setter);\n    return (v) => {\n      if (setters.length > 1) setters.forEach((set) => set(v));\n      else setters[0](v);\n    };\n  };\n  internalSetCurrentInstance = registerGlobalSetter(\n    `__VUE_INSTANCE_SETTERS__`,\n    (v) => currentInstance = v\n  );\n  setInSSRSetupState = registerGlobalSetter(\n    `__VUE_SSR_SETTERS__`,\n    (v) => isInSSRComponentSetup = v\n  );\n}\nconst setCurrentInstance = (instance) => {\n  const prev = currentInstance;\n  internalSetCurrentInstance(instance);\n  instance.scope.on();\n  return () => {\n    instance.scope.off();\n    internalSetCurrentInstance(prev);\n  };\n};\nconst unsetCurrentInstance = () => {\n  currentInstance && currentInstance.scope.off();\n  internalSetCurrentInstance(null);\n};\nfunction isStatefulComponent(instance) {\n  return instance.vnode.shapeFlag & 4;\n}\nlet isInSSRComponentSetup = false;\nfunction setupComponent(instance, isSSR = false, optimized = false) {\n  isSSR && setInSSRSetupState(isSSR);\n  const { props, children } = instance.vnode;\n  const isStateful = isStatefulComponent(instance);\n  initProps(instance, props, isStateful, isSSR);\n  initSlots(instance, children, optimized || isSSR);\n  const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;\n  isSSR && setInSSRSetupState(false);\n  return setupResult;\n}\nfunction setupStatefulComponent(instance, isSSR) {\n  const Component = instance.type;\n  instance.accessCache = /* @__PURE__ */ Object.create(null);\n  instance.proxy = new Proxy(instance.ctx, PublicInstanceProxyHandlers);\n  const { setup } = Component;\n  if (setup) {\n    reactivity.pauseTracking();\n    const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;\n    const reset = setCurrentInstance(instance);\n    const setupResult = callWithErrorHandling(\n      setup,\n      instance,\n      0,\n      [\n        instance.props,\n        setupContext\n      ]\n    );\n    const isAsyncSetup = shared.isPromise(setupResult);\n    reactivity.resetTracking();\n    reset();\n    if ((isAsyncSetup || instance.sp) && !isAsyncWrapper(instance)) {\n      markAsyncBoundary(instance);\n    }\n    if (isAsyncSetup) {\n      setupResult.then(unsetCurrentInstance, unsetCurrentInstance);\n      if (isSSR) {\n        return setupResult.then((resolvedResult) => {\n          handleSetupResult(instance, resolvedResult, isSSR);\n        }).catch((e) => {\n          handleError(e, instance, 0);\n        });\n      } else {\n        instance.asyncDep = setupResult;\n      }\n    } else {\n      handleSetupResult(instance, setupResult, isSSR);\n    }\n  } else {\n    finishComponentSetup(instance, isSSR);\n  }\n}\nfunction handleSetupResult(instance, setupResult, isSSR) {\n  if (shared.isFunction(setupResult)) {\n    if (instance.type.__ssrInlineRender) {\n      instance.ssrRender = setupResult;\n    } else {\n      instance.render = setupResult;\n    }\n  } else if (shared.isObject(setupResult)) {\n    instance.setupState = reactivity.proxyRefs(setupResult);\n  } else ;\n  finishComponentSetup(instance, isSSR);\n}\nlet compile;\nlet installWithProxy;\nfunction registerRuntimeCompiler(_compile) {\n  compile = _compile;\n  installWithProxy = (i) => {\n    if (i.render._rc) {\n      i.withProxy = new Proxy(i.ctx, RuntimeCompiledPublicInstanceProxyHandlers);\n    }\n  };\n}\nconst isRuntimeOnly = () => !compile;\nfunction finishComponentSetup(instance, isSSR, skipOptions) {\n  const Component = instance.type;\n  if (!instance.render) {\n    if (!isSSR && compile && !Component.render) {\n      const template = Component.template || resolveMergedOptions(instance).template;\n      if (template) {\n        const { isCustomElement, compilerOptions } = instance.appContext.config;\n        const { delimiters, compilerOptions: componentCompilerOptions } = Component;\n        const finalCompilerOptions = shared.extend(\n          shared.extend(\n            {\n              isCustomElement,\n              delimiters\n            },\n            compilerOptions\n          ),\n          componentCompilerOptions\n        );\n        Component.render = compile(template, finalCompilerOptions);\n      }\n    }\n    instance.render = Component.render || shared.NOOP;\n    if (installWithProxy) {\n      installWithProxy(instance);\n    }\n  }\n  {\n    const reset = setCurrentInstance(instance);\n    reactivity.pauseTracking();\n    try {\n      applyOptions(instance);\n    } finally {\n      reactivity.resetTracking();\n      reset();\n    }\n  }\n}\nconst attrsProxyHandlers = {\n  get(target, key) {\n    reactivity.track(target, \"get\", \"\");\n    return target[key];\n  }\n};\nfunction createSetupContext(instance) {\n  const expose = (exposed) => {\n    instance.exposed = exposed || {};\n  };\n  {\n    return {\n      attrs: new Proxy(instance.attrs, attrsProxyHandlers),\n      slots: instance.slots,\n      emit: instance.emit,\n      expose\n    };\n  }\n}\nfunction getComponentPublicInstance(instance) {\n  if (instance.exposed) {\n    return instance.exposeProxy || (instance.exposeProxy = new Proxy(reactivity.proxyRefs(reactivity.markRaw(instance.exposed)), {\n      get(target, key) {\n        if (key in target) {\n          return target[key];\n        } else if (key in publicPropertiesMap) {\n          return publicPropertiesMap[key](instance);\n        }\n      },\n      has(target, key) {\n        return key in target || key in publicPropertiesMap;\n      }\n    }));\n  } else {\n    return instance.proxy;\n  }\n}\nfunction getComponentName(Component, includeInferred = true) {\n  return shared.isFunction(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;\n}\nfunction isClassComponent(value) {\n  return shared.isFunction(value) && \"__vccOpts\" in value;\n}\n\nconst computed = (getterOrOptions, debugOptions) => {\n  const c = reactivity.computed(getterOrOptions, debugOptions, isInSSRComponentSetup);\n  return c;\n};\n\nfunction h(type, propsOrChildren, children) {\n  const l = arguments.length;\n  if (l === 2) {\n    if (shared.isObject(propsOrChildren) && !shared.isArray(propsOrChildren)) {\n      if (isVNode(propsOrChildren)) {\n        return createVNode(type, null, [propsOrChildren]);\n      }\n      return createVNode(type, propsOrChildren);\n    } else {\n      return createVNode(type, null, propsOrChildren);\n    }\n  } else {\n    if (l > 3) {\n      children = Array.prototype.slice.call(arguments, 2);\n    } else if (l === 3 && isVNode(children)) {\n      children = [children];\n    }\n    return createVNode(type, propsOrChildren, children);\n  }\n}\n\nfunction initCustomFormatter() {\n  {\n    return;\n  }\n}\n\nfunction withMemo(memo, render, cache, index) {\n  const cached = cache[index];\n  if (cached && isMemoSame(cached, memo)) {\n    return cached;\n  }\n  const ret = render();\n  ret.memo = memo.slice();\n  ret.cacheIndex = index;\n  return cache[index] = ret;\n}\nfunction isMemoSame(cached, memo) {\n  const prev = cached.memo;\n  if (prev.length != memo.length) {\n    return false;\n  }\n  for (let i = 0; i < prev.length; i++) {\n    if (shared.hasChanged(prev[i], memo[i])) {\n      return false;\n    }\n  }\n  if (isBlockTreeEnabled > 0 && currentBlock) {\n    currentBlock.push(cached);\n  }\n  return true;\n}\n\nconst version = \"3.5.18\";\nconst warn$1 = shared.NOOP;\nconst ErrorTypeStrings = ErrorTypeStrings$1 ;\nconst devtools = void 0;\nconst setDevtoolsHook = shared.NOOP;\nconst _ssrUtils = {\n  createComponentInstance,\n  setupComponent,\n  renderComponentRoot,\n  setCurrentRenderingInstance,\n  isVNode: isVNode,\n  normalizeVNode,\n  getComponentPublicInstance,\n  ensureValidVNode,\n  pushWarningContext,\n  popWarningContext\n};\nconst ssrUtils = _ssrUtils ;\nconst resolveFilter = null;\nconst compatUtils = null;\nconst DeprecationTypes = null;\n\nexports.EffectScope = reactivity.EffectScope;\nexports.ReactiveEffect = reactivity.ReactiveEffect;\nexports.TrackOpTypes = reactivity.TrackOpTypes;\nexports.TriggerOpTypes = reactivity.TriggerOpTypes;\nexports.customRef = reactivity.customRef;\nexports.effect = reactivity.effect;\nexports.effectScope = reactivity.effectScope;\nexports.getCurrentScope = reactivity.getCurrentScope;\nexports.getCurrentWatcher = reactivity.getCurrentWatcher;\nexports.isProxy = reactivity.isProxy;\nexports.isReactive = reactivity.isReactive;\nexports.isReadonly = reactivity.isReadonly;\nexports.isRef = reactivity.isRef;\nexports.isShallow = reactivity.isShallow;\nexports.markRaw = reactivity.markRaw;\nexports.onScopeDispose = reactivity.onScopeDispose;\nexports.onWatcherCleanup = reactivity.onWatcherCleanup;\nexports.proxyRefs = reactivity.proxyRefs;\nexports.reactive = reactivity.reactive;\nexports.readonly = reactivity.readonly;\nexports.ref = reactivity.ref;\nexports.shallowReactive = reactivity.shallowReactive;\nexports.shallowReadonly = reactivity.shallowReadonly;\nexports.shallowRef = reactivity.shallowRef;\nexports.stop = reactivity.stop;\nexports.toRaw = reactivity.toRaw;\nexports.toRef = reactivity.toRef;\nexports.toRefs = reactivity.toRefs;\nexports.toValue = reactivity.toValue;\nexports.triggerRef = reactivity.triggerRef;\nexports.unref = reactivity.unref;\nexports.camelize = shared.camelize;\nexports.capitalize = shared.capitalize;\nexports.normalizeClass = shared.normalizeClass;\nexports.normalizeProps = shared.normalizeProps;\nexports.normalizeStyle = shared.normalizeStyle;\nexports.toDisplayString = shared.toDisplayString;\nexports.toHandlerKey = shared.toHandlerKey;\nexports.BaseTransition = BaseTransition;\nexports.BaseTransitionPropsValidators = BaseTransitionPropsValidators;\nexports.Comment = Comment;\nexports.DeprecationTypes = DeprecationTypes;\nexports.ErrorCodes = ErrorCodes;\nexports.ErrorTypeStrings = ErrorTypeStrings;\nexports.Fragment = Fragment;\nexports.KeepAlive = KeepAlive;\nexports.Static = Static;\nexports.Suspense = Suspense;\nexports.Teleport = Teleport;\nexports.Text = Text;\nexports.assertNumber = assertNumber;\nexports.callWithAsyncErrorHandling = callWithAsyncErrorHandling;\nexports.callWithErrorHandling = callWithErrorHandling;\nexports.cloneVNode = cloneVNode;\nexports.compatUtils = compatUtils;\nexports.computed = computed;\nexports.createBlock = createBlock;\nexports.createCommentVNode = createCommentVNode;\nexports.createElementBlock = createElementBlock;\nexports.createElementVNode = createBaseVNode;\nexports.createHydrationRenderer = createHydrationRenderer;\nexports.createPropsRestProxy = createPropsRestProxy;\nexports.createRenderer = createRenderer;\nexports.createSlots = createSlots;\nexports.createStaticVNode = createStaticVNode;\nexports.createTextVNode = createTextVNode;\nexports.createVNode = createVNode;\nexports.defineAsyncComponent = defineAsyncComponent;\nexports.defineComponent = defineComponent;\nexports.defineEmits = defineEmits;\nexports.defineExpose = defineExpose;\nexports.defineModel = defineModel;\nexports.defineOptions = defineOptions;\nexports.defineProps = defineProps;\nexports.defineSlots = defineSlots;\nexports.devtools = devtools;\nexports.getCurrentInstance = getCurrentInstance;\nexports.getTransitionRawChildren = getTransitionRawChildren;\nexports.guardReactiveProps = guardReactiveProps;\nexports.h = h;\nexports.handleError = handleError;\nexports.hasInjectionContext = hasInjectionContext;\nexports.hydrateOnIdle = hydrateOnIdle;\nexports.hydrateOnInteraction = hydrateOnInteraction;\nexports.hydrateOnMediaQuery = hydrateOnMediaQuery;\nexports.hydrateOnVisible = hydrateOnVisible;\nexports.initCustomFormatter = initCustomFormatter;\nexports.inject = inject;\nexports.isMemoSame = isMemoSame;\nexports.isRuntimeOnly = isRuntimeOnly;\nexports.isVNode = isVNode;\nexports.mergeDefaults = mergeDefaults;\nexports.mergeModels = mergeModels;\nexports.mergeProps = mergeProps;\nexports.nextTick = nextTick;\nexports.onActivated = onActivated;\nexports.onBeforeMount = onBeforeMount;\nexports.onBeforeUnmount = onBeforeUnmount;\nexports.onBeforeUpdate = onBeforeUpdate;\nexports.onDeactivated = onDeactivated;\nexports.onErrorCaptured = onErrorCaptured;\nexports.onMounted = onMounted;\nexports.onRenderTracked = onRenderTracked;\nexports.onRenderTriggered = onRenderTriggered;\nexports.onServerPrefetch = onServerPrefetch;\nexports.onUnmounted = onUnmounted;\nexports.onUpdated = onUpdated;\nexports.openBlock = openBlock;\nexports.popScopeId = popScopeId;\nexports.provide = provide;\nexports.pushScopeId = pushScopeId;\nexports.queuePostFlushCb = queuePostFlushCb;\nexports.registerRuntimeCompiler = registerRuntimeCompiler;\nexports.renderList = renderList;\nexports.renderSlot = renderSlot;\nexports.resolveComponent = resolveComponent;\nexports.resolveDirective = resolveDirective;\nexports.resolveDynamicComponent = resolveDynamicComponent;\nexports.resolveFilter = resolveFilter;\nexports.resolveTransitionHooks = resolveTransitionHooks;\nexports.setBlockTracking = setBlockTracking;\nexports.setDevtoolsHook = setDevtoolsHook;\nexports.setTransitionHooks = setTransitionHooks;\nexports.ssrContextKey = ssrContextKey;\nexports.ssrUtils = ssrUtils;\nexports.toHandlers = toHandlers;\nexports.transformVNodeArgs = transformVNodeArgs;\nexports.useAttrs = useAttrs;\nexports.useId = useId;\nexports.useModel = useModel;\nexports.useSSRContext = useSSRContext;\nexports.useSlots = useSlots;\nexports.useTemplateRef = useTemplateRef;\nexports.useTransitionState = useTransitionState;\nexports.version = version;\nexports.warn = warn$1;\nexports.watch = watch;\nexports.watchEffect = watchEffect;\nexports.watchPostEffect = watchPostEffect;\nexports.watchSyncEffect = watchSyncEffect;\nexports.withAsyncContext = withAsyncContext;\nexports.withCtx = withCtx;\nexports.withDefaults = withDefaults;\nexports.withDirectives = withDirectives;\nexports.withMemo = withMemo;\nexports.withScopeId = withScopeId;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/runtime-core.cjs.prod.js')\n} else {\n  module.exports = require('./dist/runtime-core.cjs.js')\n}\n","/**\n* @vue/runtime-dom v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar runtimeCore = require('@vue/runtime-core');\nvar shared = require('@vue/shared');\n\nlet policy = void 0;\nconst tt = typeof window !== \"undefined\" && window.trustedTypes;\nif (tt) {\n  try {\n    policy = /* @__PURE__ */ tt.createPolicy(\"vue\", {\n      createHTML: (val) => val\n    });\n  } catch (e) {\n  }\n}\nconst unsafeToTrustedHTML = policy ? (val) => policy.createHTML(val) : (val) => val;\nconst svgNS = \"http://www.w3.org/2000/svg\";\nconst mathmlNS = \"http://www.w3.org/1998/Math/MathML\";\nconst doc = typeof document !== \"undefined\" ? document : null;\nconst templateContainer = doc && /* @__PURE__ */ doc.createElement(\"template\");\nconst nodeOps = {\n  insert: (child, parent, anchor) => {\n    parent.insertBefore(child, anchor || null);\n  },\n  remove: (child) => {\n    const parent = child.parentNode;\n    if (parent) {\n      parent.removeChild(child);\n    }\n  },\n  createElement: (tag, namespace, is, props) => {\n    const el = namespace === \"svg\" ? doc.createElementNS(svgNS, tag) : namespace === \"mathml\" ? doc.createElementNS(mathmlNS, tag) : is ? doc.createElement(tag, { is }) : doc.createElement(tag);\n    if (tag === \"select\" && props && props.multiple != null) {\n      el.setAttribute(\"multiple\", props.multiple);\n    }\n    return el;\n  },\n  createText: (text) => doc.createTextNode(text),\n  createComment: (text) => doc.createComment(text),\n  setText: (node, text) => {\n    node.nodeValue = text;\n  },\n  setElementText: (el, text) => {\n    el.textContent = text;\n  },\n  parentNode: (node) => node.parentNode,\n  nextSibling: (node) => node.nextSibling,\n  querySelector: (selector) => doc.querySelector(selector),\n  setScopeId(el, id) {\n    el.setAttribute(id, \"\");\n  },\n  // __UNSAFE__\n  // Reason: innerHTML.\n  // Static content here can only come from compiled templates.\n  // As long as the user only uses trusted templates, this is safe.\n  insertStaticContent(content, parent, anchor, namespace, start, end) {\n    const before = anchor ? anchor.previousSibling : parent.lastChild;\n    if (start && (start === end || start.nextSibling)) {\n      while (true) {\n        parent.insertBefore(start.cloneNode(true), anchor);\n        if (start === end || !(start = start.nextSibling)) break;\n      }\n    } else {\n      templateContainer.innerHTML = unsafeToTrustedHTML(\n        namespace === \"svg\" ? `<svg>${content}</svg>` : namespace === \"mathml\" ? `<math>${content}</math>` : content\n      );\n      const template = templateContainer.content;\n      if (namespace === \"svg\" || namespace === \"mathml\") {\n        const wrapper = template.firstChild;\n        while (wrapper.firstChild) {\n          template.appendChild(wrapper.firstChild);\n        }\n        template.removeChild(wrapper);\n      }\n      parent.insertBefore(template, anchor);\n    }\n    return [\n      // first\n      before ? before.nextSibling : parent.firstChild,\n      // last\n      anchor ? anchor.previousSibling : parent.lastChild\n    ];\n  }\n};\n\nconst TRANSITION = \"transition\";\nconst ANIMATION = \"animation\";\nconst vtcKey = Symbol(\"_vtc\");\nconst DOMTransitionPropsValidators = {\n  name: String,\n  type: String,\n  css: {\n    type: Boolean,\n    default: true\n  },\n  duration: [String, Number, Object],\n  enterFromClass: String,\n  enterActiveClass: String,\n  enterToClass: String,\n  appearFromClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  leaveFromClass: String,\n  leaveActiveClass: String,\n  leaveToClass: String\n};\nconst TransitionPropsValidators = /* @__PURE__ */ shared.extend(\n  {},\n  runtimeCore.BaseTransitionPropsValidators,\n  DOMTransitionPropsValidators\n);\nconst decorate$1 = (t) => {\n  t.displayName = \"Transition\";\n  t.props = TransitionPropsValidators;\n  return t;\n};\nconst Transition = /* @__PURE__ */ decorate$1(\n  (props, { slots }) => runtimeCore.h(runtimeCore.BaseTransition, resolveTransitionProps(props), slots)\n);\nconst callHook = (hook, args = []) => {\n  if (shared.isArray(hook)) {\n    hook.forEach((h2) => h2(...args));\n  } else if (hook) {\n    hook(...args);\n  }\n};\nconst hasExplicitCallback = (hook) => {\n  return hook ? shared.isArray(hook) ? hook.some((h2) => h2.length > 1) : hook.length > 1 : false;\n};\nfunction resolveTransitionProps(rawProps) {\n  const baseProps = {};\n  for (const key in rawProps) {\n    if (!(key in DOMTransitionPropsValidators)) {\n      baseProps[key] = rawProps[key];\n    }\n  }\n  if (rawProps.css === false) {\n    return baseProps;\n  }\n  const {\n    name = \"v\",\n    type,\n    duration,\n    enterFromClass = `${name}-enter-from`,\n    enterActiveClass = `${name}-enter-active`,\n    enterToClass = `${name}-enter-to`,\n    appearFromClass = enterFromClass,\n    appearActiveClass = enterActiveClass,\n    appearToClass = enterToClass,\n    leaveFromClass = `${name}-leave-from`,\n    leaveActiveClass = `${name}-leave-active`,\n    leaveToClass = `${name}-leave-to`\n  } = rawProps;\n  const durations = normalizeDuration(duration);\n  const enterDuration = durations && durations[0];\n  const leaveDuration = durations && durations[1];\n  const {\n    onBeforeEnter,\n    onEnter,\n    onEnterCancelled,\n    onLeave,\n    onLeaveCancelled,\n    onBeforeAppear = onBeforeEnter,\n    onAppear = onEnter,\n    onAppearCancelled = onEnterCancelled\n  } = baseProps;\n  const finishEnter = (el, isAppear, done, isCancelled) => {\n    el._enterCancelled = isCancelled;\n    removeTransitionClass(el, isAppear ? appearToClass : enterToClass);\n    removeTransitionClass(el, isAppear ? appearActiveClass : enterActiveClass);\n    done && done();\n  };\n  const finishLeave = (el, done) => {\n    el._isLeaving = false;\n    removeTransitionClass(el, leaveFromClass);\n    removeTransitionClass(el, leaveToClass);\n    removeTransitionClass(el, leaveActiveClass);\n    done && done();\n  };\n  const makeEnterHook = (isAppear) => {\n    return (el, done) => {\n      const hook = isAppear ? onAppear : onEnter;\n      const resolve = () => finishEnter(el, isAppear, done);\n      callHook(hook, [el, resolve]);\n      nextFrame(() => {\n        removeTransitionClass(el, isAppear ? appearFromClass : enterFromClass);\n        addTransitionClass(el, isAppear ? appearToClass : enterToClass);\n        if (!hasExplicitCallback(hook)) {\n          whenTransitionEnds(el, type, enterDuration, resolve);\n        }\n      });\n    };\n  };\n  return shared.extend(baseProps, {\n    onBeforeEnter(el) {\n      callHook(onBeforeEnter, [el]);\n      addTransitionClass(el, enterFromClass);\n      addTransitionClass(el, enterActiveClass);\n    },\n    onBeforeAppear(el) {\n      callHook(onBeforeAppear, [el]);\n      addTransitionClass(el, appearFromClass);\n      addTransitionClass(el, appearActiveClass);\n    },\n    onEnter: makeEnterHook(false),\n    onAppear: makeEnterHook(true),\n    onLeave(el, done) {\n      el._isLeaving = true;\n      const resolve = () => finishLeave(el, done);\n      addTransitionClass(el, leaveFromClass);\n      if (!el._enterCancelled) {\n        forceReflow();\n        addTransitionClass(el, leaveActiveClass);\n      } else {\n        addTransitionClass(el, leaveActiveClass);\n        forceReflow();\n      }\n      nextFrame(() => {\n        if (!el._isLeaving) {\n          return;\n        }\n        removeTransitionClass(el, leaveFromClass);\n        addTransitionClass(el, leaveToClass);\n        if (!hasExplicitCallback(onLeave)) {\n          whenTransitionEnds(el, type, leaveDuration, resolve);\n        }\n      });\n      callHook(onLeave, [el, resolve]);\n    },\n    onEnterCancelled(el) {\n      finishEnter(el, false, void 0, true);\n      callHook(onEnterCancelled, [el]);\n    },\n    onAppearCancelled(el) {\n      finishEnter(el, true, void 0, true);\n      callHook(onAppearCancelled, [el]);\n    },\n    onLeaveCancelled(el) {\n      finishLeave(el);\n      callHook(onLeaveCancelled, [el]);\n    }\n  });\n}\nfunction normalizeDuration(duration) {\n  if (duration == null) {\n    return null;\n  } else if (shared.isObject(duration)) {\n    return [NumberOf(duration.enter), NumberOf(duration.leave)];\n  } else {\n    const n = NumberOf(duration);\n    return [n, n];\n  }\n}\nfunction NumberOf(val) {\n  const res = shared.toNumber(val);\n  return res;\n}\nfunction addTransitionClass(el, cls) {\n  cls.split(/\\s+/).forEach((c) => c && el.classList.add(c));\n  (el[vtcKey] || (el[vtcKey] = /* @__PURE__ */ new Set())).add(cls);\n}\nfunction removeTransitionClass(el, cls) {\n  cls.split(/\\s+/).forEach((c) => c && el.classList.remove(c));\n  const _vtc = el[vtcKey];\n  if (_vtc) {\n    _vtc.delete(cls);\n    if (!_vtc.size) {\n      el[vtcKey] = void 0;\n    }\n  }\n}\nfunction nextFrame(cb) {\n  requestAnimationFrame(() => {\n    requestAnimationFrame(cb);\n  });\n}\nlet endId = 0;\nfunction whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {\n  const id = el._endId = ++endId;\n  const resolveIfNotStale = () => {\n    if (id === el._endId) {\n      resolve();\n    }\n  };\n  if (explicitTimeout != null) {\n    return setTimeout(resolveIfNotStale, explicitTimeout);\n  }\n  const { type, timeout, propCount } = getTransitionInfo(el, expectedType);\n  if (!type) {\n    return resolve();\n  }\n  const endEvent = type + \"end\";\n  let ended = 0;\n  const end = () => {\n    el.removeEventListener(endEvent, onEnd);\n    resolveIfNotStale();\n  };\n  const onEnd = (e) => {\n    if (e.target === el && ++ended >= propCount) {\n      end();\n    }\n  };\n  setTimeout(() => {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(endEvent, onEnd);\n}\nfunction getTransitionInfo(el, expectedType) {\n  const styles = window.getComputedStyle(el);\n  const getStyleProperties = (key) => (styles[key] || \"\").split(\", \");\n  const transitionDelays = getStyleProperties(`${TRANSITION}Delay`);\n  const transitionDurations = getStyleProperties(`${TRANSITION}Duration`);\n  const transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  const animationDelays = getStyleProperties(`${ANIMATION}Delay`);\n  const animationDurations = getStyleProperties(`${ANIMATION}Duration`);\n  const animationTimeout = getTimeout(animationDelays, animationDurations);\n  let type = null;\n  let timeout = 0;\n  let propCount = 0;\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0 ? transitionTimeout > animationTimeout ? TRANSITION : ANIMATION : null;\n    propCount = type ? type === TRANSITION ? transitionDurations.length : animationDurations.length : 0;\n  }\n  const hasTransform = type === TRANSITION && /\\b(transform|all)(,|$)/.test(\n    getStyleProperties(`${TRANSITION}Property`).toString()\n  );\n  return {\n    type,\n    timeout,\n    propCount,\n    hasTransform\n  };\n}\nfunction getTimeout(delays, durations) {\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n  return Math.max(...durations.map((d, i) => toMs(d) + toMs(delays[i])));\n}\nfunction toMs(s) {\n  if (s === \"auto\") return 0;\n  return Number(s.slice(0, -1).replace(\",\", \".\")) * 1e3;\n}\nfunction forceReflow() {\n  return document.body.offsetHeight;\n}\n\nfunction patchClass(el, value, isSVG) {\n  const transitionClasses = el[vtcKey];\n  if (transitionClasses) {\n    value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(\" \");\n  }\n  if (value == null) {\n    el.removeAttribute(\"class\");\n  } else if (isSVG) {\n    el.setAttribute(\"class\", value);\n  } else {\n    el.className = value;\n  }\n}\n\nconst vShowOriginalDisplay = Symbol(\"_vod\");\nconst vShowHidden = Symbol(\"_vsh\");\nconst vShow = {\n  beforeMount(el, { value }, { transition }) {\n    el[vShowOriginalDisplay] = el.style.display === \"none\" ? \"\" : el.style.display;\n    if (transition && value) {\n      transition.beforeEnter(el);\n    } else {\n      setDisplay(el, value);\n    }\n  },\n  mounted(el, { value }, { transition }) {\n    if (transition && value) {\n      transition.enter(el);\n    }\n  },\n  updated(el, { value, oldValue }, { transition }) {\n    if (!value === !oldValue) return;\n    if (transition) {\n      if (value) {\n        transition.beforeEnter(el);\n        setDisplay(el, true);\n        transition.enter(el);\n      } else {\n        transition.leave(el, () => {\n          setDisplay(el, false);\n        });\n      }\n    } else {\n      setDisplay(el, value);\n    }\n  },\n  beforeUnmount(el, { value }) {\n    setDisplay(el, value);\n  }\n};\nfunction setDisplay(el, value) {\n  el.style.display = value ? el[vShowOriginalDisplay] : \"none\";\n  el[vShowHidden] = !value;\n}\nfunction initVShowForSSR() {\n  vShow.getSSRProps = ({ value }) => {\n    if (!value) {\n      return { style: { display: \"none\" } };\n    }\n  };\n}\n\nconst CSS_VAR_TEXT = Symbol(\"\");\nfunction useCssVars(getter) {\n  return;\n}\n\nconst displayRE = /(^|;)\\s*display\\s*:/;\nfunction patchStyle(el, prev, next) {\n  const style = el.style;\n  const isCssString = shared.isString(next);\n  let hasControlledDisplay = false;\n  if (next && !isCssString) {\n    if (prev) {\n      if (!shared.isString(prev)) {\n        for (const key in prev) {\n          if (next[key] == null) {\n            setStyle(style, key, \"\");\n          }\n        }\n      } else {\n        for (const prevStyle of prev.split(\";\")) {\n          const key = prevStyle.slice(0, prevStyle.indexOf(\":\")).trim();\n          if (next[key] == null) {\n            setStyle(style, key, \"\");\n          }\n        }\n      }\n    }\n    for (const key in next) {\n      if (key === \"display\") {\n        hasControlledDisplay = true;\n      }\n      setStyle(style, key, next[key]);\n    }\n  } else {\n    if (isCssString) {\n      if (prev !== next) {\n        const cssVarText = style[CSS_VAR_TEXT];\n        if (cssVarText) {\n          next += \";\" + cssVarText;\n        }\n        style.cssText = next;\n        hasControlledDisplay = displayRE.test(next);\n      }\n    } else if (prev) {\n      el.removeAttribute(\"style\");\n    }\n  }\n  if (vShowOriginalDisplay in el) {\n    el[vShowOriginalDisplay] = hasControlledDisplay ? style.display : \"\";\n    if (el[vShowHidden]) {\n      style.display = \"none\";\n    }\n  }\n}\nconst importantRE = /\\s*!important$/;\nfunction setStyle(style, name, val) {\n  if (shared.isArray(val)) {\n    val.forEach((v) => setStyle(style, name, v));\n  } else {\n    if (val == null) val = \"\";\n    if (name.startsWith(\"--\")) {\n      style.setProperty(name, val);\n    } else {\n      const prefixed = autoPrefix(style, name);\n      if (importantRE.test(val)) {\n        style.setProperty(\n          shared.hyphenate(prefixed),\n          val.replace(importantRE, \"\"),\n          \"important\"\n        );\n      } else {\n        style[prefixed] = val;\n      }\n    }\n  }\n}\nconst prefixes = [\"Webkit\", \"Moz\", \"ms\"];\nconst prefixCache = {};\nfunction autoPrefix(style, rawName) {\n  const cached = prefixCache[rawName];\n  if (cached) {\n    return cached;\n  }\n  let name = runtimeCore.camelize(rawName);\n  if (name !== \"filter\" && name in style) {\n    return prefixCache[rawName] = name;\n  }\n  name = shared.capitalize(name);\n  for (let i = 0; i < prefixes.length; i++) {\n    const prefixed = prefixes[i] + name;\n    if (prefixed in style) {\n      return prefixCache[rawName] = prefixed;\n    }\n  }\n  return rawName;\n}\n\nconst xlinkNS = \"http://www.w3.org/1999/xlink\";\nfunction patchAttr(el, key, value, isSVG, instance, isBoolean = shared.isSpecialBooleanAttr(key)) {\n  if (isSVG && key.startsWith(\"xlink:\")) {\n    if (value == null) {\n      el.removeAttributeNS(xlinkNS, key.slice(6, key.length));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    if (value == null || isBoolean && !shared.includeBooleanAttr(value)) {\n      el.removeAttribute(key);\n    } else {\n      el.setAttribute(\n        key,\n        isBoolean ? \"\" : shared.isSymbol(value) ? String(value) : value\n      );\n    }\n  }\n}\n\nfunction patchDOMProp(el, key, value, parentComponent, attrName) {\n  if (key === \"innerHTML\" || key === \"textContent\") {\n    if (value != null) {\n      el[key] = key === \"innerHTML\" ? unsafeToTrustedHTML(value) : value;\n    }\n    return;\n  }\n  const tag = el.tagName;\n  if (key === \"value\" && tag !== \"PROGRESS\" && // custom elements may use _value internally\n  !tag.includes(\"-\")) {\n    const oldValue = tag === \"OPTION\" ? el.getAttribute(\"value\") || \"\" : el.value;\n    const newValue = value == null ? (\n      // #11647: value should be set as empty string for null and undefined,\n      // but <input type=\"checkbox\"> should be set as 'on'.\n      el.type === \"checkbox\" ? \"on\" : \"\"\n    ) : String(value);\n    if (oldValue !== newValue || !(\"_value\" in el)) {\n      el.value = newValue;\n    }\n    if (value == null) {\n      el.removeAttribute(key);\n    }\n    el._value = value;\n    return;\n  }\n  let needRemove = false;\n  if (value === \"\" || value == null) {\n    const type = typeof el[key];\n    if (type === \"boolean\") {\n      value = shared.includeBooleanAttr(value);\n    } else if (value == null && type === \"string\") {\n      value = \"\";\n      needRemove = true;\n    } else if (type === \"number\") {\n      value = 0;\n      needRemove = true;\n    }\n  }\n  try {\n    el[key] = value;\n  } catch (e) {\n  }\n  needRemove && el.removeAttribute(attrName || key);\n}\n\nfunction addEventListener(el, event, handler, options) {\n  el.addEventListener(event, handler, options);\n}\nfunction removeEventListener(el, event, handler, options) {\n  el.removeEventListener(event, handler, options);\n}\nconst veiKey = Symbol(\"_vei\");\nfunction patchEvent(el, rawName, prevValue, nextValue, instance = null) {\n  const invokers = el[veiKey] || (el[veiKey] = {});\n  const existingInvoker = invokers[rawName];\n  if (nextValue && existingInvoker) {\n    existingInvoker.value = nextValue;\n  } else {\n    const [name, options] = parseName(rawName);\n    if (nextValue) {\n      const invoker = invokers[rawName] = createInvoker(\n        nextValue,\n        instance\n      );\n      addEventListener(el, name, invoker, options);\n    } else if (existingInvoker) {\n      removeEventListener(el, name, existingInvoker, options);\n      invokers[rawName] = void 0;\n    }\n  }\n}\nconst optionsModifierRE = /(?:Once|Passive|Capture)$/;\nfunction parseName(name) {\n  let options;\n  if (optionsModifierRE.test(name)) {\n    options = {};\n    let m;\n    while (m = name.match(optionsModifierRE)) {\n      name = name.slice(0, name.length - m[0].length);\n      options[m[0].toLowerCase()] = true;\n    }\n  }\n  const event = name[2] === \":\" ? name.slice(3) : shared.hyphenate(name.slice(2));\n  return [event, options];\n}\nlet cachedNow = 0;\nconst p = /* @__PURE__ */ Promise.resolve();\nconst getNow = () => cachedNow || (p.then(() => cachedNow = 0), cachedNow = Date.now());\nfunction createInvoker(initialValue, instance) {\n  const invoker = (e) => {\n    if (!e._vts) {\n      e._vts = Date.now();\n    } else if (e._vts <= invoker.attached) {\n      return;\n    }\n    runtimeCore.callWithAsyncErrorHandling(\n      patchStopImmediatePropagation(e, invoker.value),\n      instance,\n      5,\n      [e]\n    );\n  };\n  invoker.value = initialValue;\n  invoker.attached = getNow();\n  return invoker;\n}\nfunction patchStopImmediatePropagation(e, value) {\n  if (shared.isArray(value)) {\n    const originalStop = e.stopImmediatePropagation;\n    e.stopImmediatePropagation = () => {\n      originalStop.call(e);\n      e._stopped = true;\n    };\n    return value.map(\n      (fn) => (e2) => !e2._stopped && fn && fn(e2)\n    );\n  } else {\n    return value;\n  }\n}\n\nconst isNativeOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // lowercase letter\nkey.charCodeAt(2) > 96 && key.charCodeAt(2) < 123;\nconst patchProp = (el, key, prevValue, nextValue, namespace, parentComponent) => {\n  const isSVG = namespace === \"svg\";\n  if (key === \"class\") {\n    patchClass(el, nextValue, isSVG);\n  } else if (key === \"style\") {\n    patchStyle(el, prevValue, nextValue);\n  } else if (shared.isOn(key)) {\n    if (!shared.isModelListener(key)) {\n      patchEvent(el, key, prevValue, nextValue, parentComponent);\n    }\n  } else if (key[0] === \".\" ? (key = key.slice(1), true) : key[0] === \"^\" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {\n    patchDOMProp(el, key, nextValue);\n    if (!el.tagName.includes(\"-\") && (key === \"value\" || key === \"checked\" || key === \"selected\")) {\n      patchAttr(el, key, nextValue, isSVG, parentComponent, key !== \"value\");\n    }\n  } else if (\n    // #11081 force set props for possible async custom element\n    el._isVueCE && (/[A-Z]/.test(key) || !shared.isString(nextValue))\n  ) {\n    patchDOMProp(el, shared.camelize(key), nextValue, parentComponent, key);\n  } else {\n    if (key === \"true-value\") {\n      el._trueValue = nextValue;\n    } else if (key === \"false-value\") {\n      el._falseValue = nextValue;\n    }\n    patchAttr(el, key, nextValue, isSVG);\n  }\n};\nfunction shouldSetAsProp(el, key, value, isSVG) {\n  if (isSVG) {\n    if (key === \"innerHTML\" || key === \"textContent\") {\n      return true;\n    }\n    if (key in el && isNativeOn(key) && shared.isFunction(value)) {\n      return true;\n    }\n    return false;\n  }\n  if (key === \"spellcheck\" || key === \"draggable\" || key === \"translate\" || key === \"autocorrect\") {\n    return false;\n  }\n  if (key === \"form\") {\n    return false;\n  }\n  if (key === \"list\" && el.tagName === \"INPUT\") {\n    return false;\n  }\n  if (key === \"type\" && el.tagName === \"TEXTAREA\") {\n    return false;\n  }\n  if (key === \"width\" || key === \"height\") {\n    const tag = el.tagName;\n    if (tag === \"IMG\" || tag === \"VIDEO\" || tag === \"CANVAS\" || tag === \"SOURCE\") {\n      return false;\n    }\n  }\n  if (isNativeOn(key) && shared.isString(value)) {\n    return false;\n  }\n  return key in el;\n}\n\nconst REMOVAL = {};\n/*! #__NO_SIDE_EFFECTS__ */\n// @__NO_SIDE_EFFECTS__\nfunction defineCustomElement(options, extraOptions, _createApp) {\n  const Comp = runtimeCore.defineComponent(options, extraOptions);\n  if (shared.isPlainObject(Comp)) shared.extend(Comp, extraOptions);\n  class VueCustomElement extends VueElement {\n    constructor(initialProps) {\n      super(Comp, initialProps, _createApp);\n    }\n  }\n  VueCustomElement.def = Comp;\n  return VueCustomElement;\n}\n/*! #__NO_SIDE_EFFECTS__ */\nconst defineSSRCustomElement = /* @__NO_SIDE_EFFECTS__ */ (options, extraOptions) => {\n  return /* @__PURE__ */ defineCustomElement(options, extraOptions, createSSRApp);\n};\nconst BaseClass = typeof HTMLElement !== \"undefined\" ? HTMLElement : class {\n};\nclass VueElement extends BaseClass {\n  constructor(_def, _props = {}, _createApp = createApp) {\n    super();\n    this._def = _def;\n    this._props = _props;\n    this._createApp = _createApp;\n    this._isVueCE = true;\n    /**\n     * @internal\n     */\n    this._instance = null;\n    /**\n     * @internal\n     */\n    this._app = null;\n    /**\n     * @internal\n     */\n    this._nonce = this._def.nonce;\n    this._connected = false;\n    this._resolved = false;\n    this._numberProps = null;\n    this._styleChildren = /* @__PURE__ */ new WeakSet();\n    this._ob = null;\n    if (this.shadowRoot && _createApp !== createApp) {\n      this._root = this.shadowRoot;\n    } else {\n      if (_def.shadowRoot !== false) {\n        this.attachShadow({ mode: \"open\" });\n        this._root = this.shadowRoot;\n      } else {\n        this._root = this;\n      }\n    }\n  }\n  connectedCallback() {\n    if (!this.isConnected) return;\n    if (!this.shadowRoot && !this._resolved) {\n      this._parseSlots();\n    }\n    this._connected = true;\n    let parent = this;\n    while (parent = parent && (parent.parentNode || parent.host)) {\n      if (parent instanceof VueElement) {\n        this._parent = parent;\n        break;\n      }\n    }\n    if (!this._instance) {\n      if (this._resolved) {\n        this._mount(this._def);\n      } else {\n        if (parent && parent._pendingResolve) {\n          this._pendingResolve = parent._pendingResolve.then(() => {\n            this._pendingResolve = void 0;\n            this._resolveDef();\n          });\n        } else {\n          this._resolveDef();\n        }\n      }\n    }\n  }\n  _setParent(parent = this._parent) {\n    if (parent) {\n      this._instance.parent = parent._instance;\n      this._inheritParentContext(parent);\n    }\n  }\n  _inheritParentContext(parent = this._parent) {\n    if (parent && this._app) {\n      Object.setPrototypeOf(\n        this._app._context.provides,\n        parent._instance.provides\n      );\n    }\n  }\n  disconnectedCallback() {\n    this._connected = false;\n    runtimeCore.nextTick(() => {\n      if (!this._connected) {\n        if (this._ob) {\n          this._ob.disconnect();\n          this._ob = null;\n        }\n        this._app && this._app.unmount();\n        if (this._instance) this._instance.ce = void 0;\n        this._app = this._instance = null;\n      }\n    });\n  }\n  /**\n   * resolve inner component definition (handle possible async component)\n   */\n  _resolveDef() {\n    if (this._pendingResolve) {\n      return;\n    }\n    for (let i = 0; i < this.attributes.length; i++) {\n      this._setAttr(this.attributes[i].name);\n    }\n    this._ob = new MutationObserver((mutations) => {\n      for (const m of mutations) {\n        this._setAttr(m.attributeName);\n      }\n    });\n    this._ob.observe(this, { attributes: true });\n    const resolve = (def, isAsync = false) => {\n      this._resolved = true;\n      this._pendingResolve = void 0;\n      const { props, styles } = def;\n      let numberProps;\n      if (props && !shared.isArray(props)) {\n        for (const key in props) {\n          const opt = props[key];\n          if (opt === Number || opt && opt.type === Number) {\n            if (key in this._props) {\n              this._props[key] = shared.toNumber(this._props[key]);\n            }\n            (numberProps || (numberProps = /* @__PURE__ */ Object.create(null)))[shared.camelize(key)] = true;\n          }\n        }\n      }\n      this._numberProps = numberProps;\n      this._resolveProps(def);\n      if (this.shadowRoot) {\n        this._applyStyles(styles);\n      }\n      this._mount(def);\n    };\n    const asyncDef = this._def.__asyncLoader;\n    if (asyncDef) {\n      this._pendingResolve = asyncDef().then((def) => {\n        def.configureApp = this._def.configureApp;\n        resolve(this._def = def, true);\n      });\n    } else {\n      resolve(this._def);\n    }\n  }\n  _mount(def) {\n    this._app = this._createApp(def);\n    this._inheritParentContext();\n    if (def.configureApp) {\n      def.configureApp(this._app);\n    }\n    this._app._ceVNode = this._createVNode();\n    this._app.mount(this._root);\n    const exposed = this._instance && this._instance.exposed;\n    if (!exposed) return;\n    for (const key in exposed) {\n      if (!shared.hasOwn(this, key)) {\n        Object.defineProperty(this, key, {\n          // unwrap ref to be consistent with public instance behavior\n          get: () => runtimeCore.unref(exposed[key])\n        });\n      }\n    }\n  }\n  _resolveProps(def) {\n    const { props } = def;\n    const declaredPropKeys = shared.isArray(props) ? props : Object.keys(props || {});\n    for (const key of Object.keys(this)) {\n      if (key[0] !== \"_\" && declaredPropKeys.includes(key)) {\n        this._setProp(key, this[key]);\n      }\n    }\n    for (const key of declaredPropKeys.map(shared.camelize)) {\n      Object.defineProperty(this, key, {\n        get() {\n          return this._getProp(key);\n        },\n        set(val) {\n          this._setProp(key, val, true, true);\n        }\n      });\n    }\n  }\n  _setAttr(key) {\n    if (key.startsWith(\"data-v-\")) return;\n    const has = this.hasAttribute(key);\n    let value = has ? this.getAttribute(key) : REMOVAL;\n    const camelKey = shared.camelize(key);\n    if (has && this._numberProps && this._numberProps[camelKey]) {\n      value = shared.toNumber(value);\n    }\n    this._setProp(camelKey, value, false, true);\n  }\n  /**\n   * @internal\n   */\n  _getProp(key) {\n    return this._props[key];\n  }\n  /**\n   * @internal\n   */\n  _setProp(key, val, shouldReflect = true, shouldUpdate = false) {\n    if (val !== this._props[key]) {\n      if (val === REMOVAL) {\n        delete this._props[key];\n      } else {\n        this._props[key] = val;\n        if (key === \"key\" && this._app) {\n          this._app._ceVNode.key = val;\n        }\n      }\n      if (shouldUpdate && this._instance) {\n        this._update();\n      }\n      if (shouldReflect) {\n        const ob = this._ob;\n        ob && ob.disconnect();\n        if (val === true) {\n          this.setAttribute(shared.hyphenate(key), \"\");\n        } else if (typeof val === \"string\" || typeof val === \"number\") {\n          this.setAttribute(shared.hyphenate(key), val + \"\");\n        } else if (!val) {\n          this.removeAttribute(shared.hyphenate(key));\n        }\n        ob && ob.observe(this, { attributes: true });\n      }\n    }\n  }\n  _update() {\n    const vnode = this._createVNode();\n    if (this._app) vnode.appContext = this._app._context;\n    render(vnode, this._root);\n  }\n  _createVNode() {\n    const baseProps = {};\n    if (!this.shadowRoot) {\n      baseProps.onVnodeMounted = baseProps.onVnodeUpdated = this._renderSlots.bind(this);\n    }\n    const vnode = runtimeCore.createVNode(this._def, shared.extend(baseProps, this._props));\n    if (!this._instance) {\n      vnode.ce = (instance) => {\n        this._instance = instance;\n        instance.ce = this;\n        instance.isCE = true;\n        const dispatch = (event, args) => {\n          this.dispatchEvent(\n            new CustomEvent(\n              event,\n              shared.isPlainObject(args[0]) ? shared.extend({ detail: args }, args[0]) : { detail: args }\n            )\n          );\n        };\n        instance.emit = (event, ...args) => {\n          dispatch(event, args);\n          if (shared.hyphenate(event) !== event) {\n            dispatch(shared.hyphenate(event), args);\n          }\n        };\n        this._setParent();\n      };\n    }\n    return vnode;\n  }\n  _applyStyles(styles, owner) {\n    if (!styles) return;\n    if (owner) {\n      if (owner === this._def || this._styleChildren.has(owner)) {\n        return;\n      }\n      this._styleChildren.add(owner);\n    }\n    const nonce = this._nonce;\n    for (let i = styles.length - 1; i >= 0; i--) {\n      const s = document.createElement(\"style\");\n      if (nonce) s.setAttribute(\"nonce\", nonce);\n      s.textContent = styles[i];\n      this.shadowRoot.prepend(s);\n    }\n  }\n  /**\n   * Only called when shadowRoot is false\n   */\n  _parseSlots() {\n    const slots = this._slots = {};\n    let n;\n    while (n = this.firstChild) {\n      const slotName = n.nodeType === 1 && n.getAttribute(\"slot\") || \"default\";\n      (slots[slotName] || (slots[slotName] = [])).push(n);\n      this.removeChild(n);\n    }\n  }\n  /**\n   * Only called when shadowRoot is false\n   */\n  _renderSlots() {\n    const outlets = (this._teleportTarget || this).querySelectorAll(\"slot\");\n    const scopeId = this._instance.type.__scopeId;\n    for (let i = 0; i < outlets.length; i++) {\n      const o = outlets[i];\n      const slotName = o.getAttribute(\"name\") || \"default\";\n      const content = this._slots[slotName];\n      const parent = o.parentNode;\n      if (content) {\n        for (const n of content) {\n          if (scopeId && n.nodeType === 1) {\n            const id = scopeId + \"-s\";\n            const walker = document.createTreeWalker(n, 1);\n            n.setAttribute(id, \"\");\n            let child;\n            while (child = walker.nextNode()) {\n              child.setAttribute(id, \"\");\n            }\n          }\n          parent.insertBefore(n, o);\n        }\n      } else {\n        while (o.firstChild) parent.insertBefore(o.firstChild, o);\n      }\n      parent.removeChild(o);\n    }\n  }\n  /**\n   * @internal\n   */\n  _injectChildStyle(comp) {\n    this._applyStyles(comp.styles, comp);\n  }\n  /**\n   * @internal\n   */\n  _removeChildStyle(comp) {\n  }\n}\nfunction useHost(caller) {\n  const instance = runtimeCore.getCurrentInstance();\n  const el = instance && instance.ce;\n  if (el) {\n    return el;\n  }\n  return null;\n}\nfunction useShadowRoot() {\n  const el = useHost();\n  return el && el.shadowRoot;\n}\n\nfunction useCssModule(name = \"$style\") {\n  {\n    const instance = runtimeCore.getCurrentInstance();\n    if (!instance) {\n      return shared.EMPTY_OBJ;\n    }\n    const modules = instance.type.__cssModules;\n    if (!modules) {\n      return shared.EMPTY_OBJ;\n    }\n    const mod = modules[name];\n    if (!mod) {\n      return shared.EMPTY_OBJ;\n    }\n    return mod;\n  }\n}\n\nconst positionMap = /* @__PURE__ */ new WeakMap();\nconst newPositionMap = /* @__PURE__ */ new WeakMap();\nconst moveCbKey = Symbol(\"_moveCb\");\nconst enterCbKey = Symbol(\"_enterCb\");\nconst decorate = (t) => {\n  delete t.props.mode;\n  return t;\n};\nconst TransitionGroupImpl = /* @__PURE__ */ decorate({\n  name: \"TransitionGroup\",\n  props: /* @__PURE__ */ shared.extend({}, TransitionPropsValidators, {\n    tag: String,\n    moveClass: String\n  }),\n  setup(props, { slots }) {\n    const instance = runtimeCore.getCurrentInstance();\n    const state = runtimeCore.useTransitionState();\n    let prevChildren;\n    let children;\n    runtimeCore.onUpdated(() => {\n      if (!prevChildren.length) {\n        return;\n      }\n      const moveClass = props.moveClass || `${props.name || \"v\"}-move`;\n      if (!hasCSSTransform(\n        prevChildren[0].el,\n        instance.vnode.el,\n        moveClass\n      )) {\n        prevChildren = [];\n        return;\n      }\n      prevChildren.forEach(callPendingCbs);\n      prevChildren.forEach(recordPosition);\n      const movedChildren = prevChildren.filter(applyTranslation);\n      forceReflow();\n      movedChildren.forEach((c) => {\n        const el = c.el;\n        const style = el.style;\n        addTransitionClass(el, moveClass);\n        style.transform = style.webkitTransform = style.transitionDuration = \"\";\n        const cb = el[moveCbKey] = (e) => {\n          if (e && e.target !== el) {\n            return;\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(\"transitionend\", cb);\n            el[moveCbKey] = null;\n            removeTransitionClass(el, moveClass);\n          }\n        };\n        el.addEventListener(\"transitionend\", cb);\n      });\n      prevChildren = [];\n    });\n    return () => {\n      const rawProps = runtimeCore.toRaw(props);\n      const cssTransitionProps = resolveTransitionProps(rawProps);\n      let tag = rawProps.tag || runtimeCore.Fragment;\n      prevChildren = [];\n      if (children) {\n        for (let i = 0; i < children.length; i++) {\n          const child = children[i];\n          if (child.el && child.el instanceof Element) {\n            prevChildren.push(child);\n            runtimeCore.setTransitionHooks(\n              child,\n              runtimeCore.resolveTransitionHooks(\n                child,\n                cssTransitionProps,\n                state,\n                instance\n              )\n            );\n            positionMap.set(\n              child,\n              child.el.getBoundingClientRect()\n            );\n          }\n        }\n      }\n      children = slots.default ? runtimeCore.getTransitionRawChildren(slots.default()) : [];\n      for (let i = 0; i < children.length; i++) {\n        const child = children[i];\n        if (child.key != null) {\n          runtimeCore.setTransitionHooks(\n            child,\n            runtimeCore.resolveTransitionHooks(child, cssTransitionProps, state, instance)\n          );\n        }\n      }\n      return runtimeCore.createVNode(tag, null, children);\n    };\n  }\n});\nconst TransitionGroup = TransitionGroupImpl;\nfunction callPendingCbs(c) {\n  const el = c.el;\n  if (el[moveCbKey]) {\n    el[moveCbKey]();\n  }\n  if (el[enterCbKey]) {\n    el[enterCbKey]();\n  }\n}\nfunction recordPosition(c) {\n  newPositionMap.set(c, c.el.getBoundingClientRect());\n}\nfunction applyTranslation(c) {\n  const oldPos = positionMap.get(c);\n  const newPos = newPositionMap.get(c);\n  const dx = oldPos.left - newPos.left;\n  const dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    const s = c.el.style;\n    s.transform = s.webkitTransform = `translate(${dx}px,${dy}px)`;\n    s.transitionDuration = \"0s\";\n    return c;\n  }\n}\nfunction hasCSSTransform(el, root, moveClass) {\n  const clone = el.cloneNode();\n  const _vtc = el[vtcKey];\n  if (_vtc) {\n    _vtc.forEach((cls) => {\n      cls.split(/\\s+/).forEach((c) => c && clone.classList.remove(c));\n    });\n  }\n  moveClass.split(/\\s+/).forEach((c) => c && clone.classList.add(c));\n  clone.style.display = \"none\";\n  const container = root.nodeType === 1 ? root : root.parentNode;\n  container.appendChild(clone);\n  const { hasTransform } = getTransitionInfo(clone);\n  container.removeChild(clone);\n  return hasTransform;\n}\n\nconst getModelAssigner = (vnode) => {\n  const fn = vnode.props[\"onUpdate:modelValue\"] || false;\n  return shared.isArray(fn) ? (value) => shared.invokeArrayFns(fn, value) : fn;\n};\nfunction onCompositionStart(e) {\n  e.target.composing = true;\n}\nfunction onCompositionEnd(e) {\n  const target = e.target;\n  if (target.composing) {\n    target.composing = false;\n    target.dispatchEvent(new Event(\"input\"));\n  }\n}\nconst assignKey = Symbol(\"_assign\");\nconst vModelText = {\n  created(el, { modifiers: { lazy, trim, number } }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    const castToNumber = number || vnode.props && vnode.props.type === \"number\";\n    addEventListener(el, lazy ? \"change\" : \"input\", (e) => {\n      if (e.target.composing) return;\n      let domValue = el.value;\n      if (trim) {\n        domValue = domValue.trim();\n      }\n      if (castToNumber) {\n        domValue = shared.looseToNumber(domValue);\n      }\n      el[assignKey](domValue);\n    });\n    if (trim) {\n      addEventListener(el, \"change\", () => {\n        el.value = el.value.trim();\n      });\n    }\n    if (!lazy) {\n      addEventListener(el, \"compositionstart\", onCompositionStart);\n      addEventListener(el, \"compositionend\", onCompositionEnd);\n      addEventListener(el, \"change\", onCompositionEnd);\n    }\n  },\n  // set value on mounted so it's after min/max for type=\"range\"\n  mounted(el, { value }) {\n    el.value = value == null ? \"\" : value;\n  },\n  beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    if (el.composing) return;\n    const elValue = (number || el.type === \"number\") && !/^0\\d/.test(el.value) ? shared.looseToNumber(el.value) : el.value;\n    const newValue = value == null ? \"\" : value;\n    if (elValue === newValue) {\n      return;\n    }\n    if (document.activeElement === el && el.type !== \"range\") {\n      if (lazy && value === oldValue) {\n        return;\n      }\n      if (trim && el.value.trim() === newValue) {\n        return;\n      }\n    }\n    el.value = newValue;\n  }\n};\nconst vModelCheckbox = {\n  // #4096 array checkboxes need to be deep traversed\n  deep: true,\n  created(el, _, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      const modelValue = el._modelValue;\n      const elementValue = getValue(el);\n      const checked = el.checked;\n      const assign = el[assignKey];\n      if (shared.isArray(modelValue)) {\n        const index = shared.looseIndexOf(modelValue, elementValue);\n        const found = index !== -1;\n        if (checked && !found) {\n          assign(modelValue.concat(elementValue));\n        } else if (!checked && found) {\n          const filtered = [...modelValue];\n          filtered.splice(index, 1);\n          assign(filtered);\n        }\n      } else if (shared.isSet(modelValue)) {\n        const cloned = new Set(modelValue);\n        if (checked) {\n          cloned.add(elementValue);\n        } else {\n          cloned.delete(elementValue);\n        }\n        assign(cloned);\n      } else {\n        assign(getCheckboxValue(el, checked));\n      }\n    });\n  },\n  // set initial checked on mount to wait for true-value/false-value\n  mounted: setChecked,\n  beforeUpdate(el, binding, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    setChecked(el, binding, vnode);\n  }\n};\nfunction setChecked(el, { value, oldValue }, vnode) {\n  el._modelValue = value;\n  let checked;\n  if (shared.isArray(value)) {\n    checked = shared.looseIndexOf(value, vnode.props.value) > -1;\n  } else if (shared.isSet(value)) {\n    checked = value.has(vnode.props.value);\n  } else {\n    if (value === oldValue) return;\n    checked = shared.looseEqual(value, getCheckboxValue(el, true));\n  }\n  if (el.checked !== checked) {\n    el.checked = checked;\n  }\n}\nconst vModelRadio = {\n  created(el, { value }, vnode) {\n    el.checked = shared.looseEqual(value, vnode.props.value);\n    el[assignKey] = getModelAssigner(vnode);\n    addEventListener(el, \"change\", () => {\n      el[assignKey](getValue(el));\n    });\n  },\n  beforeUpdate(el, { value, oldValue }, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n    if (value !== oldValue) {\n      el.checked = shared.looseEqual(value, vnode.props.value);\n    }\n  }\n};\nconst vModelSelect = {\n  // <select multiple> value need to be deep traversed\n  deep: true,\n  created(el, { value, modifiers: { number } }, vnode) {\n    const isSetModel = shared.isSet(value);\n    addEventListener(el, \"change\", () => {\n      const selectedVal = Array.prototype.filter.call(el.options, (o) => o.selected).map(\n        (o) => number ? shared.looseToNumber(getValue(o)) : getValue(o)\n      );\n      el[assignKey](\n        el.multiple ? isSetModel ? new Set(selectedVal) : selectedVal : selectedVal[0]\n      );\n      el._assigning = true;\n      runtimeCore.nextTick(() => {\n        el._assigning = false;\n      });\n    });\n    el[assignKey] = getModelAssigner(vnode);\n  },\n  // set value in mounted & updated because <select> relies on its children\n  // <option>s.\n  mounted(el, { value }) {\n    setSelected(el, value);\n  },\n  beforeUpdate(el, _binding, vnode) {\n    el[assignKey] = getModelAssigner(vnode);\n  },\n  updated(el, { value }) {\n    if (!el._assigning) {\n      setSelected(el, value);\n    }\n  }\n};\nfunction setSelected(el, value) {\n  const isMultiple = el.multiple;\n  const isArrayValue = shared.isArray(value);\n  if (isMultiple && !isArrayValue && !shared.isSet(value)) {\n    return;\n  }\n  for (let i = 0, l = el.options.length; i < l; i++) {\n    const option = el.options[i];\n    const optionValue = getValue(option);\n    if (isMultiple) {\n      if (isArrayValue) {\n        const optionType = typeof optionValue;\n        if (optionType === \"string\" || optionType === \"number\") {\n          option.selected = value.some((v) => String(v) === String(optionValue));\n        } else {\n          option.selected = shared.looseIndexOf(value, optionValue) > -1;\n        }\n      } else {\n        option.selected = value.has(optionValue);\n      }\n    } else if (shared.looseEqual(getValue(option), value)) {\n      if (el.selectedIndex !== i) el.selectedIndex = i;\n      return;\n    }\n  }\n  if (!isMultiple && el.selectedIndex !== -1) {\n    el.selectedIndex = -1;\n  }\n}\nfunction getValue(el) {\n  return \"_value\" in el ? el._value : el.value;\n}\nfunction getCheckboxValue(el, checked) {\n  const key = checked ? \"_trueValue\" : \"_falseValue\";\n  return key in el ? el[key] : checked;\n}\nconst vModelDynamic = {\n  created(el, binding, vnode) {\n    callModelHook(el, binding, vnode, null, \"created\");\n  },\n  mounted(el, binding, vnode) {\n    callModelHook(el, binding, vnode, null, \"mounted\");\n  },\n  beforeUpdate(el, binding, vnode, prevVNode) {\n    callModelHook(el, binding, vnode, prevVNode, \"beforeUpdate\");\n  },\n  updated(el, binding, vnode, prevVNode) {\n    callModelHook(el, binding, vnode, prevVNode, \"updated\");\n  }\n};\nfunction resolveDynamicModel(tagName, type) {\n  switch (tagName) {\n    case \"SELECT\":\n      return vModelSelect;\n    case \"TEXTAREA\":\n      return vModelText;\n    default:\n      switch (type) {\n        case \"checkbox\":\n          return vModelCheckbox;\n        case \"radio\":\n          return vModelRadio;\n        default:\n          return vModelText;\n      }\n  }\n}\nfunction callModelHook(el, binding, vnode, prevVNode, hook) {\n  const modelToUse = resolveDynamicModel(\n    el.tagName,\n    vnode.props && vnode.props.type\n  );\n  const fn = modelToUse[hook];\n  fn && fn(el, binding, vnode, prevVNode);\n}\nfunction initVModelForSSR() {\n  vModelText.getSSRProps = ({ value }) => ({ value });\n  vModelRadio.getSSRProps = ({ value }, vnode) => {\n    if (vnode.props && shared.looseEqual(vnode.props.value, value)) {\n      return { checked: true };\n    }\n  };\n  vModelCheckbox.getSSRProps = ({ value }, vnode) => {\n    if (shared.isArray(value)) {\n      if (vnode.props && shared.looseIndexOf(value, vnode.props.value) > -1) {\n        return { checked: true };\n      }\n    } else if (shared.isSet(value)) {\n      if (vnode.props && value.has(vnode.props.value)) {\n        return { checked: true };\n      }\n    } else if (value) {\n      return { checked: true };\n    }\n  };\n  vModelDynamic.getSSRProps = (binding, vnode) => {\n    if (typeof vnode.type !== \"string\") {\n      return;\n    }\n    const modelToUse = resolveDynamicModel(\n      // resolveDynamicModel expects an uppercase tag name, but vnode.type is lowercase\n      vnode.type.toUpperCase(),\n      vnode.props && vnode.props.type\n    );\n    if (modelToUse.getSSRProps) {\n      return modelToUse.getSSRProps(binding, vnode);\n    }\n  };\n}\n\nconst systemModifiers = [\"ctrl\", \"shift\", \"alt\", \"meta\"];\nconst modifierGuards = {\n  stop: (e) => e.stopPropagation(),\n  prevent: (e) => e.preventDefault(),\n  self: (e) => e.target !== e.currentTarget,\n  ctrl: (e) => !e.ctrlKey,\n  shift: (e) => !e.shiftKey,\n  alt: (e) => !e.altKey,\n  meta: (e) => !e.metaKey,\n  left: (e) => \"button\" in e && e.button !== 0,\n  middle: (e) => \"button\" in e && e.button !== 1,\n  right: (e) => \"button\" in e && e.button !== 2,\n  exact: (e, modifiers) => systemModifiers.some((m) => e[`${m}Key`] && !modifiers.includes(m))\n};\nconst withModifiers = (fn, modifiers) => {\n  const cache = fn._withMods || (fn._withMods = {});\n  const cacheKey = modifiers.join(\".\");\n  return cache[cacheKey] || (cache[cacheKey] = (event, ...args) => {\n    for (let i = 0; i < modifiers.length; i++) {\n      const guard = modifierGuards[modifiers[i]];\n      if (guard && guard(event, modifiers)) return;\n    }\n    return fn(event, ...args);\n  });\n};\nconst keyNames = {\n  esc: \"escape\",\n  space: \" \",\n  up: \"arrow-up\",\n  left: \"arrow-left\",\n  right: \"arrow-right\",\n  down: \"arrow-down\",\n  delete: \"backspace\"\n};\nconst withKeys = (fn, modifiers) => {\n  const cache = fn._withKeys || (fn._withKeys = {});\n  const cacheKey = modifiers.join(\".\");\n  return cache[cacheKey] || (cache[cacheKey] = (event) => {\n    if (!(\"key\" in event)) {\n      return;\n    }\n    const eventKey = shared.hyphenate(event.key);\n    if (modifiers.some(\n      (k) => k === eventKey || keyNames[k] === eventKey\n    )) {\n      return fn(event);\n    }\n  });\n};\n\nconst rendererOptions = /* @__PURE__ */ shared.extend({ patchProp }, nodeOps);\nlet renderer;\nlet enabledHydration = false;\nfunction ensureRenderer() {\n  return renderer || (renderer = runtimeCore.createRenderer(rendererOptions));\n}\nfunction ensureHydrationRenderer() {\n  renderer = enabledHydration ? renderer : runtimeCore.createHydrationRenderer(rendererOptions);\n  enabledHydration = true;\n  return renderer;\n}\nconst render = (...args) => {\n  ensureRenderer().render(...args);\n};\nconst hydrate = (...args) => {\n  ensureHydrationRenderer().hydrate(...args);\n};\nconst createApp = (...args) => {\n  const app = ensureRenderer().createApp(...args);\n  const { mount } = app;\n  app.mount = (containerOrSelector) => {\n    const container = normalizeContainer(containerOrSelector);\n    if (!container) return;\n    const component = app._component;\n    if (!shared.isFunction(component) && !component.render && !component.template) {\n      component.template = container.innerHTML;\n    }\n    if (container.nodeType === 1) {\n      container.textContent = \"\";\n    }\n    const proxy = mount(container, false, resolveRootNamespace(container));\n    if (container instanceof Element) {\n      container.removeAttribute(\"v-cloak\");\n      container.setAttribute(\"data-v-app\", \"\");\n    }\n    return proxy;\n  };\n  return app;\n};\nconst createSSRApp = (...args) => {\n  const app = ensureHydrationRenderer().createApp(...args);\n  const { mount } = app;\n  app.mount = (containerOrSelector) => {\n    const container = normalizeContainer(containerOrSelector);\n    if (container) {\n      return mount(container, true, resolveRootNamespace(container));\n    }\n  };\n  return app;\n};\nfunction resolveRootNamespace(container) {\n  if (container instanceof SVGElement) {\n    return \"svg\";\n  }\n  if (typeof MathMLElement === \"function\" && container instanceof MathMLElement) {\n    return \"mathml\";\n  }\n}\nfunction normalizeContainer(container) {\n  if (shared.isString(container)) {\n    const res = document.querySelector(container);\n    return res;\n  }\n  return container;\n}\nlet ssrDirectiveInitialized = false;\nconst initDirectivesForSSR = () => {\n  if (!ssrDirectiveInitialized) {\n    ssrDirectiveInitialized = true;\n    initVModelForSSR();\n    initVShowForSSR();\n  }\n} ;\n\nexports.Transition = Transition;\nexports.TransitionGroup = TransitionGroup;\nexports.VueElement = VueElement;\nexports.createApp = createApp;\nexports.createSSRApp = createSSRApp;\nexports.defineCustomElement = defineCustomElement;\nexports.defineSSRCustomElement = defineSSRCustomElement;\nexports.hydrate = hydrate;\nexports.initDirectivesForSSR = initDirectivesForSSR;\nexports.render = render;\nexports.useCssModule = useCssModule;\nexports.useCssVars = useCssVars;\nexports.useHost = useHost;\nexports.useShadowRoot = useShadowRoot;\nexports.vModelCheckbox = vModelCheckbox;\nexports.vModelDynamic = vModelDynamic;\nexports.vModelRadio = vModelRadio;\nexports.vModelSelect = vModelSelect;\nexports.vModelText = vModelText;\nexports.vShow = vShow;\nexports.withKeys = withKeys;\nexports.withModifiers = withModifiers;\nObject.keys(runtimeCore).forEach(function (k) {\n  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = runtimeCore[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/runtime-dom.cjs.prod.js')\n} else {\n  module.exports = require('./dist/runtime-dom.cjs.js')\n}\n","/**\n* vue v3.5.18\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar compilerDom = require('@vue/compiler-dom');\nvar runtimeDom = require('@vue/runtime-dom');\nvar shared = require('@vue/shared');\n\nfunction _interopNamespaceDefault(e) {\n  var n = Object.create(null);\n  if (e) {\n    for (var k in e) {\n      n[k] = e[k];\n    }\n  }\n  n.default = e;\n  return Object.freeze(n);\n}\n\nvar runtimeDom__namespace = /*#__PURE__*/_interopNamespaceDefault(runtimeDom);\n\nconst compileCache = /* @__PURE__ */ Object.create(null);\nfunction compileToFunction(template, options) {\n  if (!shared.isString(template)) {\n    if (template.nodeType) {\n      template = template.innerHTML;\n    } else {\n      return shared.NOOP;\n    }\n  }\n  const key = shared.genCacheKey(template, options);\n  const cached = compileCache[key];\n  if (cached) {\n    return cached;\n  }\n  if (template[0] === \"#\") {\n    const el = document.querySelector(template);\n    template = el ? el.innerHTML : ``;\n  }\n  const opts = shared.extend(\n    {\n      hoistStatic: true,\n      onError: void 0,\n      onWarn: shared.NOOP\n    },\n    options\n  );\n  if (!opts.isCustomElement && typeof customElements !== \"undefined\") {\n    opts.isCustomElement = (tag) => !!customElements.get(tag);\n  }\n  const { code } = compilerDom.compile(template, opts);\n  const render = new Function(\"Vue\", code)(runtimeDom__namespace);\n  render._rc = true;\n  return compileCache[key] = render;\n}\nruntimeDom.registerRuntimeCompiler(compileToFunction);\n\nexports.compile = compileToFunction;\nObject.keys(runtimeDom).forEach(function (k) {\n  if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) exports[k] = runtimeDom[k];\n});\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/vue.cjs.prod.js')\n} else {\n  module.exports = require('./dist/vue.cjs.js')\n}\n","/*!\n  * vue-router v4.5.1\n  * (c) 2025 Eduardo San Martin Morote\n  * @license MIT\n  */\n'use strict';\n\nvar vue = require('vue');\n\nconst isBrowser = typeof document !== 'undefined';\n\n/**\n * Allows differentiating lazy components from functional components and vue-class-component\n * @internal\n *\n * @param component\n */\nfunction isRouteComponent(component) {\n    return (typeof component === 'object' ||\n        'displayName' in component ||\n        'props' in component ||\n        '__vccOpts' in component);\n}\nfunction isESModule(obj) {\n    return (obj.__esModule ||\n        obj[Symbol.toStringTag] === 'Module' ||\n        // support CF with dynamic imports that do not\n        // add the Module string tag\n        (obj.default && isRouteComponent(obj.default)));\n}\nconst assign = Object.assign;\nfunction applyToParams(fn, params) {\n    const newParams = {};\n    for (const key in params) {\n        const value = params[key];\n        newParams[key] = isArray(value)\n            ? value.map(fn)\n            : fn(value);\n    }\n    return newParams;\n}\nconst noop = () => { };\n/**\n * Typesafe alternative to Array.isArray\n * https://github.com/microsoft/TypeScript/pull/48228\n */\nconst isArray = Array.isArray;\n\n/**\n * Encoding Rules (␣ = Space)\n * - Path: ␣ \" < > # ? { }\n * - Query: ␣ \" < > # & =\n * - Hash: ␣ \" < > `\n *\n * On top of that, the RFC3986 (https://tools.ietf.org/html/rfc3986#section-2.2)\n * defines some extra characters to be encoded. Most browsers do not encode them\n * in encodeURI https://github.com/whatwg/url/issues/369, so it may be safer to\n * also encode `!'()*`. Leaving un-encoded only ASCII alphanumeric(`a-zA-Z0-9`)\n * plus `-._~`. This extra safety should be applied to query by patching the\n * string returned by encodeURIComponent encodeURI also encodes `[\\]^`. `\\`\n * should be encoded to avoid ambiguity. Browsers (IE, FF, C) transform a `\\`\n * into a `/` if directly typed in. The _backtick_ (`````) should also be\n * encoded everywhere because some browsers like FF encode it when directly\n * written while others don't. Safari and IE don't encode ``\"<>{}``` in hash.\n */\n// const EXTRA_RESERVED_RE = /[!'()*]/g\n// const encodeReservedReplacer = (c: string) => '%' + c.charCodeAt(0).toString(16)\nconst HASH_RE = /#/g; // %23\nconst AMPERSAND_RE = /&/g; // %26\nconst SLASH_RE = /\\//g; // %2F\nconst EQUAL_RE = /=/g; // %3D\nconst IM_RE = /\\?/g; // %3F\nconst PLUS_RE = /\\+/g; // %2B\n/**\n * NOTE: It's not clear to me if we should encode the + symbol in queries, it\n * seems to be less flexible than not doing so and I can't find out the legacy\n * systems requiring this for regular requests like text/html. In the standard,\n * the encoding of the plus character is only mentioned for\n * application/x-www-form-urlencoded\n * (https://url.spec.whatwg.org/#urlencoded-parsing) and most browsers seems lo\n * leave the plus character as is in queries. To be more flexible, we allow the\n * plus character on the query, but it can also be manually encoded by the user.\n *\n * Resources:\n * - https://url.spec.whatwg.org/#urlencoded-parsing\n * - https://stackoverflow.com/questions/1634271/url-encoding-the-space-character-or-20\n */\nconst ENC_BRACKET_OPEN_RE = /%5B/g; // [\nconst ENC_BRACKET_CLOSE_RE = /%5D/g; // ]\nconst ENC_CARET_RE = /%5E/g; // ^\nconst ENC_BACKTICK_RE = /%60/g; // `\nconst ENC_CURLY_OPEN_RE = /%7B/g; // {\nconst ENC_PIPE_RE = /%7C/g; // |\nconst ENC_CURLY_CLOSE_RE = /%7D/g; // }\nconst ENC_SPACE_RE = /%20/g; // }\n/**\n * Encode characters that need to be encoded on the path, search and hash\n * sections of the URL.\n *\n * @internal\n * @param text - string to encode\n * @returns encoded string\n */\nfunction commonEncode(text) {\n    return encodeURI('' + text)\n        .replace(ENC_PIPE_RE, '|')\n        .replace(ENC_BRACKET_OPEN_RE, '[')\n        .replace(ENC_BRACKET_CLOSE_RE, ']');\n}\n/**\n * Encode characters that need to be encoded on the hash section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeHash(text) {\n    return commonEncode(text)\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^');\n}\n/**\n * Encode characters that need to be encoded query values on the query\n * section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeQueryValue(text) {\n    return (commonEncode(text)\n        // Encode the space as +, encode the + to differentiate it from the space\n        .replace(PLUS_RE, '%2B')\n        .replace(ENC_SPACE_RE, '+')\n        .replace(HASH_RE, '%23')\n        .replace(AMPERSAND_RE, '%26')\n        .replace(ENC_BACKTICK_RE, '`')\n        .replace(ENC_CURLY_OPEN_RE, '{')\n        .replace(ENC_CURLY_CLOSE_RE, '}')\n        .replace(ENC_CARET_RE, '^'));\n}\n/**\n * Like `encodeQueryValue` but also encodes the `=` character.\n *\n * @param text - string to encode\n */\nfunction encodeQueryKey(text) {\n    return encodeQueryValue(text).replace(EQUAL_RE, '%3D');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodePath(text) {\n    return commonEncode(text).replace(HASH_RE, '%23').replace(IM_RE, '%3F');\n}\n/**\n * Encode characters that need to be encoded on the path section of the URL as a\n * param. This function encodes everything {@link encodePath} does plus the\n * slash (`/`) character. If `text` is `null` or `undefined`, returns an empty\n * string instead.\n *\n * @param text - string to encode\n * @returns encoded string\n */\nfunction encodeParam(text) {\n    return text == null ? '' : encodePath(text).replace(SLASH_RE, '%2F');\n}\n/**\n * Decode text using `decodeURIComponent`. Returns the original text if it\n * fails.\n *\n * @param text - string to decode\n * @returns decoded string\n */\nfunction decode(text) {\n    try {\n        return decodeURIComponent('' + text);\n    }\n    catch (err) {\n    }\n    return '' + text;\n}\n\nconst TRAILING_SLASH_RE = /\\/$/;\nconst removeTrailingSlash = (path) => path.replace(TRAILING_SLASH_RE, '');\n/**\n * Transforms a URI into a normalized history location\n *\n * @param parseQuery\n * @param location - URI to normalize\n * @param currentLocation - current absolute location. Allows resolving relative\n * paths. Must start with `/`. Defaults to `/`\n * @returns a normalized history location\n */\nfunction parseURL(parseQuery, location, currentLocation = '/') {\n    let path, query = {}, searchString = '', hash = '';\n    // Could use URL and URLSearchParams but IE 11 doesn't support it\n    // TODO: move to new URL()\n    const hashPos = location.indexOf('#');\n    let searchPos = location.indexOf('?');\n    // the hash appears before the search, so it's not part of the search string\n    if (hashPos < searchPos && hashPos >= 0) {\n        searchPos = -1;\n    }\n    if (searchPos > -1) {\n        path = location.slice(0, searchPos);\n        searchString = location.slice(searchPos + 1, hashPos > -1 ? hashPos : location.length);\n        query = parseQuery(searchString);\n    }\n    if (hashPos > -1) {\n        path = path || location.slice(0, hashPos);\n        // keep the # character\n        hash = location.slice(hashPos, location.length);\n    }\n    // no search and no query\n    path = resolveRelativePath(path != null ? path : location, currentLocation);\n    // empty path means a relative query or hash `?foo=f`, `#thing`\n    return {\n        fullPath: path + (searchString && '?') + searchString + hash,\n        path,\n        query,\n        hash: decode(hash),\n    };\n}\n/**\n * Stringifies a URL object\n *\n * @param stringifyQuery\n * @param location\n */\nfunction stringifyURL(stringifyQuery, location) {\n    const query = location.query ? stringifyQuery(location.query) : '';\n    return location.path + (query && '?') + query + (location.hash || '');\n}\n/**\n * Strips off the base from the beginning of a location.pathname in a non-case-sensitive way.\n *\n * @param pathname - location.pathname\n * @param base - base to strip off\n */\nfunction stripBase(pathname, base) {\n    // no base or base is not found at the beginning\n    if (!base || !pathname.toLowerCase().startsWith(base.toLowerCase()))\n        return pathname;\n    return pathname.slice(base.length) || '/';\n}\n/**\n * Checks if two RouteLocation are equal. This means that both locations are\n * pointing towards the same {@link RouteRecord} and that all `params`, `query`\n * parameters and `hash` are the same\n *\n * @param stringifyQuery - A function that takes a query object of type LocationQueryRaw and returns a string representation of it.\n * @param a - first {@link RouteLocation}\n * @param b - second {@link RouteLocation}\n */\nfunction isSameRouteLocation(stringifyQuery, a, b) {\n    const aLastIndex = a.matched.length - 1;\n    const bLastIndex = b.matched.length - 1;\n    return (aLastIndex > -1 &&\n        aLastIndex === bLastIndex &&\n        isSameRouteRecord(a.matched[aLastIndex], b.matched[bLastIndex]) &&\n        isSameRouteLocationParams(a.params, b.params) &&\n        stringifyQuery(a.query) === stringifyQuery(b.query) &&\n        a.hash === b.hash);\n}\n/**\n * Check if two `RouteRecords` are equal. Takes into account aliases: they are\n * considered equal to the `RouteRecord` they are aliasing.\n *\n * @param a - first {@link RouteRecord}\n * @param b - second {@link RouteRecord}\n */\nfunction isSameRouteRecord(a, b) {\n    // since the original record has an undefined value for aliasOf\n    // but all aliases point to the original record, this will always compare\n    // the original record\n    return (a.aliasOf || a) === (b.aliasOf || b);\n}\nfunction isSameRouteLocationParams(a, b) {\n    if (Object.keys(a).length !== Object.keys(b).length)\n        return false;\n    for (const key in a) {\n        if (!isSameRouteLocationParamsValue(a[key], b[key]))\n            return false;\n    }\n    return true;\n}\nfunction isSameRouteLocationParamsValue(a, b) {\n    return isArray(a)\n        ? isEquivalentArray(a, b)\n        : isArray(b)\n            ? isEquivalentArray(b, a)\n            : a === b;\n}\n/**\n * Check if two arrays are the same or if an array with one single entry is the\n * same as another primitive value. Used to check query and parameters\n *\n * @param a - array of values\n * @param b - array of values or a single value\n */\nfunction isEquivalentArray(a, b) {\n    return isArray(b)\n        ? a.length === b.length && a.every((value, i) => value === b[i])\n        : a.length === 1 && a[0] === b;\n}\n/**\n * Resolves a relative path that starts with `.`.\n *\n * @param to - path location we are resolving\n * @param from - currentLocation.path, should start with `/`\n */\nfunction resolveRelativePath(to, from) {\n    if (to.startsWith('/'))\n        return to;\n    if (!to)\n        return from;\n    const fromSegments = from.split('/');\n    const toSegments = to.split('/');\n    const lastToSegment = toSegments[toSegments.length - 1];\n    // make . and ./ the same (../ === .., ../../ === ../..)\n    // this is the same behavior as new URL()\n    if (lastToSegment === '..' || lastToSegment === '.') {\n        toSegments.push('');\n    }\n    let position = fromSegments.length - 1;\n    let toPosition;\n    let segment;\n    for (toPosition = 0; toPosition < toSegments.length; toPosition++) {\n        segment = toSegments[toPosition];\n        // we stay on the same position\n        if (segment === '.')\n            continue;\n        // go up in the from array\n        if (segment === '..') {\n            // we can't go below zero, but we still need to increment toPosition\n            if (position > 1)\n                position--;\n            // continue\n        }\n        // we reached a non-relative path, we stop here\n        else\n            break;\n    }\n    return (fromSegments.slice(0, position).join('/') +\n        '/' +\n        toSegments.slice(toPosition).join('/'));\n}\n/**\n * Initial route location where the router is. Can be used in navigation guards\n * to differentiate the initial navigation.\n *\n * @example\n * ```js\n * import { START_LOCATION } from 'vue-router'\n *\n * router.beforeEach((to, from) => {\n *   if (from === START_LOCATION) {\n *     // initial navigation\n *   }\n * })\n * ```\n */\nconst START_LOCATION_NORMALIZED = {\n    path: '/',\n    // TODO: could we use a symbol in the future?\n    name: undefined,\n    params: {},\n    query: {},\n    hash: '',\n    fullPath: '/',\n    matched: [],\n    meta: {},\n    redirectedFrom: undefined,\n};\n\nvar NavigationType;\n(function (NavigationType) {\n    NavigationType[\"pop\"] = \"pop\";\n    NavigationType[\"push\"] = \"push\";\n})(NavigationType || (NavigationType = {}));\nvar NavigationDirection;\n(function (NavigationDirection) {\n    NavigationDirection[\"back\"] = \"back\";\n    NavigationDirection[\"forward\"] = \"forward\";\n    NavigationDirection[\"unknown\"] = \"\";\n})(NavigationDirection || (NavigationDirection = {}));\n/**\n * Starting location for Histories\n */\nconst START = '';\n// Generic utils\n/**\n * Normalizes a base by removing any trailing slash and reading the base tag if\n * present.\n *\n * @param base - base to normalize\n */\nfunction normalizeBase(base) {\n    if (!base) {\n        if (isBrowser) {\n            // respect <base> tag\n            const baseEl = document.querySelector('base');\n            base = (baseEl && baseEl.getAttribute('href')) || '/';\n            // strip full URL origin\n            base = base.replace(/^\\w+:\\/\\/[^\\/]+/, '');\n        }\n        else {\n            base = '/';\n        }\n    }\n    // ensure leading slash when it was removed by the regex above avoid leading\n    // slash with hash because the file could be read from the disk like file://\n    // and the leading slash would cause problems\n    if (base[0] !== '/' && base[0] !== '#')\n        base = '/' + base;\n    // remove the trailing slash so all other method can just do `base + fullPath`\n    // to build an href\n    return removeTrailingSlash(base);\n}\n// remove any character before the hash\nconst BEFORE_HASH_RE = /^[^#]+#/;\nfunction createHref(base, location) {\n    return base.replace(BEFORE_HASH_RE, '#') + location;\n}\n\nfunction getElementPosition(el, offset) {\n    const docRect = document.documentElement.getBoundingClientRect();\n    const elRect = el.getBoundingClientRect();\n    return {\n        behavior: offset.behavior,\n        left: elRect.left - docRect.left - (offset.left || 0),\n        top: elRect.top - docRect.top - (offset.top || 0),\n    };\n}\nconst computeScrollPosition = () => ({\n    left: window.scrollX,\n    top: window.scrollY,\n});\nfunction scrollToPosition(position) {\n    let scrollToOptions;\n    if ('el' in position) {\n        const positionEl = position.el;\n        const isIdSelector = typeof positionEl === 'string' && positionEl.startsWith('#');\n        const el = typeof positionEl === 'string'\n            ? isIdSelector\n                ? document.getElementById(positionEl.slice(1))\n                : document.querySelector(positionEl)\n            : positionEl;\n        if (!el) {\n            return;\n        }\n        scrollToOptions = getElementPosition(el, position);\n    }\n    else {\n        scrollToOptions = position;\n    }\n    if ('scrollBehavior' in document.documentElement.style)\n        window.scrollTo(scrollToOptions);\n    else {\n        window.scrollTo(scrollToOptions.left != null ? scrollToOptions.left : window.scrollX, scrollToOptions.top != null ? scrollToOptions.top : window.scrollY);\n    }\n}\nfunction getScrollKey(path, delta) {\n    const position = history.state ? history.state.position - delta : -1;\n    return position + path;\n}\nconst scrollPositions = new Map();\nfunction saveScrollPosition(key, scrollPosition) {\n    scrollPositions.set(key, scrollPosition);\n}\nfunction getSavedScrollPosition(key) {\n    const scroll = scrollPositions.get(key);\n    // consume it so it's not used again\n    scrollPositions.delete(key);\n    return scroll;\n}\n// TODO: RFC about how to save scroll position\n/**\n * ScrollBehavior instance used by the router to compute and restore the scroll\n * position when navigating.\n */\n// export interface ScrollHandler<ScrollPositionEntry extends HistoryStateValue, ScrollPosition extends ScrollPositionEntry> {\n//   // returns a scroll position that can be saved in history\n//   compute(): ScrollPositionEntry\n//   // can take an extended ScrollPositionEntry\n//   scroll(position: ScrollPosition): void\n// }\n// export const scrollHandler: ScrollHandler<ScrollPosition> = {\n//   compute: computeScroll,\n//   scroll: scrollToPosition,\n// }\n\nlet createBaseLocation = () => location.protocol + '//' + location.host;\n/**\n * Creates a normalized history location from a window.location object\n * @param base - The base path\n * @param location - The window.location object\n */\nfunction createCurrentLocation(base, location) {\n    const { pathname, search, hash } = location;\n    // allows hash bases like #, /#, #/, #!, #!/, /#!/, or even /folder#end\n    const hashPos = base.indexOf('#');\n    if (hashPos > -1) {\n        let slicePos = hash.includes(base.slice(hashPos))\n            ? base.slice(hashPos).length\n            : 1;\n        let pathFromHash = hash.slice(slicePos);\n        // prepend the starting slash to hash so the url starts with /#\n        if (pathFromHash[0] !== '/')\n            pathFromHash = '/' + pathFromHash;\n        return stripBase(pathFromHash, '');\n    }\n    const path = stripBase(pathname, base);\n    return path + search + hash;\n}\nfunction useHistoryListeners(base, historyState, currentLocation, replace) {\n    let listeners = [];\n    let teardowns = [];\n    // TODO: should it be a stack? a Dict. Check if the popstate listener\n    // can trigger twice\n    let pauseState = null;\n    const popStateHandler = ({ state, }) => {\n        const to = createCurrentLocation(base, location);\n        const from = currentLocation.value;\n        const fromState = historyState.value;\n        let delta = 0;\n        if (state) {\n            currentLocation.value = to;\n            historyState.value = state;\n            // ignore the popstate and reset the pauseState\n            if (pauseState && pauseState === from) {\n                pauseState = null;\n                return;\n            }\n            delta = fromState ? state.position - fromState.position : 0;\n        }\n        else {\n            replace(to);\n        }\n        // Here we could also revert the navigation by calling history.go(-delta)\n        // this listener will have to be adapted to not trigger again and to wait for the url\n        // to be updated before triggering the listeners. Some kind of validation function would also\n        // need to be passed to the listeners so the navigation can be accepted\n        // call all listeners\n        listeners.forEach(listener => {\n            listener(currentLocation.value, from, {\n                delta,\n                type: NavigationType.pop,\n                direction: delta\n                    ? delta > 0\n                        ? NavigationDirection.forward\n                        : NavigationDirection.back\n                    : NavigationDirection.unknown,\n            });\n        });\n    };\n    function pauseListeners() {\n        pauseState = currentLocation.value;\n    }\n    function listen(callback) {\n        // set up the listener and prepare teardown callbacks\n        listeners.push(callback);\n        const teardown = () => {\n            const index = listeners.indexOf(callback);\n            if (index > -1)\n                listeners.splice(index, 1);\n        };\n        teardowns.push(teardown);\n        return teardown;\n    }\n    function beforeUnloadListener() {\n        const { history } = window;\n        if (!history.state)\n            return;\n        history.replaceState(assign({}, history.state, { scroll: computeScrollPosition() }), '');\n    }\n    function destroy() {\n        for (const teardown of teardowns)\n            teardown();\n        teardowns = [];\n        window.removeEventListener('popstate', popStateHandler);\n        window.removeEventListener('beforeunload', beforeUnloadListener);\n    }\n    // set up the listeners and prepare teardown callbacks\n    window.addEventListener('popstate', popStateHandler);\n    // TODO: could we use 'pagehide' or 'visibilitychange' instead?\n    // https://developer.chrome.com/blog/page-lifecycle-api/\n    window.addEventListener('beforeunload', beforeUnloadListener, {\n        passive: true,\n    });\n    return {\n        pauseListeners,\n        listen,\n        destroy,\n    };\n}\n/**\n * Creates a state object\n */\nfunction buildState(back, current, forward, replaced = false, computeScroll = false) {\n    return {\n        back,\n        current,\n        forward,\n        replaced,\n        position: window.history.length,\n        scroll: computeScroll ? computeScrollPosition() : null,\n    };\n}\nfunction useHistoryStateNavigation(base) {\n    const { history, location } = window;\n    // private variables\n    const currentLocation = {\n        value: createCurrentLocation(base, location),\n    };\n    const historyState = { value: history.state };\n    // build current history entry as this is a fresh navigation\n    if (!historyState.value) {\n        changeLocation(currentLocation.value, {\n            back: null,\n            current: currentLocation.value,\n            forward: null,\n            // the length is off by one, we need to decrease it\n            position: history.length - 1,\n            replaced: true,\n            // don't add a scroll as the user may have an anchor, and we want\n            // scrollBehavior to be triggered without a saved position\n            scroll: null,\n        }, true);\n    }\n    function changeLocation(to, state, replace) {\n        /**\n         * if a base tag is provided, and we are on a normal domain, we have to\n         * respect the provided `base` attribute because pushState() will use it and\n         * potentially erase anything before the `#` like at\n         * https://github.com/vuejs/router/issues/685 where a base of\n         * `/folder/#` but a base of `/` would erase the `/folder/` section. If\n         * there is no host, the `<base>` tag makes no sense and if there isn't a\n         * base tag we can just use everything after the `#`.\n         */\n        const hashIndex = base.indexOf('#');\n        const url = hashIndex > -1\n            ? (location.host && document.querySelector('base')\n                ? base\n                : base.slice(hashIndex)) + to\n            : createBaseLocation() + base + to;\n        try {\n            // BROWSER QUIRK\n            // NOTE: Safari throws a SecurityError when calling this function 100 times in 30 seconds\n            history[replace ? 'replaceState' : 'pushState'](state, '', url);\n            historyState.value = state;\n        }\n        catch (err) {\n            {\n                console.error(err);\n            }\n            // Force the navigation, this also resets the call count\n            location[replace ? 'replace' : 'assign'](url);\n        }\n    }\n    function replace(to, data) {\n        const state = assign({}, history.state, buildState(historyState.value.back, \n        // keep back and forward entries but override current position\n        to, historyState.value.forward, true), data, { position: historyState.value.position });\n        changeLocation(to, state, true);\n        currentLocation.value = to;\n    }\n    function push(to, data) {\n        // Add to current entry the information of where we are going\n        // as well as saving the current position\n        const currentState = assign({}, \n        // use current history state to gracefully handle a wrong call to\n        // history.replaceState\n        // https://github.com/vuejs/router/issues/366\n        historyState.value, history.state, {\n            forward: to,\n            scroll: computeScrollPosition(),\n        });\n        changeLocation(currentState.current, currentState, true);\n        const state = assign({}, buildState(currentLocation.value, to, null), { position: currentState.position + 1 }, data);\n        changeLocation(to, state, false);\n        currentLocation.value = to;\n    }\n    return {\n        location: currentLocation,\n        state: historyState,\n        push,\n        replace,\n    };\n}\n/**\n * Creates an HTML5 history. Most common history for single page applications.\n *\n * @param base -\n */\nfunction createWebHistory(base) {\n    base = normalizeBase(base);\n    const historyNavigation = useHistoryStateNavigation(base);\n    const historyListeners = useHistoryListeners(base, historyNavigation.state, historyNavigation.location, historyNavigation.replace);\n    function go(delta, triggerListeners = true) {\n        if (!triggerListeners)\n            historyListeners.pauseListeners();\n        history.go(delta);\n    }\n    const routerHistory = assign({\n        // it's overridden right after\n        location: '',\n        base,\n        go,\n        createHref: createHref.bind(null, base),\n    }, historyNavigation, historyListeners);\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => historyNavigation.location.value,\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => historyNavigation.state.value,\n    });\n    return routerHistory;\n}\n\n/**\n * Creates an in-memory based history. The main purpose of this history is to handle SSR. It starts in a special location that is nowhere.\n * It's up to the user to replace that location with the starter location by either calling `router.push` or `router.replace`.\n *\n * @param base - Base applied to all urls, defaults to '/'\n * @returns a history object that can be passed to the router constructor\n */\nfunction createMemoryHistory(base = '') {\n    let listeners = [];\n    let queue = [[START, {}]];\n    let position = 0;\n    base = normalizeBase(base);\n    function setLocation(location, state = {}) {\n        position++;\n        if (position !== queue.length) {\n            // we are in the middle, we remove everything from here in the queue\n            queue.splice(position);\n        }\n        queue.push([location, state]);\n    }\n    function triggerListeners(to, from, { direction, delta }) {\n        const info = {\n            direction,\n            delta,\n            type: NavigationType.pop,\n        };\n        for (const callback of listeners) {\n            callback(to, from, info);\n        }\n    }\n    const routerHistory = {\n        // rewritten by Object.defineProperty\n        location: START,\n        // rewritten by Object.defineProperty\n        state: {},\n        base,\n        createHref: createHref.bind(null, base),\n        replace(to, state) {\n            // remove current entry and decrement position\n            queue.splice(position--, 1);\n            setLocation(to, state);\n        },\n        push(to, state) {\n            setLocation(to, state);\n        },\n        listen(callback) {\n            listeners.push(callback);\n            return () => {\n                const index = listeners.indexOf(callback);\n                if (index > -1)\n                    listeners.splice(index, 1);\n            };\n        },\n        destroy() {\n            listeners = [];\n            queue = [[START, {}]];\n            position = 0;\n        },\n        go(delta, shouldTrigger = true) {\n            const from = this.location;\n            const direction = \n            // we are considering delta === 0 going forward, but in abstract mode\n            // using 0 for the delta doesn't make sense like it does in html5 where\n            // it reloads the page\n            delta < 0 ? NavigationDirection.back : NavigationDirection.forward;\n            position = Math.max(0, Math.min(position + delta, queue.length - 1));\n            if (shouldTrigger) {\n                triggerListeners(this.location, from, {\n                    direction,\n                    delta,\n                });\n            }\n        },\n    };\n    Object.defineProperty(routerHistory, 'location', {\n        enumerable: true,\n        get: () => queue[position][0],\n    });\n    Object.defineProperty(routerHistory, 'state', {\n        enumerable: true,\n        get: () => queue[position][1],\n    });\n    return routerHistory;\n}\n\n/**\n * Creates a hash history. Useful for web applications with no host (e.g. `file://`) or when configuring a server to\n * handle any URL is not possible.\n *\n * @param base - optional base to provide. Defaults to `location.pathname + location.search` If there is a `<base>` tag\n * in the `head`, its value will be ignored in favor of this parameter **but note it affects all the history.pushState()\n * calls**, meaning that if you use a `<base>` tag, it's `href` value **has to match this parameter** (ignoring anything\n * after the `#`).\n *\n * @example\n * ```js\n * // at https://example.com/folder\n * createWebHashHistory() // gives a url of `https://example.com/folder#`\n * createWebHashHistory('/folder/') // gives a url of `https://example.com/folder/#`\n * // if the `#` is provided in the base, it won't be added by `createWebHashHistory`\n * createWebHashHistory('/folder/#/app/') // gives a url of `https://example.com/folder/#/app/`\n * // you should avoid doing this because it changes the original url and breaks copying urls\n * createWebHashHistory('/other-folder/') // gives a url of `https://example.com/other-folder/#`\n *\n * // at file:///usr/etc/folder/index.html\n * // for locations with no `host`, the base is ignored\n * createWebHashHistory('/iAmIgnored') // gives a url of `file:///usr/etc/folder/index.html#`\n * ```\n */\nfunction createWebHashHistory(base) {\n    // Make sure this implementation is fine in terms of encoding, specially for IE11\n    // for `file://`, directly use the pathname and ignore the base\n    // location.pathname contains an initial `/` even at the root: `https://example.com`\n    base = location.host ? base || location.pathname + location.search : '';\n    // allow the user to provide a `#` in the middle: `/base/#/app`\n    if (!base.includes('#'))\n        base += '#';\n    return createWebHistory(base);\n}\n\nfunction isRouteLocation(route) {\n    return typeof route === 'string' || (route && typeof route === 'object');\n}\nfunction isRouteName(name) {\n    return typeof name === 'string' || typeof name === 'symbol';\n}\n\nconst NavigationFailureSymbol = Symbol('');\n/**\n * Enumeration with all possible types for navigation failures. Can be passed to\n * {@link isNavigationFailure} to check for specific failures.\n */\nexports.NavigationFailureType = void 0;\n(function (NavigationFailureType) {\n    /**\n     * An aborted navigation is a navigation that failed because a navigation\n     * guard returned `false` or called `next(false)`\n     */\n    NavigationFailureType[NavigationFailureType[\"aborted\"] = 4] = \"aborted\";\n    /**\n     * A cancelled navigation is a navigation that failed because a more recent\n     * navigation finished started (not necessarily finished).\n     */\n    NavigationFailureType[NavigationFailureType[\"cancelled\"] = 8] = \"cancelled\";\n    /**\n     * A duplicated navigation is a navigation that failed because it was\n     * initiated while already being at the exact same location.\n     */\n    NavigationFailureType[NavigationFailureType[\"duplicated\"] = 16] = \"duplicated\";\n})(exports.NavigationFailureType || (exports.NavigationFailureType = {}));\n// DEV only debug messages\nconst ErrorTypeMessages = {\n    [1 /* ErrorTypes.MATCHER_NOT_FOUND */]({ location, currentLocation }) {\n        return `No match for\\n ${JSON.stringify(location)}${currentLocation\n            ? '\\nwhile being at\\n' + JSON.stringify(currentLocation)\n            : ''}`;\n    },\n    [2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */]({ from, to, }) {\n        return `Redirected from \"${from.fullPath}\" to \"${stringifyRoute(to)}\" via a navigation guard.`;\n    },\n    [4 /* ErrorTypes.NAVIGATION_ABORTED */]({ from, to }) {\n        return `Navigation aborted from \"${from.fullPath}\" to \"${to.fullPath}\" via a navigation guard.`;\n    },\n    [8 /* ErrorTypes.NAVIGATION_CANCELLED */]({ from, to }) {\n        return `Navigation cancelled from \"${from.fullPath}\" to \"${to.fullPath}\" with a new navigation.`;\n    },\n    [16 /* ErrorTypes.NAVIGATION_DUPLICATED */]({ from, to }) {\n        return `Avoided redundant navigation to current location: \"${from.fullPath}\".`;\n    },\n};\n/**\n * Creates a typed NavigationFailure object.\n * @internal\n * @param type - NavigationFailureType\n * @param params - { from, to }\n */\nfunction createRouterError(type, params) {\n    // keep full error messages in cjs versions\n    {\n        return assign(new Error(ErrorTypeMessages[type](params)), {\n            type,\n            [NavigationFailureSymbol]: true,\n        }, params);\n    }\n}\nfunction isNavigationFailure(error, type) {\n    return (error instanceof Error &&\n        NavigationFailureSymbol in error &&\n        (type == null || !!(error.type & type)));\n}\nconst propertiesToLog = ['params', 'query', 'hash'];\nfunction stringifyRoute(to) {\n    if (typeof to === 'string')\n        return to;\n    if (to.path != null)\n        return to.path;\n    const location = {};\n    for (const key of propertiesToLog) {\n        if (key in to)\n            location[key] = to[key];\n    }\n    return JSON.stringify(location, null, 2);\n}\n\n// default pattern for a param: non-greedy everything but /\nconst BASE_PARAM_PATTERN = '[^/]+?';\nconst BASE_PATH_PARSER_OPTIONS = {\n    sensitive: false,\n    strict: false,\n    start: true,\n    end: true,\n};\n// Special Regex characters that must be escaped in static tokens\nconst REGEX_CHARS_RE = /[.+*?^${}()[\\]/\\\\]/g;\n/**\n * Creates a path parser from an array of Segments (a segment is an array of Tokens)\n *\n * @param segments - array of segments returned by tokenizePath\n * @param extraOptions - optional options for the regexp\n * @returns a PathParser\n */\nfunction tokensToParser(segments, extraOptions) {\n    const options = assign({}, BASE_PATH_PARSER_OPTIONS, extraOptions);\n    // the amount of scores is the same as the length of segments except for the root segment \"/\"\n    const score = [];\n    // the regexp as a string\n    let pattern = options.start ? '^' : '';\n    // extracted keys\n    const keys = [];\n    for (const segment of segments) {\n        // the root segment needs special treatment\n        const segmentScores = segment.length ? [] : [90 /* PathScore.Root */];\n        // allow trailing slash\n        if (options.strict && !segment.length)\n            pattern += '/';\n        for (let tokenIndex = 0; tokenIndex < segment.length; tokenIndex++) {\n            const token = segment[tokenIndex];\n            // resets the score if we are inside a sub-segment /:a-other-:b\n            let subSegmentScore = 40 /* PathScore.Segment */ +\n                (options.sensitive ? 0.25 /* PathScore.BonusCaseSensitive */ : 0);\n            if (token.type === 0 /* TokenType.Static */) {\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    pattern += '/';\n                pattern += token.value.replace(REGEX_CHARS_RE, '\\\\$&');\n                subSegmentScore += 40 /* PathScore.Static */;\n            }\n            else if (token.type === 1 /* TokenType.Param */) {\n                const { value, repeatable, optional, regexp } = token;\n                keys.push({\n                    name: value,\n                    repeatable,\n                    optional,\n                });\n                const re = regexp ? regexp : BASE_PARAM_PATTERN;\n                // the user provided a custom regexp /:id(\\\\d+)\n                if (re !== BASE_PARAM_PATTERN) {\n                    subSegmentScore += 10 /* PathScore.BonusCustomRegExp */;\n                    // make sure the regexp is valid before using it\n                    try {\n                        new RegExp(`(${re})`);\n                    }\n                    catch (err) {\n                        throw new Error(`Invalid custom RegExp for param \"${value}\" (${re}): ` +\n                            err.message);\n                    }\n                }\n                // when we repeat we must take care of the repeating leading slash\n                let subPattern = repeatable ? `((?:${re})(?:/(?:${re}))*)` : `(${re})`;\n                // prepend the slash if we are starting a new segment\n                if (!tokenIndex)\n                    subPattern =\n                        // avoid an optional / if there are more segments e.g. /:p?-static\n                        // or /:p?-:p2\n                        optional && segment.length < 2\n                            ? `(?:/${subPattern})`\n                            : '/' + subPattern;\n                if (optional)\n                    subPattern += '?';\n                pattern += subPattern;\n                subSegmentScore += 20 /* PathScore.Dynamic */;\n                if (optional)\n                    subSegmentScore += -8 /* PathScore.BonusOptional */;\n                if (repeatable)\n                    subSegmentScore += -20 /* PathScore.BonusRepeatable */;\n                if (re === '.*')\n                    subSegmentScore += -50 /* PathScore.BonusWildcard */;\n            }\n            segmentScores.push(subSegmentScore);\n        }\n        // an empty array like /home/ -> [[{home}], []]\n        // if (!segment.length) pattern += '/'\n        score.push(segmentScores);\n    }\n    // only apply the strict bonus to the last score\n    if (options.strict && options.end) {\n        const i = score.length - 1;\n        score[i][score[i].length - 1] += 0.7000000000000001 /* PathScore.BonusStrict */;\n    }\n    // TODO: dev only warn double trailing slash\n    if (!options.strict)\n        pattern += '/?';\n    if (options.end)\n        pattern += '$';\n    // allow paths like /dynamic to only match dynamic or dynamic/... but not dynamic_something_else\n    else if (options.strict && !pattern.endsWith('/'))\n        pattern += '(?:/|$)';\n    const re = new RegExp(pattern, options.sensitive ? '' : 'i');\n    function parse(path) {\n        const match = path.match(re);\n        const params = {};\n        if (!match)\n            return null;\n        for (let i = 1; i < match.length; i++) {\n            const value = match[i] || '';\n            const key = keys[i - 1];\n            params[key.name] = value && key.repeatable ? value.split('/') : value;\n        }\n        return params;\n    }\n    function stringify(params) {\n        let path = '';\n        // for optional parameters to allow to be empty\n        let avoidDuplicatedSlash = false;\n        for (const segment of segments) {\n            if (!avoidDuplicatedSlash || !path.endsWith('/'))\n                path += '/';\n            avoidDuplicatedSlash = false;\n            for (const token of segment) {\n                if (token.type === 0 /* TokenType.Static */) {\n                    path += token.value;\n                }\n                else if (token.type === 1 /* TokenType.Param */) {\n                    const { value, repeatable, optional } = token;\n                    const param = value in params ? params[value] : '';\n                    if (isArray(param) && !repeatable) {\n                        throw new Error(`Provided param \"${value}\" is an array but it is not repeatable (* or + modifiers)`);\n                    }\n                    const text = isArray(param)\n                        ? param.join('/')\n                        : param;\n                    if (!text) {\n                        if (optional) {\n                            // if we have more than one optional param like /:a?-static we don't need to care about the optional param\n                            if (segment.length < 2) {\n                                // remove the last slash as we could be at the end\n                                if (path.endsWith('/'))\n                                    path = path.slice(0, -1);\n                                // do not append a slash on the next iteration\n                                else\n                                    avoidDuplicatedSlash = true;\n                            }\n                        }\n                        else\n                            throw new Error(`Missing required param \"${value}\"`);\n                    }\n                    path += text;\n                }\n            }\n        }\n        // avoid empty path when we have multiple optional params\n        return path || '/';\n    }\n    return {\n        re,\n        score,\n        keys,\n        parse,\n        stringify,\n    };\n}\n/**\n * Compares an array of numbers as used in PathParser.score and returns a\n * number. This function can be used to `sort` an array\n *\n * @param a - first array of numbers\n * @param b - second array of numbers\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n * should be sorted first\n */\nfunction compareScoreArray(a, b) {\n    let i = 0;\n    while (i < a.length && i < b.length) {\n        const diff = b[i] - a[i];\n        // only keep going if diff === 0\n        if (diff)\n            return diff;\n        i++;\n    }\n    // if the last subsegment was Static, the shorter segments should be sorted first\n    // otherwise sort the longest segment first\n    if (a.length < b.length) {\n        return a.length === 1 && a[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? -1\n            : 1;\n    }\n    else if (a.length > b.length) {\n        return b.length === 1 && b[0] === 40 /* PathScore.Static */ + 40 /* PathScore.Segment */\n            ? 1\n            : -1;\n    }\n    return 0;\n}\n/**\n * Compare function that can be used with `sort` to sort an array of PathParser\n *\n * @param a - first PathParser\n * @param b - second PathParser\n * @returns 0 if both are equal, < 0 if a should be sorted first, > 0 if b\n */\nfunction comparePathParserScore(a, b) {\n    let i = 0;\n    const aScore = a.score;\n    const bScore = b.score;\n    while (i < aScore.length && i < bScore.length) {\n        const comp = compareScoreArray(aScore[i], bScore[i]);\n        // do not return if both are equal\n        if (comp)\n            return comp;\n        i++;\n    }\n    if (Math.abs(bScore.length - aScore.length) === 1) {\n        if (isLastScoreNegative(aScore))\n            return 1;\n        if (isLastScoreNegative(bScore))\n            return -1;\n    }\n    // if a and b share the same score entries but b has more, sort b first\n    return bScore.length - aScore.length;\n    // this is the ternary version\n    // return aScore.length < bScore.length\n    //   ? 1\n    //   : aScore.length > bScore.length\n    //   ? -1\n    //   : 0\n}\n/**\n * This allows detecting splats at the end of a path: /home/:id(.*)*\n *\n * @param score - score to check\n * @returns true if the last entry is negative\n */\nfunction isLastScoreNegative(score) {\n    const last = score[score.length - 1];\n    return score.length > 0 && last[last.length - 1] < 0;\n}\n\nconst ROOT_TOKEN = {\n    type: 0 /* TokenType.Static */,\n    value: '',\n};\nconst VALID_PARAM_RE = /[a-zA-Z0-9_]/;\n// After some profiling, the cache seems to be unnecessary because tokenizePath\n// (the slowest part of adding a route) is very fast\n// const tokenCache = new Map<string, Token[][]>()\nfunction tokenizePath(path) {\n    if (!path)\n        return [[]];\n    if (path === '/')\n        return [[ROOT_TOKEN]];\n    if (!path.startsWith('/')) {\n        throw new Error(`Invalid path \"${path}\"`);\n    }\n    // if (tokenCache.has(path)) return tokenCache.get(path)!\n    function crash(message) {\n        throw new Error(`ERR (${state})/\"${buffer}\": ${message}`);\n    }\n    let state = 0 /* TokenizerState.Static */;\n    let previousState = state;\n    const tokens = [];\n    // the segment will always be valid because we get into the initial state\n    // with the leading /\n    let segment;\n    function finalizeSegment() {\n        if (segment)\n            tokens.push(segment);\n        segment = [];\n    }\n    // index on the path\n    let i = 0;\n    // char at index\n    let char;\n    // buffer of the value read\n    let buffer = '';\n    // custom regexp for a param\n    let customRe = '';\n    function consumeBuffer() {\n        if (!buffer)\n            return;\n        if (state === 0 /* TokenizerState.Static */) {\n            segment.push({\n                type: 0 /* TokenType.Static */,\n                value: buffer,\n            });\n        }\n        else if (state === 1 /* TokenizerState.Param */ ||\n            state === 2 /* TokenizerState.ParamRegExp */ ||\n            state === 3 /* TokenizerState.ParamRegExpEnd */) {\n            if (segment.length > 1 && (char === '*' || char === '+'))\n                crash(`A repeatable param (${buffer}) must be alone in its segment. eg: '/:ids+.`);\n            segment.push({\n                type: 1 /* TokenType.Param */,\n                value: buffer,\n                regexp: customRe,\n                repeatable: char === '*' || char === '+',\n                optional: char === '*' || char === '?',\n            });\n        }\n        else {\n            crash('Invalid state to consume buffer');\n        }\n        buffer = '';\n    }\n    function addCharToBuffer() {\n        buffer += char;\n    }\n    while (i < path.length) {\n        char = path[i++];\n        if (char === '\\\\' && state !== 2 /* TokenizerState.ParamRegExp */) {\n            previousState = state;\n            state = 4 /* TokenizerState.EscapeNext */;\n            continue;\n        }\n        switch (state) {\n            case 0 /* TokenizerState.Static */:\n                if (char === '/') {\n                    if (buffer) {\n                        consumeBuffer();\n                    }\n                    finalizeSegment();\n                }\n                else if (char === ':') {\n                    consumeBuffer();\n                    state = 1 /* TokenizerState.Param */;\n                }\n                else {\n                    addCharToBuffer();\n                }\n                break;\n            case 4 /* TokenizerState.EscapeNext */:\n                addCharToBuffer();\n                state = previousState;\n                break;\n            case 1 /* TokenizerState.Param */:\n                if (char === '(') {\n                    state = 2 /* TokenizerState.ParamRegExp */;\n                }\n                else if (VALID_PARAM_RE.test(char)) {\n                    addCharToBuffer();\n                }\n                else {\n                    consumeBuffer();\n                    state = 0 /* TokenizerState.Static */;\n                    // go back one character if we were not modifying\n                    if (char !== '*' && char !== '?' && char !== '+')\n                        i--;\n                }\n                break;\n            case 2 /* TokenizerState.ParamRegExp */:\n                // TODO: is it worth handling nested regexp? like :p(?:prefix_([^/]+)_suffix)\n                // it already works by escaping the closing )\n                // https://paths.esm.dev/?p=AAMeJbiAwQEcDKbAoAAkP60PG2R6QAvgNaA6AFACM2ABuQBB#\n                // is this really something people need since you can also write\n                // /prefix_:p()_suffix\n                if (char === ')') {\n                    // handle the escaped )\n                    if (customRe[customRe.length - 1] == '\\\\')\n                        customRe = customRe.slice(0, -1) + char;\n                    else\n                        state = 3 /* TokenizerState.ParamRegExpEnd */;\n                }\n                else {\n                    customRe += char;\n                }\n                break;\n            case 3 /* TokenizerState.ParamRegExpEnd */:\n                // same as finalizing a param\n                consumeBuffer();\n                state = 0 /* TokenizerState.Static */;\n                // go back one character if we were not modifying\n                if (char !== '*' && char !== '?' && char !== '+')\n                    i--;\n                customRe = '';\n                break;\n            default:\n                crash('Unknown state');\n                break;\n        }\n    }\n    if (state === 2 /* TokenizerState.ParamRegExp */)\n        crash(`Unfinished custom RegExp for param \"${buffer}\"`);\n    consumeBuffer();\n    finalizeSegment();\n    // tokenCache.set(path, tokens)\n    return tokens;\n}\n\nfunction createRouteRecordMatcher(record, parent, options) {\n    const parser = tokensToParser(tokenizePath(record.path), options);\n    const matcher = assign(parser, {\n        record,\n        parent,\n        // these needs to be populated by the parent\n        children: [],\n        alias: [],\n    });\n    if (parent) {\n        // both are aliases or both are not aliases\n        // we don't want to mix them because the order is used when\n        // passing originalRecord in Matcher.addRoute\n        if (!matcher.record.aliasOf === !parent.record.aliasOf)\n            parent.children.push(matcher);\n    }\n    return matcher;\n}\n\n/**\n * Creates a Router Matcher.\n *\n * @internal\n * @param routes - array of initial routes\n * @param globalOptions - global route options\n */\nfunction createRouterMatcher(routes, globalOptions) {\n    // normalized ordered array of matchers\n    const matchers = [];\n    const matcherMap = new Map();\n    globalOptions = mergeOptions({ strict: false, end: true, sensitive: false }, globalOptions);\n    function getRecordMatcher(name) {\n        return matcherMap.get(name);\n    }\n    function addRoute(record, parent, originalRecord) {\n        // used later on to remove by name\n        const isRootAdd = !originalRecord;\n        const mainNormalizedRecord = normalizeRouteRecord(record);\n        // we might be the child of an alias\n        mainNormalizedRecord.aliasOf = originalRecord && originalRecord.record;\n        const options = mergeOptions(globalOptions, record);\n        // generate an array of records to correctly handle aliases\n        const normalizedRecords = [mainNormalizedRecord];\n        if ('alias' in record) {\n            const aliases = typeof record.alias === 'string' ? [record.alias] : record.alias;\n            for (const alias of aliases) {\n                normalizedRecords.push(\n                // we need to normalize again to ensure the `mods` property\n                // being non enumerable\n                normalizeRouteRecord(assign({}, mainNormalizedRecord, {\n                    // this allows us to hold a copy of the `components` option\n                    // so that async components cache is hold on the original record\n                    components: originalRecord\n                        ? originalRecord.record.components\n                        : mainNormalizedRecord.components,\n                    path: alias,\n                    // we might be the child of an alias\n                    aliasOf: originalRecord\n                        ? originalRecord.record\n                        : mainNormalizedRecord,\n                    // the aliases are always of the same kind as the original since they\n                    // are defined on the same record\n                })));\n            }\n        }\n        let matcher;\n        let originalMatcher;\n        for (const normalizedRecord of normalizedRecords) {\n            const { path } = normalizedRecord;\n            // Build up the path for nested routes if the child isn't an absolute\n            // route. Only add the / delimiter if the child path isn't empty and if the\n            // parent path doesn't have a trailing slash\n            if (parent && path[0] !== '/') {\n                const parentPath = parent.record.path;\n                const connectingSlash = parentPath[parentPath.length - 1] === '/' ? '' : '/';\n                normalizedRecord.path =\n                    parent.record.path + (path && connectingSlash + path);\n            }\n            // create the object beforehand, so it can be passed to children\n            matcher = createRouteRecordMatcher(normalizedRecord, parent, options);\n            // if we are an alias we must tell the original record that we exist,\n            // so we can be removed\n            if (originalRecord) {\n                originalRecord.alias.push(matcher);\n            }\n            else {\n                // otherwise, the first record is the original and others are aliases\n                originalMatcher = originalMatcher || matcher;\n                if (originalMatcher !== matcher)\n                    originalMatcher.alias.push(matcher);\n                // remove the route if named and only for the top record (avoid in nested calls)\n                // this works because the original record is the first one\n                if (isRootAdd && record.name && !isAliasRecord(matcher)) {\n                    removeRoute(record.name);\n                }\n            }\n            // Avoid adding a record that doesn't display anything. This allows passing through records without a component to\n            // not be reached and pass through the catch all route\n            if (isMatchable(matcher)) {\n                insertMatcher(matcher);\n            }\n            if (mainNormalizedRecord.children) {\n                const children = mainNormalizedRecord.children;\n                for (let i = 0; i < children.length; i++) {\n                    addRoute(children[i], matcher, originalRecord && originalRecord.children[i]);\n                }\n            }\n            // if there was no original record, then the first one was not an alias and all\n            // other aliases (if any) need to reference this record when adding children\n            originalRecord = originalRecord || matcher;\n            // TODO: add normalized records for more flexibility\n            // if (parent && isAliasRecord(originalRecord)) {\n            //   parent.children.push(originalRecord)\n            // }\n        }\n        return originalMatcher\n            ? () => {\n                // since other matchers are aliases, they should be removed by the original matcher\n                removeRoute(originalMatcher);\n            }\n            : noop;\n    }\n    function removeRoute(matcherRef) {\n        if (isRouteName(matcherRef)) {\n            const matcher = matcherMap.get(matcherRef);\n            if (matcher) {\n                matcherMap.delete(matcherRef);\n                matchers.splice(matchers.indexOf(matcher), 1);\n                matcher.children.forEach(removeRoute);\n                matcher.alias.forEach(removeRoute);\n            }\n        }\n        else {\n            const index = matchers.indexOf(matcherRef);\n            if (index > -1) {\n                matchers.splice(index, 1);\n                if (matcherRef.record.name)\n                    matcherMap.delete(matcherRef.record.name);\n                matcherRef.children.forEach(removeRoute);\n                matcherRef.alias.forEach(removeRoute);\n            }\n        }\n    }\n    function getRoutes() {\n        return matchers;\n    }\n    function insertMatcher(matcher) {\n        const index = findInsertionIndex(matcher, matchers);\n        matchers.splice(index, 0, matcher);\n        // only add the original record to the name map\n        if (matcher.record.name && !isAliasRecord(matcher))\n            matcherMap.set(matcher.record.name, matcher);\n    }\n    function resolve(location, currentLocation) {\n        let matcher;\n        let params = {};\n        let path;\n        let name;\n        if ('name' in location && location.name) {\n            matcher = matcherMap.get(location.name);\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                });\n            name = matcher.record.name;\n            params = assign(\n            // paramsFromLocation is a new object\n            paramsFromLocation(currentLocation.params, \n            // only keep params that exist in the resolved location\n            // only keep optional params coming from a parent record\n            matcher.keys\n                .filter(k => !k.optional)\n                .concat(matcher.parent ? matcher.parent.keys.filter(k => k.optional) : [])\n                .map(k => k.name)), \n            // discard any existing params in the current location that do not exist here\n            // #1497 this ensures better active/exact matching\n            location.params &&\n                paramsFromLocation(location.params, matcher.keys.map(k => k.name)));\n            // throws if cannot be stringified\n            path = matcher.stringify(params);\n        }\n        else if (location.path != null) {\n            // no need to resolve the path with the matcher as it was provided\n            // this also allows the user to control the encoding\n            path = location.path;\n            matcher = matchers.find(m => m.re.test(path));\n            // matcher should have a value after the loop\n            if (matcher) {\n                // we know the matcher works because we tested the regexp\n                params = matcher.parse(path);\n                name = matcher.record.name;\n            }\n            // location is a relative path\n        }\n        else {\n            // match by name or path of current route\n            matcher = currentLocation.name\n                ? matcherMap.get(currentLocation.name)\n                : matchers.find(m => m.re.test(currentLocation.path));\n            if (!matcher)\n                throw createRouterError(1 /* ErrorTypes.MATCHER_NOT_FOUND */, {\n                    location,\n                    currentLocation,\n                });\n            name = matcher.record.name;\n            // since we are navigating to the same location, we don't need to pick the\n            // params like when `name` is provided\n            params = assign({}, currentLocation.params, location.params);\n            path = matcher.stringify(params);\n        }\n        const matched = [];\n        let parentMatcher = matcher;\n        while (parentMatcher) {\n            // reversed order so parents are at the beginning\n            matched.unshift(parentMatcher.record);\n            parentMatcher = parentMatcher.parent;\n        }\n        return {\n            name,\n            path,\n            params,\n            matched,\n            meta: mergeMetaFields(matched),\n        };\n    }\n    // add initial routes\n    routes.forEach(route => addRoute(route));\n    function clearRoutes() {\n        matchers.length = 0;\n        matcherMap.clear();\n    }\n    return {\n        addRoute,\n        resolve,\n        removeRoute,\n        clearRoutes,\n        getRoutes,\n        getRecordMatcher,\n    };\n}\nfunction paramsFromLocation(params, keys) {\n    const newParams = {};\n    for (const key of keys) {\n        if (key in params)\n            newParams[key] = params[key];\n    }\n    return newParams;\n}\n/**\n * Normalizes a RouteRecordRaw. Creates a copy\n *\n * @param record\n * @returns the normalized version\n */\nfunction normalizeRouteRecord(record) {\n    const normalized = {\n        path: record.path,\n        redirect: record.redirect,\n        name: record.name,\n        meta: record.meta || {},\n        aliasOf: record.aliasOf,\n        beforeEnter: record.beforeEnter,\n        props: normalizeRecordProps(record),\n        children: record.children || [],\n        instances: {},\n        leaveGuards: new Set(),\n        updateGuards: new Set(),\n        enterCallbacks: {},\n        // must be declared afterwards\n        // mods: {},\n        components: 'components' in record\n            ? record.components || null\n            : record.component && { default: record.component },\n    };\n    // mods contain modules and shouldn't be copied,\n    // logged or anything. It's just used for internal\n    // advanced use cases like data loaders\n    Object.defineProperty(normalized, 'mods', {\n        value: {},\n    });\n    return normalized;\n}\n/**\n * Normalize the optional `props` in a record to always be an object similar to\n * components. Also accept a boolean for components.\n * @param record\n */\nfunction normalizeRecordProps(record) {\n    const propsObject = {};\n    // props does not exist on redirect records, but we can set false directly\n    const props = record.props || false;\n    if ('component' in record) {\n        propsObject.default = props;\n    }\n    else {\n        // NOTE: we could also allow a function to be applied to every component.\n        // Would need user feedback for use cases\n        for (const name in record.components)\n            propsObject[name] = typeof props === 'object' ? props[name] : props;\n    }\n    return propsObject;\n}\n/**\n * Checks if a record or any of its parent is an alias\n * @param record\n */\nfunction isAliasRecord(record) {\n    while (record) {\n        if (record.record.aliasOf)\n            return true;\n        record = record.parent;\n    }\n    return false;\n}\n/**\n * Merge meta fields of an array of records\n *\n * @param matched - array of matched records\n */\nfunction mergeMetaFields(matched) {\n    return matched.reduce((meta, record) => assign(meta, record.meta), {});\n}\nfunction mergeOptions(defaults, partialOptions) {\n    const options = {};\n    for (const key in defaults) {\n        options[key] = key in partialOptions ? partialOptions[key] : defaults[key];\n    }\n    return options;\n}\n/**\n * Performs a binary search to find the correct insertion index for a new matcher.\n *\n * Matchers are primarily sorted by their score. If scores are tied then we also consider parent/child relationships,\n * with descendants coming before ancestors. If there's still a tie, new routes are inserted after existing routes.\n *\n * @param matcher - new matcher to be inserted\n * @param matchers - existing matchers\n */\nfunction findInsertionIndex(matcher, matchers) {\n    // First phase: binary search based on score\n    let lower = 0;\n    let upper = matchers.length;\n    while (lower !== upper) {\n        const mid = (lower + upper) >> 1;\n        const sortOrder = comparePathParserScore(matcher, matchers[mid]);\n        if (sortOrder < 0) {\n            upper = mid;\n        }\n        else {\n            lower = mid + 1;\n        }\n    }\n    // Second phase: check for an ancestor with the same score\n    const insertionAncestor = getInsertionAncestor(matcher);\n    if (insertionAncestor) {\n        upper = matchers.lastIndexOf(insertionAncestor, upper - 1);\n    }\n    return upper;\n}\nfunction getInsertionAncestor(matcher) {\n    let ancestor = matcher;\n    while ((ancestor = ancestor.parent)) {\n        if (isMatchable(ancestor) &&\n            comparePathParserScore(matcher, ancestor) === 0) {\n            return ancestor;\n        }\n    }\n    return;\n}\n/**\n * Checks if a matcher can be reachable. This means if it's possible to reach it as a route. For example, routes without\n * a component, or name, or redirect, are just used to group other routes.\n * @param matcher\n * @param matcher.record record of the matcher\n * @returns\n */\nfunction isMatchable({ record }) {\n    return !!(record.name ||\n        (record.components && Object.keys(record.components).length) ||\n        record.redirect);\n}\n\n/**\n * Transforms a queryString into a {@link LocationQuery} object. Accept both, a\n * version with the leading `?` and without Should work as URLSearchParams\n\n * @internal\n *\n * @param search - search string to parse\n * @returns a query object\n */\nfunction parseQuery(search) {\n    const query = {};\n    // avoid creating an object with an empty key and empty value\n    // because of split('&')\n    if (search === '' || search === '?')\n        return query;\n    const hasLeadingIM = search[0] === '?';\n    const searchParams = (hasLeadingIM ? search.slice(1) : search).split('&');\n    for (let i = 0; i < searchParams.length; ++i) {\n        // pre decode the + into space\n        const searchParam = searchParams[i].replace(PLUS_RE, ' ');\n        // allow the = character\n        const eqPos = searchParam.indexOf('=');\n        const key = decode(eqPos < 0 ? searchParam : searchParam.slice(0, eqPos));\n        const value = eqPos < 0 ? null : decode(searchParam.slice(eqPos + 1));\n        if (key in query) {\n            // an extra variable for ts types\n            let currentValue = query[key];\n            if (!isArray(currentValue)) {\n                currentValue = query[key] = [currentValue];\n            }\n            currentValue.push(value);\n        }\n        else {\n            query[key] = value;\n        }\n    }\n    return query;\n}\n/**\n * Stringifies a {@link LocationQueryRaw} object. Like `URLSearchParams`, it\n * doesn't prepend a `?`\n *\n * @internal\n *\n * @param query - query object to stringify\n * @returns string version of the query without the leading `?`\n */\nfunction stringifyQuery(query) {\n    let search = '';\n    for (let key in query) {\n        const value = query[key];\n        key = encodeQueryKey(key);\n        if (value == null) {\n            // only null adds the value\n            if (value !== undefined) {\n                search += (search.length ? '&' : '') + key;\n            }\n            continue;\n        }\n        // keep null values\n        const values = isArray(value)\n            ? value.map(v => v && encodeQueryValue(v))\n            : [value && encodeQueryValue(value)];\n        values.forEach(value => {\n            // skip undefined values in arrays as if they were not present\n            // smaller code than using filter\n            if (value !== undefined) {\n                // only append & with non-empty search\n                search += (search.length ? '&' : '') + key;\n                if (value != null)\n                    search += '=' + value;\n            }\n        });\n    }\n    return search;\n}\n/**\n * Transforms a {@link LocationQueryRaw} into a {@link LocationQuery} by casting\n * numbers into strings, removing keys with an undefined value and replacing\n * undefined with null in arrays\n *\n * @param query - query object to normalize\n * @returns a normalized query object\n */\nfunction normalizeQuery(query) {\n    const normalizedQuery = {};\n    for (const key in query) {\n        const value = query[key];\n        if (value !== undefined) {\n            normalizedQuery[key] = isArray(value)\n                ? value.map(v => (v == null ? null : '' + v))\n                : value == null\n                    ? value\n                    : '' + value;\n        }\n    }\n    return normalizedQuery;\n}\n\n/**\n * RouteRecord being rendered by the closest ancestor Router View. Used for\n * `onBeforeRouteUpdate` and `onBeforeRouteLeave`. rvlm stands for Router View\n * Location Matched\n *\n * @internal\n */\nconst matchedRouteKey = Symbol('');\n/**\n * Allows overriding the router view depth to control which component in\n * `matched` is rendered. rvd stands for Router View Depth\n *\n * @internal\n */\nconst viewDepthKey = Symbol('');\n/**\n * Allows overriding the router instance returned by `useRouter` in tests. r\n * stands for router\n *\n * @internal\n */\nconst routerKey = Symbol('');\n/**\n * Allows overriding the current route returned by `useRoute` in tests. rl\n * stands for route location\n *\n * @internal\n */\nconst routeLocationKey = Symbol('');\n/**\n * Allows overriding the current route used by router-view. Internally this is\n * used when the `route` prop is passed.\n *\n * @internal\n */\nconst routerViewLocationKey = Symbol('');\n\n/**\n * Create a list of callbacks that can be reset. Used to create before and after navigation guards list\n */\nfunction useCallbacks() {\n    let handlers = [];\n    function add(handler) {\n        handlers.push(handler);\n        return () => {\n            const i = handlers.indexOf(handler);\n            if (i > -1)\n                handlers.splice(i, 1);\n        };\n    }\n    function reset() {\n        handlers = [];\n    }\n    return {\n        add,\n        list: () => handlers.slice(),\n        reset,\n    };\n}\n\nfunction registerGuard(record, name, guard) {\n    const removeFromList = () => {\n        record[name].delete(guard);\n    };\n    vue.onUnmounted(removeFromList);\n    vue.onDeactivated(removeFromList);\n    vue.onActivated(() => {\n        record[name].add(guard);\n    });\n    record[name].add(guard);\n}\n/**\n * Add a navigation guard that triggers whenever the component for the current\n * location is about to be left. Similar to {@link beforeRouteLeave} but can be\n * used in any component. The guard is removed when the component is unmounted.\n *\n * @param leaveGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteLeave(leaveGuard) {\n    const activeRecord = vue.inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        return;\n    }\n    registerGuard(activeRecord, 'leaveGuards', leaveGuard);\n}\n/**\n * Add a navigation guard that triggers whenever the current location is about\n * to be updated. Similar to {@link beforeRouteUpdate} but can be used in any\n * component. The guard is removed when the component is unmounted.\n *\n * @param updateGuard - {@link NavigationGuard}\n */\nfunction onBeforeRouteUpdate(updateGuard) {\n    const activeRecord = vue.inject(matchedRouteKey, \n    // to avoid warning\n    {}).value;\n    if (!activeRecord) {\n        return;\n    }\n    registerGuard(activeRecord, 'updateGuards', updateGuard);\n}\nfunction guardToPromiseFn(guard, to, from, record, name, runWithContext = fn => fn()) {\n    // keep a reference to the enterCallbackArray to prevent pushing callbacks if a new navigation took place\n    const enterCallbackArray = record &&\n        // name is defined if record is because of the function overload\n        (record.enterCallbacks[name] = record.enterCallbacks[name] || []);\n    return () => new Promise((resolve, reject) => {\n        const next = (valid) => {\n            if (valid === false) {\n                reject(createRouterError(4 /* ErrorTypes.NAVIGATION_ABORTED */, {\n                    from,\n                    to,\n                }));\n            }\n            else if (valid instanceof Error) {\n                reject(valid);\n            }\n            else if (isRouteLocation(valid)) {\n                reject(createRouterError(2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */, {\n                    from: to,\n                    to: valid,\n                }));\n            }\n            else {\n                if (enterCallbackArray &&\n                    // since enterCallbackArray is truthy, both record and name also are\n                    record.enterCallbacks[name] === enterCallbackArray &&\n                    typeof valid === 'function') {\n                    enterCallbackArray.push(valid);\n                }\n                resolve();\n            }\n        };\n        // wrapping with Promise.resolve allows it to work with both async and sync guards\n        const guardReturn = runWithContext(() => guard.call(record && record.instances[name], to, from, next));\n        let guardCall = Promise.resolve(guardReturn);\n        if (guard.length < 3)\n            guardCall = guardCall.then(next);\n        guardCall.catch(err => reject(err));\n    });\n}\nfunction extractComponentsGuards(matched, guardType, to, from, runWithContext = fn => fn()) {\n    const guards = [];\n    for (const record of matched) {\n        for (const name in record.components) {\n            let rawComponent = record.components[name];\n            // skip update and leave guards if the route component is not mounted\n            if (guardType !== 'beforeRouteEnter' && !record.instances[name])\n                continue;\n            if (isRouteComponent(rawComponent)) {\n                // __vccOpts is added by vue-class-component and contain the regular options\n                const options = rawComponent.__vccOpts || rawComponent;\n                const guard = options[guardType];\n                guard &&\n                    guards.push(guardToPromiseFn(guard, to, from, record, name, runWithContext));\n            }\n            else {\n                // start requesting the chunk already\n                let componentPromise = rawComponent();\n                guards.push(() => componentPromise.then(resolved => {\n                    if (!resolved)\n                        throw new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\"`);\n                    const resolvedComponent = isESModule(resolved)\n                        ? resolved.default\n                        : resolved;\n                    // keep the resolved module for plugins like data loaders\n                    record.mods[name] = resolved;\n                    // replace the function with the resolved component\n                    // cannot be null or undefined because we went into the for loop\n                    record.components[name] = resolvedComponent;\n                    // __vccOpts is added by vue-class-component and contain the regular options\n                    const options = resolvedComponent.__vccOpts || resolvedComponent;\n                    const guard = options[guardType];\n                    return (guard &&\n                        guardToPromiseFn(guard, to, from, record, name, runWithContext)());\n                }));\n            }\n        }\n    }\n    return guards;\n}\n/**\n * Ensures a route is loaded, so it can be passed as o prop to `<RouterView>`.\n *\n * @param route - resolved route to load\n */\nfunction loadRouteLocation(route) {\n    return route.matched.every(record => record.redirect)\n        ? Promise.reject(new Error('Cannot load a route that redirects.'))\n        : Promise.all(route.matched.map(record => record.components &&\n            Promise.all(Object.keys(record.components).reduce((promises, name) => {\n                const rawComponent = record.components[name];\n                if (typeof rawComponent === 'function' &&\n                    !('displayName' in rawComponent)) {\n                    promises.push(rawComponent().then(resolved => {\n                        if (!resolved)\n                            return Promise.reject(new Error(`Couldn't resolve component \"${name}\" at \"${record.path}\". Ensure you passed a function that returns a promise.`));\n                        const resolvedComponent = isESModule(resolved)\n                            ? resolved.default\n                            : resolved;\n                        // keep the resolved module for plugins like data loaders\n                        record.mods[name] = resolved;\n                        // replace the function with the resolved component\n                        // cannot be null or undefined because we went into the for loop\n                        record.components[name] = resolvedComponent;\n                        return;\n                    }));\n                }\n                return promises;\n            }, [])))).then(() => route);\n}\n\n// TODO: we could allow currentRoute as a prop to expose `isActive` and\n// `isExactActive` behavior should go through an RFC\n/**\n * Returns the internal behavior of a {@link RouterLink} without the rendering part.\n *\n * @param props - a `to` location and an optional `replace` flag\n */\nfunction useLink(props) {\n    const router = vue.inject(routerKey);\n    const currentRoute = vue.inject(routeLocationKey);\n    const route = vue.computed(() => {\n        const to = vue.unref(props.to);\n        return router.resolve(to);\n    });\n    const activeRecordIndex = vue.computed(() => {\n        const { matched } = route.value;\n        const { length } = matched;\n        const routeMatched = matched[length - 1];\n        const currentMatched = currentRoute.matched;\n        if (!routeMatched || !currentMatched.length)\n            return -1;\n        const index = currentMatched.findIndex(isSameRouteRecord.bind(null, routeMatched));\n        if (index > -1)\n            return index;\n        // possible parent record\n        const parentRecordPath = getOriginalPath(matched[length - 2]);\n        return (\n        // we are dealing with nested routes\n        length > 1 &&\n            // if the parent and matched route have the same path, this link is\n            // referring to the empty child. Or we currently are on a different\n            // child of the same parent\n            getOriginalPath(routeMatched) === parentRecordPath &&\n            // avoid comparing the child with its parent\n            currentMatched[currentMatched.length - 1].path !== parentRecordPath\n            ? currentMatched.findIndex(isSameRouteRecord.bind(null, matched[length - 2]))\n            : index);\n    });\n    const isActive = vue.computed(() => activeRecordIndex.value > -1 &&\n        includesParams(currentRoute.params, route.value.params));\n    const isExactActive = vue.computed(() => activeRecordIndex.value > -1 &&\n        activeRecordIndex.value === currentRoute.matched.length - 1 &&\n        isSameRouteLocationParams(currentRoute.params, route.value.params));\n    function navigate(e = {}) {\n        if (guardEvent(e)) {\n            const p = router[vue.unref(props.replace) ? 'replace' : 'push'](vue.unref(props.to)\n            // avoid uncaught errors are they are logged anyway\n            ).catch(noop);\n            if (props.viewTransition &&\n                typeof document !== 'undefined' &&\n                'startViewTransition' in document) {\n                document.startViewTransition(() => p);\n            }\n            return p;\n        }\n        return Promise.resolve();\n    }\n    /**\n     * NOTE: update {@link _RouterLinkI}'s `$slots` type when updating this\n     */\n    return {\n        route,\n        href: vue.computed(() => route.value.href),\n        isActive,\n        isExactActive,\n        navigate,\n    };\n}\nfunction preferSingleVNode(vnodes) {\n    return vnodes.length === 1 ? vnodes[0] : vnodes;\n}\nconst RouterLinkImpl = /*#__PURE__*/ vue.defineComponent({\n    name: 'RouterLink',\n    compatConfig: { MODE: 3 },\n    props: {\n        to: {\n            type: [String, Object],\n            required: true,\n        },\n        replace: Boolean,\n        activeClass: String,\n        // inactiveClass: String,\n        exactActiveClass: String,\n        custom: Boolean,\n        ariaCurrentValue: {\n            type: String,\n            default: 'page',\n        },\n        viewTransition: Boolean,\n    },\n    useLink,\n    setup(props, { slots }) {\n        const link = vue.reactive(useLink(props));\n        const { options } = vue.inject(routerKey);\n        const elClass = vue.computed(() => ({\n            [getLinkClass(props.activeClass, options.linkActiveClass, 'router-link-active')]: link.isActive,\n            // [getLinkClass(\n            //   props.inactiveClass,\n            //   options.linkInactiveClass,\n            //   'router-link-inactive'\n            // )]: !link.isExactActive,\n            [getLinkClass(props.exactActiveClass, options.linkExactActiveClass, 'router-link-exact-active')]: link.isExactActive,\n        }));\n        return () => {\n            const children = slots.default && preferSingleVNode(slots.default(link));\n            return props.custom\n                ? children\n                : vue.h('a', {\n                    'aria-current': link.isExactActive\n                        ? props.ariaCurrentValue\n                        : null,\n                    href: link.href,\n                    // this would override user added attrs but Vue will still add\n                    // the listener, so we end up triggering both\n                    onClick: link.navigate,\n                    class: elClass.value,\n                }, children);\n        };\n    },\n});\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to render a link that triggers a navigation on click.\n */\nconst RouterLink = RouterLinkImpl;\nfunction guardEvent(e) {\n    // don't redirect with control keys\n    if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey)\n        return;\n    // don't redirect when preventDefault called\n    if (e.defaultPrevented)\n        return;\n    // don't redirect on right click\n    if (e.button !== undefined && e.button !== 0)\n        return;\n    // don't redirect if `target=\"_blank\"`\n    // @ts-expect-error getAttribute does exist\n    if (e.currentTarget && e.currentTarget.getAttribute) {\n        // @ts-expect-error getAttribute exists\n        const target = e.currentTarget.getAttribute('target');\n        if (/\\b_blank\\b/i.test(target))\n            return;\n    }\n    // this may be a Weex event which doesn't have this method\n    if (e.preventDefault)\n        e.preventDefault();\n    return true;\n}\nfunction includesParams(outer, inner) {\n    for (const key in inner) {\n        const innerValue = inner[key];\n        const outerValue = outer[key];\n        if (typeof innerValue === 'string') {\n            if (innerValue !== outerValue)\n                return false;\n        }\n        else {\n            if (!isArray(outerValue) ||\n                outerValue.length !== innerValue.length ||\n                innerValue.some((value, i) => value !== outerValue[i]))\n                return false;\n        }\n    }\n    return true;\n}\n/**\n * Get the original path value of a record by following its aliasOf\n * @param record\n */\nfunction getOriginalPath(record) {\n    return record ? (record.aliasOf ? record.aliasOf.path : record.path) : '';\n}\n/**\n * Utility class to get the active class based on defaults.\n * @param propClass\n * @param globalClass\n * @param defaultClass\n */\nconst getLinkClass = (propClass, globalClass, defaultClass) => propClass != null\n    ? propClass\n    : globalClass != null\n        ? globalClass\n        : defaultClass;\n\nconst RouterViewImpl = /*#__PURE__*/ vue.defineComponent({\n    name: 'RouterView',\n    // #674 we manually inherit them\n    inheritAttrs: false,\n    props: {\n        name: {\n            type: String,\n            default: 'default',\n        },\n        route: Object,\n    },\n    // Better compat for @vue/compat users\n    // https://github.com/vuejs/router/issues/1315\n    compatConfig: { MODE: 3 },\n    setup(props, { attrs, slots }) {\n        const injectedRoute = vue.inject(routerViewLocationKey);\n        const routeToDisplay = vue.computed(() => props.route || injectedRoute.value);\n        const injectedDepth = vue.inject(viewDepthKey, 0);\n        // The depth changes based on empty components option, which allows passthrough routes e.g. routes with children\n        // that are used to reuse the `path` property\n        const depth = vue.computed(() => {\n            let initialDepth = vue.unref(injectedDepth);\n            const { matched } = routeToDisplay.value;\n            let matchedRoute;\n            while ((matchedRoute = matched[initialDepth]) &&\n                !matchedRoute.components) {\n                initialDepth++;\n            }\n            return initialDepth;\n        });\n        const matchedRouteRef = vue.computed(() => routeToDisplay.value.matched[depth.value]);\n        vue.provide(viewDepthKey, vue.computed(() => depth.value + 1));\n        vue.provide(matchedRouteKey, matchedRouteRef);\n        vue.provide(routerViewLocationKey, routeToDisplay);\n        const viewRef = vue.ref();\n        // watch at the same time the component instance, the route record we are\n        // rendering, and the name\n        vue.watch(() => [viewRef.value, matchedRouteRef.value, props.name], ([instance, to, name], [oldInstance, from, oldName]) => {\n            // copy reused instances\n            if (to) {\n                // this will update the instance for new instances as well as reused\n                // instances when navigating to a new route\n                to.instances[name] = instance;\n                // the component instance is reused for a different route or name, so\n                // we copy any saved update or leave guards. With async setup, the\n                // mounting component will mount before the matchedRoute changes,\n                // making instance === oldInstance, so we check if guards have been\n                // added before. This works because we remove guards when\n                // unmounting/deactivating components\n                if (from && from !== to && instance && instance === oldInstance) {\n                    if (!to.leaveGuards.size) {\n                        to.leaveGuards = from.leaveGuards;\n                    }\n                    if (!to.updateGuards.size) {\n                        to.updateGuards = from.updateGuards;\n                    }\n                }\n            }\n            // trigger beforeRouteEnter next callbacks\n            if (instance &&\n                to &&\n                // if there is no instance but to and from are the same this might be\n                // the first visit\n                (!from || !isSameRouteRecord(to, from) || !oldInstance)) {\n                (to.enterCallbacks[name] || []).forEach(callback => callback(instance));\n            }\n        }, { flush: 'post' });\n        return () => {\n            const route = routeToDisplay.value;\n            // we need the value at the time we render because when we unmount, we\n            // navigated to a different location so the value is different\n            const currentName = props.name;\n            const matchedRoute = matchedRouteRef.value;\n            const ViewComponent = matchedRoute && matchedRoute.components[currentName];\n            if (!ViewComponent) {\n                return normalizeSlot(slots.default, { Component: ViewComponent, route });\n            }\n            // props from route configuration\n            const routePropsOption = matchedRoute.props[currentName];\n            const routeProps = routePropsOption\n                ? routePropsOption === true\n                    ? route.params\n                    : typeof routePropsOption === 'function'\n                        ? routePropsOption(route)\n                        : routePropsOption\n                : null;\n            const onVnodeUnmounted = vnode => {\n                // remove the instance reference to prevent leak\n                if (vnode.component.isUnmounted) {\n                    matchedRoute.instances[currentName] = null;\n                }\n            };\n            const component = vue.h(ViewComponent, assign({}, routeProps, attrs, {\n                onVnodeUnmounted,\n                ref: viewRef,\n            }));\n            return (\n            // pass the vnode to the slot as a prop.\n            // h and <component :is=\"...\"> both accept vnodes\n            normalizeSlot(slots.default, { Component: component, route }) ||\n                component);\n        };\n    },\n});\nfunction normalizeSlot(slot, data) {\n    if (!slot)\n        return null;\n    const slotContent = slot(data);\n    return slotContent.length === 1 ? slotContent[0] : slotContent;\n}\n// export the public type for h/tsx inference\n// also to avoid inline import() in generated d.ts files\n/**\n * Component to display the current route the user is at.\n */\nconst RouterView = RouterViewImpl;\n\n/**\n * Creates a Router instance that can be used by a Vue app.\n *\n * @param options - {@link RouterOptions}\n */\nfunction createRouter(options) {\n    const matcher = createRouterMatcher(options.routes, options);\n    const parseQuery$1 = options.parseQuery || parseQuery;\n    const stringifyQuery$1 = options.stringifyQuery || stringifyQuery;\n    const routerHistory = options.history;\n    const beforeGuards = useCallbacks();\n    const beforeResolveGuards = useCallbacks();\n    const afterGuards = useCallbacks();\n    const currentRoute = vue.shallowRef(START_LOCATION_NORMALIZED);\n    let pendingLocation = START_LOCATION_NORMALIZED;\n    // leave the scrollRestoration if no scrollBehavior is provided\n    if (isBrowser && options.scrollBehavior && 'scrollRestoration' in history) {\n        history.scrollRestoration = 'manual';\n    }\n    const normalizeParams = applyToParams.bind(null, paramValue => '' + paramValue);\n    const encodeParams = applyToParams.bind(null, encodeParam);\n    const decodeParams = \n    // @ts-expect-error: intentionally avoid the type check\n    applyToParams.bind(null, decode);\n    function addRoute(parentOrRoute, route) {\n        let parent;\n        let record;\n        if (isRouteName(parentOrRoute)) {\n            parent = matcher.getRecordMatcher(parentOrRoute);\n            record = route;\n        }\n        else {\n            record = parentOrRoute;\n        }\n        return matcher.addRoute(record, parent);\n    }\n    function removeRoute(name) {\n        const recordMatcher = matcher.getRecordMatcher(name);\n        if (recordMatcher) {\n            matcher.removeRoute(recordMatcher);\n        }\n    }\n    function getRoutes() {\n        return matcher.getRoutes().map(routeMatcher => routeMatcher.record);\n    }\n    function hasRoute(name) {\n        return !!matcher.getRecordMatcher(name);\n    }\n    function resolve(rawLocation, currentLocation) {\n        // const resolve: Router['resolve'] = (rawLocation: RouteLocationRaw, currentLocation) => {\n        // const objectLocation = routerLocationAsObject(rawLocation)\n        // we create a copy to modify it later\n        currentLocation = assign({}, currentLocation || currentRoute.value);\n        if (typeof rawLocation === 'string') {\n            const locationNormalized = parseURL(parseQuery$1, rawLocation, currentLocation.path);\n            const matchedRoute = matcher.resolve({ path: locationNormalized.path }, currentLocation);\n            const href = routerHistory.createHref(locationNormalized.fullPath);\n            // locationNormalized is always a new object\n            return assign(locationNormalized, matchedRoute, {\n                params: decodeParams(matchedRoute.params),\n                hash: decode(locationNormalized.hash),\n                redirectedFrom: undefined,\n                href,\n            });\n        }\n        let matcherLocation;\n        // path could be relative in object as well\n        if (rawLocation.path != null) {\n            matcherLocation = assign({}, rawLocation, {\n                path: parseURL(parseQuery$1, rawLocation.path, currentLocation.path).path,\n            });\n        }\n        else {\n            // remove any nullish param\n            const targetParams = assign({}, rawLocation.params);\n            for (const key in targetParams) {\n                if (targetParams[key] == null) {\n                    delete targetParams[key];\n                }\n            }\n            // pass encoded values to the matcher, so it can produce encoded path and fullPath\n            matcherLocation = assign({}, rawLocation, {\n                params: encodeParams(targetParams),\n            });\n            // current location params are decoded, we need to encode them in case the\n            // matcher merges the params\n            currentLocation.params = encodeParams(currentLocation.params);\n        }\n        const matchedRoute = matcher.resolve(matcherLocation, currentLocation);\n        const hash = rawLocation.hash || '';\n        // the matcher might have merged current location params, so\n        // we need to run the decoding again\n        matchedRoute.params = normalizeParams(decodeParams(matchedRoute.params));\n        const fullPath = stringifyURL(stringifyQuery$1, assign({}, rawLocation, {\n            hash: encodeHash(hash),\n            path: matchedRoute.path,\n        }));\n        const href = routerHistory.createHref(fullPath);\n        return assign({\n            fullPath,\n            // keep the hash encoded so fullPath is effectively path + encodedQuery +\n            // hash\n            hash,\n            query: \n            // if the user is using a custom query lib like qs, we might have\n            // nested objects, so we keep the query as is, meaning it can contain\n            // numbers at `$route.query`, but at the point, the user will have to\n            // use their own type anyway.\n            // https://github.com/vuejs/router/issues/328#issuecomment-649481567\n            stringifyQuery$1 === stringifyQuery\n                ? normalizeQuery(rawLocation.query)\n                : (rawLocation.query || {}),\n        }, matchedRoute, {\n            redirectedFrom: undefined,\n            href,\n        });\n    }\n    function locationAsObject(to) {\n        return typeof to === 'string'\n            ? parseURL(parseQuery$1, to, currentRoute.value.path)\n            : assign({}, to);\n    }\n    function checkCanceledNavigation(to, from) {\n        if (pendingLocation !== to) {\n            return createRouterError(8 /* ErrorTypes.NAVIGATION_CANCELLED */, {\n                from,\n                to,\n            });\n        }\n    }\n    function push(to) {\n        return pushWithRedirect(to);\n    }\n    function replace(to) {\n        return push(assign(locationAsObject(to), { replace: true }));\n    }\n    function handleRedirectRecord(to) {\n        const lastMatched = to.matched[to.matched.length - 1];\n        if (lastMatched && lastMatched.redirect) {\n            const { redirect } = lastMatched;\n            let newTargetLocation = typeof redirect === 'function' ? redirect(to) : redirect;\n            if (typeof newTargetLocation === 'string') {\n                newTargetLocation =\n                    newTargetLocation.includes('?') || newTargetLocation.includes('#')\n                        ? (newTargetLocation = locationAsObject(newTargetLocation))\n                        : // force empty params\n                            { path: newTargetLocation };\n                // @ts-expect-error: force empty params when a string is passed to let\n                // the router parse them again\n                newTargetLocation.params = {};\n            }\n            return assign({\n                query: to.query,\n                hash: to.hash,\n                // avoid transferring params if the redirect has a path\n                params: newTargetLocation.path != null ? {} : to.params,\n            }, newTargetLocation);\n        }\n    }\n    function pushWithRedirect(to, redirectedFrom) {\n        const targetLocation = (pendingLocation = resolve(to));\n        const from = currentRoute.value;\n        const data = to.state;\n        const force = to.force;\n        // to could be a string where `replace` is a function\n        const replace = to.replace === true;\n        const shouldRedirect = handleRedirectRecord(targetLocation);\n        if (shouldRedirect)\n            return pushWithRedirect(assign(locationAsObject(shouldRedirect), {\n                state: typeof shouldRedirect === 'object'\n                    ? assign({}, data, shouldRedirect.state)\n                    : data,\n                force,\n                replace,\n            }), \n            // keep original redirectedFrom if it exists\n            redirectedFrom || targetLocation);\n        // if it was a redirect we already called `pushWithRedirect` above\n        const toLocation = targetLocation;\n        toLocation.redirectedFrom = redirectedFrom;\n        let failure;\n        if (!force && isSameRouteLocation(stringifyQuery$1, from, targetLocation)) {\n            failure = createRouterError(16 /* ErrorTypes.NAVIGATION_DUPLICATED */, { to: toLocation, from });\n            // trigger scroll to allow scrolling to the same anchor\n            handleScroll(from, from, \n            // this is a push, the only way for it to be triggered from a\n            // history.listen is with a redirect, which makes it become a push\n            true, \n            // This cannot be the first navigation because the initial location\n            // cannot be manually navigated to\n            false);\n        }\n        return (failure ? Promise.resolve(failure) : navigate(toLocation, from))\n            .catch((error) => isNavigationFailure(error)\n            ? // navigation redirects still mark the router as ready\n                isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)\n                    ? error\n                    : markAsReady(error) // also returns the error\n            : // reject any unknown error\n                triggerError(error, toLocation, from))\n            .then((failure) => {\n            if (failure) {\n                if (isNavigationFailure(failure, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    return pushWithRedirect(\n                    // keep options\n                    assign({\n                        // preserve an existing replacement but allow the redirect to override it\n                        replace,\n                    }, locationAsObject(failure.to), {\n                        state: typeof failure.to === 'object'\n                            ? assign({}, data, failure.to.state)\n                            : data,\n                        force,\n                    }), \n                    // preserve the original redirectedFrom if any\n                    redirectedFrom || toLocation);\n                }\n            }\n            else {\n                // if we fail we don't finalize the navigation\n                failure = finalizeNavigation(toLocation, from, true, replace, data);\n            }\n            triggerAfterEach(toLocation, from, failure);\n            return failure;\n        });\n    }\n    /**\n     * Helper to reject and skip all navigation guards if a new navigation happened\n     * @param to\n     * @param from\n     */\n    function checkCanceledNavigationAndReject(to, from) {\n        const error = checkCanceledNavigation(to, from);\n        return error ? Promise.reject(error) : Promise.resolve();\n    }\n    function runWithContext(fn) {\n        const app = installedApps.values().next().value;\n        // support Vue < 3.3\n        return app && typeof app.runWithContext === 'function'\n            ? app.runWithContext(fn)\n            : fn();\n    }\n    // TODO: refactor the whole before guards by internally using router.beforeEach\n    function navigate(to, from) {\n        let guards;\n        const [leavingRecords, updatingRecords, enteringRecords] = extractChangingRecords(to, from);\n        // all components here have been resolved once because we are leaving\n        guards = extractComponentsGuards(leavingRecords.reverse(), 'beforeRouteLeave', to, from);\n        // leavingRecords is already reversed\n        for (const record of leavingRecords) {\n            record.leaveGuards.forEach(guard => {\n                guards.push(guardToPromiseFn(guard, to, from));\n            });\n        }\n        const canceledNavigationCheck = checkCanceledNavigationAndReject.bind(null, to, from);\n        guards.push(canceledNavigationCheck);\n        // run the queue of per route beforeRouteLeave guards\n        return (runGuardQueue(guards)\n            .then(() => {\n            // check global guards beforeEach\n            guards = [];\n            for (const guard of beforeGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check in components beforeRouteUpdate\n            guards = extractComponentsGuards(updatingRecords, 'beforeRouteUpdate', to, from);\n            for (const record of updatingRecords) {\n                record.updateGuards.forEach(guard => {\n                    guards.push(guardToPromiseFn(guard, to, from));\n                });\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check the route beforeEnter\n            guards = [];\n            for (const record of enteringRecords) {\n                // do not trigger beforeEnter on reused views\n                if (record.beforeEnter) {\n                    if (isArray(record.beforeEnter)) {\n                        for (const beforeEnter of record.beforeEnter)\n                            guards.push(guardToPromiseFn(beforeEnter, to, from));\n                    }\n                    else {\n                        guards.push(guardToPromiseFn(record.beforeEnter, to, from));\n                    }\n                }\n            }\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // NOTE: at this point to.matched is normalized and does not contain any () => Promise<Component>\n            // clear existing enterCallbacks, these are added by extractComponentsGuards\n            to.matched.forEach(record => (record.enterCallbacks = {}));\n            // check in-component beforeRouteEnter\n            guards = extractComponentsGuards(enteringRecords, 'beforeRouteEnter', to, from, runWithContext);\n            guards.push(canceledNavigationCheck);\n            // run the queue of per route beforeEnter guards\n            return runGuardQueue(guards);\n        })\n            .then(() => {\n            // check global guards beforeResolve\n            guards = [];\n            for (const guard of beforeResolveGuards.list()) {\n                guards.push(guardToPromiseFn(guard, to, from));\n            }\n            guards.push(canceledNavigationCheck);\n            return runGuardQueue(guards);\n        })\n            // catch any navigation canceled\n            .catch(err => isNavigationFailure(err, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)\n            ? err\n            : Promise.reject(err)));\n    }\n    function triggerAfterEach(to, from, failure) {\n        // navigation is confirmed, call afterGuards\n        // TODO: wrap with error handlers\n        afterGuards\n            .list()\n            .forEach(guard => runWithContext(() => guard(to, from, failure)));\n    }\n    /**\n     * - Cleans up any navigation guards\n     * - Changes the url if necessary\n     * - Calls the scrollBehavior\n     */\n    function finalizeNavigation(toLocation, from, isPush, replace, data) {\n        // a more recent navigation took place\n        const error = checkCanceledNavigation(toLocation, from);\n        if (error)\n            return error;\n        // only consider as push if it's not the first navigation\n        const isFirstNavigation = from === START_LOCATION_NORMALIZED;\n        const state = !isBrowser ? {} : history.state;\n        // change URL only if the user did a push/replace and if it's not the initial navigation because\n        // it's just reflecting the url\n        if (isPush) {\n            // on the initial navigation, we want to reuse the scroll position from\n            // history state if it exists\n            if (replace || isFirstNavigation)\n                routerHistory.replace(toLocation.fullPath, assign({\n                    scroll: isFirstNavigation && state && state.scroll,\n                }, data));\n            else\n                routerHistory.push(toLocation.fullPath, data);\n        }\n        // accept current navigation\n        currentRoute.value = toLocation;\n        handleScroll(toLocation, from, isPush, isFirstNavigation);\n        markAsReady();\n    }\n    let removeHistoryListener;\n    // attach listener to history to trigger navigations\n    function setupListeners() {\n        // avoid setting up listeners twice due to an invalid first navigation\n        if (removeHistoryListener)\n            return;\n        removeHistoryListener = routerHistory.listen((to, _from, info) => {\n            if (!router.listening)\n                return;\n            // cannot be a redirect route because it was in history\n            const toLocation = resolve(to);\n            // due to dynamic routing, and to hash history with manual navigation\n            // (manually changing the url or calling history.hash = '#/somewhere'),\n            // there could be a redirect record in history\n            const shouldRedirect = handleRedirectRecord(toLocation);\n            if (shouldRedirect) {\n                pushWithRedirect(assign(shouldRedirect, { replace: true, force: true }), toLocation).catch(noop);\n                return;\n            }\n            pendingLocation = toLocation;\n            const from = currentRoute.value;\n            // TODO: should be moved to web history?\n            if (isBrowser) {\n                saveScrollPosition(getScrollKey(from.fullPath, info.delta), computeScrollPosition());\n            }\n            navigate(toLocation, from)\n                .catch((error) => {\n                if (isNavigationFailure(error, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                    return error;\n                }\n                if (isNavigationFailure(error, 2 /* ErrorTypes.NAVIGATION_GUARD_REDIRECT */)) {\n                    // Here we could call if (info.delta) routerHistory.go(-info.delta,\n                    // false) but this is bug prone as we have no way to wait the\n                    // navigation to be finished before calling pushWithRedirect. Using\n                    // a setTimeout of 16ms seems to work but there is no guarantee for\n                    // it to work on every browser. So instead we do not restore the\n                    // history entry and trigger a new navigation as requested by the\n                    // navigation guard.\n                    // the error is already handled by router.push we just want to avoid\n                    // logging the error\n                    pushWithRedirect(assign(locationAsObject(error.to), {\n                        force: true,\n                    }), toLocation\n                    // avoid an uncaught rejection, let push call triggerError\n                    )\n                        .then(failure => {\n                        // manual change in hash history #916 ending up in the URL not\n                        // changing, but it was changed by the manual url change, so we\n                        // need to manually change it ourselves\n                        if (isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ |\n                            16 /* ErrorTypes.NAVIGATION_DUPLICATED */) &&\n                            !info.delta &&\n                            info.type === NavigationType.pop) {\n                            routerHistory.go(-1, false);\n                        }\n                    })\n                        .catch(noop);\n                    // avoid the then branch\n                    return Promise.reject();\n                }\n                // do not restore history on unknown direction\n                if (info.delta) {\n                    routerHistory.go(-info.delta, false);\n                }\n                // unrecognized error, transfer to the global handler\n                return triggerError(error, toLocation, from);\n            })\n                .then((failure) => {\n                failure =\n                    failure ||\n                        finalizeNavigation(\n                        // after navigation, all matched components are resolved\n                        toLocation, from, false);\n                // revert the navigation\n                if (failure) {\n                    if (info.delta &&\n                        // a new navigation has been triggered, so we do not want to revert, that will change the current history\n                        // entry while a different route is displayed\n                        !isNavigationFailure(failure, 8 /* ErrorTypes.NAVIGATION_CANCELLED */)) {\n                        routerHistory.go(-info.delta, false);\n                    }\n                    else if (info.type === NavigationType.pop &&\n                        isNavigationFailure(failure, 4 /* ErrorTypes.NAVIGATION_ABORTED */ | 16 /* ErrorTypes.NAVIGATION_DUPLICATED */)) {\n                        // manual change in hash history #916\n                        // it's like a push but lacks the information of the direction\n                        routerHistory.go(-1, false);\n                    }\n                }\n                triggerAfterEach(toLocation, from, failure);\n            })\n                // avoid warnings in the console about uncaught rejections, they are logged by triggerErrors\n                .catch(noop);\n        });\n    }\n    // Initialization and Errors\n    let readyHandlers = useCallbacks();\n    let errorListeners = useCallbacks();\n    let ready;\n    /**\n     * Trigger errorListeners added via onError and throws the error as well\n     *\n     * @param error - error to throw\n     * @param to - location we were navigating to when the error happened\n     * @param from - location we were navigating from when the error happened\n     * @returns the error as a rejected promise\n     */\n    function triggerError(error, to, from) {\n        markAsReady(error);\n        const list = errorListeners.list();\n        if (list.length) {\n            list.forEach(handler => handler(error, to, from));\n        }\n        else {\n            console.error(error);\n        }\n        // reject the error no matter there were error listeners or not\n        return Promise.reject(error);\n    }\n    function isReady() {\n        if (ready && currentRoute.value !== START_LOCATION_NORMALIZED)\n            return Promise.resolve();\n        return new Promise((resolve, reject) => {\n            readyHandlers.add([resolve, reject]);\n        });\n    }\n    function markAsReady(err) {\n        if (!ready) {\n            // still not ready if an error happened\n            ready = !err;\n            setupListeners();\n            readyHandlers\n                .list()\n                .forEach(([resolve, reject]) => (err ? reject(err) : resolve()));\n            readyHandlers.reset();\n        }\n        return err;\n    }\n    // Scroll behavior\n    function handleScroll(to, from, isPush, isFirstNavigation) {\n        const { scrollBehavior } = options;\n        if (!isBrowser || !scrollBehavior)\n            return Promise.resolve();\n        const scrollPosition = (!isPush && getSavedScrollPosition(getScrollKey(to.fullPath, 0))) ||\n            ((isFirstNavigation || !isPush) &&\n                history.state &&\n                history.state.scroll) ||\n            null;\n        return vue.nextTick()\n            .then(() => scrollBehavior(to, from, scrollPosition))\n            .then(position => position && scrollToPosition(position))\n            .catch(err => triggerError(err, to, from));\n    }\n    const go = (delta) => routerHistory.go(delta);\n    let started;\n    const installedApps = new Set();\n    const router = {\n        currentRoute,\n        listening: true,\n        addRoute,\n        removeRoute,\n        clearRoutes: matcher.clearRoutes,\n        hasRoute,\n        getRoutes,\n        resolve,\n        options,\n        push,\n        replace,\n        go,\n        back: () => go(-1),\n        forward: () => go(1),\n        beforeEach: beforeGuards.add,\n        beforeResolve: beforeResolveGuards.add,\n        afterEach: afterGuards.add,\n        onError: errorListeners.add,\n        isReady,\n        install(app) {\n            const router = this;\n            app.component('RouterLink', RouterLink);\n            app.component('RouterView', RouterView);\n            app.config.globalProperties.$router = router;\n            Object.defineProperty(app.config.globalProperties, '$route', {\n                enumerable: true,\n                get: () => vue.unref(currentRoute),\n            });\n            // this initial navigation is only necessary on client, on server it doesn't\n            // make sense because it will create an extra unnecessary navigation and could\n            // lead to problems\n            if (isBrowser &&\n                // used for the initial navigation client side to avoid pushing\n                // multiple times when the router is used in multiple apps\n                !started &&\n                currentRoute.value === START_LOCATION_NORMALIZED) {\n                // see above\n                started = true;\n                push(routerHistory.location).catch(err => {\n                });\n            }\n            const reactiveRoute = {};\n            for (const key in START_LOCATION_NORMALIZED) {\n                Object.defineProperty(reactiveRoute, key, {\n                    get: () => currentRoute.value[key],\n                    enumerable: true,\n                });\n            }\n            app.provide(routerKey, router);\n            app.provide(routeLocationKey, vue.shallowReactive(reactiveRoute));\n            app.provide(routerViewLocationKey, currentRoute);\n            const unmountApp = app.unmount;\n            installedApps.add(app);\n            app.unmount = function () {\n                installedApps.delete(app);\n                // the router is not attached to an app anymore\n                if (installedApps.size < 1) {\n                    // invalidate the current navigation\n                    pendingLocation = START_LOCATION_NORMALIZED;\n                    removeHistoryListener && removeHistoryListener();\n                    removeHistoryListener = null;\n                    currentRoute.value = START_LOCATION_NORMALIZED;\n                    started = false;\n                    ready = false;\n                }\n                unmountApp();\n            };\n        },\n    };\n    // TODO: type this as NavigationGuardReturn or similar instead of any\n    function runGuardQueue(guards) {\n        return guards.reduce((promise, guard) => promise.then(() => runWithContext(guard)), Promise.resolve());\n    }\n    return router;\n}\nfunction extractChangingRecords(to, from) {\n    const leavingRecords = [];\n    const updatingRecords = [];\n    const enteringRecords = [];\n    const len = Math.max(from.matched.length, to.matched.length);\n    for (let i = 0; i < len; i++) {\n        const recordFrom = from.matched[i];\n        if (recordFrom) {\n            if (to.matched.find(record => isSameRouteRecord(record, recordFrom)))\n                updatingRecords.push(recordFrom);\n            else\n                leavingRecords.push(recordFrom);\n        }\n        const recordTo = to.matched[i];\n        if (recordTo) {\n            // the type doesn't matter because we are comparing per reference\n            if (!from.matched.find(record => isSameRouteRecord(record, recordTo))) {\n                enteringRecords.push(recordTo);\n            }\n        }\n    }\n    return [leavingRecords, updatingRecords, enteringRecords];\n}\n\n/**\n * Returns the router instance. Equivalent to using `$router` inside\n * templates.\n */\nfunction useRouter() {\n    return vue.inject(routerKey);\n}\n/**\n * Returns the current route location. Equivalent to using `$route` inside\n * templates.\n */\nfunction useRoute(_name) {\n    return vue.inject(routeLocationKey);\n}\n\nexports.RouterLink = RouterLink;\nexports.RouterView = RouterView;\nexports.START_LOCATION = START_LOCATION_NORMALIZED;\nexports.createMemoryHistory = createMemoryHistory;\nexports.createRouter = createRouter;\nexports.createRouterMatcher = createRouterMatcher;\nexports.createWebHashHistory = createWebHashHistory;\nexports.createWebHistory = createWebHistory;\nexports.isNavigationFailure = isNavigationFailure;\nexports.loadRouteLocation = loadRouteLocation;\nexports.matchedRouteKey = matchedRouteKey;\nexports.onBeforeRouteLeave = onBeforeRouteLeave;\nexports.onBeforeRouteUpdate = onBeforeRouteUpdate;\nexports.parseQuery = parseQuery;\nexports.routeLocationKey = routeLocationKey;\nexports.routerKey = routerKey;\nexports.routerViewLocationKey = routerViewLocationKey;\nexports.stringifyQuery = stringifyQuery;\nexports.useLink = useLink;\nexports.useRoute = useRoute;\nexports.useRouter = useRouter;\nexports.viewDepthKey = viewDepthKey;\n","'use strict'\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./dist/vue-router.prod.cjs')\n} else {\n  module.exports = require('./dist/vue-router.cjs')\n}\n","var Vue = require('vue')\n\nObject.keys(Vue).forEach(function(key) {\n  exports[key] = Vue[key]\n})\n\nexports.set = function(target, key, val) {\n  if (Array.isArray(target)) {\n    target.length = Math.max(target.length, key)\n    target.splice(key, 1, val)\n    return val\n  }\n  target[key] = val\n  return val\n}\n\nexports.del = function(target, key) {\n  if (Array.isArray(target)) {\n    target.splice(key, 1)\n    return\n  }\n  delete target[key]\n}\n\nexports.Vue = Vue\nexports.Vue2 = undefined\nexports.isVue2 = false\nexports.isVue3 = true\nexports.install = function(){}\n","//We implement the backend version of getWHDebugFlags so bridge can access us without going through a recursive dep\n\nimport type { DTAPStage } from \"./concepts\";\n\n/// List global polyfills currently active. This may be needed to align TypeScript hosts configuration\nexport const globalPolyfills: string[] = [];\n\n/// An object with string keys and typed values\nexport interface WellKnownFlags {\n  /** Log RPcs */\n  rpc?: boolean;\n  /** Log web traffic */\n  wrq?: boolean;\n  /** Autoprofile */\n  apr?: boolean;\n  /** IPC */\n  ipc?: boolean;\n  /** async */\n  async?: boolean;\n}\nexport type DebugFlags = WellKnownFlags & { [key: string]: boolean | undefined };\n\nexport type DebugConfig = {\n  tags: readonly string[];\n  outputsession: string;\n  context: string;\n};\n\n/// Empty or no parameter lang is get, otherwise it's a set\nexport type GetSetAssetBase = (assetBase?: string | null) => string | null;\n\nexport type EnvHooks = {\n  currentAssetBase: GetSetAssetBase;\n};\n\n\nconst settingschangedcallbacks = new Array<() => void>;\n\n/* Global debug flags are set by `wh debug`, local flags are prefilled by environment variables.\n   Edits to the debug flags will be applied to the local flags (unless setDebugFlagsOverrideCB returns\n   override records).\n*/\nconst globalDebugFlags: DebugFlags = {}, localDebugFlags: DebugFlags = {};\n\n/** Returns the flag override records. The first record is examined first, then the second, etc. */\nlet debugFlagsOverridesCB: undefined | (() => DebugFlags[]);\n\n/** Override the debug flag override getter. */\nexport function setDebugFlagsOverrideCB(cb: undefined | (() => DebugFlags[])) {\n  debugFlagsOverridesCB = cb;\n}\n\n/* Proxy handler for the published debug flags. Uses the override records (with the first record\n   examined first, then the second, etc.) to override the flags from baseDebugFlags. Setting to `true` sets\n   the flag, `false` disables it and setting to `undefined` has the same effect as deleting the property in the\n   current top record (exposing any value from a lower record, like the debug settings from `wh debug`).\n*/\nclass DebugFlagsProxyHandler implements ProxyHandler<DebugFlags> {\n  private getRecordList(): DebugFlags[] {\n    return [...debugFlagsOverridesCB?.() ?? [], localDebugFlags, globalDebugFlags];\n  }\n\n  get(target: DebugFlags, p: string) {\n    for (const record of this.getRecordList())\n      if (p in record && typeof record[p] !== \"undefined\")\n        return record[p];\n    return undefined;\n  }\n  has(target: DebugFlags, p: string): boolean {\n    return this.get(target, p) !== undefined;\n  }\n  ownKeys(target: DebugFlags): Array<string | symbol> {\n    const keys = new Array<string | symbol>;\n    for (const record of this.getRecordList())\n      for (const key of Reflect.ownKeys(record))\n        if (typeof key === \"string\" && record[key] !== undefined && !keys.includes(key))\n          keys.push(key);\n    return keys;\n  }\n  set(target: DebugFlags, p: string, newValue: boolean | undefined): boolean {\n    const toModify = this.getRecordList()[0];\n    if (typeof newValue === \"boolean\")\n      toModify[p] = newValue;\n    else\n      delete toModify[p];\n\n    runSettingsCallbacks();\n    return true;\n  }\n  deleteProperty(target: DebugFlags, p: string): boolean {\n    const toModify = this.getRecordList()[0];\n    delete toModify[p];\n\n    runSettingsCallbacks();\n    return true;\n  }\n  getOwnPropertyDescriptor(target: DebugFlags, p: string): PropertyDescriptor | undefined {\n    const value = this.get(target, p);\n    return value !== undefined ? { enumerable: true, value, configurable: true } : undefined;\n  }\n}\n\nexport const debugFlags = new Proxy<DebugFlags>({\n  [Symbol.for('nodejs.util.inspect.custom')]: formatForConsoleLogs\n}, new DebugFlagsProxyHandler());\n\nfunction formatForConsoleLogs() {\n  return `DebugFlags [${[...Object.keys(debugFlags)].filter(key => debugFlags[key]).join(\", \")}]`;\n}\n\nfunction runSettingsCallbacks() {\n  for (const cb of [...settingschangedcallbacks]) {\n    try {\n      cb();\n    } catch (e) {\n      console.error(\"Error invoking settings change callback\", cb?.name, e);\n      //ignore, debugFlags can change due to external updates so they're basically signal handlers and there's no real point in crashing whatever was really running\n    }\n  }\n}\n\n/** Update the debugconfig as present in the system configuration record\n    @param settings - debugconfig cell of the system configuration record\n*/\nexport function updateDebugConfig(settings: DebugConfig | null) {\n  const oldenabledflags = Object.keys(globalDebugFlags).sort();\n  const newenabledflags = settings?.tags ? [...settings.tags].sort() : [];\n\n  if (oldenabledflags.join(\",\") !== newenabledflags.join(\",\")) {\n    for (const flag of newenabledflags)\n      globalDebugFlags[flag] = true;\n    for (const flag of oldenabledflags)\n      if (!newenabledflags.includes(flag))\n        delete globalDebugFlags[flag];\n\n    runSettingsCallbacks();\n  }\n  if (debugFlags.async && Error.stackTraceLimit < 100)\n    Error.stackTraceLimit = 100;\n}\n\nexport function registerDebugConfigChangedCallback(cb: () => void) {\n  settingschangedcallbacks.push(cb);\n}\n\nexport function updateLocalDebugFlags(mode: \"enable\" | \"disable\" | \"clear\", flags: string[]): DebugFlags {\n  switch (mode) {\n    case \"enable\":\n    case \"disable\":\n      for (const flag of flags)\n        localDebugFlags[flag] = mode === \"enable\";\n      break;\n    case \"clear\":\n      for (const flag of Object.keys(localDebugFlags))\n        delete localDebugFlags[flag];\n  }\n  runSettingsCallbacks();\n  return { ...globalDebugFlags, ...localDebugFlags };\n}\n\n/** DTAP stage set for this WebHare */\nlet dtapStage: DTAPStage = \"production\";\n\n/** @deprecated We now recommend checking dtapStage against production/acceptance Explicitly */\nlet isLive: boolean = dtapStage === \"production\" || dtapStage === \"acceptance\";\n\n/** The backend base URL. Used for eg. autoconfiguring JSON/RPC */\nlet backendBase = \"\";\n\n/** The global assetbase */\nlet assetBase: string | null = null;\n\n//deprecated variants\n/** @deprecated For WH5.4 and up use 'dtapStage' */\nlet dtapstage: DTAPStage = dtapStage;\n/** @deprecated For WH5.4 and up compare 'dtapStage' for production or acceptance */\nlet islive: boolean = isLive;\n\nlet hooks: EnvHooks | undefined;\nlet hookFactory: (() => EnvHooks) | undefined;\nlet gotHooks = false;\n\nexport function initEnv(setDtapStage: DTAPStage, setBackendBase: string) {\n  dtapStage = setDtapStage;\n  isLive = dtapStage === \"production\" || dtapStage === \"acceptance\";\n  backendBase = setBackendBase;\n\n  dtapstage = dtapStage;\n  islive = isLive;\n}\n\nexport function setEnvHooksFactory(newHookFactory: () => EnvHooks) {\n  if (gotHooks)\n    throw new Error(`The call to setEnvHooksFactory was too late - hooks have already been retrieved once`);\n  hookFactory = newHookFactory;\n}\n\nexport function getEnvHooks() {\n  gotHooks = true;\n  return hookFactory?.();\n}\n\nfunction ensureHooks(): EnvHooks {\n  return hooks ??= getEnvHooks?.() ?? {\n    currentAssetBase: (newAssetBase) => {\n      if (newAssetBase !== undefined)\n        assetBase = newAssetBase;\n      return assetBase;\n    }\n  };\n}\n\n/** Get the base url for assets. This may point towards eg. a CDN\n * @returns The base url for assets, ending with a '/'. null if not set\n */\nexport function getAssetBase(): string | null {\n  return ensureHooks().currentAssetBase();\n}\n\n/** Get the base url for a module's public assets (those located in the module's `public` folder)\n */\nexport function getModulePublicAssetBase(module: string) {\n  return `${getAssetBase() || \"/\"}.wh/mod/${encodeURIComponent(module)}/public/`;\n}\n\n/** Set the base url for assets */\nexport function setAssetBase(base: string | null): void {\n  if (base && !base.endsWith(\"/\"))\n    throw new Error(`Asset base must end with a '/'`);\n\n  ensureHooks().currentAssetBase(base);\n}\n\nexport { dtapStage, isLive, backendBase, localDebugFlags };\nexport { dtapstage, islive }; //deprecated variants\n","\n//Note that @webhare/env does not invoke this API itself. In WebHare @webhare/frontend/src/init uses this to initialize\nexport function getBrowserDebugFlags(varname: string): string[] {\n  const flags = [];\n  const urldebugvar = new URL(location.href).searchParams.get(varname);\n  if (urldebugvar)\n    flags.push(...urldebugvar.split(','));\n\n  //not importing getCookie to solve some import ordering issues\n  if (typeof document !== \"undefined\") { //'document' is undefined in a worker but assetpacks compiled for a ServiceWorker will also load us\n    const debugcookie = document.cookie.match(`(?:^|;)\\\\s*${varname}=([^;]*)`); //TODO escape varname\n    if (debugcookie) {\n      const debugcookievalue = decodeURIComponent(debugcookie[1]);\n      if (debugcookievalue)\n        flags.push(... (debugcookievalue.split('.').filter(flag => !flag.startsWith('sig='))));\n    }\n  }\n\n  if (typeof sessionStorage !== \"undefined\") {\n    const sessionDebug = sessionStorage.getItem(varname);\n    if (sessionDebug)\n      flags.push(...sessionDebug.split(','));\n  }\n\n  return flags;\n}\n","/** Rect describing an elements position */\nexport type Rect = {\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n  width: number;\n  height: number;\n};\n\n/** Elements you can set a value on and would have to trigger change and/or input events */\nexport type FormControlElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement;\n\n/** Types that support querySelector(All) */\ntype QuerySelectorAble = ParentNode | ShadowRoot;\n\nexport function qS<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E | null;\nexport function qS<E extends Element = HTMLElement>(selector: string): E | null;\n\n/** Match the first element using a CSS selector\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The first matching element or null\n */\nexport function qS<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E | null {\n  if (typeof node_or_selector === 'string')\n    return document.querySelector<E>(node_or_selector);\n  else if (selector)\n    return node_or_selector.querySelector<E>(selector);\n  return null;\n}\n\n\nexport function qR<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E;\nexport function qR<E extends Element = HTMLElement>(selector: string): E;\n\n/** Match a specific element using a CSS selector, requiring it to exist and be unique\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The requested element. Throw it the selector doesn't match exactly one element\n */\nexport function qR<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E {\n  const matches = qSA<E>(node_or_selector as QuerySelectorAble, selector as string);\n  if (matches.length === 1)\n    return matches[0];\n\n  if (typeof node_or_selector !== 'string') {\n    console.error(`${matches.length} elements match selector \\`${selector}\\` with startingpoint`, node_or_selector, matches);\n    throw new Error(`${matches.length} elements match selector \\`${selector}\\` given startingpoint '${node_or_selector.nodeName}'`);\n  } else {\n    console.error(`${matches.length} elements match selector \\`${node_or_selector}\\` in the document`, matches);\n    throw new Error(`${matches.length} elements match selector \\`${node_or_selector}\\` in the document`);\n  }\n}\n\nexport function qSA<E extends Element = HTMLElement>(startnode: QuerySelectorAble, selector: string): E[];\nexport function qSA<E extends Element = HTMLElement>(selector: string): E[];\n\n/** Find multiple elements using a CSS selector\n * @param node_or_selector - The starting node or selector\n * @param selector - The selector to match if the starting node was specified\n * @returns The requested elements.\n */\nexport function qSA<E extends Element>(node_or_selector: QuerySelectorAble | string, selector?: string): E[] {\n  if (typeof node_or_selector === 'string')\n    return Array.from(document.querySelectorAll(node_or_selector));\n  else if (selector)\n    return Array.from(node_or_selector.querySelectorAll(selector));\n\n  return [];\n}\n\n/** Return whether the passed element is a FormControlElement */\nexport function isFormControl(field: Element): field is FormControlElement {\n  return isHTMLElement(field) && [\"INPUT\", \"SELECT\", \"TEXTAREA\"].includes(field.tagName);\n}\n\n/** Return whether the passed element is an editable text field */\nexport function isEditControl(field: Element): field is HTMLElement {\n  return isHTMLElement(field) && ([\"INPUT\", \"TEXTAREA\"].includes(field.tagName) || field.isContentEditable);\n}\n\n/** Test whether node is an Element, even if it's in a different iframe */\nexport function isElement(node: unknown): node is Element {\n  //TODO What is actually going on if defaultView is missing?\n  if (!node || typeof node !== \"object\")\n    return false;\n\n  /* Getting the proto doesn't always work:\n  const proto = (node as Element).ownerDocument.defaultView?.Element;\n  (because our iframes derive off about? not sure) so until someone finds the real answer, we'll do a heuristic\n  */\n\n  /** Analyzing node.constructor.name doesn't work because custom elements don't necessarily have their constructor's name ending in Element\n  return Boolean(\"ownerDocument\" in node && node.constructor.name.match(/Element$/));\n  */\n\n  return Boolean(\"ownerDocument\" in node && (node as Element).nodeType === 1);\n\n}\n\n/** Test whether node is a HTMLElement, even if it's in a different iframe */\nexport function isHTMLElement(node: unknown): node is HTMLElement {\n  return isElement(node) && \"accessKey\" in node;\n}\n\n/**\n * get the relative bound difference between two elements, and return a writable copy\n *\n * @param node - The node for which you need coordinates\n * @param relativeto - Optional reference point. If not set, you just get a 'normal' coordinate object\n */\nexport function getRelativeBounds(node: Element, relativeto?: Element): Rect {\n  if (!relativeto)\n    relativeto = node.ownerDocument.documentElement;\n\n  const nodecoords = node.getBoundingClientRect();\n  const relcoords = relativeto.getBoundingClientRect();\n  return {\n    top: nodecoords.top - relcoords.top,\n    left: nodecoords.left - relcoords.left,\n    right: nodecoords.right - relcoords.left,\n    bottom: nodecoords.bottom - relcoords.top,\n    width: nodecoords.width,\n    height: nodecoords.height\n  };\n}\n\nexport type ParsedLanguageTag = {\n  /** The full tag, eg en-US */\n  tag: string;\n  /** The language code, eg 'en' */\n  language: string;\n  region?: string;\n  /** The script, eg 'Hant' */\n  script?: string;\n};\n\n/** Parse a BCP47 language tag */\nexport function parseLanguageTag(languageTag: string): ParsedLanguageTag {\n  /* https://datatracker.ietf.org/doc/html/rfc5646#section-2.1\n     langtag       = language\n                 [\"-\" script]\n                 [\"-\" region]\n                 *(\"-\" variant)\n                 *(\"-\" extension)\n                 [\"-\" privateuse]\n     BUT: we're limiting ourselves to language, script and region for now\n\n     language      = 2*3ALPHA           ; shortest ISO 639 code\n                    [\"-\" extlang]       ; sometimes followed by\n                                          extended language subtags\n\n                                           extlang       = 3ALPHA              ; selected ISO 639 codes\n                 *2(\"-\" 3ALPHA)      ; permanently reserved\n\n      script        = 4ALPHA              ; ISO 15924 code\n\n      region        = 2ALPHA              ; ISO 3166-1 code\n                    / 3DIGIT              ; UN M.49 code\n\n     Note that we're not yet fully implementing the spec, just the parts we expect to encounter in practice\n  */\n  const match = languageTag.match(/^([a-z]{2,}(-[a-z]{3})?)(-[A-Za-z]{4,})?(-[A-Z]{2}|-\\d{3})?$/);\n  if (!match)\n    throw new Error(`Invalid language tag: ${languageTag}`);\n\n  return {\n    tag: languageTag,\n    language: match[1],\n    ...(match[3] ? { script: match[3].substring(1) } : {}),\n    ...(match[4] ? { region: match[4].substring(1) } : {})\n  };\n}\n\n/** Get the effective language for an element (or the document)\n * @param node - The element for which to get the effective language. If not specified, the documentElement and finally the browser is used\n * @returns The language code, eg. \"nl\" or \"en-GB\"\n */\nexport function getLang(node?: Element): ParsedLanguageTag {\n  if (!node && typeof document !== \"undefined\")\n    node = document.documentElement;\n  const tag = (node?.closest('[lang]')?.getAttribute(\"lang\") || navigator.language || \"en\");\n  return parseLanguageTag(tag);\n}\n","//TODO can we replace ourselves with nodejs util.types in a pure NodeJS environment?\n\nimport type { Money } from \"./money.ts\";\n\nexport function getWHType(obj: unknown): string | null { //not exporting this directly as we hope JS comes up with better solutions for instanceOf not being compatible with realms/reloading\n  // Ideally we'd use symbol but it breaks tree shaking in esbuild, so this is our workaround. Reported as https://github.com/evanw/esbuild/issues/3940\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Can't cleanly type this it seems and it's low level anyway\n  return (obj as any)?.constructor?.[\"__ $whTypeSymbol\"] ?? null;\n}\n\nfunction isCrossRealm(value: unknown): value is object {\n  return Boolean(value // it's not null\n    && typeof value === \"object\" //and it's an object\n    && !(value instanceof Object)); //and it's not an instance of our Object\n}\n\n/** Test whether a value looks like an instance of Money */\nexport function isMoney(value: unknown): value is Money {\n  return getWHType(value) === \"Money\";\n}\n\n/** Test whether a value looks like an instance of Temporal.Instant */\nexport function isTemporalInstant(value: unknown): value is Temporal.Instant {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.Instant');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainDateTime */\nexport function isTemporalPlainDateTime(value: unknown): value is Temporal.PlainDateTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainDateTime');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainDate */\nexport function isTemporalPlainDate(value: unknown): value is Temporal.PlainDate {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainDate');\n}\n\n/** Test whether a value looks like an instance of Temporal.PlainTime */\nexport function isTemporalPlainTime(value: unknown): value is Temporal.PlainTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.PlainTime');\n}\n\n/** Test whether a value looks like an instance of Temporal.ZonedDateTime */\nexport function isTemporalZonedDateTime(value: unknown): value is Temporal.ZonedDateTime {\n  return Boolean(value && typeof value === \"object\" && Symbol.toStringTag in value && value?.[Symbol.toStringTag] === 'Temporal.ZonedDateTime');\n}\n\n/** Test whether a value looks like an instance of Date (assumes no subclasses) */\nexport function isDate(value: unknown): value is Date {\n  return value instanceof Date || (isCrossRealm(value) && value.constructor.name === \"Date\");\n}\n\n/** Test whether a value appears to implement the Blob interface */\nexport function isBlob(value: unknown): value is Blob {\n  return value instanceof Blob || Boolean(value && typeof value === \"object\" && \"size\" in value && \"type\" in value && \"slice\" in value && typeof value.slice === \"function\" && \"stream\" in value && typeof value.stream === \"function\");\n}\n\n/** Test whether a value appears to implement the File interface */\nexport function isFile(value: unknown): value is File {\n  return isBlob(value) && \"name\" in value;\n}\n\n/** Check if the object is probably an Error object. Can't use 'instanceof Error' as an Error might come from a different frame */\nexport function isError(e: unknown): e is Error {\n  return e instanceof Error || (isCrossRealm(e) && \"name\" in e && \"stack\" in e && \"message\" in e);\n}\n\n/** Check if the object looks like a promise */\nexport function isPromise<T>(e: T | Promise<T>): e is Promise<Awaited<T>> {\n  return Boolean(e && typeof (e as Promise<unknown>).then === \"function\" && typeof (e as Promise<unknown>).catch === \"function\");\n}\n\n/** Check the type of a value, return its JS or STD type\n * @param value - The value to check\n * @returns The type of the value. If the value is an object but recognized as any of Money, Date, Blob, Temporal.Instant/PlainDate/PlainDateTime, that type is returned.\n */\nexport function stdTypeOf(value: unknown): \"string\" | \"number\" | \"boolean\" | \"null\" | \"symbol\" | \"bigint\" | \"function\" | \"object\" | \"undefined\" | \"Date\" | \"Money\" | \"Array\" | \"Instant\" | \"PlainDate\" | \"PlainDateTime\" | \"PlainTime\" | \"ZonedDateTime\" | \"File\" | \"Blob\" {\n  const t = typeof value;\n  if (t === \"object\") {\n    if (!value)\n      return \"null\";\n    if (Array.isArray(value))\n      return \"Array\";\n    if (isMoney(value))\n      return \"Money\";\n    if (isBlob(value))\n      return isFile(value) ? \"File\" : \"Blob\";\n    if (isDate(value))\n      return \"Date\";\n    if (isTemporalInstant(value))\n      return \"Instant\";\n    if (isTemporalPlainTime(value))\n      return \"PlainTime\";\n    if (isTemporalPlainDate(value))\n      return \"PlainDate\";\n    if (isTemporalPlainDateTime(value))\n      return \"PlainDateTime\";\n    if (isTemporalZonedDateTime(value))\n      return \"ZonedDateTime\";\n  }\n  return t;\n}\n","/* A math library for safe calculation with money amounts in JS. If you don't\n   know why we need this, try to predict what the following code would print:\n   var cents=0;for(var i=0;i<100;++i)cents+=0.01;cents-=1;console.log(cents);\n   and think twice about whether you want to code anything financial in JS.\n\n   Money values supplied from HareScript should be formatted using FormatJSFinmathMoney\n*/\n\nexport type FinmathInput = string | number;\n\nexport type RoundMode = \"none\" | \"toward-zero\" | \"down\" | \"up\" | \"half-toward-zero\" | \"half-down\" | \"half-up\" | \"toward-infinity\" | \"half-toward-infinity\";\n\nexport interface SplitNumber {\n  num: number;\n  decimals: number;\n}\n\n//a 'price' is a string of the form \"nnn[.NNNN]\"\n\nfunction stripUnneededDecimals(num: number, decimals: number) {\n  //we have a maximum of 5 digits of external precision\n  if (decimals > 5) {\n    // math.round rounds toward positive infinity\n    const isneg = num < 0;\n    if (isneg)\n      num = -num;\n\n    while (decimals > 6) { //truncate excess digits\n      num = Math.floor(num / 10);\n      --decimals;\n    }\n    //round up if 6th decimal >= 5\n    num = Math.round(num / 10);\n    decimals = 5;\n\n    if (isneg)\n      num = -num;\n  }\n\n  //strip unneeded decimals\n  while (decimals > 0 && !(num % 10)) {\n    num /= 10;\n    --decimals;\n  }\n\n  return { num, decimals };\n}\n\nfunction toText(amount: SplitNumber, decimalpoint: string, mindecimals: number) {\n  if (!Number.isSafeInteger(amount.num))\n    throw new Error(\"Result would overflow the safe value range\");\n\n  let num, decimals;\n  ({ num, decimals } = stripUnneededDecimals(amount.num, amount.decimals));\n\n  // Strip sign from number, may need to prefix it\n  const isnegative = num < 0;\n  if (isnegative)\n    num = -num;\n\n  let astext = String(num);\n\n  // Ensure we have enough leading 0's to render the first integer digit\n  if (astext.length <= decimals)\n    astext = '00000000000000000000'.substr(0, decimals + 1 - astext.length) + astext;\n  // make sure we have enough 0's to show mindecimals\n  if (decimals < mindecimals) {\n    astext += '00000000000000000000'.substr(0, mindecimals - decimals);\n    decimals = mindecimals;\n  }\n\n  // insert decimal point if needed\n  if (decimals)\n    astext = astext.substr(0, astext.length - decimals) + decimalpoint + astext.substr(-decimals);\n\n  // add sign if needed\n  astext = (isnegative ? \"-\" : \"\") + astext;\n  return astext;\n}\n\n/** Convert a money of any format to a split number object\n    @param money - Either an integer number or string with a number\n    @returns Split number object\n*/\nfunction splitValue(money: FinmathInput): SplitNumber {\n  if (typeof money === 'number') {\n    if (money !== Math.floor(money))\n      throw new Error(\"Non-integer number passed\");\n    if (!Number.isSafeInteger(money))\n      throw new Error(`The value ${money} is outside the safe value range`);\n    return { num: money, decimals: 0 };\n  }\n  if (typeof money !== 'string')\n    throw new Error(\"Number or string expected, got \" + money);\n\n  const split = money.match(/^(-)?([0-9]*)(\\.([0-9]{0,5})([0-9]*))?$/);\n  if (!split)\n    throw new Error(`Illegal money value received: '${money}'`);\n\n  const sign = split[1] === '-' ? -1 : 1;\n  const decimals = split[3] ? split[4].length : 0;\n  // If there are more than 5 decimals, round up (using halfExpand strategy)\n  const num = sign * (parseInt(split[2] || \"0\") * Math.pow(10, decimals) + (parseInt((split[4] || '')) || 0) + (split[5]?.[0] >= '5' ? 1 : 0));\n  if (!Number.isSafeInteger(num))\n    throw new Error(`The value '${money}' is outside the safe value range`);\n\n  return stripUnneededDecimals(num, decimals);\n}\n\n/** Convert split number into a string\n*/\nfunction joinPrice(parts: SplitNumber): string {\n  return toText(parts, '.', 0);\n}\n\nfunction adjustDecimals(amount: SplitNumber, requiredecimals: number) {\n  const toadd = requiredecimals - amount.decimals;\n  if (toadd <= 0)\n    return;\n\n  let multiplier = 1;\n  for (let idx = 0; idx < toadd; ++idx)\n    multiplier *= 10;\n\n  if (!Number.isSafeInteger(amount.num * multiplier))\n    throw new Error(\"adjustDecimals would overflow the safe value range\");\n\n  amount.num *= multiplier;\n  amount.decimals += toadd;\n}\n\n/** Returns if a price string is valid\n*/\nexport function isValidPrice(money: string) {\n  if (typeof money !== 'string' || !money.match(/[0-9]+(\\.[0-9]{0,5})?$/))\n    return false;\n  return true;\n}\n\nfunction __add(lhs: SplitNumber, rhs: SplitNumber) {\n  //equalize # of decimals, and then it's a simple addition\n  const requiredecimals = Math.max(lhs.decimals, rhs.decimals);\n  adjustDecimals(lhs, requiredecimals);\n  adjustDecimals(rhs, requiredecimals);\n  return { num: lhs.num + rhs.num, decimals: requiredecimals };\n}\n\n/** Adds two numbers together\n*/\nexport function add(amount1: FinmathInput, amount2: FinmathInput): string {\n  return joinPrice(__add(splitValue(amount1), splitValue(amount2)));\n}\n\n/** Subtracts a number from another number\n*/\nexport function subtract(amount: FinmathInput, tosubtract: FinmathInput) {\n  const lhs = splitValue(amount), rhs = splitValue(tosubtract);\n  rhs.num = -rhs.num;\n  return joinPrice(__add(lhs, rhs));\n}\n\nfunction __multiply(lhs: SplitNumber, rhs: SplitNumber) {\n  //ADDME the naive 'add decimals, multiple nums' approach gets you out of the safe range real fast. needs tests\n  return { num: lhs.num * rhs.num, decimals: lhs.decimals + rhs.decimals };\n}\n\n/** Multiplies two numbers together\n*/\nexport function multiply(amount1: FinmathInput, amount2: FinmathInput): string {\n  const lhs = splitValue(amount1), rhs = splitValue(amount2);\n  return joinPrice(__multiply(lhs, rhs));\n}\n\n/** Compares two numbers\n    @param amount1 - Left hand value\n    @param amount2 - Right hand value\n    @returns Returns 0 if amount1 === amount2, -1 if amount1 \\< amount2, 1 if amount1 \\> amount2\n*/\nexport function cmp(amount1: FinmathInput, amount2: FinmathInput) {\n  const diff = __add(splitValue(amount1), __multiply(splitValue(amount2), { num: -1, decimals: 0 }));\n  return diff.num < 0 ? -1 : diff.num === 0 ? 0 : 1;\n}\n\n/** Returns a percentage of an amount\n    @param amount - Original amount\n    @param perc - Percentage of the amount to return\n    @returns Percentage of the amount\n*/\nexport function getPercentageOfAmount(amount: FinmathInput, perc: FinmathInput) {\n  const lhs = splitValue(amount), rhs = splitValue(perc);\n  const result = __multiply(lhs, rhs);\n  result.decimals += 2;\n  return joinPrice(normalize(result));\n}\n\nfunction normalize(amount: SplitNumber) {\n  while (amount.decimals && (amount.num % 10) === 0) {\n    amount.num /= 10;\n    --amount.decimals;\n  }\n  return amount;\n}\n\n/// format a price amount. extend # of decimals to specified # if not enough\nexport function formatPrice(money: FinmathInput, decimalpoint: string, decimals: number) {\n  return toText(splitValue(money), decimalpoint, decimals);\n}\n\n/** Rounds integer to multiple, exposed for testing only\n*/\nexport function __roundIntegerToMultiple(value: number, roundunit: number, mode: RoundMode) {\n  switch (mode) {\n    case \"none\":\n      {\n        // no rounding\n      } break;\n    case \"toward-zero\":\n      {\n        value = Math.trunc(value / roundunit) * roundunit;\n      } break;\n    case \"toward-infinity\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit - 1) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit + 1) / roundunit) * roundunit;\n      } break;\n    case \"down\":\n      {\n        if (value > 0)\n          value = Math.trunc(value / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit + 1) / roundunit) * roundunit;\n      } break;\n    case \"up\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit - 1) / roundunit) * roundunit;\n        else\n          value = Math.trunc(value / roundunit) * roundunit;\n      } break;\n    case \"half-toward-zero\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + (roundunit - 1) / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - (roundunit - 1) / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-toward-infinity\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-down\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + (roundunit - 1) / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - roundunit / 2) / roundunit) * roundunit;\n      } break;\n    case \"half-up\":\n      {\n        if (value > 0)\n          value = Math.trunc((value + roundunit / 2) / roundunit) * roundunit;\n        else\n          value = Math.trunc((value - (roundunit - 1) / 2) / roundunit) * roundunit;\n      } break;\n    default:\n      {\n        throw new Error(`Unknown rounding mode ${mode}`);\n      }\n  }\n  return value;\n}\n\n/** Rounds a value to a multiple of a unit, with a specific rounding mode\n    @param value - Value to round\n    @param unit - The value will be rounded to a mulitple of this unit (except when rounding mode is 'none')\n    @param mode - Rounding mode. Possible values:\n      <ul>\n        <li>none: No rounding</li>\n        <li>toward-zero: Round toward zero</li>\n        <li>down: Round toward negative infity</li>\n        <li>up: Round toward positive infity</li>\n        <li>half-toward-zero: Round nearest multiple, round half of a multiple toward zero</li>\n        <li>half-down: Round nearest multiple, round half of a multiple toward negative infinity</li>\n        <li>half-up: Round nearest multiple, round half of a multiple toward positive infity</li>\n      </ul>\n    @returns The rounded value\n*/\nexport function roundToMultiple(value: FinmathInput, unit: FinmathInput, mode: RoundMode) {\n  const split_value = splitValue(value);\n  const split_unit = splitValue(unit);\n\n  const requiredecimals = Math.max(split_value.decimals, split_unit.decimals);\n  adjustDecimals(split_value, requiredecimals);\n  adjustDecimals(split_unit, requiredecimals);\n\n  const result = { num: __roundIntegerToMultiple(split_value.num, split_unit.num, mode), decimals: split_value.decimals };\n  return joinPrice(result);\n}\n\n/** Returns the minimum of all the arguments\n    @param amount - First value\n    @param amounts - Rest of the values\n    @returns The lowest value among amount and amounts\n*/\nexport function min(amount: FinmathInput, ...amounts: FinmathInput[]) {\n  for (const val of amounts)\n    if (cmp(amount, val) > 0)\n      amount = val;\n  return joinPrice(splitValue(amount));\n}\n\n/** Returns the maximum of all the arguments\n    @param amount - First value\n    @param amounts - Rest of the values\n    @returns The highest value among amount and amounts\n*/\nexport function max(amount: FinmathInput, ...amounts: FinmathInput[]) {\n  for (const val of amounts)\n    if (cmp(amount, val) < 0)\n      amount = val;\n  return joinPrice(splitValue(amount));\n}\n\n/** Returns a power of 10\n    @param exp - Integer power, must be 0 or bigger\n    @returns Requested power of 10\n*/\nfunction getNonNegativePowerOf10(exp: number) {\n  let retval = 1, running_exp = 10;\n  while (exp) {\n    if (exp & 1)\n      retval *= running_exp;\n    running_exp *= running_exp;\n    exp = exp >> 1;\n  }\n  return retval;\n}\n\n/** Divides two values, with 5 decimals of precision\n    @param value - Value To divide\n    @param divisor - Divisor\n    @returns Divided value, with 5 decimals of precision\n*/\nexport function divide(value: FinmathInput, divisor: FinmathInput) {\n  const lhs = splitValue(value), rhs = splitValue(divisor);\n  const mul10exp = lhs.decimals - rhs.decimals - 5;\n  const mulfactor = mul10exp < 0 ? getNonNegativePowerOf10(-mul10exp) : 1;\n  const roundunit = mul10exp > 0 ? getNonNegativePowerOf10(mul10exp) : 1;\n  return joinPrice({ num: __roundIntegerToMultiple(mulfactor * lhs.num / rhs.num, roundunit, \"half-toward-infinity\"), decimals: 5 });\n}\n\nexport function moneyDivide(value: FinmathInput, divisor: FinmathInput) { //divide was added in 5.0. remove this old name eventually\n  return divide(value, divisor);\n}\n\n/** Test whether two values have a specific relation\n    @param lhs - Left hand value\n    @param relation - One of '\\<', '\\<=', '==', '!=', '\\>', '\\>=''\n    @param rhs - Right hand value\n    @returns TRUE if the relation holds\n    @example\n      console.log(finmath.test(1, '\\<', 2)); // prints 'true'\n*/\nexport function test(lhs: FinmathInput, relation: \"<\" | \"<=\" | \"==\" | \"!=\" | \">\" | \">=\", rhs: FinmathInput) {\n  const compareresult = cmp(lhs, rhs);\n  switch (relation) {\n    case '<': return compareresult < 0;\n    case '<=': return compareresult <= 0;\n    case '==': return compareresult === 0;\n    case '!=': return compareresult !== 0;\n    case '>': return compareresult > 0;\n    case '>=': return compareresult >= 0;\n  }\n  throw Error(`Cannot test for unknown relation '${relation}'`);\n}\n","/* A Money type library for safe calculation with money amounts in JS. If you don't\n   know why we need this, try to predict what the following code would print:\n   var cents=0;for(var i=0;i<100;++i)cents+=0.01;cents-=1;console.log(cents);\n   and think twice about whether you want to code anything financial in JS.\n\n   We haven't decideded yet what range Money should support. To keep our options open and keep HS compatbility for now\n   we will fix ourselves to 5 digits (HS compat) and not allow values bigger than 900_000_000 (2**53 / 100000 'number' compatbiility clamped to a more readable number)\n\n  Users should not rely on JS Money keeping this smaller range in the future. Money values supplied from HareScript should be formatted using FormatJSFinmathMoney\n*/\n\nimport * as finmath from \"./finmath.ts\"; //TODO absorb into us as soon as noone externally depends on finmath anymore\nimport { isMoney } from \"./quacks.ts\";\n\nexport type MoneyRoundingMode = \"none\" | \"toward-zero\" | \"down\" | \"up\" | \"half-toward-zero\" | \"half-down\" | \"half-up\" | \"toward-infinity\" | \"half-toward-infinity\";\nexport type MoneyTestTypes = \"<\" | \"<=\" | \"==\" | \"!=\" | \">\" | \">=\";\n\ntype MoneyParameter = Money | string;\n\ninterface SplitNumber {\n  num: number;\n  decimals: number;\n}\n\nexport interface MoneyFormatOptions {\n  //thousand separator. defaults to \"\"\n  thousandsSeparator?: string;\n  //decimal separator. defaults to \".\"\n  decimalSeparator?: string;\n  //minimum # of decimals. defaults to 2\n  minDecimals?: number;\n}\n\nfunction stripUnneededDecimals(num: number, decimals: number) {\n  //we have a maximum of 5 digits of external precision\n  if (decimals > 5) {\n    // math.round rounds toward positive infinity\n    const isneg = num < 0;\n    if (isneg)\n      num = -num;\n\n    while (decimals > 6) { //truncate excess digits\n      num = Math.floor(num / 10);\n      --decimals;\n    }\n    //round up if 6th decimal >= 5\n    num = Math.round(num / 10);\n    decimals = 5;\n\n    if (isneg)\n      num = -num;\n  }\n\n  //strip unneeded decimals\n  while (decimals > 0 && !(num % 10)) {\n    num /= 10;\n    --decimals;\n  }\n\n  return { num, decimals };\n}\n\n/** Convert a money of any format to a split number object\n    @param money - Either an integer number or string with a number\n    @returns Split number object\n*/\nfunction splitValue(money: MoneyParameter): SplitNumber {\n  if (typeof money === 'number') {\n    if (money !== Math.floor(money))\n      throw new Error(\"Non-integer number passed\");\n    if (!Number.isSafeInteger(money))\n      throw new Error(`The value ${money} is outside the safe value range`);\n    return { num: money, decimals: 0 };\n  }\n  if (typeof money !== 'string')\n    throw new Error(\"Number or string expected, got \" + money);\n\n  const split = money.match(/^(-)?([0-9]*)(\\.([0-9]{0,5})([0-9]*))?$/);\n  if (!split)\n    throw new Error(`Illegal money value received: '${money}'`);\n\n  const sign = split[1] === '-' ? -1 : 1;\n  const decimals = split[3] ? split[4].length : 0;\n  // If there are more than 5 decimals, round up (using halfExpand strategy)\n  const num = sign * (parseInt(split[2] || \"0\") * Math.pow(10, decimals) + (parseInt((split[4] || '')) || 0) + (split[5]?.[0] >= '5' ? 1 : 0));\n  if (!Number.isSafeInteger(num))\n    throw new Error(`The value '${money}' is outside the safe value range`);\n\n  return stripUnneededDecimals(num, decimals);\n}\n\nfunction toText(amount: SplitNumber, decimalpoint: string, mindecimals: number, thousandpoint: string) {\n  if (!Number.isSafeInteger(amount.num))\n    throw new Error(\"Result would overflow the safe value range\");\n\n  let { num, decimals } = stripUnneededDecimals(amount.num, amount.decimals);\n\n  // Strip sign from number, may need to prefix it\n  const isnegative = num < 0;\n  if (isnegative)\n    num = -num;\n\n  let astext = String(num);\n\n  // Ensure we have enough leading 0's to render the first integer digit\n  if (astext.length <= decimals)\n    astext = '00000000000000000000'.substring(0, decimals + 1 - astext.length) + astext;\n  // make sure we have enough 0's to show mindecimals\n  if (decimals < mindecimals) {\n    astext += '00000000000000000000'.substring(0, mindecimals - decimals);\n    decimals = mindecimals;\n  }\n\n  let beforepoint = astext.substring(0, astext.length - decimals);\n  const afterpoint = astext.substring(astext.length - decimals);\n\n  // Add thouands points if neeed\n  if (thousandpoint)\n    beforepoint = beforepoint.replaceAll(/\\B(?=(\\d{3})+(?!\\d))/g, thousandpoint);\n\n  return (isnegative ? \"-\" : \"\") + beforepoint + (afterpoint.length ? decimalpoint + afterpoint : \"\");\n}\n\n/** A decimal based JS money type*/\nexport class Money {\n  /** finmath-compatible value */\n  readonly value: string;\n  private static \"__ $whTypeSymbol\" = \"Money\";\n\n  constructor(value: MoneyParameter = \"0\") {\n    this.value = Money.parseParameter(value);\n\n    const intvalue = parseInt(this.value);\n    //We need the number to be in the safe range even after adding 5 decimals\n    if (intvalue <= (Number.MIN_SAFE_INTEGER / 100000) || intvalue >= (Number.MAX_SAFE_INTEGER / 100000))\n      throw new TypeError(`Money value '${value}' is out of range`);\n  }\n\n  private static parseParameter(param: MoneyParameter): string {\n    if (typeof param === \"string\")\n      return toText(splitValue(param), \".\", 0, \"\");\n    if (Money.isMoney(param))\n      return (param as unknown as { value: string }).value;\n\n    throw new TypeError(`Money cannot be constructed out of a value of type ${typeof param}`);\n  }\n\n  static isMoney(value: unknown): value is Money {\n    return isMoney(value);\n  }\n\n  static fromNumber(value: number): Money {\n    return new Money(String(value));\n  }\n\n  /** Adds numbers together\n  */\n  static add(left: MoneyParameter, ...right: MoneyParameter[]): Money {\n    let sum = Money.parseParameter(left);\n    for (const item of right)\n      sum = finmath.add(sum, Money.parseParameter(item));\n    return new Money(sum);\n  }\n\n  /** Subtracts a number from another number\n  */\n  static subtract(left: MoneyParameter, right: MoneyParameter): Money {\n    return new Money(finmath.subtract(Money.parseParameter(left), Money.parseParameter(right)));\n  }\n\n  /** Rounds a value to a multiple of a unit, with a specific rounding mode\n      @param amount - Value to round\n      @param roundto - The value will be rounded to a mulitple of this unit (except when rounding mode is 'none')\n      @param mode - Rounding mode. Possible values:<br>\n        <ul>\n          <li>none: No rounding</li>\n          <li>toward-zero: Round toward zero</li>\n          <li>down: Round toward negative infity</li>\n          <li>up: Round toward positive infity</li>\n          <li>half-toward-zero: Round nearest multiple, round half of a multiple toward zero</li>\n          <li>half-down: Round nearest multiple, round half of a multiple toward negative infinity</li>\n          <li>half-up: Round nearest multiple, round half of a multiple toward positive infity</li>\n        </ul>\n      @returns The rounded value\n  */\n  static roundToMultiple(amount: MoneyParameter, roundto: MoneyParameter, mode: MoneyRoundingMode): Money {\n    return new Money(finmath.roundToMultiple(Money.parseParameter(amount), Money.parseParameter(roundto), mode));\n  }\n\n  /** Compares two numbers\n      @param lhs - Left hand value\n      @param rhs - Right hand value\n      @returns Returns 0 if amount1 === amount2, -1 if amount1 \\< amount2, 1 if amount1 \\> amount2\n  */\n  static cmp(lhs: MoneyParameter, rhs: MoneyParameter): -1 | 0 | 1 {\n    return finmath.cmp(Money.parseParameter(lhs), Money.parseParameter(rhs));\n  }\n\n  /** Test whether two values have a specific relation\n      @param lhs - Left hand value\n      @param relation - One of '\\<', '\\<=', '==', '!=', '\\>', '\\>=''\n      @param rhs - Right hand value\n      @returns TRUE if the relation holds\n      @example\n        console.log(Money.check(1, '\\<', 2)); // prints 'true'\n  */\n  static check(lhs: MoneyParameter, relation: MoneyTestTypes, rhs: MoneyParameter): boolean {\n    return finmath.test(Money.parseParameter(lhs), relation, Money.parseParameter(rhs));\n  }\n\n  /** Multiplies two numbers together\n  */\n  static multiply(left: MoneyParameter, right: MoneyParameter): Money {\n    return new Money(finmath.multiply(Money.parseParameter(left), Money.parseParameter(right)));\n  }\n\n  /** Returns a percentage of an amount\n      @param amount - Original amount\n      @param percentage - Percentage of the amount to return\n      @returns Percentage of the amount\n  */\n  static getPercentage(amount: MoneyParameter, percentage: MoneyParameter): Money {\n    return new Money(finmath.getPercentageOfAmount(Money.parseParameter(amount), Money.parseParameter(percentage)));\n  }\n\n  /** Divides two values, (currently with up to 5 decimals of precision)\n      @param numerator - Value to divide\n      @param divisor - Divisor\n      @returns Divided value\n  */\n  static divide(numerator: MoneyParameter, divisor: MoneyParameter): Money {\n    return new Money(finmath.divide(Money.parseParameter(numerator), Money.parseParameter(divisor)));\n  }\n  /** Returns the minimum of all the arguments\n      @param amount - First value\n      @param amounts - Rest of the values\n      @returns The lowest value among amount and amounts\n  */\n  static min(amount: MoneyParameter, ...amounts: MoneyParameter[]): Money {\n    return new Money(finmath.min(Money.parseParameter(amount), ...(amounts.map(Money.parseParameter))));\n\n  }\n\n  /** Returns the maximum of all the arguments\n      @param amount - First value\n      @param amounts - Rest of the values\n      @returns The highest value among amount and amounts\n  */\n  static max(amount: MoneyParameter, ...amounts: MoneyParameter[]): Money {\n    return new Money(finmath.max(Money.parseParameter(amount), ...(amounts.map(Money.parseParameter))));\n  }\n\n  /** format a price amount. extend # of decimals to specified # if not enough */\n  format(format?: MoneyFormatOptions): string {\n    return toText(splitValue(this.value),\n      format?.decimalSeparator ?? \".\",\n      format?.minDecimals ?? 2,\n      format?.thousandsSeparator ?? \"\");\n  }\n\n  toJSON(): string {\n    return this.value;\n  }\n\n  toString(): string {\n    return this.value;\n  }\n\n  toNumber(): number {\n    return parseFloat(this.value);\n  }\n}\n","import { Money } from \"./money.ts\";\nimport { isBlob, isDate, isMoney, isPromise, isTemporalInstant, isTemporalPlainDate, isTemporalPlainDateTime, isTemporalPlainTime, isTemporalZonedDateTime, stdTypeOf } from \"./quacks.ts\";\n\n/// Returns T or a promise resolving to T\nexport type MaybePromise<T> = Promise<T> | T;\n\nexport type ComparableType = number | null | bigint | string | Date | Money | boolean | Uint8Array | Temporal.Instant | Temporal.PlainDate | Temporal.PlainTime | Temporal.ZonedDateTime;\n\ntype CamelCase<S extends string> = S extends `${infer P1}_${infer P2}${infer P3}`\n  ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}`\n  : Lowercase<S>;\n\ntype KeysToCamelCase<T> = {\n  [K in keyof T as CamelCase<string & K>]: ToCamelCase<T[K]>;\n};\n\ntype CamelToSnakeCase<S extends string> = S extends `${infer T}${infer U}` ?\n  `${T extends Capitalize<T> ? \"_\" : \"\"}${Lowercase<T>}${CamelToSnakeCase<U>}` :\n  S;\n\ntype KeysToSnakeCase<T> = {\n  [K in keyof T as CamelToSnakeCase<string & K>]: ToSnakeCase<T[K]>\n};\n\ntype NonRecordTypes = Date | Money | Blob | Temporal.Instant | Temporal.PlainDate | Temporal.PlainDateTime | Temporal.ZonedDateTime;\n\nexport type ToSnakeCase<T> =\n  T extends unknown[] ? Array<ToSnakeCase<T[number]>> :\n  T extends NonRecordTypes ? T :\n  T extends object ? KeysToSnakeCase<T> :\n  T;\n\nexport type ToCamelCase<T> =\n  T extends unknown[] ? Array<ToCamelCase<T[number]>> :\n  T extends NonRecordTypes ? T :\n  T extends object ? KeysToCamelCase<T> :\n  T;\n\n/** Convert a snake_case_name to its corresponding camelCaseName\n * @param name - Name to convert\n * @returns Converted name\n*/\nexport function nameToCamelCase(name: string) {\n  return name.replaceAll(/_[a-z]/g, c => c[1].toUpperCase());\n}\n\n/** Convert a camelCaseName to corresponding snake_case_name\n * @param name - Name to convert\n * @returns Converted name\n*/\nexport function nameToSnakeCase(name: string) {\n  return name.replaceAll(/[A-Z]/g, c => '_' + c.toLowerCase());\n}\n\n/// Should we rewrite the key/values in this object?\nfunction recodeObject(inp: object) {\n  return !isDate(inp) && !isMoney(inp) && !isBlob(inp) && !isTemporalInstant(inp) && !isTemporalPlainDate(inp) && !isTemporalPlainDateTime(inp) && !isTemporalZonedDateTime(inp);\n}\n\nfunction recursiveToSnakeCase<T>(inp: T): ToSnakeCase<T> {\n  if (Array.isArray(inp))\n    return inp.map(toSnakeCase) as ToSnakeCase<T>;\n  if (inp && typeof inp === \"object\" && recodeObject(inp))\n    return Object.fromEntries(Object.entries(inp).map(([key, value]) => [nameToSnakeCase(key), recursiveToSnakeCase(value)])) as ToSnakeCase<T>;\n  return inp as ToSnakeCase<T>;\n}\n\nfunction recursiveToCamelCase<T>(inp: T): ToCamelCase<T> {\n  if (Array.isArray(inp))\n    return inp.map(toCamelCase) as ToCamelCase<T>;\n  if (inp && typeof inp === \"object\" && recodeObject(inp))\n    return Object.fromEntries(Object.entries(inp).map(([key, value]) => [nameToCamelCase(key), recursiveToCamelCase(value)])) as ToCamelCase<T>;\n  return inp as ToCamelCase<T>;\n}\n\n/** Convert all keys to camel case recursively\n * @param inp - Array or object to convert\n * @returns Converted object\n*/\nexport function toSnakeCase<T extends object | object[] | null | undefined>(inp: T): ToSnakeCase<T> {\n  return recursiveToSnakeCase(inp);\n}\n\n/** Convert all keys to snake case recursively\n * @param inp - Array or object to convert\n * @returns Converted object\n*/\nexport function toCamelCase<T extends object | object[] | null | undefined>(inp: T): ToCamelCase<T> {\n  return recursiveToCamelCase(inp);\n}\n\n// TODO make this a quack if we're sure Uint8array is what we want to support - this is here basically to give Buffer support to be compatible with hscompat' compare\nfunction isUInt8Array(value: unknown): value is Uint8Array {\n  return value !== null && typeof value === \"object\" && \"length\" in value && (value as Uint8Array).BYTES_PER_ELEMENT === 1;\n}\n\ntype AwaitedValues<T extends readonly unknown[]> = { -readonly [K in keyof T]: Awaited<T[K]> };\n\n/** Resolve an array of potential promises, returning an array with resolved results\n * @param array - Array of values or promises\n * @returns An array of resolved values, or a promise resolving to that array if any input was a promise\n*/\nexport function maybePromiseAll<const T extends readonly unknown[]>(array: T): MaybePromise<AwaitedValues<T>> {\n  const resolved: Array<Awaited<T[number]>> = [];\n  for (const item of array) {\n    if (isPromise(item))\n      return Promise.all(array) as Promise<AwaitedValues<T>>;\n    resolved.push(item as Awaited<T[number]>);\n  }\n  return resolved as AwaitedValues<T>;\n}\n\n/** Call a function on the value of a potential promise, return the result\n * @param value - Value or promise\n * @param cb - Callback to call on the value\n * @returns The result of the callback, or a promise resolving to that result if the input was a promise\n*/\nexport function mapMaybePromise<T, U>(value: T, cb: (arg: Awaited<T>) => U): U | Promise<U> {\n  return isPromise(value) ? value.then(t => cb(t as Awaited<T>)) : cb(value as Awaited<T>);\n}\n\n/** Compare two values of std-supported types\n * @param left - First value\n * @param right - Second value\n * @returns -1 if left \\< right, 0 if equal, 1 if left \\> right\n */\nexport function compare(left: ComparableType, right: ComparableType): -1 | 0 | 1 {\n  if (left === null)\n    return right === null ? 0 : -1;\n  else if (right === null)\n    return 1;\n\n  switch (typeof left) {\n    case \"boolean\": {\n      if (typeof right === \"boolean\")\n        return left !== right ? left < right ? -1 : 1 : 0;\n    } break;\n    case \"number\": {\n      switch (typeof right) {\n        case \"bigint\": {\n          const right_number = Number(right);\n          return left !== right_number ? left < right_number ? -1 : 1 : 0;\n        }\n        case \"number\": {\n          return left !== right ? left < right ? -1 : 1 : 0;\n        }\n        case \"object\": {\n          if (Money.isMoney(right))\n            return Money.cmp(left.toString(), right);\n        }\n      }\n    } break;\n    case \"bigint\": {\n      switch (typeof right) {\n        case \"bigint\": {\n          return left !== right ? left < right ? -1 : 1 : 0;\n        }\n        case \"number\": {\n          const left_number = Number(left);\n          return left_number !== right ? left_number < right ? -1 : 1 : 0;\n        }\n        case \"object\": {\n          if (Money.isMoney(right)) {\n            return Money.cmp(left.toString(), right);\n          }\n        }\n      }\n    } break;\n    case \"string\": {\n      if (typeof right === \"string\")\n        return left === right ? 0 : left < right ? -1 : 1;\n    } break;\n    case \"object\": {\n      if (Money.isMoney(left)) {\n        switch (typeof right) {\n          case \"number\":\n          case \"bigint\":\n            return Money.cmp(left, right.toString());\n          case \"object\": {\n            if (right === null) {\n              return 1;\n            } else if (Money.isMoney(right))\n              return Money.cmp(left, right);\n          }\n        }\n      } else if (isDate(left)) {\n        if (isTemporalInstant(right)) {\n          const left_value = Number(left);\n          const right_value = right.epochMilliseconds;\n          return left_value !== right_value ? left_value < right_value ? -1 : 1 : 0;\n        } else if (isDate(right)) {\n          const left_value = Number(left);\n          const right_value = Number(right);\n          return left_value !== right_value ? left_value < right_value ? -1 : 1 : 0;\n        }\n      } else if (isUInt8Array(left) && isUInt8Array(right)) {\n        const compareLength = Math.min(left.length, right.length);\n        for (let i = 0; i < compareLength; i++) {\n          if (left[i] !== right[i])\n            return left[i] < right[i] ? -1 : 1;\n        }\n        return left.length !== right.length ? left.length < right.length ? -1 : 1 : 0;\n      } else if (isTemporalInstant(left)) {\n        if (isDate(right)) {\n          const left_value = left.epochMilliseconds;\n          const right_value = Number(right);\n          return left_value !== right_value ? left_value < right_value ? -1 : 1 : 0;\n        } else if (isTemporalInstant(right)) {\n          const left_value = left.epochMilliseconds;\n          const right_value = right.epochMilliseconds;\n          return left_value !== right_value ? left_value < right_value ? -1 : 1 : 0;\n        }\n      } else if (isTemporalPlainDate(left) && isTemporalPlainDate(right)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we're not loading Temporal types when packaging @webhare/std separately\n        return (globalThis as any).Temporal.PlainDate.compare(left, right);\n      } else if (isTemporalPlainTime(left) && isTemporalPlainTime(right)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we're not loading Temporal types when packaging @webhare/std separately\n        return (globalThis as any).Temporal.PlainTime.compare(left, right);\n      } else if (isTemporalZonedDateTime(left) && isTemporalZonedDateTime(right)) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we're not loading Temporal types when packaging @webhare/std separately\n        return (globalThis as any).Temporal.ZonedDateTime.compare(left, right);\n      }\n    } break;\n  }\n  throw new Error(`Cannot compare a ${stdTypeOf(left)} with a ${stdTypeOf(right)}`);\n}\n\n/** Returns all property keys of an object type whose value is comparable */\ntype ComparableFields<E extends object, K extends keyof E = keyof E> = K extends keyof E ? E[K] extends ComparableType ? K : never : never;\n\n/** Type of array elements for keys in `compareProperties` */\ntype ComparePropertiesArrayElement<E extends object> = ComparableFields<E> | [ComparableFields<E>, \"asc\" | \"desc\"];\n\n/** All possible types of object keys */\ntype AnyKey = string | symbol | number;\n\n/** Extracts the property name from an array element of CompareProperties */\ntype GetPropertyFromComparePropertiesArrayElement<T> = T extends AnyKey ? T : T extends [infer A, \"asc\" | \"desc\"] ? A : never;\n\n/** Get the list of properties referenced in the `compareProperties` keys list */\ntype GetPropertiesFromComparePropertiesKeys<K extends AnyKey | Array<AnyKey | [AnyKey, \"asc\" | \"desc\"]>> = K extends AnyKey ? K : K extends Array<infer T> ? GetPropertyFromComparePropertiesArrayElement<T> : never;\n\n/** Get all proper prefixes of a tuple, excluding the empty tuple and the source tuple */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype TuplePrefixes<K extends AnyKey | [...any[]]> = K extends [any] ? never : K extends [infer A, ...infer B] ? [A] | [A, ...TuplePrefixes<B>] : never;\n\n/** Template for possible keys value (needed to make TS understand that a tuple prefix of the keys is also a valid keys list */\ntype PossibleFields<E extends object> = ComparableFields<E> | [ComparePropertiesArrayElement<E>, ...Array<ComparePropertiesArrayElement<E>>];\n\n\nexport function compareProperties<const K extends ComparableFields<E> | [...Array<ComparePropertiesArrayElement<E>>], E extends object = Record<GetPropertiesFromComparePropertiesKeys<K>, ComparableType>>(fields: K) {\n  const compareList = (Array.isArray(fields) ? fields : [fields]).map((field): [keyof E, 1 | -1] => Array.isArray(field) ? [field[0], field[1] === \"desc\" ? -1 : 1] : [field, 1]);\n  const retval: (lhs: E, rhs: E) => number = (a, b) => {\n    for (const [field, negate] of compareList) {\n      if (a[field] === undefined || b[field] === undefined)\n        throw new Error(`Property '${String(field)}' does not exist`);\n      const res = negate * compare(a[field] as ComparableType, b[field] as ComparableType);\n      if (res)\n        return res;\n    }\n    return 0;\n  };\n  return Object.assign(retval, {\n    partialCompare: <T extends TuplePrefixes<K> & PossibleFields<E>>(partialFields: T) => compareProperties<T, E>(partialFields)\n  });\n}\n","import { stdTypeOf } from \"./quacks.ts\";\nimport { Money } from \"./money.ts\";\n\nexport type WildcardTypes = \"?*\";\n\n/** Encode string for use in a regexp\n * @param text - Text to encode\n * @param options - Options for encoding\n * @param options.wildcards - Type of wildcards to encode (defaults to none)\n * @returns Encoded for safe use in a RegExp\n*/\nexport function escapeRegExp(text: string, options?: { wildcards?: WildcardTypes }): string {\n  let mask = text.replaceAll(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&'); // $& means the whole matched string\n  if (options?.wildcards === \"?*\") {\n    mask = mask.replaceAll(\"\\\\*\", \".*\");\n    mask = mask.replaceAll(\"\\\\?\", \".\");\n  }\n  return mask;\n}\n\n/** Create a regular expression from one or more wildcard masks\n * @param masks - One or more masks with '?' and/or '*' wildcards\n * @returns Regular expression string\n*/\nexport function regExpFromWildcards(masks: string | string[], options?: { wildcards?: WildcardTypes; caseInsensitive?: boolean }): RegExp {\n  if (Array.isArray(masks) && masks.length === 0)\n    throw new Error(\"Empty mask list\");\n\n  const code = Array.isArray(masks)\n    ? `^(${masks.map(mask => escapeRegExp(mask, { wildcards: options?.wildcards || \"?*\" })).join('|')})$`\n    : `^${escapeRegExp(masks, { wildcards: options?.wildcards || \"?*\" })}$`;\n  return new RegExp(code, options?.caseInsensitive ? \"i\" : undefined);\n}\n\nfunction isHTMLUnrepresentableChar(curch: number) {\n  return (curch < 32 && curch !== 9 && curch !== 10 && curch !== 13)\n    || (curch >= 128 && curch <= 159);\n}\n\nfunction encodeEntities(str: string, html: boolean) {\n  let s = \"\";\n  for (const char of str) {\n    const curch = char.codePointAt(0);\n    if (curch === undefined || isHTMLUnrepresentableChar(curch))\n      continue;\n    if (curch >= 32 && curch < 128 && curch !== 38 && curch !== 60 && curch !== 62 && (html || curch !== 34 && curch !== 39)) {\n      s += String.fromCodePoint(curch);\n      continue;\n    }\n\n    switch (curch) {\n      case 10:\n        {\n          if (html) {\n            s += \"<br>\";\n            continue;\n          }\n          break;\n        }\n      case 13:\n        {\n          if (html)\n            continue;\n          break;\n        }\n      case 34:\n        {\n          s += \"&quot;\";\n          continue;\n        }\n      case 38:\n        {\n          s += \"&amp;\";\n          continue;\n        }\n      case 39:\n        {\n          s += \"&apos;\";\n          continue;\n        }\n      case 60:\n        {\n          s += \"&lt;\";\n          continue;\n        }\n      case 62:\n        {\n          s += \"&gt;\";\n          continue;\n        }\n    }\n\n    s += \"&#\" + curch + \";\";\n  }\n  return s;\n}\n\nfunction decodeEntities(str: string, html: boolean) {\n  if (html)\n    str = str.replace(/<br *\\/?>/g, \"\\n\");\n\n  str = str.replace(/&#(\\d+);/g, (_, dec) => String.fromCharCode(dec))\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&apos;/g, \"'\")\n    .replace(/&amp;/g, \"&\");\n\n  return str;\n}\n\nexport type StringEncodings = \"base64url\" | \"attribute\" | \"html\";\n\nexport function encodeString(str: string, encoding: StringEncodings): string {\n  if (encoding === \"base64url\")\n    return btoa(str).replaceAll(\"=\", \"\").replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\");\n  if (encoding === \"attribute\")\n    return encodeEntities(str, false);\n  if (encoding === \"html\")\n    return encodeEntities(str, true);\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n\nexport function decodeString(str: string, encoding: StringEncodings): string {\n  if (encoding === \"base64url\")\n    return atob(str.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\"));\n  if (encoding === \"attribute\")\n    return decodeEntities(str, false);\n  if (encoding === \"html\")\n    return decodeEntities(str, true);\n\n  throw new Error(`Invalid encoding '${encoding}'`);\n}\n\ntype JSONReplacerArgument = ((this: unknown, key: string, value: unknown) => unknown) | undefined;\n\nexport interface StringifyOptions {\n  replacer?: JSONReplacerArgument;\n  space?: string | number;\n  stable?: boolean;\n  ///Encode with types (preserve Money, Date, BigInt). Needs std.parseTyped\n  typed?: boolean;\n  ///What to target: string (like JSON.stringify), script (escapes '/') or attribute (escapes '/' and applies attribute encoding)\n  target?: \"string\" | \"script\" | \"attribute\";\n}\n\n/** Improved JSON encoder\n * @param arg - Object to encode\n * @param options - Encoding options\n*/\nexport function stringify(arg: unknown, options?: StringifyOptions) {\n  const usereplacer: JSONReplacerArgument = options?.stable || options?.typed ? (function (this: unknown, key: string, value: unknown) {\n    if (options.typed) {\n      const origvalue = (this as Record<string, unknown>)[key]; //We can't use 'value' as .toJSON() will already have been invoked\n      const type = stdTypeOf(origvalue);\n      switch (type) {\n        case \"function\":\n          throw new Error(`Cannot stringify property '${key}' of type \"${type}'`);\n        case \"Date\":\n          value = { \"$stdType\": \"Date\", date: (origvalue as Date).toISOString() };\n          break;\n        case \"Money\":\n        case \"bigint\":\n        case \"Instant\":\n        case \"PlainDate\":\n        case \"PlainTime\":\n        case \"PlainDateTime\":\n        case \"ZonedDateTime\":\n          value = { \"$stdType\": type, [type.toLowerCase()]: (origvalue as { toString: () => string }).toString() };\n          break;\n        case \"object\":\n          if (\"$stdType\" in (origvalue as { \"$stdType\": string }))\n            throw new Error(`Cannot encode objects with already embedded '$stdType's`);\n        //fallthrough\n      }\n    }\n    if (options.stable && value && typeof value === \"object\" && !Array.isArray(value))\n      value = Object.fromEntries(Object.entries(value).sort((lhs, rhs) => lhs < rhs ? -1 : lhs === rhs ? 0 : 1));\n    if (options.replacer)\n      value = options.replacer.call(this, key, value);\n    return value;\n  }) : options?.replacer ?? undefined;\n\n  let result = JSON.stringify(arg, usereplacer, options?.space);\n  if (options?.target && [\"script\", \"attribute\"].includes(options.target)) {\n    result = result.replaceAll(\"/\", \"\\\\/\");\n    if (options.target === \"attribute\")\n      result = encodeEntities(result, false);\n  }\n  return result;\n}\n\n/** Decode JSON with types (Generated using stringify with typed:true ) */\nexport function parseTyped(input: string) {\n  return JSON.parse(input, (key, value) => {\n    switch (value?.[\"$stdType\"]) {\n      case \"Money\":\n        return new Money(value.money);\n      case \"Date\":\n        return new Date(value.date);\n      case \"bigint\":\n      case \"BigInt\": //pre wh5.7 spelling\n        return BigInt(value.bigint as string);\n      case \"Instant\":\n      case \"PlainDate\":\n      case \"PlainTime\":\n      case \"PlainDateTime\":\n      case \"ZonedDateTime\":\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we just assume/require you to have Temporal installed if you expect to receive/decode Temporal types. browsers should catch up eventually\n        if (!(globalThis as any).Temporal)\n          throw new Error(`Temporal is not available in this environment, cannot deserialize value of type Temporal.${value[\"$stdType\"]}. Load eg. @webhare/deps/temporal-polyfill to use Temporal types in browsers`);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we just assume/require you to have Temporal installed if you expect to receive/decode Temporal types. browsers should catch up eventually\n        return (globalThis as any).Temporal[value[\"$stdType\"]].from(value[value[\"$stdType\"].toLowerCase()]);\n      case undefined:\n        return value;\n      default:\n        throw new Error(`Unrecognized type '${value[\"$stdType\"]}'`);\n    }\n  });\n}\n\n/** Generate a slug from a (suggested) (file)name\n * @param text - Text to convert\n * @param options - Options for slugification\n * @param options.separator - Separator to use between words (defaults to '-')\n * @param options.keep - Set of characters to keep in addition to a-z0-9\n * @returns Slugified text or null if we couldn't generate anything reeadable\n */\nexport function slugify(text: string, { separator = \"-\", keep = \"\" }: {\n  separator?: string;\n  keep?: string;\n} = {}): string | null {\n  //This function mixes HS getSafeName with a few more modern approaches\n  const keepclass = `[^a-z0-9${escapeRegExp(keep)}]`;\n  text = text\n    .normalize('NFD')                   // split an accented letter in the base letter and the acent\n    // eslint-disable-next-line no-control-regex\n    .replaceAll(/[\\u0000-\\u001F]/g, '')\n    .replaceAll(/[\\u0300-\\u036f]/g, '')   // remove all previously split accents\n    .replaceAll(/ß/g, 'ss')               // german ss\n    .toLowerCase()\n    .replace(new RegExp(`^${keepclass}+`), \"\") //replace bad characters at the start\n    .replace(new RegExp(`${keepclass}+$`), \"\") //.. and end\n    .replaceAll(new RegExp(`${keepclass}+`, \"g\"), separator); // replace all non alphanumeric/space with a single dash\n\n  return text || null; //we return 'null' on purpose so callers realize we won't necessarily give them a string!\n}\n\n/** Check if an email address is valid in modern times (an emailcheck much closer to what a browser would do, with additional sanity checks. No attempt to allow all legacy styles supported by the RFCs but 99.9%+ sure to be an error if seen submitted in a form\n    @returns True if the email address appears to be a well-formed email address to a non-greybeard\n*/\nexport function isValidEmail(email: string): boolean {\n  if (email.length > 254) //TODO count bytes instead of characters\n    return false;\n\n  return /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]{1,64}@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*(?:\\.[a-zA-Z0-9-]{2,})$/.test(email);\n}\n\n/** Uppercases a string using the C-locale (so only the ASCII characters a-z are uppercased)\n * @param str - String to uppercase\n * @returns Uppercased string\n */\nexport function toCLocaleUppercase(str: string) {\n  return str.replaceAll(/[a-z]+/g, part => part.toUpperCase());\n}\n\n/** Lowercases a string using the C-locale (so only the ASCII characters A-Z are lowercased)\n * @param str - String to lowercase\n * @returns Lowercased string\n */\nexport function toCLocaleLowercase(str: string) {\n  return str.replaceAll(/[A-Z]+/g, part => part.toLowerCase());\n}\n\n/** Calculate the levenshtein distance between two strings */\nexport function levenshteinDistance(a: string, b: string): number {\n  /* calculateLevenshteinDistance is adopted from https://github.com/gustf/js-levenshtein/blob/master/index.js, licensed MIT © Gustaf Andersson\n    Picked over fastest-levenshtein because a permanent 256KB memory area for a bit more speed doesn't seem worth it\n  */\n  function _min(d0: number, d1: number, d2: number, bx: number, ay: number) {\n    return d0 < d1 || d2 < d1\n      ? d0 > d2\n        ? d2 + 1\n        : d0 + 1\n      : bx === ay\n        ? d1\n        : d1 + 1;\n  }\n\n  if (a === b) {\n    return 0;\n  }\n\n  if (a.length > b.length) {\n    const tmp = a;\n    a = b;\n    b = tmp;\n  }\n\n  let la = a.length;\n  let lb = b.length;\n\n  while (la > 0 && (a.charCodeAt(la - 1) === b.charCodeAt(lb - 1))) {\n    la--;\n    lb--;\n  }\n\n  let offset = 0;\n\n  while (offset < la && (a.charCodeAt(offset) === b.charCodeAt(offset))) {\n    offset++;\n  }\n\n  la -= offset;\n  lb -= offset;\n\n  if (la === 0 || lb < 3) {\n    return lb;\n  }\n\n  let x = 0;\n  let y, d0, d1, d2, d3, dd = 0, dy, ay, bx0, bx1, bx2, bx3;\n\n  const vector: number[] = [];\n\n  for (y = 0; y < la; y++) {\n    vector.push(y + 1);\n    vector.push(a.charCodeAt(offset + y));\n  }\n\n  const len = vector.length - 1;\n\n  for (; x < lb - 3;) {\n    bx0 = b.charCodeAt(offset + (d0 = x));\n    bx1 = b.charCodeAt(offset + (d1 = x + 1));\n    bx2 = b.charCodeAt(offset + (d2 = x + 2));\n    bx3 = b.charCodeAt(offset + (d3 = x + 3));\n    dd = (x += 4);\n    for (y = 0; y < len; y += 2) {\n      dy = vector[y];\n      ay = vector[y + 1];\n      d0 = _min(dy, d0, d1, bx0, ay);\n      d1 = _min(d0, d1, d2, bx1, ay);\n      d2 = _min(d1, d2, d3, bx2, ay);\n      dd = _min(d2, d3, dd, bx3, ay);\n      vector[y] = dd;\n      d3 = d2;\n      d2 = d1;\n      d1 = d0;\n      d0 = dy;\n    }\n  }\n\n  for (; x < lb;) {\n    bx0 = b.charCodeAt(offset + (d0 = x));\n    dd = ++x;\n    for (y = 0; y < len; y += 2) {\n      dy = vector[y];\n      vector[y] = dd = _min(dy, d0, dd, bx0, vector[y + 1]);\n      d0 = dy;\n    }\n  }\n\n  return dd;\n}\n\n/** Return the length of the string in bytes when UTF-8 encoded */\nexport function getUTF8Length(str: string) {\n  return new TextEncoder().encode(str).length;\n}\n\n/** Truncate the string so it's at most len UTF-8 bytes long */\nexport function limitUTF8Length(str: string, len: number) {\n  // TextEncoder.encodeInto writes into the given array until there's no more room to add more valid UTF-8 sequences from the\n  // source. We can use this property to limit the number of bytes by creating an array that has room for at most the given\n  // number of bytes.\n  const utf8array = new Uint8Array(len);\n  // This function returns the actual number of bytes written to the array\n  const { written } = new TextEncoder().encodeInto(str, utf8array);\n  // Decode only the actually written bytes\n  return new TextDecoder().decode(utf8array.subarray(0, written));\n}\n\n/** Update the search parameters in a URL\n * @param inUrl - URL to update\n * @param updates - Updates to apply, use 'null' to delete a variable\n * @returns Updated URL\n */\nexport function updateURL(inUrl: string | URL, updates: Record<string, string | null>): URL {\n  const u = new URL(inUrl);\n  for (const [k, v] of Object.entries(updates)) {\n    if (v === null) {\n      u.searchParams.delete(k);\n    } else {\n      u.searchParams.set(k, v);\n    }\n  }\n  return u;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any -- Cannot specify this without using any */\n\nexport interface EmplaceHandler<ValueType> {\n  insert?: () => ValueType;\n  update?: (current: ValueType) => ValueType;\n}\n\nfunction binarySearchImpl<A, K>(compareFn: (element: A, key: K) => number, contents: A[], searchfor: K, upper_bound: boolean): { present: boolean; index: number } {\n  let first = 0;\n  let len = contents.length;\n  let present = false;\n\n  const cmpbound = upper_bound ? 1 : 0;\n  let unsorted_cmp = 0; // if this is non-0 and cmp is this value, we have an unsorted list\n  while (len > 0) {\n    const half = Math.floor(len / 2);\n    const middle = first + half;\n    const cmp = compareFn(contents[middle], searchfor);\n    if (cmp === 0) {\n      present = true;\n      unsorted_cmp = upper_bound ? -1 : 1;\n    } else if (cmp === unsorted_cmp)\n      throw new Error(`The provided array was not properly sorted!`);\n\n    if (cmp < cmpbound) {\n      first = middle + 1;\n      len -= half;\n      --len;\n    } else {\n      len = half;\n    }\n  }\n  return { present, index: first };\n}\n\n//emplace is based on https://github.com/tc39/proposal-upsert (a Map.prototype.emplace)\n/** Place a value into a Map\n * @param map - The map to place the value into\n * @param key - The key to add/replace\n * @param handler - Callbacks for inserting or updating the value\n * @returns The value that was placed into the map.\n * @throws If the key is not found and no insert handler is provided\n */\nexport function emplace<T extends Map<any, any> | WeakMap<any, any>>(\n  map: T,\n  key: T extends Map<infer K, any> ? K : T extends WeakMap<infer K, any> ? K : never,\n  handler?: T extends Map<any, infer V> ? EmplaceHandler<V> : T extends WeakMap<any, infer V> ? EmplaceHandler<V> : never):\n  T extends Map<any, infer V> ? V : T extends WeakMap<any, infer V> ? V : never {\n  let current = map.get(key);\n  if (current !== undefined) {\n    if (handler?.update) {\n      current = handler.update(current);\n      map.set(key, current);\n    }\n    return current;\n  }\n\n  if (!handler?.insert)\n    throw new Error(\"Key not found and no insert handler provided\");\n\n  const setvalue = handler.insert();\n  map.set(key, setvalue);\n  return setvalue;\n}\n\n// the `| keyof X` is needed to be able to use a `keyof X` type as key parameter in DistributedPick or DistributedOmit in generics\nexport type DistributedKeys<X extends object> = (X extends object ? keyof X : never) | keyof X;\n\n/** Applies Pick to all types in a union. Allows all keys that are present in any object in the union. Warning: You might not be\n    able to use all keys of the union if TypeScript has narrowed the union to a specific type. Eg:\n```typescript\ntype A = { x: number; t: \"a\"; a: number } | { x: number; t: \"b\"; b: number };\nconst a: A = { t: \"a\", a: 1 };\nconst b = pick(a, [\"t\", \"a\", \"b\"]); // No overload matches this call. <snip> Type '\"b\"' is not assignable to type '\"a\" | \"t\" | \"d\"'.\n```\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to return\n    @returns Type with only the specified keys (distributed over the union if present)\n*/\nexport type DistributedPick<X extends object, Y extends DistributedKeys<X>> = X extends object ? Pick<X, keyof X & Y> : never;\n\n/** Applies Omit to all types in a union. Allows all keys that are not present in any object in the union. Warning: You might not be\n    able to use all keys of the union if TypeScript has narrowed the union to a specific type. Eg:\n```typescript\ntype A = { x: number; t: \"a\"; a: number } | { x: number; t: \"b\"; b: number };\nconst a: A = { t: \"a\", a: 1 };\nconst b = omit(a, [\"b\"]); // No overload matches this call. <snip> Type '\"b\"' is not assignable to type '\"a\" | \"t\" | \"d\"'.\n```\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to leave out\n    @returns Type with only the specified keys left out (distributed over the union if present)\n*/\nexport type DistributedOmit<X extends object, Y extends DistributedKeys<X>> = X extends object ? Omit<X, keyof X & Y> : never;\n\n/** Returns an object with a selection of properties\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to return\n    @param obj - Object to pick properties out of\n    @param keys - Names of the properties to pick\n    @returns Resulting object\n*/\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(obj: T, keys: readonly K[]): DistributedPick<T, K>;\n\n/** Returns an array with a selection of properties\n    @typeParam T - Type of the supplied array\n    @typeParam K - Type of the property keys to return\n    @param arr - Array to pick properties out of\n    @param keys - Names of the properties to pick\n    @returns Resulting array\n*/\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(arr: T[], keys: readonly K[]): Array<DistributedPick<T, K>>;\n\nexport function pick<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(value: T | T[], keys: readonly K[]): DistributedPick<T, K> | Array<DistributedPick<T, K>> {\n  if (Array.isArray(value))\n    return value.map((elt: T) => pick(elt, keys));\n  const ret = {} as T;\n  keys.forEach((key: K) => {\n    if (key in value)\n      ret[key] = value[key];\n  });\n  return ret as object as DistributedPick<T, K>;\n}\n\n/** Returns an object with a selection of properties left out\n    @typeParam T - Type of the supplied object\n    @typeParam K - Type of the property keys to leave out\n    @param obj - Object to leave properties out of\n    @param keys - Names of the properties to remove\n    @returns Resulting object\n*/\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(obj: T, keys: readonly K[]): DistributedOmit<T, K>;\n\n/** Returns an array with a selection of properties left out\n    @typeParam T - Type of the supplied array\n    @typeParam K - Type of the property keys to leave out\n    @param arr - Array to leave properties out of\n    @param keys - Names of the properties to leave out\n    @returns Resulting array\n*/\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(arr: T[], keys: readonly K[]): Array<DistributedOmit<T, K>>;\n\nexport function omit<T extends object, K extends string & NoInfer<DistributedKeys<T>>>(value: T | T[], keys: readonly K[]): DistributedOmit<T, K> | Array<DistributedOmit<T, K>> {\n  if (Array.isArray(value))\n    return value.map((elt: T) => omit(elt, keys));\n  const ret = {} as T;\n  for (const [key, val] of Object.entries(value)) {\n    if (!keys.includes(key as K))\n      ret[key as K] = val;\n  }\n  return ret as object as DistributedOmit<T, K>;\n}\n\n/** Shuffle an array in-place\n * @param array - Array to shuffle\n * @returns The shuffled array\n*/\nexport function shuffle<T>(array: T[]): T[] {\n  for (let i = array.length - 1; i > 0; i--) {\n    const j = Math.floor(Math.random() * (i + 1));\n    [array[i], array[j]] = [array[j], array[i]];\n  }\n  return array;\n}\n\n/** Returns (and TypeScript-asserts) that the specified function is truthy. Handy for adjusting the type of an array when\n * filtering out falsy values\n * @example\n * const myarray: Array&lt;number | null&gt; = [0, null];\n * const filtered: number[] = myarray.filter(isTruthy);\n **/\nexport function isTruthy<T>(a: T): a is (T & {}) {\n  return Boolean(a);\n}\n\n/** Append to array, without overflowing the stack (eg V8 overflows at more than 32K entries)\n * @param array - Array to append to\n * @param values - Values to append\n*/\nexport function appendToArray<T>(array: T[], values: ReadonlyArray<NoInfer<T>>): void {\n  if (values.length < 1000)\n    array.push(...values); //push should be safe enough\n  else for (const value of values) //performance wise this appears just as fast as tricks with pushing blocks of slices\n    array.push(value);\n\n  //not returning the original array to make it clear we're not creating a new one\n}\n\ntype TypedEntriesInternal<T extends object, K extends keyof T> = K extends keyof T ? [K, T[K]] : never;\n\n/** Returns a union of [ key, value ] types for an object */\nexport type TypedEntries<T extends object> = T extends object ? TypedEntriesInternal<T, keyof T & string> : never;\n\n/** Returns an array of key/values of the enumerable own properties of an object, with exact types. Use when\n * no extra properties are expected on the object. Exists because Object.entries returns always string as key type.\n * @param obj - Object that contains the properties and methods\n */\nexport function typedEntries<T extends object>(obj: T): Array<TypedEntries<T>> {\n  return Object.entries(obj) as Array<TypedEntries<T>>;\n}\n\n/** Returns an array of keys of the enumerable own properties of an object, with exact types. Use when\n * no extra properties are expected on the object. Exists because Object.keys returns always string as key type.\n * @param obj - Object that contains the properties and methods\n */\nexport function typedKeys<T extends object>(obj: T): Array<keyof T & string> {\n  return Object.keys(obj) as Array<keyof T & string>;\n}\n\n/** Given a union of [key, value] types, returns the object constructed from those pairs. Exists because\n *  Object.fromEntries does not take the type of the keys and values into account.\n * @typeParam T - Union of [key, value] pairs\n */\nexport type TypedFromEntries<T extends [string, unknown]> = { [C in T as C[0]]: C[1] };\n\n/** Returns an object from an iterable of [key, value] pairs, with exact types. Exists because Object.fromEntries\n * doesn't take the type of the keys and values into account.\n * @param entries - Iterable of [key, value] pairs\n * @returns An object with the same keys and values as the input\n */\nexport function typedFromEntries<T extends [string, unknown]>(entries: Iterable<T>): TypedFromEntries<T> {\n  return Object.fromEntries(entries) as TypedFromEntries<T>;\n}\n\n\nexport class SortedMultiSet<V> {\n  private contents: V[] = [];\n  private compareFn;\n\n  constructor(compareFn: (lhs: V, rhs: V) => number, contents?: V[]) {\n    this.compareFn = compareFn;\n    if (contents)\n      this.addMultiple(contents);\n  }\n\n  get size() {\n    return this.contents.length;\n  }\n\n  at(index: number): V | undefined {\n    return this.contents.at(index);\n  }\n\n  add(value: V): number {\n    const pos = this.upperBound(value);\n    this.contents.splice(pos, 0, value);\n    return pos;\n  }\n\n  addMultiple(values: V[]): void {\n    for (const value of values) {\n      this.add(value);\n    }\n  }\n\n  delete(key: V): void {\n    const [start, limit] = this.range(key);\n    this.contents.splice(start, limit - start);\n  }\n\n  clear() {\n    this.contents.splice(0, this.contents.length);\n  }\n\n  lowerBound(key: Readonly<V>): { present: boolean; index: number } {\n    return binarySearchImpl(this.compareFn, this.contents, key, false);\n  }\n\n  upperBound(key: Readonly<V>): number {\n    return binarySearchImpl(this.compareFn, this.contents, key, true).index;\n  }\n\n  range(key: Readonly<V>): [number, number] {\n    return [this.lowerBound(key).index, this.upperBound(key)];\n  }\n\n  slice(start: number, limit: number): V[] {\n    return this.contents.slice(start, limit);\n  }\n\n  *#sliceIterator(start: number, limit: number): Generator<V, void> {\n    for (let idx = start; idx < limit; ++idx)\n      yield this.contents[idx];\n  }\n\n  sliceRange(key: Readonly<V>): V[] {\n    const [start, limit] = this.range(key);\n    return this.slice(start, limit);\n  }\n\n  rangeIterator(key: Readonly<V>): Iterable<V> {\n    const [start, limit] = this.range(key);\n    return this.#sliceIterator(start, limit);\n  }\n}\n\nexport class SortedMultiMap<K, V> {\n  private compareFn;\n  private contents: Array<[K, V]> = [];\n\n  constructor(compareFn: (lhs: K, rhs: K) => number, contents?: Array<[K, V]>) {\n    this.compareFn = (element: [K, V], key: K) => compareFn(element[0], key);\n    if (contents)\n      this.addMultiple(contents);\n  }\n\n  get size() {\n    return this.contents.length;\n  }\n\n  at(index: number): [K, V] | undefined {\n    return this.contents.at(index);\n  }\n\n  add(key: K, value: V): number {\n    const pos = this.upperBound(key);\n    this.contents.splice(pos, 0, [key, value]);\n    return pos;\n  }\n\n  addMultiple(values: Array<[K, V]>) {\n    for (const [key, value] of values) {\n      this.add(key, value);\n    }\n  }\n\n  delete(key: K): void {\n    const [start, limit] = this.range(key);\n    this.contents.splice(start, limit - start);\n  }\n\n  clear() {\n    this.contents.splice(0, this.contents.length);\n  }\n\n  lowerBound(key: Readonly<K>): { present: boolean; index: number } {\n    return binarySearchImpl(this.compareFn, this.contents, key, false);\n  }\n\n  upperBound(key: Readonly<K>): number {\n    return binarySearchImpl(this.compareFn, this.contents, key, true).index;\n  }\n\n  range(key: Readonly<K>): [number, number] {\n    return [this.lowerBound(key).index, this.upperBound(key)];\n  }\n\n  slice(start: number, limit: number): Array<[K, V]> {\n    return this.contents.slice(start, limit);\n  }\n\n  *#sliceIterator(start: number, limit: number): Generator<[K, V], void> {\n    for (let idx = start; idx < limit; ++idx)\n      yield this.contents[idx];\n  }\n\n  sliceRange(key: Readonly<K>): Array<[K, V]> {\n    const [start, limit] = this.range(key);\n    return this.slice(start, limit);\n  }\n\n  rangeIterator(key: Readonly<K>): Iterable<[K, V]> {\n    const [start, limit] = this.range(key);\n    return this.#sliceIterator(start, limit);\n  }\n}\n","const unlock = Symbol(\"unlock\");\n\n/** A mutex which is only visible in the current JavaScript VM\n\n    @example\n```ts\nconst mutex = new LocalMutex;\n\nusing lock = await mutex.lock();\nlock.release();\n\n// If you'll be relying on automatic release\nusing lock = await mutex.lock();\nvoid(lock);\n```\n\n*/\nexport class LocalMutex {\n  private locked = false;\n  private unlockList = new Array<() => void>;\n\n  /** Lock this mutex\n   * @returns Lock object. Use with `using` to ensure automatic unlock\n   */\n  async lock() {\n    if (this.locked) {\n      const defer = Promise.withResolvers<void>();\n      this.unlockList.push(() => defer.resolve());\n      await defer.promise;\n    } else {\n      this.locked = true;\n    }\n    return new LocalLock(this);\n  }\n\n  [unlock](): void {\n    if (this.unlockList.length > 0)\n      (this.unlockList.shift()!)(); //we're fair... unlock longest waiter\n    else\n      this.locked = false;\n  }\n}\n\n/** Instance of a LocalMutex lock */\nclass LocalLock implements Disposable {\n  private mutex: LocalMutex | null;\n\n  constructor(mutex: LocalMutex) {\n    this.mutex = mutex;\n  }\n  /** Explicitly release the lock\n   * @throws Error if the lock is already released\n  */\n  release() {\n    if (!this.mutex)\n      throw new Error(\"Lock already released\");\n\n    this.mutex[unlock]();\n    this.mutex = null;\n  }\n  [Symbol.dispose]() {\n    this.mutex?.[unlock]();\n  }\n}\n\nexport type { LocalLock };\n","/* frontend-config parses the wh-config object in the browser and mocks any missing data. @webhare/env does not actually expose this config, @webhare/frontend does\n   The frontend configuration is built in PageBuildRequest's 'frontendConfig' member */\n\nimport type { DTAPStage } from \"@webhare/env/src/concepts\";\nimport { debugFlags, initEnv } from \"@webhare/env/src/envbackend\";\nimport { getBrowserDebugFlags } from \"@webhare/env/src/init-browser\";\nimport { getLang } from \"@webhare/dompack/src/tree\";\nimport type { FrontendDataTypes } from \"@webhare/frontend\";\nimport { omit } from \"@webhare/std\";\n\n\n/** The format of the <script id=\"wh-config\"> object  */\nexport type WHConfigScriptData = {\n  //NOTE: existing frontend code doesn't expect site/obj to ever be null. not sure if 'object' provides the best interface or whether we need some sort of 'unknown but an existing object'\n  /** Page (targetobject) specific settings\n   *  @deprecated Use setFrontendData for type-safe settings\n  */\n  obj: { [key: string]: unknown };\n  /** Site specific settings\n   *  @deprecated Use setFrontendData for type-safe settings\n   */\n  site: { [key: string]: unknown };\n\n  /** Numeric server version number (eg 5.02.24 = 50224)\n   *  @deprecated Interpreting numbers (or version strings) is dangerous. Feature flags/testing or limiting your entire module to compatible versions is safer\n  */\n  server: number;\n  /** Root URL of this site */\n  siteRoot: string;\n} & {\n  ///Plugins may add keys at this level\n  [key in keyof FrontendDataTypes]?: FrontendDataTypes[key];\n};\n\nexport type WHConfigScriptData_FromServer = WHConfigScriptData & { dtapStage: DTAPStage };\n\n//names fields can still have when not yet republished\nexport interface WHConfigScriptData_OldPublishFields {\n  islive: boolean;\n  dtapstage: DTAPStage;\n  siteroot: string;\n}\n\n//fallback names with deprecation warnings\nexport interface WHConfigScriptData_LegacyFields {\n  /** @deprecated Use dtapStage in WH5.4+ */\n  islive: boolean;\n  /** @deprecated Use `dtapStage` from \"\\@webhare/env\"; in WH5.4+ */\n  dtapstage: DTAPStage;\n  /** @deprecated Use `getSiteRoot` from \"\\@webhare/frontend\"; in WH5.7+ */\n  siteroot: string;\n}\n\nlet config: WHConfigScriptData_FromServer | undefined;\nlet siteroot;\nlet dtapStage: DTAPStage = \"production\";\n\n//if document is undefined, we're serverside or in a worker\nconst whconfigel = typeof document !== \"undefined\" ? document.querySelector('script#wh-config') : null;\nif (whconfigel?.textContent) {\n  const parsedConfig: WHConfigScriptData_FromServer & WHConfigScriptData_OldPublishFields = JSON.parse(whconfigel.textContent);\n  config = omit(parsedConfig, [\"siteroot\", \"dtapstage\", \"islive\"]);\n\n  //Fallbacks for pages last published with WH5.3 *and* pages published from HareScript which still emit lowercase props\n  siteroot = parsedConfig.siteRoot ?? parsedConfig.siteroot!;\n  dtapStage = parsedConfig.dtapStage ?? parsedConfig.dtapstage;\n}\n\ninitEnv(dtapStage, '/');\n\nif (typeof location !== \"undefined\")\n  for (const flag of getBrowserDebugFlags('wh-debug'))\n    debugFlags[flag] = true;\n\n\n/** @deprecated frontendConfig has been deprecated. Switch to the getFrontendData system */\n// Make sure we have obj/site as some sort of object, to prevent crashes on naive 'if ($wh.config.obj.x)' tests'\nexport const frontendConfig: WHConfigScriptData & WHConfigScriptData_LegacyFields = {\n  server: 0,\n  ...config,\n  obj: config?.obj || {},\n  site: config?.site || {},\n  siteRoot: siteroot || \"\",\n  dtapstage: dtapStage,\n  islive: dtapStage === \"production\" || dtapStage === \"acceptance\",\n  siteroot: siteroot || \"\",\n};\n\nif (typeof document !== \"undefined\") {\n  //@ts-expect-error -- locale isn't supposed to exist - but some old code is still referring to it\n  frontendConfig.locale = getLang().tag;\n}\n\nif (dtapStage === \"development\") { //WH6.0: it's time to hard phase-out the old fields\n  for (const prop of [\"islive\", \"dtapstage\", \"siteroot\", \"locale\"] as const)\n    Object.defineProperty(frontendConfig, prop, {\n      get() { throw new Error(`frontendConfig.${prop} will be removed`); }\n    });\n}\n\n//NOTE: These APIs need to live in init.ts so eg gtm.ts can access us without triggering a CSS reset through frontend.ts. When frontend.ts stops auto-resetting we might move it back\n\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(type: Type, options: { allowMissing: true }): FrontendDataTypes[Type] | null;\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(type: Type, options?: { allowMissing: boolean }): FrontendDataTypes[Type];\n\n/** Get data exported by the response\n * @typeParam Type - The type of data to get\n * @param dataObject - The data object of data to get\n * @param allowMissing - If true, return null if the data object is missing. Otherwise throw an error\n * @example\n```\n  declare module \"@webhare/frontend\" {\n    interface FrontendDataTypes {\n      \"mymodule:type\": {\n        test: number;\n      };\n    }\n  }\n\n  const data = getFrontendData(\"mymodule:type\");\n```\n*/\nexport function getFrontendData<Type extends keyof FrontendDataTypes>(dataObject: Type, { allowMissing = false } = {}): FrontendDataTypes[Type] | null {\n  const retval = config?.[dataObject] as FrontendDataTypes[Type];\n  if (!retval)\n    if (allowMissing)\n      return null;\n    else\n      throw new Error(`Missing frontend data object: ${dataObject}`);\n\n  return retval;\n}\n\n/** Get the current site root\n *\n * @returns The site root URL (ending with a slash)\n*/\nexport function getSiteRoot() { //now an API to improve treeshaking\n  return frontendConfig.siteRoot;\n}\n","// Set up dispose symbols - https://github.com/evanw/esbuild/pull/3192 \"you'll need to polyfill Symbol.dispose if it's not present before you use it.\n\n//@ts-expect-error -- It's marked readonly\nSymbol.dispose ||= Symbol.for('Symbol.dispose');\n//@ts-expect-error -- It's marked readonly\nSymbol.asyncDispose ||= Symbol.for('Symbol.asyncDispose');\n\n// Set up promise resolvers (ES2024)\nPromise.withResolvers ||= function <T>(): PromiseWithResolvers<T> {\n  let resolve: (value: T | PromiseLike<T>) => void;\n  let reject: (reason: Error) => void;\n  const promise = new Promise<T>((_resolve, _reject) => { resolve = _resolve; reject = _reject; });\n  // @ts-expect-error `resolve` and `reject` are assigned synchronously, which isn't picked up by the TypeScript compiler (see\n  // https://github.com/Microsoft/TypeScript/issues/30053)\n  return { promise, resolve, reject };\n};\n\n// Polyfills for https://caniuse.com/?search=groupby - needed until we can assume safari 17.4 as global baseline\nif (!Map.groupBy)\n  Map.groupBy = function <Item, Key>(items: Iterable<Item>, callbackfn: (item: Item, idx: number) => Key): Map<Key, Item[]> {\n    const retval = new Map<Key, Item[]>;\n    let idx = 0;\n    for (const item of items) {\n      const key = callbackfn(item, idx++);\n      let list = retval.get(key);\n      if (!list)\n        retval.set(key, list = []);\n      list.push(item);\n    }\n    return retval;\n  };\n\nif (!Object.groupBy)\n  Object.groupBy = function <Item, Key extends string | number | symbol>(items: Iterable<Item>, callbackfn: (item: Item, idx: number) => Key): Partial<Record<Key, Item[]>> {\n    return Object.fromEntries(Map.groupBy(items, callbackfn).entries()) as Partial<Record<Key, Item[]>>;\n  };\n","/* eslint-disable @typescript-eslint/no-loop-func */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-this-alias */\n\n/* Iterator polyfills (https://caniuse.com/?search=iterator) - stage 4 ES but not in all browsers yet\n   Based on https://github.com/alkihis/iterator-polyfill/tree/master but we removed all the AsyncIterator\n   stuff as that's still stage 2 AND not implemented in TypeScript (as of 5.6)\n\n   We're ignoring a few linting/any issues as we really don't care to maintain this much\n   Fixed an issue with .some - reported as https://github.com/alkihis/iterator-polyfill/issues/6\n*/\n\n(function () {\n  // polyfill already applied / proposal implemented\n  if ('Iterator' in globalThis) {\n    return;\n  }\n\n  // Polyfill for Iterator\n  const IteratorPrototype = {};\n\n  const ArrayIteratorPrototype = Object.getPrototypeOf([][Symbol.iterator]());\n  const OriginalIteratorPrototype = Object.getPrototypeOf(ArrayIteratorPrototype);\n\n  Object.setPrototypeOf(OriginalIteratorPrototype, IteratorPrototype);\n\n  Object.defineProperties(IteratorPrototype, {\n    [Symbol.iterator]: {\n      value() {\n        return this;\n      }\n    },\n    map: {\n      *value<T, R>(callback: (value: T) => R): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = callback(value.value);\n          const next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    filter: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n          if (callback(real_value)) {\n            next_value = yield real_value;\n            value = it.next(next_value);\n          } else {\n            value = it.next(next_value);\n          }\n        }\n\n        return value.value;\n      },\n    },\n    find: {\n      value<T>(callback: (value: boolean) => T) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            return real_value;\n\n          value = it.next();\n        }\n      }\n    },\n    every: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (!callback(real_value))\n            return false;\n\n          value = it.next();\n        }\n\n        return true;\n      }\n    },\n    some: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value)) {\n            it.return();\n            return true;\n          }\n\n          value = it.next();\n        }\n\n        return false;\n      }\n    },\n    toArray: {\n      value(max_count = Infinity) {\n        const values = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (max_count <= 0)\n            return values;\n\n          values.push(real_value);\n\n          if (max_count !== Infinity)\n            max_count--;\n\n          value = it.next();\n        }\n\n        return values;\n      }\n    },\n    take: {\n      *value(limit: number): Generator<any, any, any> {\n        limit = Number(limit);\n        if (limit < 0)\n          throw new RangeError('Invalid limit.');\n\n        const it = this;\n        let value = it.next();\n        let remaining = limit;\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (remaining <= 0)\n            return;\n\n          next_value = yield real_value;\n          value = it.next(next_value);\n          remaining--;\n        }\n\n        return value.value;\n      },\n    },\n    drop: {\n      *value(limit: number): Generator<any, any, any> {\n        limit = Number(limit);\n        if (limit < 0)\n          throw new RangeError('Invalid limit.');\n\n        const it = this;\n        let value = it.next();\n        let remaining = limit;\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (remaining > 0) {\n            value = it.next(next_value);\n            remaining--;\n            continue;\n          }\n\n          next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    asIndexedPairs: {\n      *value(): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let index = 0;\n\n        while (!value.done) {\n          const real_value = value.value;\n          const next_value = yield [index, real_value];\n          value = it.next(next_value);\n          index++;\n        }\n\n        return value.value;\n      }\n    },\n    flatMap: {\n      *value<T, R extends object>(mapper: (value: T) => IterableIterator<R> | R): Generator<any, any, any> {\n        if (typeof mapper !== 'function') {\n          throw new TypeError('Mapper must be a function.');\n        }\n\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n          const mapped = mapper(real_value);\n\n          if (Symbol.iterator in mapped) {\n            next_value = yield* mapped[Symbol.iterator]();\n          } else {\n            next_value = yield mapped;\n          }\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      },\n    },\n    reduce: {\n      value<T, V>(reducer: (acc: V, value: T) => V, initial_value?: V) {\n        let acc = initial_value;\n\n        const it = this;\n        if (acc === undefined) {\n          acc = it.next().value;\n        }\n\n        let value = it.next();\n        while (!value.done) {\n          const real_value = value.value;\n\n          acc = reducer(acc!, real_value);\n\n          value = it.next();\n        }\n\n        return acc;\n      }\n    },\n    forEach: {\n      value<T>(callback: (value: T) => any) {\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          callback(real_value);\n\n          value = it.next();\n        }\n      }\n    },\n    [Symbol.toStringTag]: {\n      value: 'IteratorPrototype'\n    },\n\n    /* OUTSIDE PROPOSAL */\n    count: {\n      value() {\n        let count = 0;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          count++;\n          value = it.next();\n        }\n\n        return count;\n      },\n    },\n    join: {\n      value(string: string) {\n        let final = '';\n        let first = true;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (first) {\n            first = false;\n            final += real_value;\n          } else {\n            final += string + real_value;\n          }\n\n          value = it.next();\n        }\n\n        return final;\n      }\n    },\n    chain: {\n      *value<I>(...iterables: IterableIterator<I>[]) {\n        yield* this;\n\n        for (const it of iterables) {\n          yield* it;\n        }\n      }\n    },\n    zip: {\n      *value<T, O>(...others: IterableIterator<O>[]): Iterator<(T | O)[]> {\n        const it_array = [this, ...others].map((e: any) => Symbol.iterator in e ? e[Symbol.iterator]() : e as Iterator<T | O>);\n        let values = it_array.map(e => e.next());\n        let next_value: any;\n\n        while (values.every(e => !e.done)) {\n          next_value = yield values.map(e => e.value);\n          values = it_array.map(e => e.next(next_value));\n        }\n      },\n    },\n    takeWhile: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            next_value = yield real_value;\n          else\n            return;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    dropWhile: {\n      *value<T>(callback: (value: T) => boolean): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n        let finished = false;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (!finished && callback(real_value)) {\n            value = it.next(next_value);\n            continue;\n          }\n\n          finished = true;\n          next_value = yield real_value;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    fuse: {\n      *value(): Generator<any, any, any> {\n        const it = this;\n        let value = it.next();\n        let next_value;\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (real_value !== undefined && real_value !== null)\n            next_value = yield real_value;\n          else\n            return;\n\n          value = it.next(next_value);\n        }\n\n        return value.value;\n      }\n    },\n    partition: {\n      value<T>(callback: (value: T) => boolean) {\n        const partition1 = [], partition2 = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            partition1.push(real_value);\n          else\n            partition2.push(real_value);\n\n          value = it.next();\n        }\n\n        return [partition1, partition2];\n      },\n    },\n    findIndex: {\n      value<T>(callback: (value: T) => boolean) {\n        const it = this;\n        let i = 0;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (callback(real_value))\n            return i;\n\n          value = it.next();\n          i++;\n        }\n\n        return -1;\n      }\n    },\n    max: {\n      value() {\n        let max = -Infinity;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (max < real_value)\n            max = real_value;\n\n          value = it.next();\n        }\n\n        return max;\n      },\n    },\n    min: {\n      value() {\n        let min = Infinity;\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n\n          if (min > real_value)\n            min = real_value;\n\n          value = it.next();\n        }\n\n        return min;\n      },\n    },\n    cycle: {\n      *value(): Generator<any, any, any> {\n        const values = [];\n\n        const it = this;\n        let value = it.next();\n\n        while (!value.done) {\n          const real_value = value.value;\n          values.push(real_value);\n\n          const next_value = yield real_value;\n          value = it.next(next_value);\n        }\n\n        while (true) {\n          yield* values;\n        }\n      },\n    },\n  });\n\n  //iterator.from from https://github.com/rauschma/iterator-helpers-polyfill/\n\n  function isObject(value: unknown) {\n    if (value === null) return false;\n    const t = typeof value;\n    return t === 'object' || t === 'function';\n  }\n\n  function GetIteratorFlattenable<T>(obj: Record<symbol, any>): T {\n    if (!isObject(obj)) {\n      throw new TypeError();\n    }\n    const method = obj[Symbol.iterator];\n    let iterator = undefined;\n    if (typeof method !== 'function') {\n      iterator = obj;\n    } else {\n      iterator = method.call(obj);\n    }\n    if (!isObject(iterator)) {\n      throw new TypeError();\n    }\n    return iterator;\n  }\n\n  if (!('Iterator' in globalThis)) {\n    const Iterator = function Iterator() { };\n\n    Iterator.prototype = IteratorPrototype;\n\n    // @ts-expect-error We're still missing From in this poyfill\n    (globalThis).Iterator = Iterator;\n  }\n\n\n  //----- Static method -----\n  // Must be done after Iterator.prototype was set up,\n  // so that `extends Iterator` works below\n\n  class WrappedIterator<T, TReturn = any, TNext = undefined> extends Iterator<T, TReturn, TNext> {\n    #iterator;\n    constructor(iterator: Iterator<T, TReturn, TNext>) {\n      super();\n      this.#iterator = iterator;\n    }\n    override next(...args: [] | [TNext]): any {\n      return this.#iterator.next(...args);\n    }\n    // `async` helps with line (*)\n    override return(value?: TReturn | PromiseLike<TReturn>): any {\n      const returnMethod = this.#iterator.return;\n      if (returnMethod === undefined) {\n        return { done: true, value: value as any }; // (*)\n      }\n      return returnMethod.call(this.#iterator);\n    }\n  }\n\n  function Iterator_from<T>(value: any) {\n    const iterator = GetIteratorFlattenable<Iterator<T>>(value);\n    if (iterator instanceof Iterator) {\n      return iterator;\n    }\n    // `iterator´ does not support the new API – wrap it so that it does\n    return new WrappedIterator(iterator);\n  }\n\n  Object.defineProperty(\n    Iterator, 'from',\n    {\n      writable: true,\n      enumerable: false,\n      configurable: true,\n      value: Iterator_from,\n    }\n  );\n})();\n","type FormValueList = Array<{ name: string; value: string }>;\n\n/** A navigation instruction encapsulates the next step that a client has to take in eg. a login, payment or wizard flow.\n * Use navigateTo to execute a navigation in a browser\n*/\n\nexport type NavigateInstruction =\n  {\n    type: \"redirect\";\n    url: string;\n  } | {\n    type: \"form\";\n    form: {\n      action: string;\n      vars: FormValueList;\n      method?: \"POST\";\n    };\n  } | {\n    type: \"reload\";\n  } | {\n    type: \"postmessage\";\n    message: unknown;\n    target?: \"parent\" | \"opener\";\n  } | {\n    type: \"close\";\n  };\n\nfunction submitForm(action: string, values: FormValueList, method = \"POST\") {\n  const form = document.createElement(\"form\");\n  form.method = method;\n  form.action = action;\n  form.append(...values.map(item => {\n    const input = document.createElement(\"input\");\n    input.type = \"hidden\";\n    input.name = item.name;\n    input.value = item.value;\n    return input;\n  }));\n  document.body.appendChild(form);\n  form.submit();\n}\n\n/** Navigate to a specific URL (may be hookable by other scripts)\n* @param navigation - Target URL or NavigateInstruction\n*/\nexport function navigateTo(navigation: string | NavigateInstruction) {\n  if (typeof window === \"undefined\")\n    throw new Error(`navigateTo() is not available in this environment`);\n\n  if (typeof navigation === \"string\")\n    navigation = { type: \"redirect\", url: navigation };\n\n  switch (navigation.type) {\n    case \"redirect\":\n      {\n        location.href = navigation.url;\n      } break;\n\n    case \"form\":\n      {\n        submitForm(navigation.form.action, navigation.form.vars, navigation.form.method);\n      } break;\n\n    case \"reload\":\n      {\n        window.location.reload();\n      } break;\n\n    case \"postmessage\":\n      {\n        if (!navigation.target || navigation.target === \"parent\")\n          window.parent.postMessage(navigation.message, \"*\");\n        else if (navigation.target === \"opener\") {\n          window.opener.postMessage(navigation.message, \"*\");\n          window.close();\n        } else\n          throw Error(\"Unknown postmessage target '\" + navigation.target + \"' received\");\n      } break;\n\n    case \"close\":\n      {\n        window.close();\n      } break;\n\n    default:\n      throw new Error(`Unknown navigation type '${(navigation as { type: string }).type}'`);\n  }\n}\n","/* Manages the $wh global, an API for just-in-time debugging */\nimport type { DebugRegistry } from \"@webhare/env\";\nimport { debugFlags } from \"./envbackend\";\n\nlet debugRegFinalizer: FinalizationRegistry<{ type: keyof DebugRegistry; key: string }> | undefined;\n\nexport type WHGlobal = DebugRegistry & {\n  debugFlags: typeof debugFlags;\n  /** Global counter to avoid HMRs from duplicating IDs */\n  nextId: number;\n};\n\ndeclare global {\n  var $wh: WHGlobal;\n}\n\nglobalThis.$wh = {\n  debugFlags,\n  nextId: 1\n} satisfies WHGlobal;\n\nexport function addToDebugRegistry<T extends keyof DebugRegistry>(type: T, key: string, value: NonNullable<ReturnType<NonNullable<DebugRegistry[T]>[string][\"deref\"]>>) {\n  const debugRegistry = globalThis.$wh as unknown as DebugRegistry;\n  //@ts-ignore prevents '>   Type '{}' is not assignable to type 'never'. in jssdk builds, probably because noone yet extends DebugRegistry there\n  debugRegistry[type] ||= {};\n  debugRegFinalizer ||= new FinalizationRegistry(({ type: t, key: k }) => {\n    delete debugRegistry![t]?.[k];\n  });\n\n  if (debugRegistry[type][key])\n    console.error(`Debug registry key ${key} already exists, overwriting it`);\n\n  (debugRegistry[type] as Record<string, unknown>)[key] = new WeakRef(value);\n  debugRegFinalizer.register(value, { type, key });\n}\n","import type { FormControlElement } from \"@webhare/dompack\";\n\nexport const CustomEvent = globalThis.CustomEvent;\n/** Wrap an event to ensure it's target is a HTMLElement\n * @typeParam EventType - The expected event type\n * @typeParam CurrentTargetType - The type of the elemnt you're binding the event to. Optional, defaults to HTMLElement\n * @typeParam RelatedTargetType - The type of the elemnt you're binding the event to. Optional, defaults to HTMLElement\n*/\nexport type DocEvent<EventType extends Event, CurrentTargetType extends HTMLElement = HTMLElement, RelatedTargetType extends HTMLElement = HTMLElement> = EventType & {\n  target: HTMLElement;\n  currentTarget: CurrentTargetType;\n  relatedTarget: RelatedTargetType | null;\n};\n\nexport type DomEventOptions =\n  {\n    bubbles?: boolean;\n    cancelable?: boolean;\n    relatedTarget?: EventTarget;\n    detail?: object;\n  };\n\nexport function dispatchDomEvent(element: EventTarget, eventtype: string, options?: DomEventOptions) {\n  //see here https://developer.mozilla.org/en-US/docs/Web/Events whether an event is bubbles/cancelabel\n  options = {\n    bubbles: [\n      \"input\", \"change\", \"click\", \"contextmenu\", \"dblclick\",\n      \"reset\", \"submit\"\n    ].includes(eventtype),\n    cancelable: [\n      \"animationstart\", \"animationcancel\", \"animationend\", \"animationiteration\",\n      \"beforeunload\",\n      \"click\", \"contextmenu\", \"dblclick\",\n      \"reset\", \"submit\",\n      \"transitionstart\", \"transitioncancel\", \"transitionend\", \"transitionrun\"\n    ].includes(eventtype),\n    ...options\n  };\n\n  if (!element || !(element as Node).ownerDocument)\n    return true; //the element has left the dom... so there's no more bubbling. just drop it\n\n  //FIXME the load/scroll is buggy and we should be probably be using new Event (but an earlier attempt at that triggered quite a few test failures)\n  const createtype = /*[\"load\",\"scroll\"].includes(eventtype) === \"load\" ? \"UIEvents\" :*/[\"focus\", \"blur\", \"focusin\", \"focusout\"].includes(eventtype) ? \"FocusEvent\" : eventtype === \"click\" ? \"MouseEvents\" : \"HTMLEvents\";\n  //we verified its non-null ness above but TS doesn't really understand that\n  const evt = (element as Node).ownerDocument!.createEvent(createtype);\n  evt.initEvent(eventtype, options.bubbles, options.cancelable);\n  if (options.detail)\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we should just rewrite to new Event\n    (evt as any).detail = options.detail;\n  if (options.relatedTarget) //its a readonly prop, so redefine it\n    Object.defineProperty(evt, 'relatedTarget', { value: options.relatedTarget, writable: false });\n\n  //TODO: Should we keep this code?\n  // @ts-expect-error IScroll is a custom Window property set by IScroll\n  if (eventtype === 'click' && window.IScroll)\n    // @ts-expect-error _constructed is a custom Event property used by IScroll\n    evt._constructed = true; //ensure IScroll doesn't blindly cancel our synthetic clicks\n\n  return element.dispatchEvent(evt);\n}\n\n/** Fire the proper modified events (input and/or change) on the element after changing its value\n * @param element - Element to receive event\n * @param options - Event options\n * @deprecated Use changeValue so we can figure out the proper events to fire\n */\nexport function fireModifiedEvents(element: FormControlElement, options?: DomEventOptions) {\n  dispatchDomEvent(element, 'input', options);\n  dispatchDomEvent(element, 'change', options);\n}\n\n//manually fire 'onchange' events. needed for event simulation - DEPRECATED\n/**\n * @param element - Element to receive event\n * @param type - Event type\n * @param options - Event options\n * @deprecated Use dispatchDomEvent instead\n */\nexport function fireHTMLEvent(element: EventTarget, type: string, options?: DomEventOptions) {\n  return dispatchDomEvent(element, type, options);\n}\n\ntype CustomEventParams =\n  {\n    /** Whether this event should bubble up in the DOM */\n    bubbles: boolean;\n    /** Whether this event can be cancelled */\n    cancelable: boolean;\n    /** Custom event information */\n    detail?: unknown;\n    /** Handler to execute if the default isn't prevented by a event listener */\n    defaulthandler?: (evt: CustomEvent) => void;\n  };\n\n/** Fire a custom event\n    @param node - node to fire the event on\n    @param event - event type. You should add this event to the GlobalEventHandlersEventMap for validation in dispatchCustomEvent calls and addEventListener callbacks.\n    @param params - Event options\n    @returns true if the default wasn't prevented\n */\n\nexport function dispatchCustomEvent<K extends string>(\n  node: EventTarget,\n  event: K,\n  params: CustomEventParams & (K extends keyof GlobalEventHandlersEventMap ?\n    GlobalEventHandlersEventMap[K] extends CustomEvent ?\n    { detail: GlobalEventHandlersEventMap[K][\"detail\"] } : unknown : unknown)) {\n\n  if (!params)\n    throw new Error(`Missing dispatchCustomEvent params`);\n  ['bubbles', 'cancelable'].forEach(prop => {\n    if (!(prop in params))\n      throw new Error(`Missing '${prop}' in dispatchCustomEvent params`);\n  });\n\n  const evt = new CustomEvent(event, {\n    bubbles: params.bubbles,\n    cancelable: params.cancelable,\n    detail: params.detail\n  });\n  let defaultaction = true;\n  try {\n    if (!node.dispatchEvent(evt))\n      defaultaction = false; //defaultPrevented is unreliable on IE11, so double check\n  } finally {\n    if (!evt.defaultPrevented && params.defaulthandler && defaultaction) {\n      params.defaulthandler(evt);\n    }\n  }\n  return defaultaction && !evt.defaultPrevented;\n}\n\n/**\n     Change the value of a form element, and fire the correct events as if it were a user change\n *\n    @param element - Element to change\n    @param newvalue - New value\n */\nexport function changeValue(element: FormControlElement, newvalue: string | number | boolean) {\n  if (element.matches(`input[type=radio], input[type=checkbox]`)) {\n    if (Boolean((element as HTMLInputElement).checked) === Boolean(newvalue))\n      return;\n    (element as HTMLInputElement).checked = Boolean(newvalue);\n  } else {\n    //FIXME it's not really clean to assume that this element is changeable - throw for non input/select..\n    const asString = String(newvalue);\n    if ((element as HTMLInputElement).value === asString)\n      return;\n\n    (element as HTMLInputElement).value = String(newvalue);\n  }\n  dispatchDomEvent(element as EventTarget, 'input');\n  dispatchDomEvent(element as EventTarget, 'change');\n}\n\nlet keydata: { mapping: { [key: string]: string } };\n\nfunction initKeyMapping() {\n  keydata =\n  {\n    // Mapping from keyIdentifier/key to key. If not found, translate U+XXXX to the unicode char and return that.\n\n    // List of all current key mappings (and current inconsistencies\n    // at https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values\n    mapping:\n    {\n      \"Del\": \"Delete\", // IE/edge use 'Del' instead of 'Delete'\n      \"Esc\": \"Escape\", // IE/edge use 'Esc' instead of 'Escape'\n      \"OS\": \"Meta\", // Meta key is called OS on IE 9 and Firefox (tested v50)\n      \"Win\": \"Meta\", // Meta key is called Win on IE/Edge\n      \"Scroll\": \"ScrollLock\", // More IE/Edge, from tests\n      \"PrintScreen\": \"Print\", // More IE/Edge, from tests\n      \"MozHomeScreen\": \"GoHome\", // Prior to Firefox 37, the Home button generated a key code of \"Exit\". Starting in Firefox 37, the button generates the key code \"MozHomeScreen\".\n\n      // Internet Explorer 9 and Firefox 36 and earlier return \"Left\", \"Right\", \"Up\", and \"Down\" for the arrow keys, instead of \"ArrowLeft\", \"ArrowRight\", \"ArrowUp\", and \"ArrowDown\".\n      \"Left\": \"ArrowLeft\",\n      \"Right\": \"ArrowRight\",\n      \"Up\": \"ArrowUp\",\n      \"Down\": \"ArrowDown\",\n      // More IE and old Firefox stuff\n      \"Crsel\": \"CrSel\",\n      \"Exsel\": \"ExSel\",\n      \"Nonconvert\": \"NonConvert\",\n      // Internet Explorer 9 and Firefox 36 and earlier report \"Apps\" instead of \"ContextMenu\" for the context menu key.\n      \"Apps\": \"ContextMenu\",\n      // Internet Explorer 9 and Firefox 36 and earlier use \"MediaNextTrack\" and \"MediaPreviousTrack\" instead of \"MediaTrackNext\" and \"MediaTrackPrevious\".\n      \"MediaNextTrack\": \"MediaTrackNext\",\n      \"MediaPreviousTrack\": \"MediaTrackPrevious\",\n      // In Internet Explorer 9, and prior to Firefox 49, \"AudioVolumeUp\", \"AudioVolumeDown\", and \"AudioVolumeMute\" were \"VolumeUp\", \"VolumeDown\", and \"VolumeMute\".\n      // In Firefox 49 they were updated to match the latest specification. The old names are still used on Boot to Gecko.\n      \"VolumeUp\": \"AudioVolumeUp\",\n      \"VolumeDown\": \"AudioVolumeDown\",\n      \"VolumeMute\": \"AudioVolumeMute\",\n      // Firefox added proper support for the \"TV\" key in Firefox 37; before that, this key generated the key code \"Live\".\n      \"Live\": \"TV\",\n      // Internet Explorer 9 and Firefox 36 and earlier identify the zoom toggle button as \"Zoom\". Firefox 37 corrects this to \"ZoomToggle\".\n      \"Zoom\": \"ZoomToggle\",\n      // Internet Explorer 9 and Firefox 36 and earlier use \"SelectMedia\" instead of \"LaunchMediaPlayer\". Firefox 37 through Firefox 48 use \"MediaSelect\". Firefox 49 has been updated to match the latest specification, and to return \"LaunchMediaPlayer\".\n      \"SelectMedia\": \"LaunchMediaPlayer\",\n      \"MediaSelect\": \"LaunchMediaPlayer\",\n      // Google Chrome returns \"LaunchCalculator\" instead of \"LaunchApplication1\". See Chromium bug 612743 for more information.\n      // Google Chrome returns \"LaunchMyComputer\" instead of \"LaunchApplication2\". See Chromium bug 612743 for more information.\n      // (LaunchCalculator and LaunchMyComputer are valid too, so no translation)\n\n      // While older browsers used words like \"Add\", \"Decimal\", \"Multiply\", and so forth modern browsers identify these using the actual character (\"+\", \".\", \"*\", and so forth).\n      \"Multiply\": \"*\",\n      \"Add\": \"+\",\n      \"Divide\": \"/\",\n      \"Subtract\": \"-\",\n      \"Decimal\": \".\", // (mozilla Key_Values doc says depends on region)\n      \"Separator\": \".\", // (mozilla Key_Values doc says depends on region)\n\n      // keyIdenfier spec mapping of non-printable keys: https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#keyset-keyidentifiers\n      // Used in safari\n      \"U+0008\": \"Backspace\",\n      \"U+0009\": \"Tab\",\n      \"U+000D\": \"Enter\",\n      \"U+0018\": \"Cancel\",\n      \"U+001B\": \"Escape\",\n      \"U+007F\": \"Delete\",\n      \"U+0300\": \"DeadGrave\",\n      \"U+0301\": \"DeadEacute\",\n      \"U+0302\": \"DeadCircumflex\",\n      \"U+0303\": \"DeadTilde\",\n      \"U+0304\": \"DeadMacron\",\n      \"U+0306\": \"DeadBreve\",\n      \"U+0307\": \"DeadAboveDot\",\n      \"U+0308\": \"DeadUmlaut\",\n      \"U+030A\": \"DeadAboveRing\",\n      \"U+030B\": \"DeadDoubleacute\",\n      \"U+030C\": \"DeadCaron\",\n      \"U+0327\": \"DeadCedilla\",\n      \"U+0328\": \"DeadOgonek\",\n      \"U+0345\": \"DeadIota\",\n      \"U+3099\": \"DeadVoicedSound\",\n      \"U+309A\": \"DeadSemivoicedSound\",\n\n      // keyIdenfier spec mapping to characters: https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#keyset-keyidentifiers\n      \"Exclamation\": \"!\",\n      \"DoubleQuote\": \"\\\"\",\n      \"Hash\": \"#\",\n      \"Dollar\": \"$\",\n      \"Ampersand\": \"&\",\n      \"LeftParen\": \"(\",\n      \"RightParen\": \")\",\n      \"Asterisk\": \"*\",\n      \"Plus\": \"+\",\n      \"Percent\": \"%\",\n      \"Comma\": \",\",\n      \"HyphenMinus\": \"-\",\n      \"Period\": \".\",\n      \"Solidus\": \"/\",\n      \"Colon\": \":\",\n      \"Semicolon\": \";\",\n      \"LessThan\": \"<\",\n      \"Equals\": \"=\",\n      \"GreaterThan\": \">\",\n      \"QuestionMark\": \"?\",\n      \"At\": \"@\",\n      \"LeftSquareBracket\": \"[\",\n      \"Backslash\": \"\\\\\",\n      \"RightSquareBracket\": \"]\",\n      \"Circumflex\": \"^\",\n      \"Underscore\": \"_\",\n      \"Grave\": \"`\",\n      \"LeftCurlyBracket\": \"{\",\n      \"Pipe\": \"|\",\n      \"RightCurlyBracket\": \"}\",\n      \"Euro\": \"€\",\n      \"InvertedExclamation\": \"¡\",\n\n      // Safari fixes: viewed in local tests\n      \"U+0010\": \"ContextMenu\"\n    }\n  };\n}\n\nexport type NormalizedKeyboardEvent =\n  {\n    type: string;\n    target: EventTarget | null;\n    key: string;\n    code: string;\n    ctrlKey: boolean;\n    altKey: boolean;\n    location: number;\n    shiftKey: boolean;\n    metaKey: boolean;\n    repeat: boolean;\n    isComposing: boolean;\n  };\n\n/**\n     Returns normalized keyboard event properties, following the current W3C UI Events spec\n *\n    @param evt - Keyboard event\n    @returns Normalized keyboard event data\n */\nexport function normalizeKeyboardEventData(evt: KeyboardEvent): NormalizedKeyboardEvent {\n  // event.key is supported from chrome:51, edge, ff: 29, ie: 9, not in safari\n  // event.keyIdentifier in chrome 26-54, opera 15-41, safara: 5.1\n  // safari doesn't provide either in keypress events, use U+evt.keyCode (uppercase 4-byte hex)\n\n  let key = evt.key;\n  if (!keydata)\n    initKeyMapping();\n  if (keydata.mapping[key])\n    key = keydata.mapping[key];\n  else if (key.startsWith(\"U+\")) // U+xxxx code\n    key = String.fromCodePoint(parseInt(key.substring(2), 16));\n\n  // Seen in chrome 56.0.2924.76 on linux, numpad '.' without numlock returns key \"\\u0000\"\n  if (evt.key === \"\\u0000\" && evt.code === \"NumpadDecimal\")\n    key = \".\";\n\n  return (\n    {\n      type: evt.type,\n      target: evt.target,\n      key: key,\n      code: evt.code || \"Unidentified\",\n      ctrlKey: evt.ctrlKey,\n      altKey: evt.altKey,\n      location: evt.location,\n      shiftKey: evt.shiftKey,\n      metaKey: evt.metaKey,\n      repeat: evt.repeat,\n      isComposing: evt.isComposing\n    });\n}\n\n/**\n * Stop, fully, an event\n *\n * @param event - Event to stop\n */\nexport function stop(event: Event) {\n  event.preventDefault();\n  event.stopImmediatePropagation();\n}\n\n/** Add an event listener to HTMLElements inside a document (which allows us to ensure that 'target' is a HTMLElement for easier typings) */\nexport function addDocEventListener<CurrentTargetType extends HTMLElement, Type extends keyof HTMLElementEventMap>(node: CurrentTargetType, type: Type, listener: (this: CurrentTargetType, ev: DocEvent<HTMLElementEventMap[Type], CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void;\nexport function addDocEventListener<CurrentTargetType extends HTMLElement>(node: CurrentTargetType, type: string, listener: (this: CurrentTargetType, evt: DocEvent<Event, CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void;\n\nexport function addDocEventListener<CurrentTargetType extends HTMLElement>(node: CurrentTargetType, type: string, listener: (this: CurrentTargetType, evt: DocEvent<Event, CurrentTargetType>) => void | Promise<void>, options?: AddEventListenerOptions): void {\n  node.addEventListener(type, listener as EventListener, options);\n}\n","import { debugFlags } from '@webhare/env';\nimport * as domevents from '../../../modules/system/js/dompack/src/events';\nimport \"@webhare/tsrun/src/polyfills\";\n\nlet locallocks: BusyLock[] = [];\nlet modallocked = false;\nlet uiwatcher: NodeJS.Timeout | null = null;\nlet installedanticancelhandler = false;\n\nlet currentbusymodaldialog: HTMLDialogElement | null = null;\nlet currentbusymodaluserdialog: HTMLDialogElement | null = null;\nlet busymodalcontent: string | HTMLElement | HTMLDialogElement | undefined;\nlet mylockmgr: LockManager | undefined;\n\nexport type BusyModalEvent = CustomEvent<{ show: boolean }>;\n\n// As 'Lock' already exists on the Web (https://developer.mozilla.org/docs/Web/API/Lock) and it's seldom used just use a longer name. Available since WH 5.4\nexport interface UIBusyLock extends Disposable {\n  release(): void;\n  [Symbol.dispose](): void;\n}\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:busymodal\": BusyModalEvent;\n  }\n  interface Window {\n    __dompack_busylockmanager?: LockManager;\n  }\n\n  // __dompack_busylockmanager: LockManager | undefined;  //\n}\n\nfunction getLockmgr(): LockManager {\n  if (!mylockmgr) {\n    mylockmgr = getParentLockManager() || new LockManager;\n    if (typeof window !== \"undefined\")\n      window.__dompack_busylockmanager = mylockmgr;\n  }\n  return mylockmgr;\n}\n\nfunction anyModalLocks() {\n  return locallocks.some(l => l.modal);\n}\n\n/* scheduleCheckUIFree is invoked by release() or when waitUIFree is explicitly called. the call from release() should\n   be a 'fast' path. We schedule a full check for the next tick if there's a chance it might actually find a free UI */\nfunction scheduleCheckUIFree() {\n  if (!uiwatcher && locallocks.length === 0)\n    uiwatcher = setTimeout(() => checkUIFree(), 0);\n}\n\n/* check if the UI is actually free. if so, remove busymodals and resolve waitUIFrees for the benefit of testfw  */\nfunction checkUIFree() {\n  uiwatcher = null;\n\n  if (modallocked && !anyModalLocks()) { //did the last frame-level *modal* lock just get released?\n    modallocked = false;\n    toggleBusyModal(false);\n  }\n\n  if (locallocks.length === 0) {\n    const lockmgr = getLockmgr();\n    lockmgr.busyframes.delete(window); //we won't release our block in the lockmanager until we've had a chance to remove our modal layer\n    lockmgr.checkUIFree(); //to resolve any waitUIFrees. runs in the top-level frame. note that lockmgr cares about ALL ui locks, not just modals\n  }\n}\n\nfunction isDialogElement(el: unknown): boolean {\n  return typeof el === \"object\" && (el as HTMLElement).matches?.(\"dialog\") || false;\n}\n\nfunction checkCancelEvent(evt: Event) {\n  if (modallocked)\n    evt.preventDefault();\n}\n\nfunction toggleBusyModal(show: boolean) {\n  //'islock' is legacy non-camel version. TypeScript typing should help us transition (since 5.3). 'as' shuts up the warning TODO remove 'islock' and the 'as'\n  if (!domevents.dispatchCustomEvent(window, 'dompack:busymodal', { bubbles: true, cancelable: true, detail: { show: show, islock: show } as BusyModalEvent['detail'] }))\n    return; //cancelled!\n\n  if (!installedanticancelhandler) {\n    //capture cancel, as it doesn't bubble up\n    addEventListener(\"cancel\", evt => checkCancelEvent(evt), { capture: true });\n    installedanticancelhandler = true;\n  }\n\n  if (show) {\n    if (isDialogElement(busymodalcontent)) { //the user provided us with an element\n      currentbusymodaluserdialog = busymodalcontent as HTMLDialogElement;\n      currentbusymodaluserdialog.showModal();\n    } else if (busymodalcontent) { //we'll create our own dialog\n      const dialog = document.createElement('dialog');\n      const toembed = typeof busymodalcontent === \"string\" ? document.createTextNode(busymodalcontent) : busymodalcontent.cloneNode(true);\n      dialog.className = \"dompack-busydialog\";\n      dialog.role = \"status\";\n      dialog.ariaLive = \"off\";\n      dialog.append(toembed);\n      document.body.appendChild(dialog);\n      currentbusymodaldialog = dialog;\n      dialog.showModal();\n      return;\n    }\n\n    document.documentElement.classList.add(\"dompack--busymodal\");\n    return;\n  }\n\n  //hiding\n  document.documentElement.classList.remove(\"dompack--busymodal\");\n  if (currentbusymodaluserdialog)\n    currentbusymodaluserdialog.close();\n  if (currentbusymodaldialog) { //we added a dialog to the dom\n    currentbusymodaldialog.close();\n    document.body.removeChild(currentbusymodaldialog);\n    currentbusymodaldialog = null;\n  }\n}\n\nclass LockManager {\n  locks: BusyLock[];\n  busyframes: Set<Window> = new Set;\n  busycounter: number;\n  deferreduipromise: PromiseWithResolvers<boolean> | null;\n\n  //this object is not for external consumption\n  constructor() {\n    this.locks = [];\n    this.busycounter = 0;\n    this.deferreduipromise = null;\n  }\n  add(lock: BusyLock) {\n    this.locks.push(lock);\n    const returnvalue = this.busycounter++;\n    return returnvalue;\n  }\n  release(lock: BusyLock) {\n    const pos = this.locks.indexOf(lock);\n    if (pos === -1) {\n      if (debugFlags.bus) {\n        console.error(\"Duplicate release of busy lock #\" + lock.locknum);\n        console.log(\"Lock allocated:\");\n        console.log(lock.acquirestack);\n        console.log(\"Lock first released:\");\n        console.log(lock.releasestack);\n      }\n      throw new Error(\"Duplicate release of busy lock\");\n    }\n\n    this.locks.splice(pos, 1);\n  }\n  getNumLocks() {\n    return this.locks.length;\n  }\n  //used by child windows to schedule a check in *our* frame (eg before they themselves are unloaded)\n  scheduleCheckUIFree() {\n    scheduleCheckUIFree();\n  }\n  checkUIFree() {\n    if (this.locks.length === 0 && this.busyframes.size === 0 && this.deferreduipromise) {\n      this.deferreduipromise.resolve(true);\n      this.deferreduipromise = null;\n    }\n  }\n  waitUIFree() {\n    if (!this.deferreduipromise)\n      this.deferreduipromise = Promise.withResolvers();\n\n    scheduleCheckUIFree(); //ensures uiwait is released at next tick if no locks are present at all\n    return this.deferreduipromise.promise;\n  }\n  logLocks() {\n    this.locks.forEach(lock => console.log('[bus] lock #' + lock.locknum, lock.acquirestack, lock));\n    console.log(\"[bus] total \" + this.locks.length + \" locks\");\n  }\n  getLockIds() {\n    return this.locks.map(l => \"#\" + l.locknum).join(\", \");\n  }\n}\n\n/** Configure an (accessible) modal dialog\n * @param bmc - What to show in the dialog: either a text or DOM fragment to clone.\n *              If a <dialog> element is passed, this dialog will be used instead of creating a new one.\n */\nexport function setupBusyModal(bmc: NonNullable<typeof busymodalcontent>) {\n  busymodalcontent = bmc;\n}\n\ninterface LockOptions {\n  ///Whether this lock should enable a modality laayer\n  modal?: boolean;\n}\n\nclass BusyLock implements UIBusyLock {\n  modal: boolean;\n  locknum: number;\n  acquirestack: string | undefined;\n  releasestack: string | undefined;\n\n  constructor(options?: LockOptions) {\n    //legacy non-camel name is 'ismodal'\n    this.modal = options?.modal ?? (options as { ismodal?: boolean })?.ismodal ?? false;\n\n    const lockmgr = getLockmgr();\n    this.locknum = lockmgr.add(this);\n    lockmgr.busyframes.add(window);\n    locallocks.push(this);\n\n    if (this.modal && !modallocked) {\n      modallocked = true;\n      toggleBusyModal(true);\n    }\n\n    if (debugFlags.bus) {\n      this.acquirestack = (new Error).stack;\n      console.trace('[bus] Busy lock #' + this.locknum + ' taken. ' + lockmgr.getNumLocks() + \" locks active now: \" + lockmgr.getLockIds());\n    }\n  }\n\n  [Symbol.dispose]() {\n    if (debugFlags.bus)\n      this.releasestack = (new Error).stack;\n\n    const lockmgr = getLockmgr();\n    lockmgr.release(this);\n    const lockpos = locallocks.indexOf(this);\n    locallocks.splice(lockpos, 1);\n\n    if (debugFlags.bus) {\n      console.trace('[bus] Busy lock #' + this.locknum + ' released. ' + lockmgr.getNumLocks() + \" locks active now: \" + lockmgr.getLockIds());\n    }\n\n    scheduleCheckUIFree();\n  }\n\n  release() {\n    this[Symbol.dispose]();\n  }\n}\n\n/** Return a promise resolving as soon as the UI (any accessible frame) is free for at least one tick */\nexport function waitUIFree() {\n  return getLockmgr().waitUIFree();\n}\n\n/**\n     flag userinterface as busy. tests then know not to interact with the UI until the busy flag is released\n *\n    @param options - Options.<br>\n                   - modal: true/false - Whether the lock is a modal lock\n */\nexport function flagUIBusy(options?: LockOptions): UIBusyLock {\n  return new BusyLock(options);\n}\n\nexport function getUIBusyCounter() {\n  return getLockmgr().busycounter;\n}\n\nfunction getParentLockManager(): LockManager | null {\n  try { //we're accessing a parent window, so we may hit security exceptions\n    if (!(window.parent?.__dompack_busylockmanager))\n      return null;\n\n    //if we connected to a parent...  deregister our locks, eg. if parent navigated our frame away\n    window.addEventListener(\"pagehide\", () => {\n      if (debugFlags.bus)\n        console.log(\"[bus] Frame unloading, \" + locallocks.length + \" locks pending.\", locallocks.map(l => \"#\" + l.locknum).join(\", \"), locallocks);\n\n      //switch to local instance in case anyone still tries to touch these locks during unload\n      const lockmgr = getLockmgr();\n      const locallockmgr = new LockManager;\n      locallocks.forEach(lock => { lockmgr.release(lock); locallockmgr.add(lock); });\n      locallocks = [];\n\n      lockmgr.busyframes.delete(window); //explicitly remove us so we won't be waited upon\n      lockmgr.scheduleCheckUIFree();\n      mylockmgr = locallockmgr;\n    });\n\n    return window.parent.__dompack_busylockmanager;\n  } catch (e) {\n    return null;\n  }\n}\n","\n/* Regex to identify dimensionless style sttributes. copied from old version of preact/src/constants.js (MIT)\n   meant to capture:\n  { boxFlex:1, boxFlexGroup:1, columnCount:1, fillOpacity:1, flex:1, flexGrow:1,\n    flexPositive:1, flexShrink:1, flexNegative:1, fontWeight:1, lineClamp:1, lineHeight:1,\n    opacity:1, order:1, orphans:1, strokeOpacity:1, widows:1, zIndex:1, zoom:1\n*/\nconst IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;\n\nexport { qS, qSA } from '@webhare/dompack/src/tree.ts';\n\nfunction generateInsertList(nodes: Array<string | Node>) {\n  if (nodes.length === 1)\n    return typeof nodes[0] === 'string' ? document.createTextNode(nodes[0]) : nodes[0];\n\n  const frag = document.createDocumentFragment();\n  nodes.forEach(node => frag.appendChild(typeof node === 'string' ? document.createTextNode(node) : node));\n  return frag;\n}\n\n/** @deprecated Use node.matches() */\nexport function matches(node: Element, selector: string): boolean {\n  //only invoke 'matches' if it exists. it *should* but past versions of dompack.matches would check for it too (and thus not fail if you passed in a string instead of a Node)\n  return node.matches?.(selector);\n}\n/** @deprecated Use node.closest() */\nexport function closest(node: Element, selector: string) {\n  if (node.closest)\n    return node.closest(selector);\n  //TODO: Warn about out-of-date browser?\n  let testNode: Element | null = node;\n  for (; testNode && !matches(testNode, selector); testNode = testNode.parentElement)\n    /*iterate*/;\n  return testNode;\n}\n//implements contains. TODO we only really need this on IE11, which doesn't consider a text node a child, we can probably fall back to native elsewhere ?\n/** @deprecated Use node.contains() */\nexport function contains(ancestor: Node, child: Node) {\n  if (ancestor.contains)\n    return ancestor.contains(child);\n  //TODO: Warn about out-of-date browser?\n  for (let testNode: Node | null = child; testNode; testNode = testNode.parentNode)\n    if (testNode === ancestor)\n      return true;\n  return false;\n}\n//insert a range of nodes before a node: https://dom.spec.whatwg.org/#dom-childnode-before\n/** @deprecated Use node.before() */\nexport function before(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.before) {\n    node.before(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.insertBefore(generateInsertList(nodes), node);\n}\n//insert a range of nodes after a node: https://dom.spec.whatwg.org/#dom-childnode-after\n/** @deprecated Use node.after() */\nexport function after(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.after) {\n    node.after(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.insertBefore(generateInsertList(nodes), node.nextSibling);\n}\n//replace node with a set of nodes : https://dom.spec.whatwg.org/#dom-childnode-replacewith\n/** @deprecated Use node.replaceWith() */\nexport function replaceWith(node: ChildNode, ...nodes: Array<string | Node>) {\n  if (node.replaceWith) {\n    node.replaceWith(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.replaceChild(generateInsertList(nodes), node);\n}\n//remove node with a set of nodes : https://dom.spec.whatwg.org/#dom-childnode-remove\n/** @deprecated Use node.remove() */\nexport function remove(node: ChildNode) {\n  if (node.remove) {\n    node.remove();\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  if (node.parentNode)\n    node.parentNode.removeChild(node);\n}\n//insert nodes at start: https://dom.spec.whatwg.org/#dom-parentnode-prepend\n/** @deprecated Use node.prepend() */\nexport function prepend(node: ParentNode, ...nodes: Array<string | Node>) {\n  if (node.prepend) {\n    node.prepend(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  node.insertBefore(generateInsertList(nodes), node.firstChild);\n}\n//insert nodes at end: https://dom.spec.whatwg.org/#dom-parentnode-append\n/** @deprecated Use node.append() */\nexport function append(node: ParentNode, ...nodes: Array<string | Node>) {\n  if (node.append) {\n    node.append(...nodes);\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  node.appendChild(generateInsertList(nodes));\n}\n\n/**\n * Toggle a single class\n *\n * @param node - Node to modify\n * @param classname - Class to toggle\n * @param settoggle - true to enable, false to disable, undefined to toggle\n * @deprecated Just use classList.toggle on the node itself\n */\n/** @deprecated Use classList.toggle() */\nexport function toggleClass(node: Element, classname: string, settoggle?: boolean) {\n  if (arguments.length === 2) //in old dompack, 2 argument version toggled and 3 argument version toggled off. match that behavior\n    node.classList.toggle(classname);\n  else\n    node.classList.toggle(classname, settoggle);\n}\n\n/**\n     Toggle classes in a node\n *\n    @param node - Node which classes to toggle\n    @param toggles - Object, all keys will be added/removed based on the truthyness of their values\n */\nexport function toggleClasses(node: Element, toggles: { [key: string]: boolean }) {\n  if (typeof (toggles) !== \"object\")\n    throw new Error(\"Expected an object with keys as classnames\");\n  Object.keys(toggles).forEach(key => node.classList[toggles[key] ? \"add\" : \"remove\"](key));\n}\n\n/* remove the contents of an existing node */\n/** @deprecated Use node.replaceChildren() */\nexport function empty(node: Element) {\n  if (node.replaceChildren) {\n    node.replaceChildren();\n    return;\n  }\n  //TODO: Warn about out-of-date browser?\n  while (node.lastChild)\n    node.removeChild(node.lastChild);\n}\n\nexport function isDomReady() {\n  //ensure no domready events can run if there will never be a dom\n  return typeof document !== \"undefined\" && (document.readyState === \"interactive\" || document.readyState === \"complete\");\n}\n\n/* run the specified function 'on ready'. adds to DOMContentLoaded if dom is not ready yet. Exceptions/rejections from the ready handler will not be fatal to the rest of code execution */\nexport function onDomReady(callback: () => unknown | Promise<unknown>) {\n  if (isDomReady()) {\n    try {\n      void callback(); //Ignore unhandled rejections\n    } catch (e) { // We don't want our caller to 'stop' due to a domready exception as its usually the toplevel initialization code, so log the exception ourselves\n      void Promise.reject(new Error(\"Synchronous onDomReady handler failed\", { cause: e })); //Let it propagate as a standard unhandled rejection\n    }\n  } else\n    document.addEventListener(\"DOMContentLoaded\", () => void callback());\n}\n\n//parse JSON data, throw with more info on parse failure\nexport function getJSONAttribute<T>(node: Element, attributename: string): T | null {\n  try {\n    if (node.hasAttribute(attributename))\n      return JSON.parse(node.getAttribute(attributename) as string);\n  } catch (e) {\n    console.error(\"JSON parse failure on attribute '\" + attributename + \"' of node\", node);\n    throw e;\n  }\n  return null;\n}\n\n/**\n     Get the base URI of the current document. IE11 doesn't implement document.baseURI\n *\n    @param doc - Document to query. Defaults to window.document\n    @deprecated Use document.baseURI\n */\nexport function getBaseURI(doc: Document | undefined) {\n  if (!doc)\n    doc = window.document;\n  if (doc.baseURI)\n    return doc.baseURI;\n\n  const base = doc.querySelector('base');\n  if (base && base.href)\n    return base.href;\n  return doc.URL;\n}\n\n/**\n     Sets multiple styles on a node, automatically adding 'px' to numbers when appropriate\n    (can be used as replacement for Mootools .setStyles)\n *\n * @param node - Node to update\n * @param value - Styles to set\n */\nexport function setStyles(node: HTMLElement, value?: string | { [key: string]: string | number }) {\n  if (!value)\n    node.style.cssText = '';\n  else if (typeof value === 'string')\n    node.style.cssText = value || '';\n  else {\n    for (const [key, propvalue] of Object.entries(value)) {\n      // for numbers, add 'px' if the constant isn't dimensionless (eg zIndex)\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any -- we don't know which keys will be set\n      (node.style as any)[key] = typeof value[key] === 'number' && IS_NON_DIMENSIONAL.test(key) === false\n        ? propvalue + 'px'\n        : propvalue;\n    }\n  }\n}\n","import * as domtree from './tree';\nimport * as domevents from './events';\n\nexport type TakeFocusEvent = CustomEvent<{ options?: FocusOptions }>;\n\ndeclare global {\n  interface GlobalEventHandlersEventMap {\n    \"dompack:takefocus\": TakeFocusEvent;\n  }\n}\n\ntype RegistrationHandler<E extends Element = HTMLElement> = (node: E, index?: number) => void;\ntype ComponentRegistration<E extends Element = HTMLElement> =\n  {\n    selector: string;\n    handler: RegistrationHandler<E>;\n    index: number;\n    num: number;\n    afterdomready: boolean;\n  };\n\nconst components: Array<ComponentRegistration<Element>> = [];\nconst map = new WeakMap();\n\n//is a node completely in the dom? if we can find a sibling anywhere, it must be closed\nfunction isNodeCompletelyInDom(node: Element | null) {\n  for (; node; node = node.parentElement)\n    if (node.nextSibling)\n      return true;\n  return false;\n}\nfunction processRegistration<E extends Element>(item: E, reg: ComponentRegistration<E>, domready: boolean) {\n  if (!domready && !isNodeCompletelyInDom(item))\n    return; //not safe to register\n\n  if (!map.has(item))\n    map.set(item, [reg.num]);\n  else {\n    const list = map.get(item);\n    if (list.includes(reg.num))\n      return;\n    list.push(reg.num);\n  }\n  reg.handler(item, reg.index++); //note: if an exception is reported from Object.handler,\n}\nfunction applyRegistration<E extends Element>(reg: ComponentRegistration<E>, startnode?: Element) {\n  const domready = domtree.isDomReady();\n  if (reg.afterdomready && !domready)\n    return;\n\n  const items = Array.from((startnode || document).querySelectorAll(reg.selector)) as E[];\n  if (startnode?.matches(reg.selector))\n    items.unshift(startnode as E); //if startnode matches it has to be an E\n\n  items.forEach(item => {\n    try {\n      processRegistration<E>(item, reg, domready);\n    } catch (e) {\n      console.error(\"Exception handling registration of\", item, \"for rule\", reg.selector);\n      console.log(\"Registration\", reg);\n      if (e instanceof Error) {\n        console.log(e, e.stack);\n        if (window.onerror) {\n          // Send to onerror to trigger exception reporting\n          try {\n            // @ts-expect-error: fileName, lineNumber and columnNumber are non-standard\n            window.onerror(e.message, e.fileName || \"\", e.lineNumber || 1, e.columNumber || 1, e);\n          } catch (e2) { }\n        }\n      } else\n        console.log(e);\n    }\n  });\n}\n\n/* A focus implementation that allows the node to intercept focused, allowing eg\n   radio/checkbox replacements to redirect focus but also explicitly preventing\n   focus of a disabled element\n   Returns true when the focus operation was successfull or handled by an event handler.\n   @param node Node to focus\n   @param options.preventScroll Prevent scroll to focused element\n*/\nexport function focus(node: Element, options?: FocusOptions) {\n  if (!domevents.dispatchCustomEvent(node, 'dompack:takefocus', { bubbles: true, cancelable: true, detail: { options } }))\n    return true;\n\n  if (typeof (node as HTMLElement).focus !== \"function\" || (node as HTMLInputElement).disabled)\n    return false;\n\n  (node as HTMLInputElement).focus(options);\n  return true;\n}\n\n/**\n * @param node - Node to show\n * @param options - Scroll options\n * @deprecated invoke scrollIntoView directly  on the nodes\n */\nexport function scrollIntoView(node: Element, options?: ScrollIntoViewOptions) {\n  node.scrollIntoView(options);\n  return true;\n}\n\n/**\n    Register a component for auto-initialization.\n\n    @param selector - Selector the component must match\n    @param handler - Handler\n    @param options - Any unrecognized options are passed to the handler\n\n    The handler will be invoked with two parameters\n    - the node to register\n    - the index of the node (a unique counter for this selector - first is 0)\n */\n\nexport function register<E extends Element = HTMLElement>(selector: string, handler: RegistrationHandler<E>, options?: { afterdomready: boolean }) {\n  const newreg: ComponentRegistration<E> =\n  {\n    selector: selector,\n    handler: handler,\n    index: 0,\n    num: components.length,\n    afterdomready: !options || options.afterdomready\n  };\n  if (components.length === 0 && !domtree.isDomReady()) //first component... we'll need a ready handler\n    domtree.onDomReady(() => registerMissed());\n\n  components.push(newreg as ComponentRegistration<Element>);\n  applyRegistration(newreg);\n}\n\n// register any components we missed on previous scans\nexport function registerMissed(startnode?: Element) {\n  const todo = components.slice(0);\n  todo.forEach(item => applyRegistration(item, startnode));\n}\n","import { buildCookieHeader, type CookieOptions } from '@webhare/dompack/src/cookiebuilder';\nimport { escapeRegExp, parseTyped, stringify } from '@webhare/std';\n\nconst backup: {\n  sessionStorage?: Record<string, string>;\n  localStorage?: Record<string, string>;\n} = {};\ntype BrowserStorage = keyof typeof backup;\n\nexport function listCookies() {\n  return document.cookie.split(';').map(cookie => {\n    const parts = cookie.split('=');\n    return { name: decodeURIComponent(parts[0].trim()), value: decodeURIComponent(parts[1] || '') };\n  });\n}\n\nexport function setCookie(key: string, value: string, options?: CookieOptions) {\n  document.cookie = buildCookieHeader(key, value, options);\n}\n\nexport function getCookie(key: string): string | null {\n  const value = document.cookie.match('(?:^|;)\\\\s*' + escapeRegExp(key) + '=([^;]*)');\n  return (value) ? decodeURIComponent(value[1]) : null;\n}\n\nexport function deleteCookie(key: string, options?: CookieOptions) {\n  setCookie(key, '', { ...options, duration: -1, expires: undefined });\n}\n\nfunction get(storage: BrowserStorage, key: string): unknown | null {\n  let foundvalue: string | undefined | null = backup[storage]?.[key];\n  if (foundvalue) //if it's in the backups storage encoding can't fail either\n    return parseTyped(foundvalue);\n\n  try {\n    foundvalue = window[storage].getItem(key);\n    if (foundvalue)\n      return parseTyped(foundvalue);\n  } catch (e) {\n    //we ignore parse failures\n  }\n  return null;\n}\n\nfunction set(storage: BrowserStorage, key: string, value: unknown) {\n  const tostore = value !== null && value !== undefined ? stringify(value, { typed: true }) : null;\n  try {\n    if (tostore !== null)\n      window[storage].setItem(key, tostore);\n    else\n      window[storage].removeItem(key);\n    return;\n  } catch (e) {\n    //ignore\n  }\n\n  const store = (backup[storage] ||= {});\n  if (tostore !== null)\n    store[key] = tostore;\n  else\n    delete store[key];\n}\n\nexport function getSession<T>(key: string): T | null {\n  return get(\"sessionStorage\", key) as T | null;\n}\nexport function setSession<T>(key: string, value: T | null) {\n  set(\"sessionStorage\", key, value);\n}\nexport function getLocal<T>(key: string): T | null {\n  return get(\"localStorage\", key) as T | null;\n}\nexport function setLocal<T>(key: string, value: T | null) {\n  set(\"localStorage\", key, value);\n}\nexport function listSessionKeys() {\n  try {\n    return Object.keys(window.sessionStorage);\n  } catch (e) {\n    return Object.keys(backup.sessionStorage || {});\n  }\n}\nexport function listLocalKeys() {\n  try {\n    return Object.keys(window.localStorage);\n  } catch (e) {\n    return Object.keys(backup.localStorage || {});\n  }\n}\n","/* Identify devices for the purpose of analytics/tracing\n   NOT a library for feature detection!\n   Originally based on Mootools.Browser\n*/\n\nexport type Platform = \"windows\" | \"ios\" | \"webos\" | \"android\" | \"linux\" | \"mac\" | \"other\";\nexport type Device = \"desktop\" | \"mobile\" | \"tablet\" | \"\";\n\n/** Valid KeyboardEvent.key values (next to 'plain' keys)\n    This list was built from https://www.w3.org/TR/uievents-key/\n    using `console.log([...new Set([...document.querySelectorAll(\".key-table-key .key\")].map(_ => _.textContent))].toSorted().join(' | '))`\n*/\nexport type KeyAttributeValue = \"AVRInput\" | \"AVRPower\" | \"Accept\" | \"Again\" | \"AllCandidates\" | \"Alphanumeric\" | \"Alt\" | \"AltGraph\" | \"AppSwitch\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\" | \"ArrowUp\" | \"Attn\" | \"AudioBalanceLeft\" | \"AudioBalanceRight\" | \"AudioBassBoostDown\" | \"AudioBassBoostToggle\" | \"AudioBassBoostUp\" | \"AudioFaderFront\" | \"AudioFaderRear\" | \"AudioSurroundModeNext\" | \"AudioTrebleDown\" | \"AudioTrebleUp\" | \"AudioVolumeDown\" | \"AudioVolumeMute\" | \"AudioVolumeUp\" | \"Backspace\" | \"BrightnessDown\" | \"BrightnessUp\" | \"BrowserBack\" | \"BrowserFavorites\" | \"BrowserForward\" | \"BrowserHome\" | \"BrowserRefresh\" | \"BrowserSearch\" | \"BrowserStop\" | \"Call\" | \"Camera\" | \"CameraFocus\" | \"Cancel\" | \"CapsLock\" | \"ChannelDown\" | \"ChannelUp\" | \"Clear\" | \"Close\" | \"ClosedCaptionToggle\" | \"CodeInput\" | \"ColorF0Red\" | \"ColorF1Green\" | \"ColorF2Yellow\" | \"ColorF3Blue\" | \"ColorF4Grey\" | \"ColorF5Brown\" | \"Compose\" | \"ContextMenu\" | \"Control\" | \"Convert\" | \"Copy\" | \"CrSel\" | \"Cut\" | \"DVR\" | \"Dead\" | \"Delete\" | \"Dimmer\" | \"DisplaySwap\" | \"Eisu\" | \"Eject\" | \"End\" | \"EndCall\" | \"Enter\" | \"EraseEof\" | \"Escape\" | \"ExSel\" | \"Execute\" | \"Exit\" | \"F1\" | \"F10\" | \"F11\" | \"F12\" | \"F2\" | \"F3\" | \"F4\" | \"F5\" | \"F6\" | \"F7\" | \"F8\" | \"F9\" | \"FavoriteClear0\" | \"FavoriteClear1\" | \"FavoriteClear2\" | \"FavoriteClear3\" | \"FavoriteRecall0\" | \"FavoriteRecall1\" | \"FavoriteRecall2\" | \"FavoriteRecall3\" | \"FavoriteStore0\" | \"FavoriteStore1\" | \"FavoriteStore2\" | \"FavoriteStore3\" | \"FinalMode\" | \"Find\" | \"Fn\" | \"FnLock\" | \"GoBack\" | \"GoHome\" | \"GroupFirst\" | \"GroupLast\" | \"GroupNext\" | \"GroupPrevious\" | \"Guide\" | \"GuideNextDay\" | \"GuidePreviousDay\" | \"HangulMode\" | \"HanjaMode\" | \"Hankaku\" | \"HeadsetHook\" | \"Help\" | \"Hibernate\" | \"Hiragana\" | \"HiraganaKatakana\" | \"Home\" | \"Hyper\" | \"Info\" | \"Insert\" | \"InstantReplay\" | \"JunjaMode\" | \"KanaMode\" | \"KanjiMode\" | \"Katakana\" | \"Key11\" | \"Key12\" | \"LastNumberRedial\" | \"LaunchApplication1\" | \"LaunchApplication2\" | \"LaunchCalendar\" | \"LaunchContacts\" | \"LaunchMail\" | \"LaunchMediaPlayer\" | \"LaunchMusicPlayer\" | \"LaunchPhone\" | \"LaunchScreenSaver\" | \"LaunchSpreadsheet\" | \"LaunchWebBrowser\" | \"LaunchWebCam\" | \"LaunchWordProcessor\" | \"Link\" | \"ListProgram\" | \"LiveContent\" | \"Lock\" | \"LogOff\" | \"MailForward\" | \"MailReply\" | \"MailSend\" | \"MannerMode\" | \"MediaApps\" | \"MediaAudioTrack\" | \"MediaClose\" | \"MediaFastForward\" | \"MediaLast\" | \"MediaNextTrack\" | \"MediaPause\" | \"MediaPlay\" | \"MediaPlayPause\" | \"MediaPreviousTrack\" | \"MediaRecord\" | \"MediaRewind\" | \"MediaSkipBackward\" | \"MediaSkipForward\" | \"MediaStepBackward\" | \"MediaStepForward\" | \"MediaStop\" | \"MediaTopMenu\" | \"MediaTrackNext\" | \"MediaTrackPrevious\" | \"Meta\" | \"MicrophoneToggle\" | \"MicrophoneVolumeDown\" | \"MicrophoneVolumeMute\" | \"MicrophoneVolumeUp\" | \"ModeChange\" | \"NavigateIn\" | \"NavigateNext\" | \"NavigateOut\" | \"NavigatePrevious\" | \"New\" | \"NextCandidate\" | \"NextFavoriteChannel\" | \"NextUserProfile\" | \"NonConvert\" | \"Notification\" | \"NumLock\" | \"OnDemand\" | \"Open\" | \"PageDown\" | \"PageUp\" | \"Pairing\" | \"Paste\" | \"Pause\" | \"PinPDown\" | \"PinPMove\" | \"PinPToggle\" | \"PinPUp\" | \"Play\" | \"PlaySpeedDown\" | \"PlaySpeedReset\" | \"PlaySpeedUp\" | \"Power\" | \"PowerOff\" | \"PreviousCandidate\" | \"Print\" | \"PrintScreen\" | \"Process\" | \"Props\" | \"RandomToggle\" | \"RcLowBattery\" | \"RecordSpeedNext\" | \"Redo\" | \"RfBypass\" | \"Romaji\" | \"STBInput\" | \"STBPower\" | \"Save\" | \"ScanChannelsToggle\" | \"ScreenModeNext\" | \"ScrollLock\" | \"Select\" | \"Settings\" | \"Shift\" | \"SingleCandidate\" | \"Soft1\" | \"Soft2\" | \"Soft3\" | \"Soft4\" | \"SpeechCorrectionList\" | \"SpeechInputToggle\" | \"SpellCheck\" | \"SplitScreenToggle\" | \"Standby\" | \"Subtitle\" | \"Super\" | \"Symbol\" | \"SymbolLock\" | \"TV\" | \"TV3DMode\" | \"TVAntennaCable\" | \"TVAudioDescription\" | \"TVAudioDescriptionMixDown\" | \"TVAudioDescriptionMixUp\" | \"TVContentsMenu\" | \"TVDataService\" | \"TVInput\" | \"TVInputComponent1\" | \"TVInputComponent2\" | \"TVInputComposite1\" | \"TVInputComposite2\" | \"TVInputHDMI1\" | \"TVInputHDMI2\" | \"TVInputHDMI3\" | \"TVInputHDMI4\" | \"TVInputVGA1\" | \"TVMediaContext\" | \"TVNetwork\" | \"TVNumberEntry\" | \"TVPower\" | \"TVRadioService\" | \"TVSatellite\" | \"TVSatelliteBS\" | \"TVSatelliteCS\" | \"TVSatelliteToggle\" | \"TVTerrestrialAnalog\" | \"TVTerrestrialDigital\" | \"TVTimer\" | \"Tab\" | \"Teletext\" | \"Undo\" | \"Unidentified\" | \"VideoModeNext\" | \"VoiceDial\" | \"WakeUp\" | \"Wink\" | \"Zenkaku\" | \"ZenkakuHankaku\" | \"ZoomIn\" | \"ZoomOut\" | \"ZoomToggle\";\n\nexport type UserAgentInfo =\n  {\n    /** Browser name, eg 'chrome' or 'firefox' */\n    name: string;\n    /** Browser numeric version (eg 97) */\n    version: number;\n    /** Platform the browser is running on (eg 'windows') */\n    platform: Platform;\n    /** Type of device (eg 'desktop' or 'tablet' for an iPad) */\n    device: Device;\n    /** platform-browsername-version eg ios-safari-11 */\n    triplet: string;\n  };\n\nexport function parseUserAgent(ua: string): UserAgentInfo {\n  ua = ua.toLowerCase();\n\n  // chrome is included in the edge UA, so need to check for edge first, before checking if it's chrome.\n  // safari is included in the miuibrowser UA, so need to check for miuibrowser first, before checking if it's safari.\n  let UA: RegExpMatchArray | null = ua.match(/(edge|miuibrowser)[\\s/:]([\\w\\d.]+)/);\n  if (!UA)\n    UA = ua.match(/(opera|ie|firefox|chrome|trident|crios|version)[\\s/:]([\\w\\d.]+)?.*?(safari|(?:rv[\\s/:]|version[\\s/:])([\\w\\d.]+)|$)/);\n  if (!UA) { //try ios 11.4.1\n    UA = ua.match(/; cpu os ([\\d]+)/);\n    if (UA)\n      UA = ['', 'safari', UA[1]];\n  }\n  if (!UA)\n    UA = ['', 'unknown', \"0\"];\n\n  if (UA[1] === 'trident') {\n    UA[1] = 'ie';\n    if (UA[4]) UA[2] = UA[4];\n  } else if (UA[1] === 'crios') {\n    UA[1] = 'chrome';\n  }\n\n  let platform = ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || ua.match(/mac|win|linux/) || ['other'])[0];\n  if (platform === 'win')\n    platform = 'windows';\n\n  const name = (UA[1] === 'version') ? UA[3] : UA[1];\n  const version = parseInt((UA[1] === 'opera' && UA[4]) ? UA[4] : UA[2]);\n  const device = ua.match(/ipad/) ? 'tablet' : ['ios', 'webos', 'android'].includes(platform) ? 'mobile' : ['mac', 'windows', 'linux'].includes(platform) ? 'desktop' : '';\n\n  return {\n    name,\n    version,\n    platform: platform as Platform,\n    device,\n    triplet: platform + '-' + name + '-' + version\n  };\n}\n\n/**\n * Is the native 'multiselect' modifier for this platform pressed? (Cmd for Mac, Ctrl for Windows/Linux)\n *\n * @param event - Event to check\n */\nexport function isMultiSelectKey(event: KeyboardEvent | MouseEvent): boolean {\n  return browser.platform === 'mac' ? event.metaKey : event.ctrlKey;\n}\n\n/**\n * Is the native 'copy' modifier for this platform pressed?\n *\n * @param event - Event to check\n */\nexport function isCopyKey(event: KeyboardEvent | MouseEvent): boolean {\n  return browser.platform === 'mac' ? event.altKey : event.ctrlKey;\n}\n\n/** @deprecated Use getBrowser() instead, available since WH5.6.3. We will remove `browser` in the future to improve tree shaking */\nexport const browser: Readonly<UserAgentInfo> = Object.freeze(parseUserAgent(globalThis.navigator?.userAgent || \"\"));\n\n/** Get browser information */\nexport function getBrowser(): Readonly<UserAgentInfo> {\n  //Offer this as a function to improve treeshakability\n  return browser;\n}\n\n//CSS Query used to find valid submittors\nexport const submitselector = 'input[type=submit],input[type=image],button[type=submit],button:not([type])';\n//Must match possible types returned by the submitselector\nexport type SubmitSelectorType = HTMLInputElement | HTMLButtonElement;\n","import { isHTMLElement } from \"@webhare/dompack\";\nimport type { CMSConfig } from \"@mod-system/js/internal/generation/gen_misc_ts\";\n\nlet config: CMSConfig | undefined;\n\nfunction forwardPublisherNavigation(event: Event) {\n  /* we watch for clicks.. as we only want to update the Publisher's selection for user triggered actions (otherwise we'd\n     start navigation in response to JS or internal link autoredirects) */\n  if (!isHTMLElement(event.target) || !config?.interfaceServers)\n    return;\n\n  const navaction = event.target.closest<HTMLAnchorElement>('a[href]');\n  if (!navaction)\n    return;\n\n  const desturl = navaction.href;\n  if (desturl.split('#')[0] !== location.href.split('#')[0]) { //it's actual navigation...\n    for (const origin of config.interfaceServers) {\n      try {\n        window.top?.postMessage({ type: \"webhare-navigation\", location: desturl }, origin);\n      } catch (ignore) {\n        //ignore crossdomain errors\n      }\n    }\n  }\n}\n\nasync function configureForCMS() {\n  try {\n    const res = await fetch(\"/.wh/ea/config/cms.json\");\n    config = await res.json();\n  } catch (e) {\n    console.log(\"Failed to get CMS configuration\", e);\n    return;\n  }\n  window.addEventListener(\"click\", forwardPublisherNavigation);\n}\n\nif (typeof window !== \"undefined\" && window !== window.top) { //if we're in an iframe, we may be running in WebHare and need to forward navigation events\n  //we have no way to detect whether we're in a WebHare iframe or a 3rd party iframe. assume it's webhare and grab the interface servers\n  void configureForCMS();\n}\n","import \"@webhare/dompack/reset.css\";\nimport \"./frontend.scss\";\n\nimport { createApp } from \"vue\";\nimport { onDomReady, setupWRDAuth } from \"./lib/runtime\";\nimport App from \"./App.vue\";\nimport { router } from \"./lib/router\";\n\n// Single declaration of the backend->frontend data contract (visible module-wide\n// via declaration merging, so webdesign.ts's setFrontendData typechecks too).\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"tech42_tools:app\": { siteRoot: string; googleLogin: boolean };\n  }\n}\n\nonDomReady(async () => {\n  const app = createApp(App);\n  app.use(router);\n  // Wait for vue-router to resolve the first route so <router-view> renders a\n  // view before mount; otherwise setupWRDAuth() scans an empty #app.\n  await router.isReady();\n  app.mount(\"#app\");\n\n  // After mount: dompack.register() does a one-shot scan, so the login form must\n  // already be in the DOM when setupWRDAuth() runs (it is -- App renders it via\n  // v-else for logged-out users).\n  //\n  // onLogin takes the no-reload branch, which keeps the hash. Someone who was\n  // sent a deep link to a tool therefore lands on that tool after logging in\n  // instead of back on the picker.\n  setupWRDAuth({ onLogin: async () => { /* stay on the route in the hash */ } });\n});\n","var UNKNOWN_FUNCTION = '<unknown>';\n/**\n * This parses the different stack traces and puts them into one format\n * This borrows heavily from TraceKit (https://github.com/csnover/TraceKit)\n */\n\nfunction parse(stackString) {\n  var lines = stackString.split('\\n');\n  return lines.reduce(function (stack, line) {\n    var parseResult = parseChrome(line) || parseWinjs(line) || parseGecko(line) || parseNode(line) || parseJSC(line);\n\n    if (parseResult) {\n      stack.push(parseResult);\n    }\n\n    return stack;\n  }, []);\n}\nvar chromeRe = /^\\s*at (.*?) ?\\(((?:file|https?|blob|chrome-extension|native|eval|webpack|rsc|<anonymous>|\\/|[a-z]:\\\\|\\\\\\\\).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\nvar chromeEvalRe = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n\nfunction parseChrome(line) {\n  var parts = chromeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n\n  var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n\n  var submatch = chromeEvalRe.exec(parts[2]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line/column number\n    parts[2] = submatch[1]; // url\n\n    parts[3] = submatch[2]; // line\n\n    parts[4] = submatch[3]; // column\n  }\n\n  return {\n    file: !isNative ? parts[2] : null,\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: isNative ? [parts[2]] : [],\n    lineNumber: parts[3] ? +parts[3] : null,\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar winjsRe = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx|https?|webpack|rsc|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseWinjs(line) {\n  var parts = winjsRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nvar geckoRe = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|rsc|resource|\\[native).*?|[^@]*bundle)(?::(\\d+))?(?::(\\d+))?\\s*$/i;\nvar geckoEvalRe = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n\nfunction parseGecko(line) {\n  var parts = geckoRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n  var submatch = geckoEvalRe.exec(parts[3]);\n\n  if (isEval && submatch != null) {\n    // throw out eval line/column and use top-most line number\n    parts[3] = submatch[1];\n    parts[4] = submatch[2];\n    parts[5] = null; // no column when eval\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: parts[2] ? parts[2].split(',') : [],\n    lineNumber: parts[4] ? +parts[4] : null,\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar javaScriptCoreRe = /^\\s*(?:([^@]*)(?:\\((.*?)\\))?@)?(\\S.*?):(\\d+)(?::(\\d+))?\\s*$/i;\n\nfunction parseJSC(line) {\n  var parts = javaScriptCoreRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[3],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[4],\n    column: parts[5] ? +parts[5] : null\n  };\n}\n\nvar nodeRe = /^\\s*at (?:((?:\\[object object\\])?[^\\\\/]+(?: \\[as \\S+\\])?) )?\\(?(.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n\nfunction parseNode(line) {\n  var parts = nodeRe.exec(line);\n\n  if (!parts) {\n    return null;\n  }\n\n  return {\n    file: parts[2],\n    methodName: parts[1] || UNKNOWN_FUNCTION,\n    arguments: [],\n    lineNumber: +parts[3],\n    column: parts[4] ? +parts[4] : null\n  };\n}\n\nexport { parse };\n","import * as stacktrace_parser from \"stacktrace-parser\";\n\nexport type StackTraceItem = {\n  filename: string;\n  line: number;\n  col: number;\n  func: string;\n};\n\nexport type StackTrace = StackTraceItem[];\n\nexport function parseTrace(e: Error): StackTrace {\n  if (!e?.stack)\n    return [];\n\n  const trace = stacktrace_parser.parse(e.stack);\n  return trace.map(i => ({ filename: i.file || \"\", line: i.lineNumber || 1, col: i.column || 1, func: (i.methodName || \"\") }));\n}\n\nexport function getStackTrace(): StackTrace {\n  return parseTrace(new Error()).slice(1);\n}\n\nexport function formatTrace(trace: StackTraceItem[]): string {\n  return trace.map(e =>\n    `    at ${e.func} (${e.filename}:${e.line}:${e.col})`).join(\"\\n\");\n}\n\nexport function prependStackTrace(error: Error, trace: StackTrace) {\n  if (!error.stack)\n    return; //no stack to manipulate\n\n  const stacklines = error.stack?.split(\"\\n\") || [];\n  const tracelines = formatTrace(trace);\n  error.stack = (stacklines[0] ? stacklines[0] + \"\\n\" : \"\") + tracelines + '\\n' + (stacklines.slice(1).join(\"\\n\"));\n  return error;\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/jsonrpc-client\" {\n}\n\nimport { debugFlags, backendBase } from \"@webhare/env\";\nimport { type StackTrace, parseTrace, prependStackTrace, type PromisifyFunctionReturnType } from \"@webhare/js-api-tools\";\n\n//just number RPCs globally instead of per server, makes debug ouput more useful\nlet globalseqnr = 0;\n\nexport interface RPCCallOptions {\n  /** Append function name to URLs. Purely for better logging/visibility as the WebHare JSONRPC server will ignore it */\n  addfunctionname?: boolean;\n  /** Custom URL marker */\n  urlappend?: string;\n  /** Call timeout */\n  timeout?: number;\n  /** Abort signal to cancel the RPC */\n  signal?: AbortSignal;\n  /** Retry on 429 */\n  retry429?: boolean;\n  /** Silent - do not log errors */\n  silent?: boolean;\n  /** Debug (Follows 'rpc' debugflag if not explicity specified) */\n  debug?: boolean;\n  /** Wrap result with response info */\n  wrapresult?: boolean;\n  keepalive?: boolean;\n  /** Headers to submit (Eg Authorization) */\n  headers?: Record<string, string>;\n  /** Base URL for service paths */\n  baseUrl?: string;\n  /** Overide fetch credentials option (defaults to same-origin) */\n  credentials?: RequestCredentials;\n}\n\nexport type RequestID = number | string | null;\n\nexport interface JSONRPCBaseResponse {\n  id: RequestID;\n  debug?: {\n    consoleLog: Array<{\n      //TODO this is Serialized<ConsoleLogItem[]> - should probably rename it to SerializedToJSON and move to std or env ?\n      /** Date when console function was called */\n      when: string;\n      /** `console` method that was called (eg 'log') */\n      method: string;\n      /** Logged data */\n      data: string;\n      /** Location of caller */\n      location?: {\n        filename: string;\n        line: number;\n        col: number;\n        func: string;\n      };\n      /** Codecontext */\n      codeContextId?: string;\n    }>;\n  };\n}\n\nexport interface JSONRPCSuccesfulResponse extends JSONRPCBaseResponse {\n  error: null;\n  result: unknown;\n}\n\nexport interface JSONRPCErrorResponse extends JSONRPCBaseResponse {\n  result: null;\n  error: {\n    code: number;\n    message: string;\n    data?: {\n      trace?: StackTrace;\n    };\n  };\n}\n\nexport type JSONRPCResponse = JSONRPCSuccesfulResponse | JSONRPCErrorResponse;\n\nfunction getDebugAppend() {\n  if (typeof window !== \"undefined\" && typeof window.location !== \"undefined\") {\n    const urldebugvar = new URL(window.location.href).searchParams.get(\"wh-debug\");\n    if (urldebugvar)\n      return '?wh-debug=' + encodeURIComponent(urldebugvar);\n  }\n  return '';\n}\n\nclass ControlledCall {\n  client: RPCClient;\n  options: RPCCallOptions;\n  abortcontroller: AbortController;\n  timeout?: number;\n  _callurl: string;\n  _fetchoptions: RequestInit;\n  promise: Promise<unknown>;\n  timedout?: boolean;\n  aborted?: boolean;\n\n  constructor(client: RPCClient, method: string, stack: StackTrace | null, id: number, options: RPCCallOptions, callurl: string, fetchoptions: RequestInit) {\n    this.client = client;\n    this.options = options;\n\n    // if(options.timeout || options.signal) //as long as rpcResolve exists, we'll ALWAYS need to setup a controller\n    {\n      this.abortcontroller = new AbortController;\n      fetchoptions.signal = this.abortcontroller.signal;\n\n      if (options.timeout && options.timeout > 0) {\n        this.timeout = options.timeout;\n        setTimeout(() => this._handleTimeout(), options.timeout);\n      }\n      if (options.signal) {\n        options.signal.addEventListener(\"abort\", () => this._abort());\n      }\n    }\n\n    this._callurl = callurl;\n    this._fetchoptions = fetchoptions;\n\n    const fetchpromise = fetch(this._callurl, this._fetchoptions);\n    this.promise = this._completeCall(method, stack, id, fetchpromise) as Promise<unknown>;\n  }\n  _handleTimeout() {\n    this.timedout = true;\n    this.abortcontroller.abort();\n  }\n  _abort() {\n    this.aborted = true;\n    this.abortcontroller.abort();\n  }\n\n  async _completeCall(method: string, requestStack: StackTrace | null, id: number, fetchpromise: Promise<Response>) {\n    let response;\n    try {\n      for (; ;) { //loop to handle \"429 Conflict\"s\n        response = await fetchpromise;\n        if (response.status === 429 && !(\"retry429\" in this.options && !this.options.retry429) && response.headers.get(\"Retry-After\")) {\n          const retryafter = parseInt(response.headers.get(\"Retry-After\") || \"\");\n          if (this.client.debug)\n            console.warn(`[rpc] We are being throttled (429 Too Many Requests) - retrying after ${retryafter} seconds`);\n\n          await new Promise(resolve => setTimeout(resolve, retryafter * 1000));\n          fetchpromise = fetch(this._callurl, this._fetchoptions);\n          continue;\n        }\n        break;\n      }\n    } catch (exception) {\n      if (this.client.debug)\n        console.log(`[rpc] #${id} Exception invoking '${method}'`, exception);\n\n      if (this.aborted)\n        throw new Error(`RPC Aborted`);\n      else if (this.timedout)\n        throw new Error(`RPC Timeout: timeout was set to ${this.timeout} milliseconds`);\n      else\n        throw new Error(`RPC Failed: exception: ` + exception);\n    }\n\n    let jsonresponse;\n    try {\n      jsonresponse = await response.json() as JSONRPCResponse;\n      if (jsonresponse?.debug) {\n        if (jsonresponse.debug.consoleLog) {\n          for (const logitem of jsonresponse.debug.consoleLog) {\n            //should we log 'when'? it's getting more and more noisy then though....\n            //TODO should we match the remote's method (after validating) or just keep eveyrthing at 'log' ?\n            console.log(`[remote:${logitem.method}] ${logitem.location ? `${logitem.location.filename.split(\"/\").at(-1)}:${logitem.location.line}: ` : ''}${logitem.data}`);\n          }\n        }\n\n        delete jsonresponse.debug; //reduce noise in later logs\n      }\n\n      if (this.client.debug)\n        console.log(`[rpc] #${id} Received response to '${method}'`, jsonresponse);\n    } catch (exception) {\n      if (this.client.debug)\n        console.warn(`[rpc] #${id} Response was not valid JSON`, exception);\n    }\n\n    if (!jsonresponse)\n      throw new Error(\"RPC Failed: Invalid JSON/RPC response received\");\n\n    if (jsonresponse?.error) {\n      const err = new Error(\"RPC Error: \" + (jsonresponse.error.message || \"Unknown error\"));\n      if (jsonresponse.error.data?.trace) {\n        try {\n          prependStackTrace(err, jsonresponse.error.data.trace);\n        } catch (err2) {\n          //ignore stacktrace manipulation error\n        }\n      }\n\n      if (!this.options.silent)\n        this.client._tryLogError(requestStack, err);\n      throw err;\n    }\n\n    if (response.status === 200 && jsonresponse && jsonresponse.id !== id)\n      throw new Error(\"RPC Failed: Invalid JSON/RPC response received\");\n\n    if (this.options.wrapresult) {\n      return {\n        status: response.status,\n        result: jsonresponse.result || null,\n        error: jsonresponse.error || null,\n        retryafter: response.headers.get(\"Retry-After\") ? parseInt(response.headers.get(\"Retry-After\") || \"\") : null\n      };\n    }\n\n    return jsonresponse.result;\n  }\n}\n\n/** Invokes (WebHare) JSON/RPC\n    @param url - URL to invoke (leave empty or pass no parameters at all to callback to the current page)\n    */\nclass RPCClient {\n  url: string;\n  addfunctionname: boolean;\n  urlappend: string;\n  options: RPCCallOptions;\n  whservicematch: RegExpMatchArray | null;\n\n  constructor(url: string, options?: RPCCallOptions) {\n    this.options = {\n      timeout: 0,\n      debug: false,\n      ...options\n    };\n\n    if (!url)\n      throw new Error(`You must specify either a WebHare service name or a full URL`);\n\n    this.url = url;\n    this.whservicematch = this.url.match(/^([a-z0-9_]+):([a-z0-9_]+)$/);\n    //if shorthand syntax is used, we know we're talking to our local webhare. add function names and the profiling flag if needed\n    this.addfunctionname = this.options.addfunctionname !== undefined ? this.options.addfunctionname : Boolean(this.whservicematch);\n    this.urlappend = this.options.urlappend !== undefined ? this.options.urlappend : this.whservicematch ? getDebugAppend() : \"\";\n  }\n\n  get debug() {\n    return this.options.debug || debugFlags.rpc;\n  }\n\n  _tryLogError(requestStack: StackTrace | null, error: Error) {\n    console.group();\n    console.warn(\"RPC failed:\", error);\n    if (requestStack) {\n      console.warn(\"Stack at calling point\");\n      console.log(requestStack);\n    }\n    console.groupEnd();\n  }\n\n  //calculate the final URL. delayed here so services can be created on import (getDefaultRPCBase may require waiting for service.ready)\n  private getURL() {\n    //wh_services are always in the root (and soon inside /.wh)\n    const url = this.whservicematch ? `/wh_services/${this.whservicematch[1]}/${this.whservicematch[2]}` : this.url;\n    if (url.match(/^https?:\\/\\//))\n      return url;\n\n    if (this.options.baseUrl)\n      return new URL(url, this.options.baseUrl).toString();\n    else if (backendBase)\n      return backendBase + (backendBase.endsWith('/') && url.startsWith('/') ? url.substring(1) : url);\n    else\n      throw new Error(`You must set the baseUrl option when using the JSONRPC Client without a full URL outside Webhare`);\n  }\n\n  invoke(method: string, params: unknown[]) {\n    //build the URL, add profiling and function parameters where needed\n    let callurl = this.getURL();\n    if (this.addfunctionname) //simplifies log analysis, ignored by the server\n      callurl += `/${method}`;\n    callurl += this.urlappend;\n\n    const id = ++globalseqnr;\n    let requestStack: StackTrace | null = null;\n\n    if (this.debug) {\n      requestStack = parseTrace(new Error);\n      console.log(`[rpc] #${id} Invoking '${method}'`, params, callurl);\n    }\n\n    const fetchoptions: RequestInit = {\n      method: \"POST\",\n      credentials: this.options.credentials || 'same-origin', //this is the default since 2017-08-25, but Edge pre-18 is still around and will fail here\n      headers: {\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        ...this.options.headers\n      },\n      body: JSON.stringify(\n        {\n          id: id,\n          method: method,\n          params: params || []\n        }),\n      keepalive: Boolean(this.options.keepalive)\n    };\n\n    return new ControlledCall(this, method, requestStack, id, this.options, callurl, fetchoptions).promise;\n  }\n}\n\ntype ServiceBase<T> = {\n  withOptions(options: RPCCallOptions): T & ServiceBase<T>;\n};\n\nclass ServiceProxy<T> {\n  client: RPCClient;\n\n  constructor(client: RPCClient) {\n    this.client = client;\n  }\n\n  get(target: object, prop: string, receiver: unknown) {\n    if (prop === 'withOptions') { //create a withOptions function\n      return (options: RPCCallOptions) => {\n        const newoptions = {\n          ...this.client.options,\n          ...options,\n          headers: { ...this.client.options.headers, ...options.headers }\n        };\n        return createClient<T>(this.client.url, newoptions);\n      };\n    }\n\n    return (...args: unknown[]) => this.client.invoke(prop, args);\n  }\n}\n\n\n/** Creates an async version of the functions in a class\n * @typeParam ServiceType - Type definition of the service class that implements this service.\n*/\ntype ConvertToRPCInterface<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- using any is needed for this type definition\n  [K in Exclude<keyof ServiceType, `_${string}` | \"close\" | \"emit\"> as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? PromisifyFunctionReturnType<ServiceType[K]> : never;\n};\n\n/** Get the client interface type as would be returned by createClient */\nexport type GetClientInterface<Client> = ConvertToRPCInterface<Client> & ServiceBase<ConvertToRPCInterface<Client>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- If you don't care to type the service, just assume it can do anything\nexport function createClient<Client = any>(servicename: string, options?: RPCCallOptions): GetClientInterface<Client> {\n  const rpcclient = new RPCClient(servicename, options);\n  return new Proxy({}, new ServiceProxy<Client>(rpcclient)) as GetClientInterface<Client>;\n}\n","// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/rpc\" {\n  export interface KnownRPCServices {\n    /* Filled by generated services.ts files */\n  }\n}\n\nimport { debugFlags, backendBase } from \"@webhare/env\";\nimport { type StackTrace, parseTrace, prependStackTrace, type PromisifyFunctionReturnType } from \"@webhare/js-api-tools\";\nimport { omit, parseTyped, stringify } from \"@webhare/std\";\n\n//Preload interface definitions. To solve this cleaner we would have to do some sort of auto-inject but how to robustly do that accross IDEs/Tscs ?\n\n//@ts-ignore Ignore if it doesn't exist. this line *must* remain a @ts-ignore\nimport type { } from \"@mod-platform/generated/ts/services.ts\";\n//@ts-ignore Ignore if it doesn't exist. this line *must* remain a @ts-ignore\nimport type { } from \"wh:ts/services.ts\";\n\nfunction isAbsolute(url: string) {\n  return url.startsWith(\"http:\") || url.startsWith(\"https:\");\n}\n\nfunction getBaseURL() {\n  if (!backendBase)\n    throw new Error(`You must set the baseUrl option when using the RPC Client outside Webhare`);\n  return isAbsolute(backendBase) ? backendBase : new URL(backendBase, location.origin);\n}\n\nexport interface RPCClientOptions {\n  /** Custom request update. Use to eg. set keepalive or add debug variables to the URL */\n  onBeforeRequest?: (url: URL, requestInit: RequestInit & { headers: Headers }) => void;\n  /** Response callback. Use this if you need to capture details on the incoming respones. May be invoked multiple times per request, eg due to 429 errors! */\n  onResponse?: (response: Response) => void;\n  /** Call timeout */\n  timeout?: number;\n  /** Abort signal to cancel the RPC */\n  signal?: AbortSignal;\n  /** Retry on 429 */\n  retry429?: boolean;\n  /** Silent - do not log errors */\n  silent?: boolean;\n  /** Debug (Follows 'rpc' debugflag if not explicity specified) */\n  debug?: boolean;\n  /** Headers to submit (Eg Authorization) */\n  headers?: Record<string, string>;\n  /** Base URL for service paths */\n  baseUrl?: string;\n}\n\n/** RPC Response format */\nexport type RPCResponse = ({\n  /** Result. Not present if the function didn't return anything */\n  result?: unknown;\n} | {\n  /** Error message */\n  error: string;\n  /** Captured stack trace (if 'etr' debugFlag is set) */\n  trace?: StackTrace;\n}) & {\n  /** Captured console log entries (if 'etr' debugFlag is set) */\n  consoleLog?: Array<{\n    //TODO this is Serialized<ConsoleLogItem[]> - should probably rename it to SerializedToJSON and move to std or env ?\n    /** Date when console function was called */\n    when: string;\n    /** `console` method that was called (eg 'log') */\n    method: string;\n    /** Logged data */\n    data: string;\n    /** Location of caller */\n    location?: {\n      filename: string;\n      line: number;\n      col: number;\n      func: string;\n    };\n    /** Codecontext */\n    codeContextId?: string;\n  }>;\n};\n\nclass ControlledCall {\n  client: RPCClient;\n  options: RPCClientOptions;\n  abortcontroller?: AbortController;\n  timeout?: number;\n  _callurl: string;\n  _fetchoptions: RequestInit;\n  promise: Promise<unknown>;\n  timedout?: boolean;\n  aborted?: boolean;\n\n  constructor(client: RPCClient, method: string, stack: StackTrace | null, options: RPCClientOptions, callurl: URL, fetchoptions: RequestInit) {\n    this.client = client;\n    this.options = options;\n\n    if (options.timeout || options.signal) {\n      this.abortcontroller = new AbortController;\n      fetchoptions.signal = this.abortcontroller.signal;\n\n      if (options.timeout && options.timeout > 0) {\n        this.timeout = options.timeout;\n        setTimeout(() => this._handleTimeout(), options.timeout);\n      }\n      if (options.signal) {\n        options.signal.addEventListener(\"abort\", () => this._abort());\n      }\n    }\n\n    this._callurl = callurl.toString();\n    this._fetchoptions = fetchoptions;\n\n    const fetchpromise = fetch(this._callurl, this._fetchoptions);\n    this.promise = this._completeCall(method, stack, fetchpromise) as Promise<unknown>;\n  }\n  _handleTimeout() {\n    this.timedout = true;\n    this.abortcontroller?.abort();\n  }\n  _abort() {\n    this.aborted = true;\n    this.abortcontroller?.abort();\n  }\n\n  async _completeCall(method: string, requestStack: StackTrace | null, fetchpromise: Promise<Response>) {\n    let response;\n    for (; ;) { //loop to handle \"429 Conflict\"s\n      try { //we should only guard the fetch call and specifically *not* the onResponse callback\n        response = await fetchpromise;\n      } catch (exception) {\n        if (this.client.debug)\n          console.log(`[rpc] Exception invoking '${method}'`, exception);\n\n        if (this.aborted)\n          throw new Error(`RPC Aborted`);\n        else if (this.timedout)\n          throw new Error(`RPC Timeout: timeout was set to ${this.timeout} milliseconds`);\n        else\n          throw new Error(`RPC Failed: exception: ` + exception);\n      }\n\n      this.options.onResponse?.(response); //allow hooks to capture headers\n\n      if (response.status === 429 && !(\"retry429\" in this.options && !this.options.retry429) && response.headers.get(\"Retry-After\")) {\n        const retryafter = parseInt(response.headers.get(\"Retry-After\") || \"\");\n        if (this.client.debug)\n          console.warn(`[rpc] We are being throttled (429 Too Many Requests) - retrying after ${retryafter} seconds`);\n\n        await new Promise(resolve => setTimeout(resolve, retryafter * 1000));\n        fetchpromise = fetch(this._callurl, this._fetchoptions);\n        continue;\n      }\n      break;\n    }\n\n    let jsonresponse: RPCResponse;\n    try {\n      jsonresponse = parseTyped(await response.text());\n      if (jsonresponse.consoleLog) {\n        for (const logitem of jsonresponse.consoleLog) {\n          //should we log 'when'? it's getting more and more noisy then though....\n          //TODO should we match the remote's method (after validating) or just keep everything at 'log' ?\n          console.log(`[remote:${logitem.method}] ${logitem.location ? `${logitem.location.filename.split(\"/\").at(-1)}:${logitem.location.line}: ` : ''}${logitem.data}`);\n        }\n      }\n\n      if (this.client.debug)\n        console.log(`[rpc] Received response to '${method}'`, omit(jsonresponse, [\"consoleLog\", \"trace\"]));\n    } catch (exception) {\n      if (this.client.debug)\n        console.warn(`[rpc] Response was not valid JSON`, exception);\n      throw new Error(\"RPC Failed: Invalid response received\", { cause: exception });\n    }\n\n    if (\"error\" in jsonresponse) {\n      const err = new Error(`RPC Error: ${jsonresponse.error}`);\n      if (jsonresponse.trace) {\n        try {\n          prependStackTrace(err, jsonresponse.trace);\n        } catch (err2) {\n          //ignore stacktrace manipulation error\n        }\n      }\n\n      if (this.options.debug) {\n        console.group();\n        console.warn(\"RPC failed:\", err);\n        if (requestStack) {\n          console.warn(\"Stack at calling point\");\n          console.log(requestStack);\n        }\n        console.groupEnd();\n      }\n\n      throw err;\n    }\n\n    return jsonresponse.result;\n  }\n}\n\nclass RPCClient {\n  readonly url: string;\n  options: RPCClientOptions;\n\n  constructor(url: string, options?: RPCClientOptions) {\n    this.url = url;\n    this.options = {\n      timeout: 0,\n      debug: false,\n      ...options\n    };\n  }\n\n  get debug() {\n    return this.options.debug || debugFlags.rpc;\n  }\n\n  _tryLogError(requestStack: StackTrace | null, error: Error) {\n  }\n\n  invoke(method: string, params: unknown[]) {\n    //build the URL, add profiling and function parameters where needed\n    //We'll delay the baseurl calculation until the first call to allow for the backendBase to be set up\n    const callurl = isAbsolute(this.url) ? new URL(this.url + method) : new URL(this.url + method, this.options.baseUrl || getBaseURL());\n\n    let requestStack: StackTrace | null = null;\n\n    const fetchoptions: RequestInit & { headers: Headers } = {\n      method: \"POST\",\n      headers: new Headers({\n        \"Accept\": \"application/json\",\n        \"Content-Type\": \"application/json; charset=utf-8\",\n        ...this.options.headers\n      }),\n      body: stringify(params, { typed: true }),\n    };\n\n    if (typeof location !== \"undefined\")\n      callurl.searchParams.set(\"pathname\", location.pathname);\n\n    if (this.debug) {\n      requestStack = parseTrace(new Error);\n      console.log(`[rpc] Invoking '${method}'`, params);\n    }\n\n    this.options.onBeforeRequest?.(callurl, fetchoptions);\n    return new ControlledCall(this, method, requestStack, this.options, callurl, fetchoptions).promise;\n  }\n}\n\ntype ServiceBase<T> = {\n  withOptions(options: RPCClientOptions): T & ServiceBase<T>;\n};\n\nclass ServiceProxy<Service extends keyof KnownRPCServices | object> {\n  client: RPCClient;\n\n  constructor(client: RPCClient) {\n    this.client = client;\n  }\n\n  get(target: object, prop: string, receiver: unknown) {\n    if ([\"then\", \"catch\", \"finally\"].includes(prop)) //do not appear like our object is a promise\n      return undefined;\n\n    if (prop === 'withOptions') { //create a withOptions function\n      return (options: RPCClientOptions) => {\n        const newoptions = {\n          ...this.client.options,\n          ...options,\n          headers: { ...this.client.options.headers, ...options.headers }\n        };\n        return rpc(this.client.url as (Service extends keyof KnownRPCServices ? Service : string), newoptions);\n      };\n    }\n\n    return (...args: unknown[]) => this.client.invoke(prop, args);\n  }\n}\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\ntype OmitFirstArg<F> = F extends (x: any, ...args: infer P) => infer R ? (...args: P) => R : never;\n\nexport type OmitRPCContextArgs<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- need any to not worry about the actual first arg\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? OmitFirstArg<ServiceType[K]> : never;\n};\n\n/** Creates an async version of the functions in a class, removes context parameters\n * @typeParam ServiceType - Type definition of the service class that implements this service.\n*/\ntype ConvertToRPCInterface<ServiceType> = {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- using any is needed for this type definition\n  [K in keyof ServiceType as ServiceType[K] extends (...a: any) => any ? K : never]: ServiceType[K] extends (...a: any[]) => void ? PromisifyFunctionReturnType<ServiceType[K]> : never;\n};\n\ntype ExtractInterface<Service extends object> = ConvertToRPCInterface<Service> & ServiceBase<ConvertToRPCInterface<Service>>;\n\n/** Get the client interface type as would be returned by createClient\n * @typeParam Service - either the `module:service` name or the interface to implement. If you want to pass the implementation's type you should wrap it into `OmitRPCContextArgs`.\n*/\nexport type GetRPCClientInterface<Service extends (keyof KnownRPCServices) | object> = Service extends keyof KnownRPCServices ? ExtractInterface<OmitRPCContextArgs<KnownRPCServices[Service]>> : Service extends object ? ExtractInterface<Service> : never;\n\n/** Create a WebHare RPC client\n  @param service - URL (https://<ORIGIN>/.wh/rpc/module/service/) or service name (module:service) to invoke\n*/\nexport function rpc<Service extends keyof KnownRPCServices>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\nexport function rpc<Service extends object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service>;\n\nexport function rpc<Service extends keyof KnownRPCServices | object>(service: Service extends keyof KnownRPCServices ? Service : string, options?: RPCClientOptions): GetRPCClientInterface<Service> {\n  //NOTE: needed the separate overloads to get Intellisense to list the known services for createRPClient's first argument\n\n  if (!service)\n    throw new Error(`You must specify either a WebHare rpcService name or a full URL`);\n\n  const servicematch = service.match(/^([a-z0-9_]+):([a-z0-9_]+)$/);\n  if (servicematch)\n    service = `/.wh/rpc/${servicematch[1]}/${servicematch[2]}/` as (Service extends keyof KnownRPCServices ? Service : string);\n  else if (!service.endsWith('/'))\n    throw new Error(`Service URL must end in a slash`);\n\n  const rpcclient = new RPCClient(service, options);\n  return new Proxy({}, new ServiceProxy<GetRPCClientInterface<Service>>(rpcclient)) as GetRPCClientInterface<Service>;\n}\n","import type { NavigateInstruction } from \"@webhare/env\";\n\n/** Login failure reasons that can also be used by custom isLoginDenied checks */\nexport type LoginErrorCode = \"internal-error\" | \"incorrect-login-password\" | \"incorrect-email-password\" | \"account-disabled\" | \"unknown-account\" | \"require-external-login\";\n\n/** Login reasons that require further client side work but are not errors per-se */\nexport type LoginIncompleteCode = \"totp\" | \"incomplete-account\";\n\nexport type LoginTweaks = {\n  /** Limit session duration (development servers only) */\n  limitExpiry?: number;\n  /** Language code */\n  lang?: string;\n};\n\nexport type LoginResult = {\n  loggedIn: boolean;\n  navigateTo: NavigateInstruction;\n} | {\n  loggedIn: false;\n  code: LoginErrorCode;\n  error?: string;\n};\n\nexport type LogoutResult = { success: true } | {\n  error: string;\n  code: LoginErrorCode | LoginIncompleteCode;\n};\n\nexport const PublicCookieSuffix = \"_publicauthdata\";\n\n/* APIs and types shared between the client and server */\nexport function getCompleteAccountNavigation(token: string, pathname: string): NavigateInstruction {\n  return {\n    type: \"redirect\", //TODO or use a \"form\" too? went for a session now as an excursion to followup GET pages is much more likely in this procedure than with totp\n    url: \"/.wh/common/authpages/?wrd_pwdaction=completeaccount&token=\" + encodeURIComponent(token || '') + \"&pathname=\" + encodeURIComponent(pathname)\n  };\n}\n","import { createClient } from \"@webhare/jsonrpc-client\";\nimport { type NavigateInstruction, navigateTo } from \"@webhare/env\";\nimport * as dompack from '@webhare/dompack';\nimport type { LoginOptions } from \"@webhare/auth/src/identity\";\nimport { rpc } from \"@webhare/rpc\";\n\n//NOTE: Do *NOT* load @webhare/frontend or we enforce the new CSS reset!\nimport { getFrontendData } from '@webhare/frontend/src/init';\nimport { PublicCookieSuffix, type LoginErrorCode, type LoginResult, type LoginTweaks } from \"@webhare/auth/src/shared\";\nimport { parseTyped, toSnakeCase, type ToSnakeCase } from \"@webhare/std\";\nimport type WRDAuthenticationProvider from \"@mod-wrd/js/auth\";\nimport type { OAuth2PromptFlag } from \"@webhare/auth/src/oauth2-client\";\n\n/** WRDAuth configuration */\nexport interface WRDAuthOptions {\n  /** Callback that is invoked after a succesful login. If not set the page will be reloaded. */\n  onLogin?: () => Promise<void> | void;\n}\n\nexport interface PublicAuthData {\n  expiresMs: number;\n  userInfo?: object | null;\n  persistent?: boolean;\n}\n\ndeclare module \"@webhare/frontend\" {\n  interface FrontendDataTypes {\n    \"wrd:auth\": {\n      /** WRDAuth cookiename (used to store userinfo and expiry) */\n      cookiename: string;\n    };\n  }\n}\n\ndeclare global {\n  interface Window {\n    $wh$legacyAuthProvider: WRDAuthenticationProvider;\n    triggerWebHareSSO?: (tag: string, options?: SSOLoginOptions) => Promise<void>;\n  }\n}\n\n/** Current authoptions. undefined if setupWRDAuth hasn't been invoked yet */\nlet authOptions: WRDAuthOptions | undefined;\n\n/** Get current login cookie. If empty, wrdauth is not initialized here */\nfunction getCookieName(): string | null {\n  const settings = getFrontendData(\"wrd:auth\", { allowMissing: true });\n  return settings?.cookiename || null;\n}\n\nfunction getAuthLocalData(): PublicAuthData | null {\n  const c = getCookieName();\n  if (!c)\n    return null;\n\n  try {\n    return parseTyped(dompack.getCookie(c + PublicCookieSuffix)!) as PublicAuthData;\n  } catch {\n    return null;\n  }\n}\n\nasync function submitLoginForm(node: HTMLFormElement, event: SubmitEvent) {\n  if (node.propWhFormhandler)\n    return; //already handled by publisher forms so we'll defer to that\n  dompack.stop(event);\n\n  const username = (node.elements.namedItem(\"login\") as HTMLInputElement)?.value;\n  const password = (node.elements.namedItem(\"password\") as HTMLInputElement)?.value;\n  const site = (node.elements.namedItem(\"site\") as HTMLInputElement)?.value || undefined;\n  const returnto = (node.elements.namedItem(\"returnto\") as HTMLInputElement)?.value || undefined;\n  const persistentlogin = (node.elements.namedItem(\"persistent\") as HTMLInputElement)?.checked;\n  if (!login || !password)\n    throw new Error(`submitLoginForm: required elements login/password not set or missing`);\n\n  using lock = dompack.flagUIBusy({ modal: true });\n  void (lock);\n\n  const loginresult = await login(username, password, {\n    persistent: persistentlogin,\n    site,\n    returnTo: returnto ? new URL(returnto, location.href).toString() : location.href.split('#')[0]\n  });\n  if (loginresult.loggedIn) {\n    refreshLoginStatus();\n    if (loginresult.navigateTo.type === \"redirect\" && loginresult.navigateTo.url.split('#')[0] === location.href.split('#')[0]  //stay on same page\n      && authOptions?.onLogin) {\n\n      if (loginresult.navigateTo.url.includes('#')) //execute any #hash instruction\n        history.replaceState(null, \"\", loginresult.navigateTo.url.substring(loginresult.navigateTo.url.indexOf('#')));\n\n      await authOptions.onLogin();\n    } else {\n      //Reload the page to get the new login status - TODO put this behind a 'login state change' event and allow users to cancel it if they can deal with login/logout on-page\n      console.log(\"Post login redirect\", loginresult.navigateTo);\n      navigateTo(loginresult.navigateTo);\n    }\n  } else if (\"navigateTo\" in loginresult) {\n    console.log(\"Login incomplete, redirecting to\", loginresult.navigateTo);\n    navigateTo(loginresult.navigateTo);\n  } else\n    failLogin(loginresult.error ?? loginresult.code, { code: loginresult.code, data: \"\" }, node); //FIXME restore the code & data members from old wrdauth\n}\n\nfunction refreshLoginStatus() {\n  const loggedIn = isLoggedIn();\n  document.documentElement.classList.toggle(\"wh-wrdauth--isloggedin\", loggedIn);\n\n  window.$wh$legacyAuthProvider?.refresh();\n}\n\n/** Return whether a user's currently logged in */\nexport function isLoggedIn(): boolean {\n  return (getAuthLocalData()?.expiresMs || 0) > Date.now();\n}\n\n/** Setup WRDAuth frontend integration */\nexport function setupWRDAuth(options?: WRDAuthOptions) {\n  if (authOptions)\n    throw new Error(`Duplicate setupWRDAuth call`);\n\n  authOptions = { ...options };\n\n  dompack.register<HTMLFormElement>('form.wh-wrdauth__loginform,form.wh-wrdauth-login__form', node => {\n    node.setAttribute(\"data-wh-wrdauth-attached\", \"\");\n    dompack.addDocEventListener(node, \"submit\", evt => submitLoginForm(node, evt));\n  });\n  dompack.register('.wh-wrdauth__logout', node => {\n    function handleLogoutClick(event: Event) {\n      dompack.stop(event);\n\n      //letting rejections escape - our trigger is generally setup in HTML so there's nothing to catch but uncaught rejection handlers anyway\n      if (node instanceof HTMLAnchorElement && node.href && node.href.split('#')[0] !== location.href.split('#')[0]) { //logout link sending you elsewhere\n        void doLogout().then(() => {\n          console.log(\"Logout complete, redirecting to\", node.href);\n          navigateTo({ type: \"redirect\", url: node.href });\n        });\n      } else {\n        void logout(); //TODO what if the logout only changed the anchor? but what's the usecase for that?\n      }\n    }\n\n    dompack.addDocEventListener(node, \"click\", event => handleLogoutClick(event));\n  });\n\n  dompack.onDomReady(() => {\n    if (\"$wh$wrdauth\" in window) {\n      console.error(\"Both setupWRDAuth from @webhare/frontend and @mod-wrd/js/auth are present in this page. Mixing these is not supported!\");\n    }\n  });\n\n  refreshLoginStatus();\n}\n\nfunction failLogin(message: string, response: { code: LoginErrorCode; data: string }, form: HTMLFormElement) {\n  const evtdetail = {\n    message: message,\n    code: response.code,\n    data: response.data\n  };\n\n  const cancelled = !dompack.dispatchCustomEvent(form || document.documentElement, \"wh:wrdauth-loginfailed\", { bubbles: true, cancelable: true, detail: evtdetail });\n  if (!cancelled) {\n    //TODO depending on error we may need to change a different field?\n    const loginfield = dompack.qR<HTMLInputElement>(form, \"input[name=password]\");\n    loginfield.setCustomValidity(message);\n    // loginfield.reportValidity(); //this actually blocks wh-form error handling from showing the error in-page when so desired\n    loginfield.focus();\n  }\n}\n\n/** Retrieve userinfo if set by onFrontendUserInfo in your WRDAuth customizer */\nexport function getUserInfo<T extends object = object>(): T | null {\n  return isLoggedIn() ? getAuthLocalData()?.userInfo as T | null : null;\n}\n\nfunction getLoginTweaks(): LoginTweaks {\n  const tweaks: LoginTweaks = {\n    lang: dompack.getLang().tag\n  };\n\n  const urlvars = new URL(location.href);\n  if (urlvars.searchParams.has(\"wrdauth_limit_expiry\"))\n    tweaks.limitExpiry = parseInt(urlvars.searchParams.get(\"wrdauth_limit_expiry\") || '0') || undefined;\n\n  return tweaks;\n}\n\n/** Implements the common username/password flows */\nexport async function login(username: string, password: string, options: LoginOptions = {}): Promise<LoginResult> {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  const result = await rpc(\"platform:authservice\").login(username, password, cookieName, dompack.getBrowser().triplet, { ...options, ...getLoginTweaks() });\n  if (result.loggedIn && !getAuthLocalData())\n    throw new Error(\"Login succeeded but no auth data was set in the cookie\");\n\n  return result;\n}\n\n/** Execute and verify cookie clearance to prepare for logging out */\nasync function doLogout() {\n  const cookieName = getCookieName();\n  if (!cookieName)\n    throw new Error(\"WRDAuth not initialized, please call setupWRDAuth first and ensure this page has a <wrdauth> rule\");\n\n  await rpc(\"platform:authservice\").logout(cookieName, dompack.getBrowser().triplet);\n\n  if (getAuthLocalData())\n    throw new Error(\"Logged out but we still have auth data in the cookie\");\n}\n\n/** Logout the current user */\nexport async function logout() {\n  await doLogout();\n  console.log(\"Reloading to process the new logged out status\");\n  navigateTo({ type: \"reload\" }); //TODO put this behind a 'login state change' event\n}\n\nexport interface MyService {\n  startLogin2(urlpath: string, tag: string, options: ToSnakeCase<SSOLoginOptions>): Promise<NavigateInstruction>;\n}\n\ninterface SSOLoginOptions {\n  /** @deprecated use prompt: \"none\" from WH6.0 up */\n  passive?: boolean;\n  /** Set the prompt flag for the authorize request */\n  prompt?: OAuth2PromptFlag;\n}\n\nexport function startSSOLogin(tag: string, options?: SSOLoginOptions): Promise<void> {\n  const client = createClient<MyService>(\"wrd:auth\");\n\n  if (options?.passive)\n    options = { prompt: \"none\", ...options, passive: undefined }; //force prompt to none in passive mode, and remove the passive flag since it doesn't mean anything to the server\n\n  const defer = Promise.withResolvers<void>();\n\n  //Launch SSO login for the current page.\n  //TODO also pass getLoginTweaks() at least to OIDC logins as soon as we've ported this to authservice\n  client.startLogin2(location.pathname + location.search + location.hash, tag, toSnakeCase(options) || {}).then(instr => {\n    //we leave the promise unresolved so any busy layers stay active during the actual redirect\n    //TODO can we have navigateTo detect failed navigations so we can throw ?\n    navigateTo(instr);\n  }).catch((e: Error) => {\n    defer.reject(e);\n  });\n\n  return defer.promise;\n}\n\n/** Configure WebHare external auth buttons (even hidden ones) to listen for bookmarklet login requests */\nexport function setupWebHareSSOTrigger(): void {\n  window.triggerWebHareSSO = startSSOLogin;\n}\n","import { qSA } from \"@webhare/dompack\";\nimport { debugFlags } from \"@webhare/env\";\nimport type { FormAnalyticsEvent } from \"@webhare/forms\";\nimport type { DataLayerEntry } from \"./gtm-types\";\nimport { omit } from \"@webhare/std\";\n\ndeclare global {\n  interface Window {\n    /** The google tag manager (GTM) datalayer */\n    dataLayer: DataLayerEntry[]; //technically window.dataLayer may not exist and should be optional, but we already used to declare it as existing from gtm.ts\n  }\n  //It's safer to access dataLayer through globalThis, which will always be available in all environments unlike 'window'\n  var dataLayer: DataLayerEntry[] | undefined;\n}\n\n//ADDME if we ever figure out a bundler trick to flush this command to the top of all imports/loads, that would be great (we could consider *ALWAYS* putting this in the generated startup code, or we'd need to do a tree pre-walk to see if gtm.es is loaded anywhere)\n(globalThis as unknown as Window).dataLayer ||= [];\nlet lastSeen: DataLayerEntry | undefined;\n\nfunction showDataLayerUpdates() {\n  if (!globalThis.dataLayer)\n    return; //not set up (yet?)\n\n  if (debugFlags.anl)\n    globalThis.dataLayer.slice(globalThis.dataLayer.indexOf(lastSeen!) + 1).forEach(entry => console.log(\"[anl] dataLayer.push:\", entry));\n\n  lastSeen = globalThis.dataLayer[globalThis.dataLayer.length - 1];\n}\n\n/** Push to the dataLayer\n * @param vars - The variables to push\n * @param options - Options for the push\n *   timeout Time before any eventCallback is forcibly called (default 200ms)\n*/\nexport function pushToDataLayer(vars: DataLayerEntry, options?: { timeout?: number }) {\n  if (vars.eventCallback) { //we'll wrap the callback into a promise to ensure it's only invoked once\n    const savecallback = vars.eventCallback;\n    let newcallback: () => void;\n    void (new Promise<void>(resolve => newcallback = resolve)).then(() => savecallback());\n    setTimeout(() => newcallback, options?.timeout || 200);\n  }\n\n  globalThis.dataLayer?.push(vars);\n  showDataLayerUpdates();\n}\n\nfunction collectFormValues(formnode: HTMLFormElement): Record<string, unknown> {\n  const donefields: Record<string, boolean> = {};\n  const outdata: Record<string, unknown> = {};\n\n  const multifields = qSA<HTMLInputElement>(formnode, 'input[type=radio], input[type=checkbox]');\n  for (const multifield of multifields) {\n    if (!multifield.name || donefields[multifield.name])\n      continue; //we did this one\n\n    donefields[multifield.name] = true;\n\n    let idx = 0;\n    const values = [];\n    const labels = [];\n    const checkboxes = multifields.filter(node => node.name === multifield.name);\n\n    for (const node of checkboxes.filter(cbox => cbox.checked)) {\n      const keyname = 'form_' + multifield.name + (idx ? '_' + idx : '');\n      let labelsfornode = node.dataset.gtmTag || qSA(`label[for=\"${CSS.escape(node.id)}\"]`).map(labelnode => labelnode.textContent).filter(labelnode => Boolean(labelnode)).join(' ');\n      labelsfornode = labelsfornode.trim(); //TODO normalize whitespace\n      outdata[keyname] = node.value;\n      outdata[keyname + '_label'] = labelsfornode;\n\n      ++idx;\n      values.push(node.value);\n      labels.push(labelsfornode);\n    }\n\n    if (values.length) {\n      const allkeyname = 'form_' + multifield.name + '_all';\n      outdata[allkeyname] = values.join(';');\n      outdata[allkeyname + '_label'] = labels.join(';');\n    }\n  }\n\n  for (const field of formnode.querySelectorAll<HTMLSelectElement | HTMLInputElement>('input:not([type=radio]):not([type=checkbox]),select,textarea')) {\n    if (!field.name || donefields[field.name])\n      continue;\n\n    donefields[field.name] = true;\n\n    const val = field.value;\n    outdata['form_' + field.name] = val;\n    if (field.matches('select')) {\n      const opt = (field as HTMLSelectElement).options[(field as HTMLSelectElement).selectedIndex];\n      if (opt)\n        outdata['form_' + field.name + '_label'] = opt.dataset.gtmTag || opt.textContent;\n    }\n  }\n  return outdata;\n}\n\n/** Setup the dataLayer */\nlet didinit: boolean | undefined;\nexport function setupGTM() {\n  if (!didinit) {\n    didinit = true;\n    if (debugFlags.anl)\n      setInterval(showDataLayerUpdates, 100);\n  }\n}\n\n/** Setup dataLayer events for form analytics events\n * @param options - Options for the form analytics setup\n     - `eventPrefix`. Prefix to use. Default is `wh-platform:form_` but existing integrations may (also) require `publisher:form`\n*/\nexport function setupFormAnalyticsForGTM(options?: { eventPrefix: string }): void {\n  setupGTM(); //ensurse the GTM basics are installed\n\n  addEventListener(\"wh:form-analytics\", (e: FormAnalyticsEvent) => {\n    //we use the same prefixing as pxl events would\n    const entry: DataLayerEntry = {\n      event: `${options?.eventPrefix || \"platform:form_\"}${e.detail.event}`\n    };\n\n    for (const [key, val] of Object.entries(e.detail))\n      if (key !== \"event\" && [\"string\", \"number\", \"boolean\"].includes(typeof val))\n        entry[`formmeta_${key}`] = val;\n\n    const form = e.target as HTMLFormElement | undefined;\n    if (form?.dataset.gtmSubmit) {\n      //When set, we push both the form: variable in gtmSubmit and the current form field avlues\n      Object.assign(entry, JSON.parse(form.dataset.gtmSubmit));\n      Object.assign(entry, collectFormValues(form));\n    }\n\n    pushToDataLayer(entry);\n  });\n}\n\nfunction processClickDataLayerTags(event: MouseEvent) {\n  const entry: Record<string, unknown> = {};\n\n  for (let node = event.target as HTMLElement | undefined | null; node; node = node?.parentElement)\n    for (const attr of node.attributes)\n      if (attr.nodeName.startsWith(\"data-wh-datalayer-onclick-\")) {\n        const key = attr.nodeName.substring(26);\n        if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n          entry[key] = attr.nodeValue || \"\";\n      } else if (attr.nodeName === \"data-wh-datalayer-onclick\") { //JSON setter\n        const data = JSON.parse(attr.nodeValue!);\n        for (const [key, value] of Object.entries(data))\n          if (key !== \"__proto__\" && !(key in entry)) //as we're working upwards, don't overwrite already set keys\n            entry[key] = value;\n      }\n\n  if (Object.keys(entry).length)\n    pushToDataLayer(entry as DataLayerEntry);\n}\n\n/** Setup support for data-wh-datalayer-onclick-xxx=\"yyy\" attributes. When clicking an element with these attributes the JSON from the attribute and all parents are merged together and pushed to the dataLayer  */\nexport function setupDataLayerTags() {\n  //we capture so we can also simply set variables for any existing GTM handlers\n  window.addEventListener(\"click\", processClickDataLayerTags, { capture: true });\n}\n\n/** Get the current variables in the GTM datalayer\n * @param win - The window to get the dataLayer from (default: current window)\n * @return The current variables in the GTM datalayer, merged together from all entries. Note that this is a snapshot and won't update as the dataLayer changes\n*/\nexport function getCurrentDataLayerVariables<DataLayerFormat extends object = Record<string, unknown>>(win: Window = window): DataLayerFormat {\n  const state: DataLayerFormat = {} as DataLayerFormat;\n  if (win.dataLayer)\n    win.dataLayer.forEach(entry =>\n      Object.assign(state, structuredClone(omit(entry, [\"event\", \"eventCallback\", \"gtm.uniqueEventId\"]))));\n  return state;\n}\n","/* To verify tree shaking viability, try:\n   whcd\n   cd whtree\n   echo 'import \"@webhare/frontend\"' | node_modules/.bin/esbuild --loader:.css=empty --tsconfig=tsconfig.json --bundle --minify\n*/\n\n// This gets TypeScript to refer to us by our @webhare/... name in auto imports:\ndeclare module \"@webhare/frontend\" {\n}\n\nimport { onDomReady } from \"@webhare/dompack\";\nexport { frontendConfig, getFrontendData, getSiteRoot } from \"./init\";\nexport { startSSOLogin, login, setupWRDAuth, isLoggedIn, logout, getUserInfo, setupWebHareSSOTrigger } from \"./auth\";\nexport { loadAssetPack, setupAuthorMode, type AuthorModeOptions } from \"./authormode\";\nexport { setPxlOptions, sendPxl, getPxlUserId, getPxlSessionId, setupFormAnalytics, type PxlData } from \"./pxl\";\nexport { getRemoteIPAddress, getGeoIPInfo, type GetIPInfoOptions, type GeoIPInfoResult } from \"./analytics\";\nexport { setupGTM, setupFormAnalyticsForGTM, pushToDataLayer, setupDataLayerTags, getCurrentDataLayerVariables } from \"./gtm\";\nexport { setupLinksInNewWindow, type LinkOpenOptions } from \"./linkhandler\";\n\nexport type * from \"./gtm-types\";\n\n// we shouldn't deprecate navigateTo exported from frontend. in fact it makes more sense to export it from frontend than env as it's browser-only\nexport { navigateTo } from \"@webhare/env\";\n\n/** Registry for data we receive from the backend */\nexport interface FrontendDataTypes {\n}\n\n/** Registry for expected PXL formats */\nexport interface PxlDataTypes {\n}\n\n/** Test whether the current page is being iframed in the WebHare test framework */\nexport function isInTestFramework(): boolean {\n  if (window.top !== window) { //in a frame\n    try {\n      if ((window.top as { __testframework?: unknown })?.__testframework)\n        return true;//we're inside a testframe, pretend to be the parent\n    } catch (ignore) {\n    }\n  }\n  return false;\n}\n\nfunction postRenderChecks() {\n  const log = document.getElementById(\"wh-console-log\");\n  if (log) {\n    const logtext = atob(log.textContent || \"\");\n    console.group(\"[etr] Server-side console output\");\n    console.log(logtext);\n    console.groupEnd();\n  }\n}\n\nonDomReady(postRenderChecks);\n","<template>\n  <header class=\"hdr\">\n    <RouterLink class=\"hdr__brand\" :to=\"{ name: 'tools' }\" aria-label=\"Tech_42 Tools\">\n      <Tech42Logo class=\"hdr__logo\" />\n      <span class=\"hdr__name\">Tools</span>\n    </RouterLink>\n\n    <span v-if=\"toolName\" class=\"hdr__sep\">/</span>\n    <span v-if=\"toolName\" class=\"hdr__tool\">{{ toolName }}</span>\n\n    <span class=\"hdr__spacer\" />\n\n    <RouterLink v-if=\"toolName\" class=\"hdr__link\" :to=\"{ name: 'tools' }\">Alle tools</RouterLink>\n    <span v-if=\"user\" class=\"hdr__user\">{{ user.name || user.email }}</span>\n    <button type=\"button\" class=\"hdr__logout\" @click=\"onLogout\">Uitloggen</button>\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport Tech42Logo from \"./Tech42Logo.vue\";\nimport { api } from \"../lib/api\";\nimport { logout } from \"../lib/runtime\";\nimport { useTools } from \"../lib/useTools\";\n\nconst route = useRoute();\nconst { tools } = useTools();\n// A tool's own route is named after it; a sub-route of a tool (the gist editor)\n// says which tool it belongs to in meta.tool, so the breadcrumb keeps naming the\n// tool instead of going blank one level down.\nconst toolKey = computed(() =>\n  typeof route.meta.tool === \"string\" ? route.meta.tool : String(route.name ?? \"\"));\n// Blank until the list arrives, and blank for a route no tool claims. The\n// breadcrumb is decoration; a header that waits for it would be worse.\nconst toolName = computed(() =>\n  tools.value.find((t) => t.kind === \"route\" && t.route === toolKey.value)?.name ?? \"\");\n\nconst user = ref<{ name: string; email: string } | null>(null);\nonMounted(async () => {\n  // Also the cheapest \"is my session actually alive\" probe: a dead cookie leaves\n  // the name blank rather than breaking the header.\n  try { user.value = await api.whoAmI(); } catch { user.value = null; }\n});\n\nasync function onLogout() {\n  // logout() talks to the server and can fail on a session that is already gone,\n  // so reload either way: a header stuck on \"Uitloggen\" is worse than a lost\n  // cookie.\n  try { await logout(); } finally { location.reload(); }\n}\n</script>\n\n<style scoped>\n.hdr {\n  position: sticky;\n  top: 0;\n  z-index: 10;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  padding: 10px 20px;\n  border-bottom: 1px solid var(--border);\n  background: var(--card);\n}\n/* Baseline, not centre: the wordmark and the product label are one line of\n   type, and centring them on the SVG box would float the label. */\n.hdr__brand {\n  display: flex;\n  align-items: baseline;\n  gap: 10px;\n  color: inherit;\n  text-decoration: none;\n}\n.hdr__logo { height: 16px; color: var(--foreground); }\n.hdr__name { font-weight: var(--fw-label); color: var(--muted-foreground); }\n.hdr__sep { color: var(--muted-foreground); }\n.hdr__tool { font-weight: var(--fw-label); }\n.hdr__spacer { flex: 1; }\n/* The one true link on the page, so it carries the accent as text. Orange TEXT\n   is a link; a filled orange would make it a button. */\n.hdr__link {\n  color: var(--primary-hover);\n  font-size: var(--fs-body-s);\n  text-decoration: none;\n}\n.hdr__link:hover { text-decoration: underline; }\n.hdr__user {\n  font-size: var(--fs-body-s);\n  color: var(--muted-foreground);\n}\n.hdr__logout {\n  height: 32px;\n  padding: 0 14px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-s);\n  font-weight: var(--fw-label);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.hdr__logout:hover { background: var(--hover); }\n.hdr__logout:active { opacity: 0.86; }\n</style>\n","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createStaticVNode as _createStaticVNode, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"logo\",\n  viewBox: \"0 0 506 104\",\n  fill: \"currentColor\",\n  role: \"img\",\n  \"aria-label\": \"Tech_42\"\n}\n\nexport function render(_ctx, _cache) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" The Tech_42 wordmark, the same paths hourly42 ships, so the estate has one\\n       logo rather than a redrawing per app. fill=\\\"currentColor\\\" means CSS colour\\n       drives it: off-white on the dark green, per the brand. \"),\n    (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n      _createStaticVNode(\"<path d=\\\"M24.7736 16.6606H0V1.40039H24.7736L24.7736 16.6606L32.4761 9.03047L40.1787 1.40039H66.1113V16.6606H41.2411V86.8283H24.7736V16.6606Z\\\" data-v-53bef2f9></path><path d=\\\"M75.2866 1.40039H132.657V16.6606H91.8024V35.3494H128.89V50.2233H91.8024V71.5682H132.657V86.8283H75.2866V1.40039Z\\\" data-v-53bef2f9></path><path d=\\\"M139.949 51.4307V36.7983C139.949 13.4735 154.582 0.338135 176.071 0.338135C197.561 0.338135 211.566 12.3145 212.194 33.0316H195.726C195.243 22.166 188.531 16.1778 176.071 16.1778C163.612 16.1778 156.417 23.2767 156.417 36.7983V51.4307C156.417 64.9524 163.274 72.679 176.071 72.679C188.144 72.679 195.002 66.5943 195.726 56.2116H212.194C211.228 76.4941 196.837 87.9392 176.071 87.9392C155.306 87.9392 139.949 74.7556 139.949 51.4307Z\\\" data-v-53bef2f9></path><path d=\\\"M275.649 50.9476H240.879V86.8283H224.411V1.40039H240.879V35.0597H275.649V1.40039H292.116V86.8283H275.649V50.9476Z\\\" data-v-53bef2f9></path><path d=\\\"M304.334 90.1123H366.679V103.634H304.334V90.1123Z\\\" data-v-53bef2f9></path><path d=\\\"M414.149 69.7331H372.763V54.4729L399.372 1.40039H429.989V54.4729H441.482V69.7331H429.989V86.8283H414.101V69.7331H414.149ZM414.149 54.4729V4.44277L389.376 54.4729H414.149Z\\\" data-v-53bef2f9></path><path d=\\\"M447.809 57.1773L478.184 40.0821C483.206 37.2812 488.18 33.1281 488.18 26.5604C488.18 21.5381 484.897 15.2119 474.997 15.2119C465.097 15.2119 461.475 22.6488 461.572 29.0233H446.312C446.312 10.4793 458.288 0 474.997 0C494.893 0 504.648 12.7973 504.648 26.6087C504.648 37.2329 499.626 45.0561 485.621 52.7345L450.851 71.6648H506V86.925H447.809V57.2739V57.1773Z\\\" data-v-53bef2f9></path>\", 7)\n    ])))\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","const script = {};import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/Tech42Logo.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/Tech42Logo.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/Tech42Logo.vue\";script.__scopeId = \"data-v-53bef2f9\";export default script;","import { rpc as createRpcClient, type OmitRPCContextArgs } from \"@webhare/rpc\";\nimport type { PublicRPC } from \"@mod-tech42_tools/js/public-rpc\";\n\n/**\n * Canonical @webhare/rpc client for this module's public service:\n * - typed against PublicRPC (the leading `context` arg stripped)\n * - auto-adds ?pathname=location.pathname so the router resolves the\n *   siteprofile <wrdauth> rule for cookie-based auth (a raw fetch does not)\n *\n * A 401 means the session died while the tab was open. There is no dialog for\n * it: this app polls every few seconds, so the panels would report the refusal\n * once a second. Instead the shell watches `.wh-wrdauth--isloggedin` and the\n * login form comes back on the next class change; a panel error is enough in the\n * meantime.\n */\nexport const api = createRpcClient<OmitRPCContextArgs<typeof PublicRPC>>(\"tech42_tools:public\", {\n  baseUrl: location.origin,\n});\n","import { ref } from \"vue\";\nimport { api } from \"./api\";\nimport { errorMessage } from \"./errors\";\nimport type { ToolEntry } from \"@mod-tech42_tools/js/public-rpc\";\n\n/**\n * The picker's entries, read from the site over RPC (js/internal/tools.ts).\n *\n * State lives at module level, so the picker and the header breadcrumb share one\n * fetch instead of asking twice for the same list. Fetched once per page load:\n * the shell only mounts after login and a tool is added in the CMS, not here, so\n * there is nothing to poll for.\n */\nconst tools = ref<ToolEntry[]>([]);\nconst loading = ref(true);\nconst error = ref(\"\");\nlet started = false;\n\nasync function load() {\n  try {\n    tools.value = await api.listTools();\n  } catch (e) {\n    error.value = errorMessage(e, \"De tools konden niet worden opgehaald.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nexport function useTools() {\n  if (!started) {\n    started = true;\n    void load();\n  }\n  return { tools, loading, error };\n}\n","/** The readable half of whatever was thrown, with a fallback for the rest. */\nexport function errorMessage(error: unknown, fallback: string): string {\n  if (error instanceof Error && error.message) return error.message;\n  if (typeof error === \"string\" && error) return error;\n  return fallback;\n}\n","import { createVNode as _createVNode, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"hdr\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"hdr__sep\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"hdr__tool\"\n}\nconst _hoisted_4 = {\n  key: 3,\n  class: \"hdr__user\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_RouterLink = _resolveComponent(\"RouterLink\")\n\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createVNode(_component_RouterLink, {\n      class: \"hdr__brand\",\n      to: { name: 'tools' },\n      \"aria-label\": \"Tech_42 Tools\"\n    }, {\n      default: _withCtx(() => [\n        _createVNode($setup[\"Tech42Logo\"], { class: \"hdr__logo\" }),\n        _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"hdr__name\" }, \"Tools\", -1 /* CACHED */))\n      ]),\n      _: 1 /* STABLE */,\n      __: [0]\n    }),\n    ($setup.toolName)\n      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \"/\"))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.toolName)\n      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString($setup.toolName), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    _cache[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"hdr__spacer\" }, null, -1 /* CACHED */)),\n    ($setup.toolName)\n      ? (_openBlock(), _createBlock(_component_RouterLink, {\n          key: 2,\n          class: \"hdr__link\",\n          to: { name: 'tools' }\n        }, {\n          default: _withCtx(() => _cache[1] || (_cache[1] = [\n            _createTextVNode(\"Alle tools\", -1 /* CACHED */)\n          ])),\n          _: 1 /* STABLE */,\n          __: [1]\n        }))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.user)\n      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString($setup.user.name || $setup.user.email), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: \"hdr__logout\",\n      onClick: $setup.onLogout\n    }, \"Uitloggen\")\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AppHeader.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AppHeader.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AppHeader.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AppHeader.vue\";script.__scopeId = \"data-v-a640334a\";export default script;","<template>\n  <div class=\"auth\">\n    <div class=\"auth__col\">\n      <div class=\"auth__brand\">\n        <Tech42Logo class=\"auth__logo\" />\n        <span class=\"auth__product\">Tools</span>\n      </div>\n\n      <div class=\"auth__intro\">\n        <h1 class=\"auth__title\">Inloggen</h1>\n        <p class=\"auth__sub\">Eén login, daarachter alle tools.</p>\n      </div>\n\n      <div v-if=\"accounts.length\" class=\"auth__hint\">\n        <span>Ontwikkelomgeving, testaccounts (wachtwoord <code>{{ accounts[0].password }}</code>):</span>\n        <button\n          v-for=\"account in accounts\"\n          :key=\"account.login\"\n          type=\"button\"\n          class=\"auth__account\"\n          :class=\"{ 'auth__account--on': email === account.login }\"\n          :disabled=\"loggingIn\"\n          @click=\"useAccount(account)\"\n        >\n          <code>{{ account.login }}</code>\n          <span class=\"auth__account-label\">{{ account.label }}</span>\n        </button>\n      </div>\n\n      <form\n        ref=\"form\"\n        class=\"wh-wrdauth__loginform auth__form\"\n        method=\"post\"\n        action=\"javascript:\"\n        @submit=\"onLoginSubmit\"\n      >\n\n        <p v-if=\"errorMessage\" class=\"auth__error\">{{ errorMessage }}</p>\n\n        <!-- type=\"button\": this must not submit the wrdauth form. The platform\n             handles the whole Google round trip and reloads this page when done. -->\n        <button\n          v-if=\"googleAvailable\"\n          type=\"button\"\n          class=\"auth__google\"\n          :disabled=\"startingGoogle\"\n          @click=\"onGoogleLogin\"\n        >\n          <svg class=\"auth__google-icon\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n            <path fill=\"#4285F4\" d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.07 5.07 0 0 1-2.21 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1Z\" />\n            <path fill=\"#34A853\" d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06a6.5 6.5 0 0 1-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23Z\" />\n            <path fill=\"#FBBC05\" d=\"M5.84 14.09a6.6 6.6 0 0 1 0-4.18V7.07H2.18a11 11 0 0 0 0 9.86l3.66-2.84Z\" />\n            <path fill=\"#EA4335\" d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15A10.98 10.98 0 0 0 12 1 11 11 0 0 0 2.18 7.07l3.66 2.84A6.5 6.5 0 0 1 12 5.38Z\" />\n          </svg>\n          <span>{{ startingGoogle ? \"Google openen…\" : \"Inloggen met Google\" }}</span>\n        </button>\n\n        <div v-if=\"googleAvailable\" class=\"auth__divider\"><span>of</span></div>\n\n        <label class=\"auth__field\">\n          <span class=\"auth__label\">E-mail</span>\n          <input v-model=\"email\" name=\"login\" type=\"email\" required autocomplete=\"email\" class=\"auth__input\" />\n        </label>\n\n        <label class=\"auth__field\">\n          <span class=\"auth__label\">Wachtwoord</span>\n          <input v-model=\"password\" name=\"password\" type=\"password\" required autocomplete=\"current-password\" class=\"auth__input\" />\n        </label>\n\n        <label class=\"auth__persist\">\n          <input v-model=\"rememberMe\" name=\"persistent\" type=\"checkbox\" />\n          <span>Ingelogd blijven</span>\n        </label>\n\n        <button type=\"submit\" class=\"auth__submit\" :disabled=\"loggingIn\" :aria-busy=\"loggingIn\">\n          {{ loggingIn ? \"Bezig met inloggen…\" : \"Inloggen\" }}\n        </button>\n      </form>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\n// Login-only form. Failures arrive as the wh:wrdauth-loginfailed event that\n// setupWRDAuth dispatches. Clearing and then re-setting the error is what makes\n// a SECOND wrong password read as a new attempt: writing the same string twice\n// re-renders nothing, so the red box would just sit there unchanged.\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from \"vue\";\nimport Tech42Logo from \"./Tech42Logo.vue\";\nimport { getFrontendData, startSSOLogin } from \"../lib/runtime\";\nimport { GOOGLE_IDP_TAG } from \"../lib/google-idp\";\nimport { errorMessage as toErrorMessage } from \"../lib/errors\";\nimport { loginFailureMessage } from \"../lib/login-message\";\nimport { devAccounts, loginPrefill, type DevAccount } from \"../lib/login-prefill\";\n\n// Filled in on a developer machine only, and gated on the hostname the browser\n// is actually on rather than on a DTAP stage the server reports -- see\n// lib/login-prefill.ts for why that distinction matters.\nconst prefill = loginPrefill(window.location.hostname);\nconst accounts = devAccounts(window.location.hostname);\n\n// Google login only exists on servers where a provider is registered; the\n// backend says which, so the button never appears where clicking it would throw\n// \"No such method\".\nconst googleAvailable = computed(() => getFrontendData(\"tech42_tools:app\")?.googleLogin === true);\nconst startingGoogle = ref(false);\n\nconst errorMessage = ref(\"\");\nconst loggingIn = ref(false);\nconst MIN_LOGIN_BUSY_MS = 500;\nconst LOGIN_SAFETY_MS = 12_000;\nlet loginSubmittedAt = 0;\nlet failTimer: number | null = null;\nlet safetyTimer: number | null = null;\n\nconst EMAIL_KEY = \"tech42-tools-login-email\";\nconst REMEMBER_ME_KEY = \"tech42-tools-remember-me\";\n\nfunction readStored(key: string): string {\n  try { return localStorage.getItem(key) ?? \"\"; } catch { return \"\"; }\n}\n\nconst email = ref(prefill?.login ?? readStored(EMAIL_KEY));\nwatch(email, (value) => {\n  if (prefill) return; // the host decides here, so do not let a stored value win\n  try { localStorage.setItem(EMAIL_KEY, value.trim()); } catch { /* private mode */ }\n});\n\nconst password = ref(prefill?.password ?? \"\");\n\nconst rememberMe = ref(readStored(REMEMBER_ME_KEY) === \"true\");\nwatch(rememberMe, (on) => {\n  try { localStorage.setItem(REMEMBER_ME_KEY, String(on)); } catch { /* private mode */ }\n});\n\nconst form = useTemplateRef<HTMLFormElement>(\"form\");\n\n/** Fill in a test account and log in with it right away. requestSubmit, not\n * submit(): only the former fires the submit event setupWRDAuth listens to. */\nasync function useAccount(account: DevAccount) {\n  email.value = account.login;\n  password.value = account.password;\n  await nextTick();\n  form.value?.requestSubmit();\n}\n\nfunction clearTimers() {\n  if (failTimer !== null) { window.clearTimeout(failTimer); failTimer = null; }\n  if (safetyTimer !== null) { window.clearTimeout(safetyTimer); safetyTimer = null; }\n}\n\n// setupWRDAuth does the real auth on this same submit, so do NOT preventDefault:\n// both listeners fire, Vue's first because it was registered before the SDK's.\nfunction onLoginSubmit() {\n  clearTimers();\n  errorMessage.value = \"\";\n  loggingIn.value = true;\n  loginSubmittedAt = Date.now();\n  safetyTimer = window.setTimeout(() => {\n    safetyTimer = null;\n    if (!loggingIn.value) return;\n    loggingIn.value = false;\n    errorMessage.value = \"Inloggen duurt te lang. Controleer je verbinding en probeer het opnieuw.\";\n  }, LOGIN_SAFETY_MS);\n}\n\n// startSSOLogin redirects the whole page to Google, so on success the promise\n// stays pending and the busy state travels with the redirect. It only settles\n// when the redirect never happens, which is a real failure.\nasync function onGoogleLogin() {\n  clearTimers();\n  errorMessage.value = \"\";\n  startingGoogle.value = true;\n  try {\n    await startSSOLogin(GOOGLE_IDP_TAG);\n  } catch (e) {\n    startingGoogle.value = false;\n    errorMessage.value = toErrorMessage(e, \"Inloggen met Google is niet gelukt. Probeer het opnieuw of gebruik je wachtwoord.\");\n  }\n}\n\nfunction onLoginFailed(evt: Event) {\n  evt.preventDefault();\n  // The event carries the platform's own text AND the code. The code is what\n  // matters for our own refusal, because the customizer's sentence never\n  // survives the trip -- see lib/login-message.ts.\n  const detail = (evt as CustomEvent<{ message?: string; code?: string }>).detail;\n  const message = loginFailureMessage(detail?.code, detail?.message);\n  const wait = Math.max(0, MIN_LOGIN_BUSY_MS - (Date.now() - loginSubmittedAt));\n  clearTimers();\n  failTimer = window.setTimeout(() => {\n    failTimer = null;\n    errorMessage.value = message;\n    loggingIn.value = false;\n  }, wait);\n}\n\nonMounted(() => window.addEventListener(\"wh:wrdauth-loginfailed\", onLoginFailed));\nonBeforeUnmount(() => {\n  window.removeEventListener(\"wh:wrdauth-loginfailed\", onLoginFailed);\n  clearTimers();\n});\n</script>\n\n<style scoped>\n.auth {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  min-height: 100vh;\n  padding: 32px 24px;\n}\n.auth__col {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n  width: 100%;\n  max-width: 360px;\n}\n\n.auth__brand { display: flex; align-items: baseline; gap: 10px; }\n.auth__logo { height: 20px; color: var(--foreground); }\n.auth__product {\n  font-size: var(--fs-body-s);\n  font-weight: var(--fw-label);\n  color: var(--muted-foreground);\n}\n\n.auth__intro { display: flex; flex-direction: column; gap: 4px; }\n.auth__title { margin: 0; font-size: var(--fs-h-m); font-weight: var(--fw-heading); line-height: 1.1; }\n.auth__sub { margin: 0; font-size: var(--fs-body-s); color: var(--muted-foreground); }\n\n.auth__form { display: flex; flex-direction: column; gap: 12px; }\n\n/* A dashed hairline rather than a tint: this is scaffolding, not a status, and\n   it must not read as one of the coloured states below it. */\n.auth__hint {\n  margin: 0;\n  padding: 8px 10px;\n  border: 1px dashed var(--border);\n  border-radius: var(--radius-md);\n  font-size: var(--fs-body-xs);\n  color: var(--muted-foreground);\n}\n.auth__hint { display: flex; flex-direction: column; gap: 6px; }\n.auth__hint code { color: var(--foreground); }\n.auth__account {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: 4px 8px;\n  padding: 4px 6px;\n  border: 1px solid transparent;\n  border-radius: var(--radius-md);\n  background: none;\n  color: inherit;\n  font: inherit;\n  text-align: left;\n  cursor: pointer;\n}\n.auth__account:hover { background: var(--hover); }\n.auth__account--on { border-color: var(--border); }\n.auth__account-label { color: var(--muted-foreground); }\n\n/* Above the fields, not below the button: an error buried under the submit is\n   easy to miss. */\n.auth__error {\n  margin: 0;\n  padding: 10px 12px;\n  border: 1px solid var(--fire-border);\n  border-radius: var(--radius-md);\n  background: var(--fire-soft);\n  color: var(--fire);\n  font-size: var(--fs-body-s);\n}\n\n.auth__google {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  height: 48px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-m);\n  font-weight: var(--fw-label);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.auth__google:hover:not(:disabled) { background: var(--hover); }\n.auth__google:active:not(:disabled) { opacity: 0.86; }\n.auth__google:disabled { opacity: 0.55; cursor: not-allowed; }\n.auth__google-icon { flex: none; }\n\n.auth__divider {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  font-size: var(--fs-body-xs);\n  color: var(--muted-foreground);\n}\n.auth__divider::before,\n.auth__divider::after { content: \"\"; flex: 1; height: 1px; background: var(--border); }\n\n.auth__field { display: flex; flex-direction: column; gap: 6px; }\n.auth__label { font-size: var(--fs-body-s); font-weight: var(--fw-label); }\n.auth__input {\n  height: 48px;\n  padding: 0 14px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-m);\n  outline: none;\n  transition: border-color var(--dur-base) var(--ease);\n}\n.auth__input:focus { border-color: var(--ring); box-shadow: 0 0 0 2px var(--ring-soft); }\n\n.auth__persist {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: var(--fs-body-s);\n  color: var(--muted-foreground);\n  cursor: pointer;\n  user-select: none;\n}\n\n.auth__submit {\n  height: 48px;\n  margin-top: 4px;\n  border: 0;\n  border-radius: var(--radius-md);\n  background: var(--primary);\n  color: var(--primary-foreground);\n  font-size: var(--fs-body-m);\n  font-weight: var(--fw-label);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n/* Hover lightens to the brand's own on-background orange; press is opacity\n   only, because nothing in this brand moves on click. */\n.auth__submit:hover:not(:disabled) { background: var(--primary-hover); }\n.auth__submit:active:not(:disabled) { opacity: 0.86; }\n.auth__submit:disabled { opacity: 0.55; cursor: not-allowed; }\n</style>\n","/**\n * Identity of the Google OIDC registration, shared by the backend lookup and the\n * frontend button. Import-free so the Vue bundle can pull it in through the\n * frontend/lib bridge: the tag the button passes to startSSOLogin and the tag\n * the backend looks up are then literally the same string.\n */\n\n/**\n * wrdTag of the Google registration in system:usermgmt.\n *\n * NOT plain \"GOOGLE\": hourly42 already owns that tag on webwerf.webhare.net, and\n * a registration carries ONE redirect URI. The login cookie is set on the\n * response of the callback page and is host-only, so a callback landing on\n * hourly.tech42.nl would leave tools.tech42.nl logged out. Two registrations,\n * two hosts, one Google OAuth client with both URIs registered.\n */\nexport const GOOGLE_IDP_TAG = \"GOOGLE_TOOLS\";\n\n/** Google's OIDC discovery document, needed when creating the registration. */\nexport const GOOGLE_METADATA_URL = \"https://accounts.google.com/.well-known/openid-configuration\";\n","/**\n * What the login form says when WRDAuth refuses.\n *\n * WHY THIS EXISTS: an AuthCustomizer returns `{ code, error }`, and the platform\n * throws the `error` away -- `identity.ts:847` forwards only `result.code`, with\n * a source comment reading \"Maybe we'll reintroduce custom errors again in the\n * future\". So the customizer's Dutch sentence never reaches the browser and the\n * user reads the platform's generic text for that code instead.\n *\n * Everything the platform words well is left alone; only the code our own\n * customizer returns gets replaced.\n */\n\nconst GENERIC = \"Inloggen mislukt. Controleer je e-mail en wachtwoord.\";\n\n/**\n * Codes we override, and only those.\n *\n * `account-disabled` is what Tech42ToolsAuthCustomizer returns for \"no grant\" --\n * not because the account is disabled, but because it is the only code that also\n * produces a readable page on the Google path, where the platform prints its own\n * page and this function is never called (an unrecognized code is printed\n * literally there, so \"internal-error\" would appear on screen as that string).\n * A genuinely disabled account lands here too and reads the same sentence, which\n * is true for that person as well and points at the same person for help.\n */\nconst OVERRIDES: Record<string, string> = {\n  \"account-disabled\": \"Dit account heeft geen toegang tot Tech_42 Tools. Vraag Wouter om toegang.\",\n};\n\nexport function loginFailureMessage(code: string | undefined, platformMessage: string | undefined): string {\n  if (code && OVERRIDES[code]) return OVERRIDES[code];\n  return platformMessage || GENERIC;\n}\n","/** Credentials that the login form fills in for itself. */\nexport interface LoginPrefill {\n  login: string;\n  password: string;\n}\n\n/* Which hosts get a filled-in login form, and as whom.\n *\n * Two independent defences, because this string ends up in a bundle that anyone\n * can fetch from tools.tech42.nl.\n *\n * 1. Production is absent from the table. The gate is the host the browser is\n *    on, so the live app cannot hand out credentials even when a server reports\n *    the wrong DTAP stage or serves a stale published page. Adding a host here\n *    is the only way to opt one in.\n * 2. The account itself cannot plausibly exist on production. Reading the\n *    password out of the bundle is trivial and the hostname gate does nothing\n *    about that: it decides whether the form fills ITSELF in, not whether the\n *    credentials work. So the address deliberately names no person and no\n *    Tech_42 mailbox. Granting tech42_tools:login to something at\n *    beta.webhare.net on production would have to be a deliberate act, not an\n *    accident, which is exactly the property we want.\n *\n * A Map, not an object: a hostname is outside input, and an object lookup would\n * answer for inherited keys (\"toString\", \"constructor\") with something truthy.\n */\n/** A test account the login screen offers on a developer machine. */\nexport interface DevAccount extends LoginPrefill {\n  /** What the account is for, shown next to it. */\n  label: string;\n}\n\n/* The first is the one the form fills in. The second is a team member for the\n * Monday kick-off: a login counts as a person when its mailbox is their first\n * name (personForLogin in js/mondays/rules.ts), so it has to be called\n * \"wouter\"; the domain is still nobody's mailbox. Create both with\n * scripts/grant-access.ts (see CLAUDE.md, \"Lokaal ontwikkelen\"). */\nconst DEVELOPER_MACHINE: DevAccount[] = [\n  { login: \"techtools@beta.webhare.net\", password: \"test1234\", label: \"geen teamlid\" },\n  { login: \"wouter@beta.webhare.net\", password: \"test1234\", label: \"Wouter in de maandag kick-off\" },\n];\n\nconst ACCOUNTS_BY_HOST = new Map<string, DevAccount[]>([\n  [\"localhost\", DEVELOPER_MACHINE],\n  [\"127.0.0.1\", DEVELOPER_MACHINE],\n  [\"0.0.0.0\", DEVELOPER_MACHINE],\n]);\n\n/** The test accounts to offer on `hostname`; empty everywhere but a developer machine. */\nexport function devAccounts(hostname: string): DevAccount[] {\n  return ACCOUNTS_BY_HOST.get(hostname.toLowerCase()) ?? [];\n}\n\n/** The credentials to prefill on `hostname`, or null to leave the form empty. */\nexport function loginPrefill(hostname: string): LoginPrefill | null {\n  const first = devAccounts(hostname)[0];\n  return first ? { login: first.login, password: first.password } : null;\n}\n","import { createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withDirectives as _withDirectives, vModelCheckbox as _vModelCheckbox, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"auth\" }\nconst _hoisted_2 = { class: \"auth__col\" }\nconst _hoisted_3 = { class: \"auth__brand\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"auth__hint\"\n}\nconst _hoisted_5 = [\"disabled\", \"onClick\"]\nconst _hoisted_6 = { class: \"auth__account-label\" }\nconst _hoisted_7 = {\n  key: 0,\n  class: \"auth__error\"\n}\nconst _hoisted_8 = [\"disabled\"]\nconst _hoisted_9 = {\n  key: 2,\n  class: \"auth__divider\"\n}\nconst _hoisted_10 = { class: \"auth__field\" }\nconst _hoisted_11 = { class: \"auth__field\" }\nconst _hoisted_12 = { class: \"auth__persist\" }\nconst _hoisted_13 = [\"disabled\", \"aria-busy\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createVNode($setup[\"Tech42Logo\"], { class: \"auth__logo\" }),\n        _cache[3] || (_cache[3] = _createElementVNode(\"span\", { class: \"auth__product\" }, \"Tools\", -1 /* CACHED */))\n      ]),\n      _cache[11] || (_cache[11] = _createElementVNode(\"div\", { class: \"auth__intro\" }, [\n        _createElementVNode(\"h1\", { class: \"auth__title\" }, \"Inloggen\"),\n        _createElementVNode(\"p\", { class: \"auth__sub\" }, \"Eén login, daarachter alle tools.\")\n      ], -1 /* CACHED */)),\n      ($setup.accounts.length)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n            _createElementVNode(\"span\", null, [\n              _cache[4] || (_cache[4] = _createTextVNode(\"Ontwikkelomgeving, testaccounts (wachtwoord \", -1 /* CACHED */)),\n              _createElementVNode(\"code\", null, _toDisplayString($setup.accounts[0].password), 1 /* TEXT */),\n              _cache[5] || (_cache[5] = _createTextVNode(\"):\", -1 /* CACHED */))\n            ]),\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.accounts, (account) => {\n              return (_openBlock(), _createElementBlock(\"button\", {\n                key: account.login,\n                type: \"button\",\n                class: _normalizeClass([\"auth__account\", { 'auth__account--on': $setup.email === account.login }]),\n                disabled: $setup.loggingIn,\n                onClick: $event => ($setup.useAccount(account))\n              }, [\n                _createElementVNode(\"code\", null, _toDisplayString(account.login), 1 /* TEXT */),\n                _createElementVNode(\"span\", _hoisted_6, _toDisplayString(account.label), 1 /* TEXT */)\n              ], 10 /* CLASS, PROPS */, _hoisted_5))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"form\", {\n        ref: \"form\",\n        class: \"wh-wrdauth__loginform auth__form\",\n        method: \"post\",\n        action: \"javascript:\",\n        onSubmit: $setup.onLoginSubmit\n      }, [\n        ($setup.errorMessage)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString($setup.errorMessage), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createCommentVNode(\" type=\\\"button\\\": this must not submit the wrdauth form. The platform\\n             handles the whole Google round trip and reloads this page when done. \"),\n        ($setup.googleAvailable)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 1,\n              type: \"button\",\n              class: \"auth__google\",\n              disabled: $setup.startingGoogle,\n              onClick: $setup.onGoogleLogin\n            }, [\n              _cache[6] || (_cache[6] = _createStaticVNode(\"<svg class=\\\"auth__google-icon\\\" width=\\\"18\\\" height=\\\"18\\\" viewBox=\\\"0 0 24 24\\\" aria-hidden=\\\"true\\\" data-v-54fe6d54><path fill=\\\"#4285F4\\\" d=\\\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92a5.07 5.07 0 0 1-2.21 3.32v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.1Z\\\" data-v-54fe6d54></path><path fill=\\\"#34A853\\\" d=\\\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06a6.5 6.5 0 0 1-6.16-4.53H2.18v2.84A11 11 0 0 0 12 23Z\\\" data-v-54fe6d54></path><path fill=\\\"#FBBC05\\\" d=\\\"M5.84 14.09a6.6 6.6 0 0 1 0-4.18V7.07H2.18a11 11 0 0 0 0 9.86l3.66-2.84Z\\\" data-v-54fe6d54></path><path fill=\\\"#EA4335\\\" d=\\\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15A10.98 10.98 0 0 0 12 1 11 11 0 0 0 2.18 7.07l3.66 2.84A6.5 6.5 0 0 1 12 5.38Z\\\" data-v-54fe6d54></path></svg>\", 1)),\n              _createElementVNode(\"span\", null, _toDisplayString($setup.startingGoogle ? \"Google openen…\" : \"Inloggen met Google\"), 1 /* TEXT */)\n            ], 8 /* PROPS */, _hoisted_8))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.googleAvailable)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, _cache[7] || (_cache[7] = [\n              _createElementVNode(\"span\", null, \"of\", -1 /* CACHED */)\n            ])))\n          : _createCommentVNode(\"v-if\", true),\n        _createElementVNode(\"label\", _hoisted_10, [\n          _cache[8] || (_cache[8] = _createElementVNode(\"span\", { class: \"auth__label\" }, \"E-mail\", -1 /* CACHED */)),\n          _withDirectives(_createElementVNode(\"input\", {\n            \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.email) = $event)),\n            name: \"login\",\n            type: \"email\",\n            required: \"\",\n            autocomplete: \"email\",\n            class: \"auth__input\"\n          }, null, 512 /* NEED_PATCH */), [\n            [_vModelText, $setup.email]\n          ])\n        ]),\n        _createElementVNode(\"label\", _hoisted_11, [\n          _cache[9] || (_cache[9] = _createElementVNode(\"span\", { class: \"auth__label\" }, \"Wachtwoord\", -1 /* CACHED */)),\n          _withDirectives(_createElementVNode(\"input\", {\n            \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.password) = $event)),\n            name: \"password\",\n            type: \"password\",\n            required: \"\",\n            autocomplete: \"current-password\",\n            class: \"auth__input\"\n          }, null, 512 /* NEED_PATCH */), [\n            [_vModelText, $setup.password]\n          ])\n        ]),\n        _createElementVNode(\"label\", _hoisted_12, [\n          _withDirectives(_createElementVNode(\"input\", {\n            \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.rememberMe) = $event)),\n            name: \"persistent\",\n            type: \"checkbox\"\n          }, null, 512 /* NEED_PATCH */), [\n            [_vModelCheckbox, $setup.rememberMe]\n          ]),\n          _cache[10] || (_cache[10] = _createElementVNode(\"span\", null, \"Ingelogd blijven\", -1 /* CACHED */))\n        ]),\n        _createElementVNode(\"button\", {\n          type: \"submit\",\n          class: \"auth__submit\",\n          disabled: $setup.loggingIn,\n          \"aria-busy\": $setup.loggingIn\n        }, _toDisplayString($setup.loggingIn ? \"Bezig met inloggen…\" : \"Inloggen\"), 9 /* TEXT, PROPS */, _hoisted_13)\n      ], 544 /* NEED_HYDRATION, NEED_PATCH */)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LoginForm.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LoginForm.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LoginForm.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LoginForm.vue\";script.__scopeId = \"data-v-54fe6d54\";export default script;","<template>\n  <div class=\"toasts\" role=\"status\" aria-live=\"polite\">\n    <TransitionGroup name=\"toast\">\n      <div v-for=\"toast in toasts\" :key=\"toast.id\" class=\"toast\">\n        <div class=\"toast__content\">\n          <span class=\"toast__msg\">{{ toast.message }}</span>\n          <span v-if=\"toast.description\" class=\"toast__description\">{{ toast.description }}</span>\n        </div>\n        <button v-if=\"toast.canUndo\" class=\"toast__undo\" :title=\"undoHint\" @click=\"undoToasts.undo(toast.id)\">Ongedaan maken</button>\n        <button class=\"toast__close\" aria-label=\"Melding sluiten\" @click=\"undoToasts.dismiss(toast.id)\">✕</button>\n      </div>\n    </TransitionGroup>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\nimport { undoToasts, type UndoToast } from \"../lib/undo-toasts\";\n\n// The queue is a plain module (unit-testable without a browser), so the mirror\n// runs one way: it notifies, this component copies the list into a ref.\nconst toasts = ref<UndoToast[]>([]);\n\n// Spelled out on hover rather than printed on the button; the key itself is\n// handled with the other global shortcuts in App.vue.\nconst undoHint = /mac|iphone|ipad/i.test(navigator.userAgent) ? \"Cmd+Z\" : \"Ctrl+Z\";\nlet unsubscribe: (() => void) | null = null;\n\nfunction sync() {\n  toasts.value = undoToasts.toasts;\n}\n\n/**\n * Best effort on the way out: whatever the user already decided is committed\n * rather than dropped. The request may not survive the unload, which is why the\n * pending action is a delete and not something that would be worse to lose.\n */\nfunction onPageHide() {\n  undoToasts.flush();\n}\n\nonMounted(() => {\n  unsubscribe = undoToasts.subscribe(sync);\n  sync();\n  window.addEventListener(\"pagehide\", onPageHide);\n});\n\nonBeforeUnmount(() => {\n  unsubscribe?.();\n  window.removeEventListener(\"pagehide\", onPageHide);\n});\n</script>\n\n<style scoped>\n.toasts {\n  position: fixed;\n  right: 24px;\n  bottom: 24px;\n  /* Above the meeting dock (z-index 3) and any dialog: a toast about a row you\n     just deleted has to stay readable. */\n  z-index: 200;\n  display: flex;\n  flex-direction: column;\n  align-items: flex-end;\n  gap: 8px;\n  /* The strip spans the corner, so it must not eat clicks where it is empty. */\n  pointer-events: none;\n}\n.toast {\n  pointer-events: auto;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  max-width: min(520px, calc(100vw - 40px));\n  padding: 8px 8px 8px 18px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--card);\n  color: var(--foreground);\n  box-shadow: var(--shadow-overlay);\n  font-size: var(--fs-body-s);\n}\n.toast__content { min-width: 0; }\n.toast__msg {\n  display: block;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.toast__description {\n  display: block;\n  margin-top: 4px;\n  color: var(--muted-foreground);\n  overflow-wrap: anywhere;\n}\n.toast__undo {\n  flex-shrink: 0;\n  height: 26px;\n  padding: 0 12px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: inherit;\n  font-family: inherit;\n  font-size: var(--fs-body-xs);\n  font-weight: 500;\n  cursor: pointer;\n}\n.toast__undo:hover { background: var(--hover); }\n.toast__close {\n  flex-shrink: 0;\n  display: grid;\n  place-items: center;\n  width: 24px;\n  height: 24px;\n  border: 0;\n  border-radius: var(--radius-md);\n  background: none;\n  color: var(--foreground-subtle);\n  font-family: inherit;\n  font-size: 12px;\n  cursor: pointer;\n}\n.toast__close:hover { background: var(--hover); color: var(--foreground); }\n\n/* Fades only. The brand's motion rules allow a fade or a colour shift and\n   nothing else: no bounce, no spring, no scale-in, no slide. */\n.toast-enter-active, .toast-leave-active { transition: opacity var(--dur-fast) var(--ease); }\n.toast-enter-from, .toast-leave-to { opacity: 0; }\n\n@media (prefers-reduced-motion: reduce) {\n  .toast-enter-active, .toast-leave-active { transition: none; }\n}\n</style>\n","/**\n * Toasts that carry an undo, and the deferred action behind them.\n *\n * A destructive action that announces itself with a toast can afford to be\n * optimistic: the row leaves the screen at once and the actual call is held back\n * for a few seconds, so \"Ongedaan maken\" costs nothing but a cancelled timer. No\n * server round trip, no second record with a new id.\n *\n * The trade is that closing the tab inside the window carries out whatever was\n * still pending rather than dropping it (ToastHost flushes on pagehide).\n *\n * Ported from hourly42 (lib/undo-toasts.ts). Deliberately free of Vue imports so\n * the state machine is unit-testable without a browser; the component subscribes\n * and keeps its own ref.\n */\n\n/** How long an action stays undoable. */\nexport const UNDO_WINDOW_MS = 5000;\n\nexport type Unschedule = () => void;\nexport type Scheduler = (run: () => void, delayMs: number) => Unschedule;\n\nconst timerScheduler: Scheduler = (run, delayMs) => {\n  const handle = setTimeout(run, delayMs);\n  return () => clearTimeout(handle);\n};\n\n/** A toast as the UI sees it. */\nexport interface UndoToast {\n  readonly id: number;\n  readonly message: string;\n  readonly canUndo: boolean;\n  readonly description?: string;\n}\n\nexport interface ToastNoticeSpec {\n  /** What happened, past tense, as the user reads it. */\n  message: string;\n  description?: string;\n  /** Defaults to UNDO_WINDOW_MS. */\n  durationMs?: number;\n}\n\nexport interface UndoToastSpec extends ToastNoticeSpec {\n  /** Carried out once the undo window closes. */\n  commit: () => Promise<unknown> | unknown;\n  /** Puts the world back; runs only when the user undoes. */\n  undo: () => void;\n  /** commit() threw: the caller has to restore its own optimistic change and say so. */\n  onError: (error: unknown) => void;\n}\n\ninterface PendingToast {\n  toast: UndoToast;\n  spec: UndoToastSpec | ToastNoticeSpec;\n  cancel: Unschedule;\n}\n\nexport class UndoToastQueue {\n  #scheduler: Scheduler;\n  #pending = new Map<number, PendingToast>();\n  #listeners = new Set<() => void>();\n  #inFlight = new Set<Promise<void>>();\n  #nextId = 1;\n\n  constructor(scheduler: Scheduler = timerScheduler) {\n    this.#scheduler = scheduler;\n  }\n\n  /** The toasts on screen, oldest first. */\n  public get toasts(): UndoToast[] {\n    return [...this.#pending.values()].map((item) => item.toast);\n  }\n\n  /** Called on every change to the list; returns the unsubscribe. */\n  public subscribe(listener: () => void): () => void {\n    this.#listeners.add(listener);\n    return () => {\n      this.#listeners.delete(listener);\n    };\n  }\n\n  /** Show a toast and hold its action for the length of the undo window. */\n  public show(spec: UndoToastSpec | ToastNoticeSpec): number {\n    const id = this.#nextId++;\n    const cancel = this.#scheduler(() => this.#close(id, \"commit\"), spec.durationMs ?? UNDO_WINDOW_MS);\n    this.#pending.set(id, {\n      toast: { id, message: spec.message, description: spec.description, canUndo: \"undo\" in spec },\n      spec,\n      cancel,\n    });\n    this.#notify();\n    return id;\n  }\n\n  /**\n   * Take back the newest toast, for Cmd+Z / Ctrl+Z. Reports whether there was\n   * anything to take back, so the caller can leave the shortcut to the browser\n   * when there was not.\n   */\n  public undoLatest(): boolean {\n    const ids = this.toasts.filter((toast) => toast.canUndo).map((toast) => toast.id);\n    if (!ids.length)\n      return false;\n    this.undo(ids[ids.length - 1]);\n    return true;\n  }\n\n  /** The user took it back: drop the action and let the caller restore. */\n  public undo(id: number): void {\n    this.#close(id, \"undo\");\n  }\n\n  /** The user closed the toast, so they meant it: commit now. */\n  public dismiss(id: number): void {\n    this.#close(id, \"commit\");\n  }\n\n  /** Commit everything still waiting, for when the page is going away. */\n  public flush(): void {\n    for (const id of [...this.#pending.keys()])\n      this.#close(id, \"commit\");\n  }\n\n  /** Resolves once every commit started so far has settled. For tests. */\n  public async settled(): Promise<void> {\n    while (this.#inFlight.size)\n      await Promise.all([...this.#inFlight]);\n  }\n\n  #close(id: number, outcome: \"commit\" | \"undo\"): void {\n    const item = this.#pending.get(id);\n    // Already gone: a second Undo click, or a dismiss racing the timer, must not\n    // commit a second time.\n    if (!item)\n      return;\n    if (outcome === \"undo\" && !(\"undo\" in item.spec))\n      return;\n    item.cancel();\n    this.#pending.delete(id);\n    this.#notify();\n    if (outcome === \"undo\" && \"undo\" in item.spec) {\n      item.spec.undo();\n      return;\n    }\n    if (\"commit\" in item.spec)\n      this.#run(item.spec);\n  }\n\n  #run(spec: UndoToastSpec): void {\n    const running = (async () => {\n      try {\n        await spec.commit();\n      } catch (error) {\n        spec.onError(error);\n      }\n    })();\n    this.#inFlight.add(running);\n    void running.finally(() => this.#inFlight.delete(running));\n  }\n\n  #notify(): void {\n    for (const listener of this.#listeners)\n      listener();\n  }\n}\n\n/** The app's queue, shared by ToastHost and whoever shows a toast. */\nexport const undoToasts = new UndoToastQueue();\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, TransitionGroup as _TransitionGroup, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"toasts\",\n  role: \"status\",\n  \"aria-live\": \"polite\"\n}\nconst _hoisted_2 = { class: \"toast__content\" }\nconst _hoisted_3 = { class: \"toast__msg\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"toast__description\"\n}\nconst _hoisted_5 = [\"title\", \"onClick\"]\nconst _hoisted_6 = [\"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createVNode(_TransitionGroup, { name: \"toast\" }, {\n      default: _withCtx(() => [\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.toasts, (toast) => {\n          return (_openBlock(), _createElementBlock(\"div\", {\n            key: toast.id,\n            class: \"toast\"\n          }, [\n            _createElementVNode(\"div\", _hoisted_2, [\n              _createElementVNode(\"span\", _hoisted_3, _toDisplayString(toast.message), 1 /* TEXT */),\n              (toast.description)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, _toDisplayString(toast.description), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true)\n            ]),\n            (toast.canUndo)\n              ? (_openBlock(), _createElementBlock(\"button\", {\n                  key: 0,\n                  class: \"toast__undo\",\n                  title: $setup.undoHint,\n                  onClick: $event => ($setup.undoToasts.undo(toast.id))\n                }, \"Ongedaan maken\", 8 /* PROPS */, _hoisted_5))\n              : _createCommentVNode(\"v-if\", true),\n            _createElementVNode(\"button\", {\n              class: \"toast__close\",\n              \"aria-label\": \"Melding sluiten\",\n              onClick: $event => ($setup.undoToasts.dismiss(toast.id))\n            }, \"✕\", 8 /* PROPS */, _hoisted_6)\n          ]))\n        }), 128 /* KEYED_FRAGMENT */))\n      ]),\n      _: 1 /* STABLE */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ToastHost.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ToastHost.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ToastHost.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ToastHost.vue\";script.__scopeId = \"data-v-7917cf86\";export default script;","<template>\n  <!-- A whiteboard tool brings its own full-bleed header and canvas. -->\n  <RouterView v-if=\"isLoggedIn && route.meta.bare\" />\n  <div v-else-if=\"isLoggedIn\" class=\"shell\">\n    <AppHeader />\n    <main class=\"shell__main\">\n      <RouterView />\n    </main>\n  </div>\n  <LoginForm v-else />\n  <ToastHost />\n</template>\n\n<script setup lang=\"ts\">\nimport AppHeader from \"./components/AppHeader.vue\";\nimport LoginForm from \"./components/LoginForm.vue\";\nimport ToastHost from \"./components/ToastHost.vue\";\nimport { onBeforeUnmount, onMounted } from \"vue\";\nimport { useRoute } from \"vue-router\";\nimport { useWrdAuthState } from \"./lib/useWrdAuthState\";\nimport { undoToasts } from \"./lib/undo-toasts\";\n\n// The template is the gate the visitor sees; it is NOT the security boundary.\n// Every RPC method calls requireToolsUser itself, because /.wh/rpc/... stays\n// directly reachable whatever this renders.\nconst { isLoggedIn } = useWrdAuthState();\nconst route = useRoute();\n\n// Cmd/Ctrl-Z takes back the newest undoable toast, but only when the user is not\n// typing: in a field the browser's own undo wins.\nfunction onKey(evt: KeyboardEvent) {\n  if (evt.key !== \"z\" || !(evt.metaKey || evt.ctrlKey) || evt.shiftKey || evt.altKey) return;\n  const target = evt.target as HTMLElement | null;\n  if (target?.closest(\"input, textarea, select, [contenteditable]\")) return;\n  if (undoToasts.undoLatest()) evt.preventDefault();\n}\n\nonMounted(() => window.addEventListener(\"keydown\", onKey));\nonBeforeUnmount(() => window.removeEventListener(\"keydown\", onKey));\n</script>\n\n<style scoped>\n.shell {\n  display: flex;\n  flex-direction: column;\n  min-height: 100vh;\n}\n.shell__main {\n  flex: 1;\n  width: 100%;\n  max-width: 1400px;\n  margin: 0 auto;\n  padding: 20px;\n}\n</style>\n","import { onBeforeUnmount, onMounted, readonly, ref } from \"vue\";\n\nconst LOGGED_IN_CLASS = \"wh-wrdauth--isloggedin\";\n\n/**\n * Reactive WRDAuth state, driven by the `.wh-wrdauth--isloggedin` class that\n * setupWRDAuth() toggles on <html>. Read synchronously in the ref initializer so\n * the first render already reflects login state: no flash of the login form for\n * someone who arrives with a session.\n */\nexport function useWrdAuthState() {\n  const isLoggedIn = ref(document.documentElement.classList.contains(LOGGED_IN_CLASS));\n  let observer: MutationObserver | null = null;\n\n  function read() {\n    isLoggedIn.value = document.documentElement.classList.contains(LOGGED_IN_CLASS);\n  }\n\n  onMounted(() => {\n    read();\n    observer = new MutationObserver(read);\n    observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"class\"] });\n  });\n\n  onBeforeUnmount(() => {\n    observer?.disconnect();\n    observer = null;\n  });\n\n  return { isLoggedIn: readonly(isLoggedIn) };\n}\n","import { createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createVNode as _createVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 1,\n  class: \"shell\"\n}\nconst _hoisted_2 = { class: \"shell__main\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_RouterView = _resolveComponent(\"RouterView\")\n\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" A whiteboard tool brings its own full-bleed header and canvas. \"),\n    ($setup.isLoggedIn && $setup.route.meta.bare)\n      ? (_openBlock(), _createBlock(_component_RouterView, { key: 0 }))\n      : ($setup.isLoggedIn)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n            _createVNode($setup[\"AppHeader\"]),\n            _createElementVNode(\"main\", _hoisted_2, [\n              _createVNode(_component_RouterView)\n            ])\n          ]))\n        : (_openBlock(), _createBlock($setup[\"LoginForm\"], { key: 2 })),\n    _createVNode($setup[\"ToastHost\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/App.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/App.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/App.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/App.vue\";script.__scopeId = \"data-v-47f51409\";export default script;","// Hash-based router. The Publisher serves this webdesign under one fixed site\n// root; all in-app navigation lives in the URL hash so WebHare never sees (and\n// 404s on) an in-app path.\n\nimport { createRouter, createWebHashHistory, type RouteRecordRaw } from \"vue-router\";\n\nimport ToolsView from \"../views/ToolsView.vue\";\nimport AdaView from \"../views/AdaView.vue\";\nimport GistsListView from \"../views/GistsListView.vue\";\nimport GistEditorView from \"../views/GistEditorView.vue\";\nimport MondaysListView from \"../views/MondaysListView.vue\";\nimport MeetingView from \"../views/MeetingView.vue\";\n\nconst routes: RouteRecordRaw[] = [\n  { path: \"/\", name: \"tools\", component: ToolsView },\n  { path: \"/ada\", name: \"ada\", component: AdaView },\n  // The route name doubles as the tool key the picker links to\n  // (ROUTE_BY_FILETYPE in js/internal/tools.ts). A sub-route of a tool carries\n  // `meta.tool` instead, so the header breadcrumb keeps naming the tool.\n  { path: \"/gists\", name: \"gists\", component: GistsListView },\n  { path: \"/gists/new\", name: \"gist-new\", component: GistEditorView, props: { id: null }, meta: { tool: \"gists\" } },\n  { path: \"/gists/:id(\\\\d+)\", name: \"gist-detail\", component: GistEditorView, props: route => ({ id: Number(route.params.id) }), meta: { tool: \"gists\" } },\n  { path: \"/mondays\", name: \"mondays\", component: MondaysListView, meta: { bare: true } },\n  {\n    path: \"/mondays/:id(\\\\d+)/:step(people|finance|updates|focus|actions)?\",\n    name: \"monday\",\n    component: MeetingView,\n    props: route => ({ id: Number(route.params.id), step: String(route.params.step || \"people\") }),\n    meta: { tool: \"mondays\", bare: true },\n  },\n  // Anything else is a stale or mistyped link: back to the picker rather than a\n  // blank shell.\n  { path: \"/:pathMatch(.*)*\", redirect: { name: \"tools\" } },\n];\n\nexport const router = createRouter({\n  history: createWebHashHistory(),\n  routes,\n});\n","<template>\n  <div class=\"picker\">\n    <h1 class=\"picker__title\">Tools</h1>\n    <p class=\"picker__sub\">Kies waar je naartoe wilt.</p>\n\n    <p v-if=\"loading\" class=\"picker__state muted\">Bezig met laden…</p>\n    <p v-else-if=\"error\" class=\"picker__state picker__state--error\">{{ error }}</p>\n    <p v-else-if=\"!tools.length\" class=\"picker__state muted\">\n      Nog geen tools. Voeg ze toe in de CMS, in de map van deze site: een Ada-dashboard of een Link.\n    </p>\n\n    <div v-else class=\"picker__grid\">\n      <component\n        :is=\"tool.kind === 'link' ? 'a' : RouterLink\"\n        v-for=\"tool in tools\"\n        :key=\"tool.id\"\n        class=\"tool card\"\n        v-bind=\"tool.kind === 'link'\n          ? { href: tool.url, target: '_blank', rel: 'noopener noreferrer' }\n          : { to: { name: tool.route } }\"\n      >\n        <span class=\"tool__name\">\n          {{ tool.name }}<span v-if=\"tool.kind === 'link'\" class=\"tool__out\" aria-hidden=\"true\">↗</span>\n        </span>\n        <span class=\"tool__desc\">{{ tool.description }}</span>\n      </component>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { RouterLink } from \"vue-router\";\nimport { useTools } from \"../lib/useTools\";\n\n// The picker is the site's root folder, read over RPC (js/internal/tools.ts).\n// Reading it per page load rather than from frontend data is what makes a tool\n// added in the CMS appear without a republish.\nconst { tools, loading, error } = useTools();\n</script>\n\n<style scoped>\n.picker { max-width: 900px; }\n.picker__title { margin: 8px 0 4px; font-size: var(--fs-title); font-weight: var(--fw-heading); line-height: 1.1; }\n.picker__sub { margin: 0 0 24px; color: var(--muted-foreground); }\n.picker__state { margin: 0; font-size: var(--fs-body-s); }\n.picker__state--error { color: var(--fire); }\n\n.picker__grid {\n  display: grid;\n  gap: 12px;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n}\n\n.tool {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  padding: 18px;\n  color: inherit;\n  text-decoration: none;\n  cursor: pointer;\n  transition: border-color var(--dur-base) var(--ease), background-color var(--dur-base) var(--ease);\n}\n/* Hover lightens: the panel green steps up to the raised green, which is the\n   brand's own hovered-row step. The orange edge marks it as the thing you click. */\n.tool:hover { border-color: var(--primary); background: var(--secondary); }\n.tool:active { opacity: 0.86; }\n.tool__name { font-weight: var(--fw-heading); }\n/* Leaving the app is worth one glyph; a tile that opens a new tab should say so\n   before you click it, not after. */\n.tool__out { margin-left: 6px; color: var(--muted-foreground); }\n.tool__desc { font-size: var(--fs-body-s); color: var(--muted-foreground); }\n</style>\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, resolveDynamicComponent as _resolveDynamicComponent, mergeProps as _mergeProps, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"picker\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"picker__state muted\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"picker__state picker__state--error\"\n}\nconst _hoisted_4 = {\n  key: 2,\n  class: \"picker__state muted\"\n}\nconst _hoisted_5 = {\n  key: 3,\n  class: \"picker__grid\"\n}\nconst _hoisted_6 = { class: \"tool__name\" }\nconst _hoisted_7 = {\n  key: 0,\n  class: \"tool__out\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = { class: \"tool__desc\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _cache[0] || (_cache[0] = _createElementVNode(\"h1\", { class: \"picker__title\" }, \"Tools\", -1 /* CACHED */)),\n    _cache[1] || (_cache[1] = _createElementVNode(\"p\", { class: \"picker__sub\" }, \"Kies waar je naartoe wilt.\", -1 /* CACHED */)),\n    ($setup.loading)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, \"Bezig met laden…\"))\n      : ($setup.error)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString($setup.error), 1 /* TEXT */))\n        : (!$setup.tools.length)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, \" Nog geen tools. Voeg ze toe in de CMS, in de map van deze site: een Ada-dashboard of een Link. \"))\n          : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.tools, (tool) => {\n                return (_openBlock(), _createBlock(_resolveDynamicComponent(tool.kind === 'link' ? 'a' : $setup.RouterLink), _mergeProps({\n                  key: tool.id,\n                  class: \"tool card\"\n                }, { ref_for: true }, tool.kind === 'link'\n          ? { href: tool.url, target: '_blank', rel: 'noopener noreferrer' }\n          : { to: { name: tool.route } }), {\n                  default: _withCtx(() => [\n                    _createElementVNode(\"span\", _hoisted_6, [\n                      _createTextVNode(_toDisplayString(tool.name), 1 /* TEXT */),\n                      (tool.kind === 'link')\n                        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, \"↗\"))\n                        : _createCommentVNode(\"v-if\", true)\n                    ]),\n                    _createElementVNode(\"span\", _hoisted_8, _toDisplayString(tool.description), 1 /* TEXT */)\n                  ]),\n                  _: 2 /* DYNAMIC */\n                }, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */))\n              }), 128 /* KEYED_FRAGMENT */))\n            ]))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/ToolsView.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/ToolsView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/ToolsView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/ToolsView.vue\";script.__scopeId = \"data-v-d63b2d90\";export default script;","<template>\n  <div class=\"ada\">\n    <div class=\"ada__bar\">\n      <h1 class=\"ada__title\">\n        <span class=\"mark ada__mark\" :class=\"markClass\" /> Ada dashboard\n      </h1>\n      <span class=\"ada__spacer\" />\n      <label class=\"ada__check\">\n        <input v-model=\"auto\" type=\"checkbox\" />\n        <span>auto-verversen</span>\n      </label>\n      <select v-model=\"intervalMs\" class=\"ada__select\">\n        <option v-for=\"opt in INTERVALS\" :key=\"opt.value\" :value=\"opt.value\">{{ opt.label }}</option>\n      </select>\n      <button type=\"button\" class=\"ada__refresh\" :disabled=\"busy\" @click=\"refresh\">\n        {{ busy ? \"Bezig…\" : \"Ververs nu\" }}\n      </button>\n      <span v-if=\"updated\" class=\"ada__updated\">bijgewerkt {{ updated }}</span>\n    </div>\n\n    <section class=\"ada__section\">\n      <h2 class=\"section-title\">Storingen</h2>\n      <AdaProblemsPanel :data=\"problems\" @open-session=\"openSession\" />\n    </section>\n\n    <section class=\"ada__section\">\n      <h2 class=\"section-title\">pm2-status</h2>\n      <AdaPm2Panel :data=\"pm2\" />\n    </section>\n\n    <div class=\"ada__split\">\n      <section class=\"ada__col\">\n        <h2 class=\"section-title\">Webhook-events</h2>\n        <AdaEventsPanel :data=\"events\" />\n      </section>\n      <section class=\"ada__col\">\n        <h2 class=\"section-title\">Per-issue sessies</h2>\n        <AdaSessionsPanel :data=\"sessions\" @open=\"openSession\" />\n      </section>\n    </div>\n\n    <AdaSessionDialog\n      :issue=\"sessionIssue\"\n      :data=\"sessionData\"\n      :loading=\"sessionLoading\"\n      @close=\"closeSession\"\n      @show-everything=\"loadSession(true)\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport AdaEventsPanel from \"../components/AdaEventsPanel.vue\";\nimport AdaPm2Panel from \"../components/AdaPm2Panel.vue\";\nimport AdaProblemsPanel from \"../components/AdaProblemsPanel.vue\";\nimport AdaSessionDialog from \"../components/AdaSessionDialog.vue\";\nimport AdaSessionsPanel from \"../components/AdaSessionsPanel.vue\";\nimport { api } from \"../lib/api\";\nimport { errorMessage } from \"../lib/errors\";\nimport type {\n  EventsResponse,\n  Pm2Response,\n  ProblemsResponse,\n  SessionResponse,\n  SessionsResponse,\n} from \"../lib/types\";\n\nconst INTERVALS = [\n  { value: 3000, label: \"3s\" },\n  { value: 5000, label: \"5s\" },\n  { value: 10_000, label: \"10s\" },\n  { value: 30_000, label: \"30s\" },\n];\n\nconst EVENT_LIMIT = 300;\n\nconst problems = ref<ProblemsResponse | null>(null);\nconst pm2 = ref<Pm2Response | null>(null);\nconst events = ref<EventsResponse | null>(null);\nconst sessions = ref<SessionsResponse | null>(null);\nconst updated = ref(\"\");\nconst auto = ref(true);\nconst intervalMs = ref(5000);\nconst busy = ref(false);\n\nlet timer: number | null = null;\n\n// A failing panel reports its own reason rather than blanking the page: the\n// message from the server (\"De Mac Mini is niet bereikbaar: ...\") is the whole\n// point of this dashboard, so it must reach the screen.\nasync function load<T>(fetcher: () => Promise<unknown>, onError: (message: string) => T): Promise<T> {\n  try {\n    return await fetcher() as T;\n  } catch (err) {\n    return onError(errorMessage(err, \"Onbekende fout.\"));\n  }\n}\n\nasync function refresh() {\n  busy.value = true;\n  const [p, m, e, s] = await Promise.all([\n    load<ProblemsResponse>(\n      () => api.adaOverview({ endpoint: \"problems\" }),\n      (error) => ({ level: \"error\", problems: [], ok: [], running: [], error }),\n    ),\n    load<Pm2Response>(\n      () => api.adaOverview({ endpoint: \"pm2\" }),\n      (error) => ({ procs: [], error }),\n    ),\n    load<EventsResponse>(\n      () => api.adaOverview({ endpoint: \"events\", limit: EVENT_LIMIT }),\n      (error) => ({ events: [], truncated: false, error }),\n    ),\n    load<SessionsResponse>(\n      () => api.adaOverview({ endpoint: \"sessions\" }),\n      (error) => ({ sessions: [], error }),\n    ),\n  ]);\n  problems.value = p;\n  pm2.value = m;\n  events.value = e;\n  sessions.value = s;\n  updated.value = new Date().toLocaleTimeString(\"nl-NL\", { hour12: false });\n  busy.value = false;\n}\n\nfunction restartTimer() {\n  if (timer !== null) { window.clearInterval(timer); timer = null; }\n  if (auto.value) timer = window.setInterval(() => void refresh(), intervalMs.value);\n}\n\nwatch([auto, intervalMs], restartTimer);\n\nconst level = computed(() => problems.value?.level ?? \"ok\");\nconst markClass = computed(() =>\n  level.value === \"error\" ? \"ada__mark--error\" : level.value === \"warn\" ? \"ada__mark--warn\" : \"ada__mark--ok\");\n\n// A word in the tab title, so a problem is visible with the dashboard in a\n// background tab. Text rather than an emoji: the brand carries none, and a tab\n// title is the one place where the word reads better than a symbol anyway.\n// Restored on unmount: the picker is not \"Ada dashboard\".\nwatch(level, (value) => {\n  const prefix = value === \"error\" ? \"Storing · \" : value === \"warn\" ? \"Let op · \" : \"\";\n  document.title = `${prefix}Ada dashboard`;\n}, { immediate: true });\n\n/* ---- session log ------------------------------------------------------- */\n\nconst sessionIssue = ref<string | null>(null);\nconst sessionData = ref<SessionResponse | null>(null);\nconst sessionLoading = ref(false);\n\nasync function loadSession(full: boolean) {\n  const issue = sessionIssue.value;\n  if (!issue) return;\n  sessionLoading.value = true;\n  sessionData.value = await load<SessionResponse>(\n    () => api.adaSession({ issue, full }),\n    (error) => ({ error }),\n  );\n  sessionLoading.value = false;\n}\n\nfunction openSession(issue: string) {\n  sessionIssue.value = issue;\n  sessionData.value = null;\n  void loadSession(false);\n}\n\nfunction closeSession() {\n  sessionIssue.value = null;\n  sessionData.value = null;\n}\n\nonMounted(() => {\n  void refresh();\n  restartTimer();\n});\n\nonBeforeUnmount(() => {\n  if (timer !== null) window.clearInterval(timer);\n  document.title = \"Tech_42 Tools\";\n});\n</script>\n\n<style scoped>\n.ada__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 24px;\n}\n.ada__title {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  margin: 0;\n  font-size: var(--fs-h-xs);\n  font-weight: var(--fw-heading);\n}\n.ada__mark--ok { color: var(--ack); }\n.ada__mark--warn { color: var(--wouldfire); }\n.ada__mark--error { color: var(--fire); }\n.ada__spacer { flex: 1; }\n.ada__check {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: var(--fs-body-s);\n  color: var(--muted-foreground);\n  cursor: pointer;\n  user-select: none;\n}\n.ada__select {\n  height: 32px;\n  padding: 0 8px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-s);\n  cursor: pointer;\n}\n.ada__refresh {\n  height: 32px;\n  padding: 0 14px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-s);\n  font-weight: var(--fw-label);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.ada__refresh:hover:not(:disabled) { background: var(--hover); }\n.ada__refresh:active:not(:disabled) { opacity: 0.86; }\n.ada__refresh:disabled { opacity: 0.55; cursor: not-allowed; }\n.ada__updated { font-size: var(--fs-body-xs); color: var(--muted-foreground); font-variant-numeric: tabular-nums; }\n\n.ada__section { margin-bottom: 32px; }\n\n.ada__split {\n  display: grid;\n  gap: 24px;\n  align-items: start;\n  grid-template-columns: minmax(0, 1fr);\n}\n/* min-width:0 on both tracks: an unbreakable log line in the events column would\n   otherwise floor the track at its min-content and push the page sideways. */\n.ada__col { min-width: 0; }\n\n@media (min-width: 1024px) {\n  .ada__split { grid-template-columns: minmax(0, 1fr) 320px; }\n}\n</style>\n","<template>\n  <div class=\"events\">\n    <div class=\"events__bar\">\n      <select v-model=\"type\" class=\"events__select\">\n        <option v-for=\"opt in TYPE_OPTIONS\" :key=\"opt.value\" :value=\"opt.value\">{{ opt.label }}</option>\n      </select>\n      <label class=\"events__check\">\n        <input v-model=\"fireOnly\" type=\"checkbox\" />\n        <span>alleen fire / would-fire</span>\n      </label>\n      <span class=\"events__count\">{{ shown.length }} van {{ all.length }}</span>\n    </div>\n\n    <p v-if=\"data?.error\" class=\"events__empty events__empty--err\">{{ data.error }}</p>\n    <p v-else-if=\"!data\" class=\"events__empty\">Events laden…</p>\n    <p v-else-if=\"shown.length === 0\" class=\"events__empty\">Geen events.</p>\n\n    <div v-else class=\"events__list\">\n      <div v-for=\"(event, i) in shown\" :key=\"`${event.time}|${i}`\" class=\"ev card\">\n        <button type=\"button\" class=\"ev__head\" @click=\"toggle(`${event.time}|${i}`)\">\n          <span class=\"ev__chevron\" :class=\"{ 'ev__chevron--open': expanded.has(`${event.time}|${i}`) }\">›</span>\n          <span class=\"ev__time mono\">{{ fmtTime(event.time) }}</span>\n          <span class=\"ev__badge\" :class=\"badgeClass(event)\">{{ badgeLabel(event) }}</span>\n          <span v-if=\"event.kind === 'event' && event.action\" class=\"ev__action\">{{ event.action }}</span>\n          <span v-if=\"event.issue\" class=\"ev__issue\">{{ event.issue }}</span>\n          <span v-if=\"event.actor\" class=\"ev__actor\">{{ event.actor }}</span>\n          <span v-if=\"event.stale\" class=\"ev__stale\">STALE</span>\n          <span class=\"ev__summary\">{{ summaryFor(event) }}</span>\n        </button>\n        <div v-if=\"expanded.has(`${event.time}|${i}`)\" class=\"ev__detail\">\n          <pre class=\"mono\">{{ detailFor(event) }}</pre>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { fmtTime } from \"../lib/format\";\nimport type { AdaEvent, EventsResponse } from \"../lib/types\";\n\nconst props = defineProps<{ data: EventsResponse | null }>();\n\nconst TYPE_OPTIONS = [\n  { value: \"\", label: \"Alle types\" },\n  { value: \"AgentSessionEvent\", label: \"AgentSessionEvent\" },\n  { value: \"Comment\", label: \"Comment\" },\n  { value: \"Issue\", label: \"Issue\" },\n  { value: \"AppUserNotification\", label: \"AppUserNotification\" },\n];\n\n// Badge classes carry the decision, not the transport. The four decisions\n// (fire/would-fire/ack/skip) keep their names and their relative loudness from\n// the original dashboard; their colors are now the brand's own severity ladder.\nconst BADGE_CLASS: Record<string, string> = {\n  \"fire\": \"ev__badge--fire\",\n  \"would-fire\": \"ev__badge--wouldfire\",\n  \"ack\": \"ev__badge--ack\",\n  \"skip\": \"ev__badge--skip\",\n  \"auth-fail\": \"ev__badge--auth\",\n  \"not-found\": \"ev__badge--auth\",\n  \"startup\": \"ev__badge--startup\",\n  \"merge\": \"ev__badge--event\",\n  \"other\": \"ev__badge--other\",\n};\n\nconst type = ref(\"\");\nconst fireOnly = ref(false);\nconst expanded = ref(new Set<string>());\n\nconst all = computed(() => props.data?.events ?? []);\nconst shown = computed(() => {\n  let list = all.value;\n  if (type.value) list = list.filter((e) => e.type === type.value);\n  if (fireOnly.value) list = list.filter((e) => e.decision === \"fire\" || e.decision === \"would-fire\");\n  return list;\n});\n\nfunction toggle(key: string) {\n  // A new Set so Vue sees the change; mutating in place does not trigger it.\n  const next = new Set(expanded.value);\n  if (!next.delete(key)) next.add(key);\n  expanded.value = next;\n}\n\nfunction badgeLabel(event: AdaEvent): string {\n  if (event.kind === \"event\") return event.type || \"?\";\n  if (event.kind === \"startup\") return \"startup\";\n  return event.decision || \"info\";\n}\n\nfunction badgeClass(event: AdaEvent): string {\n  if (event.kind === \"event\") return \"ev__badge--type\";\n  const key = event.kind === \"startup\" ? \"startup\" : event.decision || \"other\";\n  return BADGE_CLASS[key] ?? BADGE_CLASS.other;\n}\n\nfunction summaryFor(event: AdaEvent): string {\n  if (event.kind !== \"event\") return event.raw;\n  const data = (event.payload as { data?: { body?: string; title?: string; issue?: { title?: string } } })?.data;\n  if (data?.body) return data.body.replace(/\\s+/g, \" \").trim();\n  return data?.issue?.title || data?.title || [event.type, event.action].filter(Boolean).join(\" · \");\n}\n\nfunction detailFor(event: AdaEvent): string {\n  if (event.payload) return JSON.stringify(event.payload, null, 2);\n  return event.payloadText || event.raw;\n}\n</script>\n\n<style scoped>\n.events { min-width: 0; }\n\n.events__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  margin-bottom: 12px;\n}\n.events__select {\n  height: 32px;\n  padding: 0 8px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-s);\n  cursor: pointer;\n}\n.events__check {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  font-size: var(--fs-body-s);\n  color: var(--muted-foreground);\n  cursor: pointer;\n  user-select: none;\n}\n.events__count {\n  margin-left: auto;\n  font-size: var(--fs-body-xs);\n  color: var(--muted-foreground);\n  font-variant-numeric: tabular-nums;\n}\n\n\n.events__empty { padding: 24px 0; text-align: center; color: var(--muted-foreground); }\n.events__empty--err { color: var(--fire); }\n\n.events__list { display: flex; flex-direction: column; gap: 6px; }\n\n.ev { overflow: hidden; }\n.ev__head {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  padding: 7px 12px;\n  border: 0;\n  background: transparent;\n  color: inherit;\n  text-align: left;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.ev__head:hover { background: var(--hover); }\n.ev__head:active { opacity: 0.86; }\n.ev__chevron {\n  flex: none;\n  color: var(--muted-foreground);\n  transition: transform var(--dur-base) var(--ease);\n}\n.ev__chevron--open { transform: rotate(90deg); }\n.ev__time {\n  flex: none;\n  font-size: var(--fs-body-xs);\n  white-space: nowrap;\n  color: var(--muted-foreground);\n  font-variant-numeric: tabular-nums;\n}\n/* Every badge here is passive: you read it, you cannot click it. So each one is\n   a tint plus coloured text, and none of them is a filled orange. */\n.ev__badge {\n  flex: none;\n  padding: 2px 8px;\n  border: 1px solid transparent;\n  border-radius: var(--radius-md);\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-label);\n  white-space: nowrap;\n}\n.ev__badge--type { border-color: var(--border); background: var(--field); color: var(--muted-foreground); }\n.ev__badge--fire { border-color: var(--fire-border); background: var(--fire-soft); color: var(--fire); }\n.ev__badge--wouldfire { border-color: var(--wouldfire-border); background: var(--wouldfire-soft); color: var(--wouldfire); }\n.ev__badge--ack { border-color: var(--ack-border); background: var(--ack-soft); color: var(--ack); }\n.ev__badge--skip { background: var(--skip-soft); color: var(--skip); }\n.ev__badge--auth { background: color-mix(in srgb, var(--auth) 16%, transparent); color: var(--auth); }\n.ev__badge--startup { background: color-mix(in srgb, var(--startup) 16%, transparent); color: var(--startup); }\n.ev__badge--event { background: color-mix(in srgb, var(--event) 16%, transparent); color: var(--event); }\n.ev__badge--other { background: var(--field); color: var(--muted-foreground); }\n\n.ev__action {\n  flex: none;\n  padding: 2px 8px;\n  border-radius: var(--radius-md);\n  background: var(--field);\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-label);\n  color: var(--muted-foreground);\n}\n/* The identifier is not a link of its own -- the whole row toggles -- so it\n   stays in the page colour and leans on weight. */\n.ev__issue { flex: none; font-weight: var(--fw-heading); font-variant-numeric: tabular-nums; }\n.ev__actor { flex: none; font-size: var(--fs-body-xs); color: var(--muted-foreground); }\n.ev__stale {\n  flex: none;\n  padding: 0 6px;\n  border: 1px solid var(--wouldfire-border);\n  border-radius: var(--radius-md);\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-label);\n  color: var(--wouldfire);\n}\n/* min-width:0 is what keeps the truncation working: without it the flex item\n   floors at the min-content of the longest unbreakable word and the row grows. */\n.ev__summary {\n  flex: 1;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  font-size: var(--fs-body-s);\n}\n\n.ev__detail {\n  padding: 12px;\n  border-top: 1px solid var(--border);\n  background: var(--sunken);\n}\n.ev__detail pre {\n  margin: 0;\n  font-size: var(--fs-body-xs);\n  line-height: 1.6;\n  white-space: pre-wrap;\n  overflow-wrap: break-word;\n}\n</style>\n","// Dutch formatting for the Ada dashboard. `now` is a parameter rather than a\n// read of the clock so the tests can assert exact strings.\n\nexport function fmtBytes(n: number): string {\n  if (!Number.isFinite(n) || n < 0) return \"-\";\n  if (n < 1024) return `${n} B`;\n  if (n < 1_048_576) return `${(n / 1024).toFixed(0)} KB`;\n  return `${(n / 1_048_576).toFixed(1)} MB`;\n}\n\nexport function fmtAgo(ms: number, now: number = Date.now()): string {\n  if (!Number.isFinite(ms) || ms <= 0) return \"-\";\n  const s = Math.floor((now - ms) / 1000);\n  if (s < 60) return `${s}s geleden`;\n  if (s < 3600) return `${Math.floor(s / 60)}m geleden`;\n  if (s < 86_400) return `${Math.floor(s / 3600)}u geleden`;\n  return `${Math.floor(s / 86_400)}d geleden`;\n}\n\nexport function fmtUptime(ms: number, now: number = Date.now()): string {\n  if (!Number.isFinite(ms) || ms <= 0) return \"-\";\n  const s = Math.floor((now - ms) / 1000);\n  if (s < 60) return `${s}s`;\n  if (s < 3600) return `${Math.floor(s / 60)}m`;\n  if (s < 86_400) return `${Math.floor(s / 3600)}u`;\n  return `${Math.floor(s / 86_400)}d`;\n}\n\n/** A plain Dutch date, for a column where the clock adds nothing. */\nexport function fmtDate(iso: string | null): string {\n  if (!iso) return \"\";\n  const d = new Date(iso);\n  if (Number.isNaN(d.getTime())) return iso;\n  return d.toLocaleDateString(\"nl-NL\", { day: \"2-digit\", month: \"2-digit\", year: \"numeric\" });\n}\n\nexport function fmtTime(iso: string): string {\n  const d = new Date(iso);\n  if (Number.isNaN(d.getTime())) return iso;\n  const time = d.toLocaleTimeString(\"nl-NL\", { hour12: false });\n  const date = d.toLocaleDateString(\"nl-NL\", { day: \"2-digit\", month: \"2-digit\" });\n  return `${time} ${date}`;\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, vModelSelect as _vModelSelect, withDirectives as _withDirectives, vModelCheckbox as _vModelCheckbox, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"events\" }\nconst _hoisted_2 = { class: \"events__bar\" }\nconst _hoisted_3 = [\"value\"]\nconst _hoisted_4 = { class: \"events__check\" }\nconst _hoisted_5 = { class: \"events__count\" }\nconst _hoisted_6 = {\n  key: 0,\n  class: \"events__empty events__empty--err\"\n}\nconst _hoisted_7 = {\n  key: 1,\n  class: \"events__empty\"\n}\nconst _hoisted_8 = {\n  key: 2,\n  class: \"events__empty\"\n}\nconst _hoisted_9 = {\n  key: 3,\n  class: \"events__list\"\n}\nconst _hoisted_10 = [\"onClick\"]\nconst _hoisted_11 = { class: \"ev__time mono\" }\nconst _hoisted_12 = {\n  key: 0,\n  class: \"ev__action\"\n}\nconst _hoisted_13 = {\n  key: 1,\n  class: \"ev__issue\"\n}\nconst _hoisted_14 = {\n  key: 2,\n  class: \"ev__actor\"\n}\nconst _hoisted_15 = {\n  key: 3,\n  class: \"ev__stale\"\n}\nconst _hoisted_16 = { class: \"ev__summary\" }\nconst _hoisted_17 = {\n  key: 0,\n  class: \"ev__detail\"\n}\nconst _hoisted_18 = { class: \"mono\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _withDirectives(_createElementVNode(\"select\", {\n        \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.type) = $event)),\n        class: \"events__select\"\n      }, [\n        (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.TYPE_OPTIONS, (opt) => {\n          return _createElementVNode(\"option\", {\n            key: opt.value,\n            value: opt.value\n          }, _toDisplayString(opt.label), 9 /* TEXT, PROPS */, _hoisted_3)\n        }), 64 /* STABLE_FRAGMENT */))\n      ], 512 /* NEED_PATCH */), [\n        [_vModelSelect, $setup.type]\n      ]),\n      _createElementVNode(\"label\", _hoisted_4, [\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.fireOnly) = $event)),\n          type: \"checkbox\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelCheckbox, $setup.fireOnly]\n        ]),\n        _cache[2] || (_cache[2] = _createElementVNode(\"span\", null, \"alleen fire / would-fire\", -1 /* CACHED */))\n      ]),\n      _createElementVNode(\"span\", _hoisted_5, _toDisplayString($setup.shown.length) + \" van \" + _toDisplayString($setup.all.length), 1 /* TEXT */)\n    ]),\n    ($props.data?.error)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _toDisplayString($props.data.error), 1 /* TEXT */))\n      : (!$props.data)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, \"Events laden…\"))\n        : ($setup.shown.length === 0)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, \"Geen events.\"))\n          : (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.shown, (event, i) => {\n                return (_openBlock(), _createElementBlock(\"div\", {\n                  key: `${event.time}|${i}`,\n                  class: \"ev card\"\n                }, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"ev__head\",\n                    onClick: $event => ($setup.toggle(`${event.time}|${i}`))\n                  }, [\n                    _createElementVNode(\"span\", {\n                      class: _normalizeClass([\"ev__chevron\", { 'ev__chevron--open': $setup.expanded.has(`${event.time}|${i}`) }])\n                    }, \"›\", 2 /* CLASS */),\n                    _createElementVNode(\"span\", _hoisted_11, _toDisplayString($setup.fmtTime(event.time)), 1 /* TEXT */),\n                    _createElementVNode(\"span\", {\n                      class: _normalizeClass([\"ev__badge\", $setup.badgeClass(event)])\n                    }, _toDisplayString($setup.badgeLabel(event)), 3 /* TEXT, CLASS */),\n                    (event.kind === 'event' && event.action)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, _toDisplayString(event.action), 1 /* TEXT */))\n                      : _createCommentVNode(\"v-if\", true),\n                    (event.issue)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_13, _toDisplayString(event.issue), 1 /* TEXT */))\n                      : _createCommentVNode(\"v-if\", true),\n                    (event.actor)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_14, _toDisplayString(event.actor), 1 /* TEXT */))\n                      : _createCommentVNode(\"v-if\", true),\n                    (event.stale)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"STALE\"))\n                      : _createCommentVNode(\"v-if\", true),\n                    _createElementVNode(\"span\", _hoisted_16, _toDisplayString($setup.summaryFor(event)), 1 /* TEXT */)\n                  ], 8 /* PROPS */, _hoisted_10),\n                  ($setup.expanded.has(`${event.time}|${i}`))\n                    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, [\n                        _createElementVNode(\"pre\", _hoisted_18, _toDisplayString($setup.detailFor(event)), 1 /* TEXT */)\n                      ]))\n                    : _createCommentVNode(\"v-if\", true)\n                ]))\n              }), 128 /* KEYED_FRAGMENT */))\n            ]))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaEventsPanel.vue\";script.__scopeId = \"data-v-f490afb4\";export default script;","<template>\n  <p v-if=\"!data\" class=\"muted\">pm2 laden…</p>\n  <p v-else-if=\"data.error\" class=\"err\">pm2: {{ data.error }}</p>\n  <p v-else-if=\"!data.procs.length\" class=\"muted\">Geen processen gevonden.</p>\n\n  <div v-else class=\"grid\">\n    <div v-for=\"proc in data.procs\" :key=\"proc.name\" class=\"proc card\">\n      <div class=\"proc__head\">\n        <span class=\"proc__name\">{{ proc.name }}</span>\n        <span class=\"proc__status\" :class=\"statusClass(proc.status)\">{{ proc.status }}</span>\n      </div>\n      <dl class=\"proc__stats\">\n        <dt>uptime</dt>\n        <dd>{{ proc.status === \"online\" ? fmtUptime(proc.uptime) : \"-\" }}</dd>\n        <dt>herstarts</dt>\n        <dd>{{ proc.restarts ?? \"-\" }}</dd>\n        <dt>geheugen</dt>\n        <dd>{{ proc.mem ? fmtBytes(proc.mem) : \"-\" }}</dd>\n        <dt>cpu</dt>\n        <dd>{{ proc.cpu ?? 0 }}%</dd>\n      </dl>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { fmtBytes, fmtUptime } from \"../lib/format\";\nimport type { Pm2Response } from \"../lib/types\";\n\ndefineProps<{ data: Pm2Response | null }>();\n\nfunction statusClass(status: string): string {\n  if (status === \"online\") return \"proc__status--online\";\n  if (status === \"errored\") return \"proc__status--errored\";\n  if (status === \"stopped\") return \"proc__status--stopped\";\n  return \"\";\n}\n</script>\n\n<style scoped>\n.err { color: var(--fire); }\n\n.grid {\n  display: grid;\n  gap: 12px;\n  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));\n}\n.proc { display: flex; flex-direction: column; gap: 12px; padding: 16px; }\n.proc__head { display: flex; align-items: center; gap: 8px; }\n.proc__name { font-weight: var(--fw-heading); }\n/* A tag, not a pill: 4px is as round as this brand gets. Each state is a tint\n   plus a hairline in its own hue -- passive, so never a filled orange. */\n.proc__status {\n  padding: 2px 8px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--muted-foreground);\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-label);\n  text-transform: uppercase;\n}\n.proc__status--online { border-color: var(--ack-border); background: var(--ack-soft); color: var(--ack); }\n.proc__status--errored { border-color: var(--fire-border); background: var(--fire-soft); color: var(--fire); }\n.proc__status--stopped { border-color: transparent; background: var(--skip-soft); color: var(--skip); }\n\n.proc__stats {\n  display: grid;\n  grid-template-columns: auto 1fr;\n  gap: 2px 12px;\n  margin: 0;\n  font-size: var(--fs-body-xs);\n  color: var(--muted-foreground);\n}\n/* Uptime, restarts, memory and cpu are all figures, and they no longer get\n   their alignment from a mono face. */\n.proc__stats dd { font-variant-numeric: tabular-nums; }\n.proc__stats dt { min-width: 0; }\n.proc__stats dd { margin: 0; min-width: 0; }\n</style>\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"muted\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"err\"\n}\nconst _hoisted_3 = {\n  key: 2,\n  class: \"muted\"\n}\nconst _hoisted_4 = {\n  key: 3,\n  class: \"grid\"\n}\nconst _hoisted_5 = { class: \"proc__head\" }\nconst _hoisted_6 = { class: \"proc__name\" }\nconst _hoisted_7 = { class: \"proc__stats\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (!$props.data)\n    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, \"pm2 laden…\"))\n    : ($props.data.error)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, \"pm2: \" + _toDisplayString($props.data.error), 1 /* TEXT */))\n      : (!$props.data.procs.length)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, \"Geen processen gevonden.\"))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.data.procs, (proc) => {\n              return (_openBlock(), _createElementBlock(\"div\", {\n                key: proc.name,\n                class: \"proc card\"\n              }, [\n                _createElementVNode(\"div\", _hoisted_5, [\n                  _createElementVNode(\"span\", _hoisted_6, _toDisplayString(proc.name), 1 /* TEXT */),\n                  _createElementVNode(\"span\", {\n                    class: _normalizeClass([\"proc__status\", $setup.statusClass(proc.status)])\n                  }, _toDisplayString(proc.status), 3 /* TEXT, CLASS */)\n                ]),\n                _createElementVNode(\"dl\", _hoisted_7, [\n                  _cache[0] || (_cache[0] = _createElementVNode(\"dt\", null, \"uptime\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, _toDisplayString(proc.status === \"online\" ? $setup.fmtUptime(proc.uptime) : \"-\"), 1 /* TEXT */),\n                  _cache[1] || (_cache[1] = _createElementVNode(\"dt\", null, \"herstarts\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, _toDisplayString(proc.restarts ?? \"-\"), 1 /* TEXT */),\n                  _cache[2] || (_cache[2] = _createElementVNode(\"dt\", null, \"geheugen\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, _toDisplayString(proc.mem ? $setup.fmtBytes(proc.mem) : \"-\"), 1 /* TEXT */),\n                  _cache[3] || (_cache[3] = _createElementVNode(\"dt\", null, \"cpu\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, _toDisplayString(proc.cpu ?? 0) + \"%\", 1 /* TEXT */)\n                ])\n              ]))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaPm2Panel.vue\";script.__scopeId = \"data-v-c1b16cea\";export default script;","<template>\n  <p v-if=\"!data\" class=\"muted\">Storingen laden…</p>\n  <p v-else-if=\"data.error\" class=\"err\">Storingen laden mislukt: {{ data.error }}</p>\n\n  <div v-else-if=\"problems.length === 0\" class=\"allclear card\">\n    <span class=\"allclear__head\">Geen storingen</span>\n    <span v-if=\"okLine\"> · {{ okLine }}</span>\n    <span v-if=\"busyLine\"> · bezig: {{ busyLine }}</span>\n  </div>\n\n  <div v-else class=\"grid\">\n    <button\n      v-for=\"(check, i) in problems\"\n      :key=\"i\"\n      type=\"button\"\n      class=\"problem\"\n      :class=\"check.level === 'error' ? 'problem--error' : 'problem--warn'\"\n      @click=\"open = check\"\n    >\n      <span class=\"mark problem__mark\" />\n      <span class=\"problem__body\">\n        <span class=\"problem__title\">{{ check.title }}</span>\n        <span class=\"problem__detail\">{{ check.detail }}</span>\n      </span>\n    </button>\n  </div>\n\n  <ModalDialog :open=\"open !== null\" :title=\"open?.title ?? ''\" @close=\"open = null\">\n    <pre class=\"dlg__text\">{{ open?.detail }}</pre>\n    <div v-if=\"open?.fix\" class=\"fix\">\n      <p class=\"fix__label\">Zo los je het op</p>\n      <pre class=\"fix__cmd mono\">{{ open.fix }}</pre>\n    </div>\n    <button v-if=\"open?.issue\" type=\"button\" class=\"btn\" @click=\"openSession\">\n      Open sessie-log {{ open.issue }}\n    </button>\n  </ModalDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport ModalDialog from \"./ModalDialog.vue\";\nimport type { HealthCheck, ProblemsResponse } from \"../lib/types\";\n\nconst props = defineProps<{ data: ProblemsResponse | null }>();\nconst emit = defineEmits<{ openSession: [issue: string] }>();\n\nconst open = ref<HealthCheck | null>(null);\n\nconst problems = computed(() => props.data?.problems ?? []);\nconst okLine = computed(() =>\n  (props.data?.ok ?? []).map((c) => [c.title, c.detail].filter(Boolean).join(\" · \")).join(\" · \"));\nconst busyLine = computed(() => (props.data?.running ?? []).join(\", \"));\n\nfunction openSession() {\n  const issue = open.value?.issue;\n  open.value = null;\n  if (issue) emit(\"openSession\", issue);\n}\n</script>\n\n<style scoped>\n.err { color: var(--fire); }\n\n/* The \"done\" status treatment: a tint, a hairline in the same hue, coloured\n   text. Structure comes from the hairline, not from a fat accent rule. */\n.allclear {\n  padding: 12px 16px;\n  border-color: var(--ack-border);\n  background: var(--ack-soft);\n  color: var(--muted-foreground);\n}\n.allclear__head { font-weight: var(--fw-heading); color: var(--ack); }\n\n.grid {\n  display: grid;\n  gap: 12px;\n  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n}\n\n.problem {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  padding: 16px;\n  border-radius: var(--radius-xl);\n  text-align: left;\n  cursor: pointer;\n  transition: filter var(--dur-base) var(--ease);\n}\n/* Hover lightens, and press is opacity only: nothing in this brand moves. */\n.problem:hover { filter: brightness(1.15); }\n.problem:active { opacity: 0.86; }\n/* A tint plus a hairline, never a filled orange -- the fill is reserved for\n   the primary action, and a status card is a status, not a button colour. */\n.problem--error {\n  border: 1px solid var(--fire-border);\n  background: var(--fire-soft);\n}\n.problem--warn {\n  border: 1px solid var(--wouldfire-border);\n  background: var(--wouldfire-soft);\n}\n/* Sits on the cap height of the title, so the mark reads as a bullet. */\n.problem__mark { margin-top: 7px; }\n.problem--error .problem__mark { color: var(--fire); }\n.problem--warn .problem__mark { color: var(--wouldfire); }\n.problem__body { min-width: 0; }\n.problem__title { display: block; font-weight: var(--fw-heading); }\n.problem--error .problem__title { color: var(--fire); }\n.problem--warn .problem__title { color: var(--wouldfire); }\n.problem__detail {\n  display: -webkit-box;\n  -webkit-box-orient: vertical;\n  -webkit-line-clamp: 2;\n  line-clamp: 2;\n  overflow: hidden;\n  margin-top: 4px;\n  font-size: var(--fs-body-xs);\n  color: var(--muted-foreground);\n}\n\n.dlg__text {\n  margin: 0;\n  font-size: var(--fs-body-xs);\n  line-height: 1.6;\n  white-space: pre-wrap;\n  overflow-wrap: break-word;\n}\n.fix {\n  padding: 12px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--sunken);\n}\n/* Uppercase is allowed on a tiny metadata label; letter-spacing is not, here or\n   anywhere else in the brand. */\n.fix__label {\n  margin: 0 0 8px;\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-label);\n  text-transform: uppercase;\n  color: var(--foreground-subtle);\n}\n.fix__cmd { margin: 0; font-size: var(--fs-body-xs); white-space: pre-wrap; overflow-wrap: break-word; }\n\n.btn {\n  align-self: flex-start;\n  height: 32px;\n  padding: 0 14px;\n  border: 1px solid var(--input);\n  border-radius: var(--radius-md);\n  background: var(--field);\n  color: var(--foreground);\n  font-size: var(--fs-body-s);\n  font-weight: var(--fw-label);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.btn:hover { background: var(--hover); }\n.btn:active { opacity: 0.86; }\n</style>\n","<template>\n  <Teleport to=\"body\">\n    <div v-if=\"open\" class=\"ovl\" @click.self=\"emit('close')\">\n      <div class=\"dlg\" :class=\"`dlg--${size}`\" role=\"dialog\" aria-modal=\"true\">\n        <header class=\"dlg__head\">\n          <h2 class=\"dlg__title\">\n            <slot name=\"title\">{{ title }}</slot>\n          </h2>\n          <button type=\"button\" class=\"dlg__x\" aria-label=\"Sluiten\" @click=\"emit('close')\">×</button>\n        </header>\n        <div class=\"dlg__body\">\n          <slot />\n        </div>\n      </div>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\n// One dialog for both the problem detail and the session log. Teleported to\n// <body> so it never inherits a stacking context from whichever panel opened it.\nimport { onBeforeUnmount, onMounted, watch } from \"vue\";\n\n/** `s` for a short form or a confirmation; the default `l` fits a log or a detail view. */\nconst props = withDefaults(defineProps<{ open: boolean; title?: string; size?: \"s\" | \"l\" }>(), { size: \"l\" });\nconst emit = defineEmits<{ close: [] }>();\n\nfunction onKey(evt: KeyboardEvent) {\n  if (evt.key === \"Escape\" && props.open) emit(\"close\");\n}\n\n// The log dialog is tall; without this the page behind it scrolls under the\n// pointer instead of the log.\nwatch(() => props.open, (isOpen) => {\n  document.body.style.overflow = isOpen ? \"hidden\" : \"\";\n});\n\nonMounted(() => window.addEventListener(\"keydown\", onKey));\nonBeforeUnmount(() => {\n  window.removeEventListener(\"keydown\", onKey);\n  document.body.style.overflow = \"\";\n});\n</script>\n\n<style scoped>\n.ovl {\n  position: fixed;\n  inset: 0;\n  z-index: 100;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 24px;\n  /* Green-950 based, not black: on an already dark page a black scrim reads as\n     nothing at all. */\n  background: var(--overlay);\n  backdrop-filter: blur(6px);\n}\n.dlg {\n  display: flex;\n  flex-direction: column;\n  width: 1000px;\n  max-width: 94vw;\n  max-height: 85vh;\n  border-radius: var(--radius-xl);\n  background: var(--popover);\n  /* A dialog genuinely floats, so it is one of the two things in this brand that\n     carries a shadow. The hairline rides along in the same box-shadow. */\n  box-shadow: 0 0 0 1px var(--border), var(--shadow-overlay);\n}\n.dlg--s { width: 560px; }\n.dlg__head {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  padding: 16px 20px 12px;\n  border-bottom: 1px solid var(--border);\n}\n.dlg__title { flex: 1; margin: 0; font-size: var(--fs-body-m); font-weight: var(--fw-heading); }\n.dlg__x {\n  flex: none;\n  width: 28px;\n  height: 28px;\n  border: 0;\n  border-radius: var(--radius-sm);\n  background: transparent;\n  color: var(--muted-foreground);\n  font-size: var(--fs-h-s);\n  line-height: 1;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);\n}\n.dlg__x:hover { background: var(--hover); color: var(--foreground); }\n.dlg__x:active { opacity: 0.86; }\n.dlg__body {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  min-height: 0;\n  padding: 16px 20px 20px;\n  overflow: auto;\n}\n</style>\n","import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"dlg__head\" }\nconst _hoisted_2 = { class: \"dlg__title\" }\nconst _hoisted_3 = { class: \"dlg__body\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    ($props.open)\n      ? (_openBlock(), _createElementBlock(\"div\", {\n          key: 0,\n          class: \"ovl\",\n          onClick: _cache[1] || (_cache[1] = _withModifiers($event => ($setup.emit('close')), [\"self\"]))\n        }, [\n          _createElementVNode(\"div\", {\n            class: _normalizeClass([\"dlg\", `dlg--${$props.size}`]),\n            role: \"dialog\",\n            \"aria-modal\": \"true\"\n          }, [\n            _createElementVNode(\"header\", _hoisted_1, [\n              _createElementVNode(\"h2\", _hoisted_2, [\n                _renderSlot(_ctx.$slots, \"title\", {}, () => [\n                  _createTextVNode(_toDisplayString($props.title), 1 /* TEXT */)\n                ], true)\n              ]),\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"dlg__x\",\n                \"aria-label\": \"Sluiten\",\n                onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('close')))\n              }, \"×\")\n            ]),\n            _createElementVNode(\"div\", _hoisted_3, [\n              _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n            ])\n          ], 2 /* CLASS */)\n        ]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ModalDialog.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ModalDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ModalDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ModalDialog.vue\";script.__scopeId = \"data-v-98794754\";export default script;","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, withCtx as _withCtx, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"muted\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"err\"\n}\nconst _hoisted_3 = {\n  key: 2,\n  class: \"allclear card\"\n}\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = { key: 1 }\nconst _hoisted_6 = {\n  key: 3,\n  class: \"grid\"\n}\nconst _hoisted_7 = [\"onClick\"]\nconst _hoisted_8 = { class: \"problem__body\" }\nconst _hoisted_9 = { class: \"problem__title\" }\nconst _hoisted_10 = { class: \"problem__detail\" }\nconst _hoisted_11 = { class: \"dlg__text\" }\nconst _hoisted_12 = {\n  key: 0,\n  class: \"fix\"\n}\nconst _hoisted_13 = { class: \"fix__cmd mono\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    (!$props.data)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, \"Storingen laden…\"))\n      : ($props.data.error)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, \"Storingen laden mislukt: \" + _toDisplayString($props.data.error), 1 /* TEXT */))\n        : ($setup.problems.length === 0)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n              _cache[1] || (_cache[1] = _createElementVNode(\"span\", { class: \"allclear__head\" }, \"Geen storingen\", -1 /* CACHED */)),\n              ($setup.okLine)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \" · \" + _toDisplayString($setup.okLine), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true),\n              ($setup.busyLine)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, \" · bezig: \" + _toDisplayString($setup.busyLine), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true)\n            ]))\n          : (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.problems, (check, i) => {\n                return (_openBlock(), _createElementBlock(\"button\", {\n                  key: i,\n                  type: \"button\",\n                  class: _normalizeClass([\"problem\", check.level === 'error' ? 'problem--error' : 'problem--warn']),\n                  onClick: $event => ($setup.open = check)\n                }, [\n                  _cache[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"mark problem__mark\" }, null, -1 /* CACHED */)),\n                  _createElementVNode(\"span\", _hoisted_8, [\n                    _createElementVNode(\"span\", _hoisted_9, _toDisplayString(check.title), 1 /* TEXT */),\n                    _createElementVNode(\"span\", _hoisted_10, _toDisplayString(check.detail), 1 /* TEXT */)\n                  ])\n                ], 10 /* CLASS, PROPS */, _hoisted_7))\n              }), 128 /* KEYED_FRAGMENT */))\n            ])),\n    _createVNode($setup[\"ModalDialog\"], {\n      open: $setup.open !== null,\n      title: $setup.open?.title ?? '',\n      onClose: _cache[0] || (_cache[0] = $event => ($setup.open = null))\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"pre\", _hoisted_11, _toDisplayString($setup.open?.detail), 1 /* TEXT */),\n        ($setup.open?.fix)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n              _cache[3] || (_cache[3] = _createElementVNode(\"p\", { class: \"fix__label\" }, \"Zo los je het op\", -1 /* CACHED */)),\n              _createElementVNode(\"pre\", _hoisted_13, _toDisplayString($setup.open.fix), 1 /* TEXT */)\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.open?.issue)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 1,\n              type: \"button\",\n              class: \"btn\",\n              onClick: $setup.openSession\n            }, \" Open sessie-log \" + _toDisplayString($setup.open.issue), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"title\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaProblemsPanel.vue\";script.__scopeId = \"data-v-d44835f9\";export default script;","<template>\n  <ModalDialog :open=\"issue !== null\" @close=\"emit('close')\">\n    <template #title>\n      <span class=\"dlg__issue\">{{ issue }}</span>\n      <span class=\"dlg__meta\">{{ loading ? \"laden…\" : meta }}</span>\n    </template>\n\n    <div v-if=\"data?.truncated\" class=\"trunc\">\n      <span>\n        Alleen het laatste stuk wordt getoond\n        ({{ fmtBytes(data.text?.length ?? 0) }} van {{ fmtBytes(data.total ?? 0) }}).\n      </span>\n      <button type=\"button\" class=\"trunc__btn\" :disabled=\"loading\" @click=\"emit('showEverything')\">\n        Toon alles\n      </button>\n    </div>\n\n    <div class=\"log\">\n      <pre class=\"mono\">{{ body }}</pre>\n    </div>\n  </ModalDialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport ModalDialog from \"./ModalDialog.vue\";\nimport { fmtAgo, fmtBytes } from \"../lib/format\";\nimport type { SessionResponse } from \"../lib/types\";\n\nconst props = defineProps<{\n  issue: string | null;\n  data: SessionResponse | null;\n  loading: boolean;\n}>();\nconst emit = defineEmits<{ close: []; showEverything: [] }>();\n\nconst meta = computed(() => {\n  if (props.data?.error) return \"\";\n  return [\n    props.data?.size !== undefined ? fmtBytes(props.data.size) : null,\n    props.data?.mtime !== undefined ? fmtAgo(props.data.mtime) : null,\n  ].filter(Boolean).join(\" · \");\n});\n\nconst body = computed(() => {\n  if (props.data?.error) return `Fout: ${props.data.error}`;\n  return props.data?.text ?? (props.loading ? \"\" : \"Geen inhoud.\");\n});\n</script>\n\n<style scoped>\n.dlg__issue { margin-right: 12px; font-variant-numeric: tabular-nums; }\n.dlg__meta {\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-body);\n  color: var(--muted-foreground);\n  font-variant-numeric: tabular-nums;\n}\n\n.trunc {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  padding: 8px 12px;\n  border: 1px solid var(--wouldfire-border);\n  border-radius: var(--radius-xl);\n  background: var(--wouldfire-soft);\n  color: var(--wouldfire);\n  font-size: var(--fs-body-xs);\n  font-variant-numeric: tabular-nums;\n}\n.trunc__btn {\n  height: 28px;\n  padding: 0 10px;\n  border: 1px solid var(--wouldfire-border);\n  border-radius: var(--radius-md);\n  background: transparent;\n  color: var(--wouldfire);\n  font-size: var(--fs-body-xs);\n  font-weight: var(--fw-label);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.trunc__btn:hover:not(:disabled) { background: var(--wouldfire-soft); }\n.trunc__btn:active:not(:disabled) { opacity: 0.86; }\n.trunc__btn:disabled { opacity: 0.55; cursor: not-allowed; }\n\n.log {\n  min-height: 0;\n  flex: 1;\n  padding: 12px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--sunken);\n  overflow: auto;\n}\n.log pre {\n  margin: 0;\n  font-size: var(--fs-body-xs);\n  line-height: 1.6;\n  white-space: pre-wrap;\n  overflow-wrap: break-word;\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"dlg__issue\" }\nconst _hoisted_2 = { class: \"dlg__meta\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"trunc\"\n}\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = { class: \"log\" }\nconst _hoisted_6 = { class: \"mono\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"ModalDialog\"], {\n    open: $props.issue !== null,\n    onClose: _cache[1] || (_cache[1] = $event => ($setup.emit('close')))\n  }, {\n    title: _withCtx(() => [\n      _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.issue), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.loading ? \"laden…\" : $setup.meta), 1 /* TEXT */)\n    ]),\n    default: _withCtx(() => [\n      ($props.data?.truncated)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n            _createElementVNode(\"span\", null, \" Alleen het laatste stuk wordt getoond (\" + _toDisplayString($setup.fmtBytes($props.data.text?.length ?? 0)) + \" van \" + _toDisplayString($setup.fmtBytes($props.data.total ?? 0)) + \"). \", 1 /* TEXT */),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"trunc__btn\",\n              disabled: $props.loading,\n              onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('showEverything')))\n            }, \" Toon alles \", 8 /* PROPS */, _hoisted_4)\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"div\", _hoisted_5, [\n        _createElementVNode(\"pre\", _hoisted_6, _toDisplayString($setup.body), 1 /* TEXT */)\n      ])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\"]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionDialog.vue\";script.__scopeId = \"data-v-79a19611\";export default script;","<template>\n  <p v-if=\"!data\" class=\"muted\">Sessies laden…</p>\n  <p v-else-if=\"data.error\" class=\"err\">{{ data.error }}</p>\n  <p v-else-if=\"!data.sessions.length\" class=\"muted\">Nog geen sessie-logs.</p>\n\n  <div v-else class=\"list\">\n    <button\n      v-for=\"session in data.sessions\"\n      :key=\"session.issue\"\n      type=\"button\"\n      class=\"row card\"\n      @click=\"emit('open', session.issue)\"\n    >\n      <span class=\"row__issue\">{{ session.issue }}</span>\n      <span class=\"row__meta\">{{ fmtBytes(session.size) }} · {{ fmtAgo(session.mtime) }}</span>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { fmtAgo, fmtBytes } from \"../lib/format\";\nimport type { SessionsResponse } from \"../lib/types\";\n\ndefineProps<{ data: SessionsResponse | null }>();\nconst emit = defineEmits<{ open: [issue: string] }>();\n</script>\n\n<style scoped>\n.err { color: var(--fire); }\n.list { display: flex; flex-direction: column; gap: 6px; }\n.row {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  padding: 10px 12px;\n  text-align: left;\n  cursor: pointer;\n  transition: border-color var(--dur-base) var(--ease), background-color var(--dur-base) var(--ease);\n}\n/* Hover lightens: the panel green steps up to the raised green. */\n.row:hover { border-color: var(--primary); background: var(--secondary); }\n.row:active { opacity: 0.86; }\n/* The identifier is not a link of its own -- the whole row is the button -- so\n   it stays in the page colour and leans on weight instead. */\n.row__issue { font-weight: var(--fw-heading); font-variant-numeric: tabular-nums; }\n.row__meta {\n  font-size: var(--fs-body-xs);\n  color: var(--muted-foreground);\n  font-variant-numeric: tabular-nums;\n}\n</style>\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"muted\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"err\"\n}\nconst _hoisted_3 = {\n  key: 2,\n  class: \"muted\"\n}\nconst _hoisted_4 = {\n  key: 3,\n  class: \"list\"\n}\nconst _hoisted_5 = [\"onClick\"]\nconst _hoisted_6 = { class: \"row__issue\" }\nconst _hoisted_7 = { class: \"row__meta\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (!$props.data)\n    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, \"Sessies laden…\"))\n    : ($props.data.error)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString($props.data.error), 1 /* TEXT */))\n      : (!$props.data.sessions.length)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, \"Nog geen sessie-logs.\"))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.data.sessions, (session) => {\n              return (_openBlock(), _createElementBlock(\"button\", {\n                key: session.issue,\n                type: \"button\",\n                class: \"row card\",\n                onClick: $event => ($setup.emit('open', session.issue))\n              }, [\n                _createElementVNode(\"span\", _hoisted_6, _toDisplayString(session.issue), 1 /* TEXT */),\n                _createElementVNode(\"span\", _hoisted_7, _toDisplayString($setup.fmtBytes(session.size)) + \" · \" + _toDisplayString($setup.fmtAgo(session.mtime)), 1 /* TEXT */)\n              ], 8 /* PROPS */, _hoisted_5))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/AdaSessionsPanel.vue\";script.__scopeId = \"data-v-33aa32f8\";export default script;","import { normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelCheckbox as _vModelCheckbox, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, vModelSelect as _vModelSelect, createCommentVNode as _createCommentVNode, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"ada\" }\nconst _hoisted_2 = { class: \"ada__bar\" }\nconst _hoisted_3 = { class: \"ada__title\" }\nconst _hoisted_4 = { class: \"ada__check\" }\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = {\n  key: 0,\n  class: \"ada__updated\"\n}\nconst _hoisted_8 = { class: \"ada__section\" }\nconst _hoisted_9 = { class: \"ada__section\" }\nconst _hoisted_10 = { class: \"ada__split\" }\nconst _hoisted_11 = { class: \"ada__col\" }\nconst _hoisted_12 = { class: \"ada__col\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"h1\", _hoisted_3, [\n        _createElementVNode(\"span\", {\n          class: _normalizeClass([\"mark ada__mark\", $setup.markClass])\n        }, null, 2 /* CLASS */),\n        _cache[3] || (_cache[3] = _createTextVNode(\" Ada dashboard \", -1 /* CACHED */))\n      ]),\n      _cache[5] || (_cache[5] = _createElementVNode(\"span\", { class: \"ada__spacer\" }, null, -1 /* CACHED */)),\n      _createElementVNode(\"label\", _hoisted_4, [\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.auto) = $event)),\n          type: \"checkbox\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelCheckbox, $setup.auto]\n        ]),\n        _cache[4] || (_cache[4] = _createElementVNode(\"span\", null, \"auto-verversen\", -1 /* CACHED */))\n      ]),\n      _withDirectives(_createElementVNode(\"select\", {\n        \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.intervalMs) = $event)),\n        class: \"ada__select\"\n      }, [\n        (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.INTERVALS, (opt) => {\n          return _createElementVNode(\"option\", {\n            key: opt.value,\n            value: opt.value\n          }, _toDisplayString(opt.label), 9 /* TEXT, PROPS */, _hoisted_5)\n        }), 64 /* STABLE_FRAGMENT */))\n      ], 512 /* NEED_PATCH */), [\n        [_vModelSelect, $setup.intervalMs]\n      ]),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"ada__refresh\",\n        disabled: $setup.busy,\n        onClick: $setup.refresh\n      }, _toDisplayString($setup.busy ? \"Bezig…\" : \"Ververs nu\"), 9 /* TEXT, PROPS */, _hoisted_6),\n      ($setup.updated)\n        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_7, \"bijgewerkt \" + _toDisplayString($setup.updated), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _createElementVNode(\"section\", _hoisted_8, [\n      _cache[6] || (_cache[6] = _createElementVNode(\"h2\", { class: \"section-title\" }, \"Storingen\", -1 /* CACHED */)),\n      _createVNode($setup[\"AdaProblemsPanel\"], {\n        data: $setup.problems,\n        onOpenSession: $setup.openSession\n      }, null, 8 /* PROPS */, [\"data\"])\n    ]),\n    _createElementVNode(\"section\", _hoisted_9, [\n      _cache[7] || (_cache[7] = _createElementVNode(\"h2\", { class: \"section-title\" }, \"pm2-status\", -1 /* CACHED */)),\n      _createVNode($setup[\"AdaPm2Panel\"], { data: $setup.pm2 }, null, 8 /* PROPS */, [\"data\"])\n    ]),\n    _createElementVNode(\"div\", _hoisted_10, [\n      _createElementVNode(\"section\", _hoisted_11, [\n        _cache[8] || (_cache[8] = _createElementVNode(\"h2\", { class: \"section-title\" }, \"Webhook-events\", -1 /* CACHED */)),\n        _createVNode($setup[\"AdaEventsPanel\"], { data: $setup.events }, null, 8 /* PROPS */, [\"data\"])\n      ]),\n      _createElementVNode(\"section\", _hoisted_12, [\n        _cache[9] || (_cache[9] = _createElementVNode(\"h2\", { class: \"section-title\" }, \"Per-issue sessies\", -1 /* CACHED */)),\n        _createVNode($setup[\"AdaSessionsPanel\"], {\n          data: $setup.sessions,\n          onOpen: $setup.openSession\n        }, null, 8 /* PROPS */, [\"data\"])\n      ])\n    ]),\n    _createVNode($setup[\"AdaSessionDialog\"], {\n      issue: $setup.sessionIssue,\n      data: $setup.sessionData,\n      loading: $setup.sessionLoading,\n      onClose: $setup.closeSession,\n      onShowEverything: _cache[2] || (_cache[2] = $event => ($setup.loadSession(true)))\n    }, null, 8 /* PROPS */, [\"issue\", \"data\", \"loading\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/AdaView.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/AdaView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/AdaView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/AdaView.vue\";script.__scopeId = \"data-v-9fa6f37a\";export default script;","<template>\n  <div class=\"gl\">\n    <div class=\"gl__bar\">\n      <h1 class=\"gl__title\">Gists</h1>\n      <span class=\"gl__spacer\" />\n      <button\n        v-if=\"selectedIds.length\"\n        type=\"button\"\n        class=\"btn\"\n        :disabled=\"busy\"\n        @click=\"confirming = true\"\n      >\n        {{ busy ? \"Verwijderen…\" : `Verwijder geselecteerde (${selectedIds.length})` }}\n      </button>\n      <RouterLink class=\"btn btn--primary\" to=\"/gists/new\">Nieuwe gist</RouterLink>\n    </div>\n\n    <p v-if=\"loading\" class=\"gl__state muted\">Bezig met laden…</p>\n    <p v-else-if=\"error\" class=\"gl__state gl__state--error\">{{ error }}</p>\n    <p v-else-if=\"!gists.length\" class=\"gl__state muted\">Nog geen gists.</p>\n\n    <table v-else class=\"tbl\">\n      <thead>\n        <tr>\n          <th class=\"gl__pick\">\n            <input\n              type=\"checkbox\"\n              aria-label=\"Selecteer alles\"\n              :checked=\"allSelected\"\n              :indeterminate=\"someSelected && !allSelected\"\n              @change=\"toggleAll(($event.target as HTMLInputElement).checked)\"\n            />\n          </th>\n          <th>Titel</th>\n          <th>Kenmerken</th>\n          <th class=\"tbl__num\">Aangemaakt</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr v-for=\"gist in gists\" :key=\"gist.id\">\n          <td class=\"gl__pick\">\n            <input\n              type=\"checkbox\"\n              :aria-label=\"`Selecteer ${gist.title}`\"\n              :checked=\"selectedIds.includes(gist.id)\"\n              @change=\"toggleOne(gist.id, ($event.target as HTMLInputElement).checked)\"\n            />\n          </td>\n          <td>\n            <RouterLink class=\"tbl__link tbl__name\" :to=\"`/gists/${gist.id}`\">{{ gist.title }}</RouterLink>\n            <a class=\"gl__share\" :href=\"gist.url\" target=\"_blank\" rel=\"noopener noreferrer\">{{ gist.url }}</a>\n          </td>\n          <td><GistBadges :gist=\"gist\" /></td>\n          <td class=\"tbl__num tbl__muted\">{{ fmtDate(gist.createdAt) }}</td>\n        </tr>\n      </tbody>\n    </table>\n\n    <ModalDialog :open=\"confirming\" title=\"Gists verwijderen\" @close=\"confirming = false\">\n      <p class=\"gl__ask\">Weet je het zeker? Dit kan niet ongedaan worden gemaakt.</p>\n      <p class=\"gl__ask muted\">{{ selectedIds.length === 1 ? \"1 gist\" : `${selectedIds.length} gists` }}, met de reacties erbij.</p>\n      <div class=\"gl__acts\">\n        <button type=\"button\" class=\"btn\" @click=\"confirming = false\">Annuleren</button>\n        <button type=\"button\" class=\"btn btn--primary\" :disabled=\"busy\" @click=\"remove\">\n          {{ busy ? \"Verwijderen…\" : \"Verwijderen\" }}\n        </button>\n      </div>\n    </ModalDialog>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { RouterLink } from \"vue-router\";\nimport GistBadges from \"../components/GistBadges.vue\";\nimport ModalDialog from \"../components/ModalDialog.vue\";\nimport { api } from \"../lib/api\";\nimport { errorMessage } from \"../lib/errors\";\nimport { fmtDate } from \"../lib/format\";\nimport type { AdminGistSummary } from \"@mod-tech42_tools/js/public-rpc\";\n\n// The order is listSummaries()'s (newest first, id as tiebreaker); there is no\n// client-side sorting, no search and no paging, exactly as in the app this\n// replaces. 26 gists fit on a screen and a half.\nconst gists = ref<AdminGistSummary[]>([]);\nconst selectedIds = ref<number[]>([]);\nconst loading = ref(true);\nconst busy = ref(false);\nconst error = ref(\"\");\nconst confirming = ref(false);\n\nconst allSelected = computed(() => gists.value.length > 0 && selectedIds.value.length === gists.value.length);\nconst someSelected = computed(() => selectedIds.value.length > 0);\n\nasync function load() {\n  try {\n    gists.value = await api.listGists();\n    // A second tab may have deleted something: keep only what is still there,\n    // so the count on the button matches what pressing it would remove.\n    const alive = new Set(gists.value.map(gist => gist.id));\n    selectedIds.value = selectedIds.value.filter(id => alive.has(id));\n    error.value = \"\";\n  } catch (e) {\n    error.value = errorMessage(e, \"De gists konden niet worden opgehaald.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\nfunction toggleAll(checked: boolean) {\n  selectedIds.value = checked ? gists.value.map(gist => gist.id) : [];\n}\n\nfunction toggleOne(id: number, checked: boolean) {\n  selectedIds.value = checked\n    ? [...selectedIds.value, id]\n    : selectedIds.value.filter(other => other !== id);\n}\n\nasync function remove() {\n  busy.value = true;\n  try {\n    await api.deleteGists({ ids: selectedIds.value });\n    confirming.value = false;\n    await load();\n  } catch (e) {\n    // The dialog closes anyway: the message belongs above the table, where it\n    // stays readable next to the list that did not change.\n    confirming.value = false;\n    error.value = errorMessage(e, \"Verwijderen is niet gelukt.\");\n  } finally {\n    busy.value = false;\n  }\n}\n\nonMounted(load);\n</script>\n\n<style scoped>\n.gl__bar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  margin: 8px 0 20px;\n}\n.gl__title { margin: 0; font-size: var(--fs-title); font-weight: var(--fw-heading); line-height: 1.1; }\n.gl__spacer { flex: 1; }\n.gl__state { margin: 0; font-size: var(--fs-body-s); }\n.gl__state--error { color: var(--fire); }\n\n/* Narrow enough to read as a gutter rather than a column. */\n.gl__pick { width: 36px; }\n.gl__pick input { cursor: pointer; }\n\n/* The share link sits under the title: it is what you hand to a reader, so it\n   is worth showing in full rather than hiding behind a \"Bekijken\" button. */\n.gl__share {\n  display: block;\n  margin-top: 2px;\n  color: var(--muted-foreground);\n  font-size: var(--fs-body-xs);\n  text-decoration: none;\n  overflow-wrap: anywhere;\n}\n.gl__share:hover { color: var(--primary-hover); text-decoration: underline; }\n\n.gl__ask { margin: 0; }\n.gl__acts { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }\n</style>\n","<template>\n  <span class=\"gb\">\n    <span v-for=\"badge in badges\" :key=\"badge.kind\" class=\"badge\" :class=\"`badge--${badge.kind}`\">{{ badge.label }}</span>\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { gistBadges } from \"@mod-tech42_tools/js/gists/admin\";\nimport type { AdminGistSummary } from \"@mod-tech42_tools/js/public-rpc\";\n\n// The labels and their order come from js/gists/admin.ts, so the list and the\n// editor cannot drift apart, and \"Nog 3u\" is computed here rather than sent\n// along: it is true at the moment of rendering, and the RPC only carries ISO\n// dates. The tinting per kind lives in frontend.scss (.badge--<kind>).\nconst props = defineProps<{ gist: AdminGistSummary }>();\n\nconst badges = computed(() => gistBadges({\n  hasPassword: props.gist.hasPassword,\n  documentCount: props.gist.documentCount,\n  commentCount: props.gist.commentCount,\n  commentsDisabled: props.gist.commentsDisabled,\n  expiresAt: props.gist.expiresAt ? new Date(props.gist.expiresAt) : null,\n}));\n</script>\n\n<style scoped>\n.gb {\n  display: inline-flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n</style>\n","/**\n * The display rules of the gists admin, as pure functions.\n *\n * This module stays free of every backend import on purpose: the Vue admin\n * pulls it in over `@mod-tech42_tools/js/gists/admin`, and the assetpack bundles\n * whatever it can reach. That is why the RPC glue -- which needs `RPCError` from\n * `@webhare/router` -- lives next door in `admin-rpc.ts` instead. Every other\n * `js/gists` module the frontends import (documents, comment-input,\n * comment-anchor, comment-view) obeys the same rule.\n *\n * Badges are computed in the browser rather than sent along, so \"nog 3u\" is\n * true at the moment of rendering and the RPC only has to carry ISO dates.\n */\n\n/** One label next to a title in the list, and how it should be tinted. */\nexport type GistBadge = {\n  kind: \"password\" | \"public\" | \"documents\" | \"comments\" | \"comments-off\" | \"expires\" | \"expired\";\n  label: string;\n};\n\nconst MINUTE_MS = 60 * 1000;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\n\n/**\n * How long a gist still has, in the shortest form that is still true. Ported\n * from the ExpirationBadge of the source homepage, with two deliberate\n * differences. Under an hour the source floors to hours and shows \"0h left\".\n * And the remainder is rounded up to whole minutes before it is split into\n * units: without that, a gist given seven days reads back as \"6d\" the instant\n * it is saved, because the few hundred milliseconds spent writing it are\n * enough for a plain floor to drop a whole day.\n */\nexport function formatExpiresIn(expiresAt: Date | null, now: Date = new Date()): string {\n  if (!expiresAt)\n    return \"\";\n\n  const left = Math.ceil((expiresAt.getTime() - now.getTime()) / MINUTE_MS) * MINUTE_MS;\n  if (left <= 0)\n    return \"Verlopen\";\n  if (left >= DAY_MS)\n    return `${Math.floor(left / DAY_MS)}d`;\n  if (left >= HOUR_MS)\n    return `${Math.floor(left / HOUR_MS)}u`;\n  if (left >= MINUTE_MS)\n    return `${Math.floor(left / MINUTE_MS)}m`;\n  return \"<1m\";\n}\n\n/** The same thing as a sentence, for the line under the date field. */\nexport function expiresLabel(expiresAt: Date | null, now: Date = new Date()): string {\n  const short = formatExpiresIn(expiresAt, now);\n  if (short === \"\" || short === \"Verlopen\")\n    return short;\n  return `Vervalt over ${short}`;\n}\n\n/** dd-mm-yyyy in the server's own timezone, which is the one the editor typed in. */\nfunction dutchDate(date: Date): string {\n  const pad = (value: number) => String(value).padStart(2, \"0\");\n  return `${pad(date.getDate())}-${pad(date.getMonth() + 1)}-${date.getFullYear()}`;\n}\n\n/**\n * The text an admin copies into a mail or a Slack message. A literal port of\n * ShareButton.tsx of the source app, translated: three optional lines, each\n * behind its own blank line, and the bare URL when there is nothing to add.\n */\nexport function buildShareText(input: { url: string; password: string; expiresAt: Date | null }): string {\n  const lines = [\"Hier is een gedeelde gist:\", input.url];\n  if (input.password)\n    lines.push(\"\", `Wachtwoord: ${input.password}`);\n  if (input.expiresAt)\n    lines.push(\"\", `Vervalt: ${dutchDate(input.expiresAt)}`);\n  return input.password || input.expiresAt ? lines.join(\"\\n\") : input.url;\n}\n\nfunction plural(count: number, one: string, many: string): string {\n  return `${count} ${count === 1 ? one : many}`;\n}\n\n/**\n * What the list shows next to a title. The order is GistListClient.tsx's:\n * lock state first, then documents, then comments, then the expiry. Comments\n * are on by default, so an on-badge on every row would be noise -- only a count\n * worth reading, or the fact that a gist opted out, earns a badge.\n */\nexport function gistBadges(gist: {\n  hasPassword: boolean;\n  documentCount: number;\n  commentCount: number;\n  commentsDisabled: boolean;\n  expiresAt: Date | null;\n}, now: Date = new Date()): GistBadge[] {\n  const badges: GistBadge[] = [\n    gist.hasPassword\n      ? { kind: \"password\", label: \"Wachtwoord\" }\n      : { kind: \"public\", label: \"Openbaar\" },\n  ];\n\n  if (gist.documentCount > 0)\n    badges.push({ kind: \"documents\", label: plural(gist.documentCount, \"document\", \"documenten\") });\n\n  if (gist.commentsDisabled) {\n    badges.push({\n      kind: \"comments-off\",\n      label: gist.commentCount > 0 ? `Reacties uit (${gist.commentCount} verborgen)` : \"Reacties uit\",\n    });\n  } else if (gist.commentCount > 0)\n    badges.push({ kind: \"comments\", label: plural(gist.commentCount, \"reactie\", \"reacties\") });\n\n  const short = formatExpiresIn(gist.expiresAt, now);\n  if (short === \"Verlopen\")\n    badges.push({ kind: \"expired\", label: short });\n  else if (short !== \"\")\n    badges.push({ kind: \"expires\", label: `Nog ${short}` });\n\n  return badges;\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"gb\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"span\", _hoisted_1, [\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.badges, (badge) => {\n      return (_openBlock(), _createElementBlock(\"span\", {\n        key: badge.kind,\n        class: _normalizeClass([\"badge\", `badge--${badge.kind}`])\n      }, _toDisplayString(badge.label), 3 /* TEXT, CLASS */))\n    }), 128 /* KEYED_FRAGMENT */))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/GistBadges.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/GistBadges.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/GistBadges.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/GistBadges.vue\";script.__scopeId = \"data-v-122d2fb9\";export default script;","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"gl\" }\nconst _hoisted_2 = { class: \"gl__bar\" }\nconst _hoisted_3 = [\"disabled\"]\nconst _hoisted_4 = {\n  key: 0,\n  class: \"gl__state muted\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"gl__state gl__state--error\"\n}\nconst _hoisted_6 = {\n  key: 2,\n  class: \"gl__state muted\"\n}\nconst _hoisted_7 = {\n  key: 3,\n  class: \"tbl\"\n}\nconst _hoisted_8 = { class: \"gl__pick\" }\nconst _hoisted_9 = [\"checked\", \"indeterminate\"]\nconst _hoisted_10 = { class: \"gl__pick\" }\nconst _hoisted_11 = [\"aria-label\", \"checked\", \"onChange\"]\nconst _hoisted_12 = [\"href\"]\nconst _hoisted_13 = { class: \"tbl__num tbl__muted\" }\nconst _hoisted_14 = { class: \"gl__ask muted\" }\nconst _hoisted_15 = { class: \"gl__acts\" }\nconst _hoisted_16 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _cache[5] || (_cache[5] = _createElementVNode(\"h1\", { class: \"gl__title\" }, \"Gists\", -1 /* CACHED */)),\n      _cache[6] || (_cache[6] = _createElementVNode(\"span\", { class: \"gl__spacer\" }, null, -1 /* CACHED */)),\n      ($setup.selectedIds.length)\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 0,\n            type: \"button\",\n            class: \"btn\",\n            disabled: $setup.busy,\n            onClick: _cache[0] || (_cache[0] = $event => ($setup.confirming = true))\n          }, _toDisplayString($setup.busy ? \"Verwijderen…\" : `Verwijder geselecteerde (${$setup.selectedIds.length})`), 9 /* TEXT, PROPS */, _hoisted_3))\n        : _createCommentVNode(\"v-if\", true),\n      _createVNode($setup[\"RouterLink\"], {\n        class: \"btn btn--primary\",\n        to: \"/gists/new\"\n      }, {\n        default: _withCtx(() => _cache[4] || (_cache[4] = [\n          _createTextVNode(\"Nieuwe gist\", -1 /* CACHED */)\n        ])),\n        _: 1 /* STABLE */,\n        __: [4]\n      })\n    ]),\n    ($setup.loading)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, \"Bezig met laden…\"))\n      : ($setup.error)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.error), 1 /* TEXT */))\n        : (!$setup.gists.length)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, \"Nog geen gists.\"))\n          : (_openBlock(), _createElementBlock(\"table\", _hoisted_7, [\n              _createElementVNode(\"thead\", null, [\n                _createElementVNode(\"tr\", null, [\n                  _createElementVNode(\"th\", _hoisted_8, [\n                    _createElementVNode(\"input\", {\n                      type: \"checkbox\",\n                      \"aria-label\": \"Selecteer alles\",\n                      checked: $setup.allSelected,\n                      indeterminate: $setup.someSelected && !$setup.allSelected,\n                      onChange: _cache[1] || (_cache[1] = $event => ($setup.toggleAll(($event.target as HTMLInputElement).checked)))\n                    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_9)\n                  ]),\n                  _cache[7] || (_cache[7] = _createElementVNode(\"th\", null, \"Titel\", -1 /* CACHED */)),\n                  _cache[8] || (_cache[8] = _createElementVNode(\"th\", null, \"Kenmerken\", -1 /* CACHED */)),\n                  _cache[9] || (_cache[9] = _createElementVNode(\"th\", { class: \"tbl__num\" }, \"Aangemaakt\", -1 /* CACHED */))\n                ])\n              ]),\n              _createElementVNode(\"tbody\", null, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.gists, (gist) => {\n                  return (_openBlock(), _createElementBlock(\"tr\", {\n                    key: gist.id\n                  }, [\n                    _createElementVNode(\"td\", _hoisted_10, [\n                      _createElementVNode(\"input\", {\n                        type: \"checkbox\",\n                        \"aria-label\": `Selecteer ${gist.title}`,\n                        checked: $setup.selectedIds.includes(gist.id),\n                        onChange: $event => ($setup.toggleOne(gist.id, ($event.target as HTMLInputElement).checked))\n                      }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_11)\n                    ]),\n                    _createElementVNode(\"td\", null, [\n                      _createVNode($setup[\"RouterLink\"], {\n                        class: \"tbl__link tbl__name\",\n                        to: `/gists/${gist.id}`\n                      }, {\n                        default: _withCtx(() => [\n                          _createTextVNode(_toDisplayString(gist.title), 1 /* TEXT */)\n                        ]),\n                        _: 2 /* DYNAMIC */\n                      }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"to\"]),\n                      _createElementVNode(\"a\", {\n                        class: \"gl__share\",\n                        href: gist.url,\n                        target: \"_blank\",\n                        rel: \"noopener noreferrer\"\n                      }, _toDisplayString(gist.url), 9 /* TEXT, PROPS */, _hoisted_12)\n                    ]),\n                    _createElementVNode(\"td\", null, [\n                      _createVNode($setup[\"GistBadges\"], { gist: gist }, null, 8 /* PROPS */, [\"gist\"])\n                    ]),\n                    _createElementVNode(\"td\", _hoisted_13, _toDisplayString($setup.fmtDate(gist.createdAt)), 1 /* TEXT */)\n                  ]))\n                }), 128 /* KEYED_FRAGMENT */))\n              ])\n            ])),\n    _createVNode($setup[\"ModalDialog\"], {\n      open: $setup.confirming,\n      title: \"Gists verwijderen\",\n      onClose: _cache[3] || (_cache[3] = $event => ($setup.confirming = false))\n    }, {\n      default: _withCtx(() => [\n        _cache[10] || (_cache[10] = _createElementVNode(\"p\", { class: \"gl__ask\" }, \"Weet je het zeker? Dit kan niet ongedaan worden gemaakt.\", -1 /* CACHED */)),\n        _createElementVNode(\"p\", _hoisted_14, _toDisplayString($setup.selectedIds.length === 1 ? \"1 gist\" : `${$setup.selectedIds.length} gists`) + \", met de reacties erbij.\", 1 /* TEXT */),\n        _createElementVNode(\"div\", _hoisted_15, [\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"btn\",\n            onClick: _cache[2] || (_cache[2] = $event => ($setup.confirming = false))\n          }, \"Annuleren\"),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"btn btn--primary\",\n            disabled: $setup.busy,\n            onClick: $setup.remove\n          }, _toDisplayString($setup.busy ? \"Verwijderen…\" : \"Verwijderen\"), 9 /* TEXT, PROPS */, _hoisted_16)\n        ])\n      ]),\n      _: 1 /* STABLE */,\n      __: [10]\n    }, 8 /* PROPS */, [\"open\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistsListView.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistsListView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistsListView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistsListView.vue\";script.__scopeId = \"data-v-6c7c32b2\";export default script;","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, shallowRef, watch } from \"vue\";\nimport { RouterLink, useRouter } from \"vue-router\";\nimport type { AdminGist } from \"@mod-tech42_tools/js/public-rpc\";\nimport { expiresLabel } from \"@mod-tech42_tools/js/gists/admin\";\nimport { stateFromGist, toCreateRequest, toUpdateRequest, type GistFormState } from \"../lib/gist-form\";\nimport { api } from \"../lib/api\";\nimport { errorMessage } from \"../lib/errors\";\nimport DocumentManager from \"../components/DocumentManager.vue\";\nimport ShareDialog from \"../components/ShareDialog.vue\";\nimport ModalDialog from \"../components/ModalDialog.vue\";\n\nconst props = defineProps<{ id: number | null }>();\nconst router = useRouter();\nconst original = shallowRef<AdminGist | null>(null);\nconst state = ref<GistFormState>(emptyState());\nconst loading = shallowRef(false);\nconst busy = shallowRef(false);\nconst reading = shallowRef(false);\nconst error = shallowRef(\"\");\nconst titleError = shallowRef(\"\");\nconst message = shallowRef(\"\");\nconst missing = shallowRef(false);\nconst sharing = shallowRef(false);\nconst confirming = shallowRef(false);\nconst titleInput = ref<HTMLInputElement | null>(null);\nlet generation = 0;\nlet timer: ReturnType<typeof setTimeout> | undefined;\nconst locked = computed(() => busy.value || reading.value);\nconst documents = computed({\n  get: () => state.value.documents ?? [],\n  set: value => { state.value.documents = value; },\n});\nconst expiryLabel = computed(() => expiresLabel(original.value?.expiresAt ? new Date(original.value.expiresAt) : null));\n\nfunction emptyState(): GistFormState {\n  return { title: \"\", content: \"\", documents: null, password: \"\", removePassword: false, expiry: \"never\", commentsDisabled: false };\n}\n\nfunction showMessage(value: string) {\n  clearTimeout(timer);\n  message.value = value;\n  timer = setTimeout(() => { message.value = \"\"; }, 2000);\n}\n\nfunction reportFailure(caught: unknown, fallback: string) {\n  const detail = errorMessage(caught, fallback);\n  // The RPC client preserves the message but discards the HTTP status.\n  missing.value = detail === `RPC Error: Could not find gist #${props.id}`;\n  error.value = missing.value ? \"Deze gist bestaat niet meer.\" : detail;\n}\n\nwatch(() => props.id, async (id, previous, onCleanup) => {\n  const current = ++generation;\n  onCleanup(() => { generation++; });\n  clearTimeout(timer);\n  original.value = null;\n  state.value = emptyState();\n  error.value = \"\";\n  titleError.value = \"\";\n  message.value = \"\";\n  missing.value = false;\n  sharing.value = false;\n  confirming.value = false;\n  busy.value = false;\n  reading.value = false;\n  loading.value = id !== null;\n  if (id === null) return;\n  try {\n    const gist = await api.getGist({ id });\n    if (generation !== current) return;\n    original.value = gist;\n    state.value = stateFromGist(gist);\n  } catch (caught) {\n    if (generation === current) reportFailure(caught, \"De gist kon niet worden opgehaald.\");\n  } finally {\n    if (generation === current) loading.value = false;\n  }\n}, { immediate: true });\n\nonBeforeUnmount(() => { generation++; clearTimeout(timer); });\n\nasync function save() {\n  if (locked.value) return;\n  error.value = \"\";\n  message.value = \"\";\n  titleError.value = state.value.title.trim() ? \"\" : \"Vul een titel in.\";\n  if (titleError.value) { titleInput.value?.focus(); return; }\n  const current = generation;\n  const existing = original.value;\n  const request = existing ? toUpdateRequest(state.value, existing) : toCreateRequest(state.value);\n  if (existing && !Object.keys(request).length) { showMessage(\"Niets gewijzigd\"); return; }\n  busy.value = true;\n  try {\n    const gist = existing ? await api.updateGist({ id: existing.id, ...request }) : await api.createGist(request);\n    if (generation !== current) return;\n    if (!existing) {\n      await router.push({ name: \"gist-detail\", params: { id: gist.id } });\n    } else {\n      original.value = gist;\n      state.value = stateFromGist(gist);\n      showMessage(\"Opgeslagen\");\n    }\n  } catch (caught) {\n    if (generation === current) reportFailure(caught, \"Opslaan is niet gelukt.\");\n  } finally {\n    if (generation === current) busy.value = false;\n  }\n}\n\nasync function remove() {\n  if (locked.value || !original.value) return;\n  const current = generation;\n  busy.value = true;\n  error.value = \"\";\n  try {\n    await api.deleteGists({ ids: [original.value.id] });\n    if (generation !== current) return;\n    confirming.value = false;\n    await router.push({ name: \"gists\" });\n  } catch (caught) {\n    if (generation === current) error.value = errorMessage(caught, \"Verwijderen is niet gelukt.\");\n  } finally {\n    if (generation === current) busy.value = false;\n  }\n}\n\nfunction toggleRemovePassword() {\n  state.value.removePassword = !state.value.removePassword;\n  state.value.password = \"\";\n}\n</script>\n\n<template>\n  <div class=\"ge\">\n    <RouterLink class=\"ge__back\" :to=\"{ name: 'gists' }\">Alle gists</RouterLink>\n    <header class=\"ge__head\">\n      <h1 class=\"ge__title\">{{ id === null ? \"Nieuwe gist\" : original?.title ?? \"Gist\" }}</h1>\n      <div v-if=\"original && !missing\" class=\"ge__actions\">\n        <a class=\"btn\" :href=\"original.url\" target=\"_blank\" rel=\"noopener noreferrer\">Bekijken</a>\n        <button type=\"button\" class=\"btn\" :disabled=\"locked\" @click=\"sharing = true\">Delen</button>\n        <button type=\"button\" class=\"btn\" :disabled=\"locked\" @click=\"confirming = true\">Verwijderen</button>\n      </div>\n    </header>\n    <p v-if=\"loading\" class=\"muted\" role=\"status\">Laden...</p>\n    <p v-if=\"error && !confirming\" class=\"field__msg\" role=\"alert\">{{ error }}</p>\n    <form v-if=\"!loading && !missing && (id === null || original)\" class=\"ge__form\" novalidate @submit.prevent=\"save\">\n      <fieldset class=\"ge__fields\" :disabled=\"locked\">\n        <label class=\"field\" for=\"gist-title\">\n          <span class=\"field__label\">Titel</span>\n          <input id=\"gist-title\" ref=\"titleInput\" v-model=\"state.title\" class=\"input\" :class=\"{ 'input--err': titleError }\" :aria-invalid=\"Boolean(titleError)\" aria-describedby=\"gist-title-error\" required />\n          <span id=\"gist-title-error\" class=\"field__msg\">{{ titleError }}</span>\n        </label>\n        <label v-if=\"state.documents === null\" class=\"field\" for=\"gist-content\">\n          <span class=\"field__label\">Inhoud</span>\n          <textarea id=\"gist-content\" v-model=\"state.content\" class=\"input input--area\" rows=\"20\" />\n        </label>\n        <DocumentManager v-if=\"id === null || state.documents !== null\" :key=\"id ?? 'new'\" v-model=\"documents\" :disabled=\"busy\" @busy=\"reading = $event\" />\n        <div class=\"ge__settings\">\n          <div class=\"field\">\n            <label class=\"field__label\" for=\"gist-password\">Wachtwoord</label>\n            <div class=\"ge__password\">\n              <input id=\"gist-password\" v-model=\"state.password\" class=\"input\" type=\"text\" autocomplete=\"off\" :disabled=\"state.removePassword\" :placeholder=\"original ? 'Leeg laten om te behouden' : 'Geen wachtwoord'\" />\n              <button v-if=\"original?.hasPassword\" type=\"button\" class=\"btn\" :aria-pressed=\"state.removePassword\" @click=\"toggleRemovePassword\">{{ state.removePassword ? \"Behouden\" : \"Verwijderen\" }}</button>\n            </div>\n            <span v-if=\"state.removePassword\" class=\"ge__hint\">Wachtwoord wordt verwijderd bij opslaan.</span>\n          </div>\n          <div class=\"field\">\n            <label class=\"field__label\" for=\"gist-expiry\">Vervaldatum</label>\n            <select id=\"gist-expiry\" v-model=\"state.expiry\" class=\"input\">\n              <template v-if=\"original\">\n                <option value=\"keep\">Behouden</option>\n                <option value=\"remove\">Verwijderen</option>\n              </template>\n              <option v-else value=\"never\">Nooit</option>\n              <option value=\"1h\">Over 1 uur</option>\n              <option value=\"1d\">Over 1 dag</option>\n              <option value=\"7d\">Over 7 dagen</option>\n              <option value=\"30d\">Over 30 dagen</option>\n            </select>\n            <span v-if=\"expiryLabel\" class=\"ge__hint\">{{ expiryLabel }}</span>\n          </div>\n        </div>\n        <label class=\"ge__check\"><input v-model=\"state.commentsDisabled\" type=\"checkbox\" /> Reacties uitschakelen</label>\n      </fieldset>\n      <footer class=\"ge__footer\">\n        <button type=\"submit\" class=\"btn btn--primary\" :disabled=\"locked\">{{ id === null ? \"Aanmaken\" : \"Opslaan\" }}</button>\n        <span role=\"status\" aria-live=\"polite\">{{ busy ? \"Bezig...\" : message }}</span>\n      </footer>\n    </form>\n    <ShareDialog v-if=\"original\" :open=\"sharing\" :gist=\"original\" @close=\"sharing = false\" />\n    <ModalDialog :open=\"confirming\" title=\"Gist verwijderen\" @close=\"!busy && (confirming = false)\">\n      <p>Weet je het zeker? Dit kan niet ongedaan worden gemaakt.</p>\n      <p v-if=\"error\" class=\"field__msg\" role=\"alert\">{{ error }}</p>\n      <div class=\"ge__actions\">\n        <button type=\"button\" class=\"btn\" :disabled=\"busy\" @click=\"confirming = false\">Annuleren</button>\n        <button type=\"button\" class=\"btn btn--primary\" :disabled=\"busy\" @click=\"remove\">{{ busy ? \"Verwijderen...\" : \"Verwijderen\" }}</button>\n      </div>\n    </ModalDialog>\n  </div>\n</template>\n\n<style scoped>\n.ge { max-width: 1100px; margin: 0 auto; min-width: 0; }\n.ge__back { color: var(--muted-foreground); font-size: var(--fs-body-s); cursor: pointer; }\n.ge__head { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; margin: 16px 0 24px; }\n.ge__title { flex: 1 1 260px; min-width: 0; margin: 0; font-size: var(--fs-h-m); font-weight: var(--fw-heading); overflow-wrap: anywhere; }\n.ge__actions { display: flex; flex-wrap: wrap; gap: 8px; }\n.ge__form, .ge__fields { display: flex; flex-direction: column; gap: 24px; }\n.ge__fields { border: 0; padding: 0; margin: 0; min-width: 0; }\n.ge__settings { display: grid; grid-template-columns: minmax(0, 1fr); gap: 24px; }\n.ge__password { display: flex; gap: 8px; }\n.ge__password .input { min-width: 0; }\n.ge__hint { margin-top: 6px; color: var(--muted-foreground); font-size: var(--fs-body-xs); }\n.ge__check { display: flex; align-items: center; gap: 8px; font-size: var(--fs-body-s); cursor: pointer; }\n.ge__check input { cursor: pointer; }\n.ge__footer { display: flex; align-items: center; gap: 16px; padding: 16px 0; border-top: 1px solid var(--border); font-size: var(--fs-body-s); }\n@media (min-width: 768px) { .ge__settings { grid-template-columns: repeat(2, minmax(0, 1fr)); } }\n</style>\n","import type { CreateGistRequest, UpdateGistRequest } from \"@mod-tech42_tools/js/gists/api-gists\";\nimport type { AdminGist } from \"@mod-tech42_tools/js/public-rpc\";\nimport type { GistDocument } from \"@mod-tech42_tools/js/gists/types\";\n\nexport type ExpiryChoice = \"keep\" | \"remove\" | \"1h\" | \"1d\" | \"7d\" | \"30d\";\nexport type GistFormState = {\n  title: string;\n  content: string;\n  documents: GistDocument[] | null;\n  password: string;\n  removePassword: boolean;\n  expiry: \"never\" | ExpiryChoice;\n  commentsDisabled: boolean;\n};\n\nexport function stateFromGist(gist: AdminGist): GistFormState {\n  return {\n    title: gist.title, content: gist.content,\n    documents: gist.documents?.map(doc => ({ ...doc })) ?? null,\n    password: \"\", removePassword: false, expiry: \"keep\", commentsDisabled: gist.commentsDisabled,\n  };\n}\n\nexport function toCreateRequest(state: GistFormState): CreateGistRequest {\n  return {\n    title: state.title.trim(),\n    ...(state.documents?.length ? { documents: state.documents } : { content: state.content }),\n    password: state.password || null,\n    expiration: state.expiry === \"keep\" || state.expiry === \"remove\" ? \"never\" : state.expiry,\n    commentsDisabled: state.commentsDisabled,\n  };\n}\n\nexport function toUpdateRequest(state: GistFormState, original: AdminGist): UpdateGistRequest {\n  const request: UpdateGistRequest = {};\n  if (state.title.trim() !== original.title)\n    request.title = state.title.trim();\n  if (original.documents !== null) {\n    const documents = state.documents?.length ? state.documents : null;\n    if (JSON.stringify(documents) !== JSON.stringify(original.documents))\n      request.documents = documents;\n  } else if (state.content !== original.content)\n    request.content = state.content;\n  if (state.removePassword)\n    request.password = null;\n  else if (state.password)\n    request.password = state.password;\n  if (state.expiry !== \"keep\")\n    request.expiration = state.expiry === \"remove\" ? \"never\" : state.expiry;\n  if (state.commentsDisabled !== original.commentsDisabled)\n    request.commentsDisabled = state.commentsDisabled;\n  return request;\n}\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, ref, shallowRef } from \"vue\";\nimport type { GistDocument } from \"@mod-tech42_tools/js/gists/types\";\nimport { downloadMarkdown, readMarkdownFiles } from \"../lib/markdown-files\";\n\nconst documents = defineModel<GistDocument[]>({ required: true });\nconst props = defineProps<{ disabled?: boolean }>();\nconst emit = defineEmits<{ busy: [value: boolean] }>();\nconst addInput = ref<HTMLInputElement | null>(null);\nconst replaceInput = ref<HTMLInputElement | null>(null);\nconst replacing = shallowRef<number | null>(null);\nconst reading = shallowRef(false);\nconst dragging = shallowRef(false);\nconst error = shallowRef(\"\");\nlet active = true;\nonBeforeUnmount(() => { active = false; });\n\nfunction move(index: number, direction: number) {\n  const next = [...documents.value];\n  const target = index + direction;\n  if (props.disabled || reading.value || target < 0 || target >= next.length) return;\n  [next[index], next[target]] = [next[target], next[index]];\n  documents.value = next;\n}\n\nfunction rename(index: number, value: string) {\n  documents.value = documents.value.map((doc, i) => i === index ? { ...doc, name: value } : doc);\n}\n\nfunction replace(index: number) {\n  replacing.value = index;\n  replaceInput.value?.click();\n}\n\nasync function read(files: FileList | File[], index: number | null = null) {\n  if (props.disabled || reading.value || !files.length) return;\n  reading.value = true;\n  emit(\"busy\", true);\n  error.value = \"\";\n  try {\n    const result = await readMarkdownFiles(files);\n    if (!active) return;\n    if (result.rejected.length)\n      error.value = \"Alleen .md- of .markdown-bestanden worden ondersteund.\";\n    if (result.documents.length) {\n      documents.value = index === null\n        ? [...documents.value, ...result.documents]\n        : documents.value.map((doc, i) => i === index ? result.documents[0] : doc);\n    }\n  } catch {\n    if (active) error.value = \"Het bestand kon niet worden gelezen. Probeer het opnieuw.\";\n  } finally {\n    reading.value = false;\n    if (active) emit(\"busy\", false);\n  }\n}\n\nfunction selected(event: Event, replacement = false) {\n  const input = event.target as HTMLInputElement;\n  const files = Array.from(input.files ?? []);\n  input.value = \"\";\n  void read(files, replacement ? replacing.value : null);\n}\n\nfunction drop(event: DragEvent) {\n  dragging.value = false;\n  if (event.dataTransfer) void read(event.dataTransfer.files);\n}\n</script>\n\n<template>\n  <section class=\"dm\" aria-label=\"Documenten\">\n    <h2 class=\"dm__title\">Documenten ({{ documents.length }})</h2>\n    <ul v-if=\"documents.length\" class=\"dm__list\">\n      <li v-for=\"(doc, index) in documents\" :key=\"index\" class=\"dm__row\">\n        <div class=\"dm__order\">\n          <button type=\"button\" class=\"btn dm__arrow\" :disabled=\"disabled || reading || index === 0\" :aria-label=\"`${doc.name} omhoog`\" title=\"Omhoog\" @click=\"move(index, -1)\">▲</button>\n          <button type=\"button\" class=\"btn dm__arrow\" :disabled=\"disabled || reading || index === documents.length - 1\" :aria-label=\"`${doc.name} omlaag`\" title=\"Omlaag\" @click=\"move(index, 1)\">▼</button>\n        </div>\n        <input class=\"input dm__name\" :value=\"doc.name\" :aria-label=\"`Bestandsnaam document ${index + 1}`\" :disabled=\"disabled || reading\" @input=\"rename(index, ($event.target as HTMLInputElement).value)\" />\n        <div class=\"dm__actions\">\n          <button type=\"button\" class=\"btn\" :disabled=\"disabled || reading\" @click=\"downloadMarkdown(doc)\">Downloaden</button>\n          <button type=\"button\" class=\"btn\" :disabled=\"disabled || reading\" @click=\"replace(index)\">Vervangen</button>\n          <button type=\"button\" class=\"btn\" :disabled=\"disabled || reading\" @click=\"documents = documents.filter((_, i) => i !== index)\">Verwijderen</button>\n        </div>\n      </li>\n    </ul>\n    <button type=\"button\" class=\"dm__drop\" :class=\"{ 'dm__drop--active': dragging }\" :disabled=\"disabled || reading\"\n      @click=\"addInput?.click()\" @dragover.prevent=\"dragging = true\" @dragleave=\"dragging = false\" @drop.prevent=\"drop\">\n      {{ reading ? \"Bestanden lezen...\" : \"Bestanden toevoegen\" }}\n    </button>\n    <p v-if=\"error\" class=\"field__msg\" role=\"alert\">{{ error }}</p>\n    <input ref=\"addInput\" type=\"file\" multiple accept=\".md,.markdown,text/markdown\" hidden aria-label=\"Bestanden toevoegen\" @change=\"selected($event)\" />\n    <input ref=\"replaceInput\" type=\"file\" accept=\".md,.markdown,text/markdown\" hidden aria-label=\"Bestand vervangen\" @change=\"selected($event, true)\" />\n  </section>\n</template>\n\n<style scoped>\n.dm { display: flex; flex-direction: column; gap: 12px; min-width: 0; }\n.dm__title { margin: 0; font-size: var(--fs-body-s); font-weight: var(--fw-label); }\n.dm__list { list-style: none; margin: 0; padding: 0; }\n.dm__row { display: grid; grid-template-columns: 32px minmax(0, 1fr); align-items: center; gap: 8px; padding: 12px 0; border-bottom: 1px solid var(--border); }\n.dm__order { display: flex; flex-direction: column; gap: 4px; }\n.dm__arrow { width: 32px; height: 28px; padding: 0; font-size: 12px; }\n.dm__name { min-width: 0; }\n.dm__actions { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 8px; }\n.dm__drop { min-height: 64px; padding: 16px; border: 1px dashed var(--input); border-radius: var(--radius-lg); background: transparent; color: var(--foreground); cursor: pointer; }\n.dm__drop--active { background: var(--hover); border-color: var(--ring); }\n.dm__drop:disabled { opacity: 0.55; cursor: default; }\n@media (hover: hover) { .dm__drop:hover:not(:disabled) { background: var(--hover); } }\n@media (min-width: 960px) {\n  .dm__row { grid-template-columns: 32px minmax(0, 1fr) auto; }\n  .dm__actions { grid-column: auto; }\n}\n</style>\n","/** Ported from lib/documents.ts and buildCombinedMarkdown in lib/gists.ts of the\n    source app (~/projects/overig/gists). */\n\nimport type { GistDocument } from \"./types\";\n\nconst MARKDOWN_EXTENSIONS = [\".md\", \".markdown\"];\n\n/** True when a filename looks like a markdown file. */\nexport function isMarkdownFilename(name: string): boolean {\n  const lower = name.toLowerCase();\n  return MARKDOWN_EXTENSIONS.some(ext => lower.endsWith(ext));\n}\n\n/** Drop a trailing .md/.markdown extension (used for default titles). */\nexport function stripMarkdownExtension(name: string): string {\n  for (const ext of MARKDOWN_EXTENSIONS) {\n    if (name.toLowerCase().endsWith(ext))\n      return name.slice(0, -ext.length);\n  }\n  return name;\n}\n\n/** Force a `.md` extension on a filename (replacing .markdown). */\nexport function ensureMdExtension(name: string): string {\n  const trimmed = name.trim() || \"document\";\n  if (trimmed.toLowerCase().endsWith(\".md\"))\n    return trimmed;\n  return `${stripMarkdownExtension(trimmed)}.md`;\n}\n\n/** Filesystem-safe slug for anchor ids and zip/download filenames. */\nexport function slugifyFilename(name: string): string {\n  return stripMarkdownExtension(name)\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\") || \"document\";\n}\n\n/**\n * Return zip-entry filenames for a set of documents: each forced to `.md` and\n * de-duplicated (`name.md`, `name-2.md`, ...) so no two entries collide.\n */\nexport function dedupeDocumentFilenames(documents: GistDocument[]): string[] {\n  const seen = new Map<string, number>();\n  return documents.map(doc => {\n    const base = ensureMdExtension(doc.name);\n    const count = seen.get(base) ?? 0;\n    seen.set(base, count + 1);\n    if (count === 0)\n      return base;\n    return `${base.slice(0, -3)}-${count + 1}.md`;\n  });\n}\n\n/**\n * Combine the markdown documents of a file-based gist into a single markdown\n * string. Each document becomes a `## <name>` section, separated by a rule.\n * This derived value is stored in the gist's `content` so \"copy as markdown\",\n * the API and any single-string fallback keep working.\n */\nexport function buildCombinedMarkdown(documents: GistDocument[]): string {\n  return documents\n    .map(doc => `## ${doc.name}\\n\\n${doc.content.trim()}`)\n    .join(\"\\n\\n---\\n\\n\");\n}\n","import { ensureMdExtension, isMarkdownFilename } from \"@mod-tech42_tools/js/gists/documents\";\nimport type { GistDocument } from \"@mod-tech42_tools/js/gists/types\";\n\nexport async function readMarkdownFiles(files: FileList | File[]): Promise<{ documents: GistDocument[]; rejected: string[] }> {\n  const incoming = Array.from(files);\n  const documents = await Promise.all(incoming.filter(file => isMarkdownFilename(file.name)).map(async file => ({\n    name: file.name, content: await file.text(),\n  })));\n  return { documents, rejected: incoming.filter(file => !isMarkdownFilename(file.name)).map(file => file.name) };\n}\n\nexport function downloadMarkdown(doc: GistDocument): void {\n  const url = URL.createObjectURL(new Blob([doc.content], { type: \"text/markdown;charset=utf-8\" }));\n  const link = document.createElement(\"a\");\n  link.href = url;\n  link.download = ensureMdExtension(doc.name);\n  document.body.appendChild(link);\n  link.click();\n  link.remove();\n  setTimeout(() => URL.revokeObjectURL(url), 1000);\n}\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"dm\",\n  \"aria-label\": \"Documenten\"\n}\nconst _hoisted_2 = { class: \"dm__title\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"dm__list\"\n}\nconst _hoisted_4 = { class: \"dm__order\" }\nconst _hoisted_5 = [\"disabled\", \"aria-label\", \"onClick\"]\nconst _hoisted_6 = [\"disabled\", \"aria-label\", \"onClick\"]\nconst _hoisted_7 = [\"value\", \"aria-label\", \"disabled\", \"onInput\"]\nconst _hoisted_8 = { class: \"dm__actions\" }\nconst _hoisted_9 = [\"disabled\", \"onClick\"]\nconst _hoisted_10 = [\"disabled\", \"onClick\"]\nconst _hoisted_11 = [\"disabled\", \"onClick\"]\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = {\n  key: 1,\n  class: \"field__msg\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n    _createElementVNode(\"h2\", _hoisted_2, \"Documenten (\" + _toDisplayString($setup.documents.length) + \")\", 1 /* TEXT */),\n    ($setup.documents.length)\n      ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_3, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.documents, (doc, index) => {\n            return (_openBlock(), _createElementBlock(\"li\", {\n              key: index,\n              class: \"dm__row\"\n            }, [\n              _createElementVNode(\"div\", _hoisted_4, [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn dm__arrow\",\n                  disabled: $props.disabled || $setup.reading || index === 0,\n                  \"aria-label\": `${doc.name} omhoog`,\n                  title: \"Omhoog\",\n                  onClick: $event => ($setup.move(index, -1))\n                }, \"▲\", 8 /* PROPS */, _hoisted_5),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn dm__arrow\",\n                  disabled: $props.disabled || $setup.reading || index === $setup.documents.length - 1,\n                  \"aria-label\": `${doc.name} omlaag`,\n                  title: \"Omlaag\",\n                  onClick: $event => ($setup.move(index, 1))\n                }, \"▼\", 8 /* PROPS */, _hoisted_6)\n              ]),\n              _createElementVNode(\"input\", {\n                class: \"input dm__name\",\n                value: doc.name,\n                \"aria-label\": `Bestandsnaam document ${index + 1}`,\n                disabled: $props.disabled || $setup.reading,\n                onInput: $event => ($setup.rename(index, ($event.target as HTMLInputElement).value))\n              }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_7),\n              _createElementVNode(\"div\", _hoisted_8, [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn\",\n                  disabled: $props.disabled || $setup.reading,\n                  onClick: $event => ($setup.downloadMarkdown(doc))\n                }, \"Downloaden\", 8 /* PROPS */, _hoisted_9),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn\",\n                  disabled: $props.disabled || $setup.reading,\n                  onClick: $event => ($setup.replace(index))\n                }, \"Vervangen\", 8 /* PROPS */, _hoisted_10),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn\",\n                  disabled: $props.disabled || $setup.reading,\n                  onClick: $event => ($setup.documents = $setup.documents.filter((_, i) => i !== index))\n                }, \"Verwijderen\", 8 /* PROPS */, _hoisted_11)\n              ])\n            ]))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: _normalizeClass([\"dm__drop\", { 'dm__drop--active': $setup.dragging }]),\n      disabled: $props.disabled || $setup.reading,\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.addInput?.click())),\n      onDragover: _cache[1] || (_cache[1] = _withModifiers($event => ($setup.dragging = true), [\"prevent\"])),\n      onDragleave: _cache[2] || (_cache[2] = $event => ($setup.dragging = false)),\n      onDrop: _withModifiers($setup.drop, [\"prevent\"])\n    }, _toDisplayString($setup.reading ? \"Bestanden lezen...\" : \"Bestanden toevoegen\"), 43 /* TEXT, CLASS, PROPS, NEED_HYDRATION */, _hoisted_12),\n    ($setup.error)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, _toDisplayString($setup.error), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"input\", {\n      ref: \"addInput\",\n      type: \"file\",\n      multiple: \"\",\n      accept: \".md,.markdown,text/markdown\",\n      hidden: \"\",\n      \"aria-label\": \"Bestanden toevoegen\",\n      onChange: _cache[3] || (_cache[3] = $event => ($setup.selected($event)))\n    }, null, 544 /* NEED_HYDRATION, NEED_PATCH */),\n    _createElementVNode(\"input\", {\n      ref: \"replaceInput\",\n      type: \"file\",\n      accept: \".md,.markdown,text/markdown\",\n      hidden: \"\",\n      \"aria-label\": \"Bestand vervangen\",\n      onChange: _cache[4] || (_cache[4] = $event => ($setup.selected($event, true)))\n    }, null, 544 /* NEED_HYDRATION, NEED_PATCH */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/DocumentManager.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/DocumentManager.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/DocumentManager.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/DocumentManager.vue\";script.__scopeId = \"data-v-95b5eb10\";export default script;","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, shallowRef, watch } from \"vue\";\nimport type { AdminGist } from \"@mod-tech42_tools/js/public-rpc\";\nimport { buildShareText } from \"@mod-tech42_tools/js/gists/admin\";\nimport ModalDialog from \"./ModalDialog.vue\";\n\nconst props = defineProps<{ open: boolean; gist: AdminGist }>();\nconst emit = defineEmits<{ close: [] }>();\nconst copied = shallowRef(false);\nconst error = shallowRef(\"\");\nlet timer: ReturnType<typeof setTimeout> | undefined;\nconst text = computed(() => buildShareText({\n  url: props.gist.url, password: props.gist.password ?? \"\",\n  expiresAt: props.gist.expiresAt ? new Date(props.gist.expiresAt) : null,\n}));\nwatch(() => props.open, () => { clearTimeout(timer); copied.value = false; error.value = \"\"; });\nonBeforeUnmount(() => clearTimeout(timer));\n\nasync function copy() {\n  try {\n    await navigator.clipboard.writeText(text.value);\n    copied.value = true;\n    error.value = \"\";\n    clearTimeout(timer);\n    timer = setTimeout(() => { copied.value = false; }, 2000);\n  } catch {\n    error.value = \"Kopiëren is niet gelukt. Selecteer en kopieer de tekst.\";\n  }\n}\n</script>\n\n<template>\n  <ModalDialog :open=\"open\" title=\"Gist delen\" @close=\"emit('close')\">\n    <textarea class=\"input input--area\" rows=\"8\" readonly aria-label=\"Deeltekst\" :value=\"text\" />\n    <p v-if=\"error\" class=\"field__msg\" role=\"alert\">{{ error }}</p>\n    <div class=\"share__actions\">\n      <button type=\"button\" class=\"btn btn--primary\" @click=\"copy\">{{ copied ? \"Gekopieerd\" : \"Kopiëren\" }}</button>\n    </div>\n  </ModalDialog>\n</template>\n\n<style scoped>\n.share__actions { display: flex; justify-content: flex-end; }\n</style>\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"value\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"field__msg\",\n  role: \"alert\"\n}\nconst _hoisted_3 = { class: \"share__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"ModalDialog\"], {\n    open: $props.open,\n    title: \"Gist delen\",\n    onClose: _cache[0] || (_cache[0] = $event => ($setup.emit('close')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"textarea\", {\n        class: \"input input--area\",\n        rows: \"8\",\n        readonly: \"\",\n        \"aria-label\": \"Deeltekst\",\n        value: $setup.text\n      }, null, 8 /* PROPS */, _hoisted_1),\n      ($setup.error)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString($setup.error), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"btn btn--primary\",\n          onClick: $setup.copy\n        }, _toDisplayString($setup.copied ? \"Gekopieerd\" : \"Kopiëren\"), 1 /* TEXT */)\n      ])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\"]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ShareDialog.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ShareDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ShareDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/ShareDialog.vue\";script.__scopeId = \"data-v-01e46f26\";export default script;","import { createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, vModelText as _vModelText, normalizeClass as _normalizeClass, withDirectives as _withDirectives, createBlock as _createBlock, Fragment as _Fragment, vModelSelect as _vModelSelect, vModelCheckbox as _vModelCheckbox, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"ge\" }\nconst _hoisted_2 = { class: \"ge__head\" }\nconst _hoisted_3 = { class: \"ge__title\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"ge__actions\"\n}\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"disabled\"]\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"muted\",\n  role: \"status\"\n}\nconst _hoisted_9 = {\n  key: 1,\n  class: \"field__msg\",\n  role: \"alert\"\n}\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n  class: \"field\",\n  for: \"gist-title\"\n}\nconst _hoisted_12 = [\"aria-invalid\"]\nconst _hoisted_13 = {\n  id: \"gist-title-error\",\n  class: \"field__msg\"\n}\nconst _hoisted_14 = {\n  key: 0,\n  class: \"field\",\n  for: \"gist-content\"\n}\nconst _hoisted_15 = { class: \"ge__settings\" }\nconst _hoisted_16 = { class: \"field\" }\nconst _hoisted_17 = { class: \"ge__password\" }\nconst _hoisted_18 = [\"disabled\", \"placeholder\"]\nconst _hoisted_19 = [\"aria-pressed\"]\nconst _hoisted_20 = {\n  key: 0,\n  class: \"ge__hint\"\n}\nconst _hoisted_21 = { class: \"field\" }\nconst _hoisted_22 = {\n  key: 1,\n  value: \"never\"\n}\nconst _hoisted_23 = {\n  key: 0,\n  class: \"ge__hint\"\n}\nconst _hoisted_24 = { class: \"ge__check\" }\nconst _hoisted_25 = { class: \"ge__footer\" }\nconst _hoisted_26 = [\"disabled\"]\nconst _hoisted_27 = {\n  role: \"status\",\n  \"aria-live\": \"polite\"\n}\nconst _hoisted_28 = {\n  key: 0,\n  class: \"field__msg\",\n  role: \"alert\"\n}\nconst _hoisted_29 = { class: \"ge__actions\" }\nconst _hoisted_30 = [\"disabled\"]\nconst _hoisted_31 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createVNode($setup[\"RouterLink\"], {\n      class: \"ge__back\",\n      to: { name: 'gists' }\n    }, {\n      default: _withCtx(() => _cache[12] || (_cache[12] = [\n        _createTextVNode(\"Alle gists\", -1 /* CACHED */)\n      ])),\n      _: 1 /* STABLE */,\n      __: [12]\n    }),\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"h1\", _hoisted_3, _toDisplayString($props.id === null ? \"Nieuwe gist\" : $setup.original?.title ?? \"Gist\"), 1 /* TEXT */),\n      ($setup.original && !$setup.missing)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n            _createElementVNode(\"a\", {\n              class: \"btn\",\n              href: $setup.original.url,\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            }, \"Bekijken\", 8 /* PROPS */, _hoisted_5),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"btn\",\n              disabled: $setup.locked,\n              onClick: _cache[0] || (_cache[0] = $event => ($setup.sharing = true))\n            }, \"Delen\", 8 /* PROPS */, _hoisted_6),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"btn\",\n              disabled: $setup.locked,\n              onClick: _cache[1] || (_cache[1] = $event => ($setup.confirming = true))\n            }, \"Verwijderen\", 8 /* PROPS */, _hoisted_7)\n          ]))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    ($setup.loading)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, \"Laden...\"))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.error && !$setup.confirming)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_9, _toDisplayString($setup.error), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    (!$setup.loading && !$setup.missing && ($props.id === null || $setup.original))\n      ? (_openBlock(), _createElementBlock(\"form\", {\n          key: 2,\n          class: \"ge__form\",\n          novalidate: \"\",\n          onSubmit: _withModifiers($setup.save, [\"prevent\"])\n        }, [\n          _createElementVNode(\"fieldset\", {\n            class: \"ge__fields\",\n            disabled: $setup.locked\n          }, [\n            _createElementVNode(\"label\", _hoisted_11, [\n              _cache[13] || (_cache[13] = _createElementVNode(\"span\", { class: \"field__label\" }, \"Titel\", -1 /* CACHED */)),\n              _withDirectives(_createElementVNode(\"input\", {\n                id: \"gist-title\",\n                ref: \"titleInput\",\n                \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.state.title) = $event)),\n                class: _normalizeClass([\"input\", { 'input--err': $setup.titleError }]),\n                \"aria-invalid\": Boolean($setup.titleError),\n                \"aria-describedby\": \"gist-title-error\",\n                required: \"\"\n              }, null, 10 /* CLASS, PROPS */, _hoisted_12), [\n                [_vModelText, $setup.state.title]\n              ]),\n              _createElementVNode(\"span\", _hoisted_13, _toDisplayString($setup.titleError), 1 /* TEXT */)\n            ]),\n            ($setup.state.documents === null)\n              ? (_openBlock(), _createElementBlock(\"label\", _hoisted_14, [\n                  _cache[14] || (_cache[14] = _createElementVNode(\"span\", { class: \"field__label\" }, \"Inhoud\", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"textarea\", {\n                    id: \"gist-content\",\n                    \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.state.content) = $event)),\n                    class: \"input input--area\",\n                    rows: \"20\"\n                  }, null, 512 /* NEED_PATCH */), [\n                    [_vModelText, $setup.state.content]\n                  ])\n                ]))\n              : _createCommentVNode(\"v-if\", true),\n            ($props.id === null || $setup.state.documents !== null)\n              ? (_openBlock(), _createBlock($setup[\"DocumentManager\"], {\n                  key: $props.id ?? 'new',\n                  modelValue: $setup.documents,\n                  \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.documents) = $event)),\n                  disabled: $setup.busy,\n                  onBusy: _cache[5] || (_cache[5] = $event => ($setup.reading = $event))\n                }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"]))\n              : _createCommentVNode(\"v-if\", true),\n            _createElementVNode(\"div\", _hoisted_15, [\n              _createElementVNode(\"div\", _hoisted_16, [\n                _cache[15] || (_cache[15] = _createElementVNode(\"label\", {\n                  class: \"field__label\",\n                  for: \"gist-password\"\n                }, \"Wachtwoord\", -1 /* CACHED */)),\n                _createElementVNode(\"div\", _hoisted_17, [\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: \"gist-password\",\n                    \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => (($setup.state.password) = $event)),\n                    class: \"input\",\n                    type: \"text\",\n                    autocomplete: \"off\",\n                    disabled: $setup.state.removePassword,\n                    placeholder: $setup.original ? 'Leeg laten om te behouden' : 'Geen wachtwoord'\n                  }, null, 8 /* PROPS */, _hoisted_18), [\n                    [_vModelText, $setup.state.password]\n                  ]),\n                  ($setup.original?.hasPassword)\n                    ? (_openBlock(), _createElementBlock(\"button\", {\n                        key: 0,\n                        type: \"button\",\n                        class: \"btn\",\n                        \"aria-pressed\": $setup.state.removePassword,\n                        onClick: $setup.toggleRemovePassword\n                      }, _toDisplayString($setup.state.removePassword ? \"Behouden\" : \"Verwijderen\"), 9 /* TEXT, PROPS */, _hoisted_19))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                ($setup.state.removePassword)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_20, \"Wachtwoord wordt verwijderd bij opslaan.\"))\n                  : _createCommentVNode(\"v-if\", true)\n              ]),\n              _createElementVNode(\"div\", _hoisted_21, [\n                _cache[22] || (_cache[22] = _createElementVNode(\"label\", {\n                  class: \"field__label\",\n                  for: \"gist-expiry\"\n                }, \"Vervaldatum\", -1 /* CACHED */)),\n                _withDirectives(_createElementVNode(\"select\", {\n                  id: \"gist-expiry\",\n                  \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => (($setup.state.expiry) = $event)),\n                  class: \"input\"\n                }, [\n                  ($setup.original)\n                    ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                        _cache[16] || (_cache[16] = _createElementVNode(\"option\", { value: \"keep\" }, \"Behouden\", -1 /* CACHED */)),\n                        _cache[17] || (_cache[17] = _createElementVNode(\"option\", { value: \"remove\" }, \"Verwijderen\", -1 /* CACHED */))\n                      ], 64 /* STABLE_FRAGMENT */))\n                    : (_openBlock(), _createElementBlock(\"option\", _hoisted_22, \"Nooit\")),\n                  _cache[18] || (_cache[18] = _createElementVNode(\"option\", { value: \"1h\" }, \"Over 1 uur\", -1 /* CACHED */)),\n                  _cache[19] || (_cache[19] = _createElementVNode(\"option\", { value: \"1d\" }, \"Over 1 dag\", -1 /* CACHED */)),\n                  _cache[20] || (_cache[20] = _createElementVNode(\"option\", { value: \"7d\" }, \"Over 7 dagen\", -1 /* CACHED */)),\n                  _cache[21] || (_cache[21] = _createElementVNode(\"option\", { value: \"30d\" }, \"Over 30 dagen\", -1 /* CACHED */))\n                ], 512 /* NEED_PATCH */), [\n                  [_vModelSelect, $setup.state.expiry]\n                ]),\n                ($setup.expiryLabel)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_23, _toDisplayString($setup.expiryLabel), 1 /* TEXT */))\n                  : _createCommentVNode(\"v-if\", true)\n              ])\n            ]),\n            _createElementVNode(\"label\", _hoisted_24, [\n              _withDirectives(_createElementVNode(\"input\", {\n                \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => (($setup.state.commentsDisabled) = $event)),\n                type: \"checkbox\"\n              }, null, 512 /* NEED_PATCH */), [\n                [_vModelCheckbox, $setup.state.commentsDisabled]\n              ]),\n              _cache[23] || (_cache[23] = _createTextVNode(\" Reacties uitschakelen\", -1 /* CACHED */))\n            ])\n          ], 8 /* PROPS */, _hoisted_10),\n          _createElementVNode(\"footer\", _hoisted_25, [\n            _createElementVNode(\"button\", {\n              type: \"submit\",\n              class: \"btn btn--primary\",\n              disabled: $setup.locked\n            }, _toDisplayString($props.id === null ? \"Aanmaken\" : \"Opslaan\"), 9 /* TEXT, PROPS */, _hoisted_26),\n            _createElementVNode(\"span\", _hoisted_27, _toDisplayString($setup.busy ? \"Bezig...\" : $setup.message), 1 /* TEXT */)\n          ])\n        ], 32 /* NEED_HYDRATION */))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.original)\n      ? (_openBlock(), _createBlock($setup[\"ShareDialog\"], {\n          key: 3,\n          open: $setup.sharing,\n          gist: $setup.original,\n          onClose: _cache[9] || (_cache[9] = $event => ($setup.sharing = false))\n        }, null, 8 /* PROPS */, [\"open\", \"gist\"]))\n      : _createCommentVNode(\"v-if\", true),\n    _createVNode($setup[\"ModalDialog\"], {\n      open: $setup.confirming,\n      title: \"Gist verwijderen\",\n      onClose: _cache[11] || (_cache[11] = $event => (!$setup.busy && ($setup.confirming = false)))\n    }, {\n      default: _withCtx(() => [\n        _cache[24] || (_cache[24] = _createElementVNode(\"p\", null, \"Weet je het zeker? Dit kan niet ongedaan worden gemaakt.\", -1 /* CACHED */)),\n        ($setup.error)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_28, _toDisplayString($setup.error), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createElementVNode(\"div\", _hoisted_29, [\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"btn\",\n            disabled: $setup.busy,\n            onClick: _cache[10] || (_cache[10] = $event => ($setup.confirming = false))\n          }, \"Annuleren\", 8 /* PROPS */, _hoisted_30),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"btn btn--primary\",\n            disabled: $setup.busy,\n            onClick: $setup.remove\n          }, _toDisplayString($setup.busy ? \"Verwijderen...\" : \"Verwijderen\"), 9 /* TEXT, PROPS */, _hoisted_31)\n        ])\n      ]),\n      _: 1 /* STABLE */,\n      __: [24]\n    }, 8 /* PROPS */, [\"open\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistEditorView.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistEditorView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistEditorView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/GistEditorView.vue\";script.__scopeId = \"data-v-a30155b8\";export default script;","<template>\n  <div class=\"ml\">\n    <MondaysHeader />\n    <main class=\"ml__canvas\">\n      <div class=\"ml__inner\">\n        <div class=\"ml__top\">\n          <div class=\"ml__heading\">\n            <span class=\"ml__eyebrow\">Elke maandag, samen</span>\n            <h1 class=\"ml__title\">Maandag kick-off</h1>\n          </div>\n        </div>\n\n        <p v-if=\"startError\" class=\"ml__error\">{{ startError }}</p>\n        <p v-if=\"error\" class=\"ml__error\">{{ error }}</p>\n\n        <MyInput />\n\n        <div class=\"ml__grid\">\n          <button type=\"button\" class=\"ml__new\" :disabled=\"starting || loading\" @click=\"start\">\n            <span class=\"ml__plus\" aria-hidden=\"true\">+</span>\n            <span class=\"ml__new-text\">\n              <span class=\"ml__new-title\">{{ starting ? \"Starten…\" : openLabel ?? \"Nieuwe meeting\" }}</span>\n              <span class=\"ml__new-sub\">Neemt de “deze week”-updates en open acties van vorige week mee.</span>\n            </span>\n          </button>\n\n          <RouterLink\n            v-for=\"meeting in meetings\"\n            :key=\"meeting.id\"\n            class=\"ml__card\"\n            :to=\"{ name: 'monday', params: { id: meeting.id } }\"\n          >\n            <!-- A thumbnail of the five boards, in their own colours. -->\n            <div class=\"ml__preview\" aria-hidden=\"true\">\n              <div class=\"ml__mini ml__mini--people\"><span /><span /><span /><span /></div>\n              <div class=\"ml__mini ml__mini--finance\"><span /><span class=\"ml__mini-line\" /></div>\n              <div class=\"ml__mini ml__mini--updates\"><span /><span /><span class=\"ml__mini-hot\" /></div>\n              <div class=\"ml__mini ml__mini--actions\"><span /><span /></div>\n            </div>\n            <div class=\"ml__body\">\n              <div class=\"ml__row\">\n                <div class=\"ml__names\">\n                  <span class=\"ml__week\">Week van {{ fmtWeekOf(meeting.date) }}</span>\n                  <span class=\"ml__weeknr\">{{ fmtWeek(meeting.date) }}</span>\n                </div>\n                <span class=\"badge\" :class=\"meeting.finished ? 'badge--neutral' : 'badge--brand'\">{{ meeting.finished ? \"Afgerond\" : \"Bezig\" }}</span>\n              </div>\n              <div class=\"ml__stats\">\n                <div class=\"ml__stat\"><span class=\"ml__stat-value\">{{ fmtAverage(meeting.teamScore) }}</span><span class=\"ml__stat-label\">Teamscore</span></div>\n                <div class=\"ml__stat\"><span class=\"ml__stat-value\">{{ meeting.actionsDone }}/{{ meeting.actionsTotal }}</span><span class=\"ml__stat-label\">Acties afgerond</span></div>\n                <div class=\"ml__stat\"><span class=\"ml__stat-value\">{{ meeting.noteCount }}</span><span class=\"ml__stat-label\">Notities</span></div>\n              </div>\n            </div>\n          </RouterLink>\n        </div>\n\n        <p v-if=\"loading\" class=\"ml__state\">Bezig met laden…</p>\n      </div>\n    </main>\n\n    <Teleport to=\"body\">\n      <div v-if=\"picking\" class=\"att\" @click.self=\"picking = false\">\n        <div class=\"att__box\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Wie is erbij?\">\n          <h2 class=\"att__title\">Wie is erbij?</h2>\n          <p class=\"att__sub\">Vink aan wie {{ isThisWeek ? \"deze maandag\" : `maandag ${fmtWeekOf(targetDate)}` }} aan tafel zit. Wie niet aanwezig is, hoeft niet te scoren.</p>\n          <label v-for=\"person in people\" :key=\"person.id\" class=\"att__row\">\n            <input type=\"checkbox\" :checked=\"chosen.has(person.id)\" @change=\"togglePerson(person.id)\">\n            <span>{{ person.name }}</span>\n          </label>\n          <p v-if=\"startError\" class=\"ml__error\">{{ startError }}</p>\n          <div class=\"att__foot\">\n            <button type=\"button\" class=\"btn btn--tertiary\" :disabled=\"starting\" @click=\"picking = false\">Annuleren</button>\n            <button type=\"button\" class=\"btn btn--primary\" :disabled=\"starting\" @click=\"confirmStart\">{{ starting ? \"Starten…\" : \"Start meeting\" }}</button>\n          </div>\n        </div>\n      </div>\n    </Teleport>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { RouterLink, useRouter } from \"vue-router\";\nimport { meetingDateToStart, mondayOf } from \"@mod-tech42_tools/js/mondays/rules\";\nimport type { MeetingSummary, Person } from \"@mod-tech42_tools/js/mondays/types\";\nimport MondaysHeader from \"../components/mondays/MondaysHeader.vue\";\nimport MyInput from \"../components/mondays/MyInput.vue\";\nimport { api } from \"../lib/api\";\nimport { errorMessage } from \"../lib/errors\";\nimport { fmtAverage, fmtWeek, fmtWeekOf } from \"../lib/mondays-format\";\n\nconst router = useRouter();\nconst meetings = ref<MeetingSummary[]>([]);\nconst people = ref<Person[]>([]);\nconst loading = ref(true);\nconst error = ref(\"\");\nconst starting = ref(false);\nconst startError = ref(\"\");\nconst picking = ref(false);\nconst chosen = ref<Set<number>>(new Set());\n\n// The same rule as the server: once this week's meeting is finished, \"Start\" is\n// about next Monday. An unfinished meeting on that Monday is opened, not re-created.\nconst targetDate = computed(() => meetingDateToStart(new Date(), {\n  thisWeekFinished: meetings.value.some(m => m.date === mondayOf(new Date()) && m.finished),\n}));\nconst isThisWeek = computed(() => targetDate.value === mondayOf(new Date()));\nconst targetExists = computed(() => meetings.value.some(m => m.date === targetDate.value));\nconst openLabel = computed(() => targetExists.value ? (isThisWeek.value ? \"Meeting van deze week\" : \"Meeting van volgende week\") : null);\n\nasync function load() {\n  try {\n    const [list, team] = await Promise.all([api.listMeetings(), api.listMeetingPeople()]);\n    meetings.value = list;\n    people.value = team;\n    error.value = \"\";\n  } catch (e) {\n    error.value = errorMessage(e, \"De meetings konden niet worden opgehaald.\");\n  } finally {\n    loading.value = false;\n  }\n}\n\n/** This week's meeting already exists: just open it, no attendance to choose. A\n * new one first asks who is at the table (everyone but Tom, to start). */\nasync function start() {\n  if (targetExists.value) {\n    await openThisWeek();\n    return;\n  }\n  chosen.value = new Set(people.value.filter(p => p.defaultPresent).map(p => p.id));\n  startError.value = \"\";\n  picking.value = true;\n}\n\nasync function openThisWeek() {\n  starting.value = true;\n  startError.value = \"\";\n  try {\n    const meeting = await api.startMeeting();\n    await router.push({ name: \"monday\", params: { id: meeting.id } });\n  } catch (e) {\n    startError.value = errorMessage(e, \"De meeting kon niet worden geopend.\");\n  } finally {\n    starting.value = false;\n  }\n}\n\nfunction togglePerson(id: number) {\n  const next = new Set(chosen.value);\n  if (next.has(id)) next.delete(id); else next.add(id);\n  chosen.value = next;\n}\n\nasync function confirmStart() {\n  starting.value = true;\n  startError.value = \"\";\n  try {\n    const meeting = await api.startMeeting({ present: [...chosen.value] });\n    await router.push({ name: \"monday\", params: { id: meeting.id } });\n  } catch (e) {\n    startError.value = errorMessage(e, \"De meeting kon niet worden gestart.\");\n  } finally {\n    starting.value = false;\n  }\n}\n\nonMounted(load);\n</script>\n\n<style scoped>\n.ml { display: flex; flex-direction: column; height: 100vh; overflow: hidden; background: var(--background); }\n.ml__canvas {\n  flex: 1;\n  overflow-y: auto;\n  background-color: var(--background);\n  background-image: var(--dot-grid);\n  background-size: 24px 24px;\n}\n.ml__inner {\n  display: flex;\n  flex-direction: column;\n  gap: 40px;\n  max-width: 1200px;\n  margin: 0 auto;\n  padding: 56px 32px;\n}\n.ml__top { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 24px; }\n.ml__heading { display: flex; flex-direction: column; gap: 16px; }\n.ml__eyebrow { display: flex; align-items: center; gap: 12px; font-size: 16px; font-weight: 500; color: var(--muted-foreground); }\n.ml__eyebrow::before { content: \"\"; flex: none; width: 32px; height: 8px; background: var(--primary); }\n.ml__title { margin: 0; font-size: 56px; font-weight: 500; line-height: 0.95; }\n.ml__error { margin: 0; color: var(--fire); }\n.ml__state { margin: 0; color: var(--muted-foreground); }\n\n.ml__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 24px; }\n.ml__new {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: space-between;\n  min-height: 280px;\n  padding: 24px;\n  border: 1px dashed rgba(255, 119, 0, 0.62);\n  border-radius: var(--radius-xl);\n  background: rgba(255, 119, 0, 0.07);\n  color: var(--foreground);\n  text-align: left;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.ml__new:hover:not(:disabled) { background: rgba(255, 119, 0, 0.14); }\n.ml__new:disabled { cursor: default; opacity: 0.86; }\n.ml__plus { font-size: 72px; font-weight: 400; line-height: 0.8; color: var(--primary); }\n.ml__new-text { display: flex; flex-direction: column; gap: 6px; }\n.ml__new-title { font-size: 22px; font-weight: 500; }\n.ml__new-sub { font-size: 14px; color: var(--muted-foreground); }\n\n.ml__card {\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--card);\n  color: var(--foreground);\n  text-decoration: none;\n  transition: border-color var(--dur-base) var(--ease);\n}\n.ml__card:hover { border-color: rgba(247, 247, 255, 0.34); }\n.ml__preview {\n  display: flex;\n  align-items: flex-start;\n  gap: 8px;\n  height: 150px;\n  padding: 20px;\n  border-bottom: 1px solid var(--hairline-weak);\n  background-color: var(--background);\n  background-image: radial-gradient(rgba(247, 247, 255, 0.1) 1px, transparent 1px);\n  background-size: 12px 12px;\n}\n.ml__mini {\n  height: 100%;\n  padding: 6px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-md);\n}\n.ml__mini--people { display: grid; flex: 1.2; grid-template-columns: 1fr 1fr; align-content: start; gap: 4px; }\n.ml__mini--people span { height: 22px; background: var(--sticky-paper); }\n.ml__mini--finance { display: flex; flex: 1; flex-direction: column; gap: 4px; }\n.ml__mini--finance span:first-child { width: 70%; height: 18px; background: var(--sticky-paper); }\n.ml__mini-line { flex: 1; border-bottom: 2px solid var(--primary); }\n.ml__mini--updates { display: grid; flex: 1; grid-template-columns: 1fr 1fr; align-content: start; gap: 4px; }\n.ml__mini--updates span { height: 26px; background: var(--sticky-update); }\n.ml__mini--updates .ml__mini-hot { background: var(--sticky-focus); }\n.ml__mini--actions { display: flex; flex: 0.8; flex-direction: column; gap: 4px; }\n.ml__mini--actions span { height: 20px; background: var(--primary); }\n\n.ml__body { display: flex; flex-direction: column; gap: 14px; padding: 20px; }\n.ml__row { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }\n.ml__names { display: flex; flex-direction: column; gap: 4px; }\n.ml__week { font-size: 20px; font-weight: 500; }\n.ml__weeknr { font-size: 13px; color: var(--weak); }\n.ml__stats { display: flex; gap: 24px; }\n.ml__stat { display: flex; flex-direction: column; gap: 2px; }\n.ml__stat-value { font-size: 24px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums; }\n.ml__stat-label { font-size: 12px; color: var(--weak); }\n\n.att {\n  position: fixed;\n  inset: 0;\n  z-index: 100;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  padding: 24px;\n  background: var(--overlay);\n  backdrop-filter: blur(6px);\n}\n.att__box {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  width: 420px;\n  max-width: 94vw;\n  padding: 24px;\n  border-radius: var(--radius-xl);\n  background: var(--popover);\n  box-shadow: 0 0 0 1px var(--border), var(--shadow-overlay);\n}\n.att__title { margin: 0; font-size: 22px; font-weight: 500; }\n.att__sub { margin: 0; font-size: 14px; color: var(--muted-foreground); }\n.att__row {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-md);\n  font-size: 16px;\n  cursor: pointer;\n}\n.att__row input { width: 18px; height: 18px; cursor: pointer; accent-color: var(--primary); }\n.att__foot { display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; }\n</style>\n","/** Shared shapes for Deep Thought Mondays. Pure: the frontend imports this file. */\n\n/** The five boards of a meeting, in the order they are walked through. */\nexport const BLOCKS = [\"people\", \"finance\", \"updates\", \"focus\", \"actions\"] as const;\nexport type Block = typeof BLOCKS[number];\n\n/** The three things everyone scores, left to right as on the board. */\nexport const SCORE_KEYS = [\"financial\", \"development\", \"fun\"] as const;\nexport type ScoreKey = typeof SCORE_KEYS[number];\n\n/** 1 to 5, or null for \"not scored yet\". */\nexport type Score = number | null;\nexport type Scores = Record<ScoreKey, Score>;\n\n/** Scores per person, keyed by the person's id. A person without a row has not scored. */\nexport type ScoreTable = Record<string, Scores>;\n\n/** Someone at the table: a value of the `person` domain in the schema. */\nexport type Person = {\n  id: number;\n  name: string;\n  /** The first name, as on the \"Ik ben\" toggles. */\n  short: string;\n  /** Checked by default when a new meeting picks who is present (Tom is not). */\n  defaultPresent: boolean;\n  /** Lowercase; the Linear user this person is, empty when there is none. */\n  email: string;\n};\n\n/** The update categories, fixed, in board order. `hasWeeks` false is the free-form card. */\nexport const UPDATE_CATEGORIES = [\n  { key: \"tech\", title: \"Techniek\", hasWeeks: true },\n  { key: \"sales\", title: \"Sales\", hasWeeks: true },\n  { key: \"projects\", title: \"Project management\", hasWeeks: true },\n  { key: \"design\", title: \"Design\", hasWeeks: true },\n  { key: \"cool\", title: \"Vette shit!\", hasWeeks: false },\n] as const;\nexport type UpdateCategoryKey = typeof UPDATE_CATEGORIES[number][\"key\"];\n\n/** One \"deze week\" point. It carries an id so an action spawned from it can be\n * created exactly once, and assignees so it can turn into an action. */\nexport type UpdateItem = {\n  id: string;\n  text: string;\n  /** Person ids the point was handed to. A non-empty list spawns an action. */\n  assignees: number[];\n  /** YYYY-MM-DD or null: the deadline the spawned action gets. */\n  due: string | null;\n};\n\nexport type Update = {\n  category: UpdateCategoryKey;\n  /** What was planned last week: last meeting's `cur` text, read-only here. */\n  prev: string[];\n  cur: UpdateItem[];\n};\n\nexport const FOCUS_COUNT = 3;\n\n/** `title` is from before the board dropped the subject field (TEC-210): an\n * area is one text now, see focusText(), and new edits land in `body`. */\nexport type FocusArea = {\n  title: string;\n  body: string;\n};\n\n/** An end-of-year goal on the Cijfers board. */\nexport type Target = {\n  year: number;\n  customers: number;\n  /** Euros per month. */\n  monthlyRevenue: number;\n};\n\n/** Hours and money for one week, straight from Hourly. */\nexport type WeekFigures = {\n  /** YYYY-MM-DD, Monday. */\n  from: string;\n  /** YYYY-MM-DD, Sunday. */\n  to: string;\n  hours: number;\n  billableHours: number;\n  /** Hours x the rate snapshotted on each entry. */\n  amount: number;\n  /** Hours booked without a rate: `amount` understates the money by these. */\n  unratedHours: number;\n};\n\nexport type MonthFigures = {\n  /** YYYY-MM. */\n  month: string;\n  /** Null for a month that has not started yet. */\n  amount: number | null;\n  /** The monthly target set in Hourly, null for a month without one. */\n  target: number | null;\n};\n\nexport type FinanceSnapshot = {\n  /** ISO timestamp. */\n  fetchedAt: string;\n  week: WeekFigures;\n  /** Oldest first; the meeting's own month is the one before the last. */\n  months: MonthFigures[];\n  /** YYYY-MM of the meeting, the month the targets are measured against. */\n  currentMonth: string;\n};\n\nexport type Action = {\n  id: number;\n  /** Person ids. */\n  who: number[];\n  what: string;\n  /** YYYY-MM-DD or null. */\n  due: string | null;\n  done: boolean;\n  /** Came over from the previous meeting because it was still open. */\n  carried: boolean;\n  /** Made automatically from an update point that was handed to someone. */\n  fromUpdate: boolean;\n  /** The id of the update point it came from, so it is made only once. Null for a hand-typed action. */\n  sourceUpdateId: string | null;\n  /** The same in every meeting the action was carried into: the id of the action it\n   * started as. Ticking one off ticks off all of them. */\n  chainId: number;\n  /** The Linear issue the action is synced to, null until the first sync. */\n  linear: LinearLink | null;\n};\n\n/** The Linear project an action's issue goes to: a Sales update point goes to\n * \"Vanuit maandag kick-offs\", everything else to \"Tech_42 (intern)\" (Wouter, 2026-10-05). */\nexport type LinearTarget = \"intern\" | \"kickoffs\";\n\nexport type LinearLink = {\n  /** The issue's UUID. */\n  id: string;\n  /** TEC-123. */\n  identifier: string;\n  url: string;\n};\n\n/** What an action looks like in Linear: what the last sync sent or saw, stored per\n * action so that leaving a meeting without changes sends nothing. */\nexport type LinearFields = {\n  title: string;\n  /** YYYY-MM-DD or null. */\n  due: string | null;\n  done: boolean;\n  /** Lowercase email of the assignee, null for none. */\n  assignee: string | null;\n  /** Lowercase emails, sorted. */\n  subscribers: string[];\n};\n\n/** What leaving a meeting did in Linear. */\nexport type LinearSyncResult = {\n  /** \"not-configured\": this server has no Linear key, or the project is not there. Nothing was sent. */\n  status: \"ok\" | \"not-configured\";\n  created: number;\n  updated: number;\n  unchanged: number;\n  /** Open actions of an older, finished meeting that have no issue: those are not backfilled. */\n  skipped: number;\n  failed: number;\n  /** The meeting's actions after the sync, with their Linear links. */\n  actions: Action[];\n};\n\nexport type Note = {\n  id: number;\n  block: Block;\n  text: string;\n  /** Person id, null for a note from before \"Ik ben\". */\n  authorId: number | null;\n  /** ISO timestamp. */\n  createdAt: string;\n};\n\n/** A point someone sent in before the meeting, from the meeting list. */\nexport type MeetingInput = {\n  id: number;\n  personId: number;\n  text: string;\n  /** ISO submission timestamp; editing or assigning to a meeting never changes it. */\n  createdAt: string;\n  /** ISO timestamp of the last change. */\n  updatedAt: string;\n};\n\n/** The logged-in person's points that wait for the next meeting. */\nexport type MyMeetingInput = {\n  /** Null when the login is nobody of the team: the screen says so instead of offering a form. */\n  person: Person | null;\n  /** In the order they were added. */\n  items: MeetingInput[];\n};\n\n/** Everyone's waiting points, readable by every tools user; mutations remain owner-only. */\nexport type MeetingInputOverview = {\n  person: Person | null;\n  people: Person[];\n  /** Oldest submission first, id as a stable tiebreaker. */\n  items: MeetingInput[];\n};\n\n/** A meeting as the browser gets it. */\nexport type Meeting = {\n  id: number;\n  /** YYYY-MM-DD, the Monday. */\n  date: string;\n  /** ISO timestamp of \"Meeting afronden\", null while the meeting is going. */\n  finishedAt: string | null;\n  /** Who was at the table, chosen when the meeting started. Empty means everyone\n   * (an old meeting from before attendance existed). */\n  present: number[];\n  scores: ScoreTable;\n  /** Last week's scores, frozen at the start, shown as a ghost. */\n  previousScores: ScoreTable;\n  /** Null when Hourly could not be reached and nobody refreshed since. */\n  finance: FinanceSnapshot | null;\n  targets: Target[];\n  updates: Update[];\n  focus: FocusArea[];\n  previousFocus: FocusArea[];\n  actions: Action[];\n  notes: Note[];\n  /** Sent in beforehand for this Monday, oldest submission first. */\n  inputs: MeetingInput[];\n};\n\nexport type MeetingSummary = {\n  id: number;\n  date: string;\n  finished: boolean;\n  /** The average of every score given, null when nobody scored. */\n  teamScore: number | null;\n  actionsDone: number;\n  actionsTotal: number;\n  noteCount: number;\n};\n\n/** What the boards may save in one go; each key is one section. */\nexport type MeetingPatch = Partial<Pick<Meeting, \"scores\" | \"targets\" | \"updates\" | \"focus\">>;\n\n// The stored forms, named for the typedeclarations in data/mondays.wrdschema.xml.\nexport type StoredScores = { byPerson: ScoreTable };\nexport type StoredFinance = { snapshot: FinanceSnapshot | null };\nexport type StoredTargets = { list: Target[] };\nexport type StoredUpdates = { list: Update[] };\nexport type StoredFocus = { list: FocusArea[] };\nexport type NoteBody = { text: string };\n","/**\n * The decisions of Deep Thought Mondays, without WRD or RPC: which Monday a\n * meeting belongs to, which week its figures cover, what a new meeting inherits\n * from the last one, and what a board may save. Pure, so the frontend may import\n * it and tests/mondays-pure.test.ts covers it without a database.\n */\n\nimport {\n  FOCUS_COUNT,\n  SCORE_KEYS,\n  UPDATE_CATEGORIES,\n  type Action,\n  type FocusArea,\n  type LinearFields,\n  type LinearLink,\n  type LinearTarget,\n  type MeetingPatch,\n  type Person,\n  type ScoreTable,\n  type Scores,\n  type Target,\n  type Update,\n  type UpdateCategoryKey,\n  type UpdateItem,\n} from \"./types\";\n\n/** A meeting keeps at least three focus areas but may have more (Wouter, TEC-210). */\nexport const MAX_FOCUS = 12;\n\n/** A short id for an update point, unique enough within one meeting. */\nexport function newUpdateItemId(): string {\n  return `u${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/** A refusal of what the browser sent. The RPC layer turns it into a 400. */\nexport class MondaysValidationError extends Error { }\n\n/** The parts of the last meeting a new one builds on. */\nexport type PreviousMeeting = {\n  date: string;\n  scores: ScoreTable;\n  targets: Target[];\n  updates: Update[];\n  focus: FocusArea[];\n  /** With what was last synced to Linear, so the carried copy knows it too. */\n  actions: Array<Action & { linearSynced?: LinearFields | null; linearTarget?: LinearTarget | null }>;\n};\n\n/** A carried action keeps its chain and its Linear issue: every week is the same work. */\nexport type NewAction = Pick<Action, \"who\" | \"what\" | \"due\" | \"carried\"> & {\n  originAction: number;\n  linear: LinearLink | null;\n  linearSynced: LinearFields | null;\n  linearTarget: LinearTarget | null;\n};\n\nexport type NewMeeting = {\n  date: string;\n  /** Who is at the table. Empty when the caller did not choose (old behaviour). */\n  present: number[];\n  scores: ScoreTable;\n  /** Last week's scores, kept as the ghost. */\n  previousScores: ScoreTable;\n  targets: Target[];\n  updates: Update[];\n  focus: FocusArea[];\n  previousFocus: FocusArea[];\n  actions: NewAction[];\n};\n\n/** The targets from the FigJam board, for the very first meeting. */\nexport const DEFAULT_TARGETS: readonly Target[] = [\n  { year: 2026, customers: 3, monthlyRevenue: 20000 },\n  { year: 2027, customers: 15, monthlyRevenue: 40000 },\n];\n\nconst pad = (n: number): string => String(n).padStart(2, \"0\");\n\n/** YYYY-MM-DD from the LOCAL calendar date: a meeting day is an Amsterdam day. */\nexport function toIsoDate(date: Date): string {\n  return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\n/** Local midnight of a YYYY-MM-DD, never UTC midnight (which is the day before here). */\nexport function fromIsoDate(iso: string): Date {\n  const [year, month, day] = iso.split(\"-\").map(Number);\n  return new Date(year, month - 1, day);\n}\n\nexport function addDays(iso: string, days: number): string {\n  const date = fromIsoDate(iso);\n  date.setDate(date.getDate() + days);\n  return toIsoDate(date);\n}\n\n/** The Monday of the week `date` falls in. */\nexport function mondayOf(date: Date): string {\n  const sinceMonday = (date.getDay() + 6) % 7;\n  return addDays(toIsoDate(date), -sinceMonday);\n}\n\n/** The Monday a new meeting is for: this week's, or next week's once this week's\n * meeting is finished (a finished meeting is not reopened by \"Start\"). */\nexport function meetingDateToStart(now: Date, options: { thisWeekFinished: boolean }): string {\n  const monday = mondayOf(now);\n  return options.thisWeekFinished ? addDays(monday, 7) : monday;\n}\n\n/** The team member a login is: by the person's email, or by a mailbox named\n * after their first name on any domain (tom@tech42.nl is Tom, whose Linear\n * email is another address). */\nexport function personForLogin(people: Person[], email: string): Person | null {\n  const login = email.trim().toLowerCase();\n  if (!login) return null;\n  const mailbox = login.split(\"@\")[0];\n  return people.find(p => p.email === login)\n    ?? people.find(p => p.short.toLowerCase() === mailbox)\n    ?? null;\n}\n\n/** The Monday-to-Sunday week before the meeting: on Monday morning the current\n * week has no hours yet, so that is the week the figures are about. */\nexport function previousWeek(monday: string): { from: string; to: string } {\n  return { from: addDays(monday, -7), to: addDays(monday, -1) };\n}\n\n/** The calendar months around the meeting's own, oldest first, as YYYY-MM. */\nexport function monthsAround(monday: string, options: { before: number; after: number }): string[] {\n  const date = fromIsoDate(monday);\n  const months: string[] = [];\n  for (let offset = -options.before; offset <= options.after; ++offset) {\n    const month = new Date(date.getFullYear(), date.getMonth() + offset, 1);\n    months.push(`${month.getFullYear()}-${pad(month.getMonth() + 1)}`);\n  }\n  return months;\n}\n\n/** ISO 8601 week number: the week with the year's first Thursday is week 1. */\nexport function isoWeekNumber(iso: string): number {\n  const date = fromIsoDate(iso);\n  const thursday = new Date(date.getFullYear(), date.getMonth(), date.getDate() + 3 - ((date.getDay() + 6) % 7));\n  const firstThursday = new Date(thursday.getFullYear(), 0, 4);\n  const days = Math.round((thursday.getTime() - firstThursday.getTime()) / 86_400_000);\n  return 1 + Math.round((days - 3 + ((firstThursday.getDay() + 6) % 7)) / 7);\n}\n\nexport function emptyScores(): Scores {\n  return { financial: null, development: null, fun: null };\n}\n\nexport function emptyFocus(): FocusArea[] {\n  return Array.from({ length: FOCUS_COUNT }, () => ({ title: \"\", body: \"\" }));\n}\n\n/** The average of every score given, or null when nobody scored. */\nexport function teamScore(scores: ScoreTable): number | null {\n  const given = Object.values(scores).flatMap(row => SCORE_KEYS.map(key => row[key])).filter((s): s is number => typeof s === \"number\");\n  return given.length ? given.reduce((sum, s) => sum + s, 0) / given.length : null;\n}\n\n/** What a meeting starts with: whatever the previous meeting hands on. */\nexport function buildNewMeeting(options: { date: string; previous: PreviousMeeting | null; present?: number[] }): NewMeeting {\n  const { date, previous, present } = options;\n\n  const updates: Update[] = UPDATE_CATEGORIES.map(({ key, hasWeeks }) => ({\n    category: key,\n    // Last meeting's plan is this meeting's \"what happened\". The free-form card\n    // has no plan, and last week's news is not this week's.\n    prev: hasWeeks ? (previous?.updates.find(u => u.category === key)?.cur ?? []).map(item => item.text) : [],\n    cur: [],\n  }));\n\n  const previousFocus = (previous?.focus ?? []).map(area => ({ ...area }));\n\n  return {\n    date,\n    present: [...present ?? []],\n    scores: {},\n    // Last week's scores become this meeting's ghost.\n    previousScores: JSON.parse(JSON.stringify(previous?.scores ?? {})) as ScoreTable,\n    targets: (previous?.targets ?? DEFAULT_TARGETS).map(target => ({ ...target })),\n    updates,\n    focus: previousFocus.length ? previousFocus.map(area => ({ ...area })) : emptyFocus(),\n    previousFocus,\n    actions: (previous?.actions ?? [])\n      .filter(action => !action.done)\n      .map(({ who, what, due, chainId, linear, linearSynced, linearTarget }) => ({\n        who: [...who],\n        what,\n        due,\n        carried: true,\n        originAction: chainId,\n        linear: linear && { ...linear },\n        linearSynced: linearSynced ? { ...linearSynced, subscribers: [...linearSynced.subscribers] } : null,\n        linearTarget: linearTarget ?? null,\n      })),\n  };\n}\n\n/** The quick deadline choices: today, the end of the week, or a weekday (1 = Monday ... 5 = Friday). */\nexport type DueChoice = \"today\" | \"endOfWeek\" | 1 | 2 | 3 | 4 | 5;\n\n/** The date a quick deadline choice means, seen from `today`. A weekday is the\n * next one, today included; the end of the week is Friday, and in the weekend\n * the Friday to come. */\nexport function dueFor(choice: DueChoice, today: Date): string {\n  const iso = toIsoDate(today);\n  if (choice === \"today\") return iso;\n  const weekday = choice === \"endOfWeek\" ? 5 : choice;\n  const current = (today.getDay() + 6) % 7 + 1;\n  return addDays(iso, (weekday - current + 7) % 7);\n}\n\n/** A focus area as one text. Older areas had a subject and a description; the\n * board shows and edits just the text (Wouter, TEC-210). */\nexport function focusText(area: FocusArea): string {\n  return [area.title.trim(), area.body.trim()].filter(Boolean).join(\"\\n\");\n}\n\n/** The Linear project for an action made from an update point: Sales goes to the\n * kick-offs project, every other category to Tech_42 (intern). */\nexport function linearTargetForCategory(category: UpdateCategoryKey): LinearTarget {\n  return category === \"sales\" ? \"kickoffs\" : \"intern\";\n}\n\n/**\n * The Linear project of an action from before actions remembered theirs: the\n * category of the point it came from, looked up in its own meeting. A carried\n * action lost that link, but its text is on its meeting's \"vorige week\" of the\n * category it came from. Anything else, or a point removed since, is intern.\n */\nexport function linearTargetFromOrigin(action: Pick<Action, \"sourceUpdateId\" | \"carried\" | \"what\">, updates: Update[]): LinearTarget {\n  if (action.sourceUpdateId) {\n    const update = updates.find(u => u.cur.some(item => item.id === action.sourceUpdateId));\n    return update ? linearTargetForCategory(update.category) : \"intern\";\n  }\n  if (action.carried) {\n    const what = action.what.trim();\n    const update = updates.find(u => u.prev.some(text => text.trim() === what));\n    if (update) return linearTargetForCategory(update.category);\n  }\n  return \"intern\";\n}\n\n/** What the update board should turn into actions: one action per point that was\n * handed to someone and has not spawned one yet. One direction only, so removing\n * the update later leaves the action (Wouter, TEC-210 punt 5.1). */\nexport type SpawnedAction = { who: number[]; what: string; due: string | null; sourceUpdateId: string; linearTarget: LinearTarget };\n\nexport function actionsFromUpdates(\n  updates: Update[],\n  existingSourceIds: ReadonlySet<string>,\n): SpawnedAction[] {\n  const spawned: SpawnedAction[] = [];\n  for (const update of updates)\n    for (const item of update.cur)\n      if (item.assignees.length && item.text.trim() && !existingSourceIds.has(item.id))\n        spawned.push({ who: [...item.assignees], what: item.text.trim(), due: item.due, sourceUpdateId: item.id, linearTarget: linearTargetForCategory(update.category) });\n  return spawned;\n}\n\n/** The actions whose deadline follows a changed deadline on the point they came\n * from. Only a change on the point counts, so a deadline edited on the action\n * itself stays until the point's changes again: the last edit wins. */\nexport function deadlineChanges(\n  before: Update[],\n  after: Update[],\n  actions: ReadonlyArray<Pick<Action, \"id\" | \"sourceUpdateId\" | \"due\">>,\n): Array<{ id: number; due: string | null }> {\n  const dueBefore = new Map(before.flatMap(u => u.cur).map(item => [item.id, item.due]));\n  const changes: Array<{ id: number; due: string | null }> = [];\n  for (const item of after.flatMap(u => u.cur)) {\n    if (!dueBefore.has(item.id) || dueBefore.get(item.id) === item.due) continue;\n    for (const action of actions)\n      if (action.sourceUpdateId === item.id && action.due !== item.due) changes.push({ id: action.id, due: item.due });\n  }\n  return changes;\n}\n\n//\n// Parsing what a board saves. Everything is checked before anything is\n// written, so a half-valid patch never lands half.\n//\n\nfunction fail(message: string): never {\n  throw new MondaysValidationError(message);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asArray(value: unknown, what: string): unknown[] {\n  if (!Array.isArray(value)) fail(`${what} moet een lijst zijn.`);\n  return value;\n}\n\nfunction asString(value: unknown, what: string): string {\n  if (typeof value !== \"string\") fail(`${what} moet tekst zijn.`);\n  return value;\n}\n\nfunction asWholeNumber(value: unknown, what: string, range: { min: number; max: number }): number {\n  if (typeof value !== \"number\" || !Number.isInteger(value) || value < range.min || value > range.max)\n    fail(`\"${String(value)}\" is geen geldig ${what}.`);\n  return value;\n}\n\nfunction asScore(value: unknown): number | null {\n  if (value === null || value === undefined) return null;\n  if (typeof value !== \"number\" || !Number.isInteger(value) || value < 1 || value > 5)\n    fail(`Een score ligt tussen 1 en 5, niet \"${String(value)}\".`);\n  return value;\n}\n\nfunction parseScores(value: unknown): ScoreTable {\n  if (!isRecord(value)) fail(\"Scores moeten per persoon zijn.\");\n  const table: ScoreTable = {};\n  for (const [personId, row] of Object.entries(value)) {\n    if (!/^[1-9]\\d*$/.test(personId)) fail(`\"${personId}\" is geen persoon.`);\n    const scores = isRecord(row) ? row : {};\n    table[personId] = Object.fromEntries(SCORE_KEYS.map(key => [key, asScore(scores[key])])) as Scores;\n  }\n  return table;\n}\n\nfunction parsePoints(value: unknown, what: string): string[] {\n  return asArray(value ?? [], what).map(item => asString(item, \"Een punt\").trim()).filter(Boolean);\n}\n\n/** One \"deze week\" point. A bare string is old data (before points had an id and\n * assignees); an object carries its id so an action spawned from it is made once. */\nfunction parseUpdateItem(value: unknown): UpdateItem {\n  if (typeof value === \"string\") return { id: newUpdateItemId(), text: value.trim(), assignees: [], due: null };\n  if (!isRecord(value)) fail(\"Een update is geen record.\");\n  return {\n    id: typeof value.id === \"string\" && value.id ? value.id : newUpdateItemId(),\n    text: asString(value.text ?? \"\", \"Een punt\").trim(),\n    assignees: parseWho(value.assignees),\n    due: parseDue(value.due),\n  };\n}\n\nfunction parseUpdateItems(value: unknown): UpdateItem[] {\n  return asArray(value ?? [], \"Deze week\").map(parseUpdateItem).filter(item => item.text);\n}\n\nfunction parseUpdates(value: unknown): Update[] {\n  const keys = new Set<string>(UPDATE_CATEGORIES.map(c => c.key));\n  return asArray(value, \"Updates\").map(item => {\n    if (!isRecord(item)) fail(\"Een update is geen record.\");\n    const category = asString(item.category, \"Een categorie\");\n    if (!keys.has(category)) fail(`\"${category}\" is geen bekende categorie.`);\n    return {\n      category: category as Update[\"category\"],\n      prev: parsePoints(item.prev, \"Vorige week\"),\n      cur: parseUpdateItems(item.cur),\n    };\n  });\n}\n\nfunction parseFocus(value: unknown): FocusArea[] {\n  const list = asArray(value, \"Focus areas\");\n  if (list.length > MAX_FOCUS) fail(`Er zijn maximaal ${MAX_FOCUS} focus areas.`);\n  return list.map(item => {\n    if (!isRecord(item)) fail(\"Een focus area is geen record.\");\n    return { title: asString(item.title ?? \"\", \"Een titel\"), body: asString(item.body ?? \"\", \"Een omschrijving\") };\n  });\n}\n\nfunction parseTargets(value: unknown): Target[] {\n  return asArray(value, \"Targets\").map(item => {\n    if (!isRecord(item)) fail(\"Een target is geen record.\");\n    return {\n      year: asWholeNumber(item.year, \"jaar\", { min: 2000, max: 2100 }),\n      customers: asWholeNumber(item.customers, \"aantal klanten\", { min: 0, max: 100_000 }),\n      monthlyRevenue: asWholeNumber(item.monthlyRevenue, \"bedrag per maand\", { min: 0, max: 100_000_000 }),\n    };\n  });\n}\n\nconst PATCH_PARSERS: { [K in keyof Required<MeetingPatch>]: (value: unknown) => Required<MeetingPatch>[K] } = {\n  scores: parseScores,\n  targets: parseTargets,\n  updates: parseUpdates,\n  focus: parseFocus,\n};\n\nexport function parsePatch(body: unknown): MeetingPatch {\n  if (!isRecord(body)) fail(\"Er is niets om op te slaan.\");\n  const patch: Record<string, unknown> = {};\n  for (const [key, value] of Object.entries(body)) {\n    const parser = PATCH_PARSERS[key as keyof MeetingPatch];\n    if (!parser) fail(`\"${key}\" kan niet worden opgeslagen.`);\n    patch[key] = parser(value);\n  }\n  return patch as MeetingPatch;\n}\n\n/** Trim an action's text and cap it at what a WRD <free> takes. */\nexport function cleanActionText(value: unknown, what: string): string {\n  const text = asString(value ?? \"\", what).trim();\n  if (new TextEncoder().encode(text).length > 4096) fail(`${what} is te lang.`);\n  return text;\n}\n\nexport function parseWho(value: unknown): number[] {\n  return [...new Set(asArray(value ?? [], \"Wie\").map(id => asWholeNumber(id, \"persoon\", { min: 1, max: Number.MAX_SAFE_INTEGER })))];\n}\n\nexport function parseDue(value: unknown): string | null {\n  if (value === null || value === undefined || value === \"\") return null;\n  const text = asString(value, \"Wanneer\");\n  if (!/^\\d{4}-\\d{2}-\\d{2}$/.test(text) || toIsoDate(fromIsoDate(text)) !== text) fail(`\"${text}\" is geen datum.`);\n  return text;\n}\n\nconst MONTHS = [\"jan\", \"feb\", \"mrt\", \"apr\", \"mei\", \"jun\", \"jul\", \"aug\", \"sep\", \"okt\", \"nov\", \"dec\"];\n\nfunction monthFromName(name: string): number {\n  const lower = name.toLowerCase().replace(/\\.$/, \"\");\n  // The Dutch abbreviation \"mrt\" is not a prefix of \"maart\".\n  if (lower.startsWith(\"maa\")) return 3;\n  const index = MONTHS.findIndex(abbr => lower.startsWith(abbr));\n  return index + 1;\n}\n\n/**\n * A day as typed in \"Wanneer, bv. 25 sep\": \"25 sep\", \"25 september\", \"25-9\",\n * \"25/09\" or an ISO date. The year is the meeting's, unless that lands more than\n * two months before the meeting; then it means next year (typed on 28 December,\n * \"8 jan\" is in January to come). Null for empty, undefined for something that\n * is not a date.\n */\nexport function parseDayInput(text: string, meetingDate: string): string | null | undefined {\n  const input = text.trim();\n  if (!input) return null;\n  if (/^\\d{4}-\\d{2}-\\d{2}$/.test(input)) return toIsoDate(fromIsoDate(input)) === input ? input : undefined;\n\n  const match = /^(\\d{1,2})\\s*(?:[-/]\\s*(\\d{1,2})|\\s+([a-z]+\\.?))$/i.exec(input);\n  if (!match) return undefined;\n  const day = Number(match[1]);\n  const month = match[2] ? Number(match[2]) : monthFromName(match[3]);\n  if (month < 1 || month > 12) return undefined;\n\n  const meeting = fromIsoDate(meetingDate);\n  const build = (year: number) => new Date(year, month - 1, day);\n  let date = build(meeting.getFullYear());\n  if (date.getMonth() !== month - 1) return undefined; // 31 feb rolls over into March\n  const twoMonthsBack = new Date(meeting.getFullYear(), meeting.getMonth() - 2, meeting.getDate());\n  if (date < twoMonthsBack) date = build(meeting.getFullYear() + 1);\n  return toIsoDate(date);\n}\n","<template>\n  <header class=\"mh\">\n    <RouterLink class=\"mh__logo\" :to=\"{ name: 'tools' }\" aria-label=\"Tech_42 Tools\">\n      <Tech42Logo />\n    </RouterLink>\n    <span class=\"mh__divider\" />\n    <slot>\n      <span class=\"mh__app\">Maandag kick-off</span>\n    </slot>\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nimport { RouterLink } from \"vue-router\";\nimport Tech42Logo from \"../Tech42Logo.vue\";\n</script>\n\n<style scoped>\n.mh {\n  position: relative;\n  z-index: 2;\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  gap: 20px;\n  height: 64px;\n  padding: 0 24px;\n  border-bottom: 1px solid var(--hairline-weak);\n  background: var(--background);\n}\n.mh__logo { display: flex; flex: none; width: 88px; color: var(--foreground); }\n.mh__logo :deep(svg) { width: 88px; height: auto; }\n.mh__divider { flex: none; width: 1px; height: 24px; background: var(--border); }\n.mh__app { font-size: 14px; font-weight: 500; color: var(--muted-foreground); }\n</style>\n","import { createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, renderSlot as _renderSlot, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"mh\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createVNode($setup[\"RouterLink\"], {\n      class: \"mh__logo\",\n      to: { name: 'tools' },\n      \"aria-label\": \"Tech_42 Tools\"\n    }, {\n      default: _withCtx(() => [\n        _createVNode($setup[\"Tech42Logo\"])\n      ]),\n      _: 1 /* STABLE */\n    }),\n    _cache[1] || (_cache[1] = _createElementVNode(\"span\", { class: \"mh__divider\" }, null, -1 /* CACHED */)),\n    _renderSlot(_ctx.$slots, \"default\", {}, () => [\n      _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"mh__app\" }, \"Maandag kick-off\", -1 /* CACHED */))\n    ], true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MondaysHeader.vue\";script.__scopeId = \"data-v-842861d7\";export default script;","<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref } from \"vue\";\nimport type { MeetingInput, MeetingInputOverview } from \"@mod-tech42_tools/js/mondays/types\";\nimport ModalDialog from \"../ModalDialog.vue\";\nimport MeetingInputList from \"./MeetingInputList.vue\";\nimport MeetingInputSkeleton from \"./MeetingInputSkeleton.vue\";\nimport { api } from \"../../lib/api\";\nimport { errorMessage } from \"../../lib/errors\";\nimport { meetingInputTabs } from \"../../lib/meeting-input-tabs\";\n\nconst EMPTY = \"Typ eerst wat je wilt bespreken.\";\n\nconst overview = ref<MeetingInputOverview | null>(null);\nconst selected = ref(\"all\");\nconst inputView = computed(() => meetingInputTabs({ overview: overview.value, selected: selected.value }));\nconst tabs = computed(() => inputView.value.tabs);\nconst activeTab = computed(() => inputView.value.selected);\n\nfunction onTabKey(event: KeyboardEvent) {\n  if (![\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"].includes(event.key)) return;\n  event.preventDefault();\n  const at = tabs.value.findIndex(tab => tab.id === activeTab.value);\n  const index = event.key === \"Home\" ? 0 : event.key === \"End\" ? tabs.value.length - 1\n    : (at + (event.key === \"ArrowRight\" ? 1 : tabs.value.length - 1)) % tabs.value.length;\n  selected.value = tabs.value[index].id;\n  (event.currentTarget as HTMLElement).querySelector<HTMLButtonElement>(`#mi-tab-${selected.value}`)?.focus();\n}\nconst loadError = ref(\"\");\n\nconst newText = ref(\"\");\nconst adding = ref(false);\nconst addError = ref(\"\");\n\nconst editingId = ref<number | null>(null);\nconst editText = ref(\"\");\nconst editError = ref(\"\");\nconst savingEdit = ref(false);\nconst editField = ref<HTMLTextAreaElement | null>(null);\n\nconst deleting = ref<MeetingInput | null>(null);\nconst deleteError = ref(\"\");\nconst removing = ref(false);\nconst deleteCancel = ref<HTMLButtonElement | null>(null);\nlet actionTrigger: HTMLElement | null = null;\n\nfunction restoreActionFocus() {\n  // Deleting the last point also removes its trigger; keep keyboard users in the input section.\n  if (actionTrigger?.isConnected) actionTrigger.focus();\n  else document.getElementById(\"mi-new\")?.focus();\n}\n\nasync function load() {\n  try {\n    overview.value = await api.getMeetingInputOverview();\n    loadError.value = \"\";\n  } catch (e) {\n    loadError.value = errorMessage(e, \"Je input kon niet worden opgehaald.\");\n  }\n}\n\n// Validated on submit, so the button never looks dead while you are still typing.\nasync function add() {\n  if (!newText.value.trim()) {\n    addError.value = EMPTY;\n    return;\n  }\n  adding.value = true;\n  addError.value = \"\";\n  try {\n    await api.addMyMeetingInput({ text: newText.value });\n    newText.value = \"\";\n    // Keep the newly submitted point visible even when another person's tab was open.\n    selected.value = String(overview.value!.person!.id);\n    await load();\n  } catch (e) {\n    addError.value = errorMessage(e, \"Je punt kon niet worden toegevoegd.\");\n  } finally {\n    adding.value = false;\n  }\n}\n\nasync function startEdit(item: MeetingInput) {\n  actionTrigger = document.activeElement as HTMLElement | null;\n  editingId.value = item.id;\n  editText.value = item.text;\n  editError.value = \"\";\n  await nextTick();\n  editField.value?.focus();\n}\n\nfunction cancelEdit() {\n  if (savingEdit.value) return;\n  editingId.value = null;\n  editError.value = \"\";\n  restoreActionFocus();\n}\n\nasync function saveEdit() {\n  const id = editingId.value;\n  if (id === null) return;\n  if (!editText.value.trim()) {\n    editError.value = EMPTY;\n    return;\n  }\n  savingEdit.value = true;\n  editError.value = \"\";\n  try {\n    await api.updateMyMeetingInput({ id, text: editText.value });\n    editingId.value = null;\n    await load();\n    await nextTick();\n    restoreActionFocus();\n  } catch (e) {\n    editError.value = errorMessage(e, \"Je punt kon niet worden opgeslagen.\");\n  } finally {\n    savingEdit.value = false;\n  }\n}\n\nasync function askDelete(item: MeetingInput) {\n  actionTrigger = document.activeElement as HTMLElement | null;\n  deleting.value = item;\n  deleteError.value = \"\";\n  await nextTick();\n  deleteCancel.value?.focus();\n}\n\nfunction cancelDelete() {\n  if (removing.value) return;\n  deleting.value = null;\n  restoreActionFocus();\n}\n\nasync function confirmDelete() {\n  if (!deleting.value) return;\n  removing.value = true;\n  deleteError.value = \"\";\n  try {\n    await api.deleteMyMeetingInput({ id: deleting.value.id });\n    deleting.value = null;\n    await load();\n    await nextTick();\n    restoreActionFocus();\n  } catch (e) {\n    deleteError.value = errorMessage(e, \"Je punt kon niet worden verwijderd.\");\n  } finally {\n    removing.value = false;\n  }\n}\n\nonMounted(load);\n</script>\n\n<template>\n  <section class=\"mi\" aria-label=\"Input voor de meeting\" :aria-busy=\"!overview && !loadError\">\n    <div class=\"mi__head\">\n      <h2 class=\"mi__title\">Input voor de volgende meeting</h2>\n    </div>\n\n    <template v-if=\"overview\">\n      <!-- Keep the tab divider and its rows outside the card's section gap. -->\n      <div>\n        <div v-if=\"tabs.length > 1\" class=\"mi__tabs\" role=\"tablist\" aria-label=\"Input per persoon\" @keydown=\"onTabKey\">\n          <button\n            v-for=\"tab in tabs\" :id=\"`mi-tab-${tab.id}`\" :key=\"tab.id\"\n            type=\"button\" role=\"tab\" :aria-label=\"`${tab.label} (${tab.items.length})`\" :aria-selected=\"activeTab === tab.id\"\n            :tabindex=\"activeTab === tab.id ? 0 : -1\" :aria-controls=\"`mi-panel-${tab.id}`\"\n            @click=\"selected = tab.id\"\n          >{{ tab.label }}<span class=\"mi__count\">{{ tab.items.length }}</span></button>\n        </div>\n        <div v-for=\"tab in tabs\" v-show=\"activeTab === tab.id\" :id=\"`mi-panel-${tab.id}`\" :key=\"tab.id\" class=\"mi__panel\" :class=\"{ 'mi__panel--empty': !tab.items.length, 'mi__panel--standalone': tabs.length === 1 }\" :role=\"tabs.length > 1 ? 'tabpanel' : undefined\" :aria-labelledby=\"tabs.length > 1 ? `mi-tab-${tab.id}` : undefined\">\n          <MeetingInputList :items=\"tab.items\" :people=\"overview.people\" :own-person-id=\"overview.person?.id ?? null\" @edit=\"startEdit\" @delete=\"askDelete\" />\n        </div>\n      </div>\n      <p v-if=\"loadError\" class=\"mi__msg\" role=\"alert\">{{ loadError }}</p>\n\n      <template v-if=\"overview.person\">\n        <form class=\"mi__add\" novalidate @submit.prevent=\"add\">\n          <label class=\"mi__label\" for=\"mi-new\">Jouw input toevoegen, {{ overview.person.short }}</label>\n          <textarea\n            id=\"mi-new\"\n            v-model=\"newText\"\n            class=\"input input--area mi__text\"\n            :class=\"{ 'input--err': addError }\"\n            rows=\"3\"\n            placeholder=\"Een onderwerp, een vraag, iets wat iedereen moet weten…\"\n            :aria-invalid=\"Boolean(addError)\"\n            :disabled=\"adding\"\n          />\n          <p class=\"mi__msg\" role=\"alert\">{{ addError }}</p>\n          <div class=\"mi__acts\">\n            <button type=\"submit\" class=\"btn btn--primary\" :disabled=\"adding\">{{ adding ? \"Toevoegen…\" : \"Toevoegen\" }}</button>\n          </div>\n        </form>\n      </template>\n      <p v-else class=\"mi__sub\">Je account hoort bij niemand van het team, dus je kunt geen input voor de meeting insturen.</p>\n\n      <ModalDialog :open=\"editingId !== null\" size=\"s\" title=\"Punt bewerken\" @close=\"cancelEdit\">\n        <form class=\"mi__edit\" novalidate @submit.prevent=\"saveEdit\">\n          <textarea\n            ref=\"editField\"\n            v-model=\"editText\"\n            class=\"input input--area mi__text\"\n            :class=\"{ 'input--err': editError }\"\n            rows=\"5\"\n            aria-label=\"Punt bewerken\"\n            :aria-invalid=\"Boolean(editError)\"\n            :disabled=\"savingEdit\"\n          />\n          <p class=\"mi__msg\" role=\"alert\">{{ editError }}</p>\n          <div class=\"mi__acts\">\n            <button type=\"button\" class=\"btn\" :disabled=\"savingEdit\" @click=\"cancelEdit\">Annuleren</button>\n            <button type=\"submit\" class=\"btn btn--primary\" :disabled=\"savingEdit\">{{ savingEdit ? \"Opslaan…\" : \"Opslaan\" }}</button>\n          </div>\n        </form>\n      </ModalDialog>\n\n      <ModalDialog :open=\"deleting !== null\" size=\"s\" title=\"Punt verwijderen\" @close=\"cancelDelete\">\n        <p class=\"mi__ask\">Weet je zeker dat je dit punt wilt verwijderen?</p>\n        <p class=\"mi__ask mi__quote\">{{ deleting?.text }}</p>\n        <p class=\"mi__msg\" role=\"alert\">{{ deleteError }}</p>\n        <div class=\"mi__acts\">\n          <button ref=\"deleteCancel\" type=\"button\" class=\"btn\" :disabled=\"removing\" @click=\"cancelDelete\">Annuleren</button>\n          <button type=\"button\" class=\"btn btn--primary\" :disabled=\"removing\" @click=\"confirmDelete\">\n            {{ removing ? \"Verwijderen…\" : \"Verwijderen\" }}\n          </button>\n        </div>\n      </ModalDialog>\n    </template>\n    <p v-else-if=\"loadError\" class=\"mi__msg\" role=\"alert\">{{ loadError }}</p>\n    <MeetingInputSkeleton v-else />\n  </section>\n</template>\n\n<style scoped>\n.mi {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  width: 100%;\n  padding: 24px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--card);\n}\n.mi__head { display: flex; flex-direction: column; gap: 6px; }\n.mi__title { margin: 0; font-size: 22px; font-weight: 500; }\n.mi__sub { margin: 0; font-size: 14px; color: var(--muted-foreground); }\n\n.mi__tabs { display: flex; flex-wrap: wrap; gap: 0 4px; border-bottom: 1px solid var(--border); }\n.mi__tabs button { position: relative; margin-bottom: -1px; padding: 9px 12px; border: 1px solid transparent; border-radius: var(--radius-md) var(--radius-md) 0 0; background: transparent; color: var(--muted-foreground); cursor: pointer; font: inherit; }\n.mi__tabs button:hover { background: var(--field); }\n.mi__tabs button[aria-selected=\"true\"] { background: var(--card); border-color: var(--border); border-bottom-color: var(--card); color: var(--foreground); }\n.mi__tabs button:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }\n.mi__count { margin-left: 8px; padding: 1px 7px; border-radius: var(--radius-md); background: var(--field); font-size: 12px; font-variant-numeric: tabular-nums; }\n.mi__panel { overflow: hidden; border: 1px solid var(--border); border-top: 0; border-radius: 0 0 var(--radius-md) var(--radius-md); }\n.mi__panel--standalone { border-top: 1px solid var(--border); border-radius: var(--radius-md); }\n.mi__panel--empty { padding: 16px 12px; }\n\n.mi__add, .mi__edit { display: flex; flex-direction: column; gap: 8px; }\n.mi__label { font-size: 14px; font-weight: 500; }\n.mi__text { font-size: 16px; }\n/* Reserved, so a message appearing does not push the buttons down. */\n.mi__msg { min-height: 20px; margin: 0; font-size: 14px; color: var(--fire); }\n.mi__acts { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }\n\n.mi__ask { margin: 0 0 8px; }\n.mi__quote { color: var(--muted-foreground); white-space: pre-wrap; overflow-wrap: anywhere; }\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { MeetingInput, Person } from \"@mod-tech42_tools/js/mondays/types\";\nimport MeetingInputRow from \"./MeetingInputRow.vue\";\n\nconst props = defineProps<{ items: MeetingInput[]; people: Person[]; ownPersonId: number | null }>();\ndefineEmits<{ edit: [item: MeetingInput]; delete: [item: MeetingInput] }>();\nconst rows = computed(() => props.items.map(item => ({\n  item,\n  name: props.people.find(person => person.id === item.personId)?.short ?? \"Onbekend\",\n})));\n</script>\n\n<template>\n  <p v-if=\"!rows.length\" class=\"mil__empty\">Nog geen punten ingestuurd.</p>\n  <ul v-else class=\"mil__list\">\n    <MeetingInputRow v-for=\"{ item, name } in rows\" :key=\"item.id\" :item=\"item\" :name=\"name\" :can-edit=\"item.personId === ownPersonId\" @edit=\"$emit('edit', $event)\" @delete=\"$emit('delete', $event)\" />\n  </ul>\n</template>\n\n<style scoped>\n.mil__empty { margin: 0; color: var(--muted-foreground); font-size: 14px; }\n.mil__list { display: flex; flex-direction: column; margin: 0; padding: 0; list-style: none; }\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from \"vue\";\n// Select the tree-shakable ESM entry explicitly: older shared resolvers pick the CJS build.\nimport {\n  ContextMenuRoot, ContextMenuTrigger, ContextMenuPortal, ContextMenuContent, ContextMenuItem, ContextMenuSeparator,\n  DropdownMenuRoot, DropdownMenuTrigger, DropdownMenuPortal, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator,\n} from \"@mod-vue/node_modules/reka-ui/dist/index.js\";\nimport type { MeetingInput } from \"@mod-tech42_tools/js/mondays/types\";\nimport { fmtInputDate } from \"../../lib/mondays-format\";\nimport LinkedText from \"../LinkedText.vue\";\n\nconst props = defineProps<{ item: MeetingInput; name: string; canEdit: boolean }>();\nconst emit = defineEmits<{ edit: [item: MeetingInput]; delete: [item: MeetingInput] }>();\nconst trigger = ref<HTMLButtonElement | null>(null);\nlet openingDialog = false;\nlet interactedOutside = false;\nconst actions = [\n  { key: \"edit\" as const, label: \"Bewerken\", icon: \"m16 3 5 5-12 12H4v-5L16 3Zm-2 2 5 5\" },\n  { key: \"delete\" as const, label: \"Verwijderen\", icon: \"M3 6h18M9 6V3h6v3M5 6l1 15h12l1-15M10 10v7M14 10v7\" },\n];\n\nfunction select(action: \"edit\" | \"delete\") {\n  // Menu close autofocus must not steal focus from the dialog opened by the action.\n  openingDialog = true;\n  trigger.value?.focus();\n  if (action === \"edit\") emit(\"edit\", props.item);\n  else emit(\"delete\", props.item);\n}\n\nfunction onCloseAutoFocus(event: Event) {\n  event.preventDefault();\n  if (!openingDialog && !interactedOutside) trigger.value?.focus();\n  openingDialog = false;\n  interactedOutside = false;\n}\n\nfunction editFromRow(event: MouseEvent) {\n  // The row shortcut must respect ownership and leave nested controls to their own actions.\n  if (!props.canEdit || (event.target as Element).closest(\"button, a, input, textarea, [role='menuitem']\")) return;\n  trigger.value?.focus();\n  emit(\"edit\", props.item);\n}\n</script>\n\n<template>\n  <ContextMenuRoot :modal=\"false\">\n    <ContextMenuTrigger as-child :disabled=\"!canEdit\">\n      <li class=\"mir\" :class=\"{ 'mir--editable': canEdit }\" @dblclick=\"editFromRow\">\n        <div class=\"mir__content\">\n          <div class=\"mir__meta\"><span>{{ name }}</span><time :datetime=\"item.createdAt\">Ingediend {{ fmtInputDate(item.createdAt) }}</time></div>\n          <p class=\"mir__text\"><LinkedText :text=\"item.text\" /></p>\n        </div>\n        <DropdownMenuRoot v-if=\"canEdit\" :modal=\"false\">\n          <DropdownMenuTrigger as-child>\n            <button ref=\"trigger\" type=\"button\" class=\"mir__trigger\" :aria-label=\"`Acties voor punt: ${item.text}`\" title=\"Acties\">\n              <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"5\" r=\"2\" /><circle cx=\"12\" cy=\"12\" r=\"2\" /><circle cx=\"12\" cy=\"19\" r=\"2\" /></svg>\n            </button>\n          </DropdownMenuTrigger>\n          <DropdownMenuPortal>\n            <DropdownMenuContent class=\"mir__menu\" align=\"end\" :side-offset=\"6\" :collision-padding=\"12\" loop @close-auto-focus=\"onCloseAutoFocus\" @interact-outside=\"interactedOutside = true\">\n              <template v-for=\"action in actions\" :key=\"action.key\">\n                <DropdownMenuSeparator v-if=\"action.key === 'delete'\" class=\"mir__separator\" />\n                <DropdownMenuItem class=\"mir__action\" :class=\"{ 'mir__action--destructive': action.key === 'delete' }\" @select=\"select(action.key)\">\n                  <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path :d=\"action.icon\" /></svg>\n                  {{ action.label }}\n                </DropdownMenuItem>\n              </template>\n            </DropdownMenuContent>\n          </DropdownMenuPortal>\n        </DropdownMenuRoot>\n      </li>\n    </ContextMenuTrigger>\n    <ContextMenuPortal v-if=\"canEdit\">\n      <ContextMenuContent class=\"mir__menu\" :aria-label=\"`Acties voor punt: ${item.text}`\" :collision-padding=\"12\" loop @close-auto-focus=\"onCloseAutoFocus\" @interact-outside=\"interactedOutside = true\">\n        <template v-for=\"action in actions\" :key=\"action.key\">\n          <ContextMenuSeparator v-if=\"action.key === 'delete'\" class=\"mir__separator\" />\n          <ContextMenuItem class=\"mir__action\" :class=\"{ 'mir__action--destructive': action.key === 'delete' }\" @select=\"select(action.key)\">\n            <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path :d=\"action.icon\" /></svg>\n            {{ action.label }}\n          </ContextMenuItem>\n        </template>\n      </ContextMenuContent>\n    </ContextMenuPortal>\n  </ContextMenuRoot>\n</template>\n\n<style scoped>\n.mir { display: flex; align-items: center; gap: 16px; padding: 16px 12px; border-bottom: 1px solid var(--hairline-weak); border-radius: var(--radius-sm); }\n.mir:hover { background: var(--hover); }\n.mir--editable { cursor: pointer; }\n.mir:last-child { border-bottom: 0; }\n.mir__content { flex: 1; min-width: 0; }\n.mir__meta { display: flex; flex-wrap: wrap; gap: 4px 12px; margin-bottom: 6px; color: var(--muted-foreground); font-size: 14px; }\n.mir__text { margin: 0; font-size: 16px; line-height: 1.5; white-space: pre-wrap; overflow-wrap: anywhere; }\n.mir__trigger { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 40px; height: 40px; padding: 0; border: 1px solid transparent; border-radius: var(--radius-md); background: transparent; color: var(--muted-foreground); cursor: pointer; }\n.mir__trigger:hover, .mir__trigger[data-state=\"open\"] { background: var(--hover-strong); color: var(--foreground); }\n.mir__trigger:focus-visible, .mir__action:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }\n.mir__trigger:active, .mir__action:active { opacity: 0.86; }\n/* Reka's portalled content root does not receive the caller's Vue scope attribute. */\n:global(.mir__menu) { z-index: 110; min-width: 180px; max-width: calc(100vw - 24px); padding: 6px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--popover); color: var(--foreground); box-shadow: var(--shadow-overlay); font-size: 14px; }\n.mir__action { display: flex; align-items: center; gap: 10px; min-height: 40px; padding: 8px 10px; border-radius: var(--radius-sm); cursor: pointer; }\n.mir__action[data-highlighted] { background: var(--hover); }\n.mir__action--destructive[data-highlighted] { background: var(--destructive-soft); color: var(--destructive); }\n.mir__separator { height: 1px; margin: 6px 4px; background: var(--border); }\n</style>\n","import type { InjectionKey } from 'vue'\nimport { inject, provide } from 'vue'\n\n/**\n * @param providerComponentName - The name(s) of the component(s) providing the context.\n *\n * There are situations where context can come from multiple components. In such cases, you might need to give an array of component names to provide your context, instead of just a single string.\n *\n * @param contextName The description for injection key symbol.\n */\nexport function createContext<ContextValue>(\n  providerComponentName: string | string[],\n  contextName?: string,\n) {\n  const symbolDescription\n    = typeof providerComponentName === 'string' && !contextName\n      ? `${providerComponentName}Context`\n      : contextName\n\n  const injectionKey: InjectionKey<ContextValue | null> = Symbol(symbolDescription)\n\n  /**\n   * @param fallback The context value to return if the injection fails.\n   *\n   * @throws When context injection failed and no fallback is specified.\n   * This happens when the component injecting the context is not a child of the root component providing the context.\n   */\n  const injectContext = <\n    T extends ContextValue | null | undefined = ContextValue,\n  >(\n    fallback?: T,\n  ): T extends null ? ContextValue | null : ContextValue => {\n    const context = inject(injectionKey, fallback)\n    if (context)\n      return context\n\n    if (context === null)\n      return context as any\n\n    throw new Error(\n      `Injection \\`${injectionKey.toString()}\\` not found. Component must be used within ${\n        Array.isArray(providerComponentName)\n          ? `one of the following components: ${providerComponentName.join(\n            ', ',\n          )}`\n          : `\\`${providerComponentName}\\``\n      }`,\n    )\n  }\n\n  const provideContext = (contextValue: ContextValue) => {\n    provide(injectionKey, contextValue)\n    return contextValue\n  }\n\n  return [injectContext, provideContext] as const\n}\n","export function getActiveElement(): Element | null {\n  let activeElement = document.activeElement\n  if (activeElement == null) {\n    return null\n  }\n\n  while (activeElement != null && activeElement.shadowRoot != null && activeElement.shadowRoot.activeElement != null) {\n    activeElement = activeElement.shadowRoot.activeElement\n  }\n\n  return activeElement\n}\n","export function handleAndDispatchCustomEvent<\n  E extends CustomEvent,\n  OriginalEvent extends Event,\n>(\n  name: string,\n  handler: ((event: E) => void) | undefined,\n  detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D>\n    ? D\n    : never),\n) {\n  const target = detail.originalEvent.target\n  const event = new CustomEvent(name, {\n    bubbles: false,\n    cancelable: true,\n    detail,\n  })\n  if (handler)\n    target.addEventListener(name, handler as EventListener, { once: true })\n\n  target.dispatchEvent(event)\n}\n","export function isNullish(value: any): value is null | undefined {\n  return value === null || value === undefined\n}\n","import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isRef, nextTick, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowReadonly, shallowRef, toRef as toRef$1, toRefs as toRefs$1, toValue, unref, watch, watchEffect } from \"vue\";\n//#region computedEager/index.ts\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/** @deprecated use `computedEager` instead */\nconst eagerComputed = computedEager;\n//#endregion\n//#region computedWithControl/index.ts\n/**\n* Explicitly define the deps of computed.\n*\n* @param source\n* @param fn\n*/\nfunction computedWithControl(source, fn, options = {}) {\n\tlet v = void 0;\n\tlet track;\n\tlet trigger;\n\tlet dirty = true;\n\tconst update = () => {\n\t\tdirty = true;\n\t\ttrigger();\n\t};\n\twatch(source, update, {\n\t\tflush: \"sync\",\n\t\t...options\n\t});\n\tconst get = typeof fn === \"function\" ? fn : fn.get;\n\tconst set = typeof fn === \"function\" ? void 0 : fn.set;\n\tconst result = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tif (dirty) {\n\t\t\t\t\tv = get(v);\n\t\t\t\t\tdirty = false;\n\t\t\t\t}\n\t\t\t\ttrack();\n\t\t\t\treturn v;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset === null || set === void 0 || set(v);\n\t\t\t}\n\t\t};\n\t});\n\tresult.trigger = update;\n\treturn result;\n}\n/** @deprecated use `computedWithControl` instead */\nconst controlledComputed = computedWithControl;\n//#endregion\n//#region createDisposableDirective/index.ts\n/**\n* Utility for authoring disposable directives. Reactive effects created within `mounted` directive hook will be tracked and automatically disposed when directive is unmounted.\n*\n* @see https://vueuse.org/createDisposableDirective\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createDisposableDirective(origin = {}) {\n\tfunction isFunc(fn) {\n\t\treturn typeof fn === \"function\";\n\t}\n\tconst normalisedOrigin = isFunc(origin) ? {\n\t\tmounted: origin,\n\t\tupdated: origin\n\t} : origin;\n\tconst { mounted, unmounted } = normalisedOrigin;\n\tif (!isFunc(mounted)) return origin;\n\tconst scopeWeakMap = /* @__PURE__ */ new WeakMap();\n\treturn {\n\t\t...normalisedOrigin,\n\t\tmounted(el, binding, vNode, prevNode) {\n\t\t\tvar _scopeWeakMap$get;\n\t\t\tconst scope = (_scopeWeakMap$get = scopeWeakMap.get(el)) !== null && _scopeWeakMap$get !== void 0 ? _scopeWeakMap$get : effectScope();\n\t\t\tscopeWeakMap.set(el, scope);\n\t\t\tscope.run(() => {\n\t\t\t\tmounted === null || mounted === void 0 || mounted(el, binding, vNode, prevNode);\n\t\t\t});\n\t\t},\n\t\tunmounted(el, binding, vNode, prevNode) {\n\t\t\tvar _scopeWeakMap$get2;\n\t\t\t(_scopeWeakMap$get2 = scopeWeakMap.get(el)) === null || _scopeWeakMap$get2 === void 0 || _scopeWeakMap$get2.stop();\n\t\t\tscopeWeakMap.delete(el);\n\t\t\tif (isFunc(unmounted)) unmounted(el, binding, vNode, prevNode);\n\t\t}\n\t};\n}\n//#endregion\n//#region tryOnScopeDispose/index.ts\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n//#endregion\n//#region createEventHook/index.ts\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n//#endregion\n//#region createGlobalState/index.ts\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\n//#endregion\n//#region provideLocal/map.ts\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n//#endregion\n//#region injectLocal/index.ts\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nconst injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\n//#endregion\n//#region provideLocal/index.ts\n/**\n* On the basis of `provide`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* provideLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*/\nfunction provideLocal(key, value) {\n\tvar _getCurrentInstance;\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null) throw new Error(\"provideLocal must be called in setup\");\n\tif (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, Object.create(null));\n\tconst localProvidedState = localProvidedStateMap.get(owner);\n\tlocalProvidedState[key] = value;\n\treturn provide(key, value);\n}\n//#endregion\n//#region createInjectionState/index.ts\nfunction createInjectionState(composable, options) {\n\tconst key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n\tconst defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue;\n\tconst useProvidingState = (...args) => {\n\t\tconst state = composable(...args);\n\t\tprovideLocal(key, state);\n\t\treturn state;\n\t};\n\tconst useInjectedState = () => injectLocal(key, defaultValue);\n\treturn [useProvidingState, useInjectedState];\n}\n//#endregion\n//#region createRef/index.ts\n/**\n* Returns a `deepRef` or `shallowRef` depending on the `deep` param.\n*\n* @example createRef(1) // ShallowRef<number>\n* @example createRef(1, false) // ShallowRef<number>\n* @example createRef(1, true) // Ref<number>\n* @example createRef(\"string\") // ShallowRef<string>\n* @example createRef<\"A\"|\"B\">(\"A\", true) // Ref<\"A\"|\"B\">\n*\n* @param value\n* @param deep\n* @returns the `deepRef` or `shallowRef`\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createRef(value, deep) {\n\tif (deep === true) return ref(value);\n\telse return shallowRef(value);\n}\n//#endregion\n//#region utils/is.ts\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\tif (!condition) 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 = () => {};\nconst rand = (min, max) => {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.hasOwn(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && !!((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\n//#endregion\n//#region toRef/index.ts\nfunction toRef(...args) {\n\tif (args.length !== 1) return toRef$1(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n//#endregion\n//#region utils/filters.ts\n/**\n* @internal\n*/\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\treturn wrapper;\n}\nconst bypassFilter = (invoke) => {\n\treturn invoke();\n};\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tconst _clearTimeout = (timer) => {\n\t\tclearTimeout(timer);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst filter = (invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\treturn Promise.resolve(invoke());\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastInvoker = invoke;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(invoke());\n\t\t\t}, duration);\n\t\t});\n\t};\n\treturn filter;\n}\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter  Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\n//#endregion\n//#region utils/general.ts\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n\treturn new Promise((resolve, reject) => {\n\t\tif (throwOnTimeout) setTimeout(reject, ms, reason);\n\t\telse setTimeout(resolve, ms);\n\t});\n}\nfunction identity(arg) {\n\treturn arg;\n}\n/**\n* Create singleton promise function\n*\n* @example\n* ```\n* const promise = createSingletonPromise(async () => { ... })\n*\n* await promise()\n* await promise() // all of them will be bind to a single promise instance\n* await promise() // and be resolved together\n* ```\n*/\nfunction createSingletonPromise(fn) {\n\tlet _promise;\n\tfunction wrapper() {\n\t\tif (!_promise) _promise = fn();\n\t\treturn _promise;\n\t}\n\twrapper.reset = async () => {\n\t\tconst _prev = _promise;\n\t\t_promise = void 0;\n\t\tif (_prev) await _prev;\n\t};\n\treturn wrapper;\n}\nfunction invoke(fn) {\n\treturn fn();\n}\nfunction containsProp(obj, ...props) {\n\treturn props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\n/**\n* Create a new subset object by giving keys\n*/\nfunction objectPick(obj, keys, omitUndefined = false) {\n\treturn keys.reduce((n, k) => {\n\t\tif (k in obj) {\n\t\t\tif (!omitUndefined || obj[k] !== void 0) n[k] = obj[k];\n\t\t}\n\t\treturn n;\n\t}, {});\n}\n/**\n* Create a new subset object by omit giving keys\n*/\nfunction objectOmit(obj, keys, omitUndefined = false) {\n\treturn Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn (!omitUndefined || value !== void 0) && !keys.includes(key);\n\t}));\n}\nfunction objectEntries(obj) {\n\treturn Object.entries(obj);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n//#endregion\n//#region utils/port.ts\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\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\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n//#endregion\n//#region utils/vue.ts\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n//#endregion\n//#region createSharedComposable/index.ts\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n//#endregion\n//#region extendRef/index.ts\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n\tfor (const [key, value] of Object.entries(extend)) {\n\t\tif (key === \"value\") continue;\n\t\tif (isRef(value) && unwrap) Object.defineProperty(ref, key, {\n\t\t\tget() {\n\t\t\t\treturn value.value;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tvalue.value = v;\n\t\t\t},\n\t\t\tenumerable\n\t\t});\n\t\telse Object.defineProperty(ref, key, {\n\t\t\tvalue,\n\t\t\tenumerable\n\t\t});\n\t}\n\treturn ref;\n}\n//#endregion\n//#region get/index.ts\nfunction get(obj, key) {\n\tif (key == null) return unref(obj);\n\treturn unref(obj)[key];\n}\n//#endregion\n//#region isDefined/index.ts\nfunction isDefined(v) {\n\treturn unref(v) != null;\n}\n//#endregion\n//#region makeDestructurable/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction makeDestructurable(obj, arr) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tconst clone = { ...obj };\n\t\tObject.defineProperty(clone, Symbol.iterator, {\n\t\t\tenumerable: false,\n\t\t\tvalue() {\n\t\t\t\tlet index = 0;\n\t\t\t\treturn { next: () => ({\n\t\t\t\t\tvalue: arr[index++],\n\t\t\t\t\tdone: index > arr.length\n\t\t\t\t}) };\n\t\t\t}\n\t\t});\n\t\treturn clone;\n\t} else return Object.assign([...arr], obj);\n}\n//#endregion\n//#region reactify/index.ts\n/**\n* Converts plain function into a reactive function.\n* The converted function accepts refs as it's arguments\n* and returns a ComputedRef, with proper typing.\n*\n* @param fn - Source function\n* @param options - Options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactify(fn, options) {\n\tconst unrefFn = (options === null || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue;\n\treturn function(...args) {\n\t\treturn computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n\t};\n}\n/** @deprecated use `reactify` instead */\nconst createReactiveFn = reactify;\n//#endregion\n//#region reactifyObject/index.ts\n/**\n* Apply `reactify` to an object\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n\tlet keys = [];\n\tlet options;\n\tif (Array.isArray(optionsOrKeys)) keys = optionsOrKeys;\n\telse {\n\t\toptions = optionsOrKeys;\n\t\tconst { includeOwnProperties = true } = optionsOrKeys;\n\t\tkeys.push(...Object.keys(obj));\n\t\tif (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj));\n\t}\n\treturn Object.fromEntries(keys.map((key) => {\n\t\tconst value = obj[key];\n\t\treturn [key, typeof value === \"function\" ? reactify(value.bind(obj), options) : value];\n\t}));\n}\n//#endregion\n//#region toReactive/index.ts\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n//#endregion\n//#region reactiveComputed/index.ts\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n//#endregion\n//#region reactiveOmit/index.ts\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn 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//#endregion\n//#region reactivePick/index.ts\n/**\n* Reactively pick fields from a reactive object\n*\n* @see https://vueuse.org/reactivePick\n*/\nfunction reactivePick(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn 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//#endregion\n//#region refAutoReset/index.ts\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs      A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/** @deprecated use `refAutoReset` instead */\nconst autoResetRef = refAutoReset;\n//#endregion\n//#region useDebounceFn/index.ts\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param  fn          A function to be executed after delay milliseconds debounced.\n* @param  ms          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param  options     Options\n*\n* @return A new, debounce, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n//#endregion\n//#region refDebounced/index.ts\n/**\n* Debounce updates of a ref.\n*\n* @return A new debounced ref.\n*/\nfunction refDebounced(value, ms = 200, options = {}) {\n\tconst debounced = ref(toValue(value));\n\tconst updater = useDebounceFn(() => {\n\t\tdebounced.value = value.value;\n\t}, ms, options);\n\twatch(value, () => updater());\n\treturn shallowReadonly(debounced);\n}\n/** @deprecated use `refDebounced` instead */\nconst debouncedRef = refDebounced;\n/** @deprecated use `refDebounced` instead */\nconst useDebounce = refDebounced;\n//#endregion\n//#region refDefault/index.ts\n/**\n* Apply default value to a ref.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refDefault(source, defaultValue) {\n\treturn computed({\n\t\tget() {\n\t\t\tvar _source$value;\n\t\t\treturn (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue;\n\t\t},\n\t\tset(value) {\n\t\t\tsource.value = value;\n\t\t}\n\t});\n}\n//#endregion\n//#region refManualReset/index.ts\n/**\n* Create a ref with manual reset functionality.\n*\n* @see https://vueuse.org/refManualReset\n* @param defaultValue The value which will be set.\n*/\nfunction refManualReset(defaultValue) {\n\tlet value = toValue(defaultValue);\n\tlet trigger;\n\tconst reset = () => {\n\t\tvalue = toValue(defaultValue);\n\t\ttrigger();\n\t};\n\tconst refValue = customRef((track, _trigger) => {\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\trefValue.reset = reset;\n\treturn refValue;\n}\n//#endregion\n//#region useThrottleFn/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param   fn             A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n*                                    to `callback` when the throttled-function is executed.\n* @param   ms             A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n*                                    (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return  A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n//#endregion\n//#region refThrottled/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param value Ref value to be watched with throttle effect\n* @param  delay  A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param trailing if true, update the value again after the delay time is up\n* @param leading if true, update the value on the leading edge of the ms timeout\n*/\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n\tif (delay <= 0) return value;\n\tconst throttled = ref(toValue(value));\n\tconst updater = useThrottleFn(() => {\n\t\tthrottled.value = value.value;\n\t}, delay, trailing, leading);\n\twatch(value, () => updater());\n\treturn throttled;\n}\n/** @deprecated use `refThrottled` instead */\nconst throttledRef = refThrottled;\n/** @deprecated use `refThrottled` instead */\nconst useThrottle = refThrottled;\n//#endregion\n//#region refWithControl/index.ts\n/**\n* Fine-grained controls over ref and its reactivity.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refWithControl(initial, options = {}) {\n\tlet source = initial;\n\tlet track;\n\tlet trigger;\n\tconst ref = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get();\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset(v);\n\t\t\t}\n\t\t};\n\t});\n\tfunction get(tracking = true) {\n\t\tif (tracking) track();\n\t\treturn source;\n\t}\n\tfunction set(value, triggering = true) {\n\t\tvar _options$onBeforeChan, _options$onChanged;\n\t\tif (value === source) return;\n\t\tconst old = source;\n\t\tif (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return;\n\t\tsource = value;\n\t\t(_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old);\n\t\tif (triggering) trigger();\n\t}\n\t/**\n\t* Get the value without tracked in the reactivity system\n\t*/\n\tconst untrackedGet = () => get(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*/\n\tconst silentSet = (v) => set(v, false);\n\t/**\n\t* Get the value without tracked in the reactivity system.\n\t*\n\t* Alias for `untrackedGet()`\n\t*/\n\tconst peek = () => get(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*\n\t* Alias for `silentSet(v)`\n\t*/\n\tconst lay = (v) => set(v, false);\n\treturn extendRef(ref, {\n\t\tget,\n\t\tset,\n\t\tuntrackedGet,\n\t\tsilentSet,\n\t\tpeek,\n\t\tlay\n\t}, { enumerable: true });\n}\n/** @deprecated use `refWithControl` instead */\nconst controlledRef = refWithControl;\n//#endregion\n//#region set/index.ts\n/**\n*  Shorthand for `ref.value = x`\n*/\nfunction set(...args) {\n\tif (args.length === 2) {\n\t\tconst [ref, value] = args;\n\t\tref.value = value;\n\t}\n\tif (args.length === 3) {\n\t\tconst [target, key, value] = args;\n\t\ttarget[key] = value;\n\t}\n}\n//#endregion\n//#region watchWithFilter/index.ts\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n//#endregion\n//#region watchPausable/index.ts\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\", ...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/** @deprecated Use Vue's built-in `watch` instead. This function will be removed in future version. */\nconst pausableWatch = watchPausable;\n//#endregion\n//#region syncRef/index.ts\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(watchPausable(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(watchPausable(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n//#endregion\n//#region syncRefs/index.ts\n/**\n* Keep target ref(s) in sync with the source ref\n*\n* @param source source ref\n* @param targets\n*/\nfunction syncRefs(source, targets, options = {}) {\n\tconst { flush = \"sync\", deep = false, immediate = true } = options;\n\tconst targetsArray = toArray(targets);\n\treturn watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t});\n}\n//#endregion\n//#region toRefs/index.ts\n/**\n* Extended `toRefs` that also accepts refs of an object.\n*\n* @see https://vueuse.org/toRefs\n* @param objectRef A ref or normal object or array.\n* @param options Options\n*/\nfunction toRefs(objectRef, options = {}) {\n\tif (!isRef(objectRef)) return toRefs$1(objectRef);\n\tconst result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n\tfor (const key in objectRef.value) result[key] = customRef(() => ({\n\t\tget() {\n\t\t\treturn objectRef.value[key];\n\t\t},\n\t\tset(v) {\n\t\t\tvar _toValue;\n\t\t\tif ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) {\n\t\t\t\tconst copy = [...objectRef.value];\n\t\t\t\tcopy[key] = v;\n\t\t\t\tobjectRef.value = copy;\n\t\t\t} else {\n\t\t\t\tconst newObject = {\n\t\t\t\t\t...objectRef.value,\n\t\t\t\t\t[key]: v\n\t\t\t\t};\n\t\t\t\tObject.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n\t\t\t\tobjectRef.value = newObject;\n\t\t\t}\n\t\t\telse objectRef.value[key] = v;\n\t\t}\n\t}));\n\treturn result;\n}\n//#endregion\n//#region tryOnBeforeMount/index.ts\n/**\n* Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnBeforeMount(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onBeforeMount(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n//#endregion\n//#region tryOnBeforeUnmount/index.ts\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n//#endregion\n//#region tryOnMounted/index.ts\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n//#endregion\n//#region tryOnUnmounted/index.ts\n/**\n* Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnUnmounted(fn, target) {\n\tif (getLifeCycleTarget(target)) onUnmounted(fn, target);\n}\n//#endregion\n//#region until/index.ts\nfunction createUntil(r, isNot = false) {\n\tfunction toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch(r, (v) => {\n\t\t\t\tif (condition(v) !== isNot) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? void 0 : stop()));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBe(value, options) {\n\t\tif (!isRef(value)) return toMatch((v) => v === value, options);\n\t\tconst { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options !== null && options !== void 0 ? options : {};\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch([r, value], ([v1, v2]) => {\n\t\t\t\tif (isNot !== (v1 === v2)) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v1);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n\t\t\tstop === null || stop === void 0 || stop();\n\t\t\treturn toValue(r);\n\t\t}));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBeTruthy(options) {\n\t\treturn toMatch((v) => Boolean(v), options);\n\t}\n\tfunction toBeNull(options) {\n\t\treturn toBe(null, options);\n\t}\n\tfunction toBeUndefined(options) {\n\t\treturn toBe(void 0, options);\n\t}\n\tfunction toBeNaN(options) {\n\t\treturn toMatch(Number.isNaN, options);\n\t}\n\tfunction toContains(value, options) {\n\t\treturn toMatch((v) => {\n\t\t\tconst array = Array.from(v);\n\t\t\treturn array.includes(value) || array.includes(toValue(value));\n\t\t}, options);\n\t}\n\tfunction changed(options) {\n\t\treturn changedTimes(1, options);\n\t}\n\tfunction changedTimes(n = 1, options) {\n\t\tlet count = -1;\n\t\treturn toMatch(() => {\n\t\t\tcount += 1;\n\t\t\treturn count >= n;\n\t\t}, options);\n\t}\n\tif (Array.isArray(toValue(r))) return {\n\t\ttoMatch,\n\t\ttoContains,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n\telse return {\n\t\ttoMatch,\n\t\ttoBe,\n\t\ttoBeTruthy,\n\t\ttoBeNull,\n\t\ttoBeNaN,\n\t\ttoBeUndefined,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n}\nfunction until(r) {\n\treturn createUntil(r);\n}\n//#endregion\n//#region useArrayDifference/index.ts\nfunction defaultComparator(value, othVal) {\n\treturn value === othVal;\n}\n/**\n* Reactive get array difference of two array\n* @see https://vueuse.org/useArrayDifference\n* @returns - the difference of two array\n* @param args\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayDifference(...args) {\n\tvar _args$, _args$2;\n\tconst list = args[0];\n\tconst values = args[1];\n\tlet compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator;\n\tconst { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {};\n\tif (typeof compareFn === \"string\") {\n\t\tconst key = compareFn;\n\t\tcompareFn = (value, othVal) => value[key] === othVal[key];\n\t}\n\tconst diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n\tif (symmetric) {\n\t\tconst diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1));\n\t\treturn computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1));\n\t} else return diff1;\n}\n//#endregion\n//#region useArrayEvery/index.ts\n/**\n* Reactive `Array.every`\n*\n* @see https://vueuse.org/useArrayEvery\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayEvery(list, fn) {\n\treturn computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayFilter/index.ts\n/**\n* Reactive `Array.filter`\n*\n* @see https://vueuse.org/useArrayFilter\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFilter(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n//#endregion\n//#region useArrayFind/index.ts\n/**\n* Reactive `Array.find`\n*\n* @see https://vueuse.org/useArrayFind\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFind(list, fn) {\n\treturn computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array))));\n}\n//#endregion\n//#region useArrayFindIndex/index.ts\n/**\n* Reactive `Array.findIndex`\n*\n* @see https://vueuse.org/useArrayFindIndex\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the index of the first element in the array that passes the test. Otherwise, \"-1\".\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindIndex(list, fn) {\n\treturn computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayFindLast/index.ts\nfunction findLast(arr, cb) {\n\tlet index = arr.length;\n\twhile (index-- > 0) if (cb(arr[index], index, arr)) return arr[index];\n}\n/**\n* Reactive `Array.findLast`\n*\n* @see https://vueuse.org/useArrayFindLast\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindLast(list, fn) {\n\treturn computed(() => toValue(!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//#endregion\n//#region useArrayIncludes/index.ts\nfunction isArrayIncludesOptions(obj) {\n\treturn isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\n/**\n* Reactive `Array.includes`\n*\n* @see https://vueuse.org/useArrayIncludes\n*\n* @returns true if the `value` is found in the array. Otherwise, false.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayIncludes(...args) {\n\tvar _comparator;\n\tconst list = args[0];\n\tconst value = args[1];\n\tlet comparator = args[2];\n\tlet formIndex = 0;\n\tif (isArrayIncludesOptions(comparator)) {\n\t\tvar _comparator$fromIndex;\n\t\tformIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0;\n\t\tcomparator = comparator.comparator;\n\t}\n\tif (typeof comparator === \"string\") {\n\t\tconst key = comparator;\n\t\tcomparator = (element, value) => element[key] === toValue(value);\n\t}\n\tcomparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value) => element === toValue(value));\n\treturn computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))));\n}\n//#endregion\n//#region useArrayJoin/index.ts\n/**\n* Reactive `Array.join`\n*\n* @see https://vueuse.org/useArrayJoin\n* @param list - the array was called upon.\n* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n*\n* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayJoin(list, separator) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n//#endregion\n//#region useArrayMap/index.ts\n/**\n* Reactive `Array.map`\n*\n* @see https://vueuse.org/useArrayMap\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a new array with each element being the result of the callback function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayMap(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n//#endregion\n//#region useArrayReduce/index.ts\n/**\n* Reactive `Array.reduce`\n*\n* @see https://vueuse.org/useArrayReduce\n* @param list - the array was called upon.\n* @param reducer - a \"reducer\" function.\n* @param args\n*\n* @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayReduce(list, reducer, ...args) {\n\tconst reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n\treturn computed(() => {\n\t\tconst resolved = toValue(list);\n\t\treturn args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n\t});\n}\n//#endregion\n//#region useArraySome/index.ts\n/**\n* Reactive `Array.some`\n*\n* @see https://vueuse.org/useArraySome\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArraySome(list, fn) {\n\treturn computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n//#endregion\n//#region useArrayUnique/index.ts\nfunction uniq(array) {\n\treturn Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n\treturn array.reduce((acc, v) => {\n\t\tif (!acc.some((x) => fn(v, x, array))) acc.push(v);\n\t\treturn acc;\n\t}, []);\n}\n/**\n* reactive unique array\n* @see https://vueuse.org/useArrayUnique\n* @param list - the array was called upon.\n* @param compareFn\n* @returns A computed ref that returns a unique array of items.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayUnique(list, compareFn) {\n\treturn computed(() => {\n\t\tconst resolvedList = toValue(list).map((element) => toValue(element));\n\t\treturn compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n\t});\n}\n//#endregion\n//#region useCounter/index.ts\n/**\n* Basic counter with utility functions.\n*\n* @see https://vueuse.org/useCounter\n* @param [initialValue]\n* @param options\n*/\nfunction useCounter(initialValue = 0, options = {}) {\n\tlet _initialValue = unref(initialValue);\n\tconst count = shallowRef(initialValue);\n\tconst { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options;\n\tconst inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n\tconst dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n\tconst get = () => count.value;\n\tconst set = (val) => count.value = Math.max(min, Math.min(max, val));\n\tconst reset = (val = _initialValue) => {\n\t\t_initialValue = val;\n\t\treturn set(val);\n\t};\n\treturn {\n\t\tcount: shallowReadonly(count),\n\t\tinc,\n\t\tdec,\n\t\tget,\n\t\tset,\n\t\treset\n\t};\n}\n//#endregion\n//#region useDateFormat/index.ts\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\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}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n\tlet m = hours < 12 ? \"AM\" : \"PM\";\n\tif (hasPeriod) m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n\treturn isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n\tconst suffixes = [\n\t\t\"th\",\n\t\t\"st\",\n\t\t\"nd\",\n\t\t\"rd\"\n\t];\n\tconst v = num % 100;\n\treturn num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n\tvar _options$customMeridi;\n\tconst years = date.getFullYear();\n\tconst month = date.getMonth();\n\tconst days = date.getDate();\n\tconst hours = date.getHours();\n\tconst minutes = date.getMinutes();\n\tconst seconds = date.getSeconds();\n\tconst milliseconds = date.getMilliseconds();\n\tconst day = date.getDay();\n\tconst meridiem = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem;\n\tconst stripTimeZone = (dateString) => {\n\t\tvar _dateString$split$;\n\t\treturn (_dateString$split$ = dateString.split(\" \")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : \"\";\n\t};\n\tconst matches = {\n\t\tYo: () => formatOrdinal(years),\n\t\tYY: () => String(years).slice(-2),\n\t\tYYYY: () => years,\n\t\tM: () => month + 1,\n\t\tMo: () => formatOrdinal(month + 1),\n\t\tMM: () => `${month + 1}`.padStart(2, \"0\"),\n\t\tMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n\t\tMMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n\t\tD: () => String(days),\n\t\tDo: () => formatOrdinal(days),\n\t\tDD: () => `${days}`.padStart(2, \"0\"),\n\t\tH: () => String(hours),\n\t\tHo: () => formatOrdinal(hours),\n\t\tHH: () => `${hours}`.padStart(2, \"0\"),\n\t\th: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n\t\tho: () => formatOrdinal(hours % 12 || 12),\n\t\thh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n\t\tm: () => String(minutes),\n\t\tmo: () => formatOrdinal(minutes),\n\t\tmm: () => `${minutes}`.padStart(2, \"0\"),\n\t\ts: () => String(seconds),\n\t\tso: () => formatOrdinal(seconds),\n\t\tss: () => `${seconds}`.padStart(2, \"0\"),\n\t\tSSS: () => `${milliseconds}`.padStart(3, \"0\"),\n\t\td: () => day,\n\t\tdd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n\t\tddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n\t\tdddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n\t\tA: () => meridiem(hours, minutes),\n\t\tAA: () => meridiem(hours, minutes, false, true),\n\t\ta: () => meridiem(hours, minutes, true),\n\t\taa: () => meridiem(hours, minutes, true, true),\n\t\tz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"longOffset\" }))\n\t};\n\treturn formatStr.replace(REGEX_FORMAT, (match, $1) => {\n\t\tvar _ref, _matches$match;\n\t\treturn (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match;\n\t});\n}\nfunction normalizeDate(date) {\n\tif (date === null) return /* @__PURE__ */ new Date(NaN);\n\tif (date === void 0) return /* @__PURE__ */ new Date();\n\tif (date instanceof Date) return new Date(date);\n\tif (typeof date === \"string\" && !/Z$/i.test(date)) {\n\t\tconst d = date.match(REGEX_PARSE);\n\t\tif (d) {\n\t\t\tconst m = d[2] - 1 || 0;\n\t\t\tconst ms = (d[7] || \"0\").substring(0, 3);\n\t\t\treturn new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n\t\t}\n\t}\n\treturn new Date(date);\n}\n/**\n* Get the formatted date according to the string of tokens passed in.\n*\n* @see https://vueuse.org/useDateFormat\n* @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n* @param formatStr - The combination of tokens to format the date\n* @param options - UseDateFormatOptions\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n\treturn computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n//#endregion\n//#region useIntervalFn/index.ts\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useInterval/index.ts\nfunction useInterval(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, immediate = true, callback } = options;\n\tconst counter = shallowRef(0);\n\tconst update = () => counter.value += 1;\n\tconst reset = () => {\n\t\tcounter.value = 0;\n\t};\n\tconst controls = useIntervalFn(callback ? () => {\n\t\tupdate();\n\t\tcallback(counter.value);\n\t} : update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tcounter: shallowReadonly(counter),\n\t\treset,\n\t\t...controls\n\t};\n\telse return shallowReadonly(counter);\n}\n//#endregion\n//#region useLastChanged/index.ts\nfunction useLastChanged(source, options = {}) {\n\tvar _options$initialValue;\n\tconst ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null);\n\twatch(source, () => ms.value = timestamp(), options);\n\treturn shallowReadonly(ms);\n}\n//#endregion\n//#region useTimeoutFn/index.ts\n/**\n* Wrapper for `setTimeout` with controls.\n*\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useTimeoutFn(cb, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tfunction clear() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction stop() {\n\t\tisPending.value = false;\n\t\tclear();\n\t}\n\tfunction start(...args) {\n\t\tif (immediateCallback) cb();\n\t\tclear();\n\t\tisPending.value = true;\n\t\ttimer = setTimeout(() => {\n\t\t\tisPending.value = false;\n\t\t\ttimer = void 0;\n\t\t\tcb(...args);\n\t\t}, toValue(interval));\n\t}\n\tif (immediate) {\n\t\tisPending.value = true;\n\t\tif (isClient) start();\n\t}\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisPending: shallowReadonly(isPending),\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useTimeout/index.ts\nfunction useTimeout(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, callback } = options;\n\tconst controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options);\n\tconst ready = computed(() => !controls.isPending.value);\n\tif (exposeControls) return {\n\t\tready,\n\t\t...controls\n\t};\n\telse return ready;\n}\n//#endregion\n//#region useToNumber/index.ts\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n//#endregion\n//#region useToString/index.ts\n/**\n* Reactively convert a ref to string.\n*\n* @see https://vueuse.org/useToString\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToString(value) {\n\treturn computed(() => `${toValue(value)}`);\n}\n//#endregion\n//#region useToggle/index.ts\n/**\n* A boolean ref with a toggler\n*\n* @see https://vueuse.org/useToggle\n* @param [initialValue]\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToggle(initialValue = false, options = {}) {\n\tconst { truthyValue = true, falsyValue = false } = options;\n\tconst valueIsRef = isRef(initialValue);\n\tconst _value = shallowRef(initialValue);\n\tfunction toggle(value) {\n\t\tif (arguments.length) {\n\t\t\t_value.value = value;\n\t\t\treturn _value.value;\n\t\t} else {\n\t\t\tconst truthy = toValue(truthyValue);\n\t\t\t_value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n\t\t\treturn _value.value;\n\t\t}\n\t}\n\tif (valueIsRef) return toggle;\n\telse return [_value, toggle];\n}\n//#endregion\n//#region watchArray/index.ts\n/**\n* Watch for an array with additions and removals.\n*\n* @see https://vueuse.org/watchArray\n*/\nfunction watchArray(source, cb, options) {\n\tlet oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue(source)];\n\treturn watch(source, (newList, _, onCleanup) => {\n\t\tconst oldListRemains = Array.from({ length: oldList.length });\n\t\tconst added = [];\n\t\tfor (const obj of newList) {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < oldList.length; i++) if (!oldListRemains[i] && obj === oldList[i]) {\n\t\t\t\toldListRemains[i] = true;\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!found) added.push(obj);\n\t\t}\n\t\tconst removed = oldList.filter((_, i) => !oldListRemains[i]);\n\t\tcb(newList, oldList, added, removed, onCleanup);\n\t\toldList = [...newList];\n\t}, options);\n}\n//#endregion\n//#region watchAtMost/index.ts\nfunction watchAtMost(source, cb, options) {\n\tconst { count, ...watchOptions } = options;\n\tconst current = shallowRef(0);\n\tconst { stop, resume, pause } = watchWithFilter(source, (...args) => {\n\t\tcurrent.value += 1;\n\t\tif (current.value >= toValue(count)) nextTick(() => stop());\n\t\tcb(...args);\n\t}, watchOptions);\n\treturn {\n\t\tcount: current,\n\t\tstop,\n\t\tresume,\n\t\tpause\n\t};\n}\n//#endregion\n//#region watchDebounced/index.ts\nfunction watchDebounced(source, cb, options = {}) {\n\tconst { debounce = 0, maxWait = void 0, ...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: debounceFilter(debounce, { maxWait })\n\t});\n}\n/** @deprecated use `watchDebounced` instead */\nconst debouncedWatch = watchDebounced;\n//#endregion\n//#region watchDeep/index.ts\n/**\n* Shorthand for watching value with {deep: true}\n*\n* @see https://vueuse.org/watchDeep\n*/\nfunction watchDeep(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tdeep: true\n\t});\n}\n//#endregion\n//#region watchIgnorable/index.ts\nfunction watchIgnorable(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter, ...watchOptions } = options;\n\tconst filteredCb = createFilterWrapper(eventFilter, cb);\n\tlet ignoreUpdates;\n\tlet ignorePrevAsyncUpdates;\n\tlet stop;\n\tif (watchOptions.flush === \"sync\") {\n\t\tlet ignore = false;\n\t\tignorePrevAsyncUpdates = () => {};\n\t\tignoreUpdates = (updater) => {\n\t\t\tignore = true;\n\t\t\tupdater();\n\t\t\tignore = false;\n\t\t};\n\t\tstop = watch(source, (...args) => {\n\t\t\tif (!ignore) filteredCb(...args);\n\t\t}, watchOptions);\n\t} else {\n\t\tconst disposables = [];\n\t\tlet ignoreCounter = 0;\n\t\tlet syncCounter = 0;\n\t\tignorePrevAsyncUpdates = () => {\n\t\t\tignoreCounter = syncCounter;\n\t\t};\n\t\tdisposables.push(watch(source, () => {\n\t\t\tsyncCounter++;\n\t\t}, {\n\t\t\t...watchOptions,\n\t\t\tflush: \"sync\"\n\t\t}));\n\t\tignoreUpdates = (updater) => {\n\t\t\tconst syncCounterPrev = syncCounter;\n\t\t\tupdater();\n\t\t\tignoreCounter += syncCounter - syncCounterPrev;\n\t\t};\n\t\tdisposables.push(watch(source, (...args) => {\n\t\t\tconst ignore = ignoreCounter > 0 && ignoreCounter === syncCounter;\n\t\t\tignoreCounter = 0;\n\t\t\tsyncCounter = 0;\n\t\t\tif (ignore) return;\n\t\t\tfilteredCb(...args);\n\t\t}, watchOptions));\n\t\tstop = () => {\n\t\t\tdisposables.forEach((fn) => fn());\n\t\t};\n\t}\n\treturn {\n\t\tstop,\n\t\tignoreUpdates,\n\t\tignorePrevAsyncUpdates\n\t};\n}\n/** @deprecated use `watchIgnorable` instead */\nconst ignorableWatch = watchIgnorable;\n//#endregion\n//#region watchImmediate/index.ts\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n//#endregion\n//#region watchOnce/index.ts\n/**\n* Shorthand for watching value with { once: true }\n*\n* @see https://vueuse.org/watchOnce\n*/\nfunction watchOnce(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tonce: true\n\t});\n}\n//#endregion\n//#region watchThrottled/index.ts\nfunction watchThrottled(source, cb, options = {}) {\n\tconst { throttle = 0, trailing = true, leading = true, ...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: throttleFilter(throttle, trailing, leading)\n\t});\n}\n/** @deprecated use `watchThrottled` instead */\nconst throttledWatch = watchThrottled;\n//#endregion\n//#region watchTriggerable/index.ts\nfunction watchTriggerable(source, cb, options = {}) {\n\tlet cleanupFn;\n\tfunction onEffect() {\n\t\tif (!cleanupFn) return;\n\t\tconst fn = cleanupFn;\n\t\tcleanupFn = void 0;\n\t\tfn();\n\t}\n\t/** Register the function `cleanupFn` */\n\tfunction onCleanup(callback) {\n\t\tcleanupFn = callback;\n\t}\n\tconst _cb = (value, oldValue) => {\n\t\tonEffect();\n\t\treturn cb(value, oldValue, onCleanup);\n\t};\n\tconst res = watchIgnorable(source, _cb, options);\n\tconst { ignoreUpdates } = res;\n\tconst trigger = () => {\n\t\tlet res;\n\t\tignoreUpdates(() => {\n\t\t\tres = _cb(getWatchSources(source), getOldValue(source));\n\t\t});\n\t\treturn res;\n\t};\n\treturn {\n\t\t...res,\n\t\ttrigger\n\t};\n}\nfunction getWatchSources(sources) {\n\tif (isReactive(sources)) return sources;\n\tif (Array.isArray(sources)) return sources.map((item) => toValue(item));\n\treturn toValue(sources);\n}\nfunction getOldValue(source) {\n\treturn Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n//#endregion\n//#region whenever/index.ts\nfunction whenever(source, cb, options) {\n\tconst stop = watch(source, (v, ov, onInvalidate) => {\n\t\tif (v) {\n\t\t\tif (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop());\n\t\t\tcb(v, ov, onInvalidate);\n\t\t}\n\t}, {\n\t\t...options,\n\t\tonce: false\n\t});\n\treturn stop;\n}\n//#endregion\nexport { assert, autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, controlledComputed, controlledRef, createDisposableDirective, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, debouncedRef, debouncedWatch, eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refManualReset, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, throttledRef, throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { bypassFilter, camelize, clamp, computedWithControl, containsProp, createEventHook, createFilterWrapper, createRef, createSingletonPromise, debounceFilter, hasOwn, identity, increaseWithUnit, injectLocal, isClient, isDef, isIOS, isObject, isWorker, makeDestructurable, noop, notNullish, objectEntries, objectOmit, objectPick, pausableFilter, promiseTimeout, provideLocal, pxValue, syncRef, throttleFilter, timestamp, toArray, toRef, toRefs, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useDebounceFn, useIntervalFn, useThrottleFn, useTimeoutFn, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchWithFilter, whenever } from \"@vueuse/shared\";\nimport { Fragment, TransitionGroup, computed, customRef, defineComponent, getCurrentInstance, getCurrentScope, h, hasInjectionContext, inject, isReadonly, isRef, markRaw, nextTick, onBeforeUpdate, onMounted, onUpdated, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toValue, unref, watch, watchEffect } from \"vue\";\nexport * from \"@vueuse/shared\";\n//#region computedAsync/index.ts\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n\tvar _globalThis$reportErr;\n\tlet options;\n\tif (isRef(optionsOrRef)) options = { evaluating: optionsOrRef };\n\telse options = optionsOrRef || {};\n\tconst { lazy = false, flush = \"sync\", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options;\n\tconst started = shallowRef(!lazy);\n\tconst current = shallow ? shallowRef(initialState) : ref(initialState);\n\tlet counter = 0;\n\twatchEffect(async (onInvalidate) => {\n\t\tif (!started.value) return;\n\t\tcounter++;\n\t\tconst counterAtBeginning = counter;\n\t\tlet hasFinished = false;\n\t\tif (evaluating) Promise.resolve().then(() => {\n\t\t\tevaluating.value = true;\n\t\t});\n\t\ttry {\n\t\t\tconst result = await evaluationCallback((cancelCallback) => {\n\t\t\t\tonInvalidate(() => {\n\t\t\t\t\tif (evaluating) evaluating.value = false;\n\t\t\t\t\tif (!hasFinished) cancelCallback();\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (counterAtBeginning === counter) current.value = result;\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (evaluating && counterAtBeginning === counter) evaluating.value = false;\n\t\t\thasFinished = true;\n\t\t}\n\t}, { flush });\n\tif (lazy) return computed(() => {\n\t\tstarted.value = true;\n\t\treturn current.value;\n\t});\n\telse return current;\n}\n/** @deprecated use `computedAsync` instead */\nconst asyncComputed = computedAsync;\n//#endregion\n//#region computedInject/index.ts\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n\tlet source = inject(key);\n\tif (defaultSource) source = inject(key, defaultSource);\n\tif (treatDefaultAsFactory) source = inject(key, defaultSource, treatDefaultAsFactory);\n\tif (typeof options === \"function\") return computed((oldValue) => options(source, oldValue));\n\telse return computed({\n\t\tget: (oldValue) => options.get(source, oldValue),\n\t\tset: options.set\n\t});\n}\n//#endregion\n//#region createReusableTemplate/index.ts\n/**\n* This function creates `define` and `reuse` components in pair,\n* It also allow to pass a generic to bind with type.\n*\n* @see https://vueuse.org/createReusableTemplate\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createReusableTemplate(options = {}) {\n\tconst { inheritAttrs = true, name = \"ReusableTemplate\" } = options;\n\tconst render = shallowRef();\n\tconst define = defineComponent({\n\t\tname: `${name}.define`,\n\t\tsetup(_, { slots }) {\n\t\t\treturn () => {\n\t\t\t\trender.value = slots.default;\n\t\t\t};\n\t\t}\n\t});\n\tconst reuse = defineComponent({\n\t\tinheritAttrs,\n\t\tname: `${name}.reuse`,\n\t\tprops: options.props,\n\t\tsetup(props, { attrs, slots }) {\n\t\t\treturn () => {\n\t\t\t\tvar _render$value;\n\t\t\t\tif (!render.value && true) throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n\t\t\t\tconst vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, {\n\t\t\t\t\t...options.props == null ? keysToCamelKebabCase(attrs) : props,\n\t\t\t\t\t$slots: slots\n\t\t\t\t});\n\t\t\t\treturn inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n\t\t\t};\n\t\t}\n\t});\n\treturn makeDestructurable({\n\t\tdefine,\n\t\treuse\n\t}, [define, reuse]);\n}\nfunction keysToCamelKebabCase(obj) {\n\tconst newObj = {};\n\tfor (const key in obj) newObj[camelize(key)] = obj[key];\n\treturn newObj;\n}\n//#endregion\n//#region createTemplatePromise/index.ts\n/**\n* Creates a template promise component.\n*\n* @see https://vueuse.org/createTemplatePromise\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createTemplatePromise(options = {}) {\n\tlet index = 0;\n\tconst instances = ref([]);\n\tfunction create(...args) {\n\t\tconst props = shallowReactive({\n\t\t\tkey: index++,\n\t\t\targs,\n\t\t\tpromise: void 0,\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t\tisResolving: false,\n\t\t\toptions\n\t\t});\n\t\tinstances.value.push(props);\n\t\tprops.promise = new Promise((_resolve, _reject) => {\n\t\t\tprops.resolve = (v) => {\n\t\t\t\tprops.isResolving = true;\n\t\t\t\treturn _resolve(v);\n\t\t\t};\n\t\t\tprops.reject = _reject;\n\t\t}).finally(() => {\n\t\t\tprops.promise = void 0;\n\t\t\tconst index = instances.value.indexOf(props);\n\t\t\tif (index !== -1) instances.value.splice(index, 1);\n\t\t});\n\t\treturn props.promise;\n\t}\n\tfunction start(...args) {\n\t\tif (options.singleton && instances.value.length > 0) return instances.value[0].promise;\n\t\treturn create(...args);\n\t}\n\tconst component = defineComponent((_, { slots }) => {\n\t\tconst renderList = () => instances.value.map((props) => {\n\t\t\tvar _slots$default;\n\t\t\treturn h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props));\n\t\t});\n\t\tif (options.transition) return () => h(TransitionGroup, options.transition, renderList);\n\t\treturn renderList;\n\t});\n\tcomponent.start = start;\n\treturn component;\n}\n//#endregion\n//#region createUnrefFn/index.ts\n/**\n* Make a plain function accepting ref and raw values as arguments.\n* Returns the same value the unconverted function returns, with proper typing.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createUnrefFn(fn) {\n\treturn function(...args) {\n\t\treturn fn.apply(this, args.map((i) => toValue(i)));\n\t};\n}\n//#endregion\n//#region _configurable.ts\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//#endregion\n//#region unrefElement/index.ts\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\n//#endregion\n//#region useEventListener/index.ts\nfunction useEventListener(...args) {\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\treturn watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tconst cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));\n\t\tonCleanup(() => {\n\t\t\tcleanups.forEach((fn) => fn());\n\t\t});\n\t}, { flush: \"post\" });\n}\n//#endregion\n//#region onClickOutside/index.ts\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target) => {\n\t\t\tif (typeof target === \"string\") return Array.from(window.document.querySelectorAll(target)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target) {\n\t\tconst vm = toValue(target);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target, event) {\n\t\tconst vm = toValue(target);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tlet activeEl = window.document.activeElement;\n\t\t\t\twhile (activeEl === null || activeEl === void 0 ? void 0 : activeEl.shadowRoot) activeEl = activeEl.shadowRoot.activeElement;\n\t\t\t\tif ((activeEl === null || activeEl === void 0 ? void 0 : activeEl.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n//#endregion\n//#region useMounted/index.ts\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n//#endregion\n//#region useSupported/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n//#endregion\n//#region useMutationObserver/index.ts\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window = defaultWindow, ...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"MutationObserver\" in window);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n//#endregion\n//#region onElementRemoval/index.ts\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window = defaultWindow, document = window === null || window === void 0 ? void 0 : window.document, flush = \"sync\" } = options;\n\tif (!window || !document) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\n//#endregion\n//#region onKeyStroke/index.ts\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Listen to the keydown event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyDown(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keydown\"\n\t});\n}\n/**\n* Listen to the keypress event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyPressed(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keypress\"\n\t});\n}\n/**\n* Listen to the keyup event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyUp(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keyup\"\n\t});\n}\n//#endregion\n//#region onLongPress/index.ts\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n\tvar _options$modifiers10, _options$modifiers11;\n\tconst elementRef = computed(() => unrefElement(target));\n\tlet timeout;\n\tlet posStart;\n\tlet startTimestamp;\n\tlet hasLongPressed = false;\n\tfunction clear() {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = void 0;\n\t\t}\n\t\tposStart = void 0;\n\t\tstartTimestamp = void 0;\n\t\thasLongPressed = false;\n\t}\n\tfunction getDelay(ev) {\n\t\tconst delay = options === null || options === void 0 ? void 0 : options.delay;\n\t\tif (typeof delay === \"function\") return delay(ev);\n\t\treturn delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY;\n\t}\n\tfunction onRelease(ev) {\n\t\tvar _options$modifiers, _options$modifiers2, _options$modifiers3;\n\t\tconst [_startTimestamp, _posStart, _hasLongPressed] = [\n\t\t\tstartTimestamp,\n\t\t\tposStart,\n\t\t\thasLongPressed\n\t\t];\n\t\tclear();\n\t\tif (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return;\n\t\tif ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - _posStart.x;\n\t\tconst dy = ev.y - _posStart.y;\n\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\t\toptions.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed, ev);\n\t}\n\tfunction onDown(ev) {\n\t\tvar _options$modifiers4, _options$modifiers5, _options$modifiers6;\n\t\tif ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return;\n\t\tclear();\n\t\tif (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation();\n\t\tposStart = {\n\t\t\tx: ev.x,\n\t\t\ty: ev.y\n\t\t};\n\t\tstartTimestamp = ev.timeStamp;\n\t\ttimeout = setTimeout(() => {\n\t\t\thasLongPressed = true;\n\t\t\thandler(ev);\n\t\t}, getDelay(ev));\n\t}\n\tfunction onMove(ev) {\n\t\tvar _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre;\n\t\tif ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return;\n\t\tif (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - posStart.x;\n\t\tconst dy = ev.y - posStart.y;\n\t\tif (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear();\n\t}\n\tconst listenerOptions = {\n\t\tcapture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture,\n\t\tonce: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once\n\t};\n\tconst cleanup = [\n\t\tuseEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n\t\tuseEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n\t\tuseEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n\t];\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\treturn stop;\n}\n//#endregion\n//#region onStartTyping/index.ts\nfunction isFocusedElementEditable() {\n\tconst { activeElement, body } = document;\n\tif (!activeElement) return false;\n\tif (activeElement === body) return false;\n\tswitch (activeElement.tagName) {\n\t\tcase \"INPUT\":\n\t\tcase \"TEXTAREA\": return true;\n\t}\n\treturn activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({ keyCode, metaKey, ctrlKey, altKey }) {\n\tif (metaKey || ctrlKey || altKey) return false;\n\tif (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) return true;\n\tif (keyCode >= 65 && keyCode <= 90) return true;\n\treturn false;\n}\n/**\n* Fires when users start typing on non-editable elements.\n*\n* @see https://vueuse.org/onStartTyping\n* @param callback\n* @param options\n*/\nfunction onStartTyping(callback, options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst keydown = (event) => {\n\t\tif (!isFocusedElementEditable() && isTypedCharValid(event)) callback(event);\n\t};\n\tif (document) useEventListener(document, \"keydown\", keydown, { passive: true });\n}\n//#endregion\n//#region templateRef/index.ts\n/**\n* @deprecated Use Vue's built-in `useTemplateRef` instead.\n*\n* Shorthand for binding ref to template element.\n*\n* @see https://vueuse.org/templateRef\n* @param key\n* @param initialValue\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction templateRef(key, initialValue = null) {\n\tconst instance = getCurrentInstance();\n\tlet _trigger = () => {};\n\tconst element = customRef((track, trigger) => {\n\t\t_trigger = trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tvar _instance$proxy$$refs, _instance$proxy;\n\t\t\t\ttrack();\n\t\t\t\treturn (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\ttryOnMounted(_trigger);\n\tonUpdated(_trigger);\n\treturn element;\n}\n//#endregion\n//#region useActiveElement/index.ts\n/**\n* Reactive `document.activeElement`\n*\n* @see https://vueuse.org/useActiveElement\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useActiveElement(options = {}) {\n\tvar _options$document;\n\tconst { window = defaultWindow, deep = true, triggerOnRemoval = false } = options;\n\tconst document = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window === null || window === void 0 ? void 0 : window.document;\n\tconst getDeepActiveElement = () => {\n\t\tlet element = document === null || document === void 0 ? void 0 : document.activeElement;\n\t\tif (deep) {\n\t\t\tvar _element$shadowRoot;\n\t\t\twhile (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;\n\t\t}\n\t\treturn element;\n\t};\n\tconst activeElement = shallowRef();\n\tconst trigger = () => {\n\t\tactiveElement.value = getDeepActiveElement();\n\t};\n\tif (window) {\n\t\tconst listenerOptions = {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t};\n\t\tuseEventListener(window, \"blur\", (event) => {\n\t\t\tif (event.relatedTarget !== null) return;\n\t\t\ttrigger();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window, \"focus\", trigger, listenerOptions);\n\t}\n\tif (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document });\n\ttrigger();\n\treturn activeElement;\n}\n//#endregion\n//#region useRafFn/index.ts\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = null, window = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\tconst limit = toValue(fpsLimit);\n\t\treturn limit ? 1e3 / limit : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp) {\n\t\tif (!isActive.value || !window) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp;\n\t\tconst delta = timestamp - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window) {\n\t\t\twindow.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useAnimate/index.ts\n/**\n* Reactive Web Animations API\n*\n* @see https://vueuse.org/useAnimate\n* @param target\n* @param keyframes\n* @param options\n*/\nfunction useAnimate(target, keyframes, options) {\n\tlet config;\n\tlet animateOptions;\n\tif (isObject(options)) {\n\t\tconfig = options;\n\t\tanimateOptions = objectOmit(options, [\n\t\t\t\"window\",\n\t\t\t\"immediate\",\n\t\t\t\"commitStyles\",\n\t\t\t\"persist\",\n\t\t\t\"onReady\",\n\t\t\t\"onError\"\n\t\t]);\n\t} else {\n\t\tconfig = { duration: options };\n\t\tanimateOptions = options;\n\t}\n\tconst { window = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = config;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n\tconst animate = shallowRef(void 0);\n\tconst store = shallowReactive({\n\t\tstartTime: null,\n\t\tcurrentTime: null,\n\t\ttimeline: null,\n\t\tplaybackRate: _playbackRate,\n\t\tpending: false,\n\t\tplayState: immediate ? \"idle\" : \"paused\",\n\t\treplaceState: \"active\"\n\t});\n\tconst pending = computed(() => store.pending);\n\tconst playState = computed(() => store.playState);\n\tconst replaceState = computed(() => store.replaceState);\n\tconst startTime = computed({\n\t\tget() {\n\t\t\treturn store.startTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.startTime = value;\n\t\t\tif (animate.value) animate.value.startTime = value;\n\t\t}\n\t});\n\tconst currentTime = computed({\n\t\tget() {\n\t\t\treturn store.currentTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.currentTime = value;\n\t\t\tif (animate.value) {\n\t\t\t\tanimate.value.currentTime = value;\n\t\t\t\tsyncResume();\n\t\t\t}\n\t\t}\n\t});\n\tconst timeline = computed({\n\t\tget() {\n\t\t\treturn store.timeline;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.timeline = value;\n\t\t\tif (animate.value) animate.value.timeline = value;\n\t\t}\n\t});\n\tconst playbackRate = computed({\n\t\tget() {\n\t\t\treturn store.playbackRate;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.playbackRate = value;\n\t\t\tif (animate.value) animate.value.playbackRate = value;\n\t\t}\n\t});\n\tconst play = () => {\n\t\tif (animate.value) try {\n\t\t\tanimate.value.play();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t\telse update();\n\t};\n\tconst pause = () => {\n\t\ttry {\n\t\t\tvar _animate$value;\n\t\t\t(_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst reverse = () => {\n\t\tif (!animate.value) update();\n\t\ttry {\n\t\t\tvar _animate$value2;\n\t\t\t(_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\ttry {\n\t\t\tvar _animate$value3;\n\t\t\t(_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst cancel = () => {\n\t\ttry {\n\t\t\tvar _animate$value4;\n\t\t\t(_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\twatch(() => unrefElement(target), (el) => {\n\t\tif (el) update(true);\n\t\telse animate.value = void 0;\n\t});\n\twatch(() => keyframes, (value) => {\n\t\tif (animate.value) {\n\t\t\tupdate();\n\t\t\tconst targetEl = unrefElement(target);\n\t\t\tif (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions);\n\t\t}\n\t}, { deep: true });\n\ttryOnMounted(() => update(true), false);\n\ttryOnScopeDispose(cancel);\n\tfunction update(init) {\n\t\tconst el = unrefElement(target);\n\t\tif (!isSupported.value || !el) return;\n\t\tif (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions);\n\t\tif (persist) animate.value.persist();\n\t\tif (_playbackRate !== 1) animate.value.playbackRate = _playbackRate;\n\t\tif (init && !immediate) animate.value.pause();\n\t\telse syncResume();\n\t\tonReady === null || onReady === void 0 || onReady(animate.value);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(animate, [\n\t\t\"cancel\",\n\t\t\"finish\",\n\t\t\"remove\"\n\t], syncPause, listenerOptions);\n\tuseEventListener(animate, \"finish\", () => {\n\t\tvar _animate$value5;\n\t\tif (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles();\n\t}, listenerOptions);\n\tconst { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n\t\tif (!animate.value) return;\n\t\tstore.pending = animate.value.pending;\n\t\tstore.playState = animate.value.playState;\n\t\tstore.replaceState = animate.value.replaceState;\n\t\tstore.startTime = animate.value.startTime;\n\t\tstore.currentTime = animate.value.currentTime;\n\t\tstore.timeline = animate.value.timeline;\n\t\tstore.playbackRate = animate.value.playbackRate;\n\t}, { immediate: false });\n\tfunction syncResume() {\n\t\tif (isSupported.value) resumeRef();\n\t}\n\tfunction syncPause() {\n\t\tif (isSupported.value && window) window.requestAnimationFrame(pauseRef);\n\t}\n\treturn {\n\t\tisSupported,\n\t\tanimate,\n\t\tplay,\n\t\tpause,\n\t\treverse,\n\t\tfinish,\n\t\tcancel,\n\t\tpending,\n\t\tplayState,\n\t\treplaceState,\n\t\tstartTime,\n\t\tcurrentTime,\n\t\ttimeline,\n\t\tplaybackRate\n\t};\n}\n//#endregion\n//#region useAsyncQueue/index.ts\n/**\n* Asynchronous queue task controller.\n*\n* @see https://vueuse.org/useAsyncQueue\n* @param tasks\n* @param options\n*/\nfunction useAsyncQueue(tasks, options) {\n\tconst { interrupt = true, onError = noop, onFinished = noop, signal } = options || {};\n\tconst promiseState = {\n\t\taborted: \"aborted\",\n\t\tfulfilled: \"fulfilled\",\n\t\tpending: \"pending\",\n\t\trejected: \"rejected\"\n\t};\n\tconst result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({\n\t\tstate: promiseState.pending,\n\t\tdata: null\n\t})));\n\tconst activeIndex = shallowRef(-1);\n\tif (!tasks || tasks.length === 0) {\n\t\tonFinished();\n\t\treturn {\n\t\t\tactiveIndex,\n\t\t\tresult\n\t\t};\n\t}\n\tfunction updateResult(state, res) {\n\t\tactiveIndex.value++;\n\t\tresult[activeIndex.value].data = res;\n\t\tresult[activeIndex.value].state = state;\n\t}\n\ttasks.reduce((prev, curr) => {\n\t\treturn prev.then((prevRes) => {\n\t\t\tvar _result$activeIndex$v;\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, /* @__PURE__ */ new Error(\"aborted\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) {\n\t\t\t\tonFinished();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst done = curr(prevRes).then((currentRes) => {\n\t\t\t\tupdateResult(promiseState.fulfilled, currentRes);\n\t\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\t\treturn currentRes;\n\t\t\t});\n\t\t\tif (!signal) return done;\n\t\t\treturn Promise.race([done, whenAborted(signal)]);\n\t\t}).catch((e) => {\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, e);\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\tupdateResult(promiseState.rejected, e);\n\t\t\tonError();\n\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\treturn e;\n\t\t});\n\t}, Promise.resolve());\n\treturn {\n\t\tactiveIndex,\n\t\tresult\n\t};\n}\nfunction whenAborted(signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst error = /* @__PURE__ */ new Error(\"aborted\");\n\t\tif (signal.aborted) reject(error);\n\t\telse signal.addEventListener(\"abort\", () => reject(error), { once: true });\n\t});\n}\n//#endregion\n//#region useAsyncState/index.ts\n/**\n* Reactive async state. Will not block your setup function and will trigger changes once\n* the promise is ready.\n*\n* @see https://vueuse.org/useAsyncState\n* @param promise         The promise / async function to be resolved\n* @param initialState    The initial state, used until the first evaluation finishes\n* @param options\n*/\nfunction useAsyncState(promise, initialState, options) {\n\tvar _globalThis$reportErr;\n\tconst { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {};\n\tconst state = shallow ? shallowRef(initialState) : ref(initialState);\n\tconst isReady = shallowRef(false);\n\tconst isLoading = shallowRef(false);\n\tconst error = shallowRef(void 0);\n\tlet executionsCount = 0;\n\tasync function execute(delay = 0, ...args) {\n\t\tconst executionId = executionsCount += 1;\n\t\tif (resetOnExecute) state.value = toValue(initialState);\n\t\terror.value = void 0;\n\t\tisReady.value = false;\n\t\tisLoading.value = true;\n\t\tif (delay > 0) await promiseTimeout(delay);\n\t\tconst _promise = typeof promise === \"function\" ? promise(...args) : promise;\n\t\ttry {\n\t\t\tconst data = await _promise;\n\t\t\tif (executionId === executionsCount) {\n\t\t\t\tstate.value = data;\n\t\t\t\tisReady.value = true;\n\t\t\t}\n\t\t\tonSuccess(data);\n\t\t\treturn data;\n\t\t} catch (e) {\n\t\t\tif (executionId === executionsCount) error.value = e;\n\t\t\tonError(e);\n\t\t\tif (throwError) throw e;\n\t\t} finally {\n\t\t\tif (executionId === executionsCount) isLoading.value = false;\n\t\t}\n\t}\n\tif (immediate) execute(delay);\n\tconst shell = {\n\t\tstate,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\texecute,\n\t\texecuteImmediate: (...args) => execute(0, ...args)\n\t};\n\tfunction waitUntilIsLoaded() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilIsLoaded().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\n//#endregion\n//#region useBase64/serialization.ts\nconst defaults = {\n\tarray: (v) => JSON.stringify(v),\n\tobject: (v) => JSON.stringify(v),\n\tset: (v) => JSON.stringify(Array.from(v)),\n\tmap: (v) => JSON.stringify(Object.fromEntries(v)),\n\tnull: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n\tif (!target) return defaults.null;\n\tif (target instanceof Map) return defaults.map;\n\telse if (target instanceof Set) return defaults.set;\n\telse if (Array.isArray(target)) return defaults.array;\n\telse return defaults.object;\n}\n//#endregion\n//#region useBase64/index.ts\nfunction useBase64(target, options) {\n\tconst base64 = shallowRef(\"\");\n\tconst promise = shallowRef();\n\tfunction execute() {\n\t\tif (!isClient) return;\n\t\tpromise.value = new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst _target = toValue(target);\n\t\t\t\tif (_target == null) resolve(\"\");\n\t\t\t\telse if (typeof _target === \"string\") resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n\t\t\t\telse if (_target instanceof Blob) resolve(blobToBase64(_target));\n\t\t\t\telse if (_target instanceof ArrayBuffer) resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n\t\t\t\telse if (_target instanceof HTMLCanvasElement) resolve(_target.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\telse if (_target instanceof HTMLImageElement) {\n\t\t\t\t\tconst img = _target.cloneNode(false);\n\t\t\t\t\timg.crossOrigin = \"Anonymous\";\n\t\t\t\t\timgLoaded(img).then(() => {\n\t\t\t\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\tctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\tresolve(canvas.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\t\t}).catch(reject);\n\t\t\t\t} else if (typeof _target === \"object\") {\n\t\t\t\t\tconst serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_target);\n\t\t\t\t\treturn resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n\t\t\t\t} else reject(/* @__PURE__ */ new Error(\"target is unsupported types\"));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t\tpromise.value.then((res) => {\n\t\t\tbase64.value = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n\t\t});\n\t\treturn promise.value;\n\t}\n\tif (isRef(target) || typeof target === \"function\") watch(target, execute, { immediate: true });\n\telse execute();\n\treturn {\n\t\tbase64,\n\t\tpromise,\n\t\texecute\n\t};\n}\nfunction imgLoaded(img) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!img.complete) {\n\t\t\timg.onload = () => {\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\timg.onerror = reject;\n\t\t} else resolve();\n\t});\n}\nfunction blobToBase64(blob) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst fr = new FileReader();\n\t\tfr.onload = (e) => {\n\t\t\tresolve(e.target.result);\n\t\t};\n\t\tfr.onerror = reject;\n\t\tfr.readAsDataURL(blob);\n\t});\n}\n//#endregion\n//#region useBattery/index.ts\n/**\n* Reactive Battery Status API.\n*\n* @see https://vueuse.org/useBattery\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBattery(options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst events = [\n\t\t\"chargingchange\",\n\t\t\"chargingtimechange\",\n\t\t\"dischargingtimechange\",\n\t\t\"levelchange\"\n\t];\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n\tconst charging = shallowRef(false);\n\tconst chargingTime = shallowRef(0);\n\tconst dischargingTime = shallowRef(0);\n\tconst level = shallowRef(1);\n\tlet battery;\n\tfunction updateBatteryInfo() {\n\t\tcharging.value = this.charging;\n\t\tchargingTime.value = this.chargingTime || 0;\n\t\tdischargingTime.value = this.dischargingTime || 0;\n\t\tlevel.value = this.level;\n\t}\n\tif (isSupported.value) navigator.getBattery().then((_battery) => {\n\t\tbattery = _battery;\n\t\tupdateBatteryInfo.call(battery);\n\t\tuseEventListener(battery, events, updateBatteryInfo, { passive: true });\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcharging,\n\t\tchargingTime,\n\t\tdischargingTime,\n\t\tlevel\n\t};\n}\n//#endregion\n//#region useBluetooth/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useBluetooth(options) {\n\tlet { acceptAllDevices = false } = options || {};\n\tconst { filters = void 0, optionalServices = void 0, navigator = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"bluetooth\" in navigator);\n\tconst device = shallowRef();\n\tconst error = shallowRef(null);\n\twatch(device, () => {\n\t\tconnectToBluetoothGATTServer();\n\t});\n\tasync function requestDevice() {\n\t\tif (!isSupported.value) return;\n\t\terror.value = null;\n\t\tif (filters && filters.length > 0) acceptAllDevices = false;\n\t\ttry {\n\t\t\tdevice.value = await (navigator === null || navigator === void 0 ? void 0 : navigator.bluetooth.requestDevice({\n\t\t\t\tacceptAllDevices,\n\t\t\t\tfilters,\n\t\t\t\toptionalServices\n\t\t\t}));\n\t\t} catch (err) {\n\t\t\terror.value = err;\n\t\t}\n\t}\n\tconst server = shallowRef();\n\tconst isConnected = shallowRef(false);\n\tfunction reset() {\n\t\tisConnected.value = false;\n\t\tdevice.value = void 0;\n\t\tserver.value = void 0;\n\t}\n\tasync function connectToBluetoothGATTServer() {\n\t\terror.value = null;\n\t\tif (device.value && device.value.gatt) {\n\t\t\tuseEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n\t\t\ttry {\n\t\t\t\tserver.value = await device.value.gatt.connect();\n\t\t\t\tisConnected.value = server.value.connected;\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t}\n\t}\n\ttryOnMounted(() => {\n\t\tvar _device$value$gatt;\n\t\tif (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect();\n\t});\n\ttryOnScopeDispose(() => {\n\t\tvar _device$value$gatt2;\n\t\tif (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisConnected: shallowReadonly(isConnected),\n\t\tdevice,\n\t\trequestDevice,\n\t\tserver,\n\t\terror\n\t};\n}\n//#endregion\n//#region useSSRWidth/index.ts\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n\tif (app !== void 0) app.provide(ssrWidthSymbol, width);\n\telse provideLocal(ssrWidthSymbol, width);\n}\n//#endregion\n//#region useMediaQuery/index.ts\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tmatches.value = toValue(query).split(\",\").some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n//#endregion\n//#region useBreakpoints/breakpoints.ts\n/**\n* Breakpoints from Tailwind V2\n*\n* @see https://tailwindcss.com/docs/breakpoints\n*/\nconst breakpointsTailwind = {\n\t\"sm\": 640,\n\t\"md\": 768,\n\t\"lg\": 1024,\n\t\"xl\": 1280,\n\t\"2xl\": 1536\n};\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nconst breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Breakpoints from Vuetify V2\n*\n* @see https://v2.vuetifyjs.com/en/features/breakpoints/\n*/\nconst breakpointsVuetifyV2 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1264,\n\txl: 1904\n};\n/**\n* Breakpoints from Vuetify V3\n*\n* @see https://vuetifyjs.com/en/styles/float/#overview\n*/\nconst breakpointsVuetifyV3 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1280,\n\txl: 1920,\n\txxl: 2560\n};\n/**\n* Alias to `breakpointsVuetifyV2`\n*\n* @deprecated explictly use `breakpointsVuetifyV2` or `breakpointsVuetifyV3` instead\n*/\nconst breakpointsVuetify = breakpointsVuetifyV2;\n/**\n* Breakpoints from Ant Design\n*\n* @see https://ant.design/components/layout/#breakpoint-width\n*/\nconst breakpointsAntDesign = {\n\txs: 480,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1600\n};\n/**\n* Breakpoints from Quasar V2\n*\n* @see https://quasar.dev/style/breakpoints\n*/\nconst breakpointsQuasar = {\n\txs: 0,\n\tsm: 600,\n\tmd: 1024,\n\tlg: 1440,\n\txl: 1920\n};\n/**\n* Sematic Breakpoints\n*/\nconst breakpointsSematic = {\n\tmobileS: 320,\n\tmobileM: 375,\n\tmobileL: 425,\n\ttablet: 768,\n\tlaptop: 1024,\n\tlaptopL: 1440,\n\tdesktop4K: 2560\n};\n/**\n* Breakpoints from Master CSS\n*\n* @see https://docs.master.co/css/breakpoints\n*/\nconst breakpointsMasterCss = {\n\t\"3xs\": 360,\n\t\"2xs\": 480,\n\t\"xs\": 600,\n\t\"sm\": 768,\n\t\"md\": 1024,\n\t\"lg\": 1280,\n\t\"xl\": 1440,\n\t\"2xl\": 1600,\n\t\"3xl\": 1920,\n\t\"4xl\": 2560\n};\n/**\n* Breakpoints from PrimeFlex\n*\n* @see https://primeflex.org/installation\n*/\nconst breakpointsPrimeFlex = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200\n};\n/**\n* Breakpoints from ElementUI/ElementPlus\n*\n* @see https://element.eleme.io/#/en-US/component/layout\n* @see https://element-plus.org/en-US/component/layout.html\n*/\nconst breakpointsElement = {\n\txs: 0,\n\tsm: 768,\n\tmd: 992,\n\tlg: 1200,\n\txl: 1920\n};\n//#endregion\n//#region useBreakpoints/index.ts\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window) return false;\n\t\treturn window.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue(a)) && match(\"max\", getValue(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\n//#endregion\n//#region useBroadcastChannel/index.ts\n/**\n* Reactive BroadcastChannel\n*\n* @see https://vueuse.org/useBroadcastChannel\n* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n* @param options\n*\n*/\nfunction useBroadcastChannel(options) {\n\tconst { name, window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"BroadcastChannel\" in window);\n\tconst isClosed = shallowRef(false);\n\tconst channel = shallowRef();\n\tconst data = shallowRef();\n\tconst error = shallowRef(null);\n\tconst post = (data) => {\n\t\tif (channel.value) channel.value.postMessage(data);\n\t};\n\tconst close = () => {\n\t\tif (channel.value) channel.value.close();\n\t\tisClosed.value = true;\n\t};\n\tif (isSupported.value) tryOnMounted(() => {\n\t\terror.value = null;\n\t\tchannel.value = new BroadcastChannel(name);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(channel, \"message\", (e) => {\n\t\t\tdata.value = e.data;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"messageerror\", (e) => {\n\t\t\terror.value = e;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"close\", () => {\n\t\t\tisClosed.value = true;\n\t\t}, listenerOptions);\n\t});\n\ttryOnScopeDispose(() => {\n\t\tclose();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tchannel,\n\t\tdata,\n\t\tpost,\n\t\tclose,\n\t\terror,\n\t\tisClosed\n\t};\n}\n//#endregion\n//#region useBrowserLocation/index.ts\nconst WRITABLE_PROPERTIES = [\n\t\"hash\",\n\t\"host\",\n\t\"hostname\",\n\t\"href\",\n\t\"pathname\",\n\t\"port\",\n\t\"protocol\",\n\t\"search\"\n];\n/**\n* Reactive browser location.\n*\n* @see https://vueuse.org/useBrowserLocation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBrowserLocation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()]));\n\tfor (const [key, ref] of objectEntries(refs)) watch(ref, (value) => {\n\t\tif (!(window === null || window === void 0 ? void 0 : window.location) || window.location[key] === value) return;\n\t\twindow.location[key] = value;\n\t});\n\tconst buildState = (trigger) => {\n\t\tvar _window$location;\n\t\tconst { state, length } = (window === null || window === void 0 ? void 0 : window.history) || {};\n\t\tconst { origin } = (window === null || window === void 0 ? void 0 : window.location) || {};\n\t\tfor (const key of WRITABLE_PROPERTIES) refs[key].value = window === null || window === void 0 || (_window$location = window.location) === null || _window$location === void 0 ? void 0 : _window$location[key];\n\t\treturn reactive({\n\t\t\ttrigger,\n\t\t\tstate,\n\t\t\tlength,\n\t\t\torigin,\n\t\t\t...refs\n\t\t});\n\t};\n\tconst state = ref(buildState(\"load\"));\n\tif (window) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n\t\tuseEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n\t}\n\treturn state;\n}\n//#endregion\n//#region useCached/index.ts\nfunction useCached(refValue, comparator = (newSourceValue, cachedValue) => newSourceValue === cachedValue, options) {\n\tconst { deepRefs = true, ...watchOptions } = options || {};\n\tconst cachedValue = createRef(refValue.value, deepRefs);\n\twatch(() => refValue.value, (value) => {\n\t\tif (!comparator(value, cachedValue.value)) cachedValue.value = value;\n\t}, watchOptions);\n\treturn cachedValue;\n}\n//#endregion\n//#region usePermission/index.ts\n/**\n* Reactive Permissions API.\n*\n* @see https://vueuse.org/usePermission\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePermission(permissionDesc, options = {}) {\n\tconst { controls = false, navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"permissions\" in navigator);\n\tconst permissionStatus = shallowRef();\n\tconst desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n\tconst state = shallowRef();\n\tconst update = () => {\n\t\tvar _permissionStatus$val, _permissionStatus$val2;\n\t\tstate.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : \"prompt\";\n\t};\n\tuseEventListener(permissionStatus, \"change\", update, { passive: true });\n\tconst query = createSingletonPromise(async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionStatus.value) try {\n\t\t\tpermissionStatus.value = await navigator.permissions.query(desc);\n\t\t} catch (_unused) {\n\t\t\tpermissionStatus.value = void 0;\n\t\t} finally {\n\t\t\tupdate();\n\t\t}\n\t\tif (controls) return toRaw(permissionStatus.value);\n\t});\n\tquery();\n\tif (controls) return {\n\t\tstate,\n\t\tisSupported,\n\t\tquery\n\t};\n\telse return state;\n}\n//#endregion\n//#region useClipboard/index.ts\nfunction useClipboard(options = {}) {\n\tconst { navigator = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;\n\tconst isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator && \"clipboard\" in navigator);\n\tconst permissionRead = usePermission(\"clipboard-read\");\n\tconst permissionWrite = usePermission(\"clipboard-write\");\n\tconst isSupported = computed(() => isClipboardApiSupported.value || legacy);\n\tconst text = shallowRef(\"\");\n\tconst copied = shallowRef(false);\n\tconst copyPending = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tlet lastLegacyId = 0;\n\tasync function updateText() {\n\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n\t\tif (!useLegacy) try {\n\t\t\ttext.value = await navigator.clipboard.readText();\n\t\t} catch (_unused) {\n\t\t\tuseLegacy = true;\n\t\t}\n\t\tif (useLegacy) text.value = legacyRead();\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n\tasync function copy(value) {\n\t\tconst resolvedValue = value !== null && value !== void 0 ? value : toValue(source);\n\t\tif (isSupported.value && resolvedValue != null) {\n\t\t\tcopyPending.value = true;\n\t\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n\t\t\tif (!useLegacy) try {\n\t\t\t\tconst clipboardItem = createClipboardItem(resolvedValue);\n\t\t\t\tawait navigator.clipboard.write([clipboardItem]);\n\t\t\t} catch (_unused2) {\n\t\t\t\tuseLegacy = true;\n\t\t\t}\n\t\t\tif (useLegacy) if (typeof resolvedValue === \"string\") {\n\t\t\t\ttext.value = resolvedValue;\n\t\t\t\tlegacyCopy(resolvedValue);\n\t\t\t} else {\n\t\t\t\tconst currentId = ++lastLegacyId;\n\t\t\t\tconst resolvedText = await resolvedValue();\n\t\t\t\tif (resolvedText != null && currentId === lastLegacyId) {\n\t\t\t\t\ttext.value = resolvedText;\n\t\t\t\t\tlegacyCopy(resolvedText);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t\tcopyPending.value = false;\n\t\t}\n\t}\n\tfunction createClipboardItem(value) {\n\t\tif (typeof value === \"string\") {\n\t\t\ttext.value = value;\n\t\t\treturn new ClipboardItem({ \"text/plain\": value });\n\t\t} else return new ClipboardItem({ \"text/plain\": value().then((resolvedText = \"\") => {\n\t\t\ttext.value = resolvedText;\n\t\t\treturn new Blob([resolvedText], { type: \"text/plain\" });\n\t\t}) });\n\t}\n\tfunction legacyCopy(value) {\n\t\tconst ta = document.createElement(\"textarea\");\n\t\tta.value = value;\n\t\tta.style.position = \"absolute\";\n\t\tta.style.opacity = \"0\";\n\t\tta.setAttribute(\"readonly\", \"\");\n\t\tdocument.body.appendChild(ta);\n\t\tta.select();\n\t\tdocument.execCommand(\"copy\");\n\t\tta.remove();\n\t}\n\tfunction legacyRead() {\n\t\tvar _document$getSelectio, _document, _document$getSelectio2;\n\t\treturn (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : \"\";\n\t}\n\tfunction isAllowed(status) {\n\t\treturn status === \"granted\" || status === \"prompt\";\n\t}\n\treturn {\n\t\tcopyPending: shallowReadonly(copyPending),\n\t\tisSupported,\n\t\ttext: shallowReadonly(text),\n\t\tcopied: shallowReadonly(copied),\n\t\tcopy\n\t};\n}\n//#endregion\n//#region useClipboardItems/index.ts\nfunction useClipboardItems(options = {}) {\n\tconst { navigator = defaultNavigator, read = false, source, copiedDuring = 1500 } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"clipboard\" in navigator);\n\tconst content = shallowRef([]);\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tfunction updateContent() {\n\t\tif (isSupported.value) navigator.clipboard.read().then((items) => {\n\t\t\tcontent.value = items;\n\t\t});\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tawait navigator.clipboard.write(value);\n\t\t\tcontent.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\treturn {\n\t\tisSupported,\n\t\tcontent: shallowReadonly(content),\n\t\tcopied: shallowReadonly(copied),\n\t\tcopy,\n\t\tread: updateContent\n\t};\n}\n//#endregion\n//#region useCloned/index.ts\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n\tconst cloned = ref({});\n\tconst isModified = shallowRef(false);\n\tlet _lastSync = false;\n\tconst { manual, clone = cloneFnJSON, deep = true, immediate = true } = options;\n\twatch(cloned, () => {\n\t\tif (_lastSync) {\n\t\t\t_lastSync = false;\n\t\t\treturn;\n\t\t}\n\t\tisModified.value = true;\n\t}, {\n\t\tdeep: true,\n\t\tflush: \"sync\"\n\t});\n\tfunction sync() {\n\t\t_lastSync = true;\n\t\tisModified.value = false;\n\t\tcloned.value = clone(toValue(source));\n\t}\n\tif (!manual && (isRef(source) || typeof source === \"function\")) watch(source, sync, {\n\t\t...options,\n\t\tdeep,\n\t\timmediate\n\t});\n\telse sync();\n\treturn {\n\t\tcloned,\n\t\tisModified,\n\t\tsync\n\t};\n}\n//#endregion\n//#region ssr-handlers.ts\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\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n\thandlers[key] = fn;\n}\n//#endregion\n//#region usePreferredDark/index.ts\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n//#endregion\n//#region useStorage/guess.ts\nfunction guessSerializerType(rawInit) {\n\treturn 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//#endregion\n//#region useStorage/index.ts\nconst StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nconst customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\n//#endregion\n//#region useColorMode/index.ts\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector, attribute, value) => {\n\t\tconst el = typeof selector === \"string\" ? window === null || window === void 0 ? void 0 : window.document.querySelector(selector) : unrefElement(selector);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n//#endregion\n//#region useConfirmDialog/index.ts\n/**\n* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.\n*\n* @see https://vueuse.org/useConfirmDialog/\n* @param revealed `boolean` `ref` that handles a modal window\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n\tconst confirmHook = createEventHook();\n\tconst cancelHook = createEventHook();\n\tconst revealHook = createEventHook();\n\tlet _resolve = noop;\n\tconst reveal = (data) => {\n\t\trevealHook.trigger(data);\n\t\trevealed.value = true;\n\t\treturn new Promise((resolve) => {\n\t\t\t_resolve = resolve;\n\t\t});\n\t};\n\tconst confirm = (data) => {\n\t\trevealed.value = false;\n\t\tconfirmHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: false\n\t\t});\n\t};\n\tconst cancel = (data) => {\n\t\trevealed.value = false;\n\t\tcancelHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: true\n\t\t});\n\t};\n\treturn {\n\t\tisRevealed: computed(() => revealed.value),\n\t\treveal,\n\t\tconfirm,\n\t\tcancel,\n\t\tonReveal: revealHook.on,\n\t\tonConfirm: confirmHook.on,\n\t\tonCancel: cancelHook.on\n\t};\n}\n//#endregion\n//#region useCountdown/index.ts\nfunction getDefaultScheduler$8(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = 1e3, immediate = false } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn (cb) => useIntervalFn(cb, 1e3, { immediate: false });\n}\n/**\n* Reactive countdown timer in seconds.\n*\n* @param initialCountdown\n* @param options\n*\n* @see https://vueuse.org/useCountdown\n*/\nfunction useCountdown(initialCountdown, options = {}) {\n\tconst remaining = shallowRef(toValue(initialCountdown));\n\tconst { scheduler = getDefaultScheduler$8(options), onTick, onComplete } = options;\n\tconst controls = scheduler(() => {\n\t\tconst value = remaining.value - 1;\n\t\tremaining.value = value < 0 ? 0 : value;\n\t\tonTick === null || onTick === void 0 || onTick();\n\t\tif (remaining.value <= 0) {\n\t\t\tcontrols.pause();\n\t\t\tonComplete === null || onComplete === void 0 || onComplete();\n\t\t}\n\t});\n\tconst reset = (countdown) => {\n\t\tvar _toValue;\n\t\tremaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown);\n\t};\n\tconst stop = () => {\n\t\tcontrols.pause();\n\t\treset();\n\t};\n\tconst resume = () => {\n\t\tif (!controls.isActive.value) {\n\t\t\tif (remaining.value > 0) controls.resume();\n\t\t}\n\t};\n\tconst start = (countdown) => {\n\t\treset(countdown);\n\t\tcontrols.resume();\n\t};\n\treturn {\n\t\tremaining,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tpause: controls.pause,\n\t\tresume,\n\t\tisActive: controls.isActive\n\t};\n}\n//#endregion\n//#region useCssSupports/index.ts\nfunction useCssSupports(...args) {\n\tlet options = {};\n\tif (typeof toValue(args.at(-1)) === \"object\") options = args.pop();\n\tconst [prop, value] = args;\n\tconst { window = defaultWindow, ssrValue = false } = options;\n\tconst isMounted = useMounted();\n\treturn { isSupported: computed(() => {\n\t\tif (!isClient || !isMounted.value) return ssrValue;\n\t\treturn args.length === 2 ? window === null || window === void 0 ? void 0 : window.CSS.supports(toValue(prop), toValue(value)) : window === null || window === void 0 ? void 0 : window.CSS.supports(toValue(prop));\n\t}) };\n}\n//#endregion\n//#region useCssVar/index.ts\n/**\n* Manipulate CSS variables.\n*\n* @see https://vueuse.org/useCssVar\n* @param prop\n* @param target\n* @param options\n*/\nfunction useCssVar(prop, target, options = {}) {\n\tconst { window = defaultWindow, initialValue, observe = false } = options;\n\tconst variable = shallowRef(initialValue);\n\tconst elRef = computed(() => {\n\t\tvar _window$document;\n\t\treturn unrefElement(target) || (window === null || window === void 0 || (_window$document = window.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);\n\t});\n\tfunction updateCssVar() {\n\t\tconst key = toValue(prop);\n\t\tconst el = toValue(elRef);\n\t\tif (el && window && key) {\n\t\t\tvar _window$getComputedSt;\n\t\t\tvariable.value = ((_window$getComputedSt = window.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim()) || variable.value || initialValue;\n\t\t}\n\t}\n\tif (observe) useMutationObserver(elRef, updateCssVar, {\n\t\tattributeFilter: [\"style\", \"class\"],\n\t\twindow\n\t});\n\twatch([elRef, () => toValue(prop)], (_, old) => {\n\t\tif (old[0] && old[1]) old[0].style.removeProperty(old[1]);\n\t\tupdateCssVar();\n\t}, { immediate: true });\n\twatch([variable, elRef], ([val, el]) => {\n\t\tconst raw_prop = toValue(prop);\n\t\tif ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);\n\t\telse el.style.setProperty(raw_prop, val);\n\t}, { immediate: true });\n\treturn variable;\n}\n//#endregion\n//#region useCurrentElement/index.ts\nfunction useCurrentElement(rootComponent) {\n\tconst vm = getCurrentInstance();\n\tconst currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el);\n\tonUpdated(currentElement.trigger);\n\tonMounted(currentElement.trigger);\n\treturn currentElement;\n}\n//#endregion\n//#region useCycleList/index.ts\n/**\n* Cycle through a list of items\n*\n* @see https://vueuse.org/useCycleList\n*/\nfunction useCycleList(list, options) {\n\tconst state = shallowRef(getInitialValue());\n\tconst listRef = toRef(list);\n\tconst index = computed({\n\t\tget() {\n\t\t\tvar _options$fallbackInde;\n\t\t\tconst targetList = listRef.value;\n\t\t\tlet index = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n\t\t\tif (index < 0) index = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0;\n\t\t\treturn index;\n\t\t},\n\t\tset(v) {\n\t\t\tset(v);\n\t\t}\n\t});\n\tfunction set(i) {\n\t\tconst targetList = listRef.value;\n\t\tconst length = targetList.length;\n\t\tconst value = targetList[(i % length + length) % length];\n\t\tstate.value = value;\n\t\treturn value;\n\t}\n\tfunction shift(delta = 1) {\n\t\treturn set(index.value + delta);\n\t}\n\tfunction next(n = 1) {\n\t\treturn shift(n);\n\t}\n\tfunction prev(n = 1) {\n\t\treturn shift(-n);\n\t}\n\tfunction getInitialValue() {\n\t\tvar _toValue, _options$initialValue;\n\t\treturn (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0;\n\t}\n\twatch(listRef, () => set(index.value));\n\treturn {\n\t\tstate,\n\t\tindex,\n\t\tnext,\n\t\tprev,\n\t\tgo: set\n\t};\n}\n//#endregion\n//#region useDark/index.ts\n/**\n* Reactive dark mode with auto data persistence.\n*\n* @see https://vueuse.org/useDark\n* @param options\n*/\nfunction useDark(options = {}) {\n\tconst { valueDark = \"dark\", valueLight = \"\" } = options;\n\tconst mode = useColorMode({\n\t\t...options,\n\t\tonChanged: (mode, defaultHandler) => {\n\t\t\tvar _options$onChanged;\n\t\t\tif (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode === \"dark\", defaultHandler, mode);\n\t\t\telse defaultHandler(mode);\n\t\t},\n\t\tmodes: {\n\t\t\tdark: valueDark,\n\t\t\tlight: valueLight\n\t\t}\n\t});\n\tconst system = computed(() => mode.system.value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn mode.value === \"dark\";\n\t\t},\n\t\tset(v) {\n\t\t\tconst modeVal = v ? \"dark\" : \"light\";\n\t\t\tif (system.value === modeVal) mode.value = \"auto\";\n\t\t\telse mode.value = modeVal;\n\t\t}\n\t});\n}\n//#endregion\n//#region useManualRefHistory/index.ts\nfunction fnBypass(v) {\n\treturn v;\n}\nfunction fnSetSource(source, value) {\n\treturn source.value = value;\n}\nfunction defaultDump(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useManualRefHistory\n* @param source\n* @param options\n*/\nfunction useManualRefHistory(source, options = {}) {\n\tconst { clone = false, dump = defaultDump(clone), parse = defaultParse(clone), setSource = fnSetSource } = options;\n\tfunction _createHistoryRecord() {\n\t\treturn markRaw({\n\t\t\tsnapshot: dump(source.value),\n\t\t\ttimestamp: timestamp()\n\t\t});\n\t}\n\tconst last = ref(_createHistoryRecord());\n\tconst undoStack = ref([]);\n\tconst redoStack = ref([]);\n\tconst _setSource = (record) => {\n\t\tsetSource(source, parse(record.snapshot));\n\t\tlast.value = record;\n\t};\n\tconst commit = () => {\n\t\tundoStack.value.unshift(last.value);\n\t\tlast.value = _createHistoryRecord();\n\t\tif (options.capacity && undoStack.value.length > options.capacity) undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n\t\tif (redoStack.value.length) redoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst clear = () => {\n\t\tundoStack.value.splice(0, undoStack.value.length);\n\t\tredoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst undo = () => {\n\t\tconst state = undoStack.value.shift();\n\t\tif (state) {\n\t\t\tredoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst redo = () => {\n\t\tconst state = redoStack.value.shift();\n\t\tif (state) {\n\t\t\tundoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst reset = () => {\n\t\t_setSource(last.value);\n\t};\n\treturn {\n\t\tsource,\n\t\tundoStack,\n\t\tredoStack,\n\t\tlast,\n\t\thistory: computed(() => [last.value, ...undoStack.value]),\n\t\tcanUndo: computed(() => undoStack.value.length > 0),\n\t\tcanRedo: computed(() => redoStack.value.length > 0),\n\t\tclear,\n\t\tcommit,\n\t\treset,\n\t\tundo,\n\t\tredo\n\t};\n}\n//#endregion\n//#region useRefHistory/index.ts\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useRefHistory\n* @param source\n* @param options\n*/\nfunction useRefHistory(source, options = {}) {\n\tconst { deep = false, flush = \"pre\", eventFilter, shouldCommit = () => true } = options;\n\tconst { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter);\n\tlet lastRawValue = source.value;\n\tconst { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, {\n\t\tdeep,\n\t\tflush,\n\t\teventFilter: composedFilter\n\t});\n\tfunction setSource(source, value) {\n\t\tignorePrevAsyncUpdates();\n\t\tignoreUpdates(() => {\n\t\t\tsource.value = value;\n\t\t\tlastRawValue = value;\n\t\t});\n\t}\n\tconst manualHistory = useManualRefHistory(source, {\n\t\t...options,\n\t\tclone: options.clone || deep,\n\t\tsetSource\n\t});\n\tconst { clear, commit: manualCommit } = manualHistory;\n\tfunction commit() {\n\t\tignorePrevAsyncUpdates();\n\t\tif (!shouldCommit(lastRawValue, source.value)) return;\n\t\tlastRawValue = source.value;\n\t\tmanualCommit();\n\t}\n\tfunction resume(commitNow) {\n\t\tresumeTracking();\n\t\tif (commitNow) commit();\n\t}\n\tfunction batch(fn) {\n\t\tlet canceled = false;\n\t\tconst cancel = () => canceled = true;\n\t\tignoreUpdates(() => {\n\t\t\tfn(cancel);\n\t\t});\n\t\tif (!canceled) commit();\n\t}\n\tfunction dispose() {\n\t\tstop();\n\t\tclear();\n\t}\n\treturn {\n\t\t...manualHistory,\n\t\tisTracking,\n\t\tpause,\n\t\tresume,\n\t\tcommit,\n\t\tbatch,\n\t\tdispose\n\t};\n}\n//#endregion\n//#region useDebouncedRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.\n*\n* @see https://vueuse.org/useDebouncedRefHistory\n* @param source\n* @param options\n*/\nfunction useDebouncedRefHistory(source, options = {}) {\n\tconst filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n//#endregion\n//#region useDeviceMotion/index.ts\n/**\n* Reactive DeviceMotionEvent.\n*\n* @see https://vueuse.org/useDeviceMotion\n* @param options\n*/\nfunction useDeviceMotion(options = {}) {\n\tconst { window = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n\tconst requirePermissions = /* @__PURE__ */ useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n\tconst permissionGranted = shallowRef(false);\n\tconst acceleration = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tconst rotationRate = ref({\n\t\talpha: null,\n\t\tbeta: null,\n\t\tgamma: null\n\t});\n\tconst interval = shallowRef(0);\n\tconst accelerationIncludingGravity = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tfunction init() {\n\t\tif (window) useEventListener(window, \"devicemotion\", createFilterWrapper(eventFilter, (event) => {\n\t\t\tvar _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3;\n\t\t\tacceleration.value = {\n\t\t\t\tx: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null,\n\t\t\t\ty: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null,\n\t\t\t\tz: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null\n\t\t\t};\n\t\t\taccelerationIncludingGravity.value = {\n\t\t\t\tx: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null,\n\t\t\t\ty: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null,\n\t\t\t\tz: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null\n\t\t\t};\n\t\t\trotationRate.value = {\n\t\t\t\talpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null,\n\t\t\t\tbeta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null,\n\t\t\t\tgamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null\n\t\t\t};\n\t\t\tinterval.value = event.interval;\n\t\t}), { passive: true });\n\t}\n\tconst ensurePermissions = async () => {\n\t\tif (!requirePermissions.value) permissionGranted.value = true;\n\t\tif (permissionGranted.value) return;\n\t\tif (requirePermissions.value) {\n\t\t\tconst requestPermission = DeviceMotionEvent.requestPermission;\n\t\t\ttry {\n\t\t\t\tif (await requestPermission() === \"granted\") {\n\t\t\t\t\tpermissionGranted.value = true;\n\t\t\t\t\tinit();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\t};\n\tif (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init());\n\telse init();\n\treturn {\n\t\tacceleration,\n\t\taccelerationIncludingGravity,\n\t\trotationRate,\n\t\tinterval,\n\t\tisSupported,\n\t\trequirePermissions,\n\t\tensurePermissions,\n\t\tpermissionGranted\n\t};\n}\n//#endregion\n//#region useDeviceOrientation/index.ts\n/**\n* Reactive DeviceOrientationEvent.\n*\n* @see https://vueuse.org/useDeviceOrientation\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDeviceOrientation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"DeviceOrientationEvent\" in window);\n\tconst isAbsolute = shallowRef(false);\n\tconst alpha = shallowRef(null);\n\tconst beta = shallowRef(null);\n\tconst gamma = shallowRef(null);\n\tif (window && isSupported.value) useEventListener(window, \"deviceorientation\", (event) => {\n\t\tisAbsolute.value = event.absolute;\n\t\talpha.value = event.alpha;\n\t\tbeta.value = event.beta;\n\t\tgamma.value = event.gamma;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tisAbsolute,\n\t\talpha,\n\t\tbeta,\n\t\tgamma\n\t};\n}\n//#endregion\n//#region useDevicePixelRatio/index.ts\n/**\n* Reactively track `window.devicePixelRatio`.\n*\n* @see https://vueuse.org/useDevicePixelRatio\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDevicePixelRatio(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst pixelRatio = shallowRef(1);\n\tconst query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n\tlet stop = noop;\n\tif (window) stop = watchImmediate(query, () => pixelRatio.value = window.devicePixelRatio);\n\treturn {\n\t\tpixelRatio: shallowReadonly(pixelRatio),\n\t\tstop\n\t};\n}\n//#endregion\n//#region useDevicesList/index.ts\n/**\n* Reactive `enumerateDevices` listing available input/output devices\n*\n* @see https://vueuse.org/useDevicesList\n* @param options\n*/\nfunction useDevicesList(options = {}) {\n\tconst { navigator = defaultNavigator, requestPermissions = false, constraints = {\n\t\taudio: true,\n\t\tvideo: true\n\t}, onUpdated } = options;\n\tconst devices = shallowRef([]);\n\tconst videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n\tconst audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n\tconst audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n\tconst permissionGranted = shallowRef(false);\n\tlet stream;\n\tasync function update() {\n\t\tif (!isSupported.value) return;\n\t\tdevices.value = await navigator.mediaDevices.enumerateDevices();\n\t\tonUpdated === null || onUpdated === void 0 || onUpdated(devices.value);\n\t\tif (stream) {\n\t\t\tstream.getTracks().forEach((t) => t.stop());\n\t\t\tstream = null;\n\t\t}\n\t}\n\tasync function ensurePermissions() {\n\t\tconst deviceName = constraints.video ? \"camera\" : \"microphone\";\n\t\tif (!isSupported.value) return false;\n\t\tif (permissionGranted.value) return true;\n\t\tconst { state, query } = usePermission(deviceName, { controls: true });\n\t\tawait query();\n\t\tif (state.value !== \"granted\") {\n\t\t\tlet granted = true;\n\t\t\ttry {\n\t\t\t\tconst allDevices = await navigator.mediaDevices.enumerateDevices();\n\t\t\t\tconst hasCamera = allDevices.some((device) => device.kind === \"videoinput\");\n\t\t\t\tconst hasMicrophone = allDevices.some((device) => device.kind === \"audioinput\" || device.kind === \"audiooutput\");\n\t\t\t\tconstraints.video = hasCamera ? constraints.video : false;\n\t\t\t\tconstraints.audio = hasMicrophone ? constraints.audio : false;\n\t\t\t\tstream = await navigator.mediaDevices.getUserMedia(constraints);\n\t\t\t} catch (_unused) {\n\t\t\t\tstream = null;\n\t\t\t\tgranted = false;\n\t\t\t}\n\t\t\tupdate();\n\t\t\tpermissionGranted.value = granted;\n\t\t} else permissionGranted.value = true;\n\t\treturn permissionGranted.value;\n\t}\n\tif (isSupported.value) {\n\t\tif (requestPermissions) ensurePermissions();\n\t\tuseEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n\t\tupdate();\n\t}\n\treturn {\n\t\tdevices,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tvideoInputs,\n\t\taudioInputs,\n\t\taudioOutputs,\n\t\tisSupported\n\t};\n}\n//#endregion\n//#region useDisplayMedia/index.ts\n/**\n* Reactive `mediaDevices.getDisplayMedia` streaming\n*\n* @see https://vueuse.org/useDisplayMedia\n* @param options\n*/\nfunction useDisplayMedia(options = {}) {\n\tvar _options$enabled;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst video = options.video;\n\tconst audio = options.audio;\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator === null || navigator === void 0 || (_navigator$mediaDevic = navigator.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia;\n\t});\n\tconst constraint = {\n\t\taudio,\n\t\tvideo\n\t};\n\tconst stream = shallowRef();\n\tasync function _start() {\n\t\tvar _stream$value;\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n\t\treturn stream.value;\n\t}\n\tasync function _stop() {\n\t\tvar _stream$value2;\n\t\t(_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\tenabled\n\t};\n}\n//#endregion\n//#region useDocumentVisibility/index.ts\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document = defaultDocument } = options;\n\tif (!document) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document.visibilityState);\n\tuseEventListener(document, \"visibilitychange\", () => {\n\t\tvisibility.value = document.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\n//#endregion\n//#region useDraggable/index.ts\nconst defaultScrollConfig = {\n\tspeed: 2,\n\tmargin: 30,\n\tdirection: \"both\"\n};\nfunction clampContainerScroll(container) {\n\tif (container.scrollLeft > container.scrollWidth - container.clientWidth) container.scrollLeft = Math.max(0, container.scrollWidth - container.clientWidth);\n\tif (container.scrollTop > container.scrollHeight - container.clientHeight) container.scrollTop = Math.max(0, container.scrollHeight - container.clientHeight);\n}\n/**\n* Make elements draggable.\n*\n* @see https://vueuse.org/useDraggable\n* @param target\n* @param options\n*/\nfunction useDraggable(target, options = {}) {\n\tvar _toValue, _toValue2, _toValue3, _scrollConfig$directi;\n\tconst { pointerTypes, preventDefault, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = \"both\", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0], restrictInView, autoScroll = false } = options;\n\tconst position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : {\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst pressedDelta = ref();\n\tconst filterEvent = (e) => {\n\t\tif (pointerTypes) return pointerTypes.includes(e.pointerType);\n\t\treturn true;\n\t};\n\tconst handleEvent = (e) => {\n\t\tif (toValue(preventDefault)) e.preventDefault();\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t};\n\tconst scrollConfig = toValue(autoScroll);\n\tconst scrollSettings = typeof scrollConfig === \"object\" ? {\n\t\tspeed: (_toValue2 = toValue(scrollConfig.speed)) !== null && _toValue2 !== void 0 ? _toValue2 : defaultScrollConfig.speed,\n\t\tmargin: (_toValue3 = toValue(scrollConfig.margin)) !== null && _toValue3 !== void 0 ? _toValue3 : defaultScrollConfig.margin,\n\t\tdirection: (_scrollConfig$directi = scrollConfig.direction) !== null && _scrollConfig$directi !== void 0 ? _scrollConfig$directi : defaultScrollConfig.direction\n\t} : defaultScrollConfig;\n\tconst getScrollAxisValues = (value) => typeof value === \"number\" ? [value, value] : [value.x, value.y];\n\tconst handleAutoScroll = (container, targetRect, position) => {\n\t\tconst { clientWidth, clientHeight, scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;\n\t\tconst [marginX, marginY] = getScrollAxisValues(scrollSettings.margin);\n\t\tconst [speedX, speedY] = getScrollAxisValues(scrollSettings.speed);\n\t\tlet deltaX = 0;\n\t\tlet deltaY = 0;\n\t\tif (scrollSettings.direction === \"x\" || scrollSettings.direction === \"both\") {\n\t\t\tif (position.x < marginX && scrollLeft > 0) deltaX = -speedX;\n\t\t\telse if (position.x + targetRect.width > clientWidth - marginX && scrollLeft < scrollWidth - clientWidth) deltaX = speedX;\n\t\t}\n\t\tif (scrollSettings.direction === \"y\" || scrollSettings.direction === \"both\") {\n\t\t\tif (position.y < marginY && scrollTop > 0) deltaY = -speedY;\n\t\t\telse if (position.y + targetRect.height > clientHeight - marginY && scrollTop < scrollHeight - clientHeight) deltaY = speedY;\n\t\t}\n\t\tif (deltaX || deltaY) container.scrollBy({\n\t\t\tleft: deltaX,\n\t\t\ttop: deltaY,\n\t\t\tbehavior: \"auto\"\n\t\t});\n\t};\n\tlet autoScrollInterval = null;\n\tconst startAutoScroll = () => {\n\t\tconst container = toValue(containerElement);\n\t\tif (container && !autoScrollInterval) autoScrollInterval = setInterval(() => {\n\t\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\t\tconst { x, y } = position.value;\n\t\t\tconst relativePosition = {\n\t\t\t\tx: x - container.scrollLeft,\n\t\t\t\ty: y - container.scrollTop\n\t\t\t};\n\t\t\tif (relativePosition.x >= 0 && relativePosition.y >= 0) {\n\t\t\t\thandleAutoScroll(container, targetRect, relativePosition);\n\t\t\t\trelativePosition.x += container.scrollLeft;\n\t\t\t\trelativePosition.y += container.scrollTop;\n\t\t\t\tposition.value = relativePosition;\n\t\t\t}\n\t\t}, 1e3 / 60);\n\t};\n\tconst stopAutoScroll = () => {\n\t\tif (autoScrollInterval) {\n\t\t\tclearInterval(autoScrollInterval);\n\t\t\tautoScrollInterval = null;\n\t\t}\n\t};\n\tconst isPointerNearEdge = (pointer, container, margin, targetRect) => {\n\t\tconst [marginX, marginY] = typeof margin === \"number\" ? [margin, margin] : [margin.x, margin.y];\n\t\tconst { clientWidth, clientHeight } = container;\n\t\treturn pointer.x < marginX || pointer.x + targetRect.width > clientWidth - marginX || pointer.y < marginY || pointer.y + targetRect.height > clientHeight - marginY;\n\t};\n\tconst checkAutoScroll = () => {\n\t\tif (toValue(options.disabled) || !pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tif (!container) return;\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst { x, y } = position.value;\n\t\tif (isPointerNearEdge({\n\t\t\tx: x - container.scrollLeft,\n\t\t\ty: y - container.scrollTop\n\t\t}, container, scrollSettings.margin, targetRect)) startAutoScroll();\n\t\telse stopAutoScroll();\n\t};\n\tif (toValue(autoScroll)) watch(position, checkAutoScroll);\n\tconst start = (e) => {\n\t\tvar _container$getBoundin;\n\t\tif (!toValue(buttons).includes(e.button)) return;\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (toValue(exact) && e.target !== toValue(target)) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst pos = {\n\t\t\tx: e.clientX - (container ? targetRect.left - containerRect.left + (autoScroll ? 0 : container.scrollLeft) : targetRect.left),\n\t\t\ty: e.clientY - (container ? targetRect.top - containerRect.top + (autoScroll ? 0 : container.scrollTop) : targetRect.top)\n\t\t};\n\t\tif ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return;\n\t\tpressedDelta.value = pos;\n\t\thandleEvent(e);\n\t};\n\tconst move = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tif (container instanceof HTMLElement) clampContainerScroll(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tlet { x, y } = position.value;\n\t\tif (axis === \"x\" || axis === \"both\") {\n\t\t\tx = e.clientX - pressedDelta.value.x;\n\t\t\tif (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n\t\t}\n\t\tif (axis === \"y\" || axis === \"both\") {\n\t\t\ty = e.clientY - pressedDelta.value.y;\n\t\t\tif (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n\t\t}\n\t\tif (toValue(autoScroll) && container) {\n\t\t\tif (autoScrollInterval === null) handleAutoScroll(container, targetRect, {\n\t\t\t\tx,\n\t\t\t\ty\n\t\t\t});\n\t\t\tx += container.scrollLeft;\n\t\t\ty += container.scrollTop;\n\t\t}\n\t\tif (container && (restrictInView || autoScroll)) {\n\t\t\tif (axis !== \"y\") {\n\t\t\t\tconst relativeX = x - container.scrollLeft;\n\t\t\t\tif (relativeX < 0) x = container.scrollLeft;\n\t\t\t\telse if (relativeX > container.clientWidth - targetRect.width) x = container.clientWidth - targetRect.width + container.scrollLeft;\n\t\t\t}\n\t\t\tif (axis !== \"x\") {\n\t\t\t\tconst relativeY = y - container.scrollTop;\n\t\t\t\tif (relativeY < 0) y = container.scrollTop;\n\t\t\t\telse if (relativeY > container.clientHeight - targetRect.height) y = container.clientHeight - targetRect.height + container.scrollTop;\n\t\t\t}\n\t\t}\n\t\tposition.value = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tonMove === null || onMove === void 0 || onMove(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tconst end = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tpressedDelta.value = void 0;\n\t\tif (autoScroll) stopAutoScroll();\n\t\tonEnd === null || onEnd === void 0 || onEnd(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tif (isClient) {\n\t\tconst config = () => {\n\t\t\tvar _options$capture;\n\t\t\treturn {\n\t\t\t\tcapture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true,\n\t\t\t\tpassive: !toValue(preventDefault)\n\t\t\t};\n\t\t};\n\t\tuseEventListener(draggingHandle, \"pointerdown\", start, config);\n\t\tuseEventListener(draggingElement, \"pointermove\", move, config);\n\t\tuseEventListener(draggingElement, \"pointerup\", end, config);\n\t}\n\treturn {\n\t\t...toRefs(position),\n\t\tposition,\n\t\tisDragging: computed(() => !!pressedDelta.value),\n\t\tstyle: computed(() => `\n      left: ${position.value.x}px;\n      top: ${position.value.y}px;\n      ${autoScroll ? \"text-wrap: nowrap;\" : \"\"}\n    `)\n\t};\n}\n//#endregion\n//#region useDropZone/index.ts\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tif (_options.checkValidity) return _options.checkValidity(items);\n\t\t\tconst dataTypesValid = checkDataTypes(Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type));\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\n//#endregion\n//#region useResizeObserver/index.ts\n/**\n* Reports changes to the dimensions of an Element's content or the border-box\n*\n* @see https://vueuse.org/useResizeObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useResizeObserver(target, callback, options = {}) {\n\tconst { window = defaultWindow, ...observerOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"ResizeObserver\" in window);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst _targets = toValue(target);\n\t\treturn Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n\t}), (els) => {\n\t\tcleanup();\n\t\tif (isSupported.value && window) {\n\t\t\tobserver = new ResizeObserver(callback);\n\t\t\tfor (const _el of els) if (_el) observer.observe(_el, observerOptions);\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useElementBounding/index.ts\n/**\n* Reactive bounding box of an HTML element.\n*\n* @see https://vueuse.org/useElementBounding\n* @param target\n*/\nfunction useElementBounding(target, options = {}) {\n\tconst { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = \"sync\" } = options;\n\tconst height = shallowRef(0);\n\tconst bottom = shallowRef(0);\n\tconst left = shallowRef(0);\n\tconst right = shallowRef(0);\n\tconst top = shallowRef(0);\n\tconst width = shallowRef(0);\n\tconst x = shallowRef(0);\n\tconst y = shallowRef(0);\n\tfunction recalculate() {\n\t\tconst el = unrefElement(target);\n\t\tif (!el) {\n\t\t\tif (reset) {\n\t\t\t\theight.value = 0;\n\t\t\t\tbottom.value = 0;\n\t\t\t\tleft.value = 0;\n\t\t\t\tright.value = 0;\n\t\t\t\ttop.value = 0;\n\t\t\t\twidth.value = 0;\n\t\t\t\tx.value = 0;\n\t\t\t\ty.value = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst rect = el.getBoundingClientRect();\n\t\theight.value = rect.height;\n\t\tbottom.value = rect.bottom;\n\t\tleft.value = rect.left;\n\t\tright.value = rect.right;\n\t\ttop.value = rect.top;\n\t\twidth.value = rect.width;\n\t\tx.value = rect.x;\n\t\ty.value = rect.y;\n\t}\n\tfunction update() {\n\t\tif (updateTiming === \"sync\") recalculate();\n\t\telse if (updateTiming === \"next-frame\") requestAnimationFrame(() => recalculate());\n\t}\n\tuseResizeObserver(target, update);\n\twatch(() => unrefElement(target), (ele) => !ele && update());\n\tuseMutationObserver(target, update, { attributeFilter: [\"style\", \"class\"] });\n\tif (windowScroll) useEventListener(\"scroll\", update, {\n\t\tcapture: true,\n\t\tpassive: true\n\t});\n\tif (windowResize) useEventListener(\"resize\", update, { passive: true });\n\ttryOnMounted(() => {\n\t\tif (immediate) update();\n\t});\n\treturn {\n\t\theight,\n\t\tbottom,\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\twidth,\n\t\tx,\n\t\ty,\n\t\tupdate\n\t};\n}\n//#endregion\n//#region useElementByPoint/index.ts\nfunction getDefaultScheduler$7(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\n/**\n* Reactive element by point.\n*\n* @see https://vueuse.org/useElementByPoint\n* @param options - UseElementByPointOptions\n*/\nfunction useElementByPoint(options) {\n\tconst { x, y, document = defaultDocument, multiple, scheduler = getDefaultScheduler$7(options) } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (toValue(multiple)) return document && \"elementsFromPoint\" in document;\n\t\treturn document && \"elementFromPoint\" in document;\n\t});\n\tconst element = shallowRef(null);\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\t...scheduler(() => {\n\t\t\tvar _document$elementsFro, _document$elementFrom;\n\t\t\telement.value = toValue(multiple) ? (_document$elementsFro = document === null || document === void 0 ? void 0 : document.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document === null || document === void 0 ? void 0 : document.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null;\n\t\t})\n\t};\n}\n//#endregion\n//#region useElementHover/index.ts\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n//#endregion\n//#region useElementSize/index.ts\n/**\n* Reactive size of an HTML element.\n*\n* @see https://vueuse.org/useElementSize\n*/\nfunction useElementSize(target, initialSize = {\n\twidth: 0,\n\theight: 0\n}, options = {}) {\n\tconst { window = defaultWindow, box = \"content-box\" } = options;\n\tconst isSVG = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes(\"svg\");\n\t});\n\tconst width = shallowRef(initialSize.width);\n\tconst height = shallowRef(initialSize.height);\n\tconst { stop: stop1 } = useResizeObserver(target, ([entry]) => {\n\t\tconst boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n\t\tif (window && isSVG.value) {\n\t\t\tconst $elem = unrefElement(target);\n\t\t\tif ($elem) {\n\t\t\t\tconst rect = $elem.getBoundingClientRect();\n\t\t\t\twidth.value = rect.width;\n\t\t\t\theight.value = rect.height;\n\t\t\t}\n\t\t} else if (boxSize) {\n\t\t\tconst formatBoxSize = toArray(boxSize);\n\t\t\twidth.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n\t\t\theight.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n\t\t} else {\n\t\t\twidth.value = entry.contentRect.width;\n\t\t\theight.value = entry.contentRect.height;\n\t\t}\n\t}, options);\n\ttryOnMounted(() => {\n\t\tconst ele = unrefElement(target);\n\t\tif (ele) {\n\t\t\twidth.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n\t\t\theight.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n\t\t}\n\t});\n\tconst stop2 = watch(() => unrefElement(target), (ele) => {\n\t\twidth.value = ele ? initialSize.width : 0;\n\t\theight.value = ele ? initialSize.height : 0;\n\t});\n\tfunction stop() {\n\t\tstop1();\n\t\tstop2();\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useIntersectionObserver/index.ts\n/**\n* Detects changes to a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin, threshold = 0, window = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"IntersectionObserver\" in window);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\ttoValue(rootMargin),\n\t\tisActive.value\n\t], ([targets, root, rootMargin]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root),\n\t\t\trootMargin,\n\t\t\tthreshold\n\t\t});\n\t\ttargets.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\n//#endregion\n//#region useElementVisibility/index.ts\nfunction useElementVisibility(element, options = {}) {\n\tconst { window = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false, initialValue = false } = options;\n\tconst isVisible = shallowRef(initialValue);\n\tconst observerController = useIntersectionObserver(element, (intersectionObserverEntries) => {\n\t\tlet isIntersecting = isVisible.value;\n\t\tlet latestTime = 0;\n\t\tfor (const entry of intersectionObserverEntries) if (entry.time >= latestTime) {\n\t\t\tlatestTime = entry.time;\n\t\t\tisIntersecting = entry.isIntersecting;\n\t\t}\n\t\tisVisible.value = isIntersecting;\n\t\tif (once) watchOnce(isVisible, () => {\n\t\t\tobserverController.stop();\n\t\t});\n\t}, {\n\t\troot: scrollTarget,\n\t\twindow,\n\t\tthreshold,\n\t\trootMargin\n\t});\n\treturn options.controls ? {\n\t\t...observerController,\n\t\tisVisible\n\t} : isVisible;\n}\n//#endregion\n//#region useEventBus/internal.ts\n/* #__PURE__ */\nconst events = /* @__PURE__ */ new Map();\n//#endregion\n//#region useEventBus/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useEventBus(key) {\n\tconst scope = getCurrentScope();\n\tfunction on(listener) {\n\t\tvar _scope$cleanups;\n\t\tconst listeners = events.get(key) || /* @__PURE__ */ new Set();\n\t\tlisteners.add(listener);\n\t\tevents.set(key, listeners);\n\t\tconst _off = () => off(listener);\n\t\tscope === null || scope === void 0 || (_scope$cleanups = scope.cleanups) === null || _scope$cleanups === void 0 || _scope$cleanups.push(_off);\n\t\treturn _off;\n\t}\n\tfunction once(listener) {\n\t\tfunction _listener(...args) {\n\t\t\toff(_listener);\n\t\t\tlistener(...args);\n\t\t}\n\t\treturn on(_listener);\n\t}\n\tfunction off(listener) {\n\t\tconst listeners = events.get(key);\n\t\tif (!listeners) return;\n\t\tlisteners.delete(listener);\n\t\tif (!listeners.size) reset();\n\t}\n\tfunction reset() {\n\t\tevents.delete(key);\n\t}\n\tfunction emit(event, payload) {\n\t\tvar _events$get;\n\t\t(_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload));\n\t}\n\treturn {\n\t\ton,\n\t\tonce,\n\t\toff,\n\t\temit,\n\t\treset\n\t};\n}\n//#endregion\n//#region useEventSource/index.ts\nfunction resolveNestedOptions$1(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive wrapper for EventSource.\n*\n* @see https://vueuse.org/useEventSource\n* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource\n* @param url\n* @param events\n* @param options\n*/\nfunction useEventSource(url, events = [], options = {}) {\n\tconst event = shallowRef(null);\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CONNECTING\");\n\tconst eventSource = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst urlRef = toRef(url);\n\tconst lastEventId = shallowRef(null);\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tconst { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options;\n\tconst close = () => {\n\t\tif (isClient && eventSource.value) {\n\t\t\teventSource.value.close();\n\t\t\teventSource.value = null;\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\texplicitlyClosed = true;\n\t\t}\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst es = new EventSource(urlRef.value, { withCredentials });\n\t\tstatus.value = \"CONNECTING\";\n\t\teventSource.value = es;\n\t\tes.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\terror.value = null;\n\t\t};\n\t\tes.onerror = (e) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\terror.value = e;\n\t\t\tif (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n\t\t\t\tes.close();\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(autoReconnect);\n\t\t\t\tretried += 1;\n\t\t\t\tif (typeof retries === \"number\" && (retries < 0 || retried < retries)) setTimeout(_init, delay);\n\t\t\t\telse if (typeof retries === \"function\" && retries()) setTimeout(_init, delay);\n\t\t\t\telse onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tes.onmessage = (e) => {\n\t\t\tvar _serializer$read;\n\t\t\tevent.value = null;\n\t\t\tdata.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null;\n\t\t\tlastEventId.value = e.lastEventId;\n\t\t};\n\t\tfor (const event_name of events) useEventListener(es, event_name, (e) => {\n\t\t\tvar _serializer$read2, _e$lastEventId;\n\t\t\tevent.value = event_name;\n\t\t\tdata.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null;\n\t\t\tlastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null;\n\t\t}, { passive: true });\n\t};\n\tconst open = () => {\n\t\tif (!isClient) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\ttryOnScopeDispose(close);\n\treturn {\n\t\teventSource,\n\t\tevent,\n\t\tdata,\n\t\tstatus,\n\t\terror,\n\t\topen,\n\t\tclose,\n\t\tlastEventId\n\t};\n}\n//#endregion\n//#region useEyeDropper/index.ts\n/**\n* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)\n*\n* @see https://vueuse.org/useEyeDropper\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useEyeDropper(options = {}) {\n\tconst { initialValue = \"\" } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n\tconst sRGBHex = shallowRef(initialValue);\n\tasync function open(openOptions) {\n\t\tif (!isSupported.value) return;\n\t\tconst result = await new window.EyeDropper().open(openOptions);\n\t\tsRGBHex.value = result.sRGBHex;\n\t\treturn result;\n\t}\n\treturn {\n\t\tisSupported,\n\t\tsRGBHex,\n\t\topen\n\t};\n}\n//#endregion\n//#region useFavicon/index.ts\nfunction useFavicon(newIcon = null, options = {}) {\n\tconst { baseUrl = \"\", rel = \"icon\", document = defaultDocument } = options;\n\tconst favicon = toRef(newIcon);\n\tconst applyIcon = (icon) => {\n\t\tconst elements = document === null || document === void 0 ? void 0 : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n\t\tif (!elements || elements.length === 0) {\n\t\t\tconst link = document === null || document === void 0 ? void 0 : document.createElement(\"link\");\n\t\t\tif (link) {\n\t\t\t\tlink.rel = rel;\n\t\t\t\tlink.href = `${baseUrl}${icon}`;\n\t\t\t\tlink.type = `image/${icon.split(\".\").pop()}`;\n\t\t\t\tdocument === null || document === void 0 || document.head.append(link);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n\t};\n\twatch(favicon, (i, o) => {\n\t\tif (typeof i === \"string\" && i !== o) applyIcon(i);\n\t}, { immediate: true });\n\treturn favicon;\n}\n//#endregion\n//#region useFetch/index.ts\nconst payloadMapping = {\n\tjson: \"application/json\",\n\ttext: \"text/plain\"\n};\n/**\n* !!!IMPORTANT!!!\n*\n* If you update the UseFetchOptions interface, be sure to update this object\n* to include the new options\n*/\nfunction isFetchOptions(obj) {\n\treturn obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n\treturn reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n\tif (typeof Headers !== \"undefined\" && headers instanceof Headers) return Object.fromEntries(headers.entries());\n\treturn headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n\tif (combination === \"overwrite\") return async (ctx) => {\n\t\tlet callback;\n\t\tfor (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) {\n\t\t\tcallback = callbacks[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (callback) return {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n\telse return async (ctx) => {\n\t\tfor (const callback of callbacks) if (callback) ctx = {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n}\nfunction createFetch(config = {}) {\n\tconst _combination = config.combination || \"chain\";\n\tconst _options = config.options || {};\n\tconst _fetchOptions = config.fetchOptions || {};\n\tfunction useFactoryFetch(url, ...args) {\n\t\tconst computedUrl = computed(() => {\n\t\t\tconst baseUrl = toValue(config.baseUrl);\n\t\t\tconst targetUrl = toValue(url);\n\t\t\treturn baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n\t\t});\n\t\tlet options = _options;\n\t\tlet fetchOptions = _fetchOptions;\n\t\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t\t...options,\n\t\t\t...args[0],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n\t\t};\n\t\telse fetchOptions = {\n\t\t\t...fetchOptions,\n\t\t\t...args[0],\n\t\t\theaders: {\n\t\t\t\t...headersToObject(fetchOptions.headers) || {},\n\t\t\t\t...headersToObject(args[0].headers) || {}\n\t\t\t}\n\t\t};\n\t\tif (args.length > 1 && isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n\t\t};\n\t\treturn useFetch(computedUrl, fetchOptions, options);\n\t}\n\treturn useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n\tvar _defaultWindow$fetch, _globalThis;\n\tconst supportsAbort = typeof AbortController === \"function\";\n\tlet fetchOptions = {};\n\tlet options = {\n\t\timmediate: true,\n\t\trefetch: false,\n\t\ttimeout: 0,\n\t\tupdateDataOnError: false\n\t};\n\tconst config = {\n\t\tmethod: \"GET\",\n\t\ttype: \"text\",\n\t\tpayload: void 0\n\t};\n\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t...options,\n\t\t...args[0]\n\t};\n\telse fetchOptions = args[0];\n\tif (args.length > 1) {\n\t\tif (isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1]\n\t\t};\n\t}\n\tconst { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options;\n\tconst responseEvent = createEventHook();\n\tconst errorEvent = createEventHook();\n\tconst finallyEvent = createEventHook();\n\tconst isFinished = shallowRef(false);\n\tconst isFetching = shallowRef(false);\n\tconst aborted = shallowRef(false);\n\tconst statusCode = shallowRef(null);\n\tconst response = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst data = shallowRef(initialData || null);\n\tconst canAbort = computed(() => supportsAbort && isFetching.value);\n\tlet controller;\n\tlet timer;\n\tconst abort = (reason) => {\n\t\tif (supportsAbort) {\n\t\t\tcontroller === null || controller === void 0 || controller.abort(reason);\n\t\t\tcontroller = new AbortController();\n\t\t\tcontroller.signal.onabort = () => aborted.value = true;\n\t\t\tfetchOptions = {\n\t\t\t\t...fetchOptions,\n\t\t\t\tsignal: controller.signal\n\t\t\t};\n\t\t}\n\t};\n\tconst loading = (isLoading) => {\n\t\tisFetching.value = isLoading;\n\t\tisFinished.value = !isLoading;\n\t};\n\tif (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false });\n\tlet executeCounter = 0;\n\tconst execute = async (throwOnFailed = false) => {\n\t\tvar _context$options;\n\t\tabort();\n\t\tloading(true);\n\t\terror.value = null;\n\t\tstatusCode.value = null;\n\t\taborted.value = false;\n\t\texecuteCounter += 1;\n\t\tconst currentExecuteCounter = executeCounter;\n\t\tconst defaultFetchOptions = {\n\t\t\tmethod: config.method,\n\t\t\theaders: {}\n\t\t};\n\t\tconst payload = toValue(config.payload);\n\t\tif (payload) {\n\t\t\tvar _payloadMapping$confi;\n\t\t\tconst headers = headersToObject(defaultFetchOptions.headers);\n\t\t\tconst proto = Object.getPrototypeOf(payload);\n\t\t\tif (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = \"json\";\n\t\t\tif (config.payloadType) headers[\"Content-Type\"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType;\n\t\t\tdefaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n\t\t}\n\t\tlet isCanceled = false;\n\t\tconst context = {\n\t\t\turl: toValue(url),\n\t\t\toptions: {\n\t\t\t\t...defaultFetchOptions,\n\t\t\t\t...fetchOptions\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tisCanceled = true;\n\t\t\t}\n\t\t};\n\t\tif (options.beforeFetch) Object.assign(context, await options.beforeFetch(context));\n\t\tif (isCanceled || !fetch) {\n\t\t\tloading(false);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet responseData = null;\n\t\tif (timer) timer.start();\n\t\treturn fetch(context.url, {\n\t\t\t...defaultFetchOptions,\n\t\t\t...context.options,\n\t\t\theaders: {\n\t\t\t\t...headersToObject(defaultFetchOptions.headers),\n\t\t\t\t...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers)\n\t\t\t}\n\t\t}).then(async (fetchResponse) => {\n\t\t\tresponse.value = fetchResponse;\n\t\t\tstatusCode.value = fetchResponse.status;\n\t\t\tresponseData = await fetchResponse.clone()[config.type]();\n\t\t\tif (!fetchResponse.ok) {\n\t\t\t\tdata.value = initialData || null;\n\t\t\t\tthrow new Error(fetchResponse.statusText);\n\t\t\t}\n\t\t\tif (options.afterFetch) ({data: responseData} = await options.afterFetch({\n\t\t\t\tdata: responseData,\n\t\t\t\tresponse: fetchResponse,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tdata.value = responseData;\n\t\t\tresponseEvent.trigger(fetchResponse);\n\t\t\treturn fetchResponse;\n\t\t}).catch(async (fetchError) => {\n\t\t\tlet errorData = fetchError.message || fetchError.name;\n\t\t\tif (options.onFetchError) ({error: errorData, data: responseData} = await options.onFetchError({\n\t\t\t\tdata: responseData,\n\t\t\t\terror: fetchError,\n\t\t\t\tresponse: response.value,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\terror.value = errorData;\n\t\t\tif (options.updateDataOnError) data.value = responseData;\n\t\t\terrorEvent.trigger(fetchError);\n\t\t\tif (throwOnFailed) throw fetchError;\n\t\t\treturn null;\n\t\t}).finally(() => {\n\t\t\tif (currentExecuteCounter === executeCounter) loading(false);\n\t\t\tif (timer) timer.stop();\n\t\t\tfinallyEvent.trigger(null);\n\t\t});\n\t};\n\tconst refetch = toRef(options.refetch);\n\twatch([refetch, toRef(url)], ([refetch]) => refetch && execute(), { deep: true });\n\tconst shell = {\n\t\tisFinished: shallowReadonly(isFinished),\n\t\tisFetching: shallowReadonly(isFetching),\n\t\tstatusCode,\n\t\tresponse,\n\t\terror,\n\t\tdata,\n\t\tcanAbort,\n\t\taborted,\n\t\tabort,\n\t\texecute,\n\t\tonFetchResponse: responseEvent.on,\n\t\tonFetchError: errorEvent.on,\n\t\tonFetchFinally: finallyEvent.on,\n\t\tget: setMethod(\"GET\"),\n\t\tput: setMethod(\"PUT\"),\n\t\tpost: setMethod(\"POST\"),\n\t\tdelete: setMethod(\"DELETE\"),\n\t\tpatch: setMethod(\"PATCH\"),\n\t\thead: setMethod(\"HEAD\"),\n\t\toptions: setMethod(\"OPTIONS\"),\n\t\tjson: setType(\"json\"),\n\t\ttext: setType(\"text\"),\n\t\tblob: setType(\"blob\"),\n\t\tarrayBuffer: setType(\"arrayBuffer\"),\n\t\tformData: setType(\"formData\")\n\t};\n\tfunction setMethod(method) {\n\t\treturn (payload, payloadType) => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.method = method;\n\t\t\t\tconfig.payload = payload;\n\t\t\t\tconfig.payloadType = payloadType;\n\t\t\t\tif (isRef(config.payload)) watch([refetch, toRef(config.payload)], ([refetch]) => refetch && execute(), { deep: true });\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tfunction waitUntilFinished() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\tfunction setType(type) {\n\t\treturn () => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.type = type;\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tif (options.immediate) Promise.resolve().then(() => execute());\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\nfunction joinPaths(start, end) {\n\tif (!start.endsWith(\"/\") && !end.startsWith(\"/\")) return `${start}/${end}`;\n\tif (start.endsWith(\"/\") && end.startsWith(\"/\")) return `${start.slice(0, -1)}${end}`;\n\treturn `${start}${end}`;\n}\n//#endregion\n//#region useFileDialog/index.ts\nconst DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document ? document.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tfiles.value = event.target.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options.multiple);\n\t\tel.accept = toValue(options.accept);\n\t\tel.webkitdirectory = toValue(options.directory);\n\t\tif (hasOwn(options, \"capture\")) el.capture = toValue(options.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n//#endregion\n//#region useFileSystemAccess/index.ts\nfunction useFileSystemAccess(options = {}) {\n\tconst { window: _window = defaultWindow, dataType = \"Text\" } = options;\n\tconst window = _window;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n\tconst fileHandle = shallowRef();\n\tconst data = shallowRef();\n\tconst file = shallowRef();\n\tconst fileName = computed(() => {\n\t\tvar _file$value$name, _file$value;\n\t\treturn (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : \"\";\n\t});\n\tconst fileMIME = computed(() => {\n\t\tvar _file$value$type, _file$value2;\n\t\treturn (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : \"\";\n\t});\n\tconst fileSize = computed(() => {\n\t\tvar _file$value$size, _file$value3;\n\t\treturn (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0;\n\t});\n\tconst fileLastModified = computed(() => {\n\t\tvar _file$value$lastModif, _file$value4;\n\t\treturn (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0;\n\t});\n\tasync function open(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tconst [handle] = await window.showOpenFilePicker({\n\t\t\t...toValue(options),\n\t\t\t..._options\n\t\t});\n\t\tfileHandle.value = handle;\n\t\tawait updateData();\n\t}\n\tasync function create(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tdata.value = void 0;\n\t\tawait updateData();\n\t}\n\tasync function save(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tif (!fileHandle.value) return saveAs(_options);\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function saveAs(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function updateFile() {\n\t\tvar _fileHandle$value;\n\t\tfile.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile());\n\t}\n\tasync function updateData() {\n\t\tvar _file$value5, _file$value6;\n\t\tawait updateFile();\n\t\tconst type = toValue(dataType);\n\t\tif (type === \"Text\") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text());\n\t\telse if (type === \"ArrayBuffer\") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer());\n\t\telse if (type === \"Blob\") data.value = file.value;\n\t}\n\twatch(() => toValue(dataType), updateData);\n\treturn {\n\t\tisSupported,\n\t\tdata,\n\t\tfile,\n\t\tfileName,\n\t\tfileMIME,\n\t\tfileSize,\n\t\tfileLastModified,\n\t\topen,\n\t\tcreate,\n\t\tsave,\n\t\tsaveAs,\n\t\tupdateData\n\t};\n}\n//#endregion\n//#region useFocus/index.ts\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n//#endregion\n//#region useFocusWithin/index.ts\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\n/**\n* Track if focus is contained within the target element\n*\n* @see https://vueuse.org/useFocusWithin\n* @param target The target element to track\n* @param options Focus within options\n*/\nfunction useFocusWithin(target, options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst _focused = shallowRef(false);\n\tconst focused = computed(() => _focused.value);\n\tconst activeElement = useActiveElement(options);\n\tif (!window || !activeElement.value) return { focused };\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n\tuseEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n\t\tvar _targetElement$value$, _targetElement$value, _targetElement$value$2;\n\t\treturn _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false;\n\t}, listenerOptions);\n\treturn { focused };\n}\n//#endregion\n//#region useFps/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useFps(options) {\n\tvar _options$every;\n\tconst fps = shallowRef(0);\n\tif (typeof performance === \"undefined\") return fps;\n\tconst every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 10;\n\tlet last = performance.now();\n\tlet ticks = 0;\n\tuseRafFn(() => {\n\t\tticks += 1;\n\t\tif (ticks >= every) {\n\t\t\tconst now = performance.now();\n\t\t\tconst diff = now - last;\n\t\t\tfps.value = Math.round(1e3 / (diff / ticks));\n\t\t\tlast = now;\n\t\t\tticks = 0;\n\t\t}\n\t});\n\treturn fps;\n}\n//#endregion\n//#region useFullscreen/index.ts\nconst eventHandlers = [\n\t\"fullscreenchange\",\n\t\"webkitfullscreenchange\",\n\t\"webkitendfullscreen\",\n\t\"mozfullscreenchange\",\n\t\"MSFullscreenChange\"\n];\n/**\n* Reactive Fullscreen API.\n*\n* @see https://vueuse.org/useFullscreen\n* @param target\n* @param options\n*/\nfunction useFullscreen(target, options = {}) {\n\tconst { document = defaultDocument, autoExit = false } = options;\n\tconst targetRef = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document === null || document === void 0 ? void 0 : document.documentElement;\n\t});\n\tconst isFullscreen = shallowRef(false);\n\tconst requestMethod = computed(() => {\n\t\treturn [\n\t\t\t\"requestFullscreen\",\n\t\t\t\"webkitRequestFullscreen\",\n\t\t\t\"webkitEnterFullscreen\",\n\t\t\t\"webkitEnterFullScreen\",\n\t\t\t\"webkitRequestFullScreen\",\n\t\t\t\"mozRequestFullScreen\",\n\t\t\t\"msRequestFullscreen\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst exitMethod = computed(() => {\n\t\treturn [\n\t\t\t\"exitFullscreen\",\n\t\t\t\"webkitExitFullscreen\",\n\t\t\t\"webkitExitFullScreen\",\n\t\t\t\"webkitCancelFullScreen\",\n\t\t\t\"mozCancelFullScreen\",\n\t\t\t\"msExitFullscreen\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenEnabled = computed(() => {\n\t\treturn [\n\t\t\t\"fullScreen\",\n\t\t\t\"webkitIsFullScreen\",\n\t\t\t\"webkitDisplayingFullscreen\",\n\t\t\t\"mozFullScreen\",\n\t\t\t\"msFullscreenElement\"\n\t\t].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenElementMethod = [\n\t\t\"fullscreenElement\",\n\t\t\"webkitFullscreenElement\",\n\t\t\"mozFullScreenElement\",\n\t\t\"msFullscreenElement\"\n\t].find((m) => document && m in document);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => targetRef.value && document && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n\tconst isCurrentElementFullScreen = () => {\n\t\tif (fullscreenElementMethod) return (document === null || document === void 0 ? void 0 : document[fullscreenElementMethod]) === targetRef.value;\n\t\treturn false;\n\t};\n\tconst isElementFullScreen = () => {\n\t\tif (fullscreenEnabled.value) if (document && document[fullscreenEnabled.value] != null) return document[fullscreenEnabled.value];\n\t\telse {\n\t\t\tconst target = targetRef.value;\n\t\t\tif ((target === null || target === void 0 ? void 0 : target[fullscreenEnabled.value]) != null) return Boolean(target[fullscreenEnabled.value]);\n\t\t}\n\t\treturn false;\n\t};\n\tasync function exit() {\n\t\tif (!isSupported.value || !isFullscreen.value) return;\n\t\tif (exitMethod.value) if ((document === null || document === void 0 ? void 0 : document[exitMethod.value]) != null) await document[exitMethod.value]();\n\t\telse {\n\t\t\tconst target = targetRef.value;\n\t\t\tif ((target === null || target === void 0 ? void 0 : target[exitMethod.value]) != null) await target[exitMethod.value]();\n\t\t}\n\t\tisFullscreen.value = false;\n\t}\n\tasync function enter() {\n\t\tif (!isSupported.value || isFullscreen.value) return;\n\t\tif (isElementFullScreen()) await exit();\n\t\tconst target = targetRef.value;\n\t\tif (requestMethod.value && (target === null || target === void 0 ? void 0 : target[requestMethod.value]) != null) {\n\t\t\tawait target[requestMethod.value]();\n\t\t\tisFullscreen.value = true;\n\t\t}\n\t}\n\tasync function toggle() {\n\t\tawait (isFullscreen.value ? exit() : enter());\n\t}\n\tconst handlerCallback = () => {\n\t\tconst isElementFullScreenValue = isElementFullScreen();\n\t\tif (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue;\n\t};\n\tconst listenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t};\n\tuseEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n\tuseEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n\ttryOnMounted(handlerCallback, false);\n\tif (autoExit) tryOnScopeDispose(exit);\n\treturn {\n\t\tisSupported,\n\t\tisFullscreen,\n\t\tenter,\n\t\texit,\n\t\ttoggle\n\t};\n}\n//#endregion\n//#region useGamepad/index.ts\n/**\n* Maps a standard standard gamepad to an Xbox 360 Controller.\n*/\nfunction mapGamepadToXbox360Controller(gamepad) {\n\treturn computed(() => {\n\t\tif (gamepad.value) return {\n\t\t\tbuttons: {\n\t\t\t\ta: gamepad.value.buttons[0],\n\t\t\t\tb: gamepad.value.buttons[1],\n\t\t\t\tx: gamepad.value.buttons[2],\n\t\t\t\ty: gamepad.value.buttons[3]\n\t\t\t},\n\t\t\tbumper: {\n\t\t\t\tleft: gamepad.value.buttons[4],\n\t\t\t\tright: gamepad.value.buttons[5]\n\t\t\t},\n\t\t\ttriggers: {\n\t\t\t\tleft: gamepad.value.buttons[6],\n\t\t\t\tright: gamepad.value.buttons[7]\n\t\t\t},\n\t\t\tstick: {\n\t\t\t\tleft: {\n\t\t\t\t\thorizontal: gamepad.value.axes[0],\n\t\t\t\t\tvertical: gamepad.value.axes[1],\n\t\t\t\t\tbutton: gamepad.value.buttons[10]\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\thorizontal: gamepad.value.axes[2],\n\t\t\t\t\tvertical: gamepad.value.axes[3],\n\t\t\t\t\tbutton: gamepad.value.buttons[11]\n\t\t\t\t}\n\t\t\t},\n\t\t\tdpad: {\n\t\t\t\tup: gamepad.value.buttons[12],\n\t\t\t\tdown: gamepad.value.buttons[13],\n\t\t\t\tleft: gamepad.value.buttons[14],\n\t\t\t\tright: gamepad.value.buttons[15]\n\t\t\t},\n\t\t\tback: gamepad.value.buttons[8],\n\t\t\tstart: gamepad.value.buttons[9]\n\t\t};\n\t\treturn null;\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useGamepad(options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"getGamepads\" in navigator);\n\tconst gamepads = ref([]);\n\tconst onConnectedHook = createEventHook();\n\tconst onDisconnectedHook = createEventHook();\n\tconst stateFromGamepad = (gamepad) => {\n\t\tconst hapticActuators = [];\n\t\tconst vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n\t\tif (vibrationActuator) hapticActuators.push(vibrationActuator);\n\t\tif (gamepad.hapticActuators) hapticActuators.push(...gamepad.hapticActuators);\n\t\treturn {\n\t\t\tid: gamepad.id,\n\t\t\tindex: gamepad.index,\n\t\t\tconnected: gamepad.connected,\n\t\t\tmapping: gamepad.mapping,\n\t\t\ttimestamp: gamepad.timestamp,\n\t\t\tvibrationActuator: gamepad.vibrationActuator,\n\t\t\thapticActuators,\n\t\t\taxes: gamepad.axes.map((axes) => axes),\n\t\t\tbuttons: gamepad.buttons.map((button) => ({\n\t\t\t\tpressed: button.pressed,\n\t\t\t\ttouched: button.touched,\n\t\t\t\tvalue: button.value\n\t\t\t}))\n\t\t};\n\t};\n\tconst updateGamepadState = () => {\n\t\tconst _gamepads = (navigator === null || navigator === void 0 ? void 0 : navigator.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n\t};\n\tconst { isActive, pause, resume } = useRafFn(updateGamepadState);\n\tconst onGamepadConnected = (gamepad) => {\n\t\tif (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n\t\t\tgamepads.value.push(stateFromGamepad(gamepad));\n\t\t\tonConnectedHook.trigger(gamepad.index);\n\t\t}\n\t\tresume();\n\t};\n\tconst onGamepadDisconnected = (gamepad) => {\n\t\tgamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n\t\tonDisconnectedHook.trigger(gamepad.index);\n\t};\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n\tuseEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n\ttryOnMounted(() => {\n\t\tconst _gamepads = (navigator === null || navigator === void 0 ? void 0 : navigator.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) onGamepadConnected(gamepad);\n\t});\n\tpause();\n\treturn {\n\t\tisSupported,\n\t\tonConnected: onConnectedHook.on,\n\t\tonDisconnected: onDisconnectedHook.on,\n\t\tgamepads,\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n//#endregion\n//#region useGeolocation/index.ts\n/**\n* Reactive Geolocation API.\n*\n* @see https://vueuse.org/useGeolocation\n* @param options\n*/\nfunction useGeolocation(options = {}) {\n\tconst { enableHighAccuracy = true, maximumAge = 3e4, timeout = 27e3, navigator = defaultNavigator, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"geolocation\" in navigator);\n\tconst locatedAt = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst coords = shallowRef({\n\t\taccuracy: 0,\n\t\tlatitude: Number.POSITIVE_INFINITY,\n\t\tlongitude: Number.POSITIVE_INFINITY,\n\t\taltitude: null,\n\t\taltitudeAccuracy: null,\n\t\theading: null,\n\t\tspeed: null\n\t});\n\tfunction updatePosition(position) {\n\t\tlocatedAt.value = position.timestamp;\n\t\tcoords.value = position.coords;\n\t\terror.value = null;\n\t}\n\tlet watcher;\n\tfunction resume() {\n\t\tif (isSupported.value) watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n\t\t\tenableHighAccuracy,\n\t\t\tmaximumAge,\n\t\t\ttimeout\n\t\t});\n\t}\n\tif (immediate) resume();\n\tfunction pause() {\n\t\tif (watcher && navigator) navigator.geolocation.clearWatch(watcher);\n\t}\n\ttryOnScopeDispose(() => {\n\t\tpause();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcoords,\n\t\tlocatedAt,\n\t\terror,\n\t\tresume,\n\t\tpause\n\t};\n}\n//#endregion\n//#region useIdle/index.ts\nconst defaultEvents$1 = [\n\t\"mousemove\",\n\t\"mousedown\",\n\t\"resize\",\n\t\"keydown\",\n\t\"touchstart\",\n\t\"wheel\"\n];\nconst oneMinute = 6e4;\n/**\n* Tracks whether the user is being inactive.\n*\n* @see https://vueuse.org/useIdle\n* @param timeout default to 1 minute\n* @param options IdleOptions\n*/\nfunction useIdle(timeout = oneMinute, options = {}) {\n\tconst { initialState = false, listenForVisibilityChange = true, events = defaultEvents$1, window = defaultWindow, eventFilter = throttleFilter(50) } = options;\n\tconst idle = shallowRef(initialState);\n\tconst lastActive = shallowRef(timestamp());\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tconst reset = () => {\n\t\tidle.value = false;\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => idle.value = true, timeout);\n\t};\n\tconst onEvent = createFilterWrapper(eventFilter, () => {\n\t\tlastActive.value = timestamp();\n\t\treset();\n\t});\n\tif (window) {\n\t\tconst document = window.document;\n\t\tconst listenerOptions = { passive: true };\n\t\tfor (const event of events) useEventListener(window, event, () => {\n\t\t\tif (!isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tif (listenForVisibilityChange) useEventListener(document, \"visibilitychange\", () => {\n\t\t\tif (document.hidden || !isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tstart();\n\t}\n\tfunction start() {\n\t\tif (isPending.value) return;\n\t\tisPending.value = true;\n\t\tif (!initialState) reset();\n\t}\n\tfunction stop() {\n\t\tidle.value = initialState;\n\t\tclearTimeout(timer);\n\t\tisPending.value = false;\n\t}\n\treturn {\n\t\tidle,\n\t\tlastActive,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tisPending: shallowReadonly(isPending)\n\t};\n}\n//#endregion\n//#region useImage/index.ts\nasync function loadImage(options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\tconst { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n\t\timg.src = src;\n\t\tif (srcset != null) img.srcset = srcset;\n\t\tif (sizes != null) img.sizes = sizes;\n\t\tif (clazz != null) img.className = clazz;\n\t\tif (loading != null) img.loading = loading;\n\t\tif (crossorigin != null) img.crossOrigin = crossorigin;\n\t\tif (referrerPolicy != null) img.referrerPolicy = referrerPolicy;\n\t\tif (width != null) img.width = width;\n\t\tif (height != null) img.height = height;\n\t\tif (decoding != null) img.decoding = decoding;\n\t\tif (fetchPriority != null) img.fetchPriority = fetchPriority;\n\t\tif (ismap != null) img.isMap = ismap;\n\t\tif (usemap != null) img.useMap = usemap;\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t});\n}\n/**\n* Reactive load an image in the browser, you can wait the result to display it or show a fallback.\n*\n* @see https://vueuse.org/useImage\n* @param options Image attributes, as used in the <img> tag\n* @param asyncStateOptions\n*/\nfunction useImage(options, asyncStateOptions = {}) {\n\tconst state = useAsyncState(() => loadImage(toValue(options)), void 0, {\n\t\tresetOnExecute: true,\n\t\t...asyncStateOptions\n\t});\n\twatch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n\treturn state;\n}\n//#endregion\n//#region _resolve-element.ts\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\n//#endregion\n//#region useScroll/index.ts\n/**\n* We have to check if the scroll amount is close enough to some threshold in order to\n* more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n* numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n*/\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n/**\n* Reactive scroll.\n*\n* @see https://vueuse.org/useScroll\n* @param element\n* @param options\n*/\nfunction useScroll(element, options = {}) {\n\tconst { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0\n\t}, observe: _observe = { mutation: false }, eventListenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t}, behavior = \"auto\", window = defaultWindow, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = options;\n\tconst observe = typeof _observe === \"boolean\" ? { mutation: _observe } : _observe;\n\tconst internalX = shallowRef(0);\n\tconst internalY = shallowRef(0);\n\tconst x = computed({\n\t\tget() {\n\t\t\treturn internalX.value;\n\t\t},\n\t\tset(x) {\n\t\t\tscrollTo(x, void 0);\n\t\t}\n\t});\n\tconst y = computed({\n\t\tget() {\n\t\t\treturn internalY.value;\n\t\t},\n\t\tset(y) {\n\t\t\tscrollTo(void 0, y);\n\t\t}\n\t});\n\tfunction scrollTo(_x, _y) {\n\t\tvar _ref, _toValue, _toValue2, _document;\n\t\tif (!window) return;\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\t(_ref = _element instanceof Document ? window.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({\n\t\t\ttop: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value,\n\t\t\tleft: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value,\n\t\t\tbehavior: toValue(behavior)\n\t\t});\n\t\tconst scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;\n\t\tif (x != null) internalX.value = scrollContainer.scrollLeft;\n\t\tif (y != null) internalY.value = scrollContainer.scrollTop;\n\t}\n\tconst isScrolling = shallowRef(false);\n\tconst arrivedState = reactive({\n\t\tleft: true,\n\t\tright: false,\n\t\ttop: true,\n\t\tbottom: false\n\t});\n\tconst directions = reactive({\n\t\tleft: false,\n\t\tright: false,\n\t\ttop: false,\n\t\tbottom: false\n\t});\n\tconst onScrollEnd = (e) => {\n\t\tif (!isScrolling.value) return;\n\t\tisScrolling.value = false;\n\t\tdirections.left = false;\n\t\tdirections.right = false;\n\t\tdirections.top = false;\n\t\tdirections.bottom = false;\n\t\tonStop(e);\n\t};\n\tconst onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n\tconst setArrivedState = (target) => {\n\t\tvar _document2;\n\t\tif (!window) return;\n\t\tconst el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);\n\t\tconst { display, flexDirection, direction } = window.getComputedStyle(el);\n\t\tconst directionMultipler = direction === \"rtl\" ? -1 : 1;\n\t\tconst scrollLeft = el.scrollLeft;\n\t\tdirections.left = scrollLeft < internalX.value;\n\t\tdirections.right = scrollLeft > internalX.value;\n\t\tconst left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n\t\tconst right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\tif (display === \"flex\" && flexDirection === \"row-reverse\") {\n\t\t\tarrivedState.left = right;\n\t\t\tarrivedState.right = left;\n\t\t} else {\n\t\t\tarrivedState.left = left;\n\t\t\tarrivedState.right = right;\n\t\t}\n\t\tinternalX.value = scrollLeft;\n\t\tlet scrollTop = el.scrollTop;\n\t\tif (target === window.document && !scrollTop) scrollTop = window.document.body.scrollTop;\n\t\tdirections.top = scrollTop < internalY.value;\n\t\tdirections.bottom = scrollTop > internalY.value;\n\t\tconst top = Math.abs(scrollTop) <= (offset.top || 0);\n\t\tconst bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\t/**\n\t\t* reverse columns and rows behave exactly the other way around,\n\t\t* bottom is treated as top and top is treated as the negative version of bottom\n\t\t*/\n\t\tif (display === \"flex\" && flexDirection === \"column-reverse\") {\n\t\t\tarrivedState.top = bottom;\n\t\t\tarrivedState.bottom = top;\n\t\t} else {\n\t\t\tarrivedState.top = top;\n\t\t\tarrivedState.bottom = bottom;\n\t\t}\n\t\tinternalY.value = scrollTop;\n\t};\n\tconst onScrollHandler = (e) => {\n\t\tvar _documentElement;\n\t\tif (!window) return;\n\t\tsetArrivedState((_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target);\n\t\tisScrolling.value = true;\n\t\tonScrollEndDebounced(e);\n\t\tonScroll(e);\n\t};\n\tuseEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n\ttryOnMounted(() => {\n\t\ttry {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (!_element) return;\n\t\t\tsetArrivedState(_element);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t});\n\tif ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window && element !== document) useMutationObserver(element, () => {\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\tsetArrivedState(_element);\n\t}, {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true\n\t});\n\tuseEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n\treturn {\n\t\tx,\n\t\ty,\n\t\tisScrolling,\n\t\tarrivedState,\n\t\tdirections,\n\t\tmeasure() {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (window && _element) setArrivedState(_element);\n\t\t}\n\t};\n}\n//#endregion\n//#region useInfiniteScroll/index.ts\n/**\n* Reactive infinite scroll.\n*\n* @see https://vueuse.org/useInfiniteScroll\n*/\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n\tvar _options$distance;\n\tconst { direction = \"bottom\", interval = 100, canLoadMore = () => true } = options;\n\tconst state = reactive(useScroll(element, {\n\t\t...options,\n\t\toffset: {\n\t\t\t[direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0,\n\t\t\t...options.offset\n\t\t}\n\t}));\n\tconst promise = shallowRef();\n\tconst isLoading = computed(() => !!promise.value);\n\tconst observedElement = computed(() => {\n\t\treturn resolveElement(toValue(element));\n\t});\n\tconst isElementVisible = useElementVisibility(observedElement);\n\tconst canLoad = computed(() => {\n\t\tif (!observedElement.value) return false;\n\t\treturn canLoadMore(observedElement.value);\n\t});\n\tfunction checkAndLoad() {\n\t\tstate.measure();\n\t\tif (!observedElement.value || !isElementVisible.value || !canLoad.value || promise.value) return;\n\t\tconst { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n\t\tconst isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n\t\tif (state.arrivedState[direction] || isNarrower) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => {\n\t\t\tpromise.value = null;\n\t\t\tnextTick(() => checkAndLoad());\n\t\t});\n\t}\n\ttryOnUnmounted(watch(() => [\n\t\tstate.arrivedState[direction],\n\t\tisElementVisible.value,\n\t\tcanLoad.value\n\t], checkAndLoad, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t}));\n\treturn {\n\t\tisLoading,\n\t\treset() {\n\t\t\tnextTick(() => checkAndLoad());\n\t\t}\n\t};\n}\n//#endregion\n//#region useKeyModifier/index.ts\nconst defaultEvents = [\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"keydown\",\n\t\"keyup\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction useKeyModifier(modifier, options = {}) {\n\tconst { events = defaultEvents, document = defaultDocument, initial = null } = options;\n\tconst state = shallowRef(initial);\n\tif (document) events.forEach((listenerEvent) => {\n\t\tuseEventListener(document, listenerEvent, (evt) => {\n\t\t\tif (typeof evt.getModifierState === \"function\") state.value = evt.getModifierState(modifier);\n\t\t}, { passive: true });\n\t});\n\treturn state;\n}\n//#endregion\n//#region useLocalStorage/index.ts\n/**\n* Reactive LocalStorage.\n*\n* @see https://vueuse.org/useLocalStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useLocalStorage(key, initialValue, options = {}) {\n\tconst { window = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window === null || window === void 0 ? void 0 : window.localStorage, options);\n}\n//#endregion\n//#region useMagicKeys/aliasMap.ts\nconst DefaultMagicKeysAliasMap = {\n\tctrl: \"control\",\n\tcommand: \"meta\",\n\tcmd: \"meta\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\"\n};\n//#endregion\n//#region useMagicKeys/index.ts\n/**\n* Reactive keys pressed state, with magical keys combination support.\n*\n* @see https://vueuse.org/useMagicKeys\n*/\nfunction useMagicKeys(options = {}) {\n\tconst { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop } = options;\n\tconst current = reactive(/* @__PURE__ */ new Set());\n\tconst obj = {\n\t\ttoJSON() {\n\t\t\treturn {};\n\t\t},\n\t\tcurrent\n\t};\n\tconst refs = useReactive ? reactive(obj) : obj;\n\tconst metaDeps = /* @__PURE__ */ new Set();\n\tconst depsMap = new Map([\n\t\t[\"Meta\", metaDeps],\n\t\t[\"Shift\", /* @__PURE__ */ new Set()],\n\t\t[\"Alt\", /* @__PURE__ */ new Set()]\n\t]);\n\tconst usedKeys = /* @__PURE__ */ new Set();\n\tfunction setRefs(key, value) {\n\t\tif (key in refs) if (useReactive) refs[key] = value;\n\t\telse refs[key].value = value;\n\t}\n\tfunction reset() {\n\t\tcurrent.clear();\n\t\tfor (const key of usedKeys) setRefs(key, false);\n\t}\n\tfunction updateDeps(value, e, keys) {\n\t\tif (!value || typeof e.getModifierState !== \"function\") return;\n\t\tfor (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {\n\t\t\tkeys.forEach((key) => depsSet.add(key));\n\t\t\tbreak;\n\t\t}\n\t}\n\tfunction clearDeps(value, key) {\n\t\tif (value) return;\n\t\tconst depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;\n\t\tconst deps = depsMap.get(depsMapKey);\n\t\tif (![\"shift\", \"alt\"].includes(key) || !deps) return;\n\t\tconst depsArray = Array.from(deps);\n\t\tconst depsIndex = depsArray.indexOf(key);\n\t\tdepsArray.forEach((key, index) => {\n\t\t\tif (index >= depsIndex) {\n\t\t\t\tcurrent.delete(key);\n\t\t\t\tsetRefs(key, false);\n\t\t\t}\n\t\t});\n\t\tdeps.clear();\n\t}\n\tfunction updateRefs(e, value) {\n\t\tvar _e$key, _e$code;\n\t\tconst key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();\n\t\tconst values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);\n\t\tif (!key) return;\n\t\tif (key) if (value) current.add(key);\n\t\telse current.delete(key);\n\t\tfor (const key of values) {\n\t\t\tusedKeys.add(key);\n\t\t\tsetRefs(key, value);\n\t\t}\n\t\tupdateDeps(value, e, [...current, ...values]);\n\t\tclearDeps(value, key);\n\t\tif (key === \"meta\" && !value) {\n\t\t\tmetaDeps.forEach((key) => {\n\t\t\t\tcurrent.delete(key);\n\t\t\t\tsetRefs(key, false);\n\t\t\t});\n\t\t\tmetaDeps.clear();\n\t\t}\n\t}\n\tuseEventListener(target, \"keydown\", (e) => {\n\t\tupdateRefs(e, true);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(target, \"keyup\", (e) => {\n\t\tupdateRefs(e, false);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(\"blur\", reset, { passive });\n\tuseEventListener(\"focus\", reset, { passive });\n\tconst proxy = new Proxy(refs, { get(target, prop, rec) {\n\t\tif (typeof prop !== \"string\") return Reflect.get(target, prop, rec);\n\t\tprop = prop.toLowerCase();\n\t\tif (prop in aliasMap) prop = aliasMap[prop];\n\t\tif (!(prop in refs)) if (/[+_-]/.test(prop)) {\n\t\t\tconst keys = prop.split(/[+_-]/g).map((i) => i.trim());\n\t\t\trefs[prop] = computed(() => keys.map((key) => toValue(proxy[key])).every(Boolean));\n\t\t} else refs[prop] = shallowRef(false);\n\t\tconst r = Reflect.get(target, prop, rec);\n\t\treturn useReactive ? toValue(r) : r;\n\t} });\n\treturn proxy;\n}\n//#endregion\n//#region useMediaControls/index.ts\n/**\n* Automatically check if the ref exists and if it does run the cb fn\n*/\nfunction usingElRef(source, cb) {\n\tif (toValue(source)) cb(toValue(source));\n}\n/**\n* Converts a TimeRange object to an array\n*/\nfunction timeRangeToArray(timeRanges) {\n\tlet ranges = [];\n\tfor (let i = 0; i < timeRanges.length; ++i) ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\treturn ranges;\n}\n/**\n* Converts a TextTrackList object to an array of `UseMediaTextTrack`\n*/\nfunction tracksToArray(tracks) {\n\treturn Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({\n\t\tid,\n\t\tlabel,\n\t\tkind,\n\t\tlanguage,\n\t\tmode,\n\t\tactiveCues,\n\t\tcues,\n\t\tinBandMetadataTrackDispatchType\n\t}));\n}\nconst defaultOptions = {\n\tsrc: \"\",\n\ttracks: []\n};\nfunction useMediaControls(target, options = {}) {\n\ttarget = toRef(target);\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options\n\t};\n\tconst { document = defaultDocument } = options;\n\tconst listenerOptions = { passive: true };\n\tconst currentTime = shallowRef(0);\n\tconst duration = shallowRef(0);\n\tconst seeking = shallowRef(false);\n\tconst volume = shallowRef(1);\n\tconst waiting = shallowRef(false);\n\tconst ended = shallowRef(false);\n\tconst playing = shallowRef(false);\n\tconst rate = shallowRef(1);\n\tconst stalled = shallowRef(false);\n\tconst buffered = shallowRef([]);\n\tconst tracks = shallowRef([]);\n\tconst selectedTrack = shallowRef(-1);\n\tconst isPictureInPicture = shallowRef(false);\n\tconst muted = shallowRef(false);\n\tconst supportsPictureInPicture = Boolean(document && \"pictureInPictureEnabled\" in document);\n\tconst sourceErrorEvent = createEventHook();\n\tconst playbackErrorEvent = createEventHook();\n\t/**\n\t* Disables the specified track. If no track is specified then\n\t* all tracks will be disabled\n\t*\n\t* @param track The id of the track to disable\n\t*/\n\tconst disableTrack = (track) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tif (track) {\n\t\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\t\tel.textTracks[id].mode = \"disabled\";\n\t\t\t} else for (let i = 0; i < el.textTracks.length; ++i) el.textTracks[i].mode = \"disabled\";\n\t\t\tselectedTrack.value = -1;\n\t\t});\n\t};\n\t/**\n\t* Enables the specified track and disables the\n\t* other tracks unless otherwise specified\n\t*\n\t* @param track The track of the id of the track to enable\n\t* @param disableTracks Disable all other tracks\n\t*/\n\tconst enableTrack = (track, disableTracks = true) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\tif (disableTracks) disableTrack();\n\t\t\tel.textTracks[id].mode = \"showing\";\n\t\t\tselectedTrack.value = id;\n\t\t});\n\t};\n\t/**\n\t* Toggle picture in picture mode for the player.\n\t*/\n\tconst togglePictureInPicture = () => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tusingElRef(target, async (el) => {\n\t\t\t\tif (supportsPictureInPicture) if (!isPictureInPicture.value) el.requestPictureInPicture().then(resolve).catch(reject);\n\t\t\t\telse document.exitPictureInPicture().then(resolve).catch(reject);\n\t\t\t});\n\t\t});\n\t};\n\t/**\n\t* This will automatically inject sources to the media element. The sources will be\n\t* appended as children to the media element as `<source>` elements.\n\t*/\n\twatchEffect(() => {\n\t\tif (!document) return;\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tconst src = toValue(options.src);\n\t\tlet sources = [];\n\t\tif (!src) return;\n\t\tif (typeof src === \"string\") sources = [{ src }];\n\t\telse if (Array.isArray(src)) sources = src;\n\t\telse if (isObject(src)) sources = [src];\n\t\tel.querySelectorAll(\"source\").forEach((e) => {\n\t\t\te.remove();\n\t\t});\n\t\tsources.forEach(({ src, type, media }) => {\n\t\t\tconst source = document.createElement(\"source\");\n\t\t\tsource.setAttribute(\"src\", src);\n\t\t\tsource.setAttribute(\"type\", type || \"\");\n\t\t\tsource.setAttribute(\"media\", media || \"\");\n\t\t\tuseEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n\t\t\tel.appendChild(source);\n\t\t});\n\t\tel.load();\n\t});\n\t/**\n\t* Apply composable state to the element, also when element is changed\n\t*/\n\twatch([target, volume], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.volume = volume.value;\n\t});\n\twatch([target, muted], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.muted = muted.value;\n\t});\n\twatch([target, rate], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.playbackRate = rate.value;\n\t});\n\t/**\n\t* Load Tracks\n\t*/\n\twatchEffect(() => {\n\t\tif (!document) return;\n\t\tconst textTracks = toValue(options.tracks);\n\t\tconst el = toValue(target);\n\t\tif (!textTracks || !textTracks.length || !el) return;\n\t\t/**\n\t\t* The MediaAPI provides an API for adding text tracks, but they don't currently\n\t\t* have an API for removing text tracks, so instead we will just create and remove\n\t\t* the tracks manually using the HTML api.\n\t\t*/\n\t\tel.querySelectorAll(\"track\").forEach((e) => e.remove());\n\t\ttextTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n\t\t\tconst track = document.createElement(\"track\");\n\t\t\ttrack.default = isDefault || false;\n\t\t\ttrack.kind = kind;\n\t\t\ttrack.label = label;\n\t\t\ttrack.src = src;\n\t\t\ttrack.srclang = srcLang;\n\t\t\tif (track.default) selectedTrack.value = i;\n\t\t\tel.appendChild(track);\n\t\t});\n\t});\n\t/**\n\t* This will allow us to update the current time from the timeupdate event\n\t* without setting the medias current position, but if the user changes the\n\t* current time via the ref, then the media will seek.\n\t*\n\t* If we did not use an ignorable watch, then the current time update from\n\t* the timeupdate event would cause the media to stutter.\n\t*/\n\tconst { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.currentTime = time;\n\t});\n\t/**\n\t* Using an ignorable watch so we can control the play state using a ref and not\n\t* a function\n\t*/\n\tconst { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tif (isPlaying) el.play().catch((e) => {\n\t\t\tplaybackErrorEvent.trigger(e);\n\t\t\tthrow e;\n\t\t});\n\t\telse el.pause();\n\t});\n\tuseEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions);\n\tuseEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration, listenerOptions);\n\tuseEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions);\n\tuseEventListener(target, \"seeking\", () => seeking.value = true, listenerOptions);\n\tuseEventListener(target, \"seeked\", () => seeking.value = false, listenerOptions);\n\tuseEventListener(target, [\"waiting\", \"loadstart\"], () => {\n\t\twaiting.value = true;\n\t\tignorePlayingUpdates(() => playing.value = false);\n\t}, listenerOptions);\n\tuseEventListener(target, \"loadeddata\", () => waiting.value = false, listenerOptions);\n\tuseEventListener(target, \"playing\", () => {\n\t\twaiting.value = false;\n\t\tended.value = false;\n\t\tignorePlayingUpdates(() => playing.value = true);\n\t}, listenerOptions);\n\tuseEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate, listenerOptions);\n\tuseEventListener(target, \"stalled\", () => stalled.value = true, listenerOptions);\n\tuseEventListener(target, \"ended\", () => ended.value = true, listenerOptions);\n\tuseEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions);\n\tuseEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions);\n\tuseEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true, listenerOptions);\n\tuseEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false, listenerOptions);\n\tuseEventListener(target, \"volumechange\", () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tvolume.value = el.volume;\n\t\tmuted.value = el.muted;\n\t}, listenerOptions);\n\t/**\n\t* The following listeners need to listen to a nested\n\t* object on the target, so we will have to use a nested\n\t* watch and manually remove the listeners\n\t*/\n\tconst listeners = [];\n\tconst stop = watch([target], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tstop();\n\t\tlisteners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t});\n\ttryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n\treturn {\n\t\tcurrentTime,\n\t\tduration,\n\t\twaiting,\n\t\tseeking,\n\t\tended,\n\t\tstalled,\n\t\tbuffered,\n\t\tplaying,\n\t\trate,\n\t\tvolume,\n\t\tmuted,\n\t\ttracks,\n\t\tselectedTrack,\n\t\tenableTrack,\n\t\tdisableTrack,\n\t\tsupportsPictureInPicture,\n\t\ttogglePictureInPicture,\n\t\tisPictureInPicture,\n\t\tonSourceError: sourceErrorEvent.on,\n\t\tonPlaybackError: playbackErrorEvent.on\n\t};\n}\n//#endregion\n//#region useMemoize/index.ts\n/**\n* Reactive function result cache based on arguments\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemoize(resolver, options) {\n\tconst initCache = () => {\n\t\tif (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache);\n\t\treturn shallowReactive(/* @__PURE__ */ new Map());\n\t};\n\tconst cache = initCache();\n\t/**\n\t* Generate key from args\n\t*/\n\tconst generateKey = (...args) => (options === null || options === void 0 ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n\t/**\n\t* Load data and save in cache\n\t*/\n\tconst _loadData = (key, ...args) => {\n\t\tcache.set(key, resolver(...args));\n\t\treturn cache.get(key);\n\t};\n\tconst loadData = (...args) => _loadData(generateKey(...args), ...args);\n\t/**\n\t* Delete key from cache\n\t*/\n\tconst deleteData = (...args) => {\n\t\tcache.delete(generateKey(...args));\n\t};\n\t/**\n\t* Clear cached data\n\t*/\n\tconst clearData = () => {\n\t\tcache.clear();\n\t};\n\tconst memoized = (...args) => {\n\t\tconst key = generateKey(...args);\n\t\tif (cache.has(key)) return cache.get(key);\n\t\treturn _loadData(key, ...args);\n\t};\n\tmemoized.load = loadData;\n\tmemoized.delete = deleteData;\n\tmemoized.clear = clearData;\n\tmemoized.generateKey = generateKey;\n\tmemoized.cache = cache;\n\treturn memoized;\n}\n//#endregion\n//#region useMemory/index.ts\nfunction getDefaultScheduler$6(options) {\n\tif (\"interval\" in options || \"immediate\" in options || \"immediateCallback\" in options) {\n\t\tconst { interval = 1e3, immediate, immediateCallback } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, {\n\t\t\timmediate,\n\t\t\timmediateCallback\n\t\t});\n\t}\n\treturn useIntervalFn;\n}\n/**\n* Reactive Memory Info.\n*\n* @see https://vueuse.org/useMemory\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemory(options = {}) {\n\tconst memory = shallowRef();\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n\tif (isSupported.value) {\n\t\tconst { scheduler = getDefaultScheduler$6 } = options;\n\t\tscheduler(() => {\n\t\t\tmemory.value = performance.memory;\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tmemory\n\t};\n}\n//#endregion\n//#region useMouse/index.ts\nconst UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window = defaultWindow, target = window, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window) {\n\t\t\t_prevScrollX = window.scrollX;\n\t\t\t_prevScrollY = window.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\n//#endregion\n//#region useMouseInElement/index.ts\n/**\n* Reactive mouse position related to an element.\n*\n* @see https://vueuse.org/useMouseInElement\n* @param target\n* @param options\n*/\nfunction useMouseInElement(target, options = {}) {\n\tconst { windowResize = true, windowScroll = true, handleOutside = true, window = defaultWindow } = options;\n\tconst type = options.type || \"page\";\n\tconst { x, y, sourceType } = useMouse(options);\n\tconst targetRef = shallowRef(target !== null && target !== void 0 ? target : window === null || window === void 0 ? void 0 : window.document.body);\n\tconst elementX = shallowRef(0);\n\tconst elementY = shallowRef(0);\n\tconst elementPositionX = shallowRef(0);\n\tconst elementPositionY = shallowRef(0);\n\tconst elementHeight = shallowRef(0);\n\tconst elementWidth = shallowRef(0);\n\tconst isOutside = shallowRef(true);\n\tfunction update() {\n\t\tif (!window) return;\n\t\tconst el = unrefElement(targetRef);\n\t\tif (!el || !(el instanceof Element)) return;\n\t\tfor (const rect of el.getClientRects()) {\n\t\t\tconst { left, top, width, height } = rect;\n\t\t\telementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n\t\t\telementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n\t\t\telementHeight.value = height;\n\t\t\telementWidth.value = width;\n\t\t\tconst elX = x.value - elementPositionX.value;\n\t\t\tconst elY = y.value - elementPositionY.value;\n\t\t\tisOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n\t\t\tif (handleOutside || !isOutside.value) {\n\t\t\t\telementX.value = elX;\n\t\t\t\telementY.value = elY;\n\t\t\t}\n\t\t\tif (!isOutside.value) break;\n\t\t}\n\t}\n\tconst stopFnList = [];\n\tfunction stop() {\n\t\tstopFnList.forEach((fn) => fn());\n\t\tstopFnList.length = 0;\n\t}\n\ttryOnMounted(() => {\n\t\tupdate();\n\t});\n\tif (window) {\n\t\tconst { stop: stopResizeObserver } = useResizeObserver(targetRef, update);\n\t\tconst { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: [\"style\", \"class\"] });\n\t\tconst stopWatch = watch([\n\t\t\ttargetRef,\n\t\t\tx,\n\t\t\ty\n\t\t], update);\n\t\tstopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch);\n\t\tuseEventListener(document, \"mouseleave\", () => isOutside.value = true, { passive: true });\n\t\tif (windowScroll) stopFnList.push(useEventListener(\"scroll\", update, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t}));\n\t\tif (windowResize) stopFnList.push(useEventListener(\"resize\", update, { passive: true }));\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType,\n\t\telementX,\n\t\telementY,\n\t\telementPositionX,\n\t\telementPositionY,\n\t\telementHeight,\n\t\telementWidth,\n\t\tisOutside,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useMousePressed/index.ts\n/**\n* Reactive mouse pressing state.\n*\n* @see https://vueuse.org/useMousePressed\n* @param options\n*/\nfunction useMousePressed(options = {}) {\n\tconst { touch = true, drag = true, capture = false, initialValue = false, window = defaultWindow } = options;\n\tconst pressed = shallowRef(initialValue);\n\tconst sourceType = shallowRef(null);\n\tif (!window) return {\n\t\tpressed,\n\t\tsourceType\n\t};\n\tconst onPressed = (srcType) => (event) => {\n\t\tvar _options$onPressed;\n\t\tpressed.value = true;\n\t\tsourceType.value = srcType;\n\t\t(_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event);\n\t};\n\tconst onReleased = (event) => {\n\t\tvar _options$onReleased;\n\t\tpressed.value = false;\n\t\tsourceType.value = null;\n\t\t(_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event);\n\t};\n\tconst target = computed(() => unrefElement(options.target) || window);\n\tconst listenerOptions = {\n\t\tpassive: true,\n\t\tcapture\n\t};\n\tuseEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n\tuseEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n\tuseEventListener(window, \"mouseup\", onReleased, listenerOptions);\n\tif (drag) {\n\t\tuseEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n\t\tuseEventListener(window, \"drop\", onReleased, listenerOptions);\n\t\tuseEventListener(window, \"dragend\", onReleased, listenerOptions);\n\t}\n\tif (touch) {\n\t\tuseEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n\t\tuseEventListener(window, \"touchend\", onReleased, listenerOptions);\n\t\tuseEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n\t}\n\treturn {\n\t\tpressed,\n\t\tsourceType\n\t};\n}\n//#endregion\n//#region useNavigatorLanguage/index.ts\n/**\n*\n* Reactive useNavigatorLanguage\n*\n* Detects the currently selected user language and returns a reactive language\n* @see https://vueuse.org/useNavigatorLanguage\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNavigatorLanguage(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst navigator = window === null || window === void 0 ? void 0 : window.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"language\" in navigator);\n\tconst language = shallowRef(navigator === null || navigator === void 0 ? void 0 : navigator.language);\n\tuseEventListener(window, \"languagechange\", () => {\n\t\tif (navigator) language.value = navigator.language;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tlanguage\n\t};\n}\n//#endregion\n//#region useNetwork/index.ts\n/**\n* Reactive Network status.\n*\n* @see https://vueuse.org/useNetwork\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNetwork(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst navigator = window === null || window === void 0 ? void 0 : window.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"connection\" in navigator);\n\tconst isOnline = shallowRef(true);\n\tconst saveData = shallowRef(false);\n\tconst offlineAt = shallowRef(void 0);\n\tconst onlineAt = shallowRef(void 0);\n\tconst downlink = shallowRef(void 0);\n\tconst downlinkMax = shallowRef(void 0);\n\tconst rtt = shallowRef(void 0);\n\tconst effectiveType = shallowRef(void 0);\n\tconst type = shallowRef(\"unknown\");\n\tconst connection = isSupported.value && navigator.connection;\n\tfunction updateNetworkInformation() {\n\t\tif (!navigator) return;\n\t\tisOnline.value = navigator.onLine;\n\t\tofflineAt.value = isOnline.value ? void 0 : Date.now();\n\t\tonlineAt.value = isOnline.value ? Date.now() : void 0;\n\t\tif (connection) {\n\t\t\tdownlink.value = connection.downlink;\n\t\t\tdownlinkMax.value = connection.downlinkMax;\n\t\t\teffectiveType.value = connection.effectiveType;\n\t\t\trtt.value = connection.rtt;\n\t\t\tsaveData.value = connection.saveData;\n\t\t\ttype.value = connection.type;\n\t\t}\n\t}\n\tconst listenerOptions = { passive: true };\n\tif (window) {\n\t\tuseEventListener(window, \"offline\", () => {\n\t\t\tisOnline.value = false;\n\t\t\tofflineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window, \"online\", () => {\n\t\t\tisOnline.value = true;\n\t\t\tonlineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t}\n\tif (connection) useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n\tupdateNetworkInformation();\n\treturn {\n\t\tisSupported,\n\t\tisOnline: shallowReadonly(isOnline),\n\t\tsaveData: shallowReadonly(saveData),\n\t\tofflineAt: shallowReadonly(offlineAt),\n\t\tonlineAt: shallowReadonly(onlineAt),\n\t\tdownlink: shallowReadonly(downlink),\n\t\tdownlinkMax: shallowReadonly(downlinkMax),\n\t\teffectiveType: shallowReadonly(effectiveType),\n\t\trtt: shallowReadonly(rtt),\n\t\ttype: shallowReadonly(type)\n\t};\n}\n//#endregion\n//#region useNow/index.ts\nfunction getDefaultScheduler$5(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (fn) => useRafFn(fn, { immediate }) : (fn) => useIntervalFn(fn, interval, options);\n\t}\n\treturn useRafFn;\n}\n/**\n* Reactive current Date instance.\n*\n* @see https://vueuse.org/useNow\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNow(options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$5(options) } = options;\n\tconst now = shallowRef(/* @__PURE__ */ new Date());\n\tconst update = () => now.value = /* @__PURE__ */ new Date();\n\tconst controls = scheduler(update);\n\tif (exposeControls) return {\n\t\tnow,\n\t\t...controls\n\t};\n\telse return now;\n}\n//#endregion\n//#region useObjectUrl/index.ts\n/**\n* Reactive URL representing an object.\n*\n* @see https://vueuse.org/useObjectUrl\n* @param object\n*/\nfunction useObjectUrl(object) {\n\tconst url = shallowRef();\n\tconst release = () => {\n\t\tif (url.value) URL.revokeObjectURL(url.value);\n\t\turl.value = void 0;\n\t};\n\twatch(() => toValue(object), (newObject) => {\n\t\trelease();\n\t\tif (newObject) url.value = URL.createObjectURL(newObject);\n\t}, { immediate: true });\n\ttryOnScopeDispose(release);\n\treturn shallowReadonly(url);\n}\n//#endregion\n//#region ../math/useClamp/index.ts\n/**\n* Reactively clamp a value between two other values.\n*\n* @see https://vueuse.org/useClamp\n* @param value number\n* @param min\n* @param max\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useClamp(value, min, max) {\n\tif (typeof value === \"function\" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n\tconst _value = ref(value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn _value.value = clamp(_value.value, toValue(min), toValue(max));\n\t\t},\n\t\tset(value) {\n\t\t\t_value.value = clamp(value, toValue(min), toValue(max));\n\t\t}\n\t});\n}\n//#endregion\n//#region useOffsetPagination/index.ts\nfunction useOffsetPagination(options) {\n\tconst { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options;\n\tconst currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n\tconst pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(currentPageSize))));\n\tconst currentPage = useClamp(page, 1, pageCount);\n\tconst isFirstPage = computed(() => currentPage.value === 1);\n\tconst isLastPage = computed(() => currentPage.value === pageCount.value);\n\tif (isRef(page)) syncRef(page, currentPage, { direction: isReadonly(page) ? \"ltr\" : \"both\" });\n\tif (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? \"ltr\" : \"both\" });\n\tfunction prev() {\n\t\tcurrentPage.value--;\n\t}\n\tfunction next() {\n\t\tcurrentPage.value++;\n\t}\n\tconst returnValue = {\n\t\tcurrentPage,\n\t\tcurrentPageSize,\n\t\tpageCount,\n\t\tisFirstPage,\n\t\tisLastPage,\n\t\tprev,\n\t\tnext\n\t};\n\twatch(currentPage, () => {\n\t\tonPageChange(reactive(returnValue));\n\t});\n\twatch(currentPageSize, () => {\n\t\tonPageSizeChange(reactive(returnValue));\n\t});\n\twatch(pageCount, () => {\n\t\tonPageCountChange(reactive(returnValue));\n\t});\n\treturn returnValue;\n}\n//#endregion\n//#region useOnline/index.ts\n/**\n* Reactive online state.\n*\n* @see https://vueuse.org/useOnline\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useOnline(options = {}) {\n\tconst { isOnline } = useNetwork(options);\n\treturn isOnline;\n}\n//#endregion\n//#region usePageLeave/index.ts\n/**\n* Reactive state to show whether mouse leaves the page.\n*\n* @see https://vueuse.org/usePageLeave\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePageLeave(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isLeft = shallowRef(false);\n\tconst handler = (event) => {\n\t\tif (!window) return;\n\t\tevent = event || window.event;\n\t\tisLeft.value = !(event.relatedTarget || event.toElement);\n\t};\n\tif (window) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window, \"mouseout\", handler, listenerOptions);\n\t\tuseEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n\t\tuseEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n\t}\n\treturn isLeft;\n}\n//#endregion\n//#region useScreenOrientation/index.ts\n/**\n* Reactive screen orientation\n*\n* @see https://vueuse.org/useScreenOrientation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useScreenOrientation(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n\tconst screenOrientation = isSupported.value ? window.screen.orientation : {};\n\tconst orientation = shallowRef(screenOrientation.type);\n\tconst angle = shallowRef(screenOrientation.angle || 0);\n\tif (isSupported.value) useEventListener(window, \"orientationchange\", () => {\n\t\torientation.value = screenOrientation.type;\n\t\tangle.value = screenOrientation.angle;\n\t}, { passive: true });\n\tconst lockOrientation = (type) => {\n\t\tif (isSupported.value && typeof screenOrientation.lock === \"function\") return screenOrientation.lock(type);\n\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Not supported\"));\n\t};\n\tconst unlockOrientation = () => {\n\t\tif (isSupported.value && typeof screenOrientation.unlock === \"function\") screenOrientation.unlock();\n\t};\n\treturn {\n\t\tisSupported,\n\t\torientation,\n\t\tangle,\n\t\tlockOrientation,\n\t\tunlockOrientation\n\t};\n}\n//#endregion\n//#region useParallax/index.ts\n/**\n* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`\n* if orientation is not supported.\n*\n* @param target\n* @param options\n*/\nfunction useParallax(target, options = {}) {\n\tconst { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window = defaultWindow } = options;\n\tconst orientation = reactive(useDeviceOrientation({ window }));\n\tconst screenOrientation = reactive(useScreenOrientation({ window }));\n\tconst { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, {\n\t\thandleOutside: false,\n\t\twindow\n\t});\n\tconst source = computed(() => {\n\t\tif (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return \"deviceOrientation\";\n\t\treturn \"mouse\";\n\t});\n\treturn {\n\t\troll: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = -orientation.beta / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationRollAdjust(value);\n\t\t\t} else return mouseRollAdjust(-(y.value - height.value / 2) / height.value);\n\t\t}),\n\t\ttilt: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = orientation.gamma / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationTiltAdjust(value);\n\t\t\t} else return mouseTiltAdjust((x.value - width.value / 2) / width.value);\n\t\t}),\n\t\tsource\n\t};\n}\n//#endregion\n//#region useParentElement/index.ts\nfunction useParentElement(element = useCurrentElement()) {\n\tconst parentElement = shallowRef();\n\tconst update = () => {\n\t\tconst el = unrefElement(element);\n\t\tif (el) parentElement.value = el.parentElement;\n\t};\n\ttryOnMounted(update);\n\twatch(() => toValue(element), update);\n\treturn parentElement;\n}\n//#endregion\n//#region usePerformanceObserver/index.ts\n/**\n* Observe performance metrics.\n*\n* @see https://vueuse.org/usePerformanceObserver\n* @param options\n*/\nfunction usePerformanceObserver(options, callback) {\n\tconst { window = defaultWindow, immediate = true, ...performanceOptions } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window && \"PerformanceObserver\" in window);\n\tlet observer;\n\tconst stop = () => {\n\t\tobserver === null || observer === void 0 || observer.disconnect();\n\t};\n\tconst start = () => {\n\t\tif (isSupported.value) {\n\t\t\tstop();\n\t\t\tobserver = new PerformanceObserver(callback);\n\t\t\tobserver.observe(performanceOptions);\n\t\t}\n\t};\n\ttryOnScopeDispose(stop);\n\tif (immediate) start();\n\treturn {\n\t\tisSupported,\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region usePointer/index.ts\nconst defaultState = (/* #__PURE__ */ {\n\tx: 0,\n\ty: 0,\n\tpointerId: 0,\n\tpressure: 0,\n\ttiltX: 0,\n\ttiltY: 0,\n\twidth: 0,\n\theight: 0,\n\ttwist: 0,\n\tpointerType: null\n});\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\n/**\n* Reactive pointer state.\n*\n* @see https://vueuse.org/usePointer\n* @param options\n*/\nfunction usePointer(options = {}) {\n\tconst { target = defaultWindow } = options;\n\tconst isInside = shallowRef(false);\n\tconst state = shallowRef(options.initialValue || {});\n\tObject.assign(state.value, defaultState, state.value);\n\tconst handler = (event) => {\n\t\tisInside.value = true;\n\t\tif (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) return;\n\t\tstate.value = objectPick(event, keys, false);\n\t};\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"pointerup\"\n\t\t], handler, listenerOptions);\n\t\tuseEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n\t}\n\treturn {\n\t\t...toRefs(state),\n\t\tisInside\n\t};\n}\n//#endregion\n//#region usePointerLock/index.ts\n/**\n* Reactive pointer lock.\n*\n* @see https://vueuse.org/usePointerLock\n* @param target\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePointerLock(target, options = {}) {\n\tconst { document = defaultDocument } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => document && \"pointerLockElement\" in document);\n\tconst element = shallowRef();\n\tconst triggerElement = shallowRef();\n\tlet targetElement;\n\tif (isSupported.value) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(document, \"pointerlockchange\", () => {\n\t\t\tvar _pointerLockElement;\n\t\t\tconst currentElement = (_pointerLockElement = document.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\telement.value = document.pointerLockElement;\n\t\t\t\tif (!element.value) targetElement = triggerElement.value = null;\n\t\t\t}\n\t\t}, listenerOptions);\n\t\tuseEventListener(document, \"pointerlockerror\", () => {\n\t\t\tvar _pointerLockElement2;\n\t\t\tconst currentElement = (_pointerLockElement2 = document.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\tconst action = document.pointerLockElement ? \"release\" : \"acquire\";\n\t\t\t\tthrow new Error(`Failed to ${action} pointer lock.`);\n\t\t\t}\n\t\t}, listenerOptions);\n\t}\n\tasync function lock(e) {\n\t\tvar _unrefElement;\n\t\tif (!isSupported.value) throw new Error(\"Pointer Lock API is not supported by your browser.\");\n\t\ttriggerElement.value = e instanceof Event ? e.currentTarget : null;\n\t\ttargetElement = e instanceof Event ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e);\n\t\tif (!targetElement) throw new Error(\"Target element undefined.\");\n\t\ttargetElement.requestPointerLock();\n\t\treturn await until(element).toBe(targetElement);\n\t}\n\tasync function unlock() {\n\t\tif (!element.value) return false;\n\t\tdocument.exitPointerLock();\n\t\tawait until(element).toBeNull();\n\t\treturn true;\n\t}\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\ttriggerElement,\n\t\tlock,\n\t\tunlock\n\t};\n}\n//#endregion\n//#region usePointerSwipe/index.ts\n/**\n* Reactive swipe detection based on PointerEvents.\n*\n* @see https://vueuse.org/usePointerSwipe\n* @param target\n* @param options\n*/\nfunction usePointerSwipe(target, options = {}) {\n\tconst targetRef = toRef(target);\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = options;\n\tconst posStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosStart = (x, y) => {\n\t\tposStart.x = x;\n\t\tposStart.y = y;\n\t};\n\tconst posEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosEnd = (x, y) => {\n\t\tposEnd.x = x;\n\t\tposEnd.y = y;\n\t};\n\tconst distanceX = computed(() => posStart.x - posEnd.x);\n\tconst distanceY = computed(() => posStart.y - posEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst isPointerDown = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? \"left\" : \"right\";\n\t\telse return distanceY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst eventIsAllowed = (e) => {\n\t\tvar _ref, _options$pointerTypes, _options$pointerTypes2;\n\t\tconst isReleasingButton = e.buttons === 0;\n\t\tconst isPrimaryButton = e.buttons === 1;\n\t\treturn (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true;\n\t};\n\tconst listenerOptions = { passive: true };\n\tconst stops = [\n\t\tuseEventListener(target, \"pointerdown\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tisPointerDown.value = true;\n\t\t\tconst eventTarget = e.target;\n\t\t\teventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId);\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosStart(x, y);\n\t\t\tupdatePosEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointermove\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (!isPointerDown.value) return;\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosEnd(x, y);\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointerup\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\t\tisPointerDown.value = false;\n\t\t\tisSwiping.value = false;\n\t\t}, listenerOptions)\n\t];\n\ttryOnMounted(() => {\n\t\tvar _targetRef$value;\n\t\t(_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty(\"touch-action\", \"pan-y\");\n\t\tif (disableTextSelect) {\n\t\t\tvar _targetRef$value2, _targetRef$value3, _targetRef$value4;\n\t\t\t(_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty(\"-webkit-user-select\", \"none\");\n\t\t\t(_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty(\"-ms-user-select\", \"none\");\n\t\t\t(_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty(\"user-select\", \"none\");\n\t\t}\n\t});\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping: shallowReadonly(isSwiping),\n\t\tdirection: shallowReadonly(direction),\n\t\tposStart: readonly(posStart),\n\t\tposEnd: readonly(posEnd),\n\t\tdistanceX,\n\t\tdistanceY,\n\t\tstop\n\t};\n}\n//#endregion\n//#region usePreferredColorScheme/index.ts\n/**\n* Reactive prefers-color-scheme media query.\n*\n* @see https://vueuse.org/usePreferredColorScheme\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredColorScheme(options) {\n\tconst isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n\tconst isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n\treturn computed(() => {\n\t\tif (isDark.value) return \"dark\";\n\t\tif (isLight.value) return \"light\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredContrast/index.ts\n/**\n* Reactive prefers-contrast media query.\n*\n* @see https://vueuse.org/usePreferredContrast\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredContrast(options) {\n\tconst isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n\tconst isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n\tconst isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n\treturn computed(() => {\n\t\tif (isMore.value) return \"more\";\n\t\tif (isLess.value) return \"less\";\n\t\tif (isCustom.value) return \"custom\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredLanguages/index.ts\n/**\n* Reactive Navigator Languages.\n*\n* @see https://vueuse.org/usePreferredLanguages\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredLanguages(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tif (!window) return shallowRef([\"en\"]);\n\tconst navigator = window.navigator;\n\tconst value = shallowRef(navigator.languages);\n\tuseEventListener(window, \"languagechange\", () => {\n\t\tvalue.value = navigator.languages;\n\t}, { passive: true });\n\treturn value;\n}\n//#endregion\n//#region usePreferredReducedMotion/index.ts\n/**\n* Reactive prefers-reduced-motion media query.\n*\n* @see https://vueuse.org/usePreferredReducedMotion\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedMotion(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePreferredReducedTransparency/index.ts\n/**\n* Reactive prefers-reduced-transparency media query.\n*\n* @see https://vueuse.org/usePreferredReducedTransparency\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedTransparency(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n//#endregion\n//#region usePrevious/index.ts\nfunction usePrevious(value, initialValue) {\n\tconst previous = shallowRef(initialValue);\n\twatch(toRef(value), (_, oldValue) => {\n\t\tprevious.value = oldValue;\n\t}, { flush: \"sync\" });\n\treturn readonly(previous);\n}\n//#endregion\n//#region useScreenSafeArea/index.ts\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\n/**\n* Reactive `env(safe-area-inset-*)`\n*\n* @see https://vueuse.org/useScreenSafeArea\n*/\nfunction useScreenSafeArea() {\n\tconst top = shallowRef(\"\");\n\tconst right = shallowRef(\"\");\n\tconst bottom = shallowRef(\"\");\n\tconst left = shallowRef(\"\");\n\tif (isClient) {\n\t\tconst topCssVar = useCssVar(topVarName);\n\t\tconst rightCssVar = useCssVar(rightVarName);\n\t\tconst bottomCssVar = useCssVar(bottomVarName);\n\t\tconst leftCssVar = useCssVar(leftVarName);\n\t\ttopCssVar.value = \"env(safe-area-inset-top, 0px)\";\n\t\trightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n\t\tbottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n\t\tleftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n\t\ttryOnMounted(update);\n\t\tuseEventListener(\"resize\", useDebounceFn(update), { passive: true });\n\t}\n\tfunction update() {\n\t\ttop.value = getValue(topVarName);\n\t\tright.value = getValue(rightVarName);\n\t\tbottom.value = getValue(bottomVarName);\n\t\tleft.value = getValue(leftVarName);\n\t}\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\tupdate\n\t};\n}\nfunction getValue(position) {\n\treturn getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n//#endregion\n//#region useScriptTag/index.ts\n/**\n* Async script tag loading.\n*\n* @see https://vueuse.org/useScriptTag\n* @param src\n* @param onLoaded\n* @param options\n*/\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n\tconst { immediate = true, manual = false, type = \"text/javascript\", async = true, crossOrigin, referrerPolicy, noModule, defer, document = defaultDocument, attrs = {}, nonce = void 0 } = options;\n\tconst scriptTag = shallowRef(null);\n\tlet _promise = null;\n\t/**\n\t* Load the script specified via `src`.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n\t\tconst resolveWithElement = (el) => {\n\t\t\tscriptTag.value = el;\n\t\t\tresolve(el);\n\t\t\treturn el;\n\t\t};\n\t\tif (!document) {\n\t\t\tresolve(false);\n\t\t\treturn;\n\t\t}\n\t\tlet shouldAppend = false;\n\t\tlet el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (!el) {\n\t\t\tel = document.createElement(\"script\");\n\t\t\tel.type = type;\n\t\t\tel.async = async;\n\t\t\tel.src = toValue(src);\n\t\t\tif (defer) el.defer = defer;\n\t\t\tif (crossOrigin) el.crossOrigin = crossOrigin;\n\t\t\tif (noModule) el.noModule = noModule;\n\t\t\tif (referrerPolicy) el.referrerPolicy = referrerPolicy;\n\t\t\tif (nonce) el.nonce = nonce;\n\t\t\tObject.entries(attrs).forEach(([name, value]) => el === null || el === void 0 ? void 0 : el.setAttribute(name, value));\n\t\t\tshouldAppend = true;\n\t\t} else if (el.hasAttribute(\"data-loaded\")) resolveWithElement(el);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(el, \"error\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"abort\", (event) => reject(event), listenerOptions);\n\t\tuseEventListener(el, \"load\", () => {\n\t\t\tel.setAttribute(\"data-loaded\", \"true\");\n\t\t\tonLoaded(el);\n\t\t\tresolveWithElement(el);\n\t\t}, listenerOptions);\n\t\tif (shouldAppend) el = document.head.appendChild(el);\n\t\tif (!waitForScriptLoad) resolveWithElement(el);\n\t});\n\t/**\n\t* Exposed singleton wrapper for `loadScript`, avoiding calling it twice.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the <script> attribute, or right after appending it to the DOM.\n\t* @returns Promise<HTMLScriptElement>\n\t*/\n\tconst load = (waitForScriptLoad = true) => {\n\t\tif (!_promise) _promise = loadScript(waitForScriptLoad);\n\t\treturn _promise;\n\t};\n\t/**\n\t* Unload the script specified by `src`.\n\t*/\n\tconst unload = () => {\n\t\tif (!document) return;\n\t\t_promise = null;\n\t\tif (scriptTag.value) scriptTag.value = null;\n\t\tconst el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n\t\tif (el) document.head.removeChild(el);\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnUnmounted(unload);\n\treturn {\n\t\tscriptTag,\n\t\tload,\n\t\tunload\n\t};\n}\n//#endregion\n//#region useScrollLock/index.ts\nfunction checkOverflowScroll(ele) {\n\tconst style = window.getComputedStyle(ele);\n\tif (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) return true;\n\telse {\n\t\tconst parent = ele.parentNode;\n\t\tif (!parent || parent.tagName === \"BODY\") return false;\n\t\treturn checkOverflowScroll(parent);\n\t}\n}\nfunction preventDefault(rawEvent) {\n\tconst e = rawEvent || window.event;\n\tconst _target = e.target;\n\tif (checkOverflowScroll(_target)) return false;\n\tif (e.touches.length > 1) return true;\n\tif (e.preventDefault) e.preventDefault();\n\treturn false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\n/**\n* Lock scrolling of the element.\n*\n* @see https://vueuse.org/useScrollLock\n* @param element\n*/\nfunction useScrollLock(element, initialState = false) {\n\tconst isLocked = shallowRef(initialState);\n\tlet stopTouchMoveListener = null;\n\tlet initialOverflow = \"\";\n\twatch(toRef(element), (el) => {\n\t\tconst target = resolveElement(toValue(el));\n\t\tif (target) {\n\t\t\tconst ele = target;\n\t\t\tif (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow);\n\t\t\tif (ele.style.overflow !== \"hidden\") initialOverflow = ele.style.overflow;\n\t\t\tif (ele.style.overflow === \"hidden\") return isLocked.value = true;\n\t\t\tif (isLocked.value) return ele.style.overflow = \"hidden\";\n\t\t}\n\t}, { immediate: true });\n\tconst lock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener = useEventListener(el, \"touchmove\", (e) => {\n\t\t\tpreventDefault(e);\n\t\t}, { passive: false });\n\t\tel.style.overflow = \"hidden\";\n\t\tisLocked.value = true;\n\t};\n\tconst unlock = () => {\n\t\tconst el = resolveElement(toValue(element));\n\t\tif (!el || !isLocked.value) return;\n\t\tif (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener();\n\t\tel.style.overflow = initialOverflow;\n\t\telInitialOverflow.delete(el);\n\t\tisLocked.value = false;\n\t};\n\ttryOnScopeDispose(unlock);\n\treturn computed({\n\t\tget() {\n\t\t\treturn isLocked.value;\n\t\t},\n\t\tset(v) {\n\t\t\tif (v) lock();\n\t\t\telse unlock();\n\t\t}\n\t});\n}\n//#endregion\n//#region useSessionStorage/index.ts\n/**\n* Reactive SessionStorage.\n*\n* @see https://vueuse.org/useSessionStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useSessionStorage(key, initialValue, options = {}) {\n\tconst { window = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window === null || window === void 0 ? void 0 : window.sessionStorage, options);\n}\n//#endregion\n//#region useShare/index.ts\n/**\n* Reactive Web Share API.\n*\n* @see https://vueuse.org/useShare\n* @param shareOptions\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useShare(shareOptions = {}, options = {}) {\n\tconst { navigator = defaultNavigator } = options;\n\tconst _navigator = navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => _navigator && \"canShare\" in _navigator);\n\tconst share = async (overrideOptions = {}) => {\n\t\tif (isSupported.value) {\n\t\t\tconst data = {\n\t\t\t\t...toValue(shareOptions),\n\t\t\t\t...toValue(overrideOptions)\n\t\t\t};\n\t\t\tlet granted = false;\n\t\t\tif (_navigator.canShare) granted = _navigator.canShare(data);\n\t\t\tif (granted) return _navigator.share(data);\n\t\t}\n\t};\n\treturn {\n\t\tisSupported,\n\t\tshare\n\t};\n}\n//#endregion\n//#region useSorted/index.ts\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n\tconst [source] = args;\n\tlet compareFn = defaultCompare;\n\tlet options = {};\n\tif (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tvar _options$compareFn;\n\t\toptions = args[1];\n\t\tcompareFn = (_options$compareFn = options.compareFn) !== null && _options$compareFn !== void 0 ? _options$compareFn : defaultCompare;\n\t} else {\n\t\tvar _args$;\n\t\tcompareFn = (_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : defaultCompare;\n\t}\n\telse if (args.length > 2) {\n\t\tvar _args$2, _args$3;\n\t\tcompareFn = (_args$2 = args[1]) !== null && _args$2 !== void 0 ? _args$2 : defaultCompare;\n\t\toptions = (_args$3 = args[2]) !== null && _args$3 !== void 0 ? _args$3 : {};\n\t}\n\tconst { dirty = false, sortFn = defaultSortFn } = options;\n\tif (!dirty) return computed(() => sortFn([...toValue(source)], compareFn));\n\twatchEffect(() => {\n\t\tconst result = sortFn(toValue(source), compareFn);\n\t\tif (isRef(source)) source.value = result;\n\t\telse source.splice(0, source.length, ...result);\n\t});\n\treturn source;\n}\n//#endregion\n//#region useSpeechRecognition/index.ts\n/**\n* Reactive SpeechRecognition.\n*\n* @see https://vueuse.org/useSpeechRecognition\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition SpeechRecognition\n* @param options\n*/\nfunction useSpeechRecognition(options = {}) {\n\tconst { interimResults = true, continuous = true, maxAlternatives = 1, window = defaultWindow } = options;\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst isListening = shallowRef(false);\n\tconst isFinal = shallowRef(false);\n\tconst result = shallowRef(\"\");\n\tconst error = shallowRef(void 0);\n\tlet recognition;\n\tconst start = () => {\n\t\tisListening.value = true;\n\t};\n\tconst stop = () => {\n\t\tisListening.value = false;\n\t};\n\tconst toggle = (value = !isListening.value) => {\n\t\tif (value) start();\n\t\telse stop();\n\t};\n\tconst SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => SpeechRecognition);\n\tif (isSupported.value) {\n\t\trecognition = new SpeechRecognition();\n\t\trecognition.continuous = continuous;\n\t\trecognition.interimResults = interimResults;\n\t\trecognition.lang = toValue(lang);\n\t\trecognition.maxAlternatives = maxAlternatives;\n\t\trecognition.onstart = () => {\n\t\t\tisListening.value = true;\n\t\t\tisFinal.value = false;\n\t\t};\n\t\twatch(lang, (lang) => {\n\t\t\tif (recognition && !isListening.value) recognition.lang = lang;\n\t\t});\n\t\trecognition.onresult = (event) => {\n\t\t\tconst currentResult = event.results[event.resultIndex];\n\t\t\tconst { transcript } = currentResult[0];\n\t\t\tisFinal.value = currentResult.isFinal;\n\t\t\tresult.value = transcript;\n\t\t\terror.value = void 0;\n\t\t};\n\t\trecognition.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\trecognition.onend = () => {\n\t\t\tisListening.value = false;\n\t\t\trecognition.lang = toValue(lang);\n\t\t};\n\t\twatch(isListening, (newValue, oldValue) => {\n\t\t\tif (newValue === oldValue) return;\n\t\t\ttry {\n\t\t\t\tif (newValue) recognition.start();\n\t\t\t\telse recognition.stop();\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisListening,\n\t\tisFinal,\n\t\trecognition,\n\t\tresult,\n\t\terror,\n\t\ttoggle,\n\t\tstart,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useSpeechSynthesis/index.ts\n/**\n* Reactive SpeechSynthesis.\n*\n* @see https://vueuse.org/useSpeechSynthesis\n* @see https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis SpeechSynthesis\n*/\nfunction useSpeechSynthesis(text, options = {}) {\n\tconst { pitch = 1, rate = 1, volume = 1, window = defaultWindow, onBoundary } = options;\n\tconst synth = window && window.speechSynthesis;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => synth);\n\tconst isPlaying = shallowRef(false);\n\tconst status = shallowRef(\"init\");\n\tconst spokenText = toRef(text || \"\");\n\tconst lang = toRef(options.lang || \"en-US\");\n\tconst error = shallowRef(void 0);\n\tconst toggle = (value = !isPlaying.value) => {\n\t\tisPlaying.value = value;\n\t};\n\tconst bindEventsForUtterance = (utterance) => {\n\t\tutterance.lang = toValue(lang);\n\t\tutterance.voice = toValue(options.voice) || null;\n\t\tutterance.pitch = toValue(pitch);\n\t\tutterance.rate = toValue(rate);\n\t\tutterance.volume = toValue(volume);\n\t\tutterance.onstart = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance.onpause = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"pause\";\n\t\t};\n\t\tutterance.onresume = () => {\n\t\t\tisPlaying.value = true;\n\t\t\tstatus.value = \"play\";\n\t\t};\n\t\tutterance.onend = () => {\n\t\t\tisPlaying.value = false;\n\t\t\tstatus.value = \"end\";\n\t\t};\n\t\tutterance.onerror = (event) => {\n\t\t\terror.value = event;\n\t\t};\n\t\tutterance.onboundary = (event) => {\n\t\t\tonBoundary === null || onBoundary === void 0 || onBoundary(event);\n\t\t};\n\t};\n\tconst utterance = computed(() => {\n\t\tisPlaying.value = false;\n\t\tstatus.value = \"init\";\n\t\tconst newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n\t\tbindEventsForUtterance(newUtterance);\n\t\treturn newUtterance;\n\t});\n\tconst speak = () => {\n\t\tsynth.cancel();\n\t\tif (utterance) synth.speak(utterance.value);\n\t};\n\tconst stop = () => {\n\t\tsynth.cancel();\n\t\tisPlaying.value = false;\n\t};\n\tif (isSupported.value) {\n\t\tbindEventsForUtterance(utterance.value);\n\t\twatch(lang, (lang) => {\n\t\t\tif (utterance.value && !isPlaying.value) utterance.value.lang = lang;\n\t\t});\n\t\tif (options.voice) watch(options.voice, () => {\n\t\t\tsynth.cancel();\n\t\t});\n\t\twatch(isPlaying, () => {\n\t\t\tif (isPlaying.value) synth.resume();\n\t\t\telse synth.pause();\n\t\t});\n\t}\n\ttryOnScopeDispose(() => {\n\t\tisPlaying.value = false;\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisPlaying,\n\t\tstatus,\n\t\tutterance,\n\t\terror,\n\t\tstop,\n\t\ttoggle,\n\t\tspeak\n\t};\n}\n//#endregion\n//#region useStepper/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useStepper(steps, initialStep) {\n\tconst stepsRef = ref(steps);\n\tconst stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n\tconst index = ref(stepNames.value.indexOf(initialStep !== null && initialStep !== void 0 ? initialStep : stepNames.value[0]));\n\tconst current = computed(() => at(index.value));\n\tconst isFirst = computed(() => index.value === 0);\n\tconst isLast = computed(() => index.value === stepNames.value.length - 1);\n\tconst next = computed(() => stepNames.value[index.value + 1]);\n\tconst previous = computed(() => stepNames.value[index.value - 1]);\n\tfunction at(index) {\n\t\tif (Array.isArray(stepsRef.value)) return stepsRef.value[index];\n\t\treturn stepsRef.value[stepNames.value[index]];\n\t}\n\tfunction get(step) {\n\t\tif (!stepNames.value.includes(step)) return;\n\t\treturn at(stepNames.value.indexOf(step));\n\t}\n\tfunction goTo(step) {\n\t\tif (stepNames.value.includes(step)) index.value = stepNames.value.indexOf(step);\n\t}\n\tfunction goToNext() {\n\t\tif (isLast.value) return;\n\t\tindex.value++;\n\t}\n\tfunction goToPrevious() {\n\t\tif (isFirst.value) return;\n\t\tindex.value--;\n\t}\n\tfunction goBackTo(step) {\n\t\tif (isAfter(step)) goTo(step);\n\t}\n\tfunction isNext(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value + 1;\n\t}\n\tfunction isPrevious(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value - 1;\n\t}\n\tfunction isCurrent(step) {\n\t\treturn stepNames.value.indexOf(step) === index.value;\n\t}\n\tfunction isBefore(step) {\n\t\treturn index.value < stepNames.value.indexOf(step);\n\t}\n\tfunction isAfter(step) {\n\t\treturn index.value > stepNames.value.indexOf(step);\n\t}\n\treturn {\n\t\tsteps: stepsRef,\n\t\tstepNames,\n\t\tindex,\n\t\tcurrent,\n\t\tnext,\n\t\tprevious,\n\t\tisFirst,\n\t\tisLast,\n\t\tat,\n\t\tget,\n\t\tgoTo,\n\t\tgoToNext,\n\t\tgoToPrevious,\n\t\tgoBackTo,\n\t\tisNext,\n\t\tisPrevious,\n\t\tisCurrent,\n\t\tisBefore,\n\t\tisAfter\n\t};\n}\n//#endregion\n//#region useStorageAsync/index.ts\n/**\n* Reactive Storage with async support.\n*\n* @see https://vueuse.org/useStorageAsync\n* @param key\n* @param initialValue\n* @param storage\n* @param options\n*/\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, onReady } = options;\n\tconst rawInit = toValue(initialValue);\n\tconst type = guessSerializerType(rawInit);\n\tconst data = (shallow ? shallowRef : ref)(toValue(initialValue));\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorageAsync\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tasync function read(event) {\n\t\tif (!storage || event && event.key !== key) return;\n\t\ttry {\n\t\t\tconst rawValue = event ? event.newValue : await storage.getItem(key);\n\t\t\tif (rawValue == null) {\n\t\t\t\tdata.value = rawInit;\n\t\t\t\tif (writeDefaults && rawInit !== null) await storage.setItem(key, await serializer.write(rawInit));\n\t\t\t} else if (mergeDefaults) {\n\t\t\t\tconst value = await serializer.read(rawValue);\n\t\t\t\tif (typeof mergeDefaults === \"function\") data.value = mergeDefaults(value, rawInit);\n\t\t\t\telse if (type === \"object\" && !Array.isArray(value)) data.value = {\n\t\t\t\t\t...rawInit,\n\t\t\t\t\t...value\n\t\t\t\t};\n\t\t\t\telse data.value = value;\n\t\t\t} else data.value = await serializer.read(rawValue);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tconst promise = new Promise((resolve) => {\n\t\tread().then(() => {\n\t\t\tonReady === null || onReady === void 0 || onReady(data.value);\n\t\t\tresolve(data);\n\t\t});\n\t});\n\tif (window && listenToStorageChanges) useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n\tif (storage) watchWithFilter(data, async () => {\n\t\ttry {\n\t\t\tif (data.value == null) await storage.removeItem(key);\n\t\t\telse await storage.setItem(key, await serializer.write(data.value));\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\tObject.assign(data, {\n\t\tthen: promise.then.bind(promise),\n\t\tcatch: promise.catch.bind(promise)\n\t});\n\treturn data;\n}\n//#endregion\n//#region useStyleTag/index.ts\nlet _id = 0;\n/**\n* Inject <style> element in head.\n*\n* Overload: Omitted id\n*\n* @see https://vueuse.org/useStyleTag\n* @param css\n* @param options\n*/\nfunction useStyleTag(css, options = {}) {\n\tconst isLoaded = shallowRef(false);\n\tconst { document = defaultDocument, immediate = true, manual = false, id = `vueuse_styletag_${++_id}` } = options;\n\tconst cssRef = shallowRef(css);\n\tlet stop = () => {};\n\tconst load = () => {\n\t\tif (!document) return;\n\t\tconst el = document.getElementById(id) || document.createElement(\"style\");\n\t\tif (!el.isConnected) {\n\t\t\tel.id = id;\n\t\t\tif (options.nonce) el.nonce = options.nonce;\n\t\t\tif (options.media) el.media = options.media;\n\t\t\tdocument.head.appendChild(el);\n\t\t}\n\t\tif (isLoaded.value) return;\n\t\tstop = watch(cssRef, (value) => {\n\t\t\tel.textContent = value;\n\t\t}, { immediate: true });\n\t\tisLoaded.value = true;\n\t};\n\tconst unload = () => {\n\t\tif (!document || !isLoaded.value) return;\n\t\tstop();\n\t\tdocument.head.removeChild(document.getElementById(id));\n\t\tisLoaded.value = false;\n\t};\n\tif (immediate && !manual) tryOnMounted(load);\n\tif (!manual) tryOnScopeDispose(unload);\n\treturn {\n\t\tid,\n\t\tcss: cssRef,\n\t\tunload,\n\t\tload,\n\t\tisLoaded: shallowReadonly(isLoaded)\n\t};\n}\n//#endregion\n//#region useSwipe/index.ts\n/**\n* Reactive swipe detection.\n*\n* @see https://vueuse.org/useSwipe\n* @param target\n* @param options\n*/\nfunction useSwipe(target, options = {}) {\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = options;\n\tconst coordsStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst coordsEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst diffX = computed(() => coordsStart.x - coordsEnd.x);\n\tconst diffY = computed(() => coordsStart.y - coordsEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? \"left\" : \"right\";\n\t\telse return diffY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n\tconst updateCoordsStart = (x, y) => {\n\t\tcoordsStart.x = x;\n\t\tcoordsStart.y = y;\n\t};\n\tconst updateCoordsEnd = (x, y) => {\n\t\tcoordsEnd.x = x;\n\t\tcoordsEnd.y = y;\n\t};\n\tconst listenerOptions = {\n\t\tpassive,\n\t\tcapture: !passive\n\t};\n\tconst onTouchEnd = (e) => {\n\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\tisSwiping.value = false;\n\t};\n\tconst stops = [\n\t\tuseEventListener(target, \"touchstart\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsStart(x, y);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"touchmove\", (e) => {\n\t\t\tif (e.touches.length !== 1) return;\n\t\t\tconst [x, y] = getTouchEventCoords(e);\n\t\t\tupdateCoordsEnd(x, y);\n\t\t\tif (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault();\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n\t];\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping,\n\t\tdirection,\n\t\tcoordsStart,\n\t\tcoordsEnd,\n\t\tlengthX: diffX,\n\t\tlengthY: diffY,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useTemplateRefsList/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useTemplateRefsList() {\n\tconst refs = ref([]);\n\trefs.value.set = (el) => {\n\t\tif (el) refs.value.push(el);\n\t};\n\tonBeforeUpdate(() => {\n\t\trefs.value.length = 0;\n\t});\n\treturn refs;\n}\n//#endregion\n//#region useTextDirection/index.ts\n/**\n* Reactive dir of the element's text.\n*\n* @see https://vueuse.org/useTextDirection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextDirection(options = {}) {\n\tconst { document = defaultDocument, selector = \"html\", observe = false, initialValue = \"ltr\" } = options;\n\tfunction getValue() {\n\t\tvar _ref, _document$querySelect;\n\t\treturn (_ref = document === null || document === void 0 || (_document$querySelect = document.querySelector(selector)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute(\"dir\")) !== null && _ref !== void 0 ? _ref : initialValue;\n\t}\n\tconst dir = shallowRef(getValue());\n\ttryOnMounted(() => dir.value = getValue());\n\tif (observe && document) useMutationObserver(document.querySelector(selector), () => dir.value = getValue(), { attributes: true });\n\treturn computed({\n\t\tget() {\n\t\t\treturn dir.value;\n\t\t},\n\t\tset(v) {\n\t\t\tvar _document$querySelect2, _document$querySelect3;\n\t\t\tdir.value = v;\n\t\t\tif (!document) return;\n\t\t\tif (dir.value) (_document$querySelect2 = document.querySelector(selector)) === null || _document$querySelect2 === void 0 || _document$querySelect2.setAttribute(\"dir\", dir.value);\n\t\t\telse (_document$querySelect3 = document.querySelector(selector)) === null || _document$querySelect3 === void 0 || _document$querySelect3.removeAttribute(\"dir\");\n\t\t}\n\t});\n}\n//#endregion\n//#region useTextSelection/index.ts\nfunction getRangesFromSelection(selection) {\n\tvar _selection$rangeCount;\n\tconst rangeCount = (_selection$rangeCount = selection.rangeCount) !== null && _selection$rangeCount !== void 0 ? _selection$rangeCount : 0;\n\treturn Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\n/**\n* Reactively track user text selection based on [`Window.getSelection`](https://developer.mozilla.org/en-US/docs/Web/API/Window/getSelection).\n*\n* @see https://vueuse.org/useTextSelection\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTextSelection(options = {}) {\n\tvar _window$getSelection;\n\tconst { window = defaultWindow } = options;\n\tconst selection = shallowRef((_window$getSelection = window === null || window === void 0 ? void 0 : window.getSelection()) !== null && _window$getSelection !== void 0 ? _window$getSelection : null);\n\tconst text = computed(() => {\n\t\tvar _selection$value$toSt, _selection$value;\n\t\treturn (_selection$value$toSt = (_selection$value = selection.value) === null || _selection$value === void 0 ? void 0 : _selection$value.toString()) !== null && _selection$value$toSt !== void 0 ? _selection$value$toSt : \"\";\n\t});\n\tconst ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n\tconst rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n\tfunction onSelectionChange() {\n\t\tselection.value = null;\n\t\tif (window) selection.value = window.getSelection();\n\t}\n\tif (window) useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n\treturn {\n\t\ttext,\n\t\trects,\n\t\tranges,\n\t\tselection\n\t};\n}\n//#endregion\n//#region useTextareaAutosize/index.ts\n/**\n* Call window.requestAnimationFrame(), if not available, just call the function\n*\n* @param window\n* @param fn\n*/\nfunction tryRequestAnimationFrame(window = defaultWindow, fn) {\n\tif (window && typeof window.requestAnimationFrame === \"function\") window.requestAnimationFrame(fn);\n\telse fn();\n}\nfunction useTextareaAutosize(options = {}) {\n\tvar _options$input, _options$styleProp;\n\tconst { window = defaultWindow } = options;\n\tconst textarea = toRef(options === null || options === void 0 ? void 0 : options.element);\n\tconst input = toRef((_options$input = options === null || options === void 0 ? void 0 : options.input) !== null && _options$input !== void 0 ? _options$input : \"\");\n\tconst styleProp = (_options$styleProp = options === null || options === void 0 ? void 0 : options.styleProp) !== null && _options$styleProp !== void 0 ? _options$styleProp : \"height\";\n\tconst textareaScrollHeight = shallowRef(1);\n\tconst textareaOldWidth = shallowRef(0);\n\tfunction triggerResize() {\n\t\tvar _textarea$value;\n\t\tif (!textarea.value) return;\n\t\tlet height = \"\";\n\t\tconst maxHeight = options === null || options === void 0 ? void 0 : options.maxHeight;\n\t\ttextarea.value.style[styleProp] = \"1px\";\n\t\ttextareaScrollHeight.value = (_textarea$value = textarea.value) === null || _textarea$value === void 0 ? void 0 : _textarea$value.scrollHeight;\n\t\tconst _styleTarget = toValue(options === null || options === void 0 ? void 0 : options.styleTarget);\n\t\tconst styleHeight = maxHeight != null ? `${Math.min(textareaScrollHeight.value, maxHeight)}px` : `${textareaScrollHeight.value}px`;\n\t\tif (_styleTarget) _styleTarget.style[styleProp] = styleHeight;\n\t\telse height = styleHeight;\n\t\ttextarea.value.style[styleProp] = height;\n\t}\n\twatch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n\twatch(textareaScrollHeight, () => {\n\t\tvar _options$onResize;\n\t\treturn options === null || options === void 0 || (_options$onResize = options.onResize) === null || _options$onResize === void 0 ? void 0 : _options$onResize.call(options);\n\t});\n\tuseResizeObserver(textarea, ([{ contentRect }]) => {\n\t\tif (textareaOldWidth.value === contentRect.width) return;\n\t\ttryRequestAnimationFrame(window, () => {\n\t\t\ttextareaOldWidth.value = contentRect.width;\n\t\t\ttriggerResize();\n\t\t});\n\t});\n\tif (options === null || options === void 0 ? void 0 : options.watch) watch(options.watch, triggerResize, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\treturn {\n\t\ttextarea,\n\t\tinput,\n\t\ttriggerResize\n\t};\n}\n//#endregion\n//#region useThrottledRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with throttled filter.\n*\n* @see https://vueuse.org/useThrottledRefHistory\n* @param source\n* @param options\n*/\nfunction useThrottledRefHistory(source, options = {}) {\n\tconst { throttle = 200, trailing = true } = options;\n\tconst filter = throttleFilter(throttle, trailing);\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n//#endregion\n//#region useTimeAgo/index.ts\nconst DEFAULT_UNITS = [\n\t{\n\t\tmax: 6e4,\n\t\tvalue: 1e3,\n\t\tname: \"second\"\n\t},\n\t{\n\t\tmax: 276e4,\n\t\tvalue: 6e4,\n\t\tname: \"minute\"\n\t},\n\t{\n\t\tmax: 72e6,\n\t\tvalue: 36e5,\n\t\tname: \"hour\"\n\t},\n\t{\n\t\tmax: 5184e5,\n\t\tvalue: 864e5,\n\t\tname: \"day\"\n\t},\n\t{\n\t\tmax: 24192e5,\n\t\tvalue: 6048e5,\n\t\tname: \"week\"\n\t},\n\t{\n\t\tmax: 28512e6,\n\t\tvalue: 2592e6,\n\t\tname: \"month\"\n\t},\n\t{\n\t\tmax: Number.POSITIVE_INFINITY,\n\t\tvalue: 31536e6,\n\t\tname: \"year\"\n\t}\n];\nconst DEFAULT_MESSAGES = {\n\tjustNow: \"just now\",\n\tpast: (n) => /\\d/.test(n) ? `${n} ago` : n,\n\tfuture: (n) => /\\d/.test(n) ? `in ${n}` : n,\n\tmonth: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n\tyear: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n\tday: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n\tweek: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n\thour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n\tminute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n\tsecond: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n\tinvalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n\treturn date.toISOString().slice(0, 10);\n}\nfunction getDefaultScheduler$4(options) {\n\tif (\"updateInterval\" in options) {\n\t\tconst { updateInterval = 3e4 } = options;\n\t\treturn (cb) => useIntervalFn(cb, updateInterval);\n\t}\n\treturn (cb) => useIntervalFn(cb, 3e4);\n}\n/**\n* Reactive time ago formatter.\n*\n* @see https://vueuse.org/useTimeAgo\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useTimeAgo(time, options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$4(options) } = options;\n\tconst { now, ...controls } = useNow({\n\t\tscheduler,\n\t\tcontrols: true\n\t});\n\tconst timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n\tif (exposeControls) return {\n\t\ttimeAgo,\n\t\t...controls\n\t};\n\telse return timeAgo;\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n\tconst { max, messages = DEFAULT_MESSAGES, fullDateFormatter = DEFAULT_FORMATTER, units = DEFAULT_UNITS, showSecond = false, rounding = \"round\" } = options;\n\tconst roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n\tconst diff = +now - +from;\n\tconst absDiff = Math.abs(diff);\n\tfunction getValue(diff, unit) {\n\t\treturn roundFn(Math.abs(diff) / unit.value);\n\t}\n\tfunction format(diff, unit) {\n\t\tconst val = getValue(diff, unit);\n\t\tconst past = diff > 0;\n\t\tconst str = applyFormat(unit.name, val, past);\n\t\treturn applyFormat(past ? \"past\" : \"future\", str, past);\n\t}\n\tfunction applyFormat(name, val, isPast) {\n\t\tconst formatter = messages[name];\n\t\tif (typeof formatter === \"function\") return formatter(val, isPast);\n\t\treturn formatter.replace(\"{0}\", val.toString());\n\t}\n\tif (absDiff < 6e4 && !showSecond) return messages.justNow;\n\tif (typeof max === \"number\" && absDiff > max) return fullDateFormatter(new Date(from));\n\tif (typeof max === \"string\") {\n\t\tvar _units$find;\n\t\tconst unitMax = (_units$find = units.find((i) => i.name === max)) === null || _units$find === void 0 ? void 0 : _units$find.max;\n\t\tif (unitMax && absDiff > unitMax) return fullDateFormatter(new Date(from));\n\t}\n\tfor (const [idx, unit] of units.entries()) {\n\t\tif (getValue(diff, unit) <= 0 && units[idx - 1]) return format(diff, units[idx - 1]);\n\t\tif (absDiff < unit.max) return format(diff, unit);\n\t}\n\treturn messages.invalid;\n}\n//#endregion\n//#region useTimeAgoIntl/index.ts\nconst UNITS = [\n\t{\n\t\tname: \"year\",\n\t\tms: 31536e6\n\t},\n\t{\n\t\tname: \"month\",\n\t\tms: 2592e6\n\t},\n\t{\n\t\tname: \"week\",\n\t\tms: 6048e5\n\t},\n\t{\n\t\tname: \"day\",\n\t\tms: 864e5\n\t},\n\t{\n\t\tname: \"hour\",\n\t\tms: 36e5\n\t},\n\t{\n\t\tname: \"minute\",\n\t\tms: 6e4\n\t},\n\t{\n\t\tname: \"second\",\n\t\tms: 1e3\n\t}\n];\nfunction getDefaultScheduler$3(options) {\n\tif (\"updateInterval\" in options) {\n\t\tconst { updateInterval = 3e4 } = options;\n\t\treturn (cb) => useIntervalFn(cb, updateInterval);\n\t}\n\treturn (cb) => useIntervalFn(cb, 3e4);\n}\nfunction useTimeAgoIntl(time, options = {}) {\n\tconst { controls: exposeControls = false, scheduler = getDefaultScheduler$3(options) } = options;\n\tconst { now, ...controls } = useNow({\n\t\tscheduler,\n\t\tcontrols: true\n\t});\n\tconst result = computed(() => getTimeAgoIntlResult(new Date(toValue(time)), options, toValue(now)));\n\tconst parts = computed(() => result.value.parts);\n\tconst timeAgoIntl = computed(() => formatTimeAgoIntlParts(parts.value, {\n\t\t...options,\n\t\tlocale: result.value.resolvedLocale\n\t}));\n\treturn exposeControls ? {\n\t\ttimeAgoIntl,\n\t\tparts,\n\t\t...controls\n\t} : timeAgoIntl;\n}\n/**\n* Non-reactive version of useTimeAgoIntl\n*/\nfunction formatTimeAgoIntl(from, options = {}, now = Date.now()) {\n\tconst { parts, resolvedLocale } = getTimeAgoIntlResult(from, options, now);\n\treturn formatTimeAgoIntlParts(parts, {\n\t\t...options,\n\t\tlocale: resolvedLocale\n\t});\n}\n/**\n* Get parts from `Intl.RelativeTimeFormat.formatToParts`.\n*/\nfunction getTimeAgoIntlResult(from, options = {}, now = Date.now()) {\n\tvar _options$units;\n\tconst { locale, relativeTimeFormatOptions = { numeric: \"auto\" } } = options;\n\tconst rtf = new Intl.RelativeTimeFormat(locale, relativeTimeFormatOptions);\n\tconst { locale: resolvedLocale } = rtf.resolvedOptions();\n\tconst diff = +from - +now;\n\tconst absDiff = Math.abs(diff);\n\tconst units = (_options$units = options.units) !== null && _options$units !== void 0 ? _options$units : UNITS;\n\tfor (const { name, ms } of units) if (absDiff >= ms) return {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(Math.round(diff / ms), name)\n\t};\n\treturn {\n\t\tresolvedLocale,\n\t\tparts: rtf.formatToParts(0, units[units.length - 1].name)\n\t};\n}\n/**\n* Format parts into a string\n*/\nfunction formatTimeAgoIntlParts(parts, options = {}) {\n\tconst { insertSpace = true, joinParts, locale } = options;\n\tif (typeof joinParts === \"function\") return joinParts(parts, locale);\n\tif (!insertSpace) return parts.map((part) => part.value).join(\"\");\n\treturn parts.map((part) => part.value.trim()).join(\" \");\n}\n//#endregion\n//#region useTimeoutPoll/index.ts\nfunction useTimeoutPoll(fn, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst { start } = useTimeoutFn(loop, interval, { immediate });\n\tconst isActive = shallowRef(false);\n\tasync function loop() {\n\t\tif (!isActive.value) return;\n\t\tawait fn();\n\t\tstart();\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value) {\n\t\t\tisActive.value = true;\n\t\t\tif (immediateCallback) fn();\n\t\t\tstart();\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tif (immediate && isClient) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive,\n\t\tpause,\n\t\tresume\n\t};\n}\n//#endregion\n//#region useTimestamp/index.ts\nfunction getDefaultScheduler$2(options) {\n\tif (\"interval\" in options || \"immediate\" in options) {\n\t\tconst { interval = \"requestAnimationFrame\", immediate = true } = options;\n\t\treturn interval === \"requestAnimationFrame\" ? (cb) => useRafFn(cb, { immediate }) : (cb) => useIntervalFn(cb, interval, { immediate });\n\t}\n\treturn useRafFn;\n}\nfunction useTimestamp(options = {}) {\n\tconst { controls: exposeControls = false, offset = 0, scheduler = getDefaultScheduler$2(options), callback } = options;\n\tconst ts = shallowRef(timestamp() + offset);\n\tconst update = () => ts.value = timestamp() + offset;\n\tconst controls = scheduler(callback ? () => {\n\t\tupdate();\n\t\tcallback(ts.value);\n\t} : update);\n\tif (exposeControls) return {\n\t\ttimestamp: ts,\n\t\t...controls\n\t};\n\telse return ts;\n}\n//#endregion\n//#region useTitle/index.ts\nfunction useTitle(newTitle = null, options = {}) {\n\tvar _document$title, _ref;\n\tconst { document = defaultDocument, restoreOnUnmount = (t) => t } = options;\n\tconst originalTitle = (_document$title = document === null || document === void 0 ? void 0 : document.title) !== null && _document$title !== void 0 ? _document$title : \"\";\n\tconst title = toRef((_ref = newTitle !== null && newTitle !== void 0 ? newTitle : document === null || document === void 0 ? void 0 : document.title) !== null && _ref !== void 0 ? _ref : null);\n\tconst isReadonly = !!(newTitle && typeof newTitle === \"function\");\n\tfunction format(t) {\n\t\tif (!(\"titleTemplate\" in options)) return t;\n\t\tconst template = options.titleTemplate || \"%s\";\n\t\treturn typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n\t}\n\twatch(title, (newValue, oldValue) => {\n\t\tif (newValue !== oldValue && document) document.title = format(newValue !== null && newValue !== void 0 ? newValue : \"\");\n\t}, { immediate: true });\n\tif (options.observe && !options.titleTemplate && document && !isReadonly) {\n\t\tvar _document$head;\n\t\tuseMutationObserver((_document$head = document.head) === null || _document$head === void 0 ? void 0 : _document$head.querySelector(\"title\"), () => {\n\t\t\tif (document && document.title !== title.value) title.value = format(document.title);\n\t\t}, { childList: true });\n\t}\n\ttryOnScopeDispose(() => {\n\t\tif (restoreOnUnmount) {\n\t\t\tconst restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n\t\t\tif (restoredTitle != null && document) document.title = restoredTitle;\n\t\t}\n\t});\n\treturn title;\n}\n/**\n* Common transitions\n*\n* @see https://easings.net\n*/\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, {\n\teaseInSine: [\n\t\t.12,\n\t\t0,\n\t\t.39,\n\t\t0\n\t],\n\teaseOutSine: [\n\t\t.61,\n\t\t1,\n\t\t.88,\n\t\t1\n\t],\n\teaseInOutSine: [\n\t\t.37,\n\t\t0,\n\t\t.63,\n\t\t1\n\t],\n\teaseInQuad: [\n\t\t.11,\n\t\t0,\n\t\t.5,\n\t\t0\n\t],\n\teaseOutQuad: [\n\t\t.5,\n\t\t1,\n\t\t.89,\n\t\t1\n\t],\n\teaseInOutQuad: [\n\t\t.45,\n\t\t0,\n\t\t.55,\n\t\t1\n\t],\n\teaseInCubic: [\n\t\t.32,\n\t\t0,\n\t\t.67,\n\t\t0\n\t],\n\teaseOutCubic: [\n\t\t.33,\n\t\t1,\n\t\t.68,\n\t\t1\n\t],\n\teaseInOutCubic: [\n\t\t.65,\n\t\t0,\n\t\t.35,\n\t\t1\n\t],\n\teaseInQuart: [\n\t\t.5,\n\t\t0,\n\t\t.75,\n\t\t0\n\t],\n\teaseOutQuart: [\n\t\t.25,\n\t\t1,\n\t\t.5,\n\t\t1\n\t],\n\teaseInOutQuart: [\n\t\t.76,\n\t\t0,\n\t\t.24,\n\t\t1\n\t],\n\teaseInQuint: [\n\t\t.64,\n\t\t0,\n\t\t.78,\n\t\t0\n\t],\n\teaseOutQuint: [\n\t\t.22,\n\t\t1,\n\t\t.36,\n\t\t1\n\t],\n\teaseInOutQuint: [\n\t\t.83,\n\t\t0,\n\t\t.17,\n\t\t1\n\t],\n\teaseInExpo: [\n\t\t.7,\n\t\t0,\n\t\t.84,\n\t\t0\n\t],\n\teaseOutExpo: [\n\t\t.16,\n\t\t1,\n\t\t.3,\n\t\t1\n\t],\n\teaseInOutExpo: [\n\t\t.87,\n\t\t0,\n\t\t.13,\n\t\t1\n\t],\n\teaseInCirc: [\n\t\t.55,\n\t\t0,\n\t\t1,\n\t\t.45\n\t],\n\teaseOutCirc: [\n\t\t0,\n\t\t.55,\n\t\t.45,\n\t\t1\n\t],\n\teaseInOutCirc: [\n\t\t.85,\n\t\t0,\n\t\t.15,\n\t\t1\n\t],\n\teaseInBack: [\n\t\t.36,\n\t\t0,\n\t\t.66,\n\t\t-.56\n\t],\n\teaseOutBack: [\n\t\t.34,\n\t\t1.56,\n\t\t.64,\n\t\t1\n\t],\n\teaseInOutBack: [\n\t\t.68,\n\t\t-.6,\n\t\t.32,\n\t\t1.6\n\t]\n});\n/**\n* Create an easing function from cubic bezier points.\n*/\nfunction createEasingFunction([p0, p1, p2, p3]) {\n\tconst a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n\tconst b = (a1, a2) => 3 * a2 - 6 * a1;\n\tconst c = (a1) => 3 * a1;\n\tconst calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n\tconst getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n\tconst getTforX = (x) => {\n\t\tlet aGuessT = x;\n\t\tfor (let i = 0; i < 4; ++i) {\n\t\t\tconst currentSlope = getSlope(aGuessT, p0, p2);\n\t\t\tif (currentSlope === 0) return aGuessT;\n\t\t\tconst currentX = calcBezier(aGuessT, p0, p2) - x;\n\t\t\taGuessT -= currentX / currentSlope;\n\t\t}\n\t\treturn aGuessT;\n\t};\n\treturn (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n\treturn a + alpha * (b - a);\n}\nfunction defaultInterpolation(a, b, t) {\n\tconst aVal = toValue(a);\n\tconst bVal = toValue(b);\n\tif (typeof aVal === \"number\" && typeof bVal === \"number\") return lerp(aVal, bVal, t);\n\tif (Array.isArray(aVal) && Array.isArray(bVal)) return aVal.map((v, i) => lerp(v, toValue(bVal[i]), t));\n\tthrow new TypeError(\"Unknown transition type, specify an interpolation function.\");\n}\nfunction normalizeEasing(easing) {\n\tvar _toValue;\n\treturn typeof easing === \"function\" ? easing : (_toValue = toValue(easing)) !== null && _toValue !== void 0 ? _toValue : identity;\n}\n/**\n* Transition from one value to another.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction transition(source, from, to, options = {}) {\n\tvar _toValue2;\n\tconst { window = defaultWindow } = options;\n\tconst fromVal = toValue(from);\n\tconst toVal = toValue(to);\n\tconst duration = (_toValue2 = toValue(options.duration)) !== null && _toValue2 !== void 0 ? _toValue2 : 1e3;\n\tconst startedAt = Date.now();\n\tconst endAt = Date.now() + duration;\n\tconst interpolation = typeof options.interpolation === \"function\" ? options.interpolation : defaultInterpolation;\n\tconst trans = typeof options.easing !== \"undefined\" ? normalizeEasing(options.easing) : normalizeEasing(options.transition);\n\tconst ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n\treturn new Promise((resolve) => {\n\t\tsource.value = fromVal;\n\t\tconst tick = () => {\n\t\t\tvar _options$abort;\n\t\t\tif ((_options$abort = options.abort) === null || _options$abort === void 0 ? void 0 : _options$abort.call(options)) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst now = Date.now();\n\t\t\tsource.value = interpolation(fromVal, toVal, ease((now - startedAt) / duration));\n\t\t\tif (now < endAt) window === null || window === void 0 || window.requestAnimationFrame(tick);\n\t\t\telse {\n\t\t\t\tsource.value = toVal;\n\t\t\t\tresolve();\n\t\t\t}\n\t\t};\n\t\ttick();\n\t});\n}\n/**\n* Transition from one value to another.\n* @deprecated The `executeTransition` function is deprecated, use `transition` instead.\n*\n* @param source\n* @param from\n* @param to\n* @param options\n*/\nfunction executeTransition(source, from, to, options = {}) {\n\treturn transition(source, from, to, options);\n}\n/**\n* Follow value with a transition.\n*\n* @see https://vueuse.org/useTransition\n* @param source\n* @param options\n*/\nfunction useTransition(source, options = {}) {\n\tlet currentId = 0;\n\tconst sourceVal = () => {\n\t\tconst v = toValue(source);\n\t\treturn typeof options.interpolation === \"undefined\" && Array.isArray(v) ? v.map(toValue) : v;\n\t};\n\tconst outputRef = shallowRef(sourceVal());\n\twatch(sourceVal, async (to) => {\n\t\tvar _options$onStarted, _options$onFinished;\n\t\tif (toValue(options.disabled)) return;\n\t\tconst id = ++currentId;\n\t\tif (options.delay) await promiseTimeout(toValue(options.delay));\n\t\tif (id !== currentId) return;\n\t\t(_options$onStarted = options.onStarted) === null || _options$onStarted === void 0 || _options$onStarted.call(options);\n\t\tawait transition(outputRef, outputRef.value, to, {\n\t\t\t...options,\n\t\t\tabort: () => {\n\t\t\t\tvar _options$abort2;\n\t\t\t\treturn id !== currentId || ((_options$abort2 = options.abort) === null || _options$abort2 === void 0 ? void 0 : _options$abort2.call(options));\n\t\t\t}\n\t\t});\n\t\t(_options$onFinished = options.onFinished) === null || _options$onFinished === void 0 || _options$onFinished.call(options);\n\t}, { deep: true });\n\twatch(() => toValue(options.disabled), (disabled) => {\n\t\tif (disabled) {\n\t\t\tcurrentId++;\n\t\t\toutputRef.value = sourceVal();\n\t\t}\n\t});\n\ttryOnScopeDispose(() => {\n\t\tcurrentId++;\n\t});\n\treturn computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n//#endregion\n//#region useUrlSearchParams/index.ts\n/**\n* Reactive URLSearchParams\n*\n* @see https://vueuse.org/useUrlSearchParams\n* @param mode\n* @param options\n*/\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n\tconst { initialValue = {}, removeNullishValues = true, removeFalsyValues = false, write: enableWrite = true, writeMode = \"replace\", window = defaultWindow, stringify = (params) => params.toString() } = options;\n\tif (!window) return reactive(initialValue);\n\tconst state = reactive({});\n\tfunction getRawParams() {\n\t\tif (mode === \"history\") return window.location.search || \"\";\n\t\telse if (mode === \"hash\") {\n\t\t\tconst hash = window.location.hash || \"\";\n\t\t\tconst index = hash.indexOf(\"?\");\n\t\t\treturn index > 0 ? hash.slice(index) : \"\";\n\t\t} else return (window.location.hash || \"\").replace(/^#/, \"\");\n\t}\n\tfunction constructQuery(params) {\n\t\tconst stringified = stringify(params);\n\t\tif (mode === \"history\") return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n\t\tif (mode === \"hash-params\") return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n\t\tconst hash = window.location.hash || \"#\";\n\t\tconst index = hash.indexOf(\"?\");\n\t\tif (index > 0) return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n\t\treturn `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n\t}\n\tfunction read() {\n\t\treturn new URLSearchParams(getRawParams());\n\t}\n\tfunction updateState(params) {\n\t\tconst unusedKeys = new Set(Object.keys(state));\n\t\tfor (const key of params.keys()) {\n\t\t\tconst paramsForKey = params.getAll(key);\n\t\t\tstate[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n\t\t\tunusedKeys.delete(key);\n\t\t}\n\t\tArray.from(unusedKeys).forEach((key) => delete state[key]);\n\t}\n\tconst { pause, resume } = watchPausable(state, () => {\n\t\tconst params = new URLSearchParams(\"\");\n\t\tObject.keys(state).forEach((key) => {\n\t\t\tconst mapEntry = state[key];\n\t\t\tif (Array.isArray(mapEntry)) mapEntry.forEach((value) => params.append(key, value));\n\t\t\telse if (removeNullishValues && mapEntry == null) params.delete(key);\n\t\t\telse if (removeFalsyValues && !mapEntry) params.delete(key);\n\t\t\telse params.set(key, mapEntry);\n\t\t});\n\t\twrite(params, false);\n\t}, { deep: true });\n\tfunction write(params, shouldUpdate, shouldWriteHistory = true) {\n\t\tpause();\n\t\tif (shouldUpdate) updateState(params);\n\t\tif (writeMode === \"replace\") window.history.replaceState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n\t\telse if (shouldWriteHistory) window.history.pushState(window.history.state, window.document.title, window.location.pathname + constructQuery(params));\n\t\tnextTick(() => resume());\n\t}\n\tfunction onChanged() {\n\t\tif (!enableWrite) return;\n\t\twrite(read(), true, false);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window, \"popstate\", onChanged, listenerOptions);\n\tif (mode !== \"history\") useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n\tconst initial = read();\n\tif (initial.keys().next().value) updateState(initial);\n\telse Object.assign(state, initialValue);\n\treturn state;\n}\n//#endregion\n//#region useUserMedia/index.ts\n/**\n* Reactive `mediaDevices.getUserMedia` streaming\n*\n* @see https://vueuse.org/useUserMedia\n* @param options\n*/\nfunction useUserMedia(options = {}) {\n\tvar _options$enabled, _options$autoSwitch;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst autoSwitch = shallowRef((_options$autoSwitch = options.autoSwitch) !== null && _options$autoSwitch !== void 0 ? _options$autoSwitch : true);\n\tconst constraints = ref(options.constraints);\n\tconst { navigator = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator === null || navigator === void 0 || (_navigator$mediaDevic = navigator.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getUserMedia;\n\t});\n\tconst stream = shallowRef();\n\tfunction getDeviceOptions(type) {\n\t\tswitch (type) {\n\t\t\tcase \"video\":\n\t\t\t\tif (constraints.value) return constraints.value.video || false;\n\t\t\t\tbreak;\n\t\t\tcase \"audio\":\n\t\t\t\tif (constraints.value) return constraints.value.audio || false;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\tasync function _start() {\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator.mediaDevices.getUserMedia({\n\t\t\tvideo: getDeviceOptions(\"video\"),\n\t\t\taudio: getDeviceOptions(\"audio\")\n\t\t});\n\t\treturn stream.value;\n\t}\n\tfunction _stop() {\n\t\tvar _stream$value;\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\tasync function restart() {\n\t\t_stop();\n\t\treturn await start();\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\twatch(constraints, () => {\n\t\tif (autoSwitch.value && stream.value) restart();\n\t}, {\n\t\timmediate: true,\n\t\tdeep: true\n\t});\n\ttryOnScopeDispose(() => {\n\t\tstop();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\trestart,\n\t\tconstraints,\n\t\tenabled,\n\t\tautoSwitch\n\t};\n}\n//#endregion\n//#region useVModel/index.ts\n/**\n* Shorthand for v-model binding, props + emit -> ref\n*\n* @see https://vueuse.org/useVModel\n* @param props\n* @param key (default 'modelValue')\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModel(props, key, emit, options = {}) {\n\tvar _vm$$emit, _vm$proxy;\n\tconst { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options;\n\tconst vm = getCurrentInstance();\n\tconst _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy));\n\tlet event = eventName;\n\tif (!key) key = \"modelValue\";\n\tevent = event || `update:${key.toString()}`;\n\tconst cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n\tconst getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n\tconst triggerEmit = (value) => {\n\t\tif (shouldEmit) {\n\t\t\tif (shouldEmit(value)) _emit(event, value);\n\t\t} else _emit(event, value);\n\t};\n\tif (passive) {\n\t\tconst proxy = ref(getValue());\n\t\tlet isUpdating = false;\n\t\twatch(() => props[key], (v) => {\n\t\t\tif (!isUpdating) {\n\t\t\t\tisUpdating = true;\n\t\t\t\tproxy.value = cloneFn(v);\n\t\t\t\tnextTick(() => isUpdating = false);\n\t\t\t}\n\t\t});\n\t\twatch(proxy, (v) => {\n\t\t\tif (!isUpdating && (v !== props[key] || deep)) triggerEmit(v);\n\t\t}, { deep });\n\t\treturn proxy;\n\t} else return computed({\n\t\tget() {\n\t\t\treturn getValue();\n\t\t},\n\t\tset(value) {\n\t\t\ttriggerEmit(value);\n\t\t}\n\t});\n}\n//#endregion\n//#region useVModels/index.ts\n/**\n* Shorthand for props v-model binding. Think like `toRefs(props)` but changes will also emit out.\n*\n* @see https://vueuse.org/useVModels\n* @param props\n* @param emit\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVModels(props, emit, options = {}) {\n\tconst ret = {};\n\tfor (const key in props) ret[key] = useVModel(props, key, emit, options);\n\treturn ret;\n}\n//#endregion\n//#region useVibrate/index.ts\nfunction getDefaultScheduler$1(options = { interval: 0 }) {\n\tconst { interval } = options;\n\tif (interval === 0) return;\n\treturn (fn) => useIntervalFn(fn, interval, {\n\t\timmediate: false,\n\t\timmediateCallback: false\n\t});\n}\n/**\n* Reactive vibrate\n*\n* @see https://vueuse.org/useVibrate\n* @see https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useVibrate(options) {\n\tconst { pattern = [], scheduler = getDefaultScheduler$1(options), navigator = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n\tconst patternRef = toRef(pattern);\n\tconst vibrate = (pattern = patternRef.value) => {\n\t\tif (isSupported.value) navigator.vibrate(pattern);\n\t};\n\tconst intervalControls = scheduler === null || scheduler === void 0 ? void 0 : scheduler(vibrate);\n\tconst stop = () => {\n\t\tif (isSupported.value) navigator.vibrate(0);\n\t\tintervalControls === null || intervalControls === void 0 || intervalControls.pause();\n\t};\n\treturn {\n\t\tisSupported,\n\t\tpattern,\n\t\tintervalControls,\n\t\tvibrate,\n\t\tstop\n\t};\n}\n//#endregion\n//#region useVirtualList/index.ts\n/**\n* Please consider using [`vue-virtual-scroller`](https://github.com/Akryum/vue-virtual-scroller) if you are looking for more features.\n*/\nfunction useVirtualList(list, options) {\n\tconst { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n\treturn {\n\t\tlist: currentList,\n\t\tscrollTo,\n\t\tcontainerProps: {\n\t\t\tref: containerRef,\n\t\t\tonScroll: () => {\n\t\t\t\tcalculateRange();\n\t\t\t},\n\t\t\tstyle: containerStyle\n\t\t},\n\t\twrapperProps\n\t};\n}\nfunction useVirtualListResources(list) {\n\tconst containerRef = shallowRef(null);\n\tconst size = useElementSize(containerRef);\n\tconst currentList = ref([]);\n\tconst source = shallowRef(list);\n\treturn {\n\t\tstate: ref({\n\t\t\tstart: 0,\n\t\t\tend: 10\n\t\t}),\n\t\tsource,\n\t\tcurrentList,\n\t\tsize,\n\t\tcontainerRef\n\t};\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n\treturn (containerSize) => {\n\t\tif (typeof itemSize === \"number\") return Math.ceil(containerSize / itemSize);\n\t\tconst { start = 0 } = state.value;\n\t\tlet sum = 0;\n\t\tlet capacity = 0;\n\t\tfor (let i = start; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tcapacity = i;\n\t\t\tif (sum > containerSize) break;\n\t\t}\n\t\treturn capacity - start;\n\t};\n}\nfunction createGetOffset(source, itemSize) {\n\treturn (scrollDirection) => {\n\t\tif (typeof itemSize === \"number\") return Math.floor(scrollDirection / itemSize) + 1;\n\t\tlet sum = 0;\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < source.value.length; i++) {\n\t\t\tconst size = itemSize(i);\n\t\t\tsum += size;\n\t\t\tif (sum >= scrollDirection) {\n\t\t\t\toffset = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn offset + 1;\n\t};\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n\treturn () => {\n\t\tconst element = containerRef.value;\n\t\tif (element) {\n\t\t\tconst offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n\t\t\tconst viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n\t\t\tconst from = offset - overscan;\n\t\t\tconst to = offset + viewCapacity + overscan;\n\t\t\tstate.value = {\n\t\t\t\tstart: from < 0 ? 0 : from,\n\t\t\t\tend: to > source.value.length ? source.value.length : to\n\t\t\t};\n\t\t\tcurrentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n\t\t\t\tdata: ele,\n\t\t\t\tindex: index + state.value.start\n\t\t\t}));\n\t\t}\n\t};\n}\nfunction createGetDistance(itemSize, source) {\n\treturn (index) => {\n\t\tif (typeof itemSize === \"number\") return index * itemSize;\n\t\treturn source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n\t};\n}\nfunction useWatchForSizes(size, listRef, containerRef, calculateRange) {\n\twatch([\n\t\tsize.width,\n\t\tsize.height,\n\t\tlistRef,\n\t\tcontainerRef\n\t], () => {\n\t\tcalculateRange();\n\t});\n}\nfunction createComputedTotalSize(itemSize, source) {\n\treturn computed(() => {\n\t\tif (typeof itemSize === \"number\") return source.value.length * itemSize;\n\t\treturn source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n\t});\n}\nconst scrollToDictionaryForElementScrollKey = {\n\thorizontal: \"scrollLeft\",\n\tvertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n\treturn (index) => {\n\t\tif (containerRef.value) {\n\t\t\tcontainerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n\t\t\tcalculateRange();\n\t\t}\n\t};\n}\nfunction useHorizontalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowX: \"auto\" };\n\tconst { itemWidth, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n\tconst calculateRange = createCalculateRange(\"horizontal\", overscan, createGetOffset(source, itemWidth), getViewCapacity, resources);\n\tconst getDistanceLeft = createGetDistance(itemWidth, source);\n\tconst offsetLeft = computed(() => getDistanceLeft(state.value.start));\n\tconst totalWidth = createComputedTotalSize(itemWidth, source);\n\tuseWatchForSizes(size, source, containerRef, calculateRange);\n\treturn {\n\t\tscrollTo: createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef),\n\t\tcalculateRange,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\theight: \"100%\",\n\t\t\t\twidth: `${totalWidth.value - offsetLeft.value}px`,\n\t\t\t\tmarginLeft: `${offsetLeft.value}px`,\n\t\t\t\tdisplay: \"flex\"\n\t\t\t} };\n\t\t}),\n\t\tcontainerStyle,\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\nfunction useVerticalVirtualList(options, list) {\n\tconst resources = useVirtualListResources(list);\n\tconst { state, source, currentList, size, containerRef } = resources;\n\tconst containerStyle = { overflowY: \"auto\" };\n\tconst { itemHeight, overscan = 5 } = options;\n\tconst getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n\tconst calculateRange = createCalculateRange(\"vertical\", overscan, createGetOffset(source, itemHeight), getViewCapacity, resources);\n\tconst getDistanceTop = createGetDistance(itemHeight, source);\n\tconst offsetTop = computed(() => getDistanceTop(state.value.start));\n\tconst totalHeight = createComputedTotalSize(itemHeight, source);\n\tuseWatchForSizes(size, source, containerRef, calculateRange);\n\treturn {\n\t\tcalculateRange,\n\t\tscrollTo: createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef),\n\t\tcontainerStyle,\n\t\twrapperProps: computed(() => {\n\t\t\treturn { style: {\n\t\t\t\twidth: \"100%\",\n\t\t\t\theight: `${totalHeight.value - offsetTop.value}px`,\n\t\t\t\tmarginTop: `${offsetTop.value}px`\n\t\t\t} };\n\t\t}),\n\t\tcurrentList,\n\t\tcontainerRef\n\t};\n}\n//#endregion\n//#region useWakeLock/index.ts\n/**\n* Reactive Screen Wake Lock API.\n*\n* @see https://vueuse.org/useWakeLock\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWakeLock(options = {}) {\n\tconst { navigator = defaultNavigator, document = defaultDocument } = options;\n\tconst requestedType = shallowRef(false);\n\tconst sentinel = shallowRef(null);\n\tconst documentVisibility = useDocumentVisibility({ document });\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator && \"wakeLock\" in navigator);\n\tconst isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n\tif (isSupported.value) {\n\t\tuseEventListener(sentinel, \"release\", () => {\n\t\t\tvar _sentinel$value$type, _sentinel$value;\n\t\t\trequestedType.value = (_sentinel$value$type = (_sentinel$value = sentinel.value) === null || _sentinel$value === void 0 ? void 0 : _sentinel$value.type) !== null && _sentinel$value$type !== void 0 ? _sentinel$value$type : false;\n\t\t}, { passive: true });\n\t\twhenever(() => documentVisibility.value === \"visible\" && (document === null || document === void 0 ? void 0 : document.visibilityState) === \"visible\" && requestedType.value, (type) => {\n\t\t\trequestedType.value = false;\n\t\t\tforceRequest(type);\n\t\t});\n\t}\n\tasync function forceRequest(type) {\n\t\tvar _sentinel$value2;\n\t\tawait ((_sentinel$value2 = sentinel.value) === null || _sentinel$value2 === void 0 ? void 0 : _sentinel$value2.release());\n\t\tsentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n\t}\n\tasync function request(type) {\n\t\tif (documentVisibility.value === \"visible\") await forceRequest(type);\n\t\telse requestedType.value = type;\n\t}\n\tasync function release() {\n\t\trequestedType.value = false;\n\t\tconst s = sentinel.value;\n\t\tsentinel.value = null;\n\t\tawait (s === null || s === void 0 ? void 0 : s.release());\n\t}\n\ttryOnScopeDispose(() => {\n\t\trelease();\n\t});\n\treturn {\n\t\tsentinel,\n\t\tisSupported,\n\t\tisActive,\n\t\trequest,\n\t\tforceRequest,\n\t\trelease\n\t};\n}\n//#endregion\n//#region useWebNotification/index.ts\n/**\n* Reactive useWebNotification\n*\n* @see https://vueuse.org/useWebNotification\n* @see https://developer.mozilla.org/en-US/docs/Web/API/notification\n*/\nfunction useWebNotification(options = {}) {\n\tconst { window = defaultWindow, requestPermissions: _requestForPermissions = true } = options;\n\tconst defaultWebNotificationOptions = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (!window || !(\"Notification\" in window)) return false;\n\t\tif (Notification.permission === \"granted\") return true;\n\t\ttry {\n\t\t\tconst notification = new Notification(\"\");\n\t\t\tnotification.onshow = () => {\n\t\t\t\tnotification.close();\n\t\t\t};\n\t\t} catch (e) {\n\t\t\tif (e.name === \"TypeError\") return false;\n\t\t}\n\t\treturn true;\n\t});\n\tconst permissionGranted = shallowRef(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n\tconst notification = shallowRef(null);\n\tconst ensurePermissions = async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionGranted.value && Notification.permission !== \"denied\") {\n\t\t\tif (await Notification.requestPermission() === \"granted\") permissionGranted.value = true;\n\t\t}\n\t\treturn permissionGranted.value;\n\t};\n\tconst { on: onClick, trigger: clickTrigger } = createEventHook();\n\tconst { on: onShow, trigger: showTrigger } = createEventHook();\n\tconst { on: onError, trigger: errorTrigger } = createEventHook();\n\tconst { on: onClose, trigger: closeTrigger } = createEventHook();\n\tconst show = async (overrides) => {\n\t\tif (!isSupported.value || !permissionGranted.value) return;\n\t\tconst options = Object.assign({}, defaultWebNotificationOptions, overrides);\n\t\tnotification.value = new Notification(options.title || \"\", options);\n\t\tnotification.value.onclick = clickTrigger;\n\t\tnotification.value.onshow = showTrigger;\n\t\tnotification.value.onerror = errorTrigger;\n\t\tnotification.value.onclose = closeTrigger;\n\t\treturn notification.value;\n\t};\n\tconst close = () => {\n\t\tif (notification.value) notification.value.close();\n\t\tnotification.value = null;\n\t};\n\tif (_requestForPermissions) tryOnMounted(ensurePermissions);\n\ttryOnScopeDispose(close);\n\tif (isSupported.value && window) {\n\t\tconst document = window.document;\n\t\tuseEventListener(document, \"visibilitychange\", (e) => {\n\t\t\te.preventDefault();\n\t\t\tif (document.visibilityState === \"visible\") close();\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tnotification,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tshow,\n\t\tclose,\n\t\tonClick,\n\t\tonShow,\n\t\tonError,\n\t\tonClose\n\t};\n}\n//#endregion\n//#region useWebSocket/index.ts\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n\tif (options === true) return {};\n\treturn options;\n}\nfunction getDefaultScheduler(options) {\n\tif (\"interval\" in options) {\n\t\tconst { interval = 1e3 } = options;\n\t\treturn (cb) => useIntervalFn(cb, interval, { immediate: false });\n\t}\n\treturn (cb) => useIntervalFn(cb, 1e3, { immediate: false });\n}\n/**\n* Reactive WebSocket client.\n*\n* @see https://vueuse.org/useWebSocket\n* @param url\n*/\nfunction useWebSocket(url, options = {}) {\n\tconst { onConnected, onDisconnected, onError, onMessage, immediate = true, autoConnect = true, autoClose = true, protocols = [] } = options;\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CLOSED\");\n\tconst wsRef = shallowRef();\n\tconst urlRef = toRef(url);\n\tlet heartbeatPause;\n\tlet heartbeatResume;\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tlet bufferedData = [];\n\tlet retryTimeout;\n\tlet pongTimeoutWait;\n\tconst _sendBuffer = () => {\n\t\tif (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n\t\t\tfor (const buffer of bufferedData) wsRef.value.send(buffer);\n\t\t\tbufferedData = [];\n\t\t}\n\t};\n\tconst resetRetry = () => {\n\t\tif (retryTimeout != null) {\n\t\t\tclearTimeout(retryTimeout);\n\t\t\tretryTimeout = void 0;\n\t\t}\n\t};\n\tconst resetHeartbeat = () => {\n\t\tclearTimeout(pongTimeoutWait);\n\t\tpongTimeoutWait = void 0;\n\t};\n\tconst close = (code = 1e3, reason) => {\n\t\tresetRetry();\n\t\tif (!isClient && !isWorker || !wsRef.value) return;\n\t\texplicitlyClosed = true;\n\t\tresetHeartbeat();\n\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\twsRef.value.close(code, reason);\n\t\twsRef.value = void 0;\n\t};\n\tconst send = (data, useBuffer = true) => {\n\t\tif (!wsRef.value || status.value !== \"OPEN\") {\n\t\t\tif (useBuffer) bufferedData.push(data);\n\t\t\treturn false;\n\t\t}\n\t\t_sendBuffer();\n\t\twsRef.value.send(data);\n\t\treturn true;\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst ws = new WebSocket(urlRef.value, protocols);\n\t\twsRef.value = ws;\n\t\tstatus.value = \"CONNECTING\";\n\t\tws.onopen = () => {\n\t\t\tif (wsRef.value !== ws) return;\n\t\t\tstatus.value = \"OPEN\";\n\t\t\tretried = 0;\n\t\t\tonConnected === null || onConnected === void 0 || onConnected(ws);\n\t\t\theartbeatResume === null || heartbeatResume === void 0 || heartbeatResume();\n\t\t\t_sendBuffer();\n\t\t};\n\t\tws.onclose = (ev) => {\n\t\t\tif (wsRef.value === ws) status.value = \"CLOSED\";\n\t\t\tresetHeartbeat();\n\t\t\theartbeatPause === null || heartbeatPause === void 0 || heartbeatPause();\n\t\t\tonDisconnected === null || onDisconnected === void 0 || onDisconnected(ws, ev);\n\t\t\tif (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions(options.autoReconnect);\n\t\t\t\tif ((typeof retries === \"function\" ? retries : () => typeof retries === \"number\" && (retries < 0 || retried < retries))(retried)) {\n\t\t\t\t\tretried += 1;\n\t\t\t\t\tconst delayTime = typeof delay === \"function\" ? delay(retried) : delay;\n\t\t\t\t\tretryTimeout = setTimeout(_init, delayTime);\n\t\t\t\t} else onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tws.onerror = (e) => {\n\t\t\tonError === null || onError === void 0 || onError(ws, e);\n\t\t};\n\t\tws.onmessage = (e) => {\n\t\t\tif (options.heartbeat) {\n\t\t\t\tresetHeartbeat();\n\t\t\t\tconst { message = DEFAULT_PING_MESSAGE, responseMessage = message } = resolveNestedOptions(options.heartbeat);\n\t\t\t\tif (e.data === toValue(responseMessage)) return;\n\t\t\t}\n\t\t\tdata.value = e.data;\n\t\t\tonMessage === null || onMessage === void 0 || onMessage(ws, e);\n\t\t};\n\t};\n\tif (options.heartbeat) {\n\t\tconst { message = DEFAULT_PING_MESSAGE, scheduler = getDefaultScheduler(resolveNestedOptions(options.heartbeat)), pongTimeout = 1e3 } = resolveNestedOptions(options.heartbeat);\n\t\tconst { pause, resume } = scheduler(() => {\n\t\t\tsend(toValue(message), false);\n\t\t\tif (pongTimeoutWait != null) return;\n\t\t\tpongTimeoutWait = setTimeout(() => {\n\t\t\t\tclose();\n\t\t\t\texplicitlyClosed = false;\n\t\t\t}, pongTimeout);\n\t\t});\n\t\theartbeatPause = pause;\n\t\theartbeatResume = resume;\n\t}\n\tif (autoClose) {\n\t\tif (isClient) useEventListener(\"beforeunload\", () => close(), { passive: true });\n\t\ttryOnScopeDispose(close);\n\t}\n\tconst open = () => {\n\t\tif (!isClient && !isWorker) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\treturn {\n\t\tdata,\n\t\tstatus,\n\t\tclose,\n\t\tsend,\n\t\topen,\n\t\tws: wsRef\n\t};\n}\n//#endregion\n//#region useWebWorker/index.ts\nfunction useWebWorker(arg0, workerOptions, options) {\n\tconst { window = defaultWindow } = options !== null && options !== void 0 ? options : {};\n\tconst data = shallowRef(null);\n\tconst worker = shallowRef();\n\tconst post = (...args) => {\n\t\tif (!worker.value) return;\n\t\tworker.value.postMessage(...args);\n\t};\n\tconst terminate = function terminate() {\n\t\tif (!worker.value) return;\n\t\tworker.value.terminate();\n\t};\n\tif (window) {\n\t\tif (typeof arg0 === \"string\") worker.value = new Worker(arg0, workerOptions);\n\t\telse if (typeof arg0 === \"function\") worker.value = arg0();\n\t\telse worker.value = arg0;\n\t\tworker.value.onmessage = (e) => {\n\t\t\tdata.value = e.data;\n\t\t};\n\t\ttryOnScopeDispose(() => {\n\t\t\tif (worker.value) worker.value.terminate();\n\t\t});\n\t}\n\treturn {\n\t\tdata,\n\t\tpost,\n\t\tterminate,\n\t\tworker\n\t};\n}\n//#endregion\n//#region useWebWorkerFn/lib/depsParser.ts\n/**\n*\n* Concatenates the dependencies into a comma separated string.\n* this string will then be passed as an argument to the \"importScripts\" function\n*\n* @param deps array of string\n* @param localDeps array of function\n* @returns a string composed by the concatenation of the array\n* elements \"deps\" and \"importScripts\".\n*\n* @example\n* depsParser(['demo1', 'demo2']) // return importScripts('demo1', 'demo2')\n*/\nfunction depsParser(deps, localDeps) {\n\tif (deps.length === 0 && localDeps.length === 0) return \"\";\n\tconst depsString = deps.map((dep) => `'${dep}'`).toString();\n\tconst depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n\t\tconst str = fn.toString();\n\t\tif (str.trim().startsWith(\"function\")) return str;\n\t\telse return `const ${fn.name} = ${str}`;\n\t}).join(\";\");\n\tconst importString = `importScripts(${depsString});`;\n\treturn `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n//#endregion\n//#region useWebWorkerFn/lib/jobRunner.ts\n/**\n* This function accepts as a parameter a function \"userFunc\"\n* And as a result returns an anonymous function.\n* This anonymous function, accepts as arguments,\n* the parameters to pass to the function \"useArgs\" and returns a Promise\n* This function can be used as a wrapper, only inside a Worker\n* because it depends by \"postMessage\".\n*\n* @param userFunc {Function} fn the function to run with web worker\n*\n* @returns returns a function that accepts the parameters\n* to be passed to the \"userFunc\" function\n*/\nfunction jobRunner(userFunc) {\n\treturn (e) => {\n\t\tconst userFuncArgs = e.data[0];\n\t\treturn Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {\n\t\t\tpostMessage([\"SUCCESS\", result]);\n\t\t}).catch((error) => {\n\t\t\tpostMessage([\"ERROR\", error]);\n\t\t});\n\t};\n}\n//#endregion\n//#region useWebWorkerFn/lib/createWorkerBlobUrl.ts\n/**\n* Converts the \"fn\" function into the syntax needed to be executed within a web worker\n*\n* @param fn the function to run with web worker\n* @param deps array of strings, imported into the worker through \"importScripts\"\n* @param localDeps array of function, local dependencies\n*\n* @returns a blob url, containing the code of \"fn\" as a string\n*\n* @example\n* createWorkerBlobUrl((a,b) => a+b, [])\n* // return \"onmessage=return Promise.resolve((a,b) => a + b)\n* .then(postMessage(['SUCCESS', result]))\n* .catch(postMessage(['ERROR', error])\"\n*/\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n\tconst blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n\tconst blob = new Blob([blobCode], { type: \"text/javascript\" });\n\treturn URL.createObjectURL(blob);\n}\n//#endregion\n//#region useWebWorkerFn/index.ts\n/**\n* Run expensive function without blocking the UI, using a simple syntax that makes use of Promise.\n*\n* @see https://vueuse.org/useWebWorkerFn\n* @param fn\n* @param options\n*/\nfunction useWebWorkerFn(fn, options = {}) {\n\tconst { dependencies = [], localDependencies = [], timeout, window = defaultWindow } = options;\n\tlet worker;\n\tconst workerStatus = shallowRef(\"PENDING\");\n\tconst promise = shallowRef({});\n\tconst timeoutId = shallowRef();\n\tconst workerTerminate = (status = \"PENDING\") => {\n\t\tif (worker && worker._url && window) {\n\t\t\tworker.terminate();\n\t\t\tURL.revokeObjectURL(worker._url);\n\t\t\tpromise.value = {};\n\t\t\tworker = void 0;\n\t\t\twindow.clearTimeout(timeoutId.value);\n\t\t\tworkerStatus.value = status;\n\t\t}\n\t};\n\tworkerTerminate();\n\ttryOnScopeDispose(workerTerminate);\n\tconst generateWorker = () => {\n\t\tconst blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n\t\tconst newWorker = new Worker(blobUrl);\n\t\tnewWorker._url = blobUrl;\n\t\tnewWorker.onmessage = (e) => {\n\t\t\tconst { resolve = () => {}, reject = () => {} } = promise.value;\n\t\t\tconst [status, result] = e.data;\n\t\t\tswitch (status) {\n\t\t\t\tcase \"SUCCESS\":\n\t\t\t\t\tresolve(result);\n\t\t\t\t\tworkerTerminate(status);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treject(result);\n\t\t\t\t\tworkerTerminate(\"ERROR\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tnewWorker.onerror = (e) => {\n\t\t\tconst { reject = () => {} } = promise.value;\n\t\t\te.preventDefault();\n\t\t\treject(e);\n\t\t\tworkerTerminate(\"ERROR\");\n\t\t};\n\t\tif (timeout) timeoutId.value = setTimeout(workerTerminate, timeout, \"TIMEOUT_EXPIRED\");\n\t\treturn newWorker;\n\t};\n\tconst callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n\t\tpromise.value = {\n\t\t\tresolve,\n\t\t\treject\n\t\t};\n\t\tworker === null || worker === void 0 || worker.postMessage([[...fnArgs]]);\n\t\tworkerStatus.value = \"RUNNING\";\n\t});\n\tconst workerFn = (...fnArgs) => {\n\t\tif (workerStatus.value === \"RUNNING\") {\n\t\t\tconsole.error(\"[useWebWorkerFn] You can only run one instance of the worker at a time.\");\n\t\t\treturn Promise.reject();\n\t\t}\n\t\tworker = generateWorker();\n\t\treturn callWorker(...fnArgs);\n\t};\n\treturn {\n\t\tworkerFn,\n\t\tworkerStatus,\n\t\tworkerTerminate\n\t};\n}\n//#endregion\n//#region useWindowFocus/index.ts\n/**\n* Reactively track window focus with `window.onfocus` and `window.onblur`.\n*\n* @see https://vueuse.org/useWindowFocus\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowFocus(options = {}) {\n\tconst { window = defaultWindow } = options;\n\tif (!window) return shallowRef(false);\n\tconst focused = shallowRef(window.document.hasFocus());\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(window, \"blur\", () => {\n\t\tfocused.value = false;\n\t}, listenerOptions);\n\tuseEventListener(window, \"focus\", () => {\n\t\tfocused.value = true;\n\t}, listenerOptions);\n\treturn focused;\n}\n//#endregion\n//#region useWindowScroll/index.ts\n/**\n* Reactive window scroll.\n*\n* @see https://vueuse.org/useWindowScroll\n* @param options\n*/\nfunction useWindowScroll(options = {}) {\n\tconst { window = defaultWindow, ...rest } = options;\n\treturn useScroll(window, rest);\n}\n//#endregion\n//#region useWindowSize/index.ts\n/**\n* Reactive window size.\n*\n* @see https://vueuse.org/useWindowSize\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useWindowSize(options = {}) {\n\tconst { window = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = \"inner\" } = options;\n\tconst width = shallowRef(initialWidth);\n\tconst height = shallowRef(initialHeight);\n\tconst update = () => {\n\t\tif (window) if (type === \"outer\") {\n\t\t\twidth.value = window.outerWidth;\n\t\t\theight.value = window.outerHeight;\n\t\t} else if (type === \"visual\" && window.visualViewport) {\n\t\t\tconst { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n\t\t\twidth.value = Math.round(visualViewportWidth * scale);\n\t\t\theight.value = Math.round(visualViewportHeight * scale);\n\t\t} else if (includeScrollbar) {\n\t\t\twidth.value = window.innerWidth;\n\t\t\theight.value = window.innerHeight;\n\t\t} else {\n\t\t\twidth.value = window.document.documentElement.clientWidth;\n\t\t\theight.value = window.document.documentElement.clientHeight;\n\t\t}\n\t};\n\tupdate();\n\ttryOnMounted(update);\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"resize\", update, listenerOptions);\n\tif (window && type === \"visual\" && window.visualViewport) useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n\tif (listenOrientation) watch(useMediaQuery(\"(orientation: portrait)\"), () => update());\n\treturn {\n\t\twidth,\n\t\theight\n\t};\n}\n//#endregion\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, formatTimeAgoIntl, formatTimeAgoIntlParts, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, transition, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCountdown, useCssSupports, 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, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeAgoIntl, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","import type { VNode } from 'vue'\nimport { Fragment } from 'vue'\n\nexport function renderSlotFragments(children?: VNode[]): VNode[] {\n  if (!children)\n    return []\n  return children.flatMap((child) => {\n    if (child.type === Fragment)\n      return renderSlotFragments(child.children as VNode[])\n\n    return [child]\n  })\n}\n","import type { Direction } from './types'\n\ntype ArrowKeyOptions = 'horizontal' | 'vertical' | 'both'\n\ninterface ArrowNavigationOptions {\n  /**\n   * The arrow key options to allow navigation\n   *\n   * @defaultValue \"both\"\n   */\n  arrowKeyOptions?: ArrowKeyOptions\n\n  /**\n   * The attribute name to find the collection items in the parent element.\n   *\n   * @defaultValue \"data-reka-collection-item\"\n   */\n  attributeName?: string\n\n  /**\n   * The parent element where contains all the collection items, this will collect every item to be used when nav\n   * It will be ignored if attributeName is provided\n   *\n   * @defaultValue []\n   */\n  itemsArray?: HTMLElement[]\n\n  /**\n   * Allow loop navigation. If false, it will stop at the first and last element\n   *\n   * @defaultValue true\n   */\n  loop?: boolean\n\n  /**\n   * The orientation of the collection\n   *\n   * @defaultValue \"ltr\"\n   */\n  dir?: Direction\n\n  /**\n   * Prevent the scroll when navigating. This happens when the direction of the\n   * key matches the scroll direction of any ancestor scrollable elements.\n   *\n   * @defaultValue true\n   */\n  preventScroll?: boolean\n\n  /**\n   * By default all currentElement would trigger navigation. If `true`, currentElement nodeName in the ignore list will return null\n   *\n   * @defaultValue false\n   */\n  enableIgnoredElement?: boolean\n\n  /**\n   * Focus the element after navigation\n   *\n   * @defaultValue false\n   */\n  focus?: boolean\n}\n\nconst ignoredElement = ['INPUT', 'TEXTAREA']\n\n/**\n * Allow arrow navigation for every html element with data-reka-collection-item tag\n *\n * @param e               Keyboard event\n * @param currentElement  Event initiator element or any element that wants to handle the navigation\n * @param parentElement   Parent element where contains all the collection items, this will collect every item to be used when nav\n * @param options         further options\n * @returns               the navigated html element or null if none\n */\nexport function useArrowNavigation(\n  e: KeyboardEvent,\n  currentElement: HTMLElement,\n  parentElement: HTMLElement | undefined,\n  options: ArrowNavigationOptions = {},\n): HTMLElement | null {\n  if (!currentElement || (options.enableIgnoredElement && ignoredElement.includes(currentElement.nodeName)))\n    return null\n\n  const {\n    arrowKeyOptions = 'both',\n    attributeName = '[data-reka-collection-item]',\n    itemsArray = [],\n    loop = true,\n    dir = 'ltr',\n    preventScroll = true,\n    focus = false,\n  } = options\n\n  const [right, left, up, down, home, end] = [\n    e.key === 'ArrowRight',\n    e.key === 'ArrowLeft',\n    e.key === 'ArrowUp',\n    e.key === 'ArrowDown',\n    e.key === 'Home',\n    e.key === 'End',\n  ]\n  const goingVertical = up || down\n  const goingHorizontal = right || left\n  if (\n    !home\n    && !end\n    && ((!goingVertical && !goingHorizontal)\n      || (arrowKeyOptions === 'vertical' && goingHorizontal)\n      || (arrowKeyOptions === 'horizontal' && goingVertical))\n  ) {\n    return null\n  }\n\n  const allCollectionItems: HTMLElement[] = parentElement\n    ? Array.from(parentElement.querySelectorAll(attributeName))\n    : itemsArray\n\n  if (!allCollectionItems.length)\n    return null\n\n  if (preventScroll)\n    e.preventDefault()\n\n  let item: HTMLElement | null = null\n\n  if (goingHorizontal || goingVertical) {\n    const goForward = goingVertical ? down : dir === 'ltr' ? right : left\n    item = findNextFocusableElement(allCollectionItems, currentElement, {\n      goForward,\n      loop,\n    })\n  }\n  else if (home) {\n    item = allCollectionItems.at(0) || null\n  }\n  else if (end) {\n    item = allCollectionItems.at(-1) || null\n  }\n\n  if (focus)\n    item?.focus()\n\n  return item\n}\n\ninterface FindNextFocusableElementOptions {\n  /**\n   * Whether to search forwards or backwards.\n   */\n  goForward: boolean\n  /**\n   * Whether to allow looping the search. If false, it will stop at the first/last element.\n   *\n   * @default true\n   */\n  loop?: boolean\n}\n\n/**\n * Recursive function to find the next focusable element to avoid disabled elements\n *\n * @param elements Elements to navigate\n * @param currentElement Current active element\n * @param options\n * @returns next focusable element\n */\nfunction findNextFocusableElement(\n  elements: HTMLElement[],\n  currentElement: HTMLElement,\n  options: FindNextFocusableElementOptions,\n  iterations = !elements.includes(currentElement) ? elements.length + 1 : elements.length,\n): HTMLElement | null {\n  if (--iterations === 0)\n    return null\n\n  const index = elements.indexOf(currentElement)\n  let newIndex: number\n  if (index === -1) {\n    newIndex = options.goForward ? 0 : elements.length - 1\n  }\n  else {\n    newIndex = options.goForward ? index + 1 : index - 1\n  }\n\n  if (!options.loop && (newIndex < 0 || newIndex >= elements.length))\n    return null\n\n  const adjustedNewIndex = (newIndex + elements.length) % elements.length\n  const candidate = elements[adjustedNewIndex]\n  if (!candidate)\n    return null\n\n  const isDisabled\n    = candidate.hasAttribute('disabled')\n      && candidate.getAttribute('disabled') !== 'false'\n  if (isDisabled) {\n    return findNextFocusableElement(\n      elements,\n      candidate,\n      options,\n      iterations,\n    )\n  }\n  return candidate\n}\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction, ScrollBodyOption } from '@/shared/types'\nimport { createContext } from '@/shared'\n\ninterface ConfigProviderContextValue {\n  dir?: Ref<Direction>\n  locale?: Ref<string>\n  scrollBody?: Ref<boolean | ScrollBodyOption>\n  nonce?: Ref<string | undefined>\n  useId?: () => string\n}\n\nexport const [injectConfigProviderContext, provideConfigProviderContext]\n  = createContext<ConfigProviderContextValue>('ConfigProvider')\n\nexport interface ConfigProviderProps {\n  /**\n   * The global reading direction of your application. This will be inherited by all primitives.\n   * @defaultValue 'ltr'\n   */\n  dir?: Direction\n  /**\n   * The global locale of your application. This will be inherited by all primitives.\n   * @defaultValue 'en'\n   */\n  locale?: string\n  /**\n   * The global scroll body behavior of your application. This will be inherited by the related primitives.\n   * @type boolean | ScrollBodyOption\n   */\n  scrollBody?: boolean | ScrollBodyOption\n  /**\n   * The global `nonce` value of your application. This will be inherited by the related primitives.\n   * @type string\n   */\n  nonce?: string\n  /**\n   * The global `useId` injection as a workaround for preventing hydration issue.\n   */\n  useId?: () => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { toRefs } from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ConfigProviderProps>(), {\n  dir: 'ltr',\n  locale: 'en',\n  scrollBody: true,\n  nonce: undefined,\n  useId: undefined,\n})\n\nconst { dir, locale, scrollBody, nonce } = toRefs(props)\n\nprovideConfigProviderContext({\n  dir,\n  locale,\n  scrollBody,\n  nonce,\n  useId: props.useId,\n})\n</script>\n\n<template>\n  <slot />\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction, ScrollBodyOption } from '@/shared/types'\nimport { createContext } from '@/shared'\n\ninterface ConfigProviderContextValue {\n  dir?: Ref<Direction>\n  locale?: Ref<string>\n  scrollBody?: Ref<boolean | ScrollBodyOption>\n  nonce?: Ref<string | undefined>\n  useId?: () => string\n}\n\nexport const [injectConfigProviderContext, provideConfigProviderContext]\n  = createContext<ConfigProviderContextValue>('ConfigProvider')\n\nexport interface ConfigProviderProps {\n  /**\n   * The global reading direction of your application. This will be inherited by all primitives.\n   * @defaultValue 'ltr'\n   */\n  dir?: Direction\n  /**\n   * The global locale of your application. This will be inherited by all primitives.\n   * @defaultValue 'en'\n   */\n  locale?: string\n  /**\n   * The global scroll body behavior of your application. This will be inherited by the related primitives.\n   * @type boolean | ScrollBodyOption\n   */\n  scrollBody?: boolean | ScrollBodyOption\n  /**\n   * The global `nonce` value of your application. This will be inherited by the related primitives.\n   * @type string\n   */\n  nonce?: string\n  /**\n   * The global `useId` injection as a workaround for preventing hydration issue.\n   */\n  useId?: () => string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { toRefs } from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ConfigProviderProps>(), {\n  dir: 'ltr',\n  locale: 'en',\n  scrollBody: true,\n  nonce: undefined,\n  useId: undefined,\n})\n\nconst { dir, locale, scrollBody, nonce } = toRefs(props)\n\nprovideConfigProviderContext({\n  dir,\n  locale,\n  scrollBody,\n  nonce,\n  useId: props.useId,\n})\n</script>\n\n<template>\n  <slot />\n</template>\n","function isPlainObject(value) {\n  if (value === null || typeof value !== \"object\") {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(value);\n  if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) {\n    return false;\n  }\n  if (Symbol.iterator in value) {\n    return false;\n  }\n  if (Symbol.toStringTag in value) {\n    return Object.prototype.toString.call(value) === \"[object Module]\";\n  }\n  return true;\n}\n\nfunction _defu(baseObject, defaults, namespace = \".\", merger) {\n  if (!isPlainObject(defaults)) {\n    return _defu(baseObject, {}, namespace, merger);\n  }\n  const object = { ...defaults };\n  for (const key of Object.keys(baseObject)) {\n    if (key === \"__proto__\" || key === \"constructor\") {\n      continue;\n    }\n    const value = baseObject[key];\n    if (value === null || value === void 0) {\n      continue;\n    }\n    if (merger && merger(object, key, value, namespace)) {\n      continue;\n    }\n    if (Array.isArray(value) && Array.isArray(object[key])) {\n      object[key] = [...value, ...object[key]];\n    } else if (isPlainObject(value) && isPlainObject(object[key])) {\n      object[key] = _defu(\n        value,\n        object[key],\n        (namespace ? `${namespace}.` : \"\") + key.toString(),\n        merger\n      );\n    } else {\n      object[key] = value;\n    }\n  }\n  return object;\n}\nfunction createDefu(merger) {\n  return (...arguments_) => (\n    // eslint-disable-next-line unicorn/no-array-reduce\n    arguments_.reduce((p, c) => _defu(p, c, \"\", merger), {})\n  );\n}\nconst defu = createDefu();\nconst defuFn = createDefu((object, key, currentValue) => {\n  if (object[key] !== void 0 && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\nconst defuArrayFn = createDefu((object, key, currentValue) => {\n  if (Array.isArray(object[key]) && typeof currentValue === \"function\") {\n    object[key] = currentValue(object[key]);\n    return true;\n  }\n});\n\nexport { createDefu, defu as default, defu, defuArrayFn, defuFn };\n","import type { Fn } from '@vueuse/shared'\nimport {\n  createSharedComposable,\n  useEventListener,\n} from '@vueuse/core'\nimport { isClient, isIOS, tryOnBeforeUnmount } from '@vueuse/shared'\nimport { defu } from 'defu'\nimport { computed, nextTick, ref, watch } from 'vue'\nimport { injectConfigProviderContext } from '@/ConfigProvider/ConfigProvider.vue'\n\nconst useBodyLockStackCount = createSharedComposable(() => {\n  const map = ref<Map<string, boolean>>(new Map())\n  const initialOverflow = ref<string | undefined>()\n\n  const locked = computed(() => {\n    for (const value of map.value.values()) {\n      if (value)\n        return true\n    }\n    return false\n  })\n\n  const context = injectConfigProviderContext({\n    scrollBody: ref(true),\n  })\n\n  let stopTouchMoveListener: Fn | null = null\n\n  const resetBodyStyle = () => {\n    document.body.style.paddingRight = ''\n    document.body.style.marginRight = ''\n    document.body.style.pointerEvents = ''\n    document.documentElement.style.removeProperty('--scrollbar-width')\n    document.body.style.overflow = initialOverflow.value ?? ''\n    isIOS && stopTouchMoveListener?.()\n\n    initialOverflow.value = undefined\n  }\n\n  watch(locked, (val, oldVal) => {\n    if (!isClient)\n      return\n\n    if (!val) {\n      if (oldVal)\n        resetBodyStyle()\n      return\n    }\n\n    if (initialOverflow.value === undefined)\n      initialOverflow.value = document.body.style.overflow\n\n    const verticalScrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n    const defaultConfig = { padding: verticalScrollbarWidth, margin: 0 }\n\n    const config = context.scrollBody?.value\n      ? typeof context.scrollBody.value === 'object'\n        ? defu({\n            padding: context.scrollBody.value.padding === true ? verticalScrollbarWidth : context.scrollBody.value.padding,\n            margin: context.scrollBody.value.margin === true ? verticalScrollbarWidth : context.scrollBody.value.margin,\n          }, defaultConfig)\n        : defaultConfig\n      : ({ padding: 0, margin: 0 })\n\n    if (verticalScrollbarWidth > 0) {\n      document.body.style.paddingRight = typeof config.padding === 'number' ? `${config.padding}px` : String(config.padding)\n      document.body.style.marginRight = typeof config.margin === 'number' ? `${config.margin}px` : String(config.margin)\n      document.documentElement.style.setProperty('--scrollbar-width', `${verticalScrollbarWidth}px`)\n      document.body.style.overflow = 'hidden'\n    }\n\n    if (isIOS) {\n      stopTouchMoveListener = useEventListener(\n        document,\n        'touchmove',\n        (e: TouchEvent) => preventDefault(e),\n        { passive: false },\n      )\n    }\n\n    // let dismissibleLayer set previous pointerEvent first\n    nextTick(() => {\n      if (!locked.value)\n        return\n      document.body.style.pointerEvents = 'none'\n      document.body.style.overflow = 'hidden'\n    })\n  }, { immediate: true, flush: 'sync' })\n\n  return map\n})\n\nexport function useBodyScrollLock(initialState?: boolean | undefined) {\n  const id = Math.random().toString(36).substring(2, 7) // just simple random id, need not to be cryptographically secure\n  const map = useBodyLockStackCount()\n\n  map.value.set(id, initialState ?? false)\n\n  const locked = computed({\n    get: () => map.value.get(id) ?? false,\n    set: value => map.value.set(id, value),\n  })\n\n  tryOnBeforeUnmount(() => {\n    map.value.delete(id)\n  })\n\n  return locked\n}\n\n// Adapt from https://github.com/vueuse/vueuse/blob/main/packages/core/useScrollLock/index.ts#L28C10-L28C24\nfunction checkOverflowScroll(ele: Element): boolean {\n  const style = window.getComputedStyle(ele)\n  if (\n    style.overflowX === 'scroll'\n    || style.overflowY === 'scroll'\n    || (style.overflowX === 'auto' && ele.clientWidth < ele.scrollWidth)\n    || (style.overflowY === 'auto' && ele.clientHeight < ele.scrollHeight)\n  ) {\n    return true\n  }\n  else {\n    const parent = ele.parentNode\n\n    if (!(parent instanceof Element) || parent.tagName === 'BODY')\n      return false\n\n    return checkOverflowScroll(parent)\n  }\n}\n\nfunction preventDefault(rawEvent: TouchEvent): boolean {\n  const e = rawEvent || window.event\n\n  const _target = e.target\n\n  // Do not prevent if element or parentNodes have overflow: scroll set.\n  if (_target instanceof Element && checkOverflowScroll(_target))\n    return false\n\n  // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n  if (e.touches.length > 1)\n    return true\n\n  if (e.preventDefault && e.cancelable)\n    e.preventDefault()\n\n  return false\n}\n","import type { Ref } from 'vue'\nimport type { Direction } from './types'\nimport { computed, ref } from 'vue'\nimport { injectConfigProviderContext } from '@/ConfigProvider/ConfigProvider.vue'\n\n/**\n * The `useDirection` function provides a way to access the current direction in your application.\n * @param {Ref<Direction | undefined>} [dir] - An optional ref containing the direction (ltr or rtl).\n * @returns  computed value that combines with the resolved direction.\n */\nexport function useDirection(dir?: Ref<Direction | undefined>) {\n  const context = injectConfigProviderContext({\n    dir: ref('ltr'),\n  })\n  return computed(() => dir?.value || context.dir?.value || 'ltr')\n}\n","import { camelize, getCurrentInstance, toHandlerKey } from 'vue'\n\n// Vue doesn't have emits forwarding, in order to bind the emits we have to convert events into `onXXX` handlers\n// issue: https://github.com/vuejs/core/issues/5917\n/**\n * The `useEmitAsProps` function is a TypeScript utility that converts emitted events into props for a\n * Vue component.\n * @param emit - The `emit` parameter is a function that is used to emit events from a component. It\n * takes two parameters: `name` which is the name of the event to be emitted, and `...args` which are\n * the arguments to be passed along with the event.\n * @returns The function `useEmitAsProps` returns an object that maps event names to functions that\n * call the `emit` function with the corresponding event name and arguments.\n */\nexport function useEmitAsProps<Name extends string>(\n  emit: (name: Name, ...args: any[]) => void,\n) {\n  const vm = getCurrentInstance()\n\n  const events = vm?.type.emits as Name[]\n  const result: Record<string, any> = {}\n\n  if (!events?.length) {\n    console.warn(\n      `No emitted event found. Please check component: ${vm?.type.__name}`,\n    )\n  }\n\n  events?.forEach((ev) => {\n    result[toHandlerKey(camelize(ev))] = (...arg: any) => emit(ev, ...arg)\n  })\n  return result\n}\n","import { isClient } from '@vueuse/shared'\nimport { watchEffect } from 'vue'\n\n/** Number of components which have requested interest to have focus guards */\nlet count = 0\n\n/**\n * Injects a pair of focus guards at the edges of the whole DOM tree\n * to ensure `focusin` & `focusout` events can be caught consistently.\n */\nexport function useFocusGuards() {\n  watchEffect((cleanupFn) => {\n    if (!isClient)\n      return\n    const edgeGuards = document.querySelectorAll('[data-reka-focus-guard]')\n    document.body.insertAdjacentElement(\n      'afterbegin',\n      edgeGuards[0] ?? createFocusGuard(),\n    )\n    document.body.insertAdjacentElement(\n      'beforeend',\n      edgeGuards[1] ?? createFocusGuard(),\n    )\n    count++\n\n    cleanupFn(() => {\n      if (count === 1) {\n        document\n          .querySelectorAll('[data-reka-focus-guard]')\n          .forEach(node => node.remove())\n      }\n      count--\n    })\n  })\n}\n\nfunction createFocusGuard() {\n  const element = document.createElement('span')\n  element.setAttribute('data-reka-focus-guard', '')\n  element.tabIndex = 0\n  element.style.outline = 'none'\n  element.style.opacity = '0'\n  element.style.position = 'fixed'\n  element.style.pointerEvents = 'none'\n  return element\n}\n","import type { MaybeElement } from '@vueuse/core'\nimport type { ComponentPublicInstance } from 'vue'\n// reference: https://github.com/vuejs/rfcs/issues/258#issuecomment-1068697672\nimport { unrefElement } from '@vueuse/core'\nimport { computed, getCurrentInstance, onUpdated, ref, triggerRef } from 'vue'\n\nexport function useForwardExpose<T extends ComponentPublicInstance>() {\n  const instance = getCurrentInstance()!\n\n  const currentRef = ref<Element | T | null>()\n  const currentElement = computed(() => resolveCurrentElement())\n\n  // When using as-child with conditional rendering (v-if/v-else), the underlying\n  // DOM element ($el) changes but currentRef (component instance) stays the same.\n  // Since $el is not reactive, we sync currentElement after DOM updates.\n  onUpdated(() => {\n    if (currentElement.value !== resolveCurrentElement()) {\n      triggerRef(currentRef)\n    }\n  })\n\n  function resolveCurrentElement() {\n    // $el could be text/comment for non-single root normal or text root, thus we retrieve the nextElementSibling\n    return currentRef.value\n      && '$el' in currentRef.value\n      && ['#text', '#comment'].includes(currentRef.value.$el.nodeName)\n      ? currentRef.value.$el.nextElementSibling as HTMLElement\n      : unrefElement(currentRef as unknown as MaybeElement) as HTMLElement\n  }\n\n  // Do give us credit if you reference our code :D\n  // localExpose should only be assigned once else will create infinite loop\n  const localExpose: Record<string, any> | null = Object.assign({}, instance.exposed)\n  const ret: Record<string, any> = {}\n\n  // retrieve props for current instance\n  for (const key in instance.props) {\n    Object.defineProperty(ret, key, {\n      enumerable: true,\n      configurable: true,\n      get: () => instance.props[key],\n    })\n  }\n\n  // retrieve default exposed value\n  if (Object.keys(localExpose).length > 0) {\n    for (const key in localExpose) {\n      Object.defineProperty(ret, key, {\n        enumerable: true,\n        configurable: true,\n        get: () => localExpose![key],\n      })\n    }\n  }\n\n  // retrieve original first root element\n  Object.defineProperty(ret, '$el', {\n    enumerable: true,\n    configurable: true,\n    get: () => instance.vnode.el,\n  })\n  instance.exposed = ret\n\n  function forwardRef(ref: Element | T | null) {\n    currentRef.value = ref\n\n    if (!ref)\n      return\n\n    // retrieve the forwarded element\n    Object.defineProperty(ret, '$el', {\n      enumerable: true,\n      configurable: true,\n      get: () => (ref instanceof Element ? ref : ref.$el),\n    })\n\n    // ref not is Element\n    // and `useForwardExpose.test.ts > useForwardRef > should forward plain DOM element ref - 2` Passing in `$el`\n    if (!(ref instanceof Element) && !Object.hasOwn(ref, '$el')) {\n      // Retrieves the `exposed` data that has not been unwrapped by `vue` from `$.exposed`.\n      const childExposed = ref.$.exposed\n      const merged = Object.assign({}, ret)\n\n      for (const key in childExposed) {\n        Object.defineProperty(merged, key, {\n          enumerable: true,\n          configurable: true,\n          get: () => childExposed[key],\n        })\n      }\n\n      instance.exposed = merged\n    }\n  }\n\n  return { forwardRef, currentRef, currentElement }\n}\n","import type { MaybeRefOrGetter } from 'vue'\nimport { camelize, computed, getCurrentInstance, toRef } from 'vue'\n\ninterface PropOptions {\n  type?: any\n  required?: boolean\n  default?: any\n}\n\n/**\n * Vue coerces optional boolean props (e.g. `foo?: boolean`) to non-optional (`foo: boolean`)\n * in the `defineProps` return type. Since `useForwardProps` only returns props that were\n * explicitly assigned, boolean-typed props should remain optional in the return type.\n */\ntype WithOptionalBooleans<T> = {\n  [K in keyof T as [T[K]] extends [boolean] ? K : never]?: T[K]\n} & {\n  [K in keyof T as [T[K]] extends [boolean] ? never : K]: T[K]\n}\n\n/**\n * The `useForwardProps` function in TypeScript takes in a set of props and returns a computed value\n * that combines default props with assigned props from the current instance.\n * @param {T} props - The `props` parameter is an object that represents the props passed to a\n * component.\n * @returns computed value that combines the default props, preserved props, and assigned props.\n */\nexport function useForwardProps<T extends Record<string, any>>(props: MaybeRefOrGetter<T>) {\n  const vm = getCurrentInstance()\n  // Default value for declared props\n  const defaultProps = Object.keys(vm?.type.props ?? {}).reduce((prev, curr) => {\n    const defaultValue = (vm?.type.props[curr] as PropOptions).default\n    if (defaultValue !== undefined)\n      prev[curr as keyof T] = defaultValue\n    return prev\n  }, {} as T)\n\n  const refProps = toRef(props)\n  return computed(() => {\n    const preservedProps = {} as T\n    const assignedProps = vm?.vnode.props ?? {}\n\n    Object.keys(assignedProps).forEach((key) => {\n      preservedProps[camelize(key) as keyof T] = assignedProps[key]\n    })\n\n    // Only return value from the props parameter\n    return Object.keys({ ...defaultProps, ...preservedProps }).reduce((prev, curr) => {\n      if (refProps.value[curr] !== undefined)\n        (prev as Record<string, any>)[curr] = refProps.value[curr]\n      return prev\n    }, {} as WithOptionalBooleans<T>)\n  })\n}\n","import type { MaybeRefOrGetter } from 'vue'\nimport { computed } from 'vue'\nimport { useEmitAsProps } from './useEmitAsProps'\nimport { useForwardProps } from './useForwardProps'\n\n/**\n * The function `useForwardPropsEmits` takes in props and an optional emit function, and returns a\n * computed object that combines the parsed props and emits as props.\n * @param {T} props - The `props` parameter is of type `T`, which is a generic type that extends the\n * parameters of the `useForwardProps` function. It represents the props object that is passed to the\n * `useForwardProps` function.\n * @param [emit] - The `emit` parameter is a function that can be used to emit events. It takes two\n * arguments: `name`, which is the name of the event to be emitted, and `args`, which are the arguments\n * to be passed along with the event.\n * @returns a computed property that combines the parsed\n * props and emits as props.\n */\nexport function useForwardPropsEmits<T extends Record<string, any>, Name extends string>(props: MaybeRefOrGetter<T>, emit?: (name: Name, ...args: any[]) => void) {\n  const parsedProps = useForwardProps(props)\n  const emitsAsProps = emit ? useEmitAsProps(emit) : {}\n\n  return computed(() => ({\n    ...parsedProps.value,\n    ...emitsAsProps,\n  }))\n}\n","var getDefaultParent = function (originalTarget) {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n    return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n    return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n    return targets\n        .map(function (target) {\n        if (parent.contains(target)) {\n            return target;\n        }\n        var correctedTarget = unwrapHost(target);\n        if (correctedTarget && parent.contains(correctedTarget)) {\n            return correctedTarget;\n        }\n        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n        return null;\n    })\n        .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    if (!markerMap[markerName]) {\n        markerMap[markerName] = new WeakMap();\n    }\n    var markerCounter = markerMap[markerName];\n    var hiddenNodes = [];\n    var elementsToKeep = new Set();\n    var elementsToStop = new Set(targets);\n    var keep = function (el) {\n        if (!el || elementsToKeep.has(el)) {\n            return;\n        }\n        elementsToKeep.add(el);\n        keep(el.parentNode);\n    };\n    targets.forEach(keep);\n    var deep = function (parent) {\n        if (!parent || elementsToStop.has(parent)) {\n            return;\n        }\n        Array.prototype.forEach.call(parent.children, function (node) {\n            if (elementsToKeep.has(node)) {\n                deep(node);\n            }\n            else {\n                try {\n                    var attr = node.getAttribute(controlAttribute);\n                    var alreadyHidden = attr !== null && attr !== 'false';\n                    var counterValue = (counterMap.get(node) || 0) + 1;\n                    var markerValue = (markerCounter.get(node) || 0) + 1;\n                    counterMap.set(node, counterValue);\n                    markerCounter.set(node, markerValue);\n                    hiddenNodes.push(node);\n                    if (counterValue === 1 && alreadyHidden) {\n                        uncontrolledNodes.set(node, true);\n                    }\n                    if (markerValue === 1) {\n                        node.setAttribute(markerName, 'true');\n                    }\n                    if (!alreadyHidden) {\n                        node.setAttribute(controlAttribute, 'true');\n                    }\n                }\n                catch (e) {\n                    console.error('aria-hidden: cannot operate on ', node, e);\n                }\n            }\n        });\n    };\n    deep(parentNode);\n    elementsToKeep.clear();\n    lockCount++;\n    return function () {\n        hiddenNodes.forEach(function (node) {\n            var counterValue = counterMap.get(node) - 1;\n            var markerValue = markerCounter.get(node) - 1;\n            counterMap.set(node, counterValue);\n            markerCounter.set(node, markerValue);\n            if (!counterValue) {\n                if (!uncontrolledNodes.has(node)) {\n                    node.removeAttribute(controlAttribute);\n                }\n                uncontrolledNodes.delete(node);\n            }\n            if (!markerValue) {\n                node.removeAttribute(markerName);\n            }\n        });\n        lockCount--;\n        if (!lockCount) {\n            // clear\n            counterMap = new WeakMap();\n            counterMap = new WeakMap();\n            uncontrolledNodes = new WeakMap();\n            markerMap = {};\n        }\n    };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n    // and script elements, as they have no impact on accessibility.\n    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-inert-ed'; }\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-suppressed'; }\n    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","import type { MaybeElementRef } from '@vueuse/core'\nimport { unrefElement } from '@vueuse/core'\nimport { hideOthers } from 'aria-hidden'\nimport { onUnmounted, watch } from 'vue'\n\n/**\n * The `useHideOthers` function is a TypeScript function that takes a target element reference and\n * hides all other elements in ARIA when the target element is present, and restores the visibility of the\n * hidden elements when the target element is removed.\n * @param {MaybeElementRef} target - The `target` parameter is a reference to the element that you want\n * to hide other elements when it is clicked or focused.\n */\nexport function useHideOthers(target: MaybeElementRef) {\n  let undo: ReturnType<typeof hideOthers>\n  watch(() => unrefElement(target), (el) => {\n    // disable hideOthers on test mode\n    if (import.meta.env.MODE === 'test')\n      return\n    // Skip if inside a closed native popover\n    // Use try/catch as `:popover-open` pseudo-class is not supported in all browsers (e.g. Safari 18)\n    let isInsideClosedPopover = false\n    try {\n      isInsideClosedPopover = !!el?.closest('[popover]:not(:popover-open)')\n    }\n    catch {}\n    if (el && !isInsideClosedPopover)\n      undo = hideOthers(el)\n    else if (undo)\n      undo()\n  })\n\n  onUnmounted(() => {\n    if (undo)\n      undo()\n  })\n}\n","import * as vue from 'vue'\n// Inspired from https://github.com/tailwindlabs/headlessui/issues/2913\n// as the alternative, and a fallback for Vue version < 3.5\nimport { injectConfigProviderContext } from '@/ConfigProvider/ConfigProvider.vue'\n\nlet count = 0\n/**\n * The `useId` function generates a unique identifier using a provided deterministic ID,\n * a configured `<ConfigProvider>` ID source, Vue's native `useId`, or a fallback counter.\n * @param {string | null | undefined} [deterministicId] - The `useId` function you provided takes an\n * optional parameter `deterministicId`, which can be a string, null, or undefined. If\n * `deterministicId` is provided, the function will return it. Otherwise, it will generate an id using\n * the configured ID source.\n */\nexport function useId(deterministicId?: string | null | undefined, prefix = 'reka') {\n  if (deterministicId)\n    return deterministicId\n\n  let id: string\n  const configProviderContext = injectConfigProviderContext({ useId: undefined })\n\n  // Keep the app-provided ID source authoritative. Frameworks such as Nuxt can\n  // prerender with a different Vue app ID prefix than the hydrating client, so\n  // falling through to Vue's native useId would bypass the stable source that\n  // ConfigProvider was explicitly given.\n  if (configProviderContext.useId) {\n    id = configProviderContext.useId()\n  }\n  else if ('useId' in vue) {\n    id = vue.useId?.()\n  }\n  else {\n    id = `${++count}`\n  }\n\n  return prefix ? `${prefix}-${id}` : id\n}\n","import type { MaybeElementRef } from '@vueuse/core'\nimport { unrefElement } from '@vueuse/core'\nimport { computed, onMounted, ref } from 'vue'\n\nexport function useSize(element: MaybeElementRef) {\n  const size = ref<{ width: number, height: number }>()\n  const width = computed(() => size.value?.width ?? 0)\n  const height = computed(() => size.value?.height ?? 0)\n\n  onMounted(() => {\n    const el = unrefElement(element) as HTMLElement\n    if (el) {\n      // provide size as early as possible\n      size.value = { width: el.offsetWidth, height: el.offsetHeight }\n\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries))\n          return\n\n        // Since we only observe the one element, we don't need to loop over the\n        // array\n        if (!entries.length)\n          return\n\n        const entry = entries[0]\n        let width: number\n        let height: number\n\n        if ('borderBoxSize' in entry) {\n          const borderSizeEntry = entry.borderBoxSize\n          // iron out differences between browsers\n          const borderSize = Array.isArray(borderSizeEntry)\n            ? borderSizeEntry[0]\n            : borderSizeEntry\n          width = borderSize.inlineSize\n          height = borderSize.blockSize\n        }\n        else {\n          // for browsers that don't support `borderBoxSize`\n          // we calculate it ourselves to get the correct border box.\n          width = el.offsetWidth\n          height = el.offsetHeight\n        }\n\n        // temporary disable width/height from resize observer. borderSizeEntry seems to be incorrect\n        size.value = { width, height }\n      })\n\n      resizeObserver.observe(el, { box: 'border-box' })\n\n      return () => resizeObserver.unobserve(el)\n    }\n    else {\n      // We only want to reset to `undefined` when the element becomes `null`,\n      // not if it changes to another element.\n      size.value = undefined\n    }\n  })\n\n  return {\n    width,\n    height,\n  }\n}\n","import type { Ref } from 'vue'\nimport { ref } from 'vue'\n\ninterface Machine<S> {\n  [k: string]: { [k: string]: S }\n}\ntype MachineState<T> = keyof T\ntype MachineEvent<T> = keyof UnionToIntersection<T[keyof T]>\n\n// 🤯 https://fettblog.eu/typescript-union-to-intersection/\ntype UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (\n  x: infer R,\n) => any\n  ? R\n  : never\n\n/**\n * The `useStateMachine` function is a TypeScript function that creates a state machine and returns the\n * current state and a dispatch function to update the state based on events.\n * @param initialState - The `initialState` parameter is the initial state of the state machine. It\n * represents the starting point of the state machine's state.\n * @param machine - The `machine` parameter is an object that represents a state machine. It should\n * have keys that correspond to the possible states of the machine, and the values should be objects\n * that represent the possible events and their corresponding next states.\n * @returns The `useStateMachine` function returns an object with two properties: `state` and\n * `dispatch`.\n */\nexport function useStateMachine<M>(\n  initialState: MachineState<M>,\n  machine: M & Machine<MachineState<M>>,\n) {\n  const state = ref(initialState) as Ref<MachineState<M>>\n\n  function reducer(event: MachineEvent<M>) {\n    // @ts-expect-error  state.value is keyof M\n    const nextState = machine[state.value][event]\n    return nextState ?? state.value\n  }\n\n  const dispatch = (event: MachineEvent<M>) => {\n    state.value = reducer(event)\n  }\n\n  return {\n    state,\n    dispatch,\n  }\n}\n","import { refAutoReset } from '@vueuse/shared'\nimport { getActiveElement } from './getActiveElement'\n\nexport function useTypeahead(callback?: (search: string) => void) {\n  // Reset `search` 1 second after it was last updated\n  const search = refAutoReset('', 1000)\n\n  const handleTypeaheadSearch = (key: string, items: { ref: HTMLElement, value?: any }[]) => {\n    search.value = search.value + key\n\n    if (callback) {\n      callback(key)\n    }\n    else {\n      const currentItem = getActiveElement()\n      const itemsWithTextValue = items.map(item => ({\n        ...item,\n        textValue: item.value?.textValue ?? item.ref.textContent?.trim() ?? '',\n      }))\n      const currentMatch = itemsWithTextValue.find(item => item.ref === currentItem)\n      const values = itemsWithTextValue.map(item => item.textValue)\n      const nextMatch = getNextMatch(values, search.value, currentMatch?.textValue)\n\n      const newItem = itemsWithTextValue.find(item => item.textValue === nextMatch)\n\n      if (newItem)\n        (newItem.ref as HTMLElement).focus()\n      return newItem?.ref\n    }\n  }\n\n  const resetTypeahead = () => {\n    search.value = ''\n  }\n\n  return {\n    search,\n    handleTypeaheadSearch,\n    resetTypeahead,\n  }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nexport function wrapArray<T>(array: T[], startIndex: number) {\n  return array.map((_, index) => array[(startIndex + index) % array.length])\n}\n\n/**\n * This is the \"meat\" of the typeahead matching logic. It takes in all the values,\n * the search and the current match, and returns the next match (or `undefined`).\n *\n * We normalize the search because if a user has repeatedly pressed a character,\n * we want the exact same behavior as if we only had that one character\n * (ie. cycle through options starting with that character)\n *\n * We also reorder the values by wrapping the array around the current match.\n * This is so we always look forward from the current match, and picking the first\n * match will always be the correct one.\n *\n * Finally, if the normalized search is exactly one character, we exclude the\n * current match from the values because otherwise it would be the first to match always\n * and focus would never move. This is as opposed to the regular case, where we\n * don't want focus to move if the current match still matches.\n */\nexport function getNextMatch(\n  values: string[],\n  search: string,\n  currentMatch?: string,\n) {\n  const isRepeated\n    = search.length > 1 && Array.from(search).every(char => char === search[0])\n  const normalizedSearch = isRepeated ? search[0] : search\n  const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1\n  let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0))\n  const excludeCurrentMatch = normalizedSearch.length === 1\n  if (excludeCurrentMatch)\n    wrappedValues = wrappedValues.filter(v => v !== currentMatch)\n  const nextMatch = wrappedValues.find(value =>\n    value.toLowerCase().startsWith(normalizedSearch.toLowerCase()),\n  )\n  return nextMatch !== currentMatch ? nextMatch : undefined\n}\n","import type { Ref } from 'vue'\nimport { defaultWindow } from '@vueuse/core'\nimport { isClient } from '@vueuse/shared'\nimport { computed, nextTick, onUnmounted, ref, watch } from 'vue'\nimport { useStateMachine } from '@/shared'\n\nexport function usePresence(\n  present: Ref<boolean>,\n  node: Ref<HTMLElement | undefined>,\n) {\n  const stylesRef = ref<CSSStyleDeclaration>({} as any)\n  const prevAnimationNameRef = ref<string>('none')\n  const prevPresentRef = ref(present)\n  const initialState = present.value ? 'mounted' : 'unmounted'\n  let timeoutId: number | undefined\n  const ownerWindow = node.value?.ownerDocument.defaultView ?? defaultWindow\n\n  const { state, dispatch } = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: 'unmounted',\n      ANIMATION_OUT: 'unmountSuspended',\n    },\n    unmountSuspended: {\n      MOUNT: 'mounted',\n      ANIMATION_END: 'unmounted',\n    },\n    unmounted: {\n      MOUNT: 'mounted',\n    },\n  })\n\n  const dispatchCustomEvent = (name: 'enter' | 'after-enter' | 'leave' | 'after-leave') => {\n    // We only dispatch this event because CustomEvent is not available in Node18\n    // https://github.com/unovue/reka-ui/issues/930\n    if (isClient) {\n      const customEvent = new CustomEvent(name, { bubbles: false, cancelable: false })\n      node.value?.dispatchEvent(customEvent)\n    }\n  }\n\n  watch(\n    present,\n    async (currentPresent, prevPresent) => {\n      const hasPresentChanged = prevPresent !== currentPresent\n      await nextTick()\n      if (hasPresentChanged) {\n        const prevAnimationName = prevAnimationNameRef.value\n        const currentAnimationName = getAnimationName(node.value)\n\n        if (currentPresent) {\n          dispatch('MOUNT')\n          dispatchCustomEvent('enter')\n          if (currentAnimationName === 'none')\n            dispatchCustomEvent('after-enter')\n        }\n        else if (\n          currentAnimationName === 'none' || currentAnimationName === 'undefined'\n          || stylesRef.value?.display === 'none'\n        ) {\n          // If there is no exit animation or the element is hidden, animations won't run\n          // so we unmount instantly rv\n          dispatch('UNMOUNT')\n          dispatchCustomEvent('leave')\n          dispatchCustomEvent('after-leave')\n        }\n        else {\n          /**\n           * When `present` changes to `false`, we check changes to animation-name to\n           * determine whether an animation has started. We chose this approach (reading\n           * computed styles) because there is no `animationrun` event and `animationstart`\n           * fires after `animation-delay` has expired which would be too late.\n           */\n          const isAnimating = prevAnimationName !== currentAnimationName\n          if (prevPresent && isAnimating) {\n            dispatch('ANIMATION_OUT')\n            dispatchCustomEvent('leave')\n          }\n          else {\n            dispatch('UNMOUNT')\n            dispatchCustomEvent('after-leave')\n          }\n        }\n      }\n    },\n    { immediate: true },\n  )\n\n  /**\n   * Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n   * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n   * make sure we only trigger ANIMATION_END for the currently active animation.\n   */\n  const handleAnimationEnd = (event: AnimationEvent) => {\n    const currentAnimationName = getAnimationName(node.value)\n    const isCurrentAnimation = currentAnimationName.includes(\n      CSS.escape(event.animationName),\n    )\n    const directionName = state.value === 'mounted' ? 'enter' : 'leave'\n    if (event.target === node.value && isCurrentAnimation) {\n      dispatchCustomEvent(`after-${directionName}`)\n      dispatch('ANIMATION_END')\n\n      if (!prevPresentRef.value) {\n        const currentFillMode = node.value.style.animationFillMode\n        node.value.style.animationFillMode = 'forwards'\n        // Reset the style after the node had time to unmount (for cases\n        // where the component chooses not to unmount). Doing this any\n        // sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n        // still causes a flash.\n        timeoutId = ownerWindow?.setTimeout(() => {\n          if (node.value?.style.animationFillMode === 'forwards') {\n            node.value.style.animationFillMode = currentFillMode\n          }\n        })\n      }\n    }\n    // if no animation, immediately trigger 'ANIMATION_END'\n    if (event.target === node.value && currentAnimationName === 'none')\n      dispatch('ANIMATION_END')\n  }\n  const handleAnimationStart = (event: AnimationEvent) => {\n    if (event.target === node.value) {\n      // if animation occurred, store its name as the previous animation.\n      prevAnimationNameRef.value = getAnimationName(node.value)\n    }\n  }\n\n  const watcher = watch(\n    node,\n    (newNode, oldNode) => {\n      if (newNode) {\n        stylesRef.value = getComputedStyle(newNode)\n        newNode.addEventListener('animationstart', handleAnimationStart)\n        newNode.addEventListener('animationcancel', handleAnimationEnd)\n        newNode.addEventListener('animationend', handleAnimationEnd)\n      }\n      else {\n        // Transition to the unmounted state if the node is removed prematurely.\n        // We avoid doing so during cleanup as the node may change but still exist.\n        dispatch('ANIMATION_END')\n\n        if (timeoutId !== undefined)\n          ownerWindow?.clearTimeout(timeoutId)\n        oldNode?.removeEventListener('animationstart', handleAnimationStart)\n        oldNode?.removeEventListener('animationcancel', handleAnimationEnd)\n        oldNode?.removeEventListener('animationend', handleAnimationEnd)\n      }\n    },\n    { immediate: true },\n  )\n\n  const stateWatcher = watch(state, () => {\n    const currentAnimationName = getAnimationName(node.value)\n    prevAnimationNameRef.value\n      = state.value === 'mounted' ? currentAnimationName : 'none'\n  })\n\n  onUnmounted(() => {\n    watcher()\n    stateWatcher()\n  })\n\n  const isPresent = computed(() =>\n    ['mounted', 'unmountSuspended'].includes(state.value),\n  )\n\n  return {\n    isPresent,\n  }\n}\n\nfunction getAnimationName(node?: HTMLElement) {\n  return node ? getComputedStyle(node).animationName || 'none' : 'none'\n}\n","import type {\n  SlotsType,\n  VNode,\n} from 'vue'\nimport { unrefElement } from '@vueuse/core'\nimport {\n  defineComponent,\n  getCurrentInstance,\n  h,\n  ref,\n  toRefs,\n} from 'vue'\nimport { renderSlotFragments } from '@/shared'\nimport { usePresence } from './usePresence'\n\nexport interface PresenceProps {\n  /**\n   * Conditional to mount or unmount the child element. Similar to `v-if`\n   *\n   * @required true\n   */\n  present: boolean\n  /**\n   * Force the element to render all the time.\n   *\n   * Useful for programmatically render grandchild component with the exposed `present`\n   *\n   * @defaultValue false\n   */\n  forceMount?: boolean\n}\n\nexport default defineComponent({\n  name: 'Presence',\n  props: {\n    present: {\n      type: Boolean,\n      required: true,\n    },\n    forceMount: {\n      type: Boolean,\n    },\n  },\n  slots: {} as SlotsType<{\n    default: (opts: { present: boolean }) => any\n  }>,\n  setup(props, { slots, expose }) {\n    const { present, forceMount } = toRefs(props)\n\n    const node = ref<HTMLElement>()\n    // Mount composables once to prevent duplicated eventListener\n    const { isPresent } = usePresence(present, node)\n    expose({ present: isPresent })\n\n    let children = slots.default({ present: isPresent.value })\n    children = renderSlotFragments(children || [])\n    const instance = getCurrentInstance()\n\n    if (children && children?.length > 1) {\n      const componentName = instance?.parent?.type.name\n        ? `<${instance.parent.type.name} />`\n        : 'component'\n\n      throw new Error(\n        [\n          `Detected an invalid children for \\`${componentName}\\` for  \\`Presence\\` component.`,\n          '',\n          'Note: Presence works similarly to `v-if` directly, but it waits for animation/transition to finished before unmounting. So it expect only one direct child of valid VNode type.',\n          'You can apply a few solutions:',\n          [\n            'Provide a single child element so that `presence` directive attach correctly.',\n            'Ensure the first child is an actual element instead of a raw text node or comment node.',\n          ]\n            .map(line => `  - ${line}`)\n            .join('\\n'),\n        ].join('\\n'),\n      )\n    }\n\n    return () => {\n      if (forceMount.value || present.value || isPresent.value) {\n        return h(slots.default({ present: isPresent.value })[0] as VNode, {\n          ref: (v) => {\n            const el = unrefElement(v as HTMLElement)\n            if (typeof el?.hasAttribute === 'undefined')\n              return el\n\n            // special case to handle animation for PopperContent\n            if (el?.hasAttribute('data-reka-popper-content-wrapper'))\n              node.value = el.firstElementChild as HTMLElement\n            else\n              node.value = el\n\n            return el\n          },\n        })\n      }\n      else { return null }\n    }\n  },\n})\n","import { cloneVNode, Comment, defineComponent, mergeProps } from 'vue'\nimport { renderSlotFragments } from '@/shared'\n\nexport const Slot = defineComponent({\n  name: 'PrimitiveSlot',\n  inheritAttrs: false,\n  setup(_, { attrs, slots }) {\n    return () => {\n      if (!slots.default)\n        return null\n\n      const children = renderSlotFragments(slots.default())\n      const firstNonCommentChildrenIndex = children.findIndex(child => child.type !== Comment)\n      if (firstNonCommentChildrenIndex === -1)\n        return children\n\n      const firstNonCommentChildren = children[firstNonCommentChildrenIndex]\n\n      // Remove props ref from being inferred\n      delete firstNonCommentChildren.props?.ref\n\n      // Manually merge props to ensure `firstNonCommentChildren.props`\n      // has higher priority than `attrs` and can override `attrs`.\n      // Otherwise `cloneVNode(firstNonCommentChildren, attrs)` will\n      // prioritize `attrs` and override `firstNonCommentChildren.props`.\n      const mergedProps = firstNonCommentChildren.props\n        ? mergeProps(attrs, firstNonCommentChildren.props)\n        : attrs\n      const cloned = cloneVNode({ ...firstNonCommentChildren, props: {} }, mergedProps)\n\n      if (children.length === 1)\n        return cloned\n\n      children[firstNonCommentChildrenIndex] = cloned\n      return children\n    }\n  },\n})\n","import type { Component, PropType } from 'vue'\nimport { defineComponent, h } from 'vue'\nimport { Slot } from './Slot'\n\nexport type AsTag\n  = | 'a'\n    | 'button'\n    | 'div'\n    | 'form'\n    | 'h2'\n    | 'h3'\n    | 'img'\n    | 'input'\n    | 'label'\n    | 'li'\n    | 'nav'\n    | 'ol'\n    | 'p'\n    | 'span'\n    | 'svg'\n    | 'ul'\n    | 'template'\n    | ({} & string) // any other string\n\nexport interface PrimitiveProps {\n  /**\n   * Change the default rendered element for the one passed as a child, merging their props and behavior.\n   *\n   * Read our [Composition](https://www.reka-ui.com/docs/guides/composition) guide for more details.\n   */\n  asChild?: boolean\n  /**\n   * The element or component this component should render as. Can be overwritten by `asChild`.\n   * @defaultValue \"div\"\n   */\n  as?: AsTag | Component\n}\n\n// For self closing tags, don't provide default slots because of hydration issue\nconst SELF_CLOSING_TAGS = ['area', 'img', 'input']\n\nexport const Primitive = defineComponent({\n  name: 'Primitive',\n  inheritAttrs: false,\n  props: {\n    asChild: {\n      type: Boolean,\n      default: false,\n    },\n    as: {\n      type: [String, Object] as PropType<AsTag | Component>,\n      default: 'div',\n    },\n  },\n  setup(props, { attrs, slots }) {\n    const asTag = props.asChild ? 'template' : props.as\n\n    if (typeof asTag === 'string' && SELF_CLOSING_TAGS.includes(asTag))\n      return () => h(asTag, attrs)\n\n    if (asTag !== 'template')\n      return () => h(props.as, attrs, { default: slots.default })\n\n    return () => h(Slot, attrs, { default: slots.default })\n  },\n})\n","import type { ComponentPublicInstance } from 'vue'\nimport { unrefElement } from '@vueuse/core'\nimport { computed, ref } from 'vue'\n\nexport function usePrimitiveElement<T extends ComponentPublicInstance>() {\n  const primitiveElement = ref<T>()\n  const currentElement = computed<HTMLElement>(() => ['#text', '#comment'].includes(primitiveElement.value?.$el.nodeName) ? primitiveElement.value?.$el.nextElementSibling : unrefElement(primitiveElement))\n\n  return {\n    primitiveElement,\n    currentElement,\n  }\n}\n","import type { MaybeRefOrGetter, Ref } from 'vue'\nimport { isClient } from '@vueuse/shared'\nimport { nextTick, ref, toValue, watchEffect } from 'vue'\nimport { handleAndDispatchCustomEvent } from '@/shared'\n\nexport type PointerDownOutsideEvent = CustomEvent<{\n  originalEvent: PointerEvent\n}>\nexport type FocusOutsideEvent = CustomEvent<{ originalEvent: FocusEvent }>\n\nexport const DISMISSABLE_LAYER_NAME = 'DismissableLayer'\nexport const CONTEXT_UPDATE = 'dismissableLayer.update'\nexport const POINTER_DOWN_OUTSIDE = 'dismissableLayer.pointerDownOutside'\nexport const FOCUS_OUTSIDE = 'dismissableLayer.focusOutside'\n\nexport function isLayerExist(layerElement: HTMLElement, targetElement: HTMLElement) {\n  if (!(targetElement instanceof Element))\n    return false\n\n  const targetLayer = targetElement.closest(\n    '[data-dismissable-layer]',\n  )\n\n  const mainLayer = layerElement.dataset.dismissableLayer === ''\n    ? layerElement\n    : layerElement.querySelector(\n      '[data-dismissable-layer]',\n    ) as HTMLElement\n\n  const nodeList = Array.from(\n    layerElement.ownerDocument.querySelectorAll('[data-dismissable-layer]'),\n  )\n\n  if (targetLayer && (mainLayer === targetLayer || nodeList.indexOf(mainLayer) < nodeList.indexOf(targetLayer))) {\n    return true\n  }\n  else {\n    return false\n  }\n}\n\n/**\n * Listens for `pointerdown` outside a DOM subtree. We use `pointerdown` rather than `pointerup`\n * to mimic layer dismissing behaviour present in OS.\n * Returns props to pass to the node we want to check for outside events.\n */\nexport function usePointerDownOutside(\n  onPointerDownOutside?: (event: PointerDownOutsideEvent) => void,\n  element?: Ref<HTMLElement | undefined>,\n  enabled: MaybeRefOrGetter<boolean> = true,\n) {\n  const ownerDocument: Document\n    = element?.value?.ownerDocument ?? globalThis?.document\n\n  const isPointerInsideDOMTree = ref(false)\n  const handleClickRef = ref(() => {})\n\n  watchEffect((cleanupFn) => {\n    if (!isClient || !toValue(enabled))\n      return\n    const handlePointerDown = async (event: PointerEvent) => {\n      const target = event.target as HTMLElement | undefined\n\n      if (!element?.value || !target)\n        return\n\n      if (isLayerExist(element.value, target)) {\n        isPointerInsideDOMTree.value = false\n        return\n      }\n\n      if (event.target && !isPointerInsideDOMTree.value) {\n        const eventDetail = { originalEvent: event }\n\n        function handleAndDispatchPointerDownOutsideEvent() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            onPointerDownOutside,\n            eventDetail,\n          )\n        }\n\n        /**\n         * On touch devices, we need to wait for a click event because browsers implement\n         * a ~350ms delay between the time the user stops touching the display and when the\n         * browser executes events. We need to ensure we don't reactivate pointer-events within\n         * this timeframe otherwise the browser may execute events that should have been prevented.\n         *\n         * Additionally, this also lets us deal automatically with cancellations when a click event\n         * isn't raised because the page was considered scrolled/drag-scrolled, long-pressed, etc.\n         *\n         * This is why we also continuously remove the previous listener, because we cannot be\n         * certain that it was raised, and therefore cleaned-up.\n         */\n        if (event.pointerType === 'touch') {\n          ownerDocument.removeEventListener('click', handleClickRef.value)\n          handleClickRef.value = handleAndDispatchPointerDownOutsideEvent\n          ownerDocument.addEventListener('click', handleClickRef.value, {\n            once: true,\n          })\n        }\n        else {\n          handleAndDispatchPointerDownOutsideEvent()\n        }\n      }\n      else {\n        // We need to remove the event listener in case the outside click has been canceled.\n        // See: https://github.com/radix-ui/primitives/issues/2171\n        ownerDocument.removeEventListener('click', handleClickRef.value)\n      }\n      isPointerInsideDOMTree.value = false\n    }\n    /**\n     * if this hook executes in a component that mounts via a `pointerdown` event, the event\n     * would bubble up to the document and trigger a `pointerDownOutside` event. We avoid\n     * this by delaying the event listener registration on the document.\n     * This is how the DOM works, ie:\n     * ```\n     * button.addEventListener('pointerdown', () => {\n     *   console.log('I will log');\n     *   document.addEventListener('pointerdown', () => {\n     *     console.log('I will also log');\n     *   })\n     * });\n     */\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener('pointerdown', handlePointerDown)\n    }, 0)\n\n    cleanupFn(() => {\n      window.clearTimeout(timerId)\n      ownerDocument.removeEventListener('pointerdown', handlePointerDown)\n      ownerDocument.removeEventListener('click', handleClickRef.value)\n    })\n  })\n\n  return {\n    onPointerDownCapture: () => {\n      if (!toValue(enabled))\n        return\n      isPointerInsideDOMTree.value = true\n    },\n  }\n}\n\n/**\n * Listens for when focus happens outside a DOM subtree.\n * Returns props to pass to the root (node) of the subtree we want to check.\n */\nexport function useFocusOutside(\n  onFocusOutside?: (event: FocusOutsideEvent) => void,\n  element?: Ref<HTMLElement | undefined>,\n  enabled: MaybeRefOrGetter<boolean> = true,\n) {\n  const ownerDocument: Document\n    = element?.value?.ownerDocument ?? globalThis?.document\n\n  const isFocusInsideDOMTree = ref(false)\n  watchEffect((cleanupFn) => {\n    if (!isClient || !toValue(enabled))\n      return\n    const handleFocus = async (event: FocusEvent) => {\n      if (!element?.value)\n        return\n\n      await nextTick()\n      await nextTick()\n      const target = event.target as HTMLElement | undefined\n      if (!element.value || !target || isLayerExist(element.value, target))\n        return\n\n      if (event.target && !isFocusInsideDOMTree.value) {\n        const eventDetail = { originalEvent: event }\n        handleAndDispatchCustomEvent(\n          FOCUS_OUTSIDE,\n          onFocusOutside,\n          eventDetail,\n        )\n      }\n    }\n\n    ownerDocument.addEventListener('focusin', handleFocus)\n\n    cleanupFn(() => ownerDocument.removeEventListener('focusin', handleFocus))\n  })\n\n  return {\n    onFocusCapture: () => {\n      if (!toValue(enabled))\n        return\n\n      isFocusInsideDOMTree.value = true\n    },\n    onBlurCapture: () => {\n      if (!toValue(enabled))\n        return\n\n      isFocusInsideDOMTree.value = false\n    },\n  }\n}\n\nexport function dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE)\n  document.dispatchEvent(event)\n}\n","<script lang=\"ts\">\nimport type {\n  FocusOutsideEvent,\n  PointerDownOutsideEvent,\n} from './utils'\n\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n  computed,\n  nextTick,\n  reactive,\n  watch,\n  watchEffect,\n} from 'vue'\nimport { isNullish, useForwardExpose } from '@/shared'\n\nexport interface DismissableLayerProps extends PrimitiveProps {\n  /**\n   * When `true`, hover/focus/click interactions will be disabled on elements outside\n   * the `DismissableLayer`. Users will need to click twice on outside elements to\n   * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n   */\n  disableOutsidePointerEvents?: boolean\n}\n\nexport type DismissableLayerEmits = {\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  escapeKeyDown: [event: KeyboardEvent]\n  /**\n   * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  pointerDownOutside: [event: PointerDownOutsideEvent]\n  /**\n   * Event handler called when the focus moves outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  focusOutside: [ event: FocusOutsideEvent]\n  /**\n   * Event handler called when an interaction happens outside the `DismissableLayer`.\n   * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n   * Can be prevented.\n   */\n  interactOutside: [ event: PointerDownOutsideEvent | FocusOutsideEvent]\n}\n\nexport type DismissableLayerPrivateEmits = DismissableLayerEmits & {\n  /**\n   * Handler called when the `DismissableLayer` should be dismissed\n   */\n  dismiss: []\n}\n\nexport const context = reactive({\n  layersRoot: new Set<HTMLElement>(),\n  layersWithOutsidePointerEventsDisabled: new Set<HTMLElement>(),\n  originalBodyPointerEvents: undefined as string | undefined,\n  branches: new Set<HTMLElement>(),\n})\n</script>\n\n<script setup lang=\"ts\">\nimport { onKeyStroke } from '@vueuse/core'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport {\n  useFocusOutside,\n  usePointerDownOutside,\n} from './utils'\n\nconst props = withDefaults(defineProps<DismissableLayerProps>(), {\n  disableOutsidePointerEvents: false,\n})\n\nconst emits = defineEmits<DismissableLayerPrivateEmits>()\n\nconst { forwardRef, currentElement: layerElement } = useForwardExpose()\nconst ownerDocument = computed(\n  () => layerElement.value?.ownerDocument ?? globalThis.document,\n)\n\nconst layers = computed(() => context.layersRoot)\n\nconst index = computed(() => {\n  return layerElement.value\n    ? Array.from(layers.value).indexOf(layerElement.value)\n    : -1\n})\n\nconst isBodyPointerEventsDisabled = computed(() => {\n  return context.layersWithOutsidePointerEventsDisabled.size > 0\n})\n\nconst isPointerEventsEnabled = computed(() => {\n  const localLayers = Array.from(layers.value)\n  const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1)\n  const highestLayerWithOutsidePointerEventsDisabledIndex = localLayers.indexOf(highestLayerWithOutsidePointerEventsDisabled)\n\n  return index.value >= highestLayerWithOutsidePointerEventsDisabledIndex\n})\n\nconst pointerDownOutside = usePointerDownOutside(async (event) => {\n  const isPointerDownOnBranch = [...context.branches].some(branch =>\n    branch?.contains(event.target as HTMLElement),\n  )\n\n  if (!isPointerEventsEnabled.value || isPointerDownOnBranch)\n    return\n  emits('pointerDownOutside', event)\n  emits('interactOutside', event)\n  await nextTick()\n  if (!event.defaultPrevented)\n    emits('dismiss')\n}, layerElement)\n\nconst focusOutside = useFocusOutside((event) => {\n  const isFocusInBranch = [...context.branches].some(branch =>\n    branch?.contains(event.target as HTMLElement),\n  )\n\n  if (isFocusInBranch)\n    return\n  emits('focusOutside', event)\n  emits('interactOutside', event)\n  if (!event.defaultPrevented)\n    emits('dismiss')\n}, layerElement)\n\nonKeyStroke('Escape', (event) => {\n  const isHighestLayer = index.value === layers.value.size - 1\n  if (!isHighestLayer)\n    return\n  emits('escapeKeyDown', event)\n  if (!event.defaultPrevented)\n    emits('dismiss')\n})\n\n// Use `watch` with explicit sources (instead of `watchEffect`) so this effect\n// only re-runs when `layerElement` or `disableOutsidePointerEvents` change.\n// Reading `context.layersWithOutsidePointerEventsDisabled.size` inside the\n// callback must NOT make it reactive: otherwise adding/removing any other\n// layer would re-run this effect and its cleanup could prematurely restore the\n// body's `pointer-events` while an ancestor layer is still open (#2674).\nwatch(\n  [layerElement, () => props.disableOutsidePointerEvents],\n  ([element, disableOutsidePointerEvents], _, onCleanup) => {\n    if (!element)\n      return\n    if (disableOutsidePointerEvents) {\n      if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n        context.originalBodyPointerEvents = ownerDocument.value.body.style.pointerEvents\n        ownerDocument.value.body.style.pointerEvents = 'none'\n      }\n      context.layersWithOutsidePointerEventsDisabled.add(element)\n\n      // Remove this layer from the set on cleanup (re-run via prop toggle, or\n      // unmount) and restore the body's `pointer-events` only once the last\n      // disabling layer is gone. Removing here — rather than relying solely on\n      // the unmount-only effect below — keeps the set accurate when\n      // `disableOutsidePointerEvents` toggles `true -> false` while still\n      // mounted (e.g. a modal Menu closing). Checking `size === 0` *after*\n      // deletion makes the restore independent of cleanup ordering (#2674).\n      onCleanup(() => {\n        context.layersWithOutsidePointerEventsDisabled.delete(element)\n        if (\n          context.layersWithOutsidePointerEventsDisabled.size === 0\n          && !isNullish(context.originalBodyPointerEvents)\n        ) {\n          ownerDocument.value.body.style.pointerEvents = context.originalBodyPointerEvents\n        }\n      })\n    }\n    layers.value.add(element)\n  },\n  { immediate: true },\n)\n\nwatchEffect((cleanupFn) => {\n  cleanupFn(() => {\n    if (!layerElement.value)\n      return\n    layers.value.delete(layerElement.value)\n    context.layersWithOutsidePointerEventsDisabled.delete(layerElement.value)\n  })\n})\n</script>\n\n<template>\n  <Primitive\n    :ref=\"forwardRef\"\n    :as-child=\"asChild\"\n    :as=\"as\"\n    data-dismissable-layer\n    :style=\"{\n      pointerEvents: isBodyPointerEventsDisabled\n        ? isPointerEventsEnabled\n          ? 'auto'\n          : 'none'\n        : undefined,\n    }\"\n    @focus.capture=\"focusOutside.onFocusCapture\"\n    @blur.capture=\"focusOutside.onBlurCapture\"\n    @pointerdown.capture=\"pointerDownOutside.onPointerDownCapture\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type {\n  FocusOutsideEvent,\n  PointerDownOutsideEvent,\n} from './utils'\n\nimport type { PrimitiveProps } from '@/Primitive'\nimport {\n  computed,\n  nextTick,\n  reactive,\n  watch,\n  watchEffect,\n} from 'vue'\nimport { isNullish, useForwardExpose } from '@/shared'\n\nexport interface DismissableLayerProps extends PrimitiveProps {\n  /**\n   * When `true`, hover/focus/click interactions will be disabled on elements outside\n   * the `DismissableLayer`. Users will need to click twice on outside elements to\n   * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n   */\n  disableOutsidePointerEvents?: boolean\n}\n\nexport type DismissableLayerEmits = {\n  /**\n   * Event handler called when the escape key is down.\n   * Can be prevented.\n   */\n  escapeKeyDown: [event: KeyboardEvent]\n  /**\n   * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  pointerDownOutside: [event: PointerDownOutsideEvent]\n  /**\n   * Event handler called when the focus moves outside of the `DismissableLayer`.\n   * Can be prevented.\n   */\n  focusOutside: [ event: FocusOutsideEvent]\n  /**\n   * Event handler called when an interaction happens outside the `DismissableLayer`.\n   * Specifically, when a `pointerdown` event happens outside or focus moves outside of it.\n   * Can be prevented.\n   */\n  interactOutside: [ event: PointerDownOutsideEvent | FocusOutsideEvent]\n}\n\nexport type DismissableLayerPrivateEmits = DismissableLayerEmits & {\n  /**\n   * Handler called when the `DismissableLayer` should be dismissed\n   */\n  dismiss: []\n}\n\nexport const context = reactive({\n  layersRoot: new Set<HTMLElement>(),\n  layersWithOutsidePointerEventsDisabled: new Set<HTMLElement>(),\n  originalBodyPointerEvents: undefined as string | undefined,\n  branches: new Set<HTMLElement>(),\n})\n</script>\n\n<script setup lang=\"ts\">\nimport { onKeyStroke } from '@vueuse/core'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport {\n  useFocusOutside,\n  usePointerDownOutside,\n} from './utils'\n\nconst props = withDefaults(defineProps<DismissableLayerProps>(), {\n  disableOutsidePointerEvents: false,\n})\n\nconst emits = defineEmits<DismissableLayerPrivateEmits>()\n\nconst { forwardRef, currentElement: layerElement } = useForwardExpose()\nconst ownerDocument = computed(\n  () => layerElement.value?.ownerDocument ?? globalThis.document,\n)\n\nconst layers = computed(() => context.layersRoot)\n\nconst index = computed(() => {\n  return layerElement.value\n    ? Array.from(layers.value).indexOf(layerElement.value)\n    : -1\n})\n\nconst isBodyPointerEventsDisabled = computed(() => {\n  return context.layersWithOutsidePointerEventsDisabled.size > 0\n})\n\nconst isPointerEventsEnabled = computed(() => {\n  const localLayers = Array.from(layers.value)\n  const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1)\n  const highestLayerWithOutsidePointerEventsDisabledIndex = localLayers.indexOf(highestLayerWithOutsidePointerEventsDisabled)\n\n  return index.value >= highestLayerWithOutsidePointerEventsDisabledIndex\n})\n\nconst pointerDownOutside = usePointerDownOutside(async (event) => {\n  const isPointerDownOnBranch = [...context.branches].some(branch =>\n    branch?.contains(event.target as HTMLElement),\n  )\n\n  if (!isPointerEventsEnabled.value || isPointerDownOnBranch)\n    return\n  emits('pointerDownOutside', event)\n  emits('interactOutside', event)\n  await nextTick()\n  if (!event.defaultPrevented)\n    emits('dismiss')\n}, layerElement)\n\nconst focusOutside = useFocusOutside((event) => {\n  const isFocusInBranch = [...context.branches].some(branch =>\n    branch?.contains(event.target as HTMLElement),\n  )\n\n  if (isFocusInBranch)\n    return\n  emits('focusOutside', event)\n  emits('interactOutside', event)\n  if (!event.defaultPrevented)\n    emits('dismiss')\n}, layerElement)\n\nonKeyStroke('Escape', (event) => {\n  const isHighestLayer = index.value === layers.value.size - 1\n  if (!isHighestLayer)\n    return\n  emits('escapeKeyDown', event)\n  if (!event.defaultPrevented)\n    emits('dismiss')\n})\n\n// Use `watch` with explicit sources (instead of `watchEffect`) so this effect\n// only re-runs when `layerElement` or `disableOutsidePointerEvents` change.\n// Reading `context.layersWithOutsidePointerEventsDisabled.size` inside the\n// callback must NOT make it reactive: otherwise adding/removing any other\n// layer would re-run this effect and its cleanup could prematurely restore the\n// body's `pointer-events` while an ancestor layer is still open (#2674).\nwatch(\n  [layerElement, () => props.disableOutsidePointerEvents],\n  ([element, disableOutsidePointerEvents], _, onCleanup) => {\n    if (!element)\n      return\n    if (disableOutsidePointerEvents) {\n      if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n        context.originalBodyPointerEvents = ownerDocument.value.body.style.pointerEvents\n        ownerDocument.value.body.style.pointerEvents = 'none'\n      }\n      context.layersWithOutsidePointerEventsDisabled.add(element)\n\n      // Remove this layer from the set on cleanup (re-run via prop toggle, or\n      // unmount) and restore the body's `pointer-events` only once the last\n      // disabling layer is gone. Removing here — rather than relying solely on\n      // the unmount-only effect below — keeps the set accurate when\n      // `disableOutsidePointerEvents` toggles `true -> false` while still\n      // mounted (e.g. a modal Menu closing). Checking `size === 0` *after*\n      // deletion makes the restore independent of cleanup ordering (#2674).\n      onCleanup(() => {\n        context.layersWithOutsidePointerEventsDisabled.delete(element)\n        if (\n          context.layersWithOutsidePointerEventsDisabled.size === 0\n          && !isNullish(context.originalBodyPointerEvents)\n        ) {\n          ownerDocument.value.body.style.pointerEvents = context.originalBodyPointerEvents\n        }\n      })\n    }\n    layers.value.add(element)\n  },\n  { immediate: true },\n)\n\nwatchEffect((cleanupFn) => {\n  cleanupFn(() => {\n    if (!layerElement.value)\n      return\n    layers.value.delete(layerElement.value)\n    context.layersWithOutsidePointerEventsDisabled.delete(layerElement.value)\n  })\n})\n</script>\n\n<template>\n  <Primitive\n    :ref=\"forwardRef\"\n    :as-child=\"asChild\"\n    :as=\"as\"\n    data-dismissable-layer\n    :style=\"{\n      pointerEvents: isBodyPointerEventsDisabled\n        ? isPointerEventsEnabled\n          ? 'auto'\n          : 'none'\n        : undefined,\n    }\"\n    @focus.capture=\"focusOutside.onFocusCapture\"\n    @blur.capture=\"focusOutside.onBlurCapture\"\n    @pointerdown.capture=\"pointerDownOutside.onPointerDownCapture\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","import { createGlobalState } from '@vueuse/core'\nimport { ref } from 'vue'\n\ninterface FocusScopeAPI {\n  paused: boolean\n  pause: () => void\n  resume: () => void\n}\n\nconst useFocusStackState = createGlobalState(() => {\n  const stack = ref<FocusScopeAPI[]>([])\n  return stack\n})\n\nexport function createFocusScopesStack() {\n  /** A stack of focus scopes, with the active one at the top */\n  const stack = useFocusStackState()\n\n  return {\n    add(focusScope: FocusScopeAPI) {\n      // pause the currently active focus scope (at the top of the stack)\n      const activeFocusScope = stack.value[0]\n      if (focusScope !== activeFocusScope)\n        activeFocusScope?.pause()\n\n      // remove in case it already exists (because we'll re-add it at the top of the stack)\n      stack.value = arrayRemove(stack.value, focusScope)\n      stack.value.unshift(focusScope)\n    },\n\n    remove(focusScope: FocusScopeAPI) {\n      stack.value = arrayRemove(stack.value, focusScope)\n      stack.value[0]?.resume()\n    },\n  }\n}\n\nexport function arrayRemove<T>(array: T[], item: T) {\n  const updatedArray = [...array]\n  const index = updatedArray.indexOf(item)\n  if (index !== -1)\n    updatedArray.splice(index, 1)\n\n  return updatedArray\n}\n\nexport function removeLinks(items: HTMLElement[]) {\n  return items.filter(item => item.tagName !== 'A')\n}\n","import { getActiveElement } from '@/shared'\n\nexport const AUTOFOCUS_ON_MOUNT = 'focusScope.autoFocusOnMount'\nexport const AUTOFOCUS_ON_UNMOUNT = 'focusScope.autoFocusOnUnmount'\nexport const EVENT_OPTIONS = { bubbles: false, cancelable: true }\n\ntype FocusableTarget = HTMLElement | { focus: () => void }\n\n/**\n * Attempts focusing the first element in a list of candidates.\n * Stops when focus has actually moved.\n */\nexport function focusFirst(candidates: HTMLElement[], { select = false } = {}) {\n  const previouslyFocusedElement = getActiveElement()\n  for (const candidate of candidates) {\n    focus(candidate, { select })\n    if (getActiveElement() !== previouslyFocusedElement)\n      return true\n  }\n}\n\n/**\n * Returns the first and last tabbable elements inside a container.\n */\nexport function getTabbableEdges(container: HTMLElement) {\n  const candidates = getTabbableCandidates(container)\n  const first = findVisible(candidates, container)\n  const last = findVisible(candidates.reverse(), container)\n  return [first, last] as const\n}\n\n/**\n * Returns a list of potential tabbable candidates.\n *\n * NOTE: This is only a close approximation. For example it doesn't take into account cases like when\n * elements are not visible. This cannot be worked out easily by just reading a property, but rather\n * necessitate runtime knowledge (computed styles, etc). We deal with these cases separately.\n *\n * See: https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker\n * Credit: https://github.com/discord/focus-layers/blob/master/src/util/wrapFocus.tsx#L1\n */\nexport function getTabbableCandidates(container: HTMLElement) {\n  const nodes: HTMLElement[] = []\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node: any) => {\n      const isHiddenInput = node.tagName === 'INPUT' && node.type === 'hidden'\n      if (node.disabled || node.hidden || isHiddenInput)\n        return NodeFilter.FILTER_SKIP\n      // `.tabIndex` is not the same as the `tabindex` attribute. It works on the\n      // runtime's understanding of tabbability, so this automatically accounts\n      // for any kind of element that could be tabbed to.\n      return node.tabIndex >= 0\n        ? NodeFilter.FILTER_ACCEPT\n        : NodeFilter.FILTER_SKIP\n    },\n  })\n  while (walker.nextNode()) nodes.push(walker.currentNode as HTMLElement)\n  // we do not take into account the order of nodes with positive `tabIndex` as it\n  // hinders accessibility to have tab order different from visual order.\n  return nodes\n}\n\n/**\n * Returns the first visible element in a list.\n * NOTE: Only checks visibility up to the `container`.\n */\nexport function findVisible(elements: HTMLElement[], container: HTMLElement) {\n  for (const element of elements) {\n    // we stop checking if it's hidden at the `container` level (excluding)\n    if (!isHidden(element, { upTo: container }))\n      return element\n  }\n}\n\nexport function isHidden(node: HTMLElement, { upTo }: { upTo?: HTMLElement }) {\n  if (getComputedStyle(node).visibility === 'hidden')\n    return true\n  while (node) {\n    // we stop at `upTo` (excluding it)\n    if (upTo !== undefined && node === upTo)\n      return false\n    if (getComputedStyle(node).display === 'none')\n      return true\n    node = node.parentElement as HTMLElement\n  }\n  return false\n}\n\nexport function isSelectableInput(\n  element: any,\n): element is FocusableTarget & { select: () => void } {\n  return element instanceof HTMLInputElement && 'select' in element\n}\n\nexport function focus(\n  element?: FocusableTarget | null,\n  { select = false } = {},\n) {\n  // only focus if that element is focusable\n  if (element && element.focus) {\n    const previouslyFocusedElement = getActiveElement()\n    // NOTE: we prevent scrolling on focus, to minimize jarring transitions for users\n    element.focus({ preventScroll: true })\n    // only select if its not the same element, it supports selection and we need to select\n    if (\n      element !== previouslyFocusedElement\n      && isSelectableInput(element)\n      && select\n    ) {\n      element.select()\n    }\n  }\n}\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { getActiveElement, useForwardExpose } from '@/shared'\n\nexport type FocusScopeEmits = {\n  /**\n   * Event handler called when auto-focusing on mount.\n   * Can be prevented.\n   */\n  mountAutoFocus: [event: Event]\n\n  /**\n   * Event handler called when auto-focusing on unmount.\n   * Can be prevented.\n   */\n  unmountAutoFocus: [event: Event]\n}\n\nexport interface FocusScopeProps extends PrimitiveProps {\n  /**\n   * When `true`, tabbing from last item will focus first tabbable\n   * and shift+tab from first item will focus last tababble.\n   * @defaultValue false\n   */\n  loop?: boolean\n\n  /**\n   * When `true`, focus cannot escape the focus scope via keyboard,\n   * pointer, or a programmatic focus.\n   * @defaultValue false\n   */\n  trapped?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { isClient } from '@vueuse/shared'\nimport { nextTick, reactive, ref, watchEffect } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { createFocusScopesStack } from './stack'\nimport {\n  AUTOFOCUS_ON_MOUNT,\n  AUTOFOCUS_ON_UNMOUNT,\n  EVENT_OPTIONS,\n  focus,\n  focusFirst,\n  getTabbableCandidates,\n  getTabbableEdges,\n} from './utils'\n\nconst props = withDefaults(defineProps<FocusScopeProps>(), {\n  loop: false,\n  trapped: false,\n})\nconst emits = defineEmits<FocusScopeEmits>()\n\nconst { currentRef, currentElement } = useForwardExpose()\nconst lastFocusedElementRef = ref<HTMLElement | null>(null)\nconst focusScopesStack = createFocusScopesStack()\n\nconst focusScope = reactive({\n  paused: false,\n  pause() {\n    this.paused = true\n  },\n  resume() {\n    this.paused = false\n  },\n})\n\nwatchEffect((cleanupFn) => {\n  if (!isClient)\n    return\n  const container = currentElement.value\n  if (!props.trapped)\n    return\n\n  function handleFocusIn(event: FocusEvent) {\n    if (focusScope.paused || !container)\n      return\n    const target = event.target as HTMLElement | null\n    if (container.contains(target))\n      lastFocusedElementRef.value = target\n    else focus(lastFocusedElementRef.value, { select: true })\n  }\n\n  function handleFocusOut(event: FocusEvent) {\n    if (focusScope.paused || !container)\n      return\n    const relatedTarget = event.relatedTarget as HTMLElement | null\n\n    // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n    //\n    // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n    // 2. In Google Chrome, when the focused element is removed from the DOM.\n    //\n    // We let the browser do its thing here because:\n    //\n    // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n    // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n    //    throws the CPU to 100%, so we avoid doing anything for this reason here too.\n    if (relatedTarget === null)\n      return\n\n    // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n    // that is outside the container, we move focus to the last valid focused element inside.\n    if (!container.contains(relatedTarget))\n      focus(lastFocusedElementRef.value, { select: true })\n  }\n\n  // When the focused element gets removed from the DOM, browsers move focus\n  // back to the document.body. In this case, we move focus to the container\n  // to keep focus trapped correctly.\n  // -- related: https://github.com/unovue/reka-ui/issues/518\n  // Reka UI tentative solution:\n  // instead of leaning on document.activeElement, we use lastFocusedElementRef.value to check\n  // if the element still exist inside the container,\n  // if not then we focus to the container\n  function handleMutations(mutations: MutationRecord[]) {\n    const lastFocusedElement = lastFocusedElementRef.value\n\n    // Mutation may be triggered by something unrelated to focus, e.g. class is set on an element\n    // so we first check if we even have a previously focused element.\n    if (lastFocusedElement === null) {\n      return\n    }\n\n    // Ensure mutations removed nodes from the DOM at all.\n    const anyNodesRemoved = mutations.some(m => m.removedNodes.length > 0)\n    if (!anyNodesRemoved) {\n      return\n    }\n\n    const isLastFocusedElementExist = container.contains(lastFocusedElement)\n    if (!isLastFocusedElementExist)\n      focus(container)\n  }\n\n  document.addEventListener('focusin', handleFocusIn)\n  document.addEventListener('focusout', handleFocusOut)\n  const mutationObserver = new MutationObserver(handleMutations)\n  if (container)\n    mutationObserver.observe(container, { childList: true, subtree: true })\n\n  cleanupFn(() => {\n    document.removeEventListener('focusin', handleFocusIn)\n    document.removeEventListener('focusout', handleFocusOut)\n    mutationObserver.disconnect()\n  })\n})\n\nwatchEffect(async (cleanupFn) => {\n  const container = currentElement.value\n\n  await nextTick()\n  if (!container)\n    return\n  focusScopesStack.add(focusScope)\n  const previouslyFocusedElement = getActiveElement() as HTMLElement | null\n  const hasFocusedCandidate = container.contains(previouslyFocusedElement)\n\n  if (!hasFocusedCandidate) {\n    const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS)\n    container.addEventListener(AUTOFOCUS_ON_MOUNT, (ev: Event) =>\n      emits('mountAutoFocus', ev))\n    container.dispatchEvent(mountEvent)\n\n    if (!mountEvent.defaultPrevented) {\n      focusFirst(getTabbableCandidates(container), {\n        select: true,\n      })\n      if (getActiveElement() === previouslyFocusedElement)\n        focus(container)\n    }\n  }\n\n  cleanupFn(() => {\n    container.removeEventListener(AUTOFOCUS_ON_MOUNT, (ev: Event) =>\n      emits('mountAutoFocus', ev))\n\n    const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS)\n    const unmountEventHandler = (ev: Event) => {\n      emits('unmountAutoFocus', ev)\n    }\n    container.addEventListener(AUTOFOCUS_ON_UNMOUNT, unmountEventHandler)\n    container.dispatchEvent(unmountEvent)\n\n    // Signal that blur events fired below are system-initiated (focus trap\n    // cleanup), not user-initiated. Consumers can use this to skip validation.\n    container.setAttribute('data-focus-scope-unmounting', '')\n\n    setTimeout(() => {\n      if (!unmountEvent.defaultPrevented)\n        focus(previouslyFocusedElement ?? document.body, { select: true })\n\n      // we need to remove the listener after we `dispatchEvent`\n      container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, unmountEventHandler)\n\n      focusScopesStack.remove(focusScope)\n      container.removeAttribute('data-focus-scope-unmounting')\n    }, 0)\n  })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (!props.loop && !props.trapped)\n    return\n  if (focusScope.paused)\n    return\n\n  const isTabKey\n    = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey\n  const focusedElement = getActiveElement() as HTMLElement | null\n\n  if (isTabKey && focusedElement) {\n    const container = event.currentTarget as HTMLElement\n    const [first, last] = getTabbableEdges(container)\n    const hasTabbableElementsInside = first && last\n\n    // we can only wrap focus if we have tabbable edges\n    if (!hasTabbableElementsInside) {\n      if (focusedElement === container)\n        event.preventDefault()\n    }\n    else {\n      if (!event.shiftKey && focusedElement === last) {\n        event.preventDefault()\n        if (props.loop)\n          focus(first, { select: true })\n      }\n      else if (event.shiftKey && focusedElement === first) {\n        event.preventDefault()\n        if (props.loop)\n          focus(last, { select: true })\n      }\n    }\n  }\n}\n</script>\n\n<template>\n  <Primitive\n    ref=\"currentRef\"\n    tabindex=\"-1\"\n    :as-child=\"asChild\"\n    :as=\"as\"\n    @keydown=\"handleKeyDown\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { getActiveElement, useForwardExpose } from '@/shared'\n\nexport type FocusScopeEmits = {\n  /**\n   * Event handler called when auto-focusing on mount.\n   * Can be prevented.\n   */\n  mountAutoFocus: [event: Event]\n\n  /**\n   * Event handler called when auto-focusing on unmount.\n   * Can be prevented.\n   */\n  unmountAutoFocus: [event: Event]\n}\n\nexport interface FocusScopeProps extends PrimitiveProps {\n  /**\n   * When `true`, tabbing from last item will focus first tabbable\n   * and shift+tab from first item will focus last tababble.\n   * @defaultValue false\n   */\n  loop?: boolean\n\n  /**\n   * When `true`, focus cannot escape the focus scope via keyboard,\n   * pointer, or a programmatic focus.\n   * @defaultValue false\n   */\n  trapped?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { isClient } from '@vueuse/shared'\nimport { nextTick, reactive, ref, watchEffect } from 'vue'\nimport { Primitive } from '@/Primitive'\nimport { createFocusScopesStack } from './stack'\nimport {\n  AUTOFOCUS_ON_MOUNT,\n  AUTOFOCUS_ON_UNMOUNT,\n  EVENT_OPTIONS,\n  focus,\n  focusFirst,\n  getTabbableCandidates,\n  getTabbableEdges,\n} from './utils'\n\nconst props = withDefaults(defineProps<FocusScopeProps>(), {\n  loop: false,\n  trapped: false,\n})\nconst emits = defineEmits<FocusScopeEmits>()\n\nconst { currentRef, currentElement } = useForwardExpose()\nconst lastFocusedElementRef = ref<HTMLElement | null>(null)\nconst focusScopesStack = createFocusScopesStack()\n\nconst focusScope = reactive({\n  paused: false,\n  pause() {\n    this.paused = true\n  },\n  resume() {\n    this.paused = false\n  },\n})\n\nwatchEffect((cleanupFn) => {\n  if (!isClient)\n    return\n  const container = currentElement.value\n  if (!props.trapped)\n    return\n\n  function handleFocusIn(event: FocusEvent) {\n    if (focusScope.paused || !container)\n      return\n    const target = event.target as HTMLElement | null\n    if (container.contains(target))\n      lastFocusedElementRef.value = target\n    else focus(lastFocusedElementRef.value, { select: true })\n  }\n\n  function handleFocusOut(event: FocusEvent) {\n    if (focusScope.paused || !container)\n      return\n    const relatedTarget = event.relatedTarget as HTMLElement | null\n\n    // A `focusout` event with a `null` `relatedTarget` will happen in at least two cases:\n    //\n    // 1. When the user switches app/tabs/windows/the browser itself loses focus.\n    // 2. In Google Chrome, when the focused element is removed from the DOM.\n    //\n    // We let the browser do its thing here because:\n    //\n    // 1. The browser already keeps a memory of what's focused for when the page gets refocused.\n    // 2. In Google Chrome, if we try to focus the deleted focused element (as per below), it\n    //    throws the CPU to 100%, so we avoid doing anything for this reason here too.\n    if (relatedTarget === null)\n      return\n\n    // If the focus has moved to an actual legitimate element (`relatedTarget !== null`)\n    // that is outside the container, we move focus to the last valid focused element inside.\n    if (!container.contains(relatedTarget))\n      focus(lastFocusedElementRef.value, { select: true })\n  }\n\n  // When the focused element gets removed from the DOM, browsers move focus\n  // back to the document.body. In this case, we move focus to the container\n  // to keep focus trapped correctly.\n  // -- related: https://github.com/unovue/reka-ui/issues/518\n  // Reka UI tentative solution:\n  // instead of leaning on document.activeElement, we use lastFocusedElementRef.value to check\n  // if the element still exist inside the container,\n  // if not then we focus to the container\n  function handleMutations(mutations: MutationRecord[]) {\n    const lastFocusedElement = lastFocusedElementRef.value\n\n    // Mutation may be triggered by something unrelated to focus, e.g. class is set on an element\n    // so we first check if we even have a previously focused element.\n    if (lastFocusedElement === null) {\n      return\n    }\n\n    // Ensure mutations removed nodes from the DOM at all.\n    const anyNodesRemoved = mutations.some(m => m.removedNodes.length > 0)\n    if (!anyNodesRemoved) {\n      return\n    }\n\n    const isLastFocusedElementExist = container.contains(lastFocusedElement)\n    if (!isLastFocusedElementExist)\n      focus(container)\n  }\n\n  document.addEventListener('focusin', handleFocusIn)\n  document.addEventListener('focusout', handleFocusOut)\n  const mutationObserver = new MutationObserver(handleMutations)\n  if (container)\n    mutationObserver.observe(container, { childList: true, subtree: true })\n\n  cleanupFn(() => {\n    document.removeEventListener('focusin', handleFocusIn)\n    document.removeEventListener('focusout', handleFocusOut)\n    mutationObserver.disconnect()\n  })\n})\n\nwatchEffect(async (cleanupFn) => {\n  const container = currentElement.value\n\n  await nextTick()\n  if (!container)\n    return\n  focusScopesStack.add(focusScope)\n  const previouslyFocusedElement = getActiveElement() as HTMLElement | null\n  const hasFocusedCandidate = container.contains(previouslyFocusedElement)\n\n  if (!hasFocusedCandidate) {\n    const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS)\n    container.addEventListener(AUTOFOCUS_ON_MOUNT, (ev: Event) =>\n      emits('mountAutoFocus', ev))\n    container.dispatchEvent(mountEvent)\n\n    if (!mountEvent.defaultPrevented) {\n      focusFirst(getTabbableCandidates(container), {\n        select: true,\n      })\n      if (getActiveElement() === previouslyFocusedElement)\n        focus(container)\n    }\n  }\n\n  cleanupFn(() => {\n    container.removeEventListener(AUTOFOCUS_ON_MOUNT, (ev: Event) =>\n      emits('mountAutoFocus', ev))\n\n    const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS)\n    const unmountEventHandler = (ev: Event) => {\n      emits('unmountAutoFocus', ev)\n    }\n    container.addEventListener(AUTOFOCUS_ON_UNMOUNT, unmountEventHandler)\n    container.dispatchEvent(unmountEvent)\n\n    // Signal that blur events fired below are system-initiated (focus trap\n    // cleanup), not user-initiated. Consumers can use this to skip validation.\n    container.setAttribute('data-focus-scope-unmounting', '')\n\n    setTimeout(() => {\n      if (!unmountEvent.defaultPrevented)\n        focus(previouslyFocusedElement ?? document.body, { select: true })\n\n      // we need to remove the listener after we `dispatchEvent`\n      container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, unmountEventHandler)\n\n      focusScopesStack.remove(focusScope)\n      container.removeAttribute('data-focus-scope-unmounting')\n    }, 0)\n  })\n})\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (!props.loop && !props.trapped)\n    return\n  if (focusScope.paused)\n    return\n\n  const isTabKey\n    = event.key === 'Tab' && !event.altKey && !event.ctrlKey && !event.metaKey\n  const focusedElement = getActiveElement() as HTMLElement | null\n\n  if (isTabKey && focusedElement) {\n    const container = event.currentTarget as HTMLElement\n    const [first, last] = getTabbableEdges(container)\n    const hasTabbableElementsInside = first && last\n\n    // we can only wrap focus if we have tabbable edges\n    if (!hasTabbableElementsInside) {\n      if (focusedElement === container)\n        event.preventDefault()\n    }\n    else {\n      if (!event.shiftKey && focusedElement === last) {\n        event.preventDefault()\n        if (props.loop)\n          focus(first, { select: true })\n      }\n      else if (event.shiftKey && focusedElement === first) {\n        event.preventDefault()\n        if (props.loop)\n          focus(last, { select: true })\n      }\n    }\n  }\n}\n</script>\n\n<template>\n  <Primitive\n    ref=\"currentRef\"\n    tabindex=\"-1\"\n    :as-child=\"asChild\"\n    :as=\"as\"\n    @keydown=\"handleKeyDown\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","import { getActiveElement } from '@/shared'\n\nexport type CheckedState = boolean | 'indeterminate'\nexport type Direction = 'ltr' | 'rtl'\n\nexport const ITEM_NAME = 'MenuItem'\nexport const ITEM_SELECT = 'menu.itemSelect'\nexport const SELECTION_KEYS = ['Enter', ' ']\nexport const FIRST_KEYS = ['ArrowDown', 'PageUp', 'Home']\nexport const LAST_KEYS = ['ArrowUp', 'PageDown', 'End']\nexport const FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS]\nexport const SUB_OPEN_KEYS: Record<Direction, string[]> = {\n  ltr: [...SELECTION_KEYS, 'ArrowRight'],\n  rtl: [...SELECTION_KEYS, 'ArrowLeft'],\n}\nexport const SUB_CLOSE_KEYS: Record<Direction, string[]> = {\n  ltr: ['ArrowLeft'],\n  rtl: ['ArrowRight'],\n}\n\nexport function getOpenState(open: boolean) {\n  return open ? 'open' : 'closed'\n}\n\nexport function isIndeterminate(\n  checked?: CheckedState,\n): checked is 'indeterminate' {\n  return checked === 'indeterminate'\n}\n\nexport function getCheckedState(checked: CheckedState) {\n  return isIndeterminate(checked)\n    ? 'indeterminate'\n    : checked\n      ? 'checked'\n      : 'unchecked'\n}\n\nexport function focusFirst(candidates: HTMLElement[]) {\n  const PREVIOUSLY_FOCUSED_ELEMENT = getActiveElement()\n  for (const candidate of candidates) {\n    // if focus is already where we want to go, we don't want to keep going through the candidates\n    if (candidate === PREVIOUSLY_FOCUSED_ELEMENT)\n      return\n    candidate.focus()\n    if (getActiveElement() !== PREVIOUSLY_FOCUSED_ELEMENT)\n      return\n  }\n}\n\nexport interface Point {\n  x: number\n  y: number\n}\nexport type Polygon = Point[]\nexport type Side = 'left' | 'right'\nexport interface GraceIntent {\n  area: Polygon\n  side: Side\n}\n\n// Determine if a point is inside of a polygon.\n// Based on https://github.com/substack/point-in-polygon\nexport function isPointInPolygon(point: Point, polygon: Polygon) {\n  const { x, y } = point\n  let inside = false\n  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n    const xi = polygon[i].x\n    const yi = polygon[i].y\n    const xj = polygon[j].x\n    const yj = polygon[j].y\n\n    const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi)\n    if (intersect)\n      inside = !inside\n  }\n\n  return inside\n}\n\nexport function isPointerInGraceArea(event: PointerEvent, area?: Polygon) {\n  if (!area)\n    return false\n  const cursorPos = { x: event.clientX, y: event.clientY }\n  return isPointInPolygon(cursorPos, area)\n}\n\nexport function isMouseEvent(event: PointerEvent) {\n  return event.pointerType === 'mouse'\n}\n","<script lang=\"ts\">\nexport interface TeleportProps {\n  /**\n   * Vue native teleport component prop `:to`\n   *\n   * {@link https://vuejs.org/guide/built-ins/teleport.html#basic-usage}\n   */\n  to?: string | HTMLElement\n  /**\n   * Disable teleport and render the component inline\n   *\n   * {@link https://vuejs.org/guide/built-ins/teleport.html#disabling-teleport}\n   */\n  disabled?: boolean\n  /**\n   * Defer the resolving of a Teleport target until other parts of the\n   * application have mounted (requires Vue 3.5.0+)\n   *\n   * {@link https://vuejs.org/guide/built-ins/teleport.html#deferred-teleport}\n   */\n  defer?: boolean\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with Vue animation libraries.\n   */\n  forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useMounted } from '@vueuse/core'\n\nwithDefaults(defineProps<TeleportProps>(), {\n  to: 'body',\n})\n\nconst isMounted = useMounted()\n</script>\n\n<template>\n  <Teleport\n    v-if=\"isMounted || forceMount\"\n    :to=\"to\"\n    :disabled=\"disabled\"\n    :defer=\"defer\"\n  >\n    <slot />\n  </Teleport>\n</template>\n","<script lang=\"ts\">\nexport interface TeleportProps {\n  /**\n   * Vue native teleport component prop `:to`\n   *\n   * {@link https://vuejs.org/guide/built-ins/teleport.html#basic-usage}\n   */\n  to?: string | HTMLElement\n  /**\n   * Disable teleport and render the component inline\n   *\n   * {@link https://vuejs.org/guide/built-ins/teleport.html#disabling-teleport}\n   */\n  disabled?: boolean\n  /**\n   * Defer the resolving of a Teleport target until other parts of the\n   * application have mounted (requires Vue 3.5.0+)\n   *\n   * {@link https://vuejs.org/guide/built-ins/teleport.html#deferred-teleport}\n   */\n  defer?: boolean\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with Vue animation libraries.\n   */\n  forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { useMounted } from '@vueuse/core'\n\nwithDefaults(defineProps<TeleportProps>(), {\n  to: 'body',\n})\n\nconst isMounted = useMounted()\n</script>\n\n<template>\n  <Teleport\n    v-if=\"isMounted || forceMount\"\n    :to=\"to\"\n    :disabled=\"disabled\"\n    :defer=\"defer\"\n  >\n    <slot />\n  </Teleport>\n</template>\n","import type { Ref } from 'vue'\nimport { computed, defineComponent, h, inject, markRaw, provide, ref, watch, watchEffect } from 'vue'\nimport { Slot, usePrimitiveElement } from '@/Primitive'\n\ninterface CollectionContext<ItemData = {}> {\n  collectionRef: Ref<HTMLElement | undefined>\n  itemMap: Ref<Map<HTMLElement, { ref: HTMLElement, value?: any } & ItemData>>\n}\n\nconst ITEM_DATA_ATTR = 'data-reka-collection-item'\n\nexport function useCollection<ItemData = {}>(options: { key?: string, isProvider?: boolean } = {}) {\n  const { key = '', isProvider = false } = options\n  const injectionKey = `${key}CollectionProvider`\n  let context: CollectionContext<ItemData>\n\n  if (isProvider) {\n    const itemMap = ref<Map<HTMLElement, { ref: HTMLElement } & ItemData>>(new Map())\n    const collectionRef = ref<HTMLElement>()\n\n    context = {\n      collectionRef,\n      itemMap,\n    } as CollectionContext<ItemData>\n    provide(injectionKey, context)\n  }\n  else {\n    context = inject(injectionKey) as CollectionContext<ItemData>\n  }\n\n  const getItems = (includeDisabledItem = false) => {\n    const collectionNode = context.collectionRef.value\n    if (!collectionNode)\n      return []\n    const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`))\n    const items = Array.from(context.itemMap.value.values())\n    const orderedItems = items.sort(\n      (a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref),\n    )\n\n    if (includeDisabledItem)\n      return orderedItems\n    else\n      return orderedItems.filter(i => i.ref.dataset.disabled !== '')\n  }\n\n  const CollectionSlot = defineComponent({\n    name: 'CollectionSlot',\n    inheritAttrs: false,\n    setup(_, { slots, attrs }) {\n      const { primitiveElement, currentElement } = usePrimitiveElement()\n      watch(currentElement, () => {\n        context.collectionRef.value = currentElement.value\n      })\n      return () => h(Slot, { ref: primitiveElement, ...attrs }, slots)\n    },\n  })\n\n  const CollectionItem = defineComponent({\n    name: 'CollectionItem',\n    inheritAttrs: false,\n    props: {\n      value: {\n        // It accepts any value\n        validator: () => true,\n      },\n    },\n    setup(props, { slots, attrs }) {\n      const { primitiveElement, currentElement } = usePrimitiveElement()\n\n      watchEffect((cleanupFn) => {\n        if (currentElement.value) {\n          const key = markRaw(currentElement.value)\n          // @ts-expect-error ignore assignment of unknown to any\n          context.itemMap.value.set(key, { ref: currentElement.value!, value: props.value })\n          cleanupFn(() => context.itemMap.value.delete(key))\n        }\n      })\n\n      return () => h(Slot, { ...attrs, [ITEM_DATA_ATTR]: '', ref: primitiveElement }, slots)\n    },\n  })\n\n  const reactiveItems = computed(() => Array.from(context.itemMap.value.values()))\n  const itemMapSize = computed(() => context.itemMap.value.size)\n\n  return { getItems, reactiveItems, itemMapSize, CollectionSlot, CollectionItem }\n}\n","import { getActiveElement } from '@/shared'\n\nexport type Orientation = 'horizontal' | 'vertical'\nexport type Direction = 'ltr' | 'rtl'\n\nexport const ENTRY_FOCUS = 'rovingFocusGroup.onEntryFocus'\nexport const EVENT_OPTIONS = { bubbles: false, cancelable: true }\n\nexport const MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {\n  ArrowLeft: 'prev',\n  ArrowUp: 'prev',\n  ArrowRight: 'next',\n  ArrowDown: 'next',\n  PageUp: 'first',\n  Home: 'first',\n  PageDown: 'last',\n  End: 'last',\n}\n\nexport function getDirectionAwareKey(key: string, dir?: Direction) {\n  if (dir !== 'rtl')\n    return key\n  return key === 'ArrowLeft'\n    ? 'ArrowRight'\n    : key === 'ArrowRight'\n      ? 'ArrowLeft'\n      : key\n}\n\ntype FocusIntent = 'first' | 'last' | 'prev' | 'next'\n\nexport function getFocusIntent(\n  event: KeyboardEvent,\n  orientation?: Orientation,\n  dir?: Direction,\n) {\n  const key = getDirectionAwareKey(event.key, dir)\n  if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key))\n    return undefined\n  if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key))\n    return undefined\n  return MAP_KEY_TO_FOCUS_INTENT[key]\n}\n\nexport function focusFirst(candidates: HTMLElement[], preventScroll = false) {\n  const PREVIOUSLY_FOCUSED_ELEMENT = getActiveElement()\n  for (const candidate of candidates) {\n    // if focus is already where we want to go, we don't want to keep going through the candidates\n    if (candidate === PREVIOUSLY_FOCUSED_ELEMENT)\n      return\n    candidate.focus({ preventScroll })\n    if (getActiveElement() !== PREVIOUSLY_FOCUSED_ELEMENT)\n      return\n  }\n}\n\n/**\n * Wraps an array around itself at a given start index\n * Example: `wrapArray(['a', 'b', 'c', 'd'], 2) === ['c', 'd', 'a', 'b']`\n */\nexport function wrapArray<T>(array: T[], startIndex: number) {\n  return array.map((_, index) => array[(startIndex + index) % array.length])\n}\n","<script lang=\"ts\">\nimport type { ReferenceElement } from '@floating-ui/vue'\nimport type { Ref } from 'vue'\nimport { createContext } from '@/shared'\n\nexport interface Measurable {\n  getBoundingClientRect: () => DOMRect\n}\n\ninterface PopperRootContext {\n  anchor: Ref<ReferenceElement | undefined>\n  onAnchorChange: (element: ReferenceElement | undefined) => void\n}\n\nexport const [injectPopperRootContext, providePopperRootContext]\n  = createContext<PopperRootContext>('PopperRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst anchor = ref<ReferenceElement>()\n\nprovidePopperRootContext({\n  anchor,\n  onAnchorChange: element => anchor.value = element,\n})\n</script>\n\n<template>\n  <slot />\n</template>\n","<script lang=\"ts\">\nimport type { ReferenceElement } from '@floating-ui/vue'\nimport type { Ref } from 'vue'\nimport { createContext } from '@/shared'\n\nexport interface Measurable {\n  getBoundingClientRect: () => DOMRect\n}\n\ninterface PopperRootContext {\n  anchor: Ref<ReferenceElement | undefined>\n  onAnchorChange: (element: ReferenceElement | undefined) => void\n}\n\nexport const [injectPopperRootContext, providePopperRootContext]\n  = createContext<PopperRootContext>('PopperRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst anchor = ref<ReferenceElement>()\n\nprovidePopperRootContext({\n  anchor,\n  onAnchorChange: element => anchor.value = element,\n})\n</script>\n\n<template>\n  <slot />\n</template>\n","<script lang=\"ts\">\nimport type { ReferenceElement } from '@floating-ui/vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface PopperAnchorProps extends PrimitiveProps {\n  /**\n   *  The reference (or anchor) element that is being referred to for positioning.\n   *\n   *  If not provided will use the current component as anchor.\n   */\n  reference?: ReferenceElement\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { watchPostEffect } from 'vue'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { injectPopperRootContext } from './PopperRoot.vue'\n\nconst props = defineProps<PopperAnchorProps>()\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst rootContext = injectPopperRootContext()\n\nwatchPostEffect(() => {\n  rootContext.onAnchorChange(props.reference ?? currentElement.value)\n})\n</script>\n\n<template>\n  <Primitive\n    :ref=\"forwardRef\"\n    :as=\"as\"\n    :as-child=\"asChild\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { ReferenceElement } from '@floating-ui/vue'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\n\nexport interface PopperAnchorProps extends PrimitiveProps {\n  /**\n   *  The reference (or anchor) element that is being referred to for positioning.\n   *\n   *  If not provided will use the current component as anchor.\n   */\n  reference?: ReferenceElement\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { watchPostEffect } from 'vue'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { injectPopperRootContext } from './PopperRoot.vue'\n\nconst props = defineProps<PopperAnchorProps>()\n\nconst { forwardRef, currentElement } = useForwardExpose()\n\nconst rootContext = injectPopperRootContext()\n\nwatchPostEffect(() => {\n  rootContext.onAnchorChange(props.reference ?? currentElement.value)\n})\n</script>\n\n<template>\n  <Primitive\n    :ref=\"forwardRef\"\n    :as=\"as\"\n    :as-child=\"asChild\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","import type { Middleware, Placement } from '@floating-ui/vue'\n\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const\n\nexport type Side = (typeof SIDE_OPTIONS)[number]\nexport type Align = (typeof ALIGN_OPTIONS)[number]\n\nexport function isNotNull<T>(value: T | null): value is T {\n  return value !== null\n}\n\nexport function transformOrigin(options: {\n  arrowWidth: number\n  arrowHeight: number\n}): Middleware {\n  return {\n    name: 'transformOrigin',\n    options,\n    fn(data) {\n      const { placement, rects, middlewareData } = data\n\n      const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0\n      const isArrowHidden = cannotCenterArrow\n      const arrowWidth = isArrowHidden ? 0 : options.arrowWidth\n      const arrowHeight = isArrowHidden ? 0 : options.arrowHeight\n\n      const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement)\n      const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[\n        placedAlign\n      ]\n\n      const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2\n      const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2\n\n      let x = ''\n      let y = ''\n\n      if (placedSide === 'bottom') {\n        x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`\n        y = `${-arrowHeight}px`\n      }\n      else if (placedSide === 'top') {\n        x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`\n        y = `${rects.floating.height + arrowHeight}px`\n      }\n      else if (placedSide === 'right') {\n        x = `${-arrowHeight}px`\n        y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`\n      }\n      else if (placedSide === 'left') {\n        x = `${rects.floating.width + arrowHeight}px`\n        y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`\n      }\n      return { data: { x, y } }\n    },\n  }\n}\n\nexport function getSideAndAlignFromPlacement(placement: Placement) {\n  const [side, align = 'center'] = placement.split('-')\n  return [side as Side, align as Align] as const\n}\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst 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};\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  const firstChar = placement[0];\n  return firstChar === 't' || firstChar === 'b' ? '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.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\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  const side = getSide(placement);\n  return oppositeSideMap[side] + placement.slice(side.length);\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  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\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 { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n    ...platform,\n    detectOverflow\n  };\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let resetCount = 0;\n  const middlewareData = {};\n  for (let i = 0; i < middleware.length; i++) {\n    const currentMiddleware = middleware[i];\n    if (!currentMiddleware) {\n      continue;\n    }\n    const {\n      name,\n      fn\n    } = currentMiddleware;\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: platformWithDetectOverflow,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData[name] = {\n      ...middlewareData[name],\n      ...data\n    };\n    if (reset && resetCount < MAX_RESET_COUNT) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\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          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\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 == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\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 => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\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\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\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}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects,\n        platform\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // 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      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\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          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(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          const isLeftSide = getSide(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 => isLeftSide ? 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        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        platform\n      } = state;\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      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\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 = clamp(min, mainAxisCoord, max);\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 = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\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        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\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        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n  return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  try {\n    if (element.matches(':popover-open')) {\n      return true;\n    }\n  } catch (_e) {\n    // no-op\n  }\n  try {\n    return element.matches(':modal');\n  } catch (_e) {\n    return false;\n  }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (isWebKitValue == null) {\n    isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n  }\n  return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n  return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  } else {\n    return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n  }\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, 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$1(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 currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(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      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\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  const isOffsetParentAnElement = isHTMLElement(offsetParent);\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);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\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 + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\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$1(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\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\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  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\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      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\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$1(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$1(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$1(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 && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || 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' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n  let top = firstRect.top;\n  let right = firstRect.right;\n  let bottom = firstRect.bottom;\n  let left = firstRect.left;\n  for (let i = 1; i < clippingAncestors.length; i++) {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n    top = max(rect.top, top);\n    right = min(rect.right, right);\n    bottom = min(rect.bottom, bottom);\n    left = max(rect.left, left);\n  }\n  return {\n    width: right - left,\n    height: bottom - top,\n    x: left,\n    y: top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\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\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\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      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\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 win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(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\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\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    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _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 elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\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          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\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) : []), ...(floating ? 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 && floating) {\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          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    if (floating) {\n      resizeObserver.observe(floating);\n    }\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 && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\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 { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { arrow as arrow$1, computePosition } from '@floating-ui/dom';\nexport { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size } from '@floating-ui/dom';\nimport { isNode, getNodeName } from '@floating-ui/utils/dom';\nimport { unref, computed, ref, shallowRef, watch, getCurrentScope, onScopeDispose, shallowReadonly } from 'vue-demi';\n\nfunction isComponentPublicInstance(target) {\n  return target != null && typeof target === 'object' && '$el' in target;\n}\nfunction unwrapElement(target) {\n  if (isComponentPublicInstance(target)) {\n    const element = target.$el;\n    return isNode(element) && getNodeName(element) === '#comment' ? null : element;\n  }\n  return target;\n}\n\nfunction toValue(source) {\n  return typeof source === 'function' ? source() : unref(source);\n}\n\n/**\n * Positions an inner element of the floating element such that it is centered to the reference element.\n * @param options The arrow options.\n * @see https://floating-ui.com/docs/arrow\n */\nfunction arrow(options) {\n  return {\n    name: 'arrow',\n    options,\n    fn(args) {\n      const element = unwrapElement(toValue(options.element));\n      if (element == null) {\n        return {};\n      }\n      return arrow$1({\n        element,\n        padding: options.padding\n      }).fn(args);\n    }\n  };\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element next to a reference element when it is given a certain CSS positioning strategy.\n * @param reference The reference template ref.\n * @param floating The floating template ref.\n * @param options The floating options.\n * @see https://floating-ui.com/docs/vue\n */\nfunction useFloating(reference, floating, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const whileElementsMountedOption = options.whileElementsMounted;\n  const openOption = computed(() => {\n    var _toValue;\n    return (_toValue = toValue(options.open)) != null ? _toValue : true;\n  });\n  const middlewareOption = computed(() => toValue(options.middleware));\n  const placementOption = computed(() => {\n    var _toValue2;\n    return (_toValue2 = toValue(options.placement)) != null ? _toValue2 : 'bottom';\n  });\n  const strategyOption = computed(() => {\n    var _toValue3;\n    return (_toValue3 = toValue(options.strategy)) != null ? _toValue3 : 'absolute';\n  });\n  const transformOption = computed(() => {\n    var _toValue4;\n    return (_toValue4 = toValue(options.transform)) != null ? _toValue4 : true;\n  });\n  const referenceElement = computed(() => unwrapElement(reference.value));\n  const floatingElement = computed(() => unwrapElement(floating.value));\n  const x = ref(0);\n  const y = ref(0);\n  const strategy = ref(strategyOption.value);\n  const placement = ref(placementOption.value);\n  const middlewareData = shallowRef({});\n  const isPositioned = ref(false);\n  const floatingStyles = computed(() => {\n    const initialStyles = {\n      position: strategy.value,\n      left: '0',\n      top: '0'\n    };\n    if (!floatingElement.value) {\n      return initialStyles;\n    }\n    const xVal = roundByDPR(floatingElement.value, x.value);\n    const yVal = roundByDPR(floatingElement.value, y.value);\n    if (transformOption.value) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + xVal + \"px, \" + yVal + \"px)\",\n        ...(getDPR(floatingElement.value) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy.value,\n      left: xVal + \"px\",\n      top: yVal + \"px\"\n    };\n  });\n  let whileElementsMountedCleanup;\n  function update() {\n    if (referenceElement.value == null || floatingElement.value == null) {\n      return;\n    }\n    const open = openOption.value;\n    computePosition(referenceElement.value, floatingElement.value, {\n      middleware: middlewareOption.value,\n      placement: placementOption.value,\n      strategy: strategyOption.value\n    }).then(position => {\n      x.value = position.x;\n      y.value = position.y;\n      strategy.value = position.strategy;\n      placement.value = position.placement;\n      middlewareData.value = position.middlewareData;\n      /**\n       * The floating element's position may be recomputed while it's closed\n       * but still mounted (such as when transitioning out). To ensure\n       * `isPositioned` will be `false` initially on the next open, avoid\n       * setting it to `true` when `open === false` (must be specified).\n       */\n      isPositioned.value = open !== false;\n    });\n  }\n  function cleanup() {\n    if (typeof whileElementsMountedCleanup === 'function') {\n      whileElementsMountedCleanup();\n      whileElementsMountedCleanup = undefined;\n    }\n  }\n  function attach() {\n    cleanup();\n    if (whileElementsMountedOption === undefined) {\n      update();\n      return;\n    }\n    if (referenceElement.value != null && floatingElement.value != null) {\n      whileElementsMountedCleanup = whileElementsMountedOption(referenceElement.value, floatingElement.value, update);\n      return;\n    }\n  }\n  function reset() {\n    if (!openOption.value) {\n      isPositioned.value = false;\n    }\n  }\n  watch([middlewareOption, placementOption, strategyOption, openOption], update, {\n    flush: 'sync'\n  });\n  watch([referenceElement, floatingElement], attach, {\n    flush: 'sync'\n  });\n  watch(openOption, reset, {\n    flush: 'sync'\n  });\n  if (getCurrentScope()) {\n    onScopeDispose(cleanup);\n  }\n  return {\n    x: shallowReadonly(x),\n    y: shallowReadonly(y),\n    strategy: shallowReadonly(strategy),\n    placement: shallowReadonly(placement),\n    middlewareData: shallowReadonly(middlewareData),\n    isPositioned: shallowReadonly(isPositioned),\n    floatingStyles,\n    update\n  };\n}\n\nexport { arrow, useFloating };\n","<script lang=\"ts\">\nimport type {\n  Middleware,\n  Placement,\n  ReferenceElement,\n} from '@floating-ui/vue'\nimport type { Ref } from 'vue'\nimport type {\n  Align,\n  Side,\n} from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext, useForwardExpose, useSize } from '@/shared'\n\nexport const PopperContentPropsDefaultValue = {\n  side: 'bottom' as Side,\n  sideOffset: 0,\n  sideFlip: true,\n  align: 'center' as Align,\n  alignOffset: 0,\n  alignFlip: true,\n  arrowPadding: 0,\n  hideShiftedArrow: true,\n  avoidCollisions: true,\n  collisionBoundary: () => [],\n  collisionPadding: 0,\n  sticky: 'partial' as 'partial' | 'always',\n  hideWhenDetached: false,\n  positionStrategy: 'fixed' as 'absolute' | 'fixed',\n  updatePositionStrategy: 'optimized' as 'optimized' | 'always',\n  prioritizePosition: false,\n}\n\nexport interface PopperContentProps extends PrimitiveProps {\n  /**\n   * The preferred side of the trigger to render against when open.\n   * Will be reversed when collisions occur and avoidCollisions\n   * is enabled.\n   *\n   * @defaultValue \"bottom\"\n   */\n  side?: Side\n\n  /**\n   * The distance in pixels from the trigger.\n   *\n   * @defaultValue 0\n   */\n  sideOffset?: number\n\n  /**\n   * Flip to the opposite side when colliding with boundary.\n   *\n   * @defaultValue true\n   */\n  sideFlip?: boolean\n\n  /**\n   * The preferred alignment against the trigger.\n   * May change when collisions occur.\n   *\n   * @defaultValue \"center\"\n   */\n  align?: Align\n\n  /**\n   * An offset in pixels from the `start` or `end` alignment options.\n   *\n   * @defaultValue 0\n   */\n  alignOffset?: number\n\n  /**\n   * Flip alignment when colliding with boundary.\n   * May only occur when `prioritizePosition` is true.\n   *\n   * @defaultValue true\n   */\n  alignFlip?: boolean\n\n  /**\n   * When `true`, overrides the side and align preferences\n   * to prevent collisions with boundary edges.\n   *\n   * @defaultValue true\n   */\n  avoidCollisions?: boolean\n\n  /**\n   * The element used as the collision boundary. By default\n   * this is the viewport, though you can provide additional\n   * element(s) to be included in this check.\n   *\n   * @defaultValue []\n   */\n  collisionBoundary?: Element | null | Array<Element | null>\n\n  /**\n   * The distance in pixels from the boundary edges where collision\n   * detection should occur. Accepts a number (same for all sides),\n   * or a partial padding object, for example: { top: 20, left: 20 }.\n   *\n   * @defaultValue 0\n   */\n  collisionPadding?: number | Partial<Record<Side, number>>\n\n  /**\n   * The padding between the arrow and the edges of the content.\n   * If your content has border-radius, this will prevent it from\n   * overflowing the corners.\n   *\n   * @defaultValue 0\n   */\n  arrowPadding?: number\n\n  /**\n   * When `true`, hides the arrow when it cannot be centered\n   * to the reference element.\n   *\n   * @defaultValue true\n   */\n  hideShiftedArrow?: boolean\n\n  /**\n   * The sticky behavior on the align axis. `partial` will keep the\n   * content in the boundary as long as the trigger is at least partially\n   * in the boundary whilst \"always\" will keep the content in the boundary\n   * regardless.\n   *\n   * @defaultValue \"partial\"\n   */\n  sticky?: 'partial' | 'always'\n\n  /**\n   * Whether to hide the content when the trigger becomes fully occluded.\n   *\n   * @defaultValue false\n   */\n  hideWhenDetached?: boolean\n\n  /**\n   *  The type of CSS position property to use.\n   */\n  positionStrategy?: 'absolute' | 'fixed'\n\n  /**\n   * Strategy to update the position of the floating element on every animation frame.\n   *\n   * @defaultValue 'optimized'\n   */\n  updatePositionStrategy?: 'optimized' | 'always'\n\n  /**\n   * Whether to disable the update position for the content when the layout shifted.\n   *\n   * @defaultValue false\n   */\n  disableUpdateOnLayoutShift?: boolean\n\n  /**\n   * Force content to be position within the viewport.\n   *\n   * Might overlap the reference element, which may not be desired.\n   *\n   * @defaultValue false\n   */\n  prioritizePosition?: boolean\n\n  /**\n   *  The custom element or virtual element that will be set as the reference\n   *  to position the floating element.\n   *\n   *  If provided, it will replace the default anchor element.\n   */\n  reference?: ReferenceElement\n}\n\nexport interface PopperContentContext {\n  placedSide: Ref<Side>\n  onArrowChange: (arrow: HTMLElement | undefined) => void\n  arrowX?: Ref<number>\n  arrowY?: Ref<number>\n  shouldHideArrow: Ref<boolean>\n}\n\nexport const [injectPopperContentContext, providePopperContentContext]\n  = createContext<PopperContentContext>('PopperContent')\n</script>\n\n<script setup lang=\"ts\">\nimport {\n  autoUpdate,\n  flip,\n  arrow as floatingUIarrow,\n  hide,\n  limitShift,\n  offset,\n  shift,\n  size,\n  useFloating,\n} from '@floating-ui/vue'\nimport { computedEager } from '@vueuse/core'\nimport { computed, ref, watchEffect, watchPostEffect } from 'vue'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { injectPopperRootContext } from './PopperRoot.vue'\nimport {\n  getSideAndAlignFromPlacement,\n  isNotNull,\n  transformOrigin,\n} from './utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<PopperContentProps>(), {\n  ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<{\n  placed: [void]\n}>()\n\nconst rootContext = injectPopperRootContext()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\n\nconst floatingRef = ref<HTMLElement>()\n\nconst arrow = ref<HTMLElement>()\nconst { width: arrowWidth, height: arrowHeight } = useSize(arrow)\n\nconst desiredPlacement = computed(\n  () =>\n    (props.side\n      + (props.align !== 'center' ? `-${props.align}` : '')) as Placement,\n)\n\nconst collisionPadding = computed(() => {\n  return typeof props.collisionPadding === 'number'\n    ? props.collisionPadding\n    : { top: 0, right: 0, bottom: 0, left: 0, ...props.collisionPadding }\n})\n\nconst boundary = computed(() => {\n  return Array.isArray(props.collisionBoundary)\n    ? props.collisionBoundary\n    : [props.collisionBoundary]\n})\n\nconst detectOverflowOptions = computed(() => {\n  return {\n    padding: collisionPadding.value,\n    boundary: boundary.value.filter(isNotNull),\n    // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n    altBoundary: boundary.value.length > 0,\n  }\n})\n\nconst flipOptions = computed(() => {\n  return {\n    mainAxis: props.sideFlip,\n    crossAxis: props.alignFlip,\n  }\n})\n\nconst computedMiddleware = computedEager(() => {\n  return [\n    offset({\n      mainAxis: props.sideOffset + arrowHeight.value,\n      alignmentAxis: props.alignOffset,\n    }),\n    props.prioritizePosition\n    && props.avoidCollisions\n    && flip({\n      ...detectOverflowOptions.value,\n      ...flipOptions.value,\n    }),\n    props.avoidCollisions\n    && shift({\n      mainAxis: true,\n      crossAxis: !!props.prioritizePosition,\n      limiter: props.sticky === 'partial' ? limitShift() : undefined,\n      ...detectOverflowOptions.value,\n    }),\n    !props.prioritizePosition\n    && props.avoidCollisions\n    && flip({\n      ...detectOverflowOptions.value,\n      ...flipOptions.value,\n    }),\n    size({\n      ...detectOverflowOptions.value,\n      apply: ({ elements, rects, availableWidth, availableHeight }) => {\n        const { width: anchorWidth, height: anchorHeight } = rects.reference\n        const contentStyle = elements.floating.style\n        contentStyle.setProperty(\n          '--reka-popper-available-width',\n          `${availableWidth}px`,\n        )\n        contentStyle.setProperty(\n          '--reka-popper-available-height',\n          `${availableHeight}px`,\n        )\n        contentStyle.setProperty(\n          '--reka-popper-anchor-width',\n          `${anchorWidth}px`,\n        )\n        contentStyle.setProperty(\n          '--reka-popper-anchor-height',\n          `${anchorHeight}px`,\n        )\n      },\n    }),\n    arrow.value\n    && floatingUIarrow({ element: arrow.value, padding: props.arrowPadding }),\n    transformOrigin({\n      arrowWidth: arrowWidth.value,\n      arrowHeight: arrowHeight.value,\n    }),\n    props.hideWhenDetached\n    && hide({ strategy: 'referenceHidden', ...detectOverflowOptions.value }),\n  ] as Middleware[]\n})\n\n// If provided custom reference, it will overwrite the default anchor element\nconst reference = computed(() => props.reference ?? rootContext.anchor.value)\n\nconst { floatingStyles, placement, isPositioned, middlewareData, update } = useFloating(\n  reference,\n  floatingRef,\n  {\n    strategy: props.positionStrategy,\n    placement: desiredPlacement,\n    whileElementsMounted: (...args) => {\n      const cleanup = autoUpdate(...args, {\n        layoutShift: !props.disableUpdateOnLayoutShift,\n        animationFrame: props.updatePositionStrategy === 'always',\n      })\n      return cleanup\n    },\n    middleware: computedMiddleware,\n  },\n)\n\nconst placedSide = computed(\n  () => getSideAndAlignFromPlacement(placement.value)[0],\n)\nconst placedAlign = computed(\n  () => getSideAndAlignFromPlacement(placement.value)[1],\n)\n\nwatchPostEffect(() => {\n  if (isPositioned.value)\n    emits('placed')\n})\n\nconst shouldHideArrow = computed(() => {\n  const cannotCenterArrow = middlewareData.value.arrow?.centerOffset !== 0\n  return props.hideShiftedArrow && cannotCenterArrow\n})\n\nconst contentZIndex = ref('')\nwatchEffect(() => {\n  if (contentElement.value)\n    contentZIndex.value = window.getComputedStyle(contentElement.value).zIndex\n})\n\nconst arrowX = computed(() => middlewareData.value.arrow?.x ?? 0)\nconst arrowY = computed(() => middlewareData.value.arrow?.y ?? 0)\n\nprovidePopperContentContext({\n  placedSide,\n  onArrowChange: element => arrow.value = element,\n  arrowX,\n  arrowY,\n  shouldHideArrow,\n})\n</script>\n\n<template>\n  <div\n    ref=\"floatingRef\"\n    data-reka-popper-content-wrapper=\"\"\n    :style=\"{\n      ...floatingStyles,\n      transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n      minWidth: 'max-content',\n      zIndex: contentZIndex,\n      ['--reka-popper-transform-origin' as any]: [\n        middlewareData.transformOrigin?.x,\n        middlewareData.transformOrigin?.y,\n      ].join(' '),\n\n      // hide the content if using the hide middleware and should be hidden\n      // set visibility to hidden and disable pointer events so the UI behaves\n      // as if the PopperContent isn't there at all\n      ...(middlewareData.hide?.referenceHidden && {\n        visibility: 'hidden',\n        pointerEvents: 'none',\n      }),\n    }\"\n  >\n    <Primitive\n      :ref=\"forwardRef\"\n      v-bind=\"$attrs\"\n      :as-child=\"props.asChild\"\n      :as=\"as\"\n      :data-side=\"placedSide\"\n      :data-align=\"placedAlign\"\n      :style=\"{\n        // if the PopperContent hasn't been placed yet (not all measurements done)\n        // we prevent animations so that users's animation don't kick in too early referring wrong sides\n        animation: !isPositioned ? 'none' : undefined,\n      }\"\n    >\n      <slot />\n    </Primitive>\n  </div>\n</template>\n","<script lang=\"ts\">\nimport type {\n  Middleware,\n  Placement,\n  ReferenceElement,\n} from '@floating-ui/vue'\nimport type { Ref } from 'vue'\nimport type {\n  Align,\n  Side,\n} from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext, useForwardExpose, useSize } from '@/shared'\n\nexport const PopperContentPropsDefaultValue = {\n  side: 'bottom' as Side,\n  sideOffset: 0,\n  sideFlip: true,\n  align: 'center' as Align,\n  alignOffset: 0,\n  alignFlip: true,\n  arrowPadding: 0,\n  hideShiftedArrow: true,\n  avoidCollisions: true,\n  collisionBoundary: () => [],\n  collisionPadding: 0,\n  sticky: 'partial' as 'partial' | 'always',\n  hideWhenDetached: false,\n  positionStrategy: 'fixed' as 'absolute' | 'fixed',\n  updatePositionStrategy: 'optimized' as 'optimized' | 'always',\n  prioritizePosition: false,\n}\n\nexport interface PopperContentProps extends PrimitiveProps {\n  /**\n   * The preferred side of the trigger to render against when open.\n   * Will be reversed when collisions occur and avoidCollisions\n   * is enabled.\n   *\n   * @defaultValue \"bottom\"\n   */\n  side?: Side\n\n  /**\n   * The distance in pixels from the trigger.\n   *\n   * @defaultValue 0\n   */\n  sideOffset?: number\n\n  /**\n   * Flip to the opposite side when colliding with boundary.\n   *\n   * @defaultValue true\n   */\n  sideFlip?: boolean\n\n  /**\n   * The preferred alignment against the trigger.\n   * May change when collisions occur.\n   *\n   * @defaultValue \"center\"\n   */\n  align?: Align\n\n  /**\n   * An offset in pixels from the `start` or `end` alignment options.\n   *\n   * @defaultValue 0\n   */\n  alignOffset?: number\n\n  /**\n   * Flip alignment when colliding with boundary.\n   * May only occur when `prioritizePosition` is true.\n   *\n   * @defaultValue true\n   */\n  alignFlip?: boolean\n\n  /**\n   * When `true`, overrides the side and align preferences\n   * to prevent collisions with boundary edges.\n   *\n   * @defaultValue true\n   */\n  avoidCollisions?: boolean\n\n  /**\n   * The element used as the collision boundary. By default\n   * this is the viewport, though you can provide additional\n   * element(s) to be included in this check.\n   *\n   * @defaultValue []\n   */\n  collisionBoundary?: Element | null | Array<Element | null>\n\n  /**\n   * The distance in pixels from the boundary edges where collision\n   * detection should occur. Accepts a number (same for all sides),\n   * or a partial padding object, for example: { top: 20, left: 20 }.\n   *\n   * @defaultValue 0\n   */\n  collisionPadding?: number | Partial<Record<Side, number>>\n\n  /**\n   * The padding between the arrow and the edges of the content.\n   * If your content has border-radius, this will prevent it from\n   * overflowing the corners.\n   *\n   * @defaultValue 0\n   */\n  arrowPadding?: number\n\n  /**\n   * When `true`, hides the arrow when it cannot be centered\n   * to the reference element.\n   *\n   * @defaultValue true\n   */\n  hideShiftedArrow?: boolean\n\n  /**\n   * The sticky behavior on the align axis. `partial` will keep the\n   * content in the boundary as long as the trigger is at least partially\n   * in the boundary whilst \"always\" will keep the content in the boundary\n   * regardless.\n   *\n   * @defaultValue \"partial\"\n   */\n  sticky?: 'partial' | 'always'\n\n  /**\n   * Whether to hide the content when the trigger becomes fully occluded.\n   *\n   * @defaultValue false\n   */\n  hideWhenDetached?: boolean\n\n  /**\n   *  The type of CSS position property to use.\n   */\n  positionStrategy?: 'absolute' | 'fixed'\n\n  /**\n   * Strategy to update the position of the floating element on every animation frame.\n   *\n   * @defaultValue 'optimized'\n   */\n  updatePositionStrategy?: 'optimized' | 'always'\n\n  /**\n   * Whether to disable the update position for the content when the layout shifted.\n   *\n   * @defaultValue false\n   */\n  disableUpdateOnLayoutShift?: boolean\n\n  /**\n   * Force content to be position within the viewport.\n   *\n   * Might overlap the reference element, which may not be desired.\n   *\n   * @defaultValue false\n   */\n  prioritizePosition?: boolean\n\n  /**\n   *  The custom element or virtual element that will be set as the reference\n   *  to position the floating element.\n   *\n   *  If provided, it will replace the default anchor element.\n   */\n  reference?: ReferenceElement\n}\n\nexport interface PopperContentContext {\n  placedSide: Ref<Side>\n  onArrowChange: (arrow: HTMLElement | undefined) => void\n  arrowX?: Ref<number>\n  arrowY?: Ref<number>\n  shouldHideArrow: Ref<boolean>\n}\n\nexport const [injectPopperContentContext, providePopperContentContext]\n  = createContext<PopperContentContext>('PopperContent')\n</script>\n\n<script setup lang=\"ts\">\nimport {\n  autoUpdate,\n  flip,\n  arrow as floatingUIarrow,\n  hide,\n  limitShift,\n  offset,\n  shift,\n  size,\n  useFloating,\n} from '@floating-ui/vue'\nimport { computedEager } from '@vueuse/core'\nimport { computed, ref, watchEffect, watchPostEffect } from 'vue'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { injectPopperRootContext } from './PopperRoot.vue'\nimport {\n  getSideAndAlignFromPlacement,\n  isNotNull,\n  transformOrigin,\n} from './utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<PopperContentProps>(), {\n  ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<{\n  placed: [void]\n}>()\n\nconst rootContext = injectPopperRootContext()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\n\nconst floatingRef = ref<HTMLElement>()\n\nconst arrow = ref<HTMLElement>()\nconst { width: arrowWidth, height: arrowHeight } = useSize(arrow)\n\nconst desiredPlacement = computed(\n  () =>\n    (props.side\n      + (props.align !== 'center' ? `-${props.align}` : '')) as Placement,\n)\n\nconst collisionPadding = computed(() => {\n  return typeof props.collisionPadding === 'number'\n    ? props.collisionPadding\n    : { top: 0, right: 0, bottom: 0, left: 0, ...props.collisionPadding }\n})\n\nconst boundary = computed(() => {\n  return Array.isArray(props.collisionBoundary)\n    ? props.collisionBoundary\n    : [props.collisionBoundary]\n})\n\nconst detectOverflowOptions = computed(() => {\n  return {\n    padding: collisionPadding.value,\n    boundary: boundary.value.filter(isNotNull),\n    // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n    altBoundary: boundary.value.length > 0,\n  }\n})\n\nconst flipOptions = computed(() => {\n  return {\n    mainAxis: props.sideFlip,\n    crossAxis: props.alignFlip,\n  }\n})\n\nconst computedMiddleware = computedEager(() => {\n  return [\n    offset({\n      mainAxis: props.sideOffset + arrowHeight.value,\n      alignmentAxis: props.alignOffset,\n    }),\n    props.prioritizePosition\n    && props.avoidCollisions\n    && flip({\n      ...detectOverflowOptions.value,\n      ...flipOptions.value,\n    }),\n    props.avoidCollisions\n    && shift({\n      mainAxis: true,\n      crossAxis: !!props.prioritizePosition,\n      limiter: props.sticky === 'partial' ? limitShift() : undefined,\n      ...detectOverflowOptions.value,\n    }),\n    !props.prioritizePosition\n    && props.avoidCollisions\n    && flip({\n      ...detectOverflowOptions.value,\n      ...flipOptions.value,\n    }),\n    size({\n      ...detectOverflowOptions.value,\n      apply: ({ elements, rects, availableWidth, availableHeight }) => {\n        const { width: anchorWidth, height: anchorHeight } = rects.reference\n        const contentStyle = elements.floating.style\n        contentStyle.setProperty(\n          '--reka-popper-available-width',\n          `${availableWidth}px`,\n        )\n        contentStyle.setProperty(\n          '--reka-popper-available-height',\n          `${availableHeight}px`,\n        )\n        contentStyle.setProperty(\n          '--reka-popper-anchor-width',\n          `${anchorWidth}px`,\n        )\n        contentStyle.setProperty(\n          '--reka-popper-anchor-height',\n          `${anchorHeight}px`,\n        )\n      },\n    }),\n    arrow.value\n    && floatingUIarrow({ element: arrow.value, padding: props.arrowPadding }),\n    transformOrigin({\n      arrowWidth: arrowWidth.value,\n      arrowHeight: arrowHeight.value,\n    }),\n    props.hideWhenDetached\n    && hide({ strategy: 'referenceHidden', ...detectOverflowOptions.value }),\n  ] as Middleware[]\n})\n\n// If provided custom reference, it will overwrite the default anchor element\nconst reference = computed(() => props.reference ?? rootContext.anchor.value)\n\nconst { floatingStyles, placement, isPositioned, middlewareData, update } = useFloating(\n  reference,\n  floatingRef,\n  {\n    strategy: props.positionStrategy,\n    placement: desiredPlacement,\n    whileElementsMounted: (...args) => {\n      const cleanup = autoUpdate(...args, {\n        layoutShift: !props.disableUpdateOnLayoutShift,\n        animationFrame: props.updatePositionStrategy === 'always',\n      })\n      return cleanup\n    },\n    middleware: computedMiddleware,\n  },\n)\n\nconst placedSide = computed(\n  () => getSideAndAlignFromPlacement(placement.value)[0],\n)\nconst placedAlign = computed(\n  () => getSideAndAlignFromPlacement(placement.value)[1],\n)\n\nwatchPostEffect(() => {\n  if (isPositioned.value)\n    emits('placed')\n})\n\nconst shouldHideArrow = computed(() => {\n  const cannotCenterArrow = middlewareData.value.arrow?.centerOffset !== 0\n  return props.hideShiftedArrow && cannotCenterArrow\n})\n\nconst contentZIndex = ref('')\nwatchEffect(() => {\n  if (contentElement.value)\n    contentZIndex.value = window.getComputedStyle(contentElement.value).zIndex\n})\n\nconst arrowX = computed(() => middlewareData.value.arrow?.x ?? 0)\nconst arrowY = computed(() => middlewareData.value.arrow?.y ?? 0)\n\nprovidePopperContentContext({\n  placedSide,\n  onArrowChange: element => arrow.value = element,\n  arrowX,\n  arrowY,\n  shouldHideArrow,\n})\n</script>\n\n<template>\n  <div\n    ref=\"floatingRef\"\n    data-reka-popper-content-wrapper=\"\"\n    :style=\"{\n      ...floatingStyles,\n      transform: isPositioned ? floatingStyles.transform : 'translate(0, -200%)', // keep off the page when measuring\n      minWidth: 'max-content',\n      zIndex: contentZIndex,\n      ['--reka-popper-transform-origin' as any]: [\n        middlewareData.transformOrigin?.x,\n        middlewareData.transformOrigin?.y,\n      ].join(' '),\n\n      // hide the content if using the hide middleware and should be hidden\n      // set visibility to hidden and disable pointer events so the UI behaves\n      // as if the PopperContent isn't there at all\n      ...(middlewareData.hide?.referenceHidden && {\n        visibility: 'hidden',\n        pointerEvents: 'none',\n      }),\n    }\"\n  >\n    <Primitive\n      :ref=\"forwardRef\"\n      v-bind=\"$attrs\"\n      :as-child=\"props.asChild\"\n      :as=\"as\"\n      :data-side=\"placedSide\"\n      :data-align=\"placedAlign\"\n      :style=\"{\n        // if the PopperContent hasn't been placed yet (not all measurements done)\n        // we prevent animations so that users's animation don't kick in too early referring wrong sides\n        animation: !isPositioned ? 'none' : undefined,\n      }\"\n    >\n      <slot />\n    </Primitive>\n  </div>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n  Direction,\n  Orientation,\n} from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext, useDirection } from '@/shared'\n\nexport interface RovingFocusGroupProps extends PrimitiveProps {\n  /**\n   * The orientation of the group.\n   * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n   */\n  orientation?: Orientation\n  /**\n   * The direction of navigation between items.\n   */\n  dir?: Direction\n  /**\n   * Whether keyboard navigation should loop around\n   * @defaultValue false\n   */\n  loop?: boolean\n  /** The controlled value of the current stop item. Can be binded as `v-model`. */\n  currentTabStopId?: string | null\n  /**\n   * The value of the current stop item.\n   *\n   * Use when you do not need to control the state of the stop item.\n   */\n  defaultCurrentTabStopId?: string\n  /**\n   * When `true`, will prevent scrolling to the focus item when focused.\n   */\n  preventScrollOnEntryFocus?: boolean\n}\n\nexport type RovingFocusGroupEmits = {\n  'entryFocus': [event: Event]\n  'update:currentTabStopId': [value: string | null | undefined]\n}\n\ninterface RovingContext {\n  orientation: Ref<Orientation | undefined>\n  dir: Ref<Direction>\n  loop: Ref<boolean>\n  currentTabStopId: Ref<string | null | undefined>\n  onItemFocus: (tabStopId: string) => void\n  onItemShiftTab: () => void\n  onFocusableItemAdd: () => void\n  onFocusableItemRemove: () => void\n}\n\nexport const [injectRovingFocusGroupContext, provideRovingFocusGroupContext]\n  = createContext<RovingContext>('RovingFocusGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { ref, toRefs } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { ENTRY_FOCUS, EVENT_OPTIONS, focusFirst } from './utils'\n\nconst props = withDefaults(defineProps<RovingFocusGroupProps>(), {\n  loop: false,\n  orientation: undefined,\n  preventScrollOnEntryFocus: false,\n})\nconst emits = defineEmits<RovingFocusGroupEmits>()\n\nconst { loop, orientation, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nconst currentTabStopId = useVModel(props, 'currentTabStopId', emits, {\n  defaultValue: props.defaultCurrentTabStopId,\n  passive: (props.currentTabStopId === undefined) as false,\n})\nconst isTabbingBackOut = ref(false)\nconst isClickFocus = ref(false)\nconst focusableItemsCount = ref(0)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nfunction handleFocus(event: FocusEvent) {\n  // We normally wouldn't need this check, because we already check\n  // that the focus is on the current target and not bubbling to it.\n  // We do this because Safari doesn't focus buttons when clicked, and\n  // instead, the wrapper will get focused and not through a bubbling event.\n  const isKeyboardFocus = !isClickFocus.value\n\n  if (\n    event.currentTarget\n    && event.target === event.currentTarget\n    && isKeyboardFocus\n    && !isTabbingBackOut.value\n  ) {\n    const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS)\n    event.currentTarget.dispatchEvent(entryFocusEvent)\n    emits('entryFocus', entryFocusEvent)\n\n    if (!entryFocusEvent.defaultPrevented) {\n      const items = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n      const activeItem = items.find(item => item.getAttribute('data-active') === '')\n      const highlightedItem = items.find(item => item.getAttribute('data-highlighted') === '')\n      const currentItem = items.find(\n        item => item.id === currentTabStopId.value,\n      )\n      const candidateItems = [activeItem, highlightedItem, currentItem, ...items].filter(\n        Boolean,\n      ) as typeof items\n      focusFirst(candidateItems, props.preventScrollOnEntryFocus)\n    }\n  }\n  isClickFocus.value = false\n}\n\nfunction handleMouseUp() {\n  // reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element\n  setTimeout(() => {\n    isClickFocus.value = false\n  }, 1)\n}\n\ndefineExpose({\n  getItems,\n})\n\nprovideRovingFocusGroupContext({\n  loop,\n  dir,\n  orientation,\n  currentTabStopId,\n  onItemFocus: (tabStopId) => {\n    currentTabStopId.value = tabStopId\n  },\n  onItemShiftTab: () => {\n    isTabbingBackOut.value = true\n  },\n  onFocusableItemAdd: () => {\n    focusableItemsCount.value++\n  },\n  onFocusableItemRemove: () => {\n    focusableItemsCount.value--\n  },\n})\n</script>\n\n<template>\n  <CollectionSlot>\n    <Primitive\n      :tabindex=\"isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0\"\n      :data-orientation=\"orientation\"\n      :as=\"as\"\n      :as-child=\"asChild\"\n      :dir=\"dir\"\n      style=\"outline: none\"\n      @mousedown=\"isClickFocus = true\"\n      @mouseup=\"handleMouseUp\"\n      @focus=\"handleFocus\"\n      @blur=\"isTabbingBackOut = false\"\n    >\n      <slot />\n    </Primitive>\n  </CollectionSlot>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n  Direction,\n  Orientation,\n} from './utils'\nimport type { PrimitiveProps } from '@/Primitive'\nimport { createContext, useDirection } from '@/shared'\n\nexport interface RovingFocusGroupProps extends PrimitiveProps {\n  /**\n   * The orientation of the group.\n   * Mainly so arrow navigation is done accordingly (left & right vs. up & down)\n   */\n  orientation?: Orientation\n  /**\n   * The direction of navigation between items.\n   */\n  dir?: Direction\n  /**\n   * Whether keyboard navigation should loop around\n   * @defaultValue false\n   */\n  loop?: boolean\n  /** The controlled value of the current stop item. Can be binded as `v-model`. */\n  currentTabStopId?: string | null\n  /**\n   * The value of the current stop item.\n   *\n   * Use when you do not need to control the state of the stop item.\n   */\n  defaultCurrentTabStopId?: string\n  /**\n   * When `true`, will prevent scrolling to the focus item when focused.\n   */\n  preventScrollOnEntryFocus?: boolean\n}\n\nexport type RovingFocusGroupEmits = {\n  'entryFocus': [event: Event]\n  'update:currentTabStopId': [value: string | null | undefined]\n}\n\ninterface RovingContext {\n  orientation: Ref<Orientation | undefined>\n  dir: Ref<Direction>\n  loop: Ref<boolean>\n  currentTabStopId: Ref<string | null | undefined>\n  onItemFocus: (tabStopId: string) => void\n  onItemShiftTab: () => void\n  onFocusableItemAdd: () => void\n  onFocusableItemRemove: () => void\n}\n\nexport const [injectRovingFocusGroupContext, provideRovingFocusGroupContext]\n  = createContext<RovingContext>('RovingFocusGroup')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { ref, toRefs } from 'vue'\nimport { useCollection } from '@/Collection'\nimport { Primitive } from '@/Primitive'\nimport { ENTRY_FOCUS, EVENT_OPTIONS, focusFirst } from './utils'\n\nconst props = withDefaults(defineProps<RovingFocusGroupProps>(), {\n  loop: false,\n  orientation: undefined,\n  preventScrollOnEntryFocus: false,\n})\nconst emits = defineEmits<RovingFocusGroupEmits>()\n\nconst { loop, orientation, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nconst currentTabStopId = useVModel(props, 'currentTabStopId', emits, {\n  defaultValue: props.defaultCurrentTabStopId,\n  passive: (props.currentTabStopId === undefined) as false,\n})\nconst isTabbingBackOut = ref(false)\nconst isClickFocus = ref(false)\nconst focusableItemsCount = ref(0)\n\nconst { getItems, CollectionSlot } = useCollection({ isProvider: true })\n\nfunction handleFocus(event: FocusEvent) {\n  // We normally wouldn't need this check, because we already check\n  // that the focus is on the current target and not bubbling to it.\n  // We do this because Safari doesn't focus buttons when clicked, and\n  // instead, the wrapper will get focused and not through a bubbling event.\n  const isKeyboardFocus = !isClickFocus.value\n\n  if (\n    event.currentTarget\n    && event.target === event.currentTarget\n    && isKeyboardFocus\n    && !isTabbingBackOut.value\n  ) {\n    const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS)\n    event.currentTarget.dispatchEvent(entryFocusEvent)\n    emits('entryFocus', entryFocusEvent)\n\n    if (!entryFocusEvent.defaultPrevented) {\n      const items = getItems().map(i => i.ref).filter(i => i.dataset.disabled !== '')\n      const activeItem = items.find(item => item.getAttribute('data-active') === '')\n      const highlightedItem = items.find(item => item.getAttribute('data-highlighted') === '')\n      const currentItem = items.find(\n        item => item.id === currentTabStopId.value,\n      )\n      const candidateItems = [activeItem, highlightedItem, currentItem, ...items].filter(\n        Boolean,\n      ) as typeof items\n      focusFirst(candidateItems, props.preventScrollOnEntryFocus)\n    }\n  }\n  isClickFocus.value = false\n}\n\nfunction handleMouseUp() {\n  // reset `isClickFocus` after 1 tick because handleFocus might not triggered due to focused element\n  setTimeout(() => {\n    isClickFocus.value = false\n  }, 1)\n}\n\ndefineExpose({\n  getItems,\n})\n\nprovideRovingFocusGroupContext({\n  loop,\n  dir,\n  orientation,\n  currentTabStopId,\n  onItemFocus: (tabStopId) => {\n    currentTabStopId.value = tabStopId\n  },\n  onItemShiftTab: () => {\n    isTabbingBackOut.value = true\n  },\n  onFocusableItemAdd: () => {\n    focusableItemsCount.value++\n  },\n  onFocusableItemRemove: () => {\n    focusableItemsCount.value--\n  },\n})\n</script>\n\n<template>\n  <CollectionSlot>\n    <Primitive\n      :tabindex=\"isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0\"\n      :data-orientation=\"orientation\"\n      :as=\"as\"\n      :as-child=\"asChild\"\n      :dir=\"dir\"\n      style=\"outline: none\"\n      @mousedown=\"isClickFocus = true\"\n      @mouseup=\"handleMouseUp\"\n      @focus=\"handleFocus\"\n      @blur=\"isTabbingBackOut = false\"\n    >\n      <slot />\n    </Primitive>\n  </CollectionSlot>\n</template>\n","<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { PopperAnchor } from '@/Popper'\n\ninterface MenuAnchorProps extends PopperAnchorProps {}\n\nconst props = defineProps<MenuAnchorProps>()\n</script>\n\n<template>\n  <PopperAnchor v-bind=\"props\">\n    <slot />\n  </PopperAnchor>\n</template>\n","<script setup lang=\"ts\">\nimport type { PopperAnchorProps } from '@/Popper'\nimport { PopperAnchor } from '@/Popper'\n\ninterface MenuAnchorProps extends PopperAnchorProps {}\n\nconst props = defineProps<MenuAnchorProps>()\n</script>\n\n<template>\n  <PopperAnchor v-bind=\"props\">\n    <slot />\n  </PopperAnchor>\n</template>\n","import { createSharedComposable, useEventListener } from '@vueuse/core'\nimport { onMounted, ref } from 'vue'\n\nfunction useIsUsingKeyboardImpl() {\n  const isUsingKeyboard = ref(false)\n\n  onMounted(() => {\n    // Capture phase ensures we set the boolean before any side effects execute\n    // in response to the key or pointer event as they might depend on this value.\n    useEventListener('keydown', () => {\n      isUsingKeyboard.value = true\n    }, { capture: true, passive: true })\n\n    useEventListener(['pointerdown', 'pointermove'], () => {\n      isUsingKeyboard.value = false\n    }, { capture: true, passive: true })\n  })\n\n  return isUsingKeyboard\n}\n\nexport const useIsUsingKeyboard = createSharedComposable(useIsUsingKeyboardImpl)\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from './utils'\nimport { createContext, useDirection } from '@/shared'\nimport { useIsUsingKeyboard } from '@/shared/useIsUsingKeyboard'\n\nexport interface MenuContext {\n  open: Ref<boolean>\n  onOpenChange: (open: boolean) => void\n  content: Ref<HTMLElement | undefined>\n  onContentChange: (content: HTMLElement | undefined) => void\n}\n\nexport interface MenuRootContext {\n  onClose: () => void\n  dir: Ref<Direction>\n  isUsingKeyboardRef: Ref<boolean>\n  modal: Ref<boolean>\n}\n\nexport interface MenuProps {\n  /** The controlled open state of the menu. Can be used as `v-model:open`. */\n  open?: boolean\n  /**\n   * The reading direction of the combobox when applicable.\n   *\n   * If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n   */\n  dir?: Direction\n  /**\n   * The modality of the dropdown menu.\n   *\n   * When set to `true`, interaction with outside elements will be disabled and only menu content will be visible to screen readers.\n   */\n  modal?: boolean\n}\n\nexport type MenuEmits = {\n  'update:open': [payload: boolean]\n}\n\nexport const [injectMenuContext, provideMenuContext]\n  = createContext<MenuContext>(['MenuRoot', 'MenuSub'], 'MenuContext')\n\nexport const [injectMenuRootContext, provideMenuRootContext]\n  = createContext<MenuRootContext>('MenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport {\n  ref,\n  toRefs,\n} from 'vue'\nimport { PopperRoot } from '@/Popper'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n  open: false,\n  modal: true,\n})\nconst emits = defineEmits<MenuEmits>()\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst open = useVModel(props, 'open', emits)\n\nconst content = ref<HTMLElement>()\nconst isUsingKeyboardRef = useIsUsingKeyboard()\n\nprovideMenuContext({\n  open,\n  onOpenChange: (value) => {\n    open.value = value\n  },\n  content,\n  onContentChange: (element) => {\n    content.value = element\n  },\n})\n\nprovideMenuRootContext({\n  onClose: () => {\n    open.value = false\n  },\n  isUsingKeyboardRef,\n  dir,\n  modal,\n})\n</script>\n\n<template>\n  <PopperRoot>\n    <slot />\n  </PopperRoot>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from './utils'\nimport { createContext, useDirection } from '@/shared'\nimport { useIsUsingKeyboard } from '@/shared/useIsUsingKeyboard'\n\nexport interface MenuContext {\n  open: Ref<boolean>\n  onOpenChange: (open: boolean) => void\n  content: Ref<HTMLElement | undefined>\n  onContentChange: (content: HTMLElement | undefined) => void\n}\n\nexport interface MenuRootContext {\n  onClose: () => void\n  dir: Ref<Direction>\n  isUsingKeyboardRef: Ref<boolean>\n  modal: Ref<boolean>\n}\n\nexport interface MenuProps {\n  /** The controlled open state of the menu. Can be used as `v-model:open`. */\n  open?: boolean\n  /**\n   * The reading direction of the combobox when applicable.\n   *\n   * If omitted, inherits globally from `ConfigProvider` or assumes LTR (left-to-right) reading mode.\n   */\n  dir?: Direction\n  /**\n   * The modality of the dropdown menu.\n   *\n   * When set to `true`, interaction with outside elements will be disabled and only menu content will be visible to screen readers.\n   */\n  modal?: boolean\n}\n\nexport type MenuEmits = {\n  'update:open': [payload: boolean]\n}\n\nexport const [injectMenuContext, provideMenuContext]\n  = createContext<MenuContext>(['MenuRoot', 'MenuSub'], 'MenuContext')\n\nexport const [injectMenuRootContext, provideMenuRootContext]\n  = createContext<MenuRootContext>('MenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport {\n  ref,\n  toRefs,\n} from 'vue'\nimport { PopperRoot } from '@/Popper'\n\nconst props = withDefaults(defineProps<MenuProps>(), {\n  open: false,\n  modal: true,\n})\nconst emits = defineEmits<MenuEmits>()\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\n\nconst open = useVModel(props, 'open', emits)\n\nconst content = ref<HTMLElement>()\nconst isUsingKeyboardRef = useIsUsingKeyboard()\n\nprovideMenuContext({\n  open,\n  onOpenChange: (value) => {\n    open.value = value\n  },\n  content,\n  onContentChange: (element) => {\n    content.value = element\n  },\n})\n\nprovideMenuRootContext({\n  onClose: () => {\n    open.value = false\n  },\n  isUsingKeyboardRef,\n  dir,\n  modal,\n})\n</script>\n\n<template>\n  <PopperRoot>\n    <slot />\n  </PopperRoot>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n  GraceIntent,\n  Side,\n} from './utils'\nimport type {\n  DismissableLayerEmits,\n  DismissableLayerProps,\n} from '@/DismissableLayer'\nimport type { FocusScopeProps } from '@/FocusScope'\nimport type { PopperContentProps } from '@/Popper'\nimport type { RovingFocusGroupEmits } from '@/RovingFocus'\n\nimport {\n  createContext,\n  getActiveElement,\n  useArrowNavigation,\n  useFocusGuards,\n  useForwardExpose,\n  useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\n\nexport interface MenuContentContext {\n  onItemEnter: (event: PointerEvent) => boolean\n  onItemLeave: (event: PointerEvent) => boolean\n  onTriggerLeave: (event: PointerEvent) => boolean\n  searchRef: Ref<string>\n  highlightedElement: Ref<HTMLElement | undefined>\n  onKeydownNavigation: (event: KeyboardEvent) => void\n  onKeydownEnter: (event: KeyboardEvent) => void\n  filterElement: Ref<HTMLElement | undefined>\n  onFilterElementChange: (el: HTMLElement | undefined) => void\n  activeSubmenuContext: Ref<{ onOpenChange: (open: boolean) => void, trigger: Ref<HTMLElement | undefined> } | undefined>\n  pointerGraceTimerRef: Ref<number>\n  onPointerGraceIntentChange: (intent: GraceIntent | null) => void\n}\n\nexport const [injectMenuContentContext, provideMenuContentContext]\n  = createContext<MenuContentContext>('MenuContent')\n\nexport interface MenuContentImplPrivateProps {\n  /**\n   * When `true`, hover/focus/click interactions will be disabled on elements outside\n   * the `DismissableLayer`. Users will need to click twice on outside elements to\n   * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n   */\n  disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n  /**\n   * Whether scrolling outside the `MenuContent` should be prevented\n   * @defaultValue false\n   */\n  disableOutsideScroll?: boolean\n\n  /**\n   * Whether focus should be trapped within the `MenuContent`\n   * @defaultValue also\n   */\n  trapFocus?: FocusScopeProps['trapped']\n}\n\nexport type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {\n  openAutoFocus: [event: Event]\n  /**\n   * Event handler called when auto-focusing on close.\n   * Can be prevented.\n   */\n  closeAutoFocus: [event: Event]\n}\n\ntype MenuContentImplPrivateEmits = MenuContentImplEmits & {\n  /**\n   * Handler called when the `DismissableLayer` should be dismissed\n   */\n  dismiss: []\n}\n\nexport interface MenuContentImplProps\n  extends MenuContentImplPrivateProps,\n  Omit<PopperContentProps, 'dir'> {\n  /**\n   * When `true`, keyboard navigation will loop from last item to first, and vice versa.\n   * @defaultValue false\n   */\n  loop?: boolean\n}\n\nexport interface MenuRootContentTypeProps\n  extends Omit<MenuContentImplProps, 'disableOutsidePointerEvents' | 'disableOutsideScroll' | 'trapFocus'> {}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n  onUnmounted,\n  ref,\n  toRefs,\n  watch,\n} from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport {\n  PopperContent,\n  PopperContentPropsDefaultValue,\n} from '@/Popper'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport {\n  FIRST_LAST_KEYS,\n  focusFirst,\n  getOpenState,\n  isMouseEvent,\n  isPointerInGraceArea,\n  LAST_KEYS,\n} from './utils'\n\nconst props = withDefaults(defineProps<MenuContentImplProps>(), {\n  ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<MenuContentImplPrivateEmits>()\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n\nconst { trapFocus, disableOutsidePointerEvents, loop } = toRefs(props)\n\nuseFocusGuards()\nuseBodyScrollLock(disableOutsidePointerEvents.value)\n\nconst searchRef = ref('')\nconst timerRef = ref(0)\nconst pointerGraceTimerRef = ref(0)\nconst pointerGraceIntentRef = ref<GraceIntent | null>(null)\nconst pointerDirRef = ref<Side>('right')\nconst lastPointerXRef = ref(0)\nconst currentItemId = ref<string | null>(null)\n\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\nconst { handleTypeaheadSearch } = useTypeahead()\n\nconst highlightedElement = ref<HTMLElement>()\n\nfunction onKeydownNavigation(event: KeyboardEvent) {\n  const el = useArrowNavigation(\n    event,\n    (highlightedElement.value || getActiveElement()) as HTMLElement,\n    contentElement.value,\n    {\n      loop: loop.value,\n      arrowKeyOptions: 'vertical',\n      dir: rootContext?.dir.value,\n      focus: false,\n      attributeName: '[data-reka-collection-item]:not([data-disabled])',\n    },\n  )\n  if (el) {\n    highlightedElement.value = el\n    el.scrollIntoView({ block: 'nearest' })\n  }\n}\n\nfunction onKeydownEnter() {\n  if (highlightedElement.value) {\n    highlightedElement.value.click()\n  }\n}\n\nconst filterElement = ref<HTMLElement>()\nconst activeSubmenuContext = ref<{ onOpenChange: (open: boolean) => void, trigger: Ref<HTMLElement | undefined> }>()\n\nwatch(highlightedElement, (el) => {\n  if (activeSubmenuContext.value && (el === undefined || el !== activeSubmenuContext.value.trigger.value)) {\n    activeSubmenuContext.value.onOpenChange(false)\n    activeSubmenuContext.value = undefined\n  }\n})\n\nwatch(contentElement, (el) => {\n  menuContext!.onContentChange(el)\n})\n\nonUnmounted(() => {\n  window.clearTimeout(timerRef.value)\n})\n\nfunction isPointerMovingToSubmenu(event: PointerEvent) {\n  const isMovingTowards\n    = pointerDirRef.value === pointerGraceIntentRef.value?.side\n\n  return (\n    isMovingTowards\n    && isPointerInGraceArea(event, pointerGraceIntentRef.value?.area)\n  )\n}\n\nasync function handleMountAutoFocus(event: Event) {\n  emits('openAutoFocus', event)\n  if (event.defaultPrevented)\n    return\n  // when opening, explicitly focus the content area only and leave\n  // `onEntryFocus` in  control of focusing first item\n  event.preventDefault()\n  contentElement.value?.focus({\n    preventScroll: true,\n  })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (event.defaultPrevented)\n    return\n  // submenu key events bubble through portals. We only care about keys in this menu.\n  const target = event.target as HTMLElement\n  const isKeyDownInside\n    = target.closest('[data-reka-menu-content]') === event.currentTarget\n  const isKeyDownInTextField = ['input', 'textarea'].includes(target.tagName.toLowerCase())\n  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n  const isCharacterKey = event.key.length === 1\n\n  const el = useArrowNavigation(\n    event,\n    getActiveElement() as HTMLElement,\n    contentElement.value,\n    {\n      loop: loop.value,\n      arrowKeyOptions: 'vertical',\n      dir: rootContext?.dir.value,\n      focus: true,\n      attributeName: '[data-reka-collection-item]:not([data-disabled])',\n    },\n  )\n  if (el)\n    return el?.focus()\n\n  // prevent \"Space\" taken account into handleTypeahead\n  if (event.code === 'Space')\n    return\n\n  const collectionItems = rovingFocusGroupRef.value?.getItems() ?? []\n\n  if (isKeyDownInside) {\n    // menus should not be navigated using tab key so we prevent it\n    if (event.key === 'Tab')\n      event.preventDefault()\n    if (!isModifierKey && isCharacterKey && !isKeyDownInTextField)\n      handleTypeaheadSearch(event.key, collectionItems)\n  }\n\n  // focus first/last item based on key pressed\n  if (event.target !== contentElement.value)\n    return\n  if (!FIRST_LAST_KEYS.includes(event.key))\n    return\n  event.preventDefault()\n  const candidateNodes = [...collectionItems.map(item => item.ref)]\n  if (LAST_KEYS.includes(event.key))\n    candidateNodes.reverse()\n  focusFirst(candidateNodes)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  // clear search buffer when leaving the menu\n  // @ts-expect-error the provided currentTarget and target should be HTMLElement\n  if (!event?.currentTarget?.contains?.(event.target)) {\n    window.clearTimeout(timerRef.value)\n    searchRef.value = ''\n  }\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n  if (!isMouseEvent(event))\n    return\n  const target = event.target as HTMLElement\n  const pointerXHasChanged = lastPointerXRef.value !== event.clientX\n\n  // We don't use `event.movementX` for this check because Safari will\n  // always return `0` on a pointer event.\n  if (\n    (event?.currentTarget as HTMLElement)?.contains(target)\n    && pointerXHasChanged\n  ) {\n    const newDir = event.clientX > lastPointerXRef.value ? 'right' : 'left'\n    pointerDirRef.value = newDir\n    lastPointerXRef.value = event.clientX\n  }\n}\n\nfunction handlePointerEnter(event: PointerEvent) {\n  if (!isMouseEvent(event))\n    return\n  // When hovering over a menu content (main or sub), focus its filter element if it exists\n  if (filterElement.value) {\n    filterElement.value.focus()\n  }\n}\n\nprovideMenuContentContext({\n  onItemEnter: (event) => {\n    // event.preventDefault() we can't prevent pointerMove event\n    if (isPointerMovingToSubmenu(event))\n      return true\n    else\n      return false\n  },\n  onItemLeave: (event) => {\n    if (isPointerMovingToSubmenu(event))\n      return true\n\n    const isInputFocused = ['INPUT', 'TEXTAREA'].includes(getActiveElement()?.tagName || '')\n    if (!isInputFocused)\n      contentElement.value?.focus()\n\n    currentItemId.value = null\n    return false\n  },\n  onTriggerLeave: (event) => {\n    // event.preventDefault() we can't prevent pointerLeave event\n    if (isPointerMovingToSubmenu(event))\n      return true\n    else\n      return false\n  },\n  searchRef,\n  highlightedElement,\n  onKeydownNavigation,\n  onKeydownEnter,\n  filterElement,\n  onFilterElementChange: (el) => {\n    filterElement.value = el\n  },\n  activeSubmenuContext,\n  pointerGraceTimerRef,\n  onPointerGraceIntentChange: (intent) => {\n    pointerGraceIntentRef.value = intent\n  },\n})\n</script>\n\n<template>\n  <FocusScope\n    as-child\n    :trapped=\"trapFocus\"\n    @mount-auto-focus=\"handleMountAutoFocus\"\n    @unmount-auto-focus=\"emits('closeAutoFocus', $event)\"\n  >\n    <DismissableLayer\n      as-child\n      :disable-outside-pointer-events=\"disableOutsidePointerEvents\"\n      @escape-key-down=\"emits('escapeKeyDown', $event)\"\n      @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n      @focus-outside=\"emits('focusOutside', $event)\"\n      @interact-outside=\"emits('interactOutside', $event)\"\n      @dismiss=\"emits('dismiss')\"\n    >\n      <RovingFocusGroup\n        ref=\"rovingFocusGroupRef\"\n        v-model:current-tab-stop-id=\"currentItemId\"\n        as-child\n        orientation=\"vertical\"\n        :dir=\"rootContext.dir.value\"\n        :loop=\"loop\"\n        @entry-focus=\"(event) => {\n          emits('entryFocus', event)\n          // only focus first item when using keyboard\n          if (!rootContext.isUsingKeyboardRef.value) event.preventDefault();\n        }\"\n      >\n        <PopperContent\n          :ref=\"forwardRef\"\n          role=\"menu\"\n          :as=\"as\"\n          :as-child=\"asChild\"\n          aria-orientation=\"vertical\"\n          data-reka-menu-content\n          :data-state=\"getOpenState(menuContext.open.value)\"\n          :dir=\"rootContext.dir.value\"\n          :side=\"side\"\n          :side-offset=\"sideOffset\"\n          :align=\"align\"\n          :align-offset=\"alignOffset\"\n          :avoid-collisions=\"avoidCollisions\"\n          :collision-boundary=\"collisionBoundary\"\n          :collision-padding=\"collisionPadding\"\n          :arrow-padding=\"arrowPadding\"\n          :prioritize-position=\"prioritizePosition\"\n          :position-strategy=\"positionStrategy\"\n          :update-position-strategy=\"updatePositionStrategy\"\n          :sticky=\"sticky\"\n          :hide-when-detached=\"hideWhenDetached\"\n          :reference=\"reference\"\n          @keydown=\"handleKeyDown\"\n          @blur=\"handleBlur\"\n          @pointermove=\"handlePointerMove\"\n          @pointerenter=\"handlePointerEnter\"\n        >\n          <slot />\n        </PopperContent>\n      </RovingFocusGroup>\n    </DismissableLayer>\n  </FocusScope>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type {\n  GraceIntent,\n  Side,\n} from './utils'\nimport type {\n  DismissableLayerEmits,\n  DismissableLayerProps,\n} from '@/DismissableLayer'\nimport type { FocusScopeProps } from '@/FocusScope'\nimport type { PopperContentProps } from '@/Popper'\nimport type { RovingFocusGroupEmits } from '@/RovingFocus'\n\nimport {\n  createContext,\n  getActiveElement,\n  useArrowNavigation,\n  useFocusGuards,\n  useForwardExpose,\n  useTypeahead,\n} from '@/shared'\nimport { useBodyScrollLock } from '@/shared/useBodyScrollLock'\n\nexport interface MenuContentContext {\n  onItemEnter: (event: PointerEvent) => boolean\n  onItemLeave: (event: PointerEvent) => boolean\n  onTriggerLeave: (event: PointerEvent) => boolean\n  searchRef: Ref<string>\n  highlightedElement: Ref<HTMLElement | undefined>\n  onKeydownNavigation: (event: KeyboardEvent) => void\n  onKeydownEnter: (event: KeyboardEvent) => void\n  filterElement: Ref<HTMLElement | undefined>\n  onFilterElementChange: (el: HTMLElement | undefined) => void\n  activeSubmenuContext: Ref<{ onOpenChange: (open: boolean) => void, trigger: Ref<HTMLElement | undefined> } | undefined>\n  pointerGraceTimerRef: Ref<number>\n  onPointerGraceIntentChange: (intent: GraceIntent | null) => void\n}\n\nexport const [injectMenuContentContext, provideMenuContentContext]\n  = createContext<MenuContentContext>('MenuContent')\n\nexport interface MenuContentImplPrivateProps {\n  /**\n   * When `true`, hover/focus/click interactions will be disabled on elements outside\n   * the `DismissableLayer`. Users will need to click twice on outside elements to\n   * interact with them: once to close the `DismissableLayer`, and again to trigger the element.\n   */\n  disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents']\n  /**\n   * Whether scrolling outside the `MenuContent` should be prevented\n   * @defaultValue false\n   */\n  disableOutsideScroll?: boolean\n\n  /**\n   * Whether focus should be trapped within the `MenuContent`\n   * @defaultValue also\n   */\n  trapFocus?: FocusScopeProps['trapped']\n}\n\nexport type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {\n  openAutoFocus: [event: Event]\n  /**\n   * Event handler called when auto-focusing on close.\n   * Can be prevented.\n   */\n  closeAutoFocus: [event: Event]\n}\n\ntype MenuContentImplPrivateEmits = MenuContentImplEmits & {\n  /**\n   * Handler called when the `DismissableLayer` should be dismissed\n   */\n  dismiss: []\n}\n\nexport interface MenuContentImplProps\n  extends MenuContentImplPrivateProps,\n  Omit<PopperContentProps, 'dir'> {\n  /**\n   * When `true`, keyboard navigation will loop from last item to first, and vice versa.\n   * @defaultValue false\n   */\n  loop?: boolean\n}\n\nexport interface MenuRootContentTypeProps\n  extends Omit<MenuContentImplProps, 'disableOutsidePointerEvents' | 'disableOutsideScroll' | 'trapFocus'> {}\n</script>\n\n<script setup lang=\"ts\">\nimport {\n  onUnmounted,\n  ref,\n  toRefs,\n  watch,\n} from 'vue'\nimport { DismissableLayer } from '@/DismissableLayer'\nimport { FocusScope } from '@/FocusScope'\nimport {\n  PopperContent,\n  PopperContentPropsDefaultValue,\n} from '@/Popper'\nimport { RovingFocusGroup } from '@/RovingFocus'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport {\n  FIRST_LAST_KEYS,\n  focusFirst,\n  getOpenState,\n  isMouseEvent,\n  isPointerInGraceArea,\n  LAST_KEYS,\n} from './utils'\n\nconst props = withDefaults(defineProps<MenuContentImplProps>(), {\n  ...PopperContentPropsDefaultValue,\n})\nconst emits = defineEmits<MenuContentImplPrivateEmits>()\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n\nconst { trapFocus, disableOutsidePointerEvents, loop } = toRefs(props)\n\nuseFocusGuards()\nuseBodyScrollLock(disableOutsidePointerEvents.value)\n\nconst searchRef = ref('')\nconst timerRef = ref(0)\nconst pointerGraceTimerRef = ref(0)\nconst pointerGraceIntentRef = ref<GraceIntent | null>(null)\nconst pointerDirRef = ref<Side>('right')\nconst lastPointerXRef = ref(0)\nconst currentItemId = ref<string | null>(null)\n\nconst rovingFocusGroupRef = ref<InstanceType<typeof RovingFocusGroup>>()\nconst { forwardRef, currentElement: contentElement } = useForwardExpose()\nconst { handleTypeaheadSearch } = useTypeahead()\n\nconst highlightedElement = ref<HTMLElement>()\n\nfunction onKeydownNavigation(event: KeyboardEvent) {\n  const el = useArrowNavigation(\n    event,\n    (highlightedElement.value || getActiveElement()) as HTMLElement,\n    contentElement.value,\n    {\n      loop: loop.value,\n      arrowKeyOptions: 'vertical',\n      dir: rootContext?.dir.value,\n      focus: false,\n      attributeName: '[data-reka-collection-item]:not([data-disabled])',\n    },\n  )\n  if (el) {\n    highlightedElement.value = el\n    el.scrollIntoView({ block: 'nearest' })\n  }\n}\n\nfunction onKeydownEnter() {\n  if (highlightedElement.value) {\n    highlightedElement.value.click()\n  }\n}\n\nconst filterElement = ref<HTMLElement>()\nconst activeSubmenuContext = ref<{ onOpenChange: (open: boolean) => void, trigger: Ref<HTMLElement | undefined> }>()\n\nwatch(highlightedElement, (el) => {\n  if (activeSubmenuContext.value && (el === undefined || el !== activeSubmenuContext.value.trigger.value)) {\n    activeSubmenuContext.value.onOpenChange(false)\n    activeSubmenuContext.value = undefined\n  }\n})\n\nwatch(contentElement, (el) => {\n  menuContext!.onContentChange(el)\n})\n\nonUnmounted(() => {\n  window.clearTimeout(timerRef.value)\n})\n\nfunction isPointerMovingToSubmenu(event: PointerEvent) {\n  const isMovingTowards\n    = pointerDirRef.value === pointerGraceIntentRef.value?.side\n\n  return (\n    isMovingTowards\n    && isPointerInGraceArea(event, pointerGraceIntentRef.value?.area)\n  )\n}\n\nasync function handleMountAutoFocus(event: Event) {\n  emits('openAutoFocus', event)\n  if (event.defaultPrevented)\n    return\n  // when opening, explicitly focus the content area only and leave\n  // `onEntryFocus` in  control of focusing first item\n  event.preventDefault()\n  contentElement.value?.focus({\n    preventScroll: true,\n  })\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n  if (event.defaultPrevented)\n    return\n  // submenu key events bubble through portals. We only care about keys in this menu.\n  const target = event.target as HTMLElement\n  const isKeyDownInside\n    = target.closest('[data-reka-menu-content]') === event.currentTarget\n  const isKeyDownInTextField = ['input', 'textarea'].includes(target.tagName.toLowerCase())\n  const isModifierKey = event.ctrlKey || event.altKey || event.metaKey\n  const isCharacterKey = event.key.length === 1\n\n  const el = useArrowNavigation(\n    event,\n    getActiveElement() as HTMLElement,\n    contentElement.value,\n    {\n      loop: loop.value,\n      arrowKeyOptions: 'vertical',\n      dir: rootContext?.dir.value,\n      focus: true,\n      attributeName: '[data-reka-collection-item]:not([data-disabled])',\n    },\n  )\n  if (el)\n    return el?.focus()\n\n  // prevent \"Space\" taken account into handleTypeahead\n  if (event.code === 'Space')\n    return\n\n  const collectionItems = rovingFocusGroupRef.value?.getItems() ?? []\n\n  if (isKeyDownInside) {\n    // menus should not be navigated using tab key so we prevent it\n    if (event.key === 'Tab')\n      event.preventDefault()\n    if (!isModifierKey && isCharacterKey && !isKeyDownInTextField)\n      handleTypeaheadSearch(event.key, collectionItems)\n  }\n\n  // focus first/last item based on key pressed\n  if (event.target !== contentElement.value)\n    return\n  if (!FIRST_LAST_KEYS.includes(event.key))\n    return\n  event.preventDefault()\n  const candidateNodes = [...collectionItems.map(item => item.ref)]\n  if (LAST_KEYS.includes(event.key))\n    candidateNodes.reverse()\n  focusFirst(candidateNodes)\n}\n\nfunction handleBlur(event: FocusEvent) {\n  // clear search buffer when leaving the menu\n  // @ts-expect-error the provided currentTarget and target should be HTMLElement\n  if (!event?.currentTarget?.contains?.(event.target)) {\n    window.clearTimeout(timerRef.value)\n    searchRef.value = ''\n  }\n}\n\nfunction handlePointerMove(event: PointerEvent) {\n  if (!isMouseEvent(event))\n    return\n  const target = event.target as HTMLElement\n  const pointerXHasChanged = lastPointerXRef.value !== event.clientX\n\n  // We don't use `event.movementX` for this check because Safari will\n  // always return `0` on a pointer event.\n  if (\n    (event?.currentTarget as HTMLElement)?.contains(target)\n    && pointerXHasChanged\n  ) {\n    const newDir = event.clientX > lastPointerXRef.value ? 'right' : 'left'\n    pointerDirRef.value = newDir\n    lastPointerXRef.value = event.clientX\n  }\n}\n\nfunction handlePointerEnter(event: PointerEvent) {\n  if (!isMouseEvent(event))\n    return\n  // When hovering over a menu content (main or sub), focus its filter element if it exists\n  if (filterElement.value) {\n    filterElement.value.focus()\n  }\n}\n\nprovideMenuContentContext({\n  onItemEnter: (event) => {\n    // event.preventDefault() we can't prevent pointerMove event\n    if (isPointerMovingToSubmenu(event))\n      return true\n    else\n      return false\n  },\n  onItemLeave: (event) => {\n    if (isPointerMovingToSubmenu(event))\n      return true\n\n    const isInputFocused = ['INPUT', 'TEXTAREA'].includes(getActiveElement()?.tagName || '')\n    if (!isInputFocused)\n      contentElement.value?.focus()\n\n    currentItemId.value = null\n    return false\n  },\n  onTriggerLeave: (event) => {\n    // event.preventDefault() we can't prevent pointerLeave event\n    if (isPointerMovingToSubmenu(event))\n      return true\n    else\n      return false\n  },\n  searchRef,\n  highlightedElement,\n  onKeydownNavigation,\n  onKeydownEnter,\n  filterElement,\n  onFilterElementChange: (el) => {\n    filterElement.value = el\n  },\n  activeSubmenuContext,\n  pointerGraceTimerRef,\n  onPointerGraceIntentChange: (intent) => {\n    pointerGraceIntentRef.value = intent\n  },\n})\n</script>\n\n<template>\n  <FocusScope\n    as-child\n    :trapped=\"trapFocus\"\n    @mount-auto-focus=\"handleMountAutoFocus\"\n    @unmount-auto-focus=\"emits('closeAutoFocus', $event)\"\n  >\n    <DismissableLayer\n      as-child\n      :disable-outside-pointer-events=\"disableOutsidePointerEvents\"\n      @escape-key-down=\"emits('escapeKeyDown', $event)\"\n      @pointer-down-outside=\"emits('pointerDownOutside', $event)\"\n      @focus-outside=\"emits('focusOutside', $event)\"\n      @interact-outside=\"emits('interactOutside', $event)\"\n      @dismiss=\"emits('dismiss')\"\n    >\n      <RovingFocusGroup\n        ref=\"rovingFocusGroupRef\"\n        v-model:current-tab-stop-id=\"currentItemId\"\n        as-child\n        orientation=\"vertical\"\n        :dir=\"rootContext.dir.value\"\n        :loop=\"loop\"\n        @entry-focus=\"(event) => {\n          emits('entryFocus', event)\n          // only focus first item when using keyboard\n          if (!rootContext.isUsingKeyboardRef.value) event.preventDefault();\n        }\"\n      >\n        <PopperContent\n          :ref=\"forwardRef\"\n          role=\"menu\"\n          :as=\"as\"\n          :as-child=\"asChild\"\n          aria-orientation=\"vertical\"\n          data-reka-menu-content\n          :data-state=\"getOpenState(menuContext.open.value)\"\n          :dir=\"rootContext.dir.value\"\n          :side=\"side\"\n          :side-offset=\"sideOffset\"\n          :align=\"align\"\n          :align-offset=\"alignOffset\"\n          :avoid-collisions=\"avoidCollisions\"\n          :collision-boundary=\"collisionBoundary\"\n          :collision-padding=\"collisionPadding\"\n          :arrow-padding=\"arrowPadding\"\n          :prioritize-position=\"prioritizePosition\"\n          :position-strategy=\"positionStrategy\"\n          :update-position-strategy=\"updatePositionStrategy\"\n          :sticky=\"sticky\"\n          :hide-when-detached=\"hideWhenDetached\"\n          :reference=\"reference\"\n          @keydown=\"handleKeyDown\"\n          @blur=\"handleBlur\"\n          @pointermove=\"handlePointerMove\"\n          @pointerenter=\"handlePointerEnter\"\n        >\n          <slot />\n        </PopperContent>\n      </RovingFocusGroup>\n    </DismissableLayer>\n  </FocusScope>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuItemImplProps extends PrimitiveProps {\n  /** When `true`, prevents the user from interacting with the item. */\n  disabled?: boolean\n  /**\n   * Optional text used for typeahead purposes. By default the typeahead behavior will use the `.textContent` of the item. <br>\n   *  Use this when the content is complex, or you have non-textual content inside.\n   */\n  textValue?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { getActiveElement, useForwardExpose } from '@/shared'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport { isMouseEvent } from './utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = defineProps<MenuItemImplProps>()\n\nconst contentContext = injectMenuContentContext()\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isFocused = ref(false)\nconst isHighlighted = computed(() => isFocused.value || (currentElement.value != null && contentContext.highlightedElement.value === currentElement.value))\n\nasync function handlePointerMove(event: PointerEvent) {\n  if (event.defaultPrevented || !isMouseEvent(event))\n    return\n  if (props.disabled) {\n    contentContext.onItemLeave(event)\n  }\n  else {\n    const defaultPrevented = contentContext.onItemEnter(event)\n    if (!defaultPrevented) {\n      const item = event.currentTarget as HTMLElement\n      contentContext.highlightedElement.value = item\n      const isInputFocused = ['INPUT', 'TEXTAREA'].includes(getActiveElement()?.tagName || '')\n      if (!isInputFocused)\n        item.focus({ preventScroll: true })\n    }\n  }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n  await nextTick()\n  if (event.defaultPrevented)\n    return\n  if (!isMouseEvent(event))\n    return\n\n  // If the highlight was already claimed by another element (e.g. the pointer moved\n  // directly onto another item, whose synchronous `pointermove` ran before this\n  // `nextTick` resolved), this leave is stale and must not reset focus/roving state.\n  if (contentContext.highlightedElement.value !== currentElement.value)\n    return\n\n  const isMovingToSubmenu = contentContext.onItemLeave(event)\n  if (!isMovingToSubmenu && contentContext.highlightedElement.value === currentElement.value)\n    contentContext.highlightedElement.value = undefined\n}\n</script>\n\n<template>\n  <CollectionItem :value=\"{ textValue }\">\n    <Primitive\n      :ref=\"forwardRef\"\n      role=\"menuitem\"\n      tabindex=\"-1\"\n      v-bind=\"$attrs\"\n      :as=\"as\"\n      :as-child=\"asChild\"\n      :aria-disabled=\"disabled || undefined\"\n      :data-disabled=\"disabled ? '' : undefined\"\n      :data-highlighted=\"isHighlighted ? '' : undefined\"\n      @pointermove=\"handlePointerMove\"\n      @pointerleave=\"handlePointerLeave\"\n      @focus=\"\n        async (event: FocusEvent) => {\n          await nextTick();\n          if (event.defaultPrevented || disabled) return;\n          isFocused = true;\n          contentContext.highlightedElement.value = event.currentTarget as HTMLElement\n        }\n      \"\n      @blur=\"\n        async (event: FocusEvent) => {\n          await nextTick();\n          if (event.defaultPrevented) return;\n          isFocused = false;\n        }\n      \"\n    >\n      <slot />\n    </Primitive>\n  </CollectionItem>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuItemImplProps extends PrimitiveProps {\n  /** When `true`, prevents the user from interacting with the item. */\n  disabled?: boolean\n  /**\n   * Optional text used for typeahead purposes. By default the typeahead behavior will use the `.textContent` of the item. <br>\n   *  Use this when the content is complex, or you have non-textual content inside.\n   */\n  textValue?: string\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue'\nimport { useCollection } from '@/Collection'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { getActiveElement, useForwardExpose } from '@/shared'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport { isMouseEvent } from './utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = defineProps<MenuItemImplProps>()\n\nconst contentContext = injectMenuContentContext()\nconst { forwardRef, currentElement } = useForwardExpose()\nconst { CollectionItem } = useCollection()\n\nconst isFocused = ref(false)\nconst isHighlighted = computed(() => isFocused.value || (currentElement.value != null && contentContext.highlightedElement.value === currentElement.value))\n\nasync function handlePointerMove(event: PointerEvent) {\n  if (event.defaultPrevented || !isMouseEvent(event))\n    return\n  if (props.disabled) {\n    contentContext.onItemLeave(event)\n  }\n  else {\n    const defaultPrevented = contentContext.onItemEnter(event)\n    if (!defaultPrevented) {\n      const item = event.currentTarget as HTMLElement\n      contentContext.highlightedElement.value = item\n      const isInputFocused = ['INPUT', 'TEXTAREA'].includes(getActiveElement()?.tagName || '')\n      if (!isInputFocused)\n        item.focus({ preventScroll: true })\n    }\n  }\n}\n\nasync function handlePointerLeave(event: PointerEvent) {\n  await nextTick()\n  if (event.defaultPrevented)\n    return\n  if (!isMouseEvent(event))\n    return\n\n  // If the highlight was already claimed by another element (e.g. the pointer moved\n  // directly onto another item, whose synchronous `pointermove` ran before this\n  // `nextTick` resolved), this leave is stale and must not reset focus/roving state.\n  if (contentContext.highlightedElement.value !== currentElement.value)\n    return\n\n  const isMovingToSubmenu = contentContext.onItemLeave(event)\n  if (!isMovingToSubmenu && contentContext.highlightedElement.value === currentElement.value)\n    contentContext.highlightedElement.value = undefined\n}\n</script>\n\n<template>\n  <CollectionItem :value=\"{ textValue }\">\n    <Primitive\n      :ref=\"forwardRef\"\n      role=\"menuitem\"\n      tabindex=\"-1\"\n      v-bind=\"$attrs\"\n      :as=\"as\"\n      :as-child=\"asChild\"\n      :aria-disabled=\"disabled || undefined\"\n      :data-disabled=\"disabled ? '' : undefined\"\n      :data-highlighted=\"isHighlighted ? '' : undefined\"\n      @pointermove=\"handlePointerMove\"\n      @pointerleave=\"handlePointerLeave\"\n      @focus=\"\n        async (event: FocusEvent) => {\n          await nextTick();\n          if (event.defaultPrevented || disabled) return;\n          isFocused = true;\n          contentContext.highlightedElement.value = event.currentTarget as HTMLElement\n        }\n      \"\n      @blur=\"\n        async (event: FocusEvent) => {\n          await nextTick();\n          if (event.defaultPrevented) return;\n          isFocused = false;\n        }\n      \"\n    >\n      <slot />\n    </Primitive>\n  </CollectionItem>\n</template>\n","<script lang=\"ts\">\nimport type { MenuItemImplProps } from './MenuItemImpl.vue'\nimport { useForwardExpose } from '@/shared'\n\nexport type MenuItemEmits = {\n  /**\n   * Event handler called when the user selects an item (via mouse or keyboard). <br>\n   *  Calling `event.preventDefault` in this handler will prevent the menu from closing when selecting that item.\n   */\n  select: [event: Event]\n}\n\nexport interface MenuItemProps extends MenuItemImplProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport MenuItemImpl from './MenuItemImpl.vue'\nimport { injectMenuRootContext } from './MenuRoot.vue'\nimport { ITEM_SELECT, SELECTION_KEYS } from './utils'\n\nconst props = defineProps<MenuItemProps>()\nconst emits = defineEmits<MenuItemEmits>()\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst rootContext = injectMenuRootContext()\nconst contentContext = injectMenuContentContext()\n\nconst isPointerDownRef = ref(false)\n\nasync function handleSelect() {\n  const menuItem = currentElement.value\n  if (!props.disabled && menuItem) {\n    const itemSelectEvent = new CustomEvent(ITEM_SELECT, {\n      bubbles: true,\n      cancelable: true,\n    })\n    emits('select', itemSelectEvent)\n    // let select event finish\n    await nextTick()\n    if (itemSelectEvent.defaultPrevented)\n      isPointerDownRef.value = false\n    else rootContext.onClose()\n  }\n}\n</script>\n\n<template>\n  <MenuItemImpl\n    v-bind=\"props\"\n    :ref=\"forwardRef\"\n    @click=\"handleSelect\"\n    @pointerdown=\"\n      () => {\n        isPointerDownRef = true;\n      }\n    \"\n    @pointerup=\"\n      async (event: PointerEvent) => {\n        await nextTick();\n        if (event.defaultPrevented) return;\n        // Pointer down can move to a different menu item which should activate it on pointer up.\n        // We dispatch a click for selection to allow composition with click based triggers and to\n        // prevent Firefox from getting stuck in text selection mode when the menu closes.\n        if (!isPointerDownRef) (event.currentTarget as HTMLElement)?.click();\n      }\n    \"\n    @keydown=\"\n      async (event: KeyboardEvent) => {\n        const isTypingAhead = contentContext.searchRef.value !== '';\n        if (disabled || (isTypingAhead && event.key === ' ')) return;\n        if (SELECTION_KEYS.includes(event.key)) {\n          (event.currentTarget as HTMLElement)?.click();\n          /**\n           * We prevent default browser behaviour for selection keys as they should trigger\n           * a selection only:\n           * - prevents space from scrolling the page.\n           * - if keydown causes focus to move, prevents keydown from firing on the new target.\n           */\n          event.preventDefault();\n        }\n      }\n    \"\n  >\n    <slot />\n  </MenuItemImpl>\n</template>\n","<script lang=\"ts\">\nimport type { MenuItemImplProps } from './MenuItemImpl.vue'\nimport { useForwardExpose } from '@/shared'\n\nexport type MenuItemEmits = {\n  /**\n   * Event handler called when the user selects an item (via mouse or keyboard). <br>\n   *  Calling `event.preventDefault` in this handler will prevent the menu from closing when selecting that item.\n   */\n  select: [event: Event]\n}\n\nexport interface MenuItemProps extends MenuItemImplProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref } from 'vue'\nimport { injectMenuContentContext } from './MenuContentImpl.vue'\nimport MenuItemImpl from './MenuItemImpl.vue'\nimport { injectMenuRootContext } from './MenuRoot.vue'\nimport { ITEM_SELECT, SELECTION_KEYS } from './utils'\n\nconst props = defineProps<MenuItemProps>()\nconst emits = defineEmits<MenuItemEmits>()\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst rootContext = injectMenuRootContext()\nconst contentContext = injectMenuContentContext()\n\nconst isPointerDownRef = ref(false)\n\nasync function handleSelect() {\n  const menuItem = currentElement.value\n  if (!props.disabled && menuItem) {\n    const itemSelectEvent = new CustomEvent(ITEM_SELECT, {\n      bubbles: true,\n      cancelable: true,\n    })\n    emits('select', itemSelectEvent)\n    // let select event finish\n    await nextTick()\n    if (itemSelectEvent.defaultPrevented)\n      isPointerDownRef.value = false\n    else rootContext.onClose()\n  }\n}\n</script>\n\n<template>\n  <MenuItemImpl\n    v-bind=\"props\"\n    :ref=\"forwardRef\"\n    @click=\"handleSelect\"\n    @pointerdown=\"\n      () => {\n        isPointerDownRef = true;\n      }\n    \"\n    @pointerup=\"\n      async (event: PointerEvent) => {\n        await nextTick();\n        if (event.defaultPrevented) return;\n        // Pointer down can move to a different menu item which should activate it on pointer up.\n        // We dispatch a click for selection to allow composition with click based triggers and to\n        // prevent Firefox from getting stuck in text selection mode when the menu closes.\n        if (!isPointerDownRef) (event.currentTarget as HTMLElement)?.click();\n      }\n    \"\n    @keydown=\"\n      async (event: KeyboardEvent) => {\n        const isTypingAhead = contentContext.searchRef.value !== '';\n        if (disabled || (isTypingAhead && event.key === ' ')) return;\n        if (SELECTION_KEYS.includes(event.key)) {\n          (event.currentTarget as HTMLElement)?.click();\n          /**\n           * We prevent default browser behaviour for selection keys as they should trigger\n           * a selection only:\n           * - prevents space from scrolling the page.\n           * - if keydown causes focus to move, prevents keydown from firing on the new target.\n           */\n          event.preventDefault();\n        }\n      }\n    \"\n  >\n    <slot />\n  </MenuItemImpl>\n</template>\n","<script setup lang=\"ts\">\nimport type { MenuContentImplEmits, MenuRootContentTypeProps } from './MenuContentImpl.vue'\nimport { useForwardExpose, useForwardPropsEmits, useHideOthers } from '@/shared'\nimport MenuContentImpl from './MenuContentImpl.vue'\nimport { injectMenuContext } from './MenuRoot.vue'\n\nconst props = defineProps<MenuRootContentModalProps>()\nconst emits = defineEmits<MenuRootContentModalEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nconst menuContext = injectMenuContext()\n\ninterface MenuRootContentModalProps extends MenuRootContentTypeProps {}\ntype MenuRootContentModalEmits = MenuContentImplEmits\n\nconst { forwardRef, currentElement } = useForwardExpose()\nuseHideOthers(currentElement)\n</script>\n\n<template>\n  <MenuContentImpl\n    v-bind=\"forwarded\"\n    :ref=\"forwardRef\"\n    :trap-focus=\"menuContext.open.value\"\n    :disable-outside-pointer-events=\"menuContext.open.value\"\n    :disable-outside-scroll=\"true\"\n    @dismiss=\"menuContext.onOpenChange(false)\"\n    @focus-outside.prevent=\"emits('focusOutside', $event)\"\n  >\n    <slot />\n  </MenuContentImpl>\n</template>\n","<script setup lang=\"ts\">\nimport type { MenuContentImplEmits, MenuRootContentTypeProps } from './MenuContentImpl.vue'\nimport { useForwardExpose, useForwardPropsEmits, useHideOthers } from '@/shared'\nimport MenuContentImpl from './MenuContentImpl.vue'\nimport { injectMenuContext } from './MenuRoot.vue'\n\nconst props = defineProps<MenuRootContentModalProps>()\nconst emits = defineEmits<MenuRootContentModalEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nconst menuContext = injectMenuContext()\n\ninterface MenuRootContentModalProps extends MenuRootContentTypeProps {}\ntype MenuRootContentModalEmits = MenuContentImplEmits\n\nconst { forwardRef, currentElement } = useForwardExpose()\nuseHideOthers(currentElement)\n</script>\n\n<template>\n  <MenuContentImpl\n    v-bind=\"forwarded\"\n    :ref=\"forwardRef\"\n    :trap-focus=\"menuContext.open.value\"\n    :disable-outside-pointer-events=\"menuContext.open.value\"\n    :disable-outside-scroll=\"true\"\n    @dismiss=\"menuContext.onOpenChange(false)\"\n    @focus-outside.prevent=\"emits('focusOutside', $event)\"\n  >\n    <slot />\n  </MenuContentImpl>\n</template>\n","<script setup lang=\"ts\">\nimport type { MenuContentImplEmits, MenuRootContentTypeProps } from './MenuContentImpl.vue'\nimport { useForwardPropsEmits } from '@/shared'\nimport MenuContentImpl from './MenuContentImpl.vue'\nimport { injectMenuContext } from './MenuRoot.vue'\n\nconst props = defineProps<MenuRootContentNonModalProps>()\nconst emits = defineEmits<MenuRootContentModalEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nconst menuContext = injectMenuContext()\n\ninterface MenuRootContentNonModalProps extends MenuRootContentTypeProps {}\ntype MenuRootContentModalEmits = MenuContentImplEmits\n</script>\n\n<template>\n  <MenuContentImpl\n    v-bind=\"forwarded\"\n    :trap-focus=\"false\"\n    :disable-outside-pointer-events=\"false\"\n    :disable-outside-scroll=\"false\"\n    @dismiss=\"menuContext.onOpenChange(false)\"\n  >\n    <slot />\n  </MenuContentImpl>\n</template>\n","<script setup lang=\"ts\">\nimport type { MenuContentImplEmits, MenuRootContentTypeProps } from './MenuContentImpl.vue'\nimport { useForwardPropsEmits } from '@/shared'\nimport MenuContentImpl from './MenuContentImpl.vue'\nimport { injectMenuContext } from './MenuRoot.vue'\n\nconst props = defineProps<MenuRootContentNonModalProps>()\nconst emits = defineEmits<MenuRootContentModalEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nconst menuContext = injectMenuContext()\n\ninterface MenuRootContentNonModalProps extends MenuRootContentTypeProps {}\ntype MenuRootContentModalEmits = MenuContentImplEmits\n</script>\n\n<template>\n  <MenuContentImpl\n    v-bind=\"forwarded\"\n    :trap-focus=\"false\"\n    :disable-outside-pointer-events=\"false\"\n    :disable-outside-scroll=\"false\"\n    @dismiss=\"menuContext.onOpenChange(false)\"\n  >\n    <slot />\n  </MenuContentImpl>\n</template>\n","<script lang=\"ts\">\nimport type {\n  MenuContentImplEmits,\n  MenuRootContentTypeProps,\n} from './MenuContentImpl.vue'\n\nexport type MenuContentEmits = Omit<MenuContentImplEmits, 'entryFocus' | 'openAutoFocus'>\n\nexport interface MenuContentProps extends MenuRootContentTypeProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with Vue animation libraries.\n   */\n  forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Presence } from '@/Presence'\nimport { useForwardPropsEmits } from '@/shared'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport MenuRootContentModal from './MenuRootContentModal.vue'\nimport MenuRootContentNonModal from './MenuRootContentNonModal.vue'\n\nconst props = defineProps<MenuContentProps>()\nconst emits = defineEmits<MenuContentImplEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n</script>\n\n<template>\n  <Presence :present=\"forceMount || menuContext.open.value\">\n    <MenuRootContentModal\n      v-if=\"rootContext.modal.value\"\n      v-bind=\"{ ...$attrs, ...forwarded }\"\n    >\n      <slot />\n    </MenuRootContentModal>\n    <MenuRootContentNonModal\n      v-else\n      v-bind=\"{ ...$attrs, ...forwarded }\"\n    >\n      <slot />\n    </MenuRootContentNonModal>\n  </Presence>\n</template>\n","<script lang=\"ts\">\nimport type {\n  MenuContentImplEmits,\n  MenuRootContentTypeProps,\n} from './MenuContentImpl.vue'\n\nexport type MenuContentEmits = Omit<MenuContentImplEmits, 'entryFocus' | 'openAutoFocus'>\n\nexport interface MenuContentProps extends MenuRootContentTypeProps {\n  /**\n   * Used to force mounting when more control is needed. Useful when\n   * controlling animation with Vue animation libraries.\n   */\n  forceMount?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { Presence } from '@/Presence'\nimport { useForwardPropsEmits } from '@/shared'\nimport { injectMenuContext, injectMenuRootContext } from './MenuRoot.vue'\nimport MenuRootContentModal from './MenuRootContentModal.vue'\nimport MenuRootContentNonModal from './MenuRootContentNonModal.vue'\n\nconst props = defineProps<MenuContentProps>()\nconst emits = defineEmits<MenuContentImplEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nconst menuContext = injectMenuContext()\nconst rootContext = injectMenuRootContext()\n</script>\n\n<template>\n  <Presence :present=\"forceMount || menuContext.open.value\">\n    <MenuRootContentModal\n      v-if=\"rootContext.modal.value\"\n      v-bind=\"{ ...$attrs, ...forwarded }\"\n    >\n      <slot />\n    </MenuRootContentModal>\n    <MenuRootContentNonModal\n      v-else\n      v-bind=\"{ ...$attrs, ...forwarded }\"\n    >\n      <slot />\n    </MenuRootContentNonModal>\n  </Presence>\n</template>\n","<script lang=\"ts\">\nimport type { TeleportProps } from '@/Teleport'\n\nexport interface MenuPortalProps extends TeleportProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { TeleportPrimitive } from '@/Teleport'\n\nconst props = defineProps<MenuPortalProps>()\n</script>\n\n<template>\n  <TeleportPrimitive v-bind=\"props\">\n    <slot />\n  </TeleportPrimitive>\n</template>\n","<script lang=\"ts\">\nimport type { TeleportProps } from '@/Teleport'\n\nexport interface MenuPortalProps extends TeleportProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { TeleportPrimitive } from '@/Teleport'\n\nconst props = defineProps<MenuPortalProps>()\n</script>\n\n<template>\n  <TeleportPrimitive v-bind=\"props\">\n    <slot />\n  </TeleportPrimitive>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuSeparatorProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\n\nconst props = defineProps<MenuSeparatorProps>()\n</script>\n\n<template>\n  <Primitive\n    v-bind=\"props\"\n    role=\"separator\"\n    aria-orientation=\"horizontal\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface MenuSeparatorProps extends PrimitiveProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { Primitive } from '@/Primitive'\n\nconst props = defineProps<MenuSeparatorProps>()\n</script>\n\n<template>\n  <Primitive\n    v-bind=\"props\"\n    role=\"separator\"\n    aria-orientation=\"horizontal\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuEmits, MenuProps } from '@/Menu'\nimport type { Direction } from '@/shared/types'\nimport { createContext, useDirection, useForwardExpose } from '@/shared'\n\ntype ContextMenuRootContext = {\n  open: Ref<boolean>\n  onOpenChange: (open: boolean) => void\n  modal: Ref<boolean>\n  dir: Ref<Direction>\n  triggerElement: Ref<HTMLElement | undefined>\n  pressOpenDelay: Ref<number>\n}\n\nexport interface ContextMenuRootProps extends Omit<MenuProps, 'open'> {\n  /**\n   * The duration from when the trigger is pressed until the menu opens.\n   *\n   * @defaultValue 700\n   */\n  pressOpenDelay?: number\n}\nexport type ContextMenuRootEmits = MenuEmits\n\nexport const [injectContextMenuRootContext, provideContextMenuRootContext]\n  = createContext<ContextMenuRootContext>('ContextMenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, toRefs, watch } from 'vue'\nimport { MenuRoot } from '@/Menu'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ContextMenuRootProps>(), {\n  modal: true,\n  pressOpenDelay: 700,\n})\nconst emits = defineEmits<ContextMenuRootEmits>()\nconst { dir: propDir, modal, pressOpenDelay } = toRefs(props)\nuseForwardExpose()\nconst dir = useDirection(propDir)\n\nconst open = ref(false)\nconst triggerElement = ref<HTMLElement>()\n\nprovideContextMenuRootContext({\n  open,\n  onOpenChange: (value: boolean) => {\n    open.value = value\n  },\n  dir,\n  modal,\n  triggerElement,\n  pressOpenDelay,\n})\n\nwatch(open, (value) => {\n  emits('update:open', value)\n})\n</script>\n\n<template>\n  <MenuRoot\n    v-model:open=\"open\"\n    :dir=\"dir\"\n    :modal=\"modal\"\n  >\n    <slot />\n  </MenuRoot>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { MenuEmits, MenuProps } from '@/Menu'\nimport type { Direction } from '@/shared/types'\nimport { createContext, useDirection, useForwardExpose } from '@/shared'\n\ntype ContextMenuRootContext = {\n  open: Ref<boolean>\n  onOpenChange: (open: boolean) => void\n  modal: Ref<boolean>\n  dir: Ref<Direction>\n  triggerElement: Ref<HTMLElement | undefined>\n  pressOpenDelay: Ref<number>\n}\n\nexport interface ContextMenuRootProps extends Omit<MenuProps, 'open'> {\n  /**\n   * The duration from when the trigger is pressed until the menu opens.\n   *\n   * @defaultValue 700\n   */\n  pressOpenDelay?: number\n}\nexport type ContextMenuRootEmits = MenuEmits\n\nexport const [injectContextMenuRootContext, provideContextMenuRootContext]\n  = createContext<ContextMenuRootContext>('ContextMenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, toRefs, watch } from 'vue'\nimport { MenuRoot } from '@/Menu'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ContextMenuRootProps>(), {\n  modal: true,\n  pressOpenDelay: 700,\n})\nconst emits = defineEmits<ContextMenuRootEmits>()\nconst { dir: propDir, modal, pressOpenDelay } = toRefs(props)\nuseForwardExpose()\nconst dir = useDirection(propDir)\n\nconst open = ref(false)\nconst triggerElement = ref<HTMLElement>()\n\nprovideContextMenuRootContext({\n  open,\n  onOpenChange: (value: boolean) => {\n    open.value = value\n  },\n  dir,\n  modal,\n  triggerElement,\n  pressOpenDelay,\n})\n\nwatch(open, (value) => {\n  emits('update:open', value)\n})\n</script>\n\n<template>\n  <MenuRoot\n    v-model:open=\"open\"\n    :dir=\"dir\"\n    :modal=\"modal\"\n  >\n    <slot />\n  </MenuRoot>\n</template>\n","<script lang=\"ts\">\nimport type {\n  MenuContentEmits,\n  MenuContentProps,\n} from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits } from '@/shared'\n\nexport type ContextMenuContentEmits = MenuContentEmits\n\nexport interface ContextMenuContentProps\n  extends Omit<\n    MenuContentProps,\n    | 'side'\n    | 'sideOffset'\n    | 'align'\n    | 'arrowPadding'\n    | 'updatePositionStrategy'\n  > {}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { MenuContent } from '@/Menu'\nimport { injectContextMenuRootContext } from './ContextMenuRoot.vue'\n\nconst props = withDefaults(defineProps<ContextMenuContentProps>(), {\n  alignOffset: 0,\n  avoidCollisions: true,\n  collisionBoundary: () => [],\n  collisionPadding: 0,\n  sticky: 'partial',\n  hideWhenDetached: false,\n})\nconst emits = defineEmits<ContextMenuContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nuseForwardExpose()\nconst rootContext = injectContextMenuRootContext()\nconst hasInteractedOutside = ref(false)\n</script>\n\n<template>\n  <MenuContent\n    v-bind=\"forwarded\"\n    side=\"right\"\n    :side-offset=\"2\"\n    align=\"start\"\n    update-position-strategy=\"always\"\n    :style=\"{\n      '--reka-context-menu-content-transform-origin':\n        'var(--reka-popper-transform-origin)',\n      '--reka-context-menu-content-available-width':\n        'var(--reka-popper-available-width)',\n      '--reka-context-menu-content-available-height':\n        'var(--reka-popper-available-height)',\n      '--reka-context-menu-trigger-width': 'var(--reka-popper-anchor-width)',\n      '--reka-context-menu-trigger-height':\n        'var(--reka-popper-anchor-height)',\n    }\"\n    @close-auto-focus=\"\n      (event) => {\n        if (!event.defaultPrevented && hasInteractedOutside) {\n          event.preventDefault();\n        }\n        hasInteractedOutside = false;\n      }\n    \"\n    @interact-outside=\"\n      (event) => {\n        const originalEvent = event.detail.originalEvent as PointerEvent\n        // Prevent closing when right click (button=2) with the trigger element\n        if (originalEvent.button === 2 && event.target === rootContext.triggerElement.value) {\n          event.preventDefault()\n        }\n        if (!event.defaultPrevented && !rootContext.modal.value)\n          hasInteractedOutside = true;\n      }\n    \"\n  >\n    <slot />\n  </MenuContent>\n</template>\n","<script lang=\"ts\">\nimport type {\n  MenuContentEmits,\n  MenuContentProps,\n} from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits } from '@/shared'\n\nexport type ContextMenuContentEmits = MenuContentEmits\n\nexport interface ContextMenuContentProps\n  extends Omit<\n    MenuContentProps,\n    | 'side'\n    | 'sideOffset'\n    | 'align'\n    | 'arrowPadding'\n    | 'updatePositionStrategy'\n  > {}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { MenuContent } from '@/Menu'\nimport { injectContextMenuRootContext } from './ContextMenuRoot.vue'\n\nconst props = withDefaults(defineProps<ContextMenuContentProps>(), {\n  alignOffset: 0,\n  avoidCollisions: true,\n  collisionBoundary: () => [],\n  collisionPadding: 0,\n  sticky: 'partial',\n  hideWhenDetached: false,\n})\nconst emits = defineEmits<ContextMenuContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\n\nuseForwardExpose()\nconst rootContext = injectContextMenuRootContext()\nconst hasInteractedOutside = ref(false)\n</script>\n\n<template>\n  <MenuContent\n    v-bind=\"forwarded\"\n    side=\"right\"\n    :side-offset=\"2\"\n    align=\"start\"\n    update-position-strategy=\"always\"\n    :style=\"{\n      '--reka-context-menu-content-transform-origin':\n        'var(--reka-popper-transform-origin)',\n      '--reka-context-menu-content-available-width':\n        'var(--reka-popper-available-width)',\n      '--reka-context-menu-content-available-height':\n        'var(--reka-popper-available-height)',\n      '--reka-context-menu-trigger-width': 'var(--reka-popper-anchor-width)',\n      '--reka-context-menu-trigger-height':\n        'var(--reka-popper-anchor-height)',\n    }\"\n    @close-auto-focus=\"\n      (event) => {\n        if (!event.defaultPrevented && hasInteractedOutside) {\n          event.preventDefault();\n        }\n        hasInteractedOutside = false;\n      }\n    \"\n    @interact-outside=\"\n      (event) => {\n        const originalEvent = event.detail.originalEvent as PointerEvent\n        // Prevent closing when right click (button=2) with the trigger element\n        if (originalEvent.button === 2 && event.target === rootContext.triggerElement.value) {\n          event.preventDefault()\n        }\n        if (!event.defaultPrevented && !rootContext.modal.value)\n          hasInteractedOutside = true;\n      }\n    \"\n  >\n    <slot />\n  </MenuContent>\n</template>\n","<script lang=\"ts\">\nimport type { MenuItemEmits, MenuItemProps } from '@/Menu'\n\nexport type ContextMenuItemEmits = MenuItemEmits\n\nexport interface ContextMenuItemProps extends MenuItemProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuItem } from '@/Menu'\nimport { useEmitAsProps, useForwardExpose } from '@/shared'\n\nconst props = defineProps<MenuItemProps>()\nconst emits = defineEmits<MenuItemEmits>()\n\nconst emitsAsProps = useEmitAsProps(emits)\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuItem v-bind=\"{ ...props, ...emitsAsProps }\">\n    <slot />\n  </MenuItem>\n</template>\n","<script lang=\"ts\">\nimport type { MenuItemEmits, MenuItemProps } from '@/Menu'\n\nexport type ContextMenuItemEmits = MenuItemEmits\n\nexport interface ContextMenuItemProps extends MenuItemProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuItem } from '@/Menu'\nimport { useEmitAsProps, useForwardExpose } from '@/shared'\n\nconst props = defineProps<MenuItemProps>()\nconst emits = defineEmits<MenuItemEmits>()\n\nconst emitsAsProps = useEmitAsProps(emits)\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuItem v-bind=\"{ ...props, ...emitsAsProps }\">\n    <slot />\n  </MenuItem>\n</template>\n","<script setup lang=\"ts\">\nimport type { MenuPortalProps } from '@/Menu'\nimport { MenuPortal } from '@/Menu'\n\nexport interface ContextMenuPortalProps extends MenuPortalProps {}\nconst props = defineProps<ContextMenuPortalProps>()\n</script>\n\n<template>\n  <MenuPortal v-bind=\"props\">\n    <slot />\n  </MenuPortal>\n</template>\n","<script setup lang=\"ts\">\nimport type { MenuPortalProps } from '@/Menu'\nimport { MenuPortal } from '@/Menu'\n\nexport interface ContextMenuPortalProps extends MenuPortalProps {}\nconst props = defineProps<ContextMenuPortalProps>()\n</script>\n\n<template>\n  <MenuPortal v-bind=\"props\">\n    <slot />\n  </MenuPortal>\n</template>\n","<script lang=\"ts\">\nimport type { MenuSeparatorProps } from '@/Menu'\n\nexport interface ContextMenuSeparatorProps extends MenuSeparatorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuSeparator } from '@/Menu'\nimport { useForwardExpose } from '@/shared'\n\nconst props = defineProps<ContextMenuSeparatorProps>()\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuSeparator v-bind=\"props\">\n    <slot />\n  </MenuSeparator>\n</template>\n","<script lang=\"ts\">\nimport type { MenuSeparatorProps } from '@/Menu'\n\nexport interface ContextMenuSeparatorProps extends MenuSeparatorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuSeparator } from '@/Menu'\nimport { useForwardExpose } from '@/shared'\n\nconst props = defineProps<ContextMenuSeparatorProps>()\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuSeparator v-bind=\"props\">\n    <slot />\n  </MenuSeparator>\n</template>\n","export function isTouchOrPen(event: PointerEvent) {\n  return event.pointerType !== 'mouse'\n}\n","<script lang=\"ts\">\nimport type { Point } from '@/Menu/utils'\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface ContextMenuTriggerProps extends PrimitiveProps {\n  /**\n   * When `true`, the context menu would not open when right-clicking.\n   *\n   * Note that this will also restore the native context menu.\n   */\n  disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, toRefs } from 'vue'\nimport { MenuAnchor } from '@/Menu'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectContextMenuRootContext } from './ContextMenuRoot.vue'\nimport { isTouchOrPen } from './utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ContextMenuTriggerProps>(), {\n  as: 'span',\n  disabled: false,\n})\nconst { disabled } = toRefs(props)\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst rootContext = injectContextMenuRootContext()\nconst point = ref<Point>({ x: 0, y: 0 })\nconst virtualEl = computed(() => ({\n  getBoundingClientRect: () =>\n    ({\n      width: 0,\n      height: 0,\n      left: point.value.x,\n      right: point.value.x,\n      top: point.value.y,\n      bottom: point.value.y,\n      ...point.value,\n    } as DOMRect),\n}))\n\nconst longPressTimer = ref(0)\nfunction clearLongPress() {\n  window.clearTimeout(longPressTimer.value)\n}\n\nfunction handleOpen(event: MouseEvent | PointerEvent) {\n  point.value = { x: event.clientX, y: event.clientY }\n  rootContext.onOpenChange(true)\n}\n\nasync function handleContextMenu(event: PointerEvent) {\n  if (!disabled.value) {\n    await nextTick()\n    if (!event.defaultPrevented) {\n      clearLongPress()\n      handleOpen(event)\n      event.preventDefault()\n    }\n  }\n}\n\nasync function handlePointerDown(event: PointerEvent) {\n  if (!disabled.value) {\n    await nextTick()\n\n    if (isTouchOrPen(event) && !event.defaultPrevented) {\n      // clear the long press here in case there's multiple touch points\n      clearLongPress()\n      longPressTimer.value = window.setTimeout(handleOpen, rootContext.pressOpenDelay.value, event)\n    }\n  }\n}\n\nasync function handlePointerEvent(event: PointerEvent) {\n  if (!disabled.value) {\n    await nextTick()\n    if (isTouchOrPen(event) && !event.defaultPrevented)\n      clearLongPress()\n  }\n}\n\nonMounted(() => {\n  if (currentElement.value) {\n    rootContext.triggerElement.value = currentElement.value\n  }\n})\n</script>\n\n<template>\n  <MenuAnchor\n    as=\"template\"\n    :reference=\"virtualEl\"\n  />\n\n  <Primitive\n    :ref=\"forwardRef\"\n    :as=\"as\"\n    :as-child=\"asChild\"\n    :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n    :data-disabled=\"disabled ? '' : undefined\"\n    :style=\"{\n      WebkitTouchCallout: 'none',\n      pointerEvents: 'auto',\n    }\"\n    v-bind=\"$attrs\"\n    @contextmenu=\"handleContextMenu\"\n    @pointerdown=\"handlePointerDown\"\n    @pointermove=\"handlePointerEvent\"\n    @pointercancel=\"handlePointerEvent\"\n    @pointerup=\"handlePointerEvent\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { Point } from '@/Menu/utils'\nimport type { PrimitiveProps } from '@/Primitive'\n\nexport interface ContextMenuTriggerProps extends PrimitiveProps {\n  /**\n   * When `true`, the context menu would not open when right-clicking.\n   *\n   * Note that this will also restore the native context menu.\n   */\n  disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onMounted, ref, toRefs } from 'vue'\nimport { MenuAnchor } from '@/Menu'\nimport { Primitive } from '@/Primitive'\nimport { useForwardExpose } from '@/shared'\nimport { injectContextMenuRootContext } from './ContextMenuRoot.vue'\nimport { isTouchOrPen } from './utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<ContextMenuTriggerProps>(), {\n  as: 'span',\n  disabled: false,\n})\nconst { disabled } = toRefs(props)\n\nconst { forwardRef, currentElement } = useForwardExpose()\nconst rootContext = injectContextMenuRootContext()\nconst point = ref<Point>({ x: 0, y: 0 })\nconst virtualEl = computed(() => ({\n  getBoundingClientRect: () =>\n    ({\n      width: 0,\n      height: 0,\n      left: point.value.x,\n      right: point.value.x,\n      top: point.value.y,\n      bottom: point.value.y,\n      ...point.value,\n    } as DOMRect),\n}))\n\nconst longPressTimer = ref(0)\nfunction clearLongPress() {\n  window.clearTimeout(longPressTimer.value)\n}\n\nfunction handleOpen(event: MouseEvent | PointerEvent) {\n  point.value = { x: event.clientX, y: event.clientY }\n  rootContext.onOpenChange(true)\n}\n\nasync function handleContextMenu(event: PointerEvent) {\n  if (!disabled.value) {\n    await nextTick()\n    if (!event.defaultPrevented) {\n      clearLongPress()\n      handleOpen(event)\n      event.preventDefault()\n    }\n  }\n}\n\nasync function handlePointerDown(event: PointerEvent) {\n  if (!disabled.value) {\n    await nextTick()\n\n    if (isTouchOrPen(event) && !event.defaultPrevented) {\n      // clear the long press here in case there's multiple touch points\n      clearLongPress()\n      longPressTimer.value = window.setTimeout(handleOpen, rootContext.pressOpenDelay.value, event)\n    }\n  }\n}\n\nasync function handlePointerEvent(event: PointerEvent) {\n  if (!disabled.value) {\n    await nextTick()\n    if (isTouchOrPen(event) && !event.defaultPrevented)\n      clearLongPress()\n  }\n}\n\nonMounted(() => {\n  if (currentElement.value) {\n    rootContext.triggerElement.value = currentElement.value\n  }\n})\n</script>\n\n<template>\n  <MenuAnchor\n    as=\"template\"\n    :reference=\"virtualEl\"\n  />\n\n  <Primitive\n    :ref=\"forwardRef\"\n    :as=\"as\"\n    :as-child=\"asChild\"\n    :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n    :data-disabled=\"disabled ? '' : undefined\"\n    :style=\"{\n      WebkitTouchCallout: 'none',\n      pointerEvents: 'auto',\n    }\"\n    v-bind=\"$attrs\"\n    @contextmenu=\"handleContextMenu\"\n    @pointerdown=\"handlePointerDown\"\n    @pointermove=\"handlePointerEvent\"\n    @pointercancel=\"handlePointerEvent\"\n    @pointerup=\"handlePointerEvent\"\n  >\n    <slot />\n  </Primitive>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from '../shared/types'\nimport type { MenuEmits, MenuProps } from '@/Menu'\nimport { createContext, useDirection, useForwardExpose } from '@/shared'\n\nexport interface DropdownMenuRootProps extends MenuProps {\n  /** The open state of the dropdown menu when it is initially rendered. Use when you do not need to control its open state. */\n  defaultOpen?: boolean\n}\nexport type DropdownMenuRootEmits = MenuEmits\n\nexport interface DropdownMenuRootContext {\n  open: Readonly<Ref<boolean>>\n  onOpenChange: (open: boolean) => void\n  onOpenToggle: () => void\n  triggerId: string\n  triggerElement: Ref<HTMLElement | undefined>\n  contentId: string\n  modal: Ref<boolean>\n  dir: Ref<Direction>\n}\n\nexport const [injectDropdownMenuRootContext, provideDropdownMenuRootContext]\n  = createContext<DropdownMenuRootContext>('DropdownMenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { ref, toRefs } from 'vue'\nimport { MenuRoot } from '@/Menu'\n\nconst props = withDefaults(defineProps<DropdownMenuRootProps>(), {\n  modal: true,\n  open: undefined,\n})\nconst emit = defineEmits<DropdownMenuRootEmits>()\n\ndefineSlots<{\n  default?: (props: {\n    /** Current open state */\n    open: typeof open.value\n  }) => any\n}>()\n\nuseForwardExpose()\nconst open = useVModel(props, 'open', emit, {\n  defaultValue: props.defaultOpen,\n  passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst triggerElement = ref<HTMLElement>()\n\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nprovideDropdownMenuRootContext({\n  open,\n  onOpenChange: (value) => {\n    open.value = value\n  },\n  onOpenToggle: () => {\n    open.value = !open.value\n  },\n  triggerId: '',\n  triggerElement,\n  contentId: '',\n  modal,\n  dir,\n})\n</script>\n\n<template>\n  <MenuRoot\n    v-model:open=\"open\"\n    :dir=\"dir\"\n    :modal=\"modal\"\n  >\n    <slot :open=\"open\" />\n  </MenuRoot>\n</template>\n","<script lang=\"ts\">\nimport type { Ref } from 'vue'\nimport type { Direction } from '../shared/types'\nimport type { MenuEmits, MenuProps } from '@/Menu'\nimport { createContext, useDirection, useForwardExpose } from '@/shared'\n\nexport interface DropdownMenuRootProps extends MenuProps {\n  /** The open state of the dropdown menu when it is initially rendered. Use when you do not need to control its open state. */\n  defaultOpen?: boolean\n}\nexport type DropdownMenuRootEmits = MenuEmits\n\nexport interface DropdownMenuRootContext {\n  open: Readonly<Ref<boolean>>\n  onOpenChange: (open: boolean) => void\n  onOpenToggle: () => void\n  triggerId: string\n  triggerElement: Ref<HTMLElement | undefined>\n  contentId: string\n  modal: Ref<boolean>\n  dir: Ref<Direction>\n}\n\nexport const [injectDropdownMenuRootContext, provideDropdownMenuRootContext]\n  = createContext<DropdownMenuRootContext>('DropdownMenuRoot')\n</script>\n\n<script setup lang=\"ts\">\nimport { useVModel } from '@vueuse/core'\nimport { ref, toRefs } from 'vue'\nimport { MenuRoot } from '@/Menu'\n\nconst props = withDefaults(defineProps<DropdownMenuRootProps>(), {\n  modal: true,\n  open: undefined,\n})\nconst emit = defineEmits<DropdownMenuRootEmits>()\n\ndefineSlots<{\n  default?: (props: {\n    /** Current open state */\n    open: typeof open.value\n  }) => any\n}>()\n\nuseForwardExpose()\nconst open = useVModel(props, 'open', emit, {\n  defaultValue: props.defaultOpen,\n  passive: (props.open === undefined) as false,\n}) as Ref<boolean>\n\nconst triggerElement = ref<HTMLElement>()\n\nconst { modal, dir: propDir } = toRefs(props)\nconst dir = useDirection(propDir)\nprovideDropdownMenuRootContext({\n  open,\n  onOpenChange: (value) => {\n    open.value = value\n  },\n  onOpenToggle: () => {\n    open.value = !open.value\n  },\n  triggerId: '',\n  triggerElement,\n  contentId: '',\n  modal,\n  dir,\n})\n</script>\n\n<template>\n  <MenuRoot\n    v-model:open=\"open\"\n    :dir=\"dir\"\n    :modal=\"modal\"\n  >\n    <slot :open=\"open\" />\n  </MenuRoot>\n</template>\n","<script lang=\"ts\">\nimport type {\n  MenuContentEmits,\n  MenuContentProps,\n} from '@/Menu'\n\nexport type DropdownMenuContentEmits = MenuContentEmits\n\nexport interface DropdownMenuContentProps extends MenuContentProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { MenuContent } from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits, useId } from '@/shared'\nimport { injectDropdownMenuRootContext } from './DropdownMenuRoot.vue'\n\nconst props = defineProps<DropdownMenuContentProps>()\nconst emits = defineEmits<DropdownMenuContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\nuseForwardExpose()\n\nconst rootContext = injectDropdownMenuRootContext()\n\nconst hasInteractedOutsideRef = ref(false)\n\nfunction handleCloseAutoFocus(event: Event) {\n  if (event.defaultPrevented)\n    return\n  if (!hasInteractedOutsideRef.value) {\n    setTimeout(() => {\n      rootContext.triggerElement.value?.focus()\n    }, 0)\n  }\n  hasInteractedOutsideRef.value = false\n\n  // Always prevent auto focus because we either focus manually or want user agent focus\n  event.preventDefault()\n}\n\nrootContext.contentId ||= useId(undefined, 'reka-dropdown-menu-content')\n</script>\n\n<template>\n  <MenuContent\n    v-bind=\"forwarded\"\n    :id=\"rootContext.contentId\"\n    :aria-labelledby=\"rootContext?.triggerId\"\n    :style=\"{\n      '--reka-dropdown-menu-content-transform-origin':\n        'var(--reka-popper-transform-origin)',\n      '--reka-dropdown-menu-content-available-width':\n        'var(--reka-popper-available-width)',\n      '--reka-dropdown-menu-content-available-height':\n        'var(--reka-popper-available-height)',\n      '--reka-dropdown-menu-trigger-width': 'var(--reka-popper-anchor-width)',\n      '--reka-dropdown-menu-trigger-height':\n        'var(--reka-popper-anchor-height)',\n    }\"\n    @close-auto-focus=\"handleCloseAutoFocus\"\n    @interact-outside=\"(event) => {\n      if (event.defaultPrevented) return\n\n      const originalEvent = event.detail.originalEvent as PointerEvent;\n      const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n      const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n      if (!rootContext.modal.value || isRightClick) hasInteractedOutsideRef = true;\n      if (rootContext.triggerElement.value?.contains(event.target as HTMLElement)) event.preventDefault()\n    }\"\n  >\n    <slot />\n  </MenuContent>\n</template>\n","<script lang=\"ts\">\nimport type {\n  MenuContentEmits,\n  MenuContentProps,\n} from '@/Menu'\n\nexport type DropdownMenuContentEmits = MenuContentEmits\n\nexport interface DropdownMenuContentProps extends MenuContentProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { MenuContent } from '@/Menu'\nimport { useForwardExpose, useForwardPropsEmits, useId } from '@/shared'\nimport { injectDropdownMenuRootContext } from './DropdownMenuRoot.vue'\n\nconst props = defineProps<DropdownMenuContentProps>()\nconst emits = defineEmits<DropdownMenuContentEmits>()\nconst forwarded = useForwardPropsEmits(props, emits)\nuseForwardExpose()\n\nconst rootContext = injectDropdownMenuRootContext()\n\nconst hasInteractedOutsideRef = ref(false)\n\nfunction handleCloseAutoFocus(event: Event) {\n  if (event.defaultPrevented)\n    return\n  if (!hasInteractedOutsideRef.value) {\n    setTimeout(() => {\n      rootContext.triggerElement.value?.focus()\n    }, 0)\n  }\n  hasInteractedOutsideRef.value = false\n\n  // Always prevent auto focus because we either focus manually or want user agent focus\n  event.preventDefault()\n}\n\nrootContext.contentId ||= useId(undefined, 'reka-dropdown-menu-content')\n</script>\n\n<template>\n  <MenuContent\n    v-bind=\"forwarded\"\n    :id=\"rootContext.contentId\"\n    :aria-labelledby=\"rootContext?.triggerId\"\n    :style=\"{\n      '--reka-dropdown-menu-content-transform-origin':\n        'var(--reka-popper-transform-origin)',\n      '--reka-dropdown-menu-content-available-width':\n        'var(--reka-popper-available-width)',\n      '--reka-dropdown-menu-content-available-height':\n        'var(--reka-popper-available-height)',\n      '--reka-dropdown-menu-trigger-width': 'var(--reka-popper-anchor-width)',\n      '--reka-dropdown-menu-trigger-height':\n        'var(--reka-popper-anchor-height)',\n    }\"\n    @close-auto-focus=\"handleCloseAutoFocus\"\n    @interact-outside=\"(event) => {\n      if (event.defaultPrevented) return\n\n      const originalEvent = event.detail.originalEvent as PointerEvent;\n      const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n      const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n      if (!rootContext.modal.value || isRightClick) hasInteractedOutsideRef = true;\n      if (rootContext.triggerElement.value?.contains(event.target as HTMLElement)) event.preventDefault()\n    }\"\n  >\n    <slot />\n  </MenuContent>\n</template>\n","<script lang=\"ts\">\nimport type { MenuItemEmits, MenuItemProps } from '@/Menu'\n\nexport type DropdownMenuItemEmits = MenuItemEmits\n\nexport interface DropdownMenuItemProps extends MenuItemProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuItem } from '@/Menu'\nimport { useEmitAsProps, useForwardExpose } from '@/shared'\n\nconst props = defineProps<DropdownMenuItemProps>()\nconst emits = defineEmits<DropdownMenuItemEmits>()\n\nconst emitsAsProps = useEmitAsProps(emits)\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuItem v-bind=\"{ ...props, ...emitsAsProps }\">\n    <slot />\n  </MenuItem>\n</template>\n","<script lang=\"ts\">\nimport type { MenuItemEmits, MenuItemProps } from '@/Menu'\n\nexport type DropdownMenuItemEmits = MenuItemEmits\n\nexport interface DropdownMenuItemProps extends MenuItemProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuItem } from '@/Menu'\nimport { useEmitAsProps, useForwardExpose } from '@/shared'\n\nconst props = defineProps<DropdownMenuItemProps>()\nconst emits = defineEmits<DropdownMenuItemEmits>()\n\nconst emitsAsProps = useEmitAsProps(emits)\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuItem v-bind=\"{ ...props, ...emitsAsProps }\">\n    <slot />\n  </MenuItem>\n</template>\n","<script lang=\"ts\">\nimport type { MenuPortalProps } from '@/Menu'\n\nexport interface DropdownMenuPortalProps extends MenuPortalProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuPortal } from '@/Menu'\n\nconst props = defineProps<DropdownMenuPortalProps>()\n</script>\n\n<template>\n  <MenuPortal v-bind=\"props\">\n    <slot />\n  </MenuPortal>\n</template>\n","<script lang=\"ts\">\nimport type { MenuPortalProps } from '@/Menu'\n\nexport interface DropdownMenuPortalProps extends MenuPortalProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuPortal } from '@/Menu'\n\nconst props = defineProps<DropdownMenuPortalProps>()\n</script>\n\n<template>\n  <MenuPortal v-bind=\"props\">\n    <slot />\n  </MenuPortal>\n</template>\n","<script lang=\"ts\">\nimport type { MenuSeparatorProps } from '@/Menu'\nimport { useForwardExpose } from '@/shared'\n\nexport interface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuSeparator } from '@/Menu'\n\nconst props = defineProps<DropdownMenuSeparatorProps>()\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuSeparator v-bind=\"props\">\n    <slot />\n  </MenuSeparator>\n</template>\n","<script lang=\"ts\">\nimport type { MenuSeparatorProps } from '@/Menu'\nimport { useForwardExpose } from '@/shared'\n\nexport interface DropdownMenuSeparatorProps extends MenuSeparatorProps {}\n</script>\n\n<script setup lang=\"ts\">\nimport { MenuSeparator } from '@/Menu'\n\nconst props = defineProps<DropdownMenuSeparatorProps>()\nuseForwardExpose()\n</script>\n\n<template>\n  <MenuSeparator v-bind=\"props\">\n    <slot />\n  </MenuSeparator>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose, useId } from '@/shared'\n\nexport interface DropdownMenuTriggerProps extends PrimitiveProps {\n  /** When `true`, prevents the user from interacting with item */\n  disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted } from 'vue'\nimport { MenuAnchor } from '@/Menu'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { injectDropdownMenuRootContext } from './DropdownMenuRoot.vue'\n\nconst props = withDefaults(defineProps<DropdownMenuTriggerProps>(), {\n  as: 'button',\n})\n\nconst rootContext = injectDropdownMenuRootContext()\n\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nonMounted(() => {\n  rootContext.triggerElement = triggerElement\n})\n\nrootContext.triggerId ||= useId(undefined, 'reka-dropdown-menu-trigger')\n</script>\n\n<template>\n  <MenuAnchor as-child>\n    <Primitive\n      :id=\"rootContext.triggerId\"\n      :ref=\"forwardRef\"\n      :type=\"as === 'button' ? 'button' : undefined\"\n      :as-child=\"props.asChild\"\n      :as=\"as\"\n      aria-haspopup=\"menu\"\n      :aria-expanded=\"rootContext.open.value\"\n      :aria-controls=\"rootContext.open.value ? rootContext.contentId : undefined\"\n      :data-disabled=\"disabled ? '' : undefined\"\n      :disabled=\"disabled\"\n      :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n      @click=\"\n        async (event: MouseEvent) => {\n          // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n          // but not when the control key is pressed (avoiding MacOS right click)\n          if (!disabled && event.button === 0 && event.ctrlKey === false) {\n            rootContext?.onOpenToggle();\n            await nextTick()\n            // prevent trigger focusing when opening\n            // this allows the content to be given focus without competition\n            if (rootContext.open.value) event.preventDefault();\n          }\n        }\n      \"\n      @keydown.enter.space.arrow-down=\"\n        (event: KeyboardEvent) => {\n          if (disabled) return;\n          if (['Enter', ' '].includes(event.key)) rootContext.onOpenToggle();\n          if (event.key === 'ArrowDown') rootContext.onOpenChange(true);\n          // prevent keydown from scrolling window / first focused item to execute\n          // that keydown (inadvertently closing the menu)\n          if (['Enter', ' ', 'ArrowDown'].includes(event.key))\n            event.preventDefault();\n        }\n      \"\n    >\n      <slot />\n    </Primitive>\n  </MenuAnchor>\n</template>\n","<script lang=\"ts\">\nimport type { PrimitiveProps } from '@/Primitive'\nimport { useForwardExpose, useId } from '@/shared'\n\nexport interface DropdownMenuTriggerProps extends PrimitiveProps {\n  /** When `true`, prevents the user from interacting with item */\n  disabled?: boolean\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { nextTick, onMounted } from 'vue'\nimport { MenuAnchor } from '@/Menu'\nimport {\n  Primitive,\n} from '@/Primitive'\nimport { injectDropdownMenuRootContext } from './DropdownMenuRoot.vue'\n\nconst props = withDefaults(defineProps<DropdownMenuTriggerProps>(), {\n  as: 'button',\n})\n\nconst rootContext = injectDropdownMenuRootContext()\n\nconst { forwardRef, currentElement: triggerElement } = useForwardExpose()\n\nonMounted(() => {\n  rootContext.triggerElement = triggerElement\n})\n\nrootContext.triggerId ||= useId(undefined, 'reka-dropdown-menu-trigger')\n</script>\n\n<template>\n  <MenuAnchor as-child>\n    <Primitive\n      :id=\"rootContext.triggerId\"\n      :ref=\"forwardRef\"\n      :type=\"as === 'button' ? 'button' : undefined\"\n      :as-child=\"props.asChild\"\n      :as=\"as\"\n      aria-haspopup=\"menu\"\n      :aria-expanded=\"rootContext.open.value\"\n      :aria-controls=\"rootContext.open.value ? rootContext.contentId : undefined\"\n      :data-disabled=\"disabled ? '' : undefined\"\n      :disabled=\"disabled\"\n      :data-state=\"rootContext.open.value ? 'open' : 'closed'\"\n      @click=\"\n        async (event: MouseEvent) => {\n          // only call handler if it's the left button (mousedown gets triggered by all mouse buttons)\n          // but not when the control key is pressed (avoiding MacOS right click)\n          if (!disabled && event.button === 0 && event.ctrlKey === false) {\n            rootContext?.onOpenToggle();\n            await nextTick()\n            // prevent trigger focusing when opening\n            // this allows the content to be given focus without competition\n            if (rootContext.open.value) event.preventDefault();\n          }\n        }\n      \"\n      @keydown.enter.space.arrow-down=\"\n        (event: KeyboardEvent) => {\n          if (disabled) return;\n          if (['Enter', ' '].includes(event.key)) rootContext.onOpenToggle();\n          if (event.key === 'ArrowDown') rootContext.onOpenChange(true);\n          // prevent keydown from scrolling window / first focused item to execute\n          // that keydown (inadvertently closing the menu)\n          if (['Enter', ' ', 'ArrowDown'].includes(event.key))\n            event.preventDefault();\n        }\n      \"\n    >\n      <slot />\n    </Primitive>\n  </MenuAnchor>\n</template>\n","// Dutch formatting and board helpers for Deep Thought Mondays. Pure, so\n// tests/frontend-mondays.test.ts can assert exact strings.\n\nimport { fromIsoDate, isoWeekNumber } from \"@mod-tech42_tools/js/mondays/rules\";\n\nconst euro = new Intl.NumberFormat(\"nl-NL\", { style: \"currency\", currency: \"EUR\", maximumFractionDigits: 0 });\nconst euroCents = new Intl.NumberFormat(\"nl-NL\", { style: \"currency\", currency: \"EUR\" });\nconst decimal = new Intl.NumberFormat(\"nl-NL\", { maximumFractionDigits: 2 });\nconst oneDecimal = new Intl.NumberFormat(\"nl-NL\", { minimumFractionDigits: 1, maximumFractionDigits: 1 });\nconst kilo = new Intl.NumberFormat(\"nl-NL\", { maximumFractionDigits: 1 });\n\nconst shortDate = (date: Date, withYear = false) =>\n  date.toLocaleDateString(\"nl-NL\", { day: \"numeric\", month: \"short\", ...(withYear && { year: \"numeric\" }) }).replace(\".\", \"\");\n\n/** \"€4.800\": Intl puts a (non-breaking) space after the sign, the board does not. */\nexport function fmtEuro(amount: number, options?: { cents?: boolean }): string {\n  return (options?.cents ? euroCents : euro).format(amount).replace(/^€\\s/, \"€\");\n}\n\n/** \"€20k\", for a target. */\nexport function fmtEuroK(amount: number): string {\n  return `€${kilo.format(amount / 1000)}k`;\n}\n\nexport function fmtHours(hours: number): string {\n  return decimal.format(hours);\n}\n\n/** \"24%\", rounded, and 0% for a goal of nothing. */\nexport function percentOf(value: number, goal: number): string {\n  return `${goal > 0 ? Math.round(value / goal * 100) : 0}%`;\n}\n\n/** \"14 sep 2026\", as in \"Week van 14 sep 2026\". */\nexport function fmtWeekOf(iso: string): string {\n  return shortDate(fromIsoDate(iso), true);\n}\n\n/** \"Week 39\" */\nexport function fmtWeek(iso: string): string {\n  return `Week ${isoWeekNumber(iso)}`;\n}\n\n/** \"14 t/m 20 sep\" or, across a month, \"28 sep t/m 4 okt\". */\nexport function fmtRange(from: string, to: string): string {\n  const a = fromIsoDate(from);\n  const b = fromIsoDate(to);\n  return a.getMonth() === b.getMonth() ? `${a.getDate()} t/m ${shortDate(b)}` : `${shortDate(a)} t/m ${shortDate(b)}`;\n}\n\n/** \"sep\" for a YYYY-MM. */\nexport function fmtMonth(month: string): string {\n  return fromIsoDate(`${month}-01`).toLocaleDateString(\"nl-NL\", { month: \"short\" }).replace(\".\", \"\");\n}\n\nconst WEEKDAYS = [\"zo\", \"ma\", \"di\", \"wo\", \"do\", \"vr\", \"za\"];\n\n/** \"vr 18 sep\" for a deadline, \"\" for none. */\nexport function fmtDue(iso: string | null): string {\n  if (!iso) return \"\";\n  const date = fromIsoDate(iso);\n  return `${WEEKDAYS[date.getDay()]} ${shortDate(date)}`;\n}\n\n/** \"09:12\" for an ISO timestamp, in local time. */\nexport function fmtClock(iso: string): string {\n  return new Date(iso).toLocaleTimeString(\"nl-NL\", { hour: \"2-digit\", minute: \"2-digit\" });\n}\n\n/** Submission time in the team's timezone, independent of the reader's device timezone. */\nexport function fmtInputDate(iso: string): string {\n  const date = new Date(iso);\n  const day = date.toLocaleDateString(\"nl-NL\", { timeZone: \"Europe/Amsterdam\", day: \"numeric\", month: \"short\", year: \"numeric\" }).replace(\".\", \"\");\n  const time = date.toLocaleTimeString(\"nl-NL\", { timeZone: \"Europe/Amsterdam\", hour: \"2-digit\", minute: \"2-digit\" });\n  return `${day} om ${time}`;\n}\n\n/** \"3,3\", and a dash when nobody scored. */\nexport function fmtAverage(value: number | null): string {\n  return value === null ? \"–\" : oneDecimal.format(value);\n}\n\n/** \"WH\" for \"Wouter Hendriks\", \"TK\" for \"Tom de Koning\": first and last word. */\nexport function initials(name: string): string {\n  const words = name.trim().split(/\\s+/).filter(Boolean);\n  if (!words.length) return \"\";\n  return (words[0][0] + (words.length > 1 ? words.at(-1)![0] : \"\")).toUpperCase();\n}\n\nconst ROTATIONS = [\"-1.2deg\", \"0.8deg\", \"-0.5deg\", \"1.1deg\", \"-0.8deg\", \"0.5deg\", \"-1deg\"];\n\n/** The slight tilt of the `index`-th sticky on a board, from a fixed cycle. */\nexport function tilt(index: number): string {\n  return ROTATIONS[index % ROTATIONS.length];\n}\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { linkedText } from \"../lib/linked-text\";\n\nconst props = defineProps<{ text: string }>();\nconst parts = computed(() => linkedText(props.text));\n</script>\n\n<template>\n  <template v-for=\"(part, index) in parts\" :key=\"index\"><a v-if=\"part.href\" class=\"linked-text__link\" :href=\"part.href\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"Opent in een nieuw tabblad\">{{ part.text }}</a><template v-else>{{ part.text }}</template></template>\n</template>\n\n<style scoped>\n.linked-text__link { color: inherit; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n</style>\n","import decode from './lib/decode.mjs'\nimport encode from './lib/encode.mjs'\nimport format from './lib/format.mjs'\nimport parse from './lib/parse.mjs'\n\nexport {\n  decode,\n  encode,\n  format,\n  parse\n}\n","/* eslint-disable no-bitwise */\n\nconst decodeCache = {}\n\nfunction getDecodeCache (exclude) {\n  let cache = decodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = decodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i)\n    cache.push(ch)\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    const ch = exclude.charCodeAt(i)\n    cache[ch] = '%' + ('0' + ch.toString(16).toUpperCase()).slice(-2)\n  }\n\n  return cache\n}\n\n// Decode percent-encoded string.\n//\nfunction decode (string, exclude) {\n  if (typeof exclude !== 'string') {\n    exclude = decode.defaultChars\n  }\n\n  const cache = getDecodeCache(exclude)\n\n  return string.replace(/(%[a-f0-9]{2})+/gi, function (seq) {\n    let result = ''\n\n    for (let i = 0, l = seq.length; i < l; i += 3) {\n      const b1 = parseInt(seq.slice(i + 1, i + 3), 16)\n\n      if (b1 < 0x80) {\n        result += cache[b1]\n        continue\n      }\n\n      if ((b1 & 0xE0) === 0xC0 && (i + 3 < l)) {\n        // 110xxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n\n        if ((b2 & 0xC0) === 0x80) {\n          const chr = ((b1 << 6) & 0x7C0) | (b2 & 0x3F)\n\n          if (chr < 0x80) {\n            result += '\\ufffd\\ufffd'\n          } else {\n            result += String.fromCharCode(chr)\n          }\n\n          i += 3\n          continue\n        }\n      }\n\n      if ((b1 & 0xF0) === 0xE0 && (i + 6 < l)) {\n        // 1110xxxx 10xxxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n          const chr = ((b1 << 12) & 0xF000) | ((b2 << 6) & 0xFC0) | (b3 & 0x3F)\n\n          if (chr < 0x800 || (chr >= 0xD800 && chr <= 0xDFFF)) {\n            result += '\\ufffd\\ufffd\\ufffd'\n          } else {\n            result += String.fromCharCode(chr)\n          }\n\n          i += 6\n          continue\n        }\n      }\n\n      if ((b1 & 0xF8) === 0xF0 && (i + 9 < l)) {\n        // 111110xx 10xxxxxx 10xxxxxx 10xxxxxx\n        const b2 = parseInt(seq.slice(i + 4, i + 6), 16)\n        const b3 = parseInt(seq.slice(i + 7, i + 9), 16)\n        const b4 = parseInt(seq.slice(i + 10, i + 12), 16)\n\n        if ((b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80 && (b4 & 0xC0) === 0x80) {\n          let chr = ((b1 << 18) & 0x1C0000) | ((b2 << 12) & 0x3F000) | ((b3 << 6) & 0xFC0) | (b4 & 0x3F)\n\n          if (chr < 0x10000 || chr > 0x10FFFF) {\n            result += '\\ufffd\\ufffd\\ufffd\\ufffd'\n          } else {\n            chr -= 0x10000\n            result += String.fromCharCode(0xD800 + (chr >> 10), 0xDC00 + (chr & 0x3FF))\n          }\n\n          i += 9\n          continue\n        }\n      }\n\n      result += '\\ufffd'\n    }\n\n    return result\n  })\n}\n\ndecode.defaultChars = ';/?:@&=+$,#'\ndecode.componentChars = ''\n\nexport default decode\n","const encodeCache = {}\n\n// Create a lookup array where anything but characters in `chars` string\n// and alphanumeric chars is percent-encoded.\n//\nfunction getEncodeCache (exclude) {\n  let cache = encodeCache[exclude]\n  if (cache) { return cache }\n\n  cache = encodeCache[exclude] = []\n\n  for (let i = 0; i < 128; i++) {\n    const ch = String.fromCharCode(i)\n\n    if (/^[0-9a-z]$/i.test(ch)) {\n      // always allow unencoded alphanumeric characters\n      cache.push(ch)\n    } else {\n      cache.push('%' + ('0' + i.toString(16).toUpperCase()).slice(-2))\n    }\n  }\n\n  for (let i = 0; i < exclude.length; i++) {\n    cache[exclude.charCodeAt(i)] = exclude[i]\n  }\n\n  return cache\n}\n\n// Encode unsafe characters with percent-encoding, skipping already\n// encoded sequences.\n//\n//  - string       - string to encode\n//  - exclude      - list of characters to ignore (in addition to a-zA-Z0-9)\n//  - keepEscaped  - don't encode '%' in a correct escape sequence (default: true)\n//\nfunction encode (string, exclude, keepEscaped) {\n  if (typeof exclude !== 'string') {\n    // encode(string, keepEscaped)\n    keepEscaped = exclude\n    exclude = encode.defaultChars\n  }\n\n  if (typeof keepEscaped === 'undefined') {\n    keepEscaped = true\n  }\n\n  const cache = getEncodeCache(exclude)\n  let result = ''\n\n  for (let i = 0, l = string.length; i < l; i++) {\n    const code = string.charCodeAt(i)\n\n    if (keepEscaped && code === 0x25 /* % */ && i + 2 < l) {\n      if (/^[0-9a-f]{2}$/i.test(string.slice(i + 1, i + 3))) {\n        result += string.slice(i, i + 3)\n        i += 2\n        continue\n      }\n    }\n\n    if (code < 128) {\n      result += cache[code]\n      continue\n    }\n\n    if (code >= 0xD800 && code <= 0xDFFF) {\n      if (code >= 0xD800 && code <= 0xDBFF && i + 1 < l) {\n        const nextCode = string.charCodeAt(i + 1)\n        if (nextCode >= 0xDC00 && nextCode <= 0xDFFF) {\n          result += encodeURIComponent(string[i] + string[i + 1])\n          i++\n          continue\n        }\n      }\n      result += '%EF%BF%BD'\n      continue\n    }\n\n    result += encodeURIComponent(string[i])\n  }\n\n  return result\n}\n\nencode.defaultChars = \";/?:@&=+$,-_.!~*'()#\"\nencode.componentChars = \"-_.!~*'()\"\n\nexport default encode\n","export default function format (url) {\n  let result = ''\n\n  result += url.protocol || ''\n  result += url.slashes ? '//' : ''\n  result += url.auth ? url.auth + '@' : ''\n\n  if (url.hostname && url.hostname.indexOf(':') !== -1) {\n    // ipv6 address\n    result += '[' + url.hostname + ']'\n  } else {\n    result += url.hostname || ''\n  }\n\n  result += url.port ? ':' + url.port : ''\n  result += url.pathname || ''\n  result += url.search || ''\n  result += url.hash || ''\n\n  return result\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\n//\n// Changes from joyent/node:\n//\n// 1. No leading slash in paths,\n//    e.g. in `url.parse('http://foo?bar')` pathname is ``, not `/`\n//\n// 2. Backslashes are not replaced with slashes,\n//    so `http:\\\\example.org\\` is treated like a relative path\n//\n// 3. Trailing colon is treated like a part of the path,\n//    i.e. in `http://example.org:foo` pathname is `:foo`\n//\n// 4. Nothing is URL-encoded in the resulting object,\n//    (in joyent/node some chars in auth and paths are encoded)\n//\n// 5. `url.parse()` does not have `parseQueryString` argument\n//\n// 6. Removed extraneous result properties: `host`, `path`, `query`, etc.,\n//    which can be constructed using other parts of the url.\n//\n\nfunction Url () {\n  this.protocol = null\n  this.slashes = null\n  this.auth = null\n  this.port = null\n  this.hostname = null\n  this.hash = null\n  this.search = null\n  this.pathname = null\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nconst protocolPattern = /^([a-z0-9.+-]+:)/i\nconst portPattern = /:[0-9]*$/\n\n// Special case for a simple path URL\n/* eslint-disable-next-line no-useless-escape */\nconst simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/\n\n// RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\nconst delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t']\n\n// RFC 2396: characters not allowed for various reasons.\nconst unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims)\n\n// Allowed by RFCs, but cause of XSS attacks.  Always escape these.\nconst autoEscape = ['\\''].concat(unwise)\n// Characters that are never ever allowed in a hostname.\n// Note that any invalid chars are also handled, but these\n// are the ones that are *expected* to be seen, so we fast-path\n// them.\nconst nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape)\nconst hostEndingChars = ['/', '?', '#']\nconst hostnameMaxLen = 255\nconst hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/\nconst hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/\n// protocols that can allow \"unsafe\" and \"unwise\" chars.\n// protocols that never have a hostname.\nconst hostlessProtocol = {\n  javascript: true,\n  'javascript:': true\n}\n// protocols that always contain a // bit.\nconst slashedProtocol = {\n  http: true,\n  https: true,\n  ftp: true,\n  gopher: true,\n  file: true,\n  'http:': true,\n  'https:': true,\n  'ftp:': true,\n  'gopher:': true,\n  'file:': true\n}\n\nfunction urlParse (url, slashesDenoteHost) {\n  if (url && url instanceof Url) return url\n\n  const u = new Url()\n  u.parse(url, slashesDenoteHost)\n  return u\n}\n\nUrl.prototype.parse = function (url, slashesDenoteHost) {\n  let lowerProto, hec, slashes\n  let rest = url\n\n  // trim before proceeding.\n  // This is to support parse stuff like \"  http://foo.com  \\n\"\n  rest = rest.trim()\n\n  if (!slashesDenoteHost && url.split('#').length === 1) {\n    // Try fast path regexp\n    const simplePath = simplePathPattern.exec(rest)\n    if (simplePath) {\n      this.pathname = simplePath[1]\n      if (simplePath[2]) {\n        this.search = simplePath[2]\n      }\n      return this\n    }\n  }\n\n  let proto = protocolPattern.exec(rest)\n  if (proto) {\n    proto = proto[0]\n    lowerProto = proto.toLowerCase()\n    this.protocol = proto\n    rest = rest.substr(proto.length)\n  }\n\n  // figure out if it's got a host\n  // user@server is *always* interpreted as a hostname, and url\n  // resolution will treat //foo/bar as host=foo,path=bar because that's\n  // how the browser resolves relative URLs.\n  /* eslint-disable-next-line no-useless-escape */\n  if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n    slashes = rest.substr(0, 2) === '//'\n    if (slashes && !(proto && hostlessProtocol[proto])) {\n      rest = rest.substr(2)\n      this.slashes = true\n    }\n  }\n\n  if (!hostlessProtocol[proto] &&\n      (slashes || (proto && !slashedProtocol[proto]))) {\n    // there's a hostname.\n    // the first instance of /, ?, ;, or # ends the host.\n    //\n    // If there is an @ in the hostname, then non-host chars *are* allowed\n    // to the left of the last @ sign, unless some host-ending character\n    // comes *before* the @-sign.\n    // URLs are obnoxious.\n    //\n    // ex:\n    // http://a@b@c/ => user:a@b host:c\n    // http://a@b?@c => user:a host:c path:/?@c\n\n    // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n    // Review our test case against browsers more comprehensively.\n\n    // find the first instance of any hostEndingChars\n    let hostEnd = -1\n    for (let i = 0; i < hostEndingChars.length; i++) {\n      hec = rest.indexOf(hostEndingChars[i])\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec\n      }\n    }\n\n    // at this point, either we have an explicit point where the\n    // auth portion cannot go past, or the last @ char is the decider.\n    let auth, atSign\n    if (hostEnd === -1) {\n      // atSign can be anywhere.\n      atSign = rest.lastIndexOf('@')\n    } else {\n      // atSign must be in auth portion.\n      // http://a@b/c@d => host:b auth:a path:/c@d\n      atSign = rest.lastIndexOf('@', hostEnd)\n    }\n\n    // Now we have a portion which is definitely the auth.\n    // Pull that off.\n    if (atSign !== -1) {\n      auth = rest.slice(0, atSign)\n      rest = rest.slice(atSign + 1)\n      this.auth = auth\n    }\n\n    // the host is the remaining to the left of the first non-host char\n    hostEnd = -1\n    for (let i = 0; i < nonHostChars.length; i++) {\n      hec = rest.indexOf(nonHostChars[i])\n      if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) {\n        hostEnd = hec\n      }\n    }\n    // if we still have not hit it, then the entire thing is a host.\n    if (hostEnd === -1) {\n      hostEnd = rest.length\n    }\n\n    if (rest[hostEnd - 1] === ':') { hostEnd-- }\n    const host = rest.slice(0, hostEnd)\n    rest = rest.slice(hostEnd)\n\n    // pull out port.\n    this.parseHost(host)\n\n    // we've indicated that there is a hostname,\n    // so even if it's empty, it has to be present.\n    this.hostname = this.hostname || ''\n\n    // if hostname begins with [ and ends with ]\n    // assume that it's an IPv6 address.\n    const ipv6Hostname = this.hostname[0] === '[' &&\n        this.hostname[this.hostname.length - 1] === ']'\n\n    // validate a little.\n    if (!ipv6Hostname) {\n      const hostparts = this.hostname.split(/\\./)\n      for (let i = 0, l = hostparts.length; i < l; i++) {\n        const part = hostparts[i]\n        if (!part) { continue }\n        if (!part.match(hostnamePartPattern)) {\n          let newpart = ''\n          for (let j = 0, k = part.length; j < k; j++) {\n            if (part.charCodeAt(j) > 127) {\n              // we replace non-ASCII char with a temporary placeholder\n              // we need this to make sure size of hostname is not\n              // broken by replacing non-ASCII by nothing\n              newpart += 'x'\n            } else {\n              newpart += part[j]\n            }\n          }\n          // we test again with ASCII char only\n          if (!newpart.match(hostnamePartPattern)) {\n            const validParts = hostparts.slice(0, i)\n            const notHost = hostparts.slice(i + 1)\n            const bit = part.match(hostnamePartStart)\n            if (bit) {\n              validParts.push(bit[1])\n              notHost.unshift(bit[2])\n            }\n            if (notHost.length) {\n              rest = notHost.join('.') + rest\n            }\n            this.hostname = validParts.join('.')\n            break\n          }\n        }\n      }\n    }\n\n    if (this.hostname.length > hostnameMaxLen) {\n      this.hostname = ''\n    }\n\n    // strip [ and ] from the hostname\n    // the host field still retains them, though\n    if (ipv6Hostname) {\n      this.hostname = this.hostname.substr(1, this.hostname.length - 2)\n    }\n  }\n\n  // chop off from the tail first.\n  const hash = rest.indexOf('#')\n  if (hash !== -1) {\n    // got a fragment string.\n    this.hash = rest.substr(hash)\n    rest = rest.slice(0, hash)\n  }\n  const qm = rest.indexOf('?')\n  if (qm !== -1) {\n    this.search = rest.substr(qm)\n    rest = rest.slice(0, qm)\n  }\n  if (rest) { this.pathname = rest }\n  if (slashedProtocol[lowerProto] &&\n      this.hostname && !this.pathname) {\n    this.pathname = ''\n  }\n\n  return this\n}\n\nUrl.prototype.parseHost = function (host) {\n  let port = portPattern.exec(host)\n  if (port) {\n    port = port[0]\n    if (port !== ':') {\n      this.port = port.substr(1)\n    }\n    host = host.substr(0, host.length - port.length)\n  }\n  if (host) { this.hostname = host }\n}\n\nexport default urlParse\n","const Any = /[\\0-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nconst Cc = /[\\0-\\x1F\\x7F-\\x9F]/;\nconst Cf = /[\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB]|\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC3F]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]/;\nconst P = /[!-#%-\\*,-\\/:;\\?@\\[-\\]_\\{\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B4E\\u1B4F\\u1B5A-\\u1B60\\u1B7D-\\u1B7F\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDD6E\\uDEAD\\uDED0\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9\\uDFD4\\uDFD5\\uDFD7\\uDFD8]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2\\uDF00-\\uDF09\\uDFE1]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDF43-\\uDF4F\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDD6D-\\uDD6F\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD839\\uDDFF|\\uD83A[\\uDD5E\\uDD5F]/;\nconst S = /[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C1\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2429\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFF\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E5\\u31EF\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBD2\\uFD40-\\uFD4F\\uFD90\\uFD91\\uFDC8-\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD803[\\uDD8E\\uDD8F\\uDED1-\\uDED8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDC00-\\uDCEF\\uDCFA-\\uDCFC\\uDD00-\\uDEB3\\uDEBA-\\uDED0\\uDEE0-\\uDEF0\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED8\\uDEDC-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDFD9\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0-\\uDCBB\\uDCC0\\uDCC1\\uDCD0-\\uDCD8\\uDD00-\\uDE57\\uDE60-\\uDE6D\\uDE70-\\uDE7C\\uDE80-\\uDE8A\\uDE8E-\\uDEC6\\uDEC8\\uDECD-\\uDEDC\\uDEDF-\\uDEEA\\uDEEF-\\uDEF8\\uDF00-\\uDF92\\uDF94-\\uDFEF\\uDFFA]/;\nconst Z = /[ \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]/;\n\nexport { Any, Cc, Cf, P, S, Z };\n","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\n\nconst decodeMap = new Map([\n    [0, 65_533],\n    // C1 Unicode control character reference replacements\n    [128, 8364],\n    [130, 8218],\n    [131, 402],\n    [132, 8222],\n    [133, 8230],\n    [134, 8224],\n    [135, 8225],\n    [136, 710],\n    [137, 8240],\n    [138, 352],\n    [139, 8249],\n    [140, 338],\n    [142, 381],\n    [145, 8216],\n    [146, 8217],\n    [147, 8220],\n    [148, 8221],\n    [149, 8226],\n    [150, 8211],\n    [151, 8212],\n    [152, 732],\n    [153, 8482],\n    [154, 353],\n    [155, 8250],\n    [156, 339],\n    [158, 382],\n    [159, 376],\n]);\n\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n * @param codePoint Unicode code point to convert.\n */\nexport function replaceCodePoint(codePoint: number): number {\n    if (\n        (codePoint >= 0xd8_00 && codePoint <= 0xdf_ff) ||\n        codePoint > 0x10_ff_ff\n    ) {\n        return 0xff_fd;\n    }\n\n    return decodeMap.get(codePoint) ?? codePoint;\n}\n","/**\n * Shared base64 decode helper for generated decode data.\n * Assumes global atob is available.\n * @param input Input string to encode or decode.\n */\nexport function decodeBase64(input: string): Uint16Array {\n    const binary: string = atob(input);\n    const evenLength = binary.length & ~1; // Round down to even length\n    const out = new Uint16Array(evenLength / 2);\n\n    for (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n        const lo = binary.charCodeAt(index);\n        const hi = binary.charCodeAt(index + 1);\n        out[outIndex++] = lo | (hi << 8);\n    }\n\n    return out;\n}\n","// Generated using scripts/write-decode-map.ts\n\nimport { decodeBase64 } from \"../internal/decode-shared.js\";\n/** Packed HTML decode trie data. */\nexport const htmlDecodeTree: Uint16Array = /* #__PURE__ */ decodeBase64(\n    \"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\",\n);\n","/**\n * Bit flags & masks for the binary trie encoding used for entity decoding.\n *\n * Bit layout (16 bits total):\n * 15..14 VALUE_LENGTH   (+1 encoding; 0 => no value)\n * 13     FLAG13.        If valueLength>0: semicolon required flag (implicit ';').\n *                       If valueLength==0: compact run flag.\n * 12..7  BRANCH_LENGTH  Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n * 6..0   JUMP_TABLE     Jump offset (jump table) OR single-branch char code OR first run char\n */\nexport enum BinTrieFlags {\n    VALUE_LENGTH = 0b1100_0000_0000_0000,\n    FLAG13 = 0b0010_0000_0000_0000,\n    BRANCH_LENGTH = 0b0001_1111_1000_0000,\n    JUMP_TABLE = 0b0000_0000_0111_1111,\n}\n","import { replaceCodePoint } from \"./decode-codepoint.js\";\nimport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { BinTrieFlags } from \"./internal/bin-trie-flags.js\";\n\nconst enum CharCodes {\n    NUM = 35, // \"#\"\n    SEMI = 59, // \";\"\n    EQUALS = 61, // \"=\"\n    ZERO = 48, // \"0\"\n    NINE = 57, // \"9\"\n    LOWER_A = 97, // \"a\"\n    LOWER_F = 102, // \"f\"\n    LOWER_X = 120, // \"x\"\n    LOWER_Z = 122, // \"z\"\n    UPPER_A = 65, // \"A\"\n    UPPER_F = 70, // \"F\"\n    UPPER_Z = 90, // \"Z\"\n}\n\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 0b10_0000;\n\nfunction isNumber(code: number): boolean {\n    return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\n\nfunction isHexadecimalCharacter(code: number): boolean {\n    return (\n        (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)\n    );\n}\n\nfunction isAsciiAlphaNumeric(code: number): boolean {\n    return (\n        (code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n        (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n        isNumber(code)\n    );\n}\n\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n * @param code Code point to decode.\n */\nfunction isEntityInAttributeInvalidEnd(code: number): boolean {\n    return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\n\nconst enum EntityDecoderState {\n    EntityStart,\n    NumericStart,\n    NumericDecimal,\n    NumericHex,\n    NamedEntity,\n}\n\n/**\n * Decoding mode for named entities.\n */\nexport enum DecodingMode {\n    /** Entities in text nodes that can end with any character. */\n    Legacy = 0,\n    /** Only allow entities terminated with a semicolon. */\n    Strict = 1,\n    /** Entities in attributes have limitations on ending characters. */\n    Attribute = 2,\n}\n\n/**\n * Producers for character reference errors as defined in the HTML spec.\n */\nexport interface EntityErrorProducer {\n    missingSemicolonAfterCharacterReference(): void;\n    absenceOfDigitsInNumericCharacterReference(\n        consumedCharacters: number,\n    ): void;\n    validateNumericCharacterReference(code: number): void;\n}\n\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n    constructor(\n        /** The tree used to decode entities. */\n        // biome-ignore lint/correctness/noUnusedPrivateClassMembers: False positive\n        private readonly decodeTree: Uint16Array,\n        /**\n         * The function that is called when a codepoint is decoded.\n         *\n         * For multi-byte named entities, this will be called multiple times,\n         * with the second codepoint, and the same `consumed` value.\n         * @param codepoint The decoded codepoint.\n         * @param consumed The number of bytes consumed by the decoder.\n         */\n        private readonly emitCodePoint: (cp: number, consumed: number) => void,\n        /** An object that is used to produce errors. */\n        private readonly errors?: EntityErrorProducer | undefined,\n    ) {}\n\n    /** The current state of the decoder. */\n    private state = EntityDecoderState.EntityStart;\n    /** Characters that were consumed while parsing an entity. */\n    private consumed = 1;\n    /**\n     * The result of the entity.\n     *\n     * Either the result index of a numeric entity, or the codepoint of a\n     * numeric entity.\n     */\n    private result = 0;\n\n    /** The current index in the decode tree. */\n    private treeIndex = 0;\n    /** The number of characters that were consumed in excess. */\n    private excess = 1;\n    /** The mode in which the decoder is operating. */\n    private decodeMode = DecodingMode.Strict;\n    /** The number of characters that have been consumed in the current run. */\n    private runConsumed = 0;\n\n    /**\n     * Resets the instance to make it reusable.\n     * @param decodeMode Entity decoding mode to use.\n     */\n    startEntity(decodeMode: DecodingMode): void {\n        this.decodeMode = decodeMode;\n        this.state = EntityDecoderState.EntityStart;\n        this.result = 0;\n        this.treeIndex = 0;\n        this.excess = 1;\n        this.consumed = 1;\n        this.runConsumed = 0;\n    }\n\n    /**\n     * Write an entity to the decoder. This can be called multiple times with partial entities.\n     * If the entity is incomplete, the decoder will return -1.\n     *\n     * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n     * entity is incomplete, and resume when the next string is written.\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    write(input: string, offset: number): number {\n        switch (this.state) {\n            case EntityDecoderState.EntityStart: {\n                if (input.charCodeAt(offset) === CharCodes.NUM) {\n                    this.state = EntityDecoderState.NumericStart;\n                    this.consumed += 1;\n                    return this.stateNumericStart(input, offset + 1);\n                }\n                this.state = EntityDecoderState.NamedEntity;\n                return this.stateNamedEntity(input, offset);\n            }\n\n            case EntityDecoderState.NumericStart: {\n                return this.stateNumericStart(input, offset);\n            }\n\n            case EntityDecoderState.NumericDecimal: {\n                return this.stateNumericDecimal(input, offset);\n            }\n\n            case EntityDecoderState.NumericHex: {\n                return this.stateNumericHex(input, offset);\n            }\n\n            case EntityDecoderState.NamedEntity: {\n                return this.stateNamedEntity(input, offset);\n            }\n        }\n    }\n\n    /**\n     * Switches between the numeric decimal and hexadecimal states.\n     *\n     * Equivalent to the `Numeric character reference state` in the HTML spec.\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericStart(input: string, offset: number): number {\n        if (offset >= input.length) {\n            return -1;\n        }\n\n        if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n            this.state = EntityDecoderState.NumericHex;\n            this.consumed += 1;\n            return this.stateNumericHex(input, offset + 1);\n        }\n\n        this.state = EntityDecoderState.NumericDecimal;\n        return this.stateNumericDecimal(input, offset);\n    }\n\n    /**\n     * Parses a hexadecimal numeric entity.\n     *\n     * Equivalent to the `Hexademical character reference state` in the HTML spec.\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericHex(input: string, offset: number): number {\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char) || isHexadecimalCharacter(char)) {\n                // Convert hex digit to value (0-15); 'a'/'A' -> 10.\n                const digit =\n                    char <= CharCodes.NINE\n                        ? char - CharCodes.ZERO\n                        : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n                this.result = this.result * 16 + digit;\n                this.consumed++;\n                offset++;\n            } else {\n                return this.emitNumericEntity(char, 3);\n            }\n        }\n        return -1; // Incomplete entity\n    }\n\n    /**\n     * Parses a decimal numeric entity.\n     *\n     * Equivalent to the `Decimal character reference state` in the HTML spec.\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNumericDecimal(input: string, offset: number): number {\n        while (offset < input.length) {\n            const char = input.charCodeAt(offset);\n            if (isNumber(char)) {\n                this.result = this.result * 10 + (char - CharCodes.ZERO);\n                this.consumed++;\n                offset++;\n            } else {\n                return this.emitNumericEntity(char, 2);\n            }\n        }\n        return -1; // Incomplete entity\n    }\n\n    /**\n     * Validate and emit a numeric entity.\n     *\n     * Implements the logic from the `Hexademical character reference start\n     * state` and `Numeric character reference end state` in the HTML spec.\n     * @param lastCp The last code point of the entity. Used to see if the\n     *               entity was terminated with a semicolon.\n     * @param expectedLength The minimum number of characters that should be\n     *                       consumed. Used to validate that at least one digit\n     *                       was consumed.\n     * @returns The number of characters that were consumed.\n     */\n    private emitNumericEntity(lastCp: number, expectedLength: number): number {\n        // Ensure we consumed at least one digit.\n        if (this.consumed <= expectedLength) {\n            this.errors?.absenceOfDigitsInNumericCharacterReference(\n                this.consumed,\n            );\n            return 0;\n        }\n\n        // Figure out if this is a legit end of the entity\n        if (lastCp === CharCodes.SEMI) {\n            this.consumed += 1;\n        } else if (this.decodeMode === DecodingMode.Strict) {\n            return 0;\n        }\n\n        this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\n        if (this.errors) {\n            if (lastCp !== CharCodes.SEMI) {\n                this.errors.missingSemicolonAfterCharacterReference();\n            }\n\n            this.errors.validateNumericCharacterReference(this.result);\n        }\n\n        return this.consumed;\n    }\n\n    /**\n     * Parses a named entity.\n     *\n     * Equivalent to the `Named character reference state` in the HTML spec.\n     * @param input The string containing the entity (or a continuation of the entity).\n     * @param offset The current offset.\n     * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n     */\n    private stateNamedEntity(input: string, offset: number): number {\n        const { decodeTree } = this;\n        let current = decodeTree[this.treeIndex];\n        // The length is the number of bytes of the value, including the current byte.\n        let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n        while (offset < input.length) {\n            // Handle compact runs (possibly inline): valueLength == 0 and SEMI_REQUIRED bit set.\n            if (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n                const runLength =\n                    (current & BinTrieFlags.BRANCH_LENGTH) >> 7; /* 2..63 */\n\n                // If we are starting a run, check the first char.\n                if (this.runConsumed === 0) {\n                    const firstChar = current & BinTrieFlags.JUMP_TABLE;\n                    if (input.charCodeAt(offset) !== firstChar) {\n                        return this.result === 0\n                            ? 0\n                            : this.emitNotTerminatedNamedEntity();\n                    }\n                    offset++;\n                    this.excess++;\n                    this.runConsumed++;\n                }\n\n                // Check remaining characters in the run.\n                while (this.runConsumed < runLength) {\n                    if (offset >= input.length) {\n                        return -1;\n                    }\n\n                    const charIndexInPacked = this.runConsumed - 1;\n                    const packedWord =\n                        decodeTree[\n                            this.treeIndex + 1 + (charIndexInPacked >> 1)\n                        ];\n                    const expectedChar =\n                        charIndexInPacked % 2 === 0\n                            ? packedWord & 0xff\n                            : (packedWord >> 8) & 0xff;\n\n                    if (input.charCodeAt(offset) !== expectedChar) {\n                        this.runConsumed = 0;\n                        return this.result === 0\n                            ? 0\n                            : this.emitNotTerminatedNamedEntity();\n                    }\n                    offset++;\n                    this.excess++;\n                    this.runConsumed++;\n                }\n\n                this.runConsumed = 0;\n                this.treeIndex += 1 + (runLength >> 1);\n                current = decodeTree[this.treeIndex];\n                valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n            }\n\n            if (offset >= input.length) break;\n\n            const char = input.charCodeAt(offset);\n\n            /*\n             * Implicit semicolon handling for nodes that require a semicolon but\n             * don't have an explicit ';' branch stored in the trie. If we have\n             * a value on the current node, it requires a semicolon, and the\n             * current input character is a semicolon, emit the entity using the\n             * current node (without descending further).\n             */\n            if (\n                char === CharCodes.SEMI &&\n                valueLength !== 0 &&\n                (current & BinTrieFlags.FLAG13) !== 0\n            ) {\n                return this.emitNamedEntityData(\n                    this.treeIndex,\n                    valueLength,\n                    this.consumed + this.excess,\n                );\n            }\n\n            this.treeIndex = determineBranch(\n                decodeTree,\n                current,\n                this.treeIndex + Math.max(1, valueLength),\n                char,\n            );\n\n            if (this.treeIndex < 0) {\n                return this.result === 0 ||\n                    // If we are parsing an attribute\n                    (this.decodeMode === DecodingMode.Attribute &&\n                        // We shouldn't have consumed any characters after the entity,\n                        (valueLength === 0 ||\n                            // And there should be no invalid characters.\n                            isEntityInAttributeInvalidEnd(char)))\n                    ? 0\n                    : this.emitNotTerminatedNamedEntity();\n            }\n\n            current = decodeTree[this.treeIndex];\n            valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n            // If the branch is a value, store it and continue\n            if (valueLength !== 0) {\n                // If the entity is terminated by a semicolon, we are done.\n                if (char === CharCodes.SEMI) {\n                    return this.emitNamedEntityData(\n                        this.treeIndex,\n                        valueLength,\n                        this.consumed + this.excess,\n                    );\n                }\n\n                // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n                if (\n                    this.decodeMode !== DecodingMode.Strict &&\n                    (current & BinTrieFlags.FLAG13) === 0\n                ) {\n                    this.result = this.treeIndex;\n                    this.consumed += this.excess;\n                    this.excess = 0;\n                }\n            }\n            // Increment offset & excess for next iteration\n            offset++;\n            this.excess++;\n        }\n\n        return -1;\n    }\n\n    /**\n     * Emit a named entity that was not terminated with a semicolon.\n     * @returns The number of characters consumed.\n     */\n    private emitNotTerminatedNamedEntity(): number {\n        const { result, decodeTree } = this;\n\n        const valueLength =\n            (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\n        this.emitNamedEntityData(result, valueLength, this.consumed);\n        this.errors?.missingSemicolonAfterCharacterReference();\n\n        return this.consumed;\n    }\n\n    /**\n     * Emit a named entity.\n     * @param result The index of the entity in the decode tree.\n     * @param valueLength The number of bytes in the entity.\n     * @param consumed The number of characters consumed.\n     * @returns The number of characters consumed.\n     */\n    private emitNamedEntityData(\n        result: number,\n        valueLength: number,\n        consumed: number,\n    ): number {\n        const { decodeTree } = this;\n\n        this.emitCodePoint(\n            valueLength === 1\n                ? decodeTree[result] &\n                      ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13)\n                : decodeTree[result + 1],\n            consumed,\n        );\n        if (valueLength === 3) {\n            // For multi-byte values, we need to emit the second byte.\n            this.emitCodePoint(decodeTree[result + 2], consumed);\n        }\n\n        return consumed;\n    }\n\n    /**\n     * Signal to the parser that the end of the input was reached.\n     *\n     * Remaining data will be emitted and relevant errors will be produced.\n     * @returns The number of characters consumed.\n     */\n    end(): number {\n        switch (this.state) {\n            case EntityDecoderState.NamedEntity: {\n                // Emit a named entity if we have one.\n                return this.result !== 0 &&\n                    (this.decodeMode !== DecodingMode.Attribute ||\n                        this.result === this.treeIndex)\n                    ? this.emitNotTerminatedNamedEntity()\n                    : 0;\n            }\n            // Otherwise, emit a numeric entity if we have one.\n            case EntityDecoderState.NumericDecimal: {\n                return this.emitNumericEntity(0, 2);\n            }\n            case EntityDecoderState.NumericHex: {\n                return this.emitNumericEntity(0, 3);\n            }\n            case EntityDecoderState.NumericStart: {\n                this.errors?.absenceOfDigitsInNumericCharacterReference(\n                    this.consumed,\n                );\n                return 0;\n            }\n            case EntityDecoderState.EntityStart: {\n                // Return 0 if we have no entity.\n                return 0;\n            }\n        }\n    }\n}\n\n/**\n * Creates a function that decodes entities in a string.\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree: Uint16Array) {\n    let returnValue = \"\";\n    const decoder = new EntityDecoder(\n        decodeTree,\n        (data) => (returnValue += String.fromCodePoint(data)),\n    );\n\n    return function decodeWithTrie(\n        input: string,\n        decodeMode: DecodingMode,\n    ): string {\n        let lastIndex = 0;\n        let offset = 0;\n\n        while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n            returnValue += input.slice(lastIndex, offset);\n\n            decoder.startEntity(decodeMode);\n\n            const length = decoder.write(\n                input,\n                // Skip the \"&\"\n                offset + 1,\n            );\n\n            if (length < 0) {\n                lastIndex = offset + decoder.end();\n                break;\n            }\n\n            lastIndex = offset + length;\n            // If `length` is 0, skip the current `&` and continue.\n            offset = length === 0 ? lastIndex + 1 : lastIndex;\n        }\n\n        const result = returnValue + input.slice(lastIndex);\n\n        // Make sure we don't keep a reference to the final string.\n        returnValue = \"\";\n\n        return result;\n    };\n}\n\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIndex Index immediately after the current node header.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(\n    decodeTree: Uint16Array,\n    current: number,\n    nodeIndex: number,\n    char: number,\n): number {\n    const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n    const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\n    // Case 1: Single branch encoded in jump offset\n    if (branchCount === 0) {\n        return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n    }\n\n    // Case 2: Multiple branches encoded in jump table\n    if (jumpOffset) {\n        const value = char - jumpOffset;\n\n        return value < 0 || value >= branchCount\n            ? -1\n            : decodeTree[nodeIndex + value] - 1;\n    }\n\n    // Case 3: Multiple branches encoded in packed dictionary (two keys per uint16)\n    const packedKeySlots = (branchCount + 1) >> 1;\n\n    /*\n     * Treat packed keys as a virtual sorted array of length `branchCount`.\n     * Key(i) = low byte for even i, high byte for odd i in slot i>>1.\n     */\n    let lo = 0;\n    let hi = branchCount - 1;\n\n    while (lo <= hi) {\n        const mid = (lo + hi) >>> 1;\n        const slot = mid >> 1;\n        const packed = decodeTree[nodeIndex + slot];\n        const midKey = (packed >> ((mid & 1) * 8)) & 0xff;\n\n        if (midKey < char) {\n            lo = mid + 1;\n        } else if (midKey > char) {\n            hi = mid - 1;\n        } else {\n            return decodeTree[nodeIndex + packedKeySlots + mid];\n        }\n    }\n\n    return -1;\n}\n\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n\n/**\n * Decodes an HTML string.\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(\n    htmlString: string,\n    mode: DecodingMode = DecodingMode.Legacy,\n): string {\n    return htmlDecoder(htmlString, mode);\n}\n\n/**\n * Decodes an HTML string in an attribute.\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute: string): string {\n    return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString: string): string {\n    return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString: string): string {\n    return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n\nexport { replaceCodePoint } from \"./decode-codepoint.js\";\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\n","import { type DecodingMode, decodeHTML, decodeXML } from \"./decode.js\";\nimport { encodeHTML, encodeNonAsciiHTML } from \"./encode.js\";\nimport {\n    encodeXML,\n    escapeAttribute,\n    escapeText,\n    escapeUTF8,\n} from \"./escape.js\";\n\n/** The level of entities to support. */\nexport enum EntityLevel {\n    /** Support only XML entities. */\n    XML = 0,\n    /** Support HTML entities, which are a superset of XML entities. */\n    HTML = 1,\n}\n\n/**\n * Encoding strategy used by `encode`.\n */\nexport enum EncodingMode {\n    /**\n     * The output is UTF-8 encoded. Only characters that need escaping within\n     * XML will be escaped.\n     */\n    UTF8,\n    /**\n     * The output consists only of ASCII characters. Characters that need\n     * escaping within HTML, and characters that aren't ASCII characters will\n     * be escaped.\n     */\n    ASCII,\n    /**\n     * Encode all characters that have an equivalent entity, as well as all\n     * characters that are not ASCII characters.\n     */\n    Extensive,\n    /**\n     * Encode all characters that have to be escaped in HTML attributes,\n     * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n     */\n    Attribute,\n    /**\n     * Encode all characters that have to be escaped in HTML text,\n     * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n     */\n    Text,\n}\n\n/**\n * Options for `decode`.\n */\nexport interface DecodingOptions {\n    /**\n     * The level of entities to support.\n     * @default {@link EntityLevel.XML}\n     */\n    level?: EntityLevel;\n    /**\n     * Decoding mode. If `Legacy`, will support legacy entities not terminated\n     * with a semicolon (`;`).\n     *\n     * Always `Strict` for XML. For HTML, set this to `true` if you are parsing\n     * an attribute value.\n     * @default {@link DecodingMode.Legacy}\n     */\n    mode?: DecodingMode | undefined;\n}\n\n/**\n * Decodes a string with entities.\n * @param input String to decode.\n * @param options Decoding options.\n */\nexport function decode(\n    input: string,\n    options: DecodingOptions | EntityLevel = EntityLevel.XML,\n): string {\n    const level = typeof options === \"number\" ? options : options.level;\n\n    if (level === EntityLevel.HTML) {\n        const mode = typeof options === \"object\" ? options.mode : undefined;\n        return decodeHTML(input, mode);\n    }\n\n    return decodeXML(input);\n}\n\n/**\n * Options for `encode`.\n */\nexport interface EncodingOptions {\n    /**\n     * The level of entities to support.\n     * @default {@link EntityLevel.XML}\n     */\n    level?: EntityLevel;\n    /**\n     * Output format.\n     * @default {@link EncodingMode.Extensive}\n     */\n    mode?: EncodingMode;\n}\n\n/**\n * Encodes a string with entities.\n * @param input String to encode.\n * @param options Encoding options.\n */\nexport function encode(\n    input: string,\n    options: EncodingOptions | EntityLevel = EntityLevel.XML,\n): string {\n    const { mode = EncodingMode.Extensive, level = EntityLevel.XML } =\n        typeof options === \"number\" ? { level: options } : options;\n\n    switch (mode) {\n        case EncodingMode.UTF8: {\n            return escapeUTF8(input);\n        }\n        case EncodingMode.Attribute: {\n            return escapeAttribute(input);\n        }\n        case EncodingMode.Text: {\n            return escapeText(input);\n        }\n        case EncodingMode.ASCII: {\n            return level === EntityLevel.HTML\n                ? encodeNonAsciiHTML(input)\n                : encodeXML(input);\n        }\n        // biome-ignore lint/complexity/noUselessSwitchCase: we get an error for the switch not being exhaustive\n        case EncodingMode.Extensive:\n        default: {\n            return level === EntityLevel.HTML\n                ? encodeHTML(input)\n                : encodeXML(input);\n        }\n    }\n}\n\nexport {\n    DecodingMode,\n    decodeHTML,\n    decodeHTMLAttribute,\n    decodeHTMLStrict,\n    decodeXML,\n    decodeXML as decodeXMLStrict,\n    EntityDecoder,\n} from \"./decode.js\";\n\nexport {\n    encodeHTML,\n    encodeNonAsciiHTML,\n} from \"./encode.js\";\nexport {\n    encodeXML,\n    escape,\n    escapeAttribute,\n    escapeText,\n    escapeUTF8,\n} from \"./escape.js\";\n","/* eslint-disable no-return-assign, prefer-regex-literals */\n\nimport { Any, Cc, Z, P } from 'uc.micro'\n\n/**\n * @category types\n */\nexport interface REBuilderOptions {\n  '---'?: boolean\n  fuzzyIP?: boolean\n  schema_names?: string[]\n  tlds?: string[]\n  urlAuth?: boolean\n  maxLength?: number\n}\n\nexport class REBuilder {\n  src_Any = Any.source\n  src_Cc = Cc.source\n  src_Z = Z.source\n  src_P = P.source\n  // \\p{\\Z\\P\\Cc\\CF} (white spaces + control + format + punctuation)\n  src_ZPCc = [this.src_Z, this.src_P, this.src_Cc].join('|')\n  // \\p{\\Z\\Cc} (white spaces + control)\n  src_ZCc = [this.src_Z, this.src_Cc].join('|')\n  cache: Record<string, RegExp | undefined> = {}\n  opts: REBuilderOptions = { maxLength: 10000, urlAuth: false, schema_names: [] }\n\n  constructor (opts: REBuilderOptions = {}) {\n    this.opts = { ...this.opts, ...opts }\n  }\n\n  set (opts: REBuilderOptions = {}) {\n    this.opts = { ...this.opts, ...opts }\n\n    this.cache = {}\n    return this\n  }\n\n  escapeRE (str: string) { return str.replace(/[.?*+^$[\\]\\\\(){}|-]/g, '\\\\$&') }\n\n  nestedPairRE (open: string, close: string, depth = 4) {\n    const openRE = this.escapeRE(open)\n    const closeRE = this.escapeRE(close)\n    const atom = `(?:(?!${this.src_ZCc}|${openRE}|${closeRE}).)`\n\n    let pair = `${openRE}${atom}{0,1000}${closeRE}`\n\n    for (let level = 2; level <= depth; level++) {\n      pair = `${openRE}(?:${atom}|${pair}){0,1000}${closeRE}`\n    }\n\n    return pair\n  }\n\n  // Partials\n\n  get_text_separators () {\n    // Experimental. List of chars, completely prohibited in links\n    // because can separate it from other part of text\n    return this.cache.text_separators ??= /[><\\uff5c]/\n  }\n\n  get_pseudo_letter () {\n    return this.cache.src_pseudo_letter ??= new RegExp(\n      // All possible word characters (everything without punctuation, spaces & controls)\n      // Defined via punctuation & spaces to save space\n      // Should be something like \\p{\\L\\N\\S\\M} (\\w but without `_`)\n      `(?:(?!${this.get_text_separators().source}|${this.src_ZPCc})${this.src_Any})`\n    )\n  }\n\n  get_ipv4_addr () {\n    return this.cache.src_ip4 ??= new RegExp(\n      '(?:' +\n        '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])[.]' +\n      '){3}' +\n      '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])'\n    )\n  }\n\n  get_ipv6_addr () {\n    const h16 = '[0-9A-Fa-f]{1,4}'\n    const ls32 = `(?:(?:${h16}:${h16})|${this.get_ipv4_addr().source})`\n\n    return this.cache.src_ip6_addr ??= new RegExp(\n      '(?:' +\n        `(?:${h16}:){6}${ls32}|` +\n        `::(?:${h16}:){5}${ls32}|` +\n        `(?:${h16})?::(?:${h16}:){4}${ls32}|` +\n        `(?:(?:${h16}:){0,1}${h16})?::(?:${h16}:){3}${ls32}|` +\n        `(?:(?:${h16}:){0,2}${h16})?::(?:${h16}:){2}${ls32}|` +\n        `(?:(?:${h16}:){0,3}${h16})?::${h16}:${ls32}|` +\n        `(?:(?:${h16}:){0,4}${h16})?::${ls32}|` +\n        `(?:(?:${h16}:){0,5}${h16})?::${h16}|` +\n        `(?:(?:${h16}:){0,6}${h16})?::` +\n      ')'\n    )\n  }\n\n  get_ipv6_url_host () {\n    return this.cache.src_ip6_host ??= new RegExp(\n      `\\\\[${this.get_ipv6_addr().source}\\\\]`\n    )\n  }\n\n  get_ipv6_mail_host () {\n    return this.cache.src_ipv6_mail_host ??= new RegExp(\n      `\\\\[IPv6:${this.get_ipv6_addr().source}\\\\]`\n    )\n  }\n\n  get_auth () {\n    return this.cache.src_auth ??= new RegExp(\n      // Prohibit any of \"@/[]()\" in user/pass to avoid wrong domain fetch.\n      // Length is capped to exclude possible rescans till the end and avoid O(n^2)\n      // DoS. No standard limit, just take something reasonable.\n      `(?:(?:(?!${this.src_ZCc}|[@/\\\\[\\\\]()]).){1,50}@)?`\n    )\n  }\n\n  get_port () {\n    return this.cache.src_port ??= new RegExp(\n      '(?::(?:6(?:[0-4]\\\\d{3}|5(?:[0-4]\\\\d{2}|5(?:[0-2]\\\\d|3[0-5])))|[1-5]?\\\\d{1,4}))?'\n    )\n  }\n\n  get_host_terminator () {\n    // Force greedy fetch, we should not stop earlier than host part is fully fetched.\n    return this.cache.src_host_terminator ??= new RegExp(\n      `(?=$|${this.get_text_separators().source}|${this.src_ZPCc})` +\n      `(?!${this.opts['---'] ? '-(?!--)|' : '-|'}_|:\\\\d|\\\\.-|\\\\.(?!$|${this.src_ZPCc}))`\n    )\n  }\n\n  get_path_terminator () {\n    return this.cache.src_path_terminator ??= new RegExp(\n      `${this.src_ZPCc}|${this.get_text_separators().source}`\n      // `${this.src_ZCc}|${this.get_text_separators().source}|[()[\\\\]{}.,\"'?!\\\\-;]`\n    )\n  }\n\n  get_path () {\n    return this.cache.src_path ??= new RegExp(\n      '(?:' +\n        '[/?#]' +\n          '(?:' +\n            `${this.nestedPairRE('[', ']')}|` +\n            `${this.nestedPairRE('(', ')')}|` +\n            `${this.nestedPairRE('{', '}')}|` +\n            `\\\\\"(?:(?!${this.src_ZCc}|[\"]).){1,100}\\\\\"|` +\n            `\\\\'(?:(?!${this.src_ZCc}|[']).){1,100}\\\\'|` +\n\n            // allow `I'm_king` if no pair found\n            `\\\\'(?=${this.get_pseudo_letter().source}|[-])|` +\n\n            // 1. google has many dots in \"google search\" links (#66, #81).\n            // github has ... in commit range links,\n            // Restrict to\n            // - english\n            // - percent-encoded\n            // - parts of file path\n            // - params separator\n            // until more examples found.\n            //\n            // 2. Allow `..:XX` for Odysee links (optional `:`), #100\n            // This may be narrowed down later via separate rule.\n            '\\\\.{2,20}[:]?[a-zA-Z0-9%/&]|' +\n\n            `\\\\.(?!${this.src_ZCc}|[.]|$)|` +\n            (this.opts['---']\n              ? '\\\\-(?!--(?:[^-]|$))(?:-{0,19})|' // `---` => long dash, terminate\n              : '\\\\-{1,20}|'\n            ) +\n            // allow `,,,` in paths\n            `,(?!${this.src_ZCc}|$)|` +\n\n            // allow `;` if not followed by space-like char\n            `;(?!${this.src_ZCc}|$)|` +\n\n            // allow `!!!` in paths, but not at the end\n            `\\\\!{1,20}(?!${this.src_ZCc}|[!]|$)|` +\n\n            `\\\\?(?!${this.src_ZCc}|[?]|$)|` +\n\n            this.get_path_extra().source +\n\n            // allowed punctuation chars in path.\n            '[\\\\\\\\/:%@#&=_~*]|' +\n\n            // if no special rules matched, consume all chars except terminators.\n            `(?!${this.get_path_terminator().source}).` +\n          `){1,${this.opts.maxLength}}` +\n        '|\\\\/' +\n      ')?'\n    )\n  }\n\n  get_mail_name () {\n    return this.cache.src_mail_name ??= new RegExp(\n      // RFC 5321 dot-string only (no quoted-string), max 64 ASCII characters.\n      \"[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9](?:[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9]|[.](?=[-!#$%&'*+/=?^_`{|}~a-zA-Z0-9])){0,63}\"\n    )\n  }\n\n  get_xn () {\n    return this.cache.src_xn ??= new RegExp(\n      'xn--[a-z0-9\\\\-]{1,59}'\n    )\n  }\n\n  get_tld () {\n    if (this.cache.tld) return this.cache.tld\n\n    const tlds_src = [...new Set(this.opts.tlds || [])].sort().reverse()\n      .join('|')\n\n    this.cache.tld = new RegExp(\n      `${tlds_src || '$#none#$'}|${this.get_xn().source}`\n    )\n    return this.cache.tld\n  }\n\n  get_domain_root () {\n    return this.cache.src_domain_root ??= new RegExp(\n      // More to read about domain names\n      // http://serverfault.com/questions/638260/\n\n      // Allow letters & digits (http://test1)\n      '(?:' +\n        this.get_xn().source +\n        '|' +\n        `${this.get_pseudo_letter().source}{1,63}` +\n      ')'\n    )\n  }\n\n  get_domain () {\n    return this.cache.src_domain ??= new RegExp(\n      '(?:' +\n        this.get_xn().source +\n        '|' +\n        `(?:${this.get_pseudo_letter().source})` +\n        '|' +\n        `(?:${this.get_pseudo_letter().source}(?:-|${this.get_pseudo_letter().source}){0,61}${this.get_pseudo_letter().source})` +\n      ')'\n    )\n  }\n\n  // Host rules, depending on the type\n\n  get_url_host_port () {\n    return this.cache.url_host_port ??= new RegExp(\n      '(?:' +\n        // Don't need IP v4 check, because digits are already allowed\n        // in normal domain names\n        this.get_ipv6_url_host().source +\n        '|' +\n        `(?:(?:(?:${this.get_domain().source})\\\\.){0,10}${this.get_domain().source})`/* _root */ +\n      ')' +\n      this.get_port().source +\n      this.get_host_terminator().source\n    )\n  }\n\n  get_fuzzy_url_host_port () {\n    // - TLD as anchor\n    // - No local domains\n    return this.cache.fuzzy_url_host_port ??= new RegExp(\n      '(?:' +\n        (this.opts.fuzzyIP ? this.get_ipv4_addr().source + '|' : '') +\n        `(?:(?:(?:${this.get_domain().source})\\\\.){1,10}(?:${this.get_tld().source}))` +\n      ')' +\n      // No port in fuzzy links to reduce search\n      this.get_host_terminator().source\n    )\n  }\n\n  get_mail_host () {\n    // Similar to normal url host, but\n    // - with different ipv6 format (and without port).\n    // - with reduced max subdomains\n    return this.cache.src_mail_host ??= new RegExp(\n      '(?:' +\n        this.get_ipv6_mail_host().source +\n        '|' +\n        `(?:(?:(?:${this.get_domain().source})\\\\.){0,4}${this.get_domain().source})` +\n      ')' +\n      this.get_host_terminator().source\n    )\n  }\n\n  get_fuzzy_mail_host () {\n    // Similar to normal mail host, but without local domains.\n    return this.cache.src_fuzzy_mail_host ??= new RegExp(\n      '(?:' +\n        this.get_ipv6_mail_host().source +\n        '|' +\n        `(?:(?:(?:${this.get_domain().source})[.]){1,4}${this.get_domain_root().source})` +\n      ')' +\n      this.get_host_terminator().source\n    )\n  }\n\n  // Hooks\n\n  get_path_extra () {\n    return this.cache.src_path_extra ??= new RegExp('')\n  }\n\n  // \"Public\" rules\n\n  get_fuzzy_mail_host_search () {\n    return this.cache.mail_fuzzy_host_search ??= new RegExp(\n      `@${this.get_fuzzy_mail_host().source}`,\n      'ig'\n    )\n  }\n\n  get_fuzzy_link_search () {\n    return this.cache.link_fuzzy_search ??= new RegExp(\n        // Fuzzy link can't be prepended with .:/\\- and non punctuation.\n        // but can start with > (markdown blockquote)\n        `(^|(?![.:/\\\\-_@])(?:[$+<=>^\\`|\\uff5c]|${this.src_ZPCc}))` +\n        `(?:(?![$+<=>^\\`|\\uff5c])${this.get_fuzzy_url_host_port().source}${this.get_path().source})`,\n      'ig'\n    )\n  }\n\n  get_http_validator () {\n    return this.cache.http_validator ??= new RegExp(\n      '\\\\/\\\\/' +\n      (this.opts.urlAuth ? this.get_auth().source : '') +\n      this.get_url_host_port().source +\n      this.get_path().source,\n      'iy'\n    )\n  }\n\n  get_relative_proto_validator () {\n    return this.cache.relative_proto_validator ??= new RegExp(\n      (this.opts.urlAuth ? this.get_auth().source : '') +\n      // Don't allow single-level domains, because of false positives like '//test'\n      // with code comments.\n      `(?:localhost|${this.get_ipv6_url_host().source}|(?:(?:${this.get_domain().source})[.]){1,10}${this.get_domain_root().source})` +\n      this.get_port().source +\n      this.get_host_terminator().source +\n      this.get_path().source,\n\n      'iy'\n    )\n  }\n\n  get_mail_name_validator () {\n    return this.cache.mail_name_validator ??= new RegExp(\n      `(?:^|${this.get_text_separators().source}|\"|\\\\(|${this.src_ZCc})` +\n      `(${this.get_mail_name().source})$`\n    )\n  }\n\n  get_mailto_validator () {\n    return this.cache.mailto_validator ??= new RegExp(\n      `${this.get_mail_name().source}@${this.get_mail_host().source}`,\n      'iy'\n    )\n  }\n\n  get_schema_names () {\n    return this.cache.schema_names ??= new RegExp((this.opts.schema_names || []).map(name => this.escapeRE(name)).join('|'))\n  }\n\n  get_schema_search () {\n    return this.cache.schema_search ??= new RegExp(\n      `(^|(?!_)(?:[><\\uff5c]|${this.src_ZPCc}))(${this.get_schema_names().source})`,\n      'ig'\n    )\n  }\n\n  get_schema_at_start () {\n    return this.cache.schema_at_start ??= new RegExp(\n      `^${this.get_schema_search().source}`,\n      'i'\n    )\n  }\n}\n","import { REBuilder } from './rebuilder.ts'\n\n//\n\n/**\n * Recognition options for schemaless links.\n *\n * @category types\n */\nexport interface LinkifyOptions {\n  /** Recognize URLs without `http(s)://` prefix. Default `false`. */\n  fuzzyLink?: boolean\n  /** Recognize emails without `mailto:` prefix. Default `true`. */\n  fuzzyEmail?: boolean\n  /**\n   * Allow IPs in fuzzy links. Can conflict with some texts, like version\n   * numbers. Default `false`.\n   */\n  fuzzyIP?: boolean\n  /**\n   * Terminate link with `---` if it is considered a long dash. Default `false`.\n   */\n  '---'?: boolean\n  /** Allowed TLDs list for fuzzy links. Replaces the default list when set. */\n  tlds?: string[]\n  /** Recognize authentication data in URLs. Default `false`. */\n  urlAuth?: boolean\n  /** Maximum link length. Default `10000`. */\n  maxLength?: number\n}\n\nexport interface LinkifyConstructorOptions extends LinkifyOptions {\n  /** Custom regular expression builder. */\n  rebuilder?: REBuilder\n}\n\n/**\n * Custom schema definition.\n *\n * @category types\n */\nexport interface SchemaOpts {\n  /**\n   * Checks text after the schema prefix. Should return matched tail length on\n   * success, or `0` on fail.\n   */\n  validate: (text: string, pos: number, self: LinkifyIt) => number\n  /**\n   * Optional function to normalize `text` and `url` of matched result, for\n   * example for `@twitter` mentions.\n   */\n  normalize?: (match: Match, self: LinkifyIt) => void\n}\n\ntype Schema = Required<SchemaOpts>\n\ninterface MatchCandidate {\n  schema: string\n  index: number\n  lastIndex: number\n}\n\nconst web_schema: Schema = {\n  validate: (text: string, pos: number, self: LinkifyIt) => {\n    const re = self.re.get_http_validator()\n    re.lastIndex = pos\n\n    const m = re.exec(text)\n    return m ? m[0].length : 0\n  },\n  normalize: (match: Match, self: LinkifyIt) => self.normalize(match)\n}\n\nconst defaultSchemas: Record<string, Schema> = {\n  'http:': web_schema,\n  'https:': web_schema,\n  'ftp:': web_schema,\n  '//': {\n    validate: function (text: string, pos: number, self: LinkifyIt) {\n      const re = self.re.get_relative_proto_validator()\n      re.lastIndex = pos\n\n      const m = re.exec(text)\n      if (m) {\n        // should not be `://` & `///`, that protects from errors in protocol name\n        if (pos >= 3 && text[pos - 3] === ':') { return 0 }\n        if (pos >= 3 && text[pos - 3] === '/') { return 0 }\n        return m[0].length\n      }\n      return 0\n    },\n    normalize: (match: Match, self: LinkifyIt) => self.normalize(match)\n  },\n  'mailto:': {\n    validate: function (text: string, pos: number, self: LinkifyIt) {\n      const re = self.re.get_mailto_validator()\n      re.lastIndex = pos\n\n      const m = re.exec(text)\n      return m ? m[0].length : 0\n    },\n    normalize: (match: Match, self: LinkifyIt) => self.normalize(match)\n  }\n}\n\n// List of 2-character tlds (autogenerated by ./support/tlds_2char_gen.js)\nconst tlds_2ch = 'a:cdefgilmnoqrstuwxz|b:abdefghijmnorstvwyz|c:acdfghiklmnoruvwxyz|d:ejkmoz|e:cegrstu|f:ijkmor|g:abdefghilmnpqrstuwy|h:kmnrtu|i:delmnoqrst|j:emop|k:eghimnprwyz|l:abcikrstuvy|m:acdeghklmnopqrstuvwxyz|n:acefgilopruz|o:m|p:aefghklmnrstwy|q:a|r:eosuw|s:abcdeghijklmnortuvxyz|t:cdfghjklmnortvwz|u:agksyz|v:aceginu|w:fs|y:et|z:amw'\n\n// DON'T try to make PRs with changes. Extend TLDs with LinkifyIt.tlds() instead\nconst tlds_default = 'biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф'\n\nfunction unpackTlds (): string[] {\n  const result = tlds_default.split('|')\n\n  tlds_2ch.split('|').forEach((item) => {\n    const sep = item.indexOf(':')\n\n    const prefix = item.slice(0, sep)\n\n    for (const suffix of item.slice(sep + 1)) {\n      result.push(prefix + suffix)\n    }\n  })\n\n  return result\n}\n\nconst defaultOptions: Required<LinkifyOptions> = {\n  fuzzyLink: false,\n  fuzzyEmail: true,\n  fuzzyIP: false,\n  '---': false,\n  tlds: unpackTlds(),\n  urlAuth: false,\n  maxLength: 10000\n}\n\n/**\n * Match result returned by {@link LinkifyIt.match} and\n * {@link LinkifyIt.matchAtStart}.\n *\n * @category types\n */\nexport class Match {\n  /** Prefix (protocol) for matched string. Empty for fuzzy links. */\n  schema: string\n  /** First position of matched string. */\n  index: number\n  /** Next position after matched string. */\n  lastIndex: number\n  /** Matched string. */\n  raw: string\n  /** Normalized text of matched string. */\n  text: string\n  /** Normalized URL of matched string. */\n  url: string\n\n  constructor (text: string, schema: string, index: number, lastIndex: number) {\n    const raw = text.slice(index, lastIndex)\n\n    this.schema = schema.toLowerCase()\n    this.index = index\n    this.lastIndex = lastIndex\n    this.raw = raw\n    this.text = raw\n    this.url = raw\n  }\n}\n\n/** Linkifier instance. */\nexport class LinkifyIt {\n  __opts__: Required<LinkifyOptions>\n  private __schemas__: Record<string, Schema>\n  re: REBuilder\n\n  /**\n   * Creates new linkifier instance.\n   *\n   * By default understands:\n   *\n   * - `http(s)://...` , `ftp://...`, `mailto:...` & `//...` links\n   * - \"fuzzy\" emails (foo@bar.com).\n   *\n   * See {@link LinkifyConstructorOptions} for available options.\n   *\n   * @param options Recognition options.\n   *\n   * @example\n   * ```javascript\n   * import { LinkifyIt } from 'linkify-it'\n   *\n   * const linkify = new LinkifyIt({ fuzzyLink: true })\n   *\n   * linkify\n   *   .tlds(require('tlds'))       // Reload with full TLD list\n   *   .tlds('onion', true)         // Add unofficial `.onion` domain\n   *   .add('ftp:', null)           // Disable `ftp:` protocol\n   *   .set({ fuzzyIP: true })      // Enable IPs in fuzzy links\n   *\n   * console.log(linkify.test('Site github.com!')) // true\n   * console.log(linkify.match('Site github.com!'))\n   * ```\n   */\n  constructor (options: LinkifyConstructorOptions = {}) {\n    const { rebuilder, ...linkifyOptions } = options\n\n    this.__opts__ = { ...defaultOptions, ...linkifyOptions }\n\n    this.__schemas__ = { ...defaultSchemas }\n\n    this.re = rebuilder || new REBuilder()\n    this.re.set({\n      ...this.__opts__,\n      schema_names: Object.keys(this.__schemas__)\n    })\n  }\n\n  /**\n   * Add new rule definition.\n   *\n   * `schema` is a link prefix (usually, protocol name with `:` at the end,\n   * `skype:` for example). `linkify-it` makes sure that prefix is not\n   * preceded with alphanumeric char and symbols. Only whitespaces and\n   * punctuation allowed.\n   *\n   * `definition` is a rule to check tail after link prefix. To disable an\n   * existing rule, pass `null`.\n   *\n   * @param schema Rule name (fixed pattern prefix).\n   * @param definition Schema definition, or `null` to disable the rule.\n   *\n   * See [twitter mentions example](https://github.com/markdown-it/linkify-it/blob/master/examples/twitter.mjs).\n   */\n  add (schema: string, definition: SchemaOpts | null = null): this {\n    if (!definition) {\n      delete this.__schemas__[schema]\n    } else {\n      const def = {\n        normalize: (match: Match, self: LinkifyIt) => self.normalize(match),\n        ...definition\n      }\n      this.__schemas__[schema] = def\n    }\n\n    this.re.set({\n      ...this.__opts__,\n      schema_names: Object.keys(this.__schemas__)\n    })\n    return this\n  }\n\n  /**\n   * Set recognition options for links without schema.\n   *\n   * @param options Recognition options.\n   */\n  set (options: LinkifyOptions = {}): this {\n    this.__opts__ = { ...this.__opts__, ...options }\n    this.re.set({\n      ...this.__opts__,\n      schema_names: Object.keys(this.__schemas__)\n    })\n    return this\n  }\n\n  /**\n   * Searches linkifiable pattern and returns `true` on success or `false` on fail.\n   *\n   * @param text Text to scan.\n   */\n  test (text: string): boolean {\n    if (!text.length) { return false }\n\n    let m, re\n\n    // try to scan for link with schema - that's the most simple rule\n    re = this.re.get_schema_search()\n    re.lastIndex = 0\n    while ((m = re.exec(text)) !== null) {\n      if (this.testSchemaAt(text, m[2], re.lastIndex)) { return true }\n    }\n\n    if (this.__opts__.fuzzyLink && this.__schemas__['http:']) {\n      // guess schemaless links\n      re = this.re.get_fuzzy_link_search()\n      re.lastIndex = 0\n      if (re.exec(text) !== null) { return true }\n    }\n\n    if (this.__opts__.fuzzyEmail && this.__schemas__['mailto:']) {\n      // guess schemaless emails\n      if (text.indexOf('@') >= 0) {\n        // We can't skip this check, because this cases are possible:\n        // 192.168.1.1@gmail.com, my.in@example.com\n        const mailHostRe = this.re.get_fuzzy_mail_host_search()\n        const mailNameRe = this.re.get_mail_name_validator()\n        mailHostRe.lastIndex = 0\n\n        while ((m = mailHostRe.exec(text)) !== null) {\n          const name = text.slice(Math.max(0, m.index - 65), m.index)\n          if (mailNameRe.test(name)) { return true }\n        }\n      }\n    }\n\n    return false\n  }\n\n  /**\n   * Similar to {@link LinkifyIt.test} but checks only specific protocol tail exactly\n   * at given position. Returns length of found pattern (0 on fail).\n   *\n   * @param text Text to scan.\n   * @param schema Rule (schema) name.\n   * @param pos Text offset to check from.\n   */\n  testSchemaAt (text: string, schema: string, pos: number): number {\n    // If not supported schema check requested - terminate\n    if (!this.__schemas__[schema.toLowerCase()]) { return 0 }\n\n    return this.__schemas__[schema.toLowerCase()].validate(\n      text.slice(0, pos + this.__opts__.maxLength),\n      pos,\n      this\n    )\n  }\n\n  /**\n   * Returns array of found link descriptions or `null` on fail. We strongly\n   * recommend to use {@link LinkifyIt.test} first, for best speed.\n   *\n   * @param text Text to scan.\n   */\n  match (text: string): Match[] | null {\n    const result: Match[] = []\n    const schemaRe = this.re.get_schema_search()\n    let fuzzyLinkRe: RegExp | undefined\n    let mailHostRe: RegExp | undefined\n    let mailNameRe: RegExp | undefined\n    let fuzzyLinkCandidate: MatchCandidate | undefined\n    let fuzzyEmailCandidate: MatchCandidate | undefined\n    let schemaPrefix: MatchCandidate | undefined\n    let schemaDone = false\n    let fuzzyLinkDone = false\n    let fuzzyEmailDone = false\n    let pos = 0\n\n    if (!text.length) { return null }\n\n    schemaRe.lastIndex = 0\n\n    if (this.__opts__.fuzzyLink && this.__schemas__['http:']) {\n      fuzzyLinkRe = this.re.get_fuzzy_link_search()\n      fuzzyLinkRe.lastIndex = 0\n    }\n\n    if (this.__opts__.fuzzyEmail && this.__schemas__['mailto:']) {\n      mailHostRe = this.re.get_fuzzy_mail_host_search()\n      mailHostRe.lastIndex = 0\n      mailNameRe = this.re.get_mail_name_validator()\n    }\n\n    for (;;) {\n      const scanFrom = Math.max(pos - 1, 0)\n\n      if (mailHostRe && mailNameRe && !fuzzyEmailDone && (!fuzzyEmailCandidate || fuzzyEmailCandidate.index < pos)) {\n        if (mailHostRe.lastIndex < scanFrom) { mailHostRe.lastIndex = scanFrom }\n\n        for (;;) {\n          const m = mailHostRe.exec(text)\n          if (!m) {\n            fuzzyEmailDone = true\n            fuzzyEmailCandidate = undefined\n            break\n          }\n\n          const name = mailNameRe.exec(text.slice(Math.max(0, m.index - 65), m.index))\n          if (!name) { continue }\n\n          fuzzyEmailCandidate = {\n            schema: 'mailto:',\n            index: m.index - name[1].length,\n            lastIndex: m.index + m[0].length\n          }\n\n          if (fuzzyEmailCandidate.index >= pos) { break }\n          if (mailHostRe.lastIndex < scanFrom) { mailHostRe.lastIndex = scanFrom }\n        }\n      }\n\n      if (fuzzyLinkRe && !fuzzyLinkDone && (!fuzzyLinkCandidate || fuzzyLinkCandidate.index < pos)) {\n        if (fuzzyLinkRe.lastIndex < scanFrom) { fuzzyLinkRe.lastIndex = scanFrom }\n\n        for (;;) {\n          const m = fuzzyLinkRe.exec(text)\n          if (!m) {\n            fuzzyLinkDone = true\n            fuzzyLinkCandidate = undefined\n            break\n          }\n\n          fuzzyLinkCandidate = {\n            schema: '',\n            index: m.index + m[1].length,\n            lastIndex: m.index + m[0].length\n          }\n\n          if (fuzzyLinkCandidate.index >= pos) { break }\n          if (fuzzyLinkRe.lastIndex < scanFrom) { fuzzyLinkRe.lastIndex = scanFrom }\n        }\n      }\n\n      let fuzzyCandidate = fuzzyEmailCandidate\n      if (!fuzzyCandidate ||\n        (fuzzyLinkCandidate &&\n          (fuzzyLinkCandidate.index < fuzzyCandidate.index ||\n            (fuzzyLinkCandidate.index === fuzzyCandidate.index && fuzzyLinkCandidate.lastIndex > fuzzyCandidate.lastIndex)))) {\n        fuzzyCandidate = fuzzyLinkCandidate\n      }\n\n      let schemaCandidate: MatchCandidate | undefined\n\n      if (!schemaDone) {\n        for (;;) {\n          if (!schemaPrefix) {\n            if (schemaRe.lastIndex < scanFrom) { schemaRe.lastIndex = scanFrom }\n\n            const m = schemaRe.exec(text)\n            if (!m) {\n              schemaDone = true\n              break\n            }\n\n            schemaPrefix = {\n              schema: m[2],\n              index: m.index + m[1].length,\n              lastIndex: m.index + m[0].length\n            }\n          }\n\n          if (schemaPrefix.index < pos) {\n            schemaPrefix = undefined\n            continue\n          }\n\n          if (fuzzyCandidate && schemaPrefix.index > fuzzyCandidate.index) { break }\n\n          const prefix = schemaPrefix\n          schemaPrefix = undefined\n\n          const len = this.testSchemaAt(text, prefix.schema, prefix.lastIndex)\n          if (len) {\n            schemaCandidate = {\n              schema: prefix.schema,\n              index: prefix.index,\n              lastIndex: prefix.lastIndex + len\n            }\n            break\n          }\n        }\n      }\n\n      let candidate = schemaCandidate\n      if (!candidate ||\n        (fuzzyEmailCandidate &&\n          (fuzzyEmailCandidate.index < candidate.index ||\n            (fuzzyEmailCandidate.index === candidate.index && fuzzyEmailCandidate.lastIndex > candidate.lastIndex)))) {\n        candidate = fuzzyEmailCandidate\n      }\n      if (!candidate ||\n        (fuzzyLinkCandidate &&\n          (fuzzyLinkCandidate.index < candidate.index ||\n            (fuzzyLinkCandidate.index === candidate.index && fuzzyLinkCandidate.lastIndex > candidate.lastIndex)))) {\n        candidate = fuzzyLinkCandidate\n      }\n\n      if (!candidate) { break }\n\n      if (candidate === fuzzyEmailCandidate) {\n        fuzzyEmailCandidate = undefined\n      } else if (candidate === fuzzyLinkCandidate) {\n        fuzzyLinkCandidate = undefined\n      }\n\n      const match = new Match(text, candidate.schema, candidate.index, candidate.lastIndex)\n      if (match.schema) {\n        this.__schemas__[match.schema].normalize(match, this)\n      } else {\n        this.normalize(match)\n      }\n      result.push(match)\n      pos = candidate.lastIndex\n    }\n\n    if (result.length) {\n      return result\n    }\n\n    return null\n  }\n\n  /**\n   * Returns fully-formed (not fuzzy) link if it starts at the beginning\n   * of the string, and null otherwise.\n   *\n   * @param text Text to scan.\n   */\n  matchAtStart (text: string): Match | null {\n    if (!text.length) return null\n\n    const m = this.re.get_schema_at_start().exec(text)\n    if (!m) return null\n\n    const len = this.testSchemaAt(text, m[2], m[0].length)\n    if (!len) return null\n\n    const match = new Match(text, m[2], m.index + m[1].length, m.index + m[0].length + len)\n\n    this.__schemas__[match.schema].normalize(match, this)\n    return match\n  }\n\n  /**\n   * Load (or merge) new TLDs list. Those are used for fuzzy links (without\n   * prefix) to avoid false positives. By default this algorithm is used:\n   *\n   * - hostname with any 2-letter root zones are ok.\n   * - biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф\n   *   are ok.\n   * - encoded (`xn--...`) root zones are ok.\n   *\n   * If list is replaced, then exact match for 2-chars root zones will be checked.\n   *\n   * @param list List of TLDs.\n   * @param keepOld Merge with current list if `true` (`false` by default).\n   */\n  tlds (list: string | string[], keepOld = false): this {\n    list = Array.isArray(list) ? list : [list]\n\n    if (!keepOld) {\n      this.__opts__.tlds = list\n    } else {\n      this.__opts__.tlds = this.__opts__.tlds.concat(list)\n    }\n\n    this.re.set({\n      ...this.__opts__,\n      schema_names: Object.keys(this.__schemas__)\n    })\n    return this\n  }\n\n  /**\n   * Default normalizer (if schema does not define its own).\n   *\n   * @param match Match to normalize.\n   */\n  normalize (match: Match): void {\n    // Do minimal possible changes by default. Need to collect feedback prior\n    // to move forward https://github.com/markdown-it/linkify-it/issues/1\n\n    if (!match.schema) { match.url = `http://${match.url}` }\n\n    if (match.schema === 'mailto:' && !/^mailto:/i.test(match.url)) {\n      match.url = `mailto:${match.url}`\n    }\n  }\n}\n\nfunction linkifyit (options: LinkifyConstructorOptions = {}): LinkifyIt {\n  return new LinkifyIt(options)\n}\n\nexport { linkifyit }\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t//  0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","/**\n * Common utility functions exposed through `md.utils` for use by plugins.\n *\n * @module md.utils\n */\n\nimport * as mdurl from 'mdurl'\nimport * as ucmicro from 'uc.micro'\nimport { decodeHTMLStrict } from 'entities'\n\n/** @hidden */\ntype ClassToWrap = new (...args: any[]) => object\n\n/** Wraps a class so it can be called with or without `new`. */\nfunction callable<T extends ClassToWrap> (\n  cls: T\n): T & ((...args: ConstructorParameters<T>) => InstanceType<T>)\nfunction callable<T extends ClassToWrap> (cls: T) {\n  const wrapper = function (...args: ConstructorParameters<T>) {\n    const newTarget =\n      new.target && new.target !== wrapper\n        ? new.target\n        : cls\n\n    return Reflect.construct(cls, args, newTarget)\n  }\n\n  Object.defineProperty(wrapper, 'name', { value: cls.name })\n  Object.setPrototypeOf(wrapper, cls)\n  wrapper.prototype = cls.prototype\n\n  return wrapper\n}\n\n/**\n * Returns a copy of a token array with the token at `pos` replaced by\n * `newElements`. Used to transform token streams without modifying the\n * original array.\n */\nfunction arrayReplaceAt<T> (src: T[], pos: number, newElements: T[]): T[] {\n  return ([] as T[]).concat(src.slice(0, pos), newElements, src.slice(pos + 1))\n}\n\n/** Checks whether a code point can be decoded from a numeric HTML entity. */\nfunction isValidEntityCode (c: number) {\n  // broken sequence\n  if (c >= 0xD800 && c <= 0xDFFF) { return false }\n  // never used\n  if (c >= 0xFDD0 && c <= 0xFDEF) { return false }\n  if ((c & 0xFFFF) === 0xFFFF || (c & 0xFFFF) === 0xFFFE) { return false }\n  // control codes\n  if (c >= 0x00 && c <= 0x08) { return false }\n  if (c === 0x0B) { return false }\n  if (c >= 0x0E && c <= 0x1F) { return false }\n  if (c >= 0x7F && c <= 0x9F) { return false }\n  // out of range\n  if (c > 0x10FFFF) { return false }\n  return true\n}\n\n/**\n * Converts a Unicode code point to a string, like `String.fromCodePoint()`,\n * but does not throw for invalid input.\n */\nfunction fromCodePoint (c: number) {\n  /* eslint no-bitwise:0 */\n  if (c > 0xffff) {\n    c -= 0x10000\n    const surrogate1 = 0xd800 + (c >> 10)\n    const surrogate2 = 0xdc00 + (c & 0x3ff)\n\n    return String.fromCharCode(surrogate1, surrogate2)\n  }\n  return String.fromCharCode(c)\n}\n\nconst UNESCAPE_MD_RE = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_`{|}~])/g\nconst ENTITY_RE = /&([a-z#][a-z0-9]{1,31});/gi\nconst UNESCAPE_ALL_RE = new RegExp(`${UNESCAPE_MD_RE.source}|${ENTITY_RE.source}`, 'gi')\n\nconst DIGITAL_ENTITY_TEST_RE = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i\n\nfunction replaceEntityPattern (match: string, name: string) {\n  if (name.charCodeAt(0) === 0x23/* # */ && DIGITAL_ENTITY_TEST_RE.test(name)) {\n    const code = name[1].toLowerCase() === 'x'\n      ? parseInt(name.slice(2), 16)\n      : parseInt(name.slice(1), 10)\n\n    if (isValidEntityCode(code)) {\n      return fromCodePoint(code)\n    }\n\n    return match\n  }\n\n  const decoded = decodeHTMLStrict(match)\n  if (decoded !== match) {\n    return decoded\n  }\n\n  return match\n}\n\n/** Decodes Markdown backslash escapes. */\nfunction unescapeMd (str: string) {\n  if (str.indexOf('\\\\') < 0) { return str }\n  return str.replace(UNESCAPE_MD_RE, '$1')\n}\n\n/**\n * Decodes Markdown backslash escapes and HTML character references in link\n * destinations, link titles, and fenced code info strings.\n */\nfunction unescapeAll (str: string) {\n  if (str.indexOf('\\\\') < 0 && str.indexOf('&') < 0) { return str }\n\n  return str.replace(UNESCAPE_ALL_RE, function (match, escaped, entity) {\n    if (escaped) { return escaped }\n    return replaceEntityPattern(match, entity)\n  })\n}\n\nconst HTML_ESCAPE_TEST_RE = /[&<>\"]/\nconst HTML_ESCAPE_REPLACE_RE = /[&<>\"]/g\nconst HTML_REPLACEMENTS = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;'\n}\n\nfunction replaceUnsafeChar (ch: string): string {\n  return HTML_REPLACEMENTS[ch as keyof typeof HTML_REPLACEMENTS]\n}\n\n/** Escapes HTML special characters in a string. */\nfunction escapeHtml (str: string) {\n  if (HTML_ESCAPE_TEST_RE.test(str)) {\n    return str.replace(HTML_ESCAPE_REPLACE_RE, replaceUnsafeChar)\n  }\n  return str\n}\n\nconst REGEXP_ESCAPE_RE = /[.?*+^$[\\]\\\\(){}|-]/g\n\n/** Escapes regular expression metacharacters in a string. */\nfunction escapeRE (str: string) {\n  return str.replace(REGEXP_ESCAPE_RE, '\\\\$&')\n}\n\n/** Checks whether a character code is an ASCII space or tab. */\nfunction isSpace (code: number) {\n  switch (code) {\n    case 0x09:\n    case 0x20:\n      return true\n  }\n  return false\n}\n\n/**\n * Checks whether a character code is whitespace recognized by Markdown.\n *\n * Matches the Unicode `Zs` category or `\\t`, `\\f`, `\\v`, `\\r`, `\\n`.\n */\nfunction isWhiteSpace (code: number) {\n  if (code >= 0x2000 && code <= 0x200A) { return true }\n  switch (code) {\n    case 0x09: // \\t\n    case 0x0A: // \\n\n    case 0x0B: // \\v\n    case 0x0C: // \\f\n    case 0x0D: // \\r\n    case 0x20:\n    case 0xA0:\n    case 0x1680:\n    case 0x202F:\n    case 0x205F:\n    case 0x3000:\n      return true\n  }\n  return false\n}\n\n/**\n * Checks whether a character is Unicode punctuation or a symbol.\n *\n * Does not support astral characters.\n */\nfunction isPunctChar (ch: string) {\n  return ucmicro.P.test(ch) || ucmicro.S.test(ch)\n}\n\n/** Checks whether a Unicode code point is punctuation or a symbol. */\nfunction isPunctCharCode (code: number) {\n  return isPunctChar(fromCodePoint(code))\n}\n\n/**\n * Markdown ASCII punctuation characters.\n *\n *     !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @,\n *     [, \\, ], ^, _, `, {, |, }, or ~\n *\n * http://spec.commonmark.org/0.15/#ascii-punctuation-character\n *\n * Don't confuse with Unicode punctuation. It lacks some characters in the\n * ASCII range.\n */\nfunction isMdAsciiPunct (ch: number) {\n  switch (ch) {\n    case 0x21/* ! */:\n    case 0x22/* \" */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x27/* ' */:\n    case 0x28/* ( */:\n    case 0x29/* ) */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2C/* , */:\n    case 0x2D/* - */:\n    case 0x2E/* . */:\n    case 0x2F/* / */:\n    case 0x3A/* : */:\n    case 0x3B/* ; */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x3F/* ? */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7C/* | */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true\n    default:\n      return false\n  }\n}\n\n/** Normalizes `[reference labels]` for case-insensitive lookup. */\nfunction normalizeReference (str: string) {\n  // Trim and collapse whitespace\n  //\n  str = str.trim().replace(/\\s+/g, ' ')\n\n  // .toLowerCase().toUpperCase() should get rid of all differences\n  // between letter variants.\n  //\n  // Simple .toLowerCase() doesn't normalize 125 code points correctly,\n  // and .toUpperCase doesn't normalize 6 of them (list of exceptions:\n  // İ, ϴ, ẞ, Ω, K, Å - those are already uppercased, but have differently\n  // uppercased versions).\n  //\n  // Here's an example showing how it happens. Lets take greek letter omega:\n  // uppercase U+0398 (Θ), U+03f4 (ϴ) and lowercase U+03b8 (θ), U+03d1 (ϑ)\n  //\n  // Unicode entries:\n  // 0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;\n  // 03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398\n  // 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398\n  // 03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;\n  //\n  // Case-insensitive comparison should treat all of them as equivalent.\n  //\n  // But .toLowerCase() doesn't change ϑ (it's already lowercase),\n  // and .toUpperCase() doesn't change ϴ (already uppercase).\n  //\n  // Applying first lower then upper case normalizes any character:\n  // '\\u0398\\u03f4\\u03b8\\u03d1'.toLowerCase().toUpperCase() === '\\u0398\\u0398\\u0398\\u0398'\n  //\n  // Note: this is equivalent to unicode case folding; unicode normalization\n  // is a different step that is not required here.\n  //\n  // Final result should be uppercased, because it's later stored in an object\n  // (this avoid a conflict with Object.prototype members,\n  // most notably, `__proto__`)\n  //\n  return str.toLowerCase().toUpperCase()\n}\n\nfunction isAsciiTrimmable (c: number) {\n  return c === 0x20 || c === 0x09 || c === 0x0a || c === 0x0d\n}\n\n/**\n * \"Light\" `.trim()` for blocks (headings, paragraphs), where Unicode spaces\n * should be preserved.\n */\nfunction asciiTrim (str: string) {\n  let start = 0\n  for (; start < str.length; start++) {\n    if (!isAsciiTrimmable(str.charCodeAt(start))) {\n      break\n    }\n  }\n  let end = str.length - 1\n  for (; end >= start; end--) {\n    if (!isAsciiTrimmable(str.charCodeAt(end))) {\n      break\n    }\n  }\n  return str.slice(start, end + 1)\n}\n\n/**\n * Libraries commonly used by markdown-it and its plugins, re-exported to\n * reduce duplicate dependencies in browser bundles.\n */\nconst lib = { mdurl, ucmicro }\n\nexport {\n  lib,\n  callable,\n  unescapeMd,\n  unescapeAll,\n  isValidEntityCode,\n  fromCodePoint,\n  escapeHtml,\n  arrayReplaceAt,\n  isSpace,\n  isWhiteSpace,\n  isMdAsciiPunct,\n  isPunctChar,\n  isPunctCharCode,\n  escapeRE,\n  normalizeReference,\n  asciiTrim\n}\n","import type StateInline from '../rules_inline/state_inline.ts'\n\n/** Finds the end of a link or image label (`[label]`). */\nexport default function parseLinkLabel (state: StateInline, start: number, disableNested?: boolean): number {\n  let level, found, marker, prevPos\n\n  const max = state.posMax\n  const oldPos = state.pos\n\n  state.pos = start + 1\n  level = 1\n\n  while (state.pos < max) {\n    marker = state.src.charCodeAt(state.pos)\n    if (marker === 0x5D /* ] */) {\n      level--\n      if (level === 0) {\n        found = true\n        break\n      }\n    }\n\n    prevPos = state.pos\n    state.md.inline.skipToken(state)\n    if (marker === 0x5B /* [ */) {\n      if (prevPos === state.pos - 1) {\n        // increase level if we find text `[`, which is not a part of any token\n        level++\n      } else if (disableNested) {\n        state.pos = oldPos\n        return -1\n      }\n    }\n  }\n\n  let labelEnd = -1\n\n  if (found) {\n    labelEnd = state.pos\n  }\n\n  // restore old state\n  state.pos = oldPos\n\n  return labelEnd\n}\n","import { unescapeAll } from '../common/utils.ts'\n\n/** Parses the destination in `[label](destination \"title\")`. */\nexport default function parseLinkDestination (str: string, start: number, max: number) {\n  let code\n  let pos = start\n\n  const result = {\n    ok: false,\n    pos: 0,\n    str: ''\n  }\n\n  if (str.charCodeAt(pos) === 0x3C /* < */) {\n    pos++\n    while (pos < max) {\n      code = str.charCodeAt(pos)\n      if (code === 0x0A /* \\n */) { return result }\n      if (code === 0x3C /* < */) { return result }\n      if (code === 0x3E /* > */) {\n        result.pos = pos + 1\n        result.str = unescapeAll(str.slice(start + 1, pos))\n        result.ok = true\n        return result\n      }\n      if (code === 0x5C /* \\ */ && pos + 1 < max) {\n        pos += 2\n        continue\n      }\n\n      pos++\n    }\n\n    // no closing '>'\n    return result\n  }\n\n  // this should be ... } else { ... branch\n\n  let level = 0\n  while (pos < max) {\n    code = str.charCodeAt(pos)\n\n    if (code === 0x20) { break }\n\n    // ascii control characters\n    if (code < 0x20 || code === 0x7F) { break }\n\n    if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      if (str.charCodeAt(pos + 1) === 0x20) { pos++; continue }\n      pos += 2\n      continue\n    }\n\n    if (code === 0x28 /* ( */) {\n      level++\n      if (level > 32) { return result }\n    }\n\n    if (code === 0x29 /* ) */) {\n      if (level === 0) { break }\n      level--\n    }\n\n    pos++\n  }\n\n  if (start === pos) { return result }\n  if (level !== 0) { return result }\n\n  result.str = unescapeAll(str.slice(start, pos))\n  result.pos = pos\n  result.ok = true\n  return result\n}\n","import { unescapeAll } from '../common/utils.ts'\n\n/** @inline */\ninterface ParseLinkTitleResult {\n  ok: boolean\n  can_continue: boolean\n  pos: number\n  str: string\n  marker: number\n}\n\n/**\n * Parses the optional title in `[label](destination \"title\")` or\n * `[label]: destination \"title\"`.\n *\n * `prev_state` continues a reference title on the next source line.\n */\nexport default function parseLinkTitle (\n  str: string,\n  start: number,\n  max: number,\n  prev_state?: ParseLinkTitleResult\n): ParseLinkTitleResult {\n  let code\n  let pos = start\n\n  const state = {\n    // if `true`, this is a valid link title\n    ok: false,\n    // if `true`, this link can be continued on the next line\n    can_continue: false,\n    // if `ok`, it's the position of the first character after the closing marker\n    pos: 0,\n    // if `ok`, it's the unescaped title\n    str: '',\n    // expected closing marker character code\n    marker: 0\n  }\n\n  if (prev_state) {\n    // this is a continuation of a previous parseLinkTitle call on the next line,\n    // used in reference links only\n    state.str = prev_state.str\n    state.marker = prev_state.marker\n  } else {\n    if (pos >= max) { return state }\n\n    let marker = str.charCodeAt(pos)\n    if (marker !== 0x22 /* \" */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return state }\n\n    start++\n    pos++\n\n    // if opening marker is \"(\", switch it to closing marker \")\"\n    if (marker === 0x28) { marker = 0x29 }\n\n    state.marker = marker\n  }\n\n  while (pos < max) {\n    code = str.charCodeAt(pos)\n    if (code === state.marker) {\n      state.pos = pos + 1\n      state.str += unescapeAll(str.slice(start, pos))\n      state.ok = true\n      return state\n    } else if (code === 0x28 /* ( */ && state.marker === 0x29 /* ) */) {\n      return state\n    } else if (code === 0x5C /* \\ */ && pos + 1 < max) {\n      pos++\n    }\n\n    pos++\n  }\n\n  // no closing marker found, but this link title may continue on the next line (for references)\n  state.can_continue = true\n  state.str += unescapeAll(str.slice(start, pos))\n  return state\n}\n","/**\n * Functions used to parse links and images, split out of parser rules because\n * of their size.\n *\n * @module md.helpers\n */\n\n// Just a shortcut for bulk export\n\nimport parseLinkLabel from './parse_link_label.ts'\nimport parseLinkDestination from './parse_link_destination.ts'\nimport parseLinkTitle from './parse_link_title.ts'\n\nexport {\n  parseLinkLabel,\n  parseLinkDestination,\n  parseLinkTitle\n}\n","// Token class\n\n/** @inline */\ntype TokenNesting = -1 | 0 | 1\n\n/** @inline */\ntype TokenAttribute = [name: string, value: string | number]\n\n/**\n * Represents one item in the parsed token stream, storing parsed data and\n * providing helpers for managing HTML attributes.\n */\nclass Token {\n  /**\n   * Type of the token (string, e.g. \"paragraph_open\")\n   */\n  declare type: string\n\n  /**\n   * html tag name, e.g. \"p\"\n   */\n  declare tag: string\n\n  /** Html attributes. Format: `[ [ name1, value1 ], [ name2, value2 ] ]` */\n  declare attrs: TokenAttribute[] | null\n\n  /**\n   * Source map info. Format: `[ line_begin, line_end ]`\n   */\n  map: [number, number] | null = null\n\n  /**\n   * Level change (number in {-1, 0, 1} set), where:\n   *\n   * -  `1` means the tag is opening\n   * -  `0` means the tag is self-closing\n   * - `-1` means the tag is closing\n   */\n  declare nesting: TokenNesting\n\n  /**\n   * nesting level, the same as `state.level`\n   */\n  level = 0\n\n  /**\n   * An array of child nodes (inline and img tokens)\n   */\n  children: Token[] | null = null\n\n  /**\n   * In a case of self-closing tag (code, html, fence, etc.),\n   * it has contents of this tag.\n   */\n  content = ''\n\n  /**\n   * '*' or '_' for emphasis, fence string for fence, etc.\n   */\n  markup = ''\n\n  /**\n   * Additional information:\n   *\n   * - Info string for \"fence\" tokens\n   * - The value \"auto\" for autolink \"link_open\" and \"link_close\" tokens\n   * - The string value of the item marker for ordered-list \"list_item_open\" tokens\n   */\n  info = ''\n\n  /** A place for plugins to store an arbitrary data */\n  declare meta: Record<string, unknown> | null\n\n  /**\n   * True for block-level tokens, false for inline tokens.\n   * Used in renderer to calculate line breaks\n   */\n  block = false\n\n  /**\n   * If it's true, ignore this element when rendering. Used for tight lists\n   * to hide paragraphs.\n   */\n  hidden = false\n\n  constructor (type: string, tag: string, nesting: TokenNesting) {\n    this.type = type\n    this.tag = tag\n\n    this.attrs = null\n\n    this.nesting = nesting\n\n    this.meta = null\n  }\n\n  /**\n   * Search attribute index by name.\n   */\n  attrIndex (name: string): number {\n    if (!this.attrs) { return -1 }\n\n    const attrs = this.attrs\n\n    for (let i = 0, len = attrs.length; i < len; i++) {\n      if (attrs[i][0] === name) { return i }\n    }\n    return -1\n  }\n\n  /**\n   * Add `[ name, value ]` attribute to list. Init attrs if necessary\n   */\n  attrPush (attrData: TokenAttribute): void {\n    if (this.attrs) {\n      this.attrs.push(attrData)\n    } else {\n      this.attrs = [attrData]\n    }\n  }\n\n  /**\n   * Set `name` attribute to `value`. Override old value if exists.\n   */\n  attrSet (name: string, value: string | number): void {\n    const idx = this.attrIndex(name)\n    const attrData: TokenAttribute = [name, value]\n\n    if (idx < 0) {\n      this.attrPush(attrData)\n    } else {\n      this.attrs![idx] = attrData\n    }\n  }\n\n  /**\n   * Get the value of attribute `name`, or null if it does not exist.\n   */\n  attrGet (name: string): string | number | null {\n    const idx = this.attrIndex(name)\n    let value = null\n    if (idx >= 0) {\n      value = this.attrs![idx][1]\n    }\n    return value\n  }\n\n  /**\n   * Join value to existing attribute via space. Or create new attribute if not\n   * exists. Useful to operate with token classes.\n   */\n  attrJoin (name: string, value: string | number): void {\n    const idx = this.attrIndex(name)\n\n    if (idx < 0) {\n      this.attrPush([name, value])\n    } else {\n      this.attrs![idx][1] = `${this.attrs![idx][1]} ${value}`\n    }\n  }\n}\n\nexport default Token\n","/** @inline */\ntype RuleOptions = { alt?: string[] }\n\n/**\n * Helper class, used by {@link MarkdownIt.core}, {@link MarkdownIt.block} and\n * {@link MarkdownIt.inline} to manage sequences of functions (rules):\n *\n * - keep rules in defined order\n * - assign the name to each rule\n * - enable/disable rules\n * - add/replace rules\n * - allow assign rules to additional named chains (in the same)\n * - cacheing lists of active rules\n *\n * You will not need use this class directly until write plugins. For simple\n * rules control use {@link MarkdownIt.disable}, {@link MarkdownIt.enable} and\n * {@link MarkdownIt.use}.\n */\nclass Ruler<Args extends unknown[], Result> {\n  /** @internal */\n  __rules__: Array<{\n    name: string\n    enabled: boolean\n    fn: (...args: Args) => Result\n    alt: string[]\n  }> = []\n\n  // Cached rule chains.\n  //\n  // First level - chain name, '' for default.\n  // Second level - diginal anchor for fast filtering by charcodes.\n  //\n  /** @internal */\n  __cache__: Record<string, Array<(...args: Args) => Result>> | null = null\n\n  /** @internal */\n  __find__ (name: string): number {\n    for (let i = 0; i < this.__rules__.length; i++) {\n      if (this.__rules__[i].name === name) {\n        return i\n      }\n    }\n    return -1\n  }\n\n  /** @internal */\n  __compile__ (): void {\n    const chains = new Set<string>()\n\n    // collect unique names\n    this.__rules__.forEach(rule => {\n      if (!rule.enabled) return\n      rule.alt.forEach(altName => {\n        if (altName) chains.add(altName)\n      })\n    })\n\n    this.__cache__ = Object.create(null)\n\n    // Collect default chain\n    this.__cache__![''] = []\n    this.__rules__.forEach(rule => {\n      if (rule.enabled) this.__cache__![''].push(rule.fn)\n    })\n\n    // Collect alt chains\n    chains.forEach(chain => {\n      this.__cache__![chain] = []\n\n      this.__rules__.forEach(rule => {\n        if (rule.enabled && rule.alt.indexOf(chain) >= 0) {\n          this.__cache__![chain].push(rule.fn)\n        }\n      })\n    })\n  }\n\n  /**\n   * Replace rule by name with new function & options. Throws error if name not\n   * found.\n   *\n   * @example Replace existing typographer replacement rule with new one\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * md.core.ruler.at('replacements', function replace(state) {\n   *   //...\n   * });\n   * ```\n   */\n  at (name: string, fn: (...args: Args) => Result, options: RuleOptions = {}): void {\n    const index = this.__find__(name)\n\n    if (index === -1) { throw new Error(`Parser rule not found: ${name}`) }\n\n    this.__rules__[index].fn = fn\n    this.__rules__[index].alt = options.alt || []\n    this.__cache__ = null\n  }\n\n  /**\n   * Add new rule to chain before one with given name. See also\n   * {@link Ruler.after}, {@link Ruler.push}.\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * md.block.ruler.before('paragraph', 'my_rule', function replace(state) {\n   *   //...\n   * });\n   * ```\n   */\n  before (beforeName: string, ruleName: string, fn: (...args: Args) => Result, options: RuleOptions = {}): void {\n    const index = this.__find__(beforeName)\n\n    if (index === -1) { throw new Error(`Parser rule not found: ${beforeName}`) }\n\n    this.__rules__.splice(index, 0, {\n      name: ruleName,\n      enabled: true,\n      fn,\n      alt: options.alt || []\n    })\n\n    this.__cache__ = null\n  }\n\n  /**\n   * Add new rule to chain after one with given name. See also\n   * {@link Ruler.before}, {@link Ruler.push}.\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * md.inline.ruler.after('text', 'my_rule', function replace(state) {\n   *   //...\n   * });\n   * ```\n   */\n  after (afterName: string, ruleName: string, fn: (...args: Args) => Result, options: RuleOptions = {}): void {\n    const index = this.__find__(afterName)\n\n    if (index === -1) { throw new Error(`Parser rule not found: ${afterName}`) }\n\n    this.__rules__.splice(index + 1, 0, {\n      name: ruleName,\n      enabled: true,\n      fn,\n      alt: options.alt || []\n    })\n\n    this.__cache__ = null\n  }\n\n  /**\n   * Push new rule to the end of chain. See also\n   * {@link Ruler.before}, {@link Ruler.after}.\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * md.core.ruler.push('my_rule', function replace(state) {\n   *   //...\n   * });\n   * ```\n   */\n  push (ruleName: string, fn: (...args: Args) => Result, options: RuleOptions = {}): void {\n    this.__rules__.push({\n      name: ruleName,\n      enabled: true,\n      fn,\n      alt: options.alt || []\n    })\n\n    this.__cache__ = null\n  }\n\n  /**\n   * Enable rules with given names. If any rule name not found - throw Error.\n   * Errors can be disabled by second param.\n   *\n   * See also {@link Ruler.disable}, {@link Ruler.enableOnly}.\n   *\n   * Returns list of found rule names (if no exception happened).\n   */\n  enable (list: string | string[], ignoreInvalid = false): string[] {\n    if (!Array.isArray(list)) { list = [list] }\n\n    const result: string[] = []\n\n    // Search by name and enable\n    list.forEach(name => {\n      const idx = this.__find__(name)\n\n      if (idx < 0) {\n        if (ignoreInvalid) { return }\n        throw new Error(`Rules manager: invalid rule name ${name}`)\n      }\n      this.__rules__[idx].enabled = true\n      result.push(name)\n    })\n\n    this.__cache__ = null\n    return result\n  }\n\n  /**\n   * Enable rules with given names, and disable everything else. If any rule name\n   * not found - throw Error. Errors can be disabled by second param.\n   *\n   * See also {@link Ruler.disable}, {@link Ruler.enable}.\n   */\n  enableOnly (list: string | string[], ignoreInvalid = false): void {\n    if (!Array.isArray(list)) { list = [list] }\n\n    this.__rules__.forEach(rule => { rule.enabled = false })\n\n    this.enable(list, ignoreInvalid)\n  }\n\n  /**\n   * Disable rules with given names. If any rule name not found - throw Error.\n   * Errors can be disabled by second param.\n   *\n   * See also {@link Ruler.enable}, {@link Ruler.enableOnly}.\n   *\n   * Returns list of found rule names (if no exception happened).\n   */\n  disable (list: string | string[], ignoreInvalid = false): string[] {\n    if (!Array.isArray(list)) { list = [list] }\n\n    const result: string[] = []\n\n    // Search by name and disable\n    list.forEach(name => {\n      const idx = this.__find__(name)\n\n      if (idx < 0) {\n        if (ignoreInvalid) { return }\n        throw new Error(`Rules manager: invalid rule name ${name}`)\n      }\n      this.__rules__[idx].enabled = false\n      result.push(name)\n    })\n\n    this.__cache__ = null\n    return result\n  }\n\n  /**\n   * Return array of active functions (rules) for given chain name. It analyzes\n   * rules configuration, compiles caches if not exists and returns result.\n   *\n   * Default chain name is `''` (empty string). It can't be skipped. That's\n   * done intentionally, to keep signature monomorphic for high speed.\n   */\n  getRules (chainName: string): Array<(...args: Args) => Result> {\n    if (!this.__cache__) this.__compile__()\n\n    // Chain can be empty, if rules disabled. But we still have to return Array.\n    return this.__cache__![chainName] || []\n  }\n}\n\nexport default Ruler\n","import { unescapeAll, escapeHtml } from './common/utils.ts'\nimport type Token from './token.ts'\nimport type { Env, MarkdownItOptions } from './types.ts'\n\n/** Function that renders a token at a given position in a token stream. */\nexport type RendererRule = (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>,\n  env: Env | undefined,\n  renderer: Renderer\n) => string\n\nconst default_rules: Record<string, RendererRule> = {}\n\ndefault_rules.code_inline = function (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>,\n  env: Env | undefined,\n  slf: Renderer\n): string {\n  const token = tokens[idx]\n\n  return `<code${slf.renderAttrs(token)}>${escapeHtml(token.content)}</code>`\n}\n\ndefault_rules.code_block = function (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>,\n  env: Env | undefined,\n  slf: Renderer\n): string {\n  const token = tokens[idx]\n\n  return `<pre${slf.renderAttrs(token)}><code>${escapeHtml(tokens[idx].content)}</code></pre>\\n`\n}\n\ndefault_rules.fence = function (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>,\n  env: Env | undefined,\n  slf: Renderer\n): string {\n  const token = tokens[idx]\n  const info = token.info ? unescapeAll(token.info).trim() : ''\n  let langName = ''\n  let langAttrs = ''\n\n  if (info) {\n    const arr = info.split(/(\\s+)/g)\n    langName = arr[0]\n    langAttrs = arr.slice(2).join('')\n  }\n\n  let highlighted\n  if (options.highlight) {\n    highlighted = options.highlight(token.content, langName, langAttrs) || escapeHtml(token.content)\n  } else {\n    highlighted = escapeHtml(token.content)\n  }\n\n  if (highlighted.indexOf('<pre') === 0) {\n    return highlighted + '\\n'\n  }\n\n  // If language exists, inject class gently, without modifying original token.\n  // May be, one day we will add .deepClone() for token and simplify this part, but\n  // now we prefer to keep things local.\n  if (info) {\n    const i = token.attrIndex('class')\n    const tmpAttrs = token.attrs ? token.attrs.slice() : []\n\n    if (i < 0) {\n      tmpAttrs.push(['class', `${options.langPrefix}${langName}`])\n    } else {\n      tmpAttrs[i] = [tmpAttrs[i][0], tmpAttrs[i][1]] // shallow clone\n      tmpAttrs[i][1] += ` ${options.langPrefix}${langName}`\n    }\n\n    // Fake token just to render attributes\n    const tmpToken = {\n      attrs: tmpAttrs\n    }\n\n    return `<pre><code${slf.renderAttrs(tmpToken)}>${highlighted}</code></pre>\\n`\n  }\n\n  return `<pre><code${slf.renderAttrs(token)}>${highlighted}</code></pre>\\n`\n}\n\ndefault_rules.image = function (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>,\n  env: Env | undefined,\n  slf: Renderer\n): string {\n  const token = tokens[idx]\n\n  // \"alt\" attr MUST be set, even if empty. Because it's mandatory and\n  // should be placed on proper position for tests.\n  //\n  // Replace content with actual value\n\n  token.attrs![token.attrIndex('alt')][1] =\n    slf.renderInlineAsText(token.children!, options, env)\n\n  return slf.renderToken(tokens, idx, options)\n}\n\ndefault_rules.hardbreak = function (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>\n): string {\n  return options.xhtmlOut ? '<br />\\n' : '<br>\\n'\n}\ndefault_rules.softbreak = function (\n  tokens: Token[],\n  idx: number,\n  options: Required<MarkdownItOptions>\n): string {\n  return options.breaks ? (options.xhtmlOut ? '<br />\\n' : '<br>\\n') : '\\n'\n}\n\ndefault_rules.text = function (tokens: Token[], idx: number): string {\n  return escapeHtml(tokens[idx].content)\n}\n\ndefault_rules.html_block = function (tokens: Token[], idx: number): string {\n  return tokens[idx].content\n}\ndefault_rules.html_inline = function (tokens: Token[], idx: number): string {\n  return tokens[idx].content\n}\n\n/**\n * Generates HTML from parsed token stream. Each instance has independent\n * copy of rules. Those can be rewritten with ease. Also, you can add new\n * rules if you create plugin and adds new token types.\n *\n * Creates new renderer instance and fills {@link Renderer.rules} with defaults.\n */\nclass Renderer {\n  /**\n   * Contains render rules for tokens. Can be updated and extended.\n   *\n   * See [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts)\n   * for more details and examples.\n   *\n   * @example Custom render rules\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * md.renderer.rules.strong_open  = function () { return '<b>'; };\n   * md.renderer.rules.strong_close = function () { return '</b>'; };\n   *\n   * const result = md.renderInline(...);\n   * ```\n   *\n   * @example Each rule is called as independent static function with fixed signature\n   * ```javascript\n   * function my_token_render(tokens, idx, options, env, renderer) {\n   *   // ...\n   *   return renderedHTML;\n   * }\n   * ```\n   */\n  rules: Record<string, RendererRule> = Object.assign({}, default_rules)\n\n  /**\n   * Render token attributes to string.\n   */\n  renderAttrs (token: Pick<Token, 'attrs'>): string {\n    let i, l, result\n\n    if (!token.attrs) { return '' }\n\n    result = ''\n\n    for (i = 0, l = token.attrs.length; i < l; i++) {\n      result += ` ${escapeHtml(token.attrs[i][0])}=\"${escapeHtml(String(token.attrs[i][1]))}\"`\n    }\n\n    return result\n  }\n\n  /**\n   * Default token renderer. Can be overriden by custom function\n   * in {@link Renderer.rules}.\n   */\n  renderToken (tokens: Token[], idx: number, options: Required<MarkdownItOptions>): string {\n    const token = tokens[idx]\n    let result = ''\n\n    // Tight list paragraphs\n    if (token.hidden) {\n      return ''\n    }\n\n    // Insert a newline between hidden paragraph and subsequent opening\n    // block-level tag.\n    //\n    // For example, here we should insert a newline before blockquote:\n    //  - a\n    //    >\n    //\n    // Only closing hidden tokens count, to not break on other hidden ones.\n    //\n    // Hidden tokens without nesting (`reference_definition`) are skipped here\n    // and below, or they would break line feeds around neighbour blocks.\n    //\n    let prev = idx - 1\n    while (prev >= 0 && tokens[prev].hidden && tokens[prev].nesting === 0) { prev-- }\n\n    if (token.block && token.nesting !== -1 && prev >= 0 &&\n        tokens[prev].hidden && tokens[prev].nesting === -1) {\n      result += '\\n'\n    }\n\n    // Add token name, e.g. `<img`\n    result += (token.nesting === -1 ? '</' : '<') + token.tag\n\n    // Encode attributes, e.g. `<img src=\"foo\"`\n    result += this.renderAttrs(token)\n\n    // Add a slash for self-closing tags, e.g. `<img src=\"foo\" /`\n    if (token.nesting === 0 && options.xhtmlOut) {\n      result += ' /'\n    }\n\n    // Check if we need to add a newline after this tag\n    let needLf = false\n    if (token.block) {\n      needLf = true\n\n      if (token.nesting === 1) {\n        let next = idx + 1\n        while (next < tokens.length && tokens[next].hidden && tokens[next].nesting === 0) { next++ }\n\n        if (next < tokens.length) {\n          const nextToken = tokens[next]\n\n          if (nextToken.type === 'inline' || nextToken.hidden) {\n          // Block-level tag containing an inline tag.\n          //\n            needLf = false\n          } else if (nextToken.nesting === -1 && nextToken.tag === token.tag) {\n          // Opening tag + closing tag of the same type. E.g. `<li></li>`.\n          //\n            needLf = false\n          }\n        }\n      }\n    }\n\n    result += needLf ? '>\\n' : '>'\n\n    return result\n  }\n\n  /**\n   * The same as {@link Renderer.render}, but for single token of `inline` type.\n   */\n  renderInline (tokens: Token[], options: Required<MarkdownItOptions>, env: Env | undefined): string {\n    let result = ''\n    const rules = this.rules\n\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      const type = tokens[i].type\n\n      if (typeof rules[type] !== 'undefined') {\n        result += rules[type](tokens, i, options, env, this)\n      } else {\n        result += this.renderToken(tokens, i, options)\n      }\n    }\n\n    return result\n  }\n\n  /**\n   * Special kludge for image `alt` attributes to conform CommonMark spec.\n   * Don't try to use it! Spec requires to show `alt` content with stripped markup,\n   * instead of simple escaping.\n   */\n  renderInlineAsText (tokens: Token[], options: Required<MarkdownItOptions>, env: Env | undefined): string {\n    let result = ''\n\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      switch (tokens[i].type) {\n        case 'text':\n        case 'code_inline':\n          // code content is added as plain text, without backticks\n          result += tokens[i].content\n          break\n        case 'image':\n          result += this.renderInlineAsText(tokens[i].children!, options, env)\n          break\n        case 'html_inline':\n        case 'html_block':\n          result += tokens[i].content\n          break\n        case 'softbreak':\n        case 'hardbreak':\n          result += '\\n'\n          break\n        default:\n        // all other tokens are skipped\n      }\n    }\n\n    return result\n  }\n\n  /**\n   * Takes token stream and generates HTML. Probably, you will never need to call\n   * this method directly.\n   */\n  render (tokens: Token[], options: Required<MarkdownItOptions>, env?: Env): string {\n    let result = ''\n    const rules = this.rules\n\n    for (let i = 0, len = tokens.length; i < len; i++) {\n      const type = tokens[i].type\n\n      if (type === 'inline') {\n        result += this.renderInline(tokens[i].children!, options, env)\n      } else if (typeof rules[type] !== 'undefined') {\n        result += rules[type](tokens, i, options, env, this)\n      } else {\n        result += this.renderToken(tokens, i, options)\n      }\n    }\n\n    return result\n  }\n}\n\nexport default Renderer\n","import Token from '../token.ts'\nimport type MarkdownIt from '../markdownit.ts'\nimport type { Env } from '../types.ts'\n\n/** Mutable state passed through the core rules chain. */\nclass StateCore {\n  declare src: string\n  declare env: Env\n  tokens: Token[] = []\n  inlineMode = false\n  declare md: MarkdownIt\n\n  // re-export Token class to use in core rules\n  Token = Token\n\n  constructor (src: string, md: MarkdownIt, env: Env) {\n    this.src = src\n    this.env = env\n    this.md = md // link to parser instance\n  }\n}\n\nexport default StateCore\n","// Normalize input string\n\nimport type StateCore from './state_core.ts'\n\n// https://spec.commonmark.org/0.29/#line-ending\nconst UNNORMALIZED_NEWLINE_RE = /\\r\\n?/g\nconst NULL_RE = /\\0/g\n\nexport default function normalize (state: StateCore): void {\n  let str\n\n  // Normalize newlines\n  str = state.src.replace(UNNORMALIZED_NEWLINE_RE, '\\n')\n\n  // Replace NULL characters\n  str = str.replace(NULL_RE, '\\uFFFD')\n\n  state.src = str\n}\n","import type StateCore from './state_core.ts'\n\nexport default function block (state: StateCore): void {\n  let token\n\n  if (state.inlineMode) {\n    token = new state.Token('inline', '', 0)\n    token.content = state.src\n    token.map = [0, 1]\n    token.children = []\n    state.tokens.push(token)\n  } else {\n    state.md.block.parse(state.src, state.md, state.env, state.tokens)\n  }\n}\n","// Drop `reference_definition` tokens to keep the stream backward compatible\n//\n// Those tokens mark places link definitions took in the source. They are new,\n// and plugins walking block tokens may not expect them, so by default the\n// stream stays as it always was. Disable this rule to opt in.\n//\n\nimport type StateCore from './state_core.ts'\n\nexport default function strip_references (state: StateCore): void {\n  const tokens = state.tokens\n  let last = 0\n\n  for (let curr = 0; curr < tokens.length; curr++) {\n    if (tokens[curr].type === 'reference_definition') continue\n\n    if (curr !== last) { tokens[last] = tokens[curr] }\n\n    last++\n  }\n\n  if (tokens.length !== last) { tokens.length = last }\n}\n","import type StateCore from './state_core.ts'\n\nexport default function inline (state: StateCore): void {\n  const tokens = state.tokens\n\n  // Parse inlines\n  for (let i = 0, l = tokens.length; i < l; i++) {\n    const tok = tokens[i]\n    if (tok.type === 'inline') {\n      state.md.inline.parse(tok.content, state.md, state.env, tok.children!)\n    }\n  }\n}\n","// Replace link-like texts with link nodes.\n//\n// Currently restricted by `md.validateLink()` to http/https/ftp\n//\n\nimport type StateCore from './state_core.ts'\n\nfunction isLinkOpen (str: string) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str: string) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nexport default function linkify (state: StateCore): void {\n  const blockTokens = state.tokens\n\n  if (!state.md.options.linkify) { return }\n\n  for (let j = 0, l = blockTokens.length; j < l; j++) {\n    if (blockTokens[j].type !== 'inline' ||\n        !state.md.linkify.test(blockTokens[j].content)) {\n      continue\n    }\n\n    const tokens = blockTokens[j].children!\n    const replacements: Array<{ index: number, nodes: typeof tokens }> = []\n\n    let htmlLinkLevel = 0\n\n    // We scan from the end, to keep position when new tags added.\n    // Use reversed logic in links start/end match\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      const currentToken = tokens[i]\n\n      // Skip content of markdown links\n      if (currentToken.type === 'link_close') {\n        i--\n        while (tokens[i].level !== currentToken.level && tokens[i].type !== 'link_open') {\n          i--\n        }\n        continue\n      }\n\n      // Skip content of html tag links\n      if (currentToken.type === 'html_inline') {\n        if (isLinkOpen(currentToken.content) && htmlLinkLevel > 0) {\n          htmlLinkLevel--\n        }\n        if (isLinkClose(currentToken.content)) {\n          htmlLinkLevel++\n        }\n      }\n      if (htmlLinkLevel > 0) { continue }\n\n      if (currentToken.type === 'text' && state.md.linkify.test(currentToken.content)) {\n        const text = currentToken.content\n        let links = state.md.linkify.match(text)!\n\n        // Now split string to nodes\n        const nodes = []\n        let level = currentToken.level\n        let lastPos = 0\n\n        // forbid escape sequence at the start of the string,\n        // this avoids http\\://example.com/ from being linkified as\n        // http:<a href=\"//example.com/\">//example.com/</a>\n        if (links.length > 0 &&\n            links[0].index === 0 &&\n            i > 0 &&\n            tokens[i - 1].type === 'text_special') {\n          links = links.slice(1)\n        }\n\n        for (let ln = 0; ln < links.length; ln++) {\n          const url = links[ln].url\n          const fullUrl = state.md.normalizeLink(url)\n          if (!state.md.validateLink(fullUrl)) { continue }\n\n          let urlText = links[ln].text\n\n          // Linkifier might send raw hostnames like \"example.com\", where url\n          // starts with domain name. So we prepend http:// in those cases,\n          // and remove it afterwards.\n          //\n          if (!links[ln].schema) {\n            urlText = state.md.normalizeLinkText(`http://${urlText}`).replace(/^http:\\/\\//, '')\n          } else if (links[ln].schema === 'mailto:' && !/^mailto:/i.test(urlText)) {\n            urlText = state.md.normalizeLinkText(`mailto:${urlText}`).replace(/^mailto:/, '')\n          } else {\n            urlText = state.md.normalizeLinkText(urlText)\n          }\n\n          const pos = links[ln].index\n\n          if (pos > lastPos) {\n            const token = new state.Token('text', '', 0)\n            token.content = text.slice(lastPos, pos)\n            token.level = level\n            nodes.push(token)\n          }\n\n          const token_o = new state.Token('link_open', 'a', 1)\n          token_o.attrs = [['href', fullUrl]]\n          token_o.level = level++\n          token_o.markup = 'linkify'\n          token_o.info = 'auto'\n          nodes.push(token_o)\n\n          const token_t = new state.Token('text', '', 0)\n          token_t.content = urlText\n          token_t.level = level\n          nodes.push(token_t)\n\n          const token_c = new state.Token('link_close', 'a', -1)\n          token_c.level = --level\n          token_c.markup = 'linkify'\n          token_c.info = 'auto'\n          nodes.push(token_c)\n\n          lastPos = links[ln].lastIndex\n        }\n        if (lastPos < text.length) {\n          const token = new state.Token('text', '', 0)\n          token.content = text.slice(lastPos)\n          token.level = level\n          nodes.push(token)\n        }\n\n        replacements.push({ index: i, nodes })\n      }\n    }\n\n    if (replacements.length > 0) {\n      let newTokensLength = tokens.length\n      for (const replacement of replacements) {\n        newTokensLength += replacement.nodes.length - 1\n      }\n\n      const newTokens = new Array<(typeof tokens)[number]>(newTokensLength)\n      let replacementIndex = 0\n      let newTokenIndex = 0\n\n      replacements.reverse()\n\n      for (let i = 0; i < tokens.length; i++) {\n        const replacement = replacements[replacementIndex]\n\n        if (replacement?.index === i) {\n          for (const node of replacement.nodes) {\n            newTokens[newTokenIndex++] = node\n          }\n          replacementIndex++\n        } else {\n          newTokens[newTokenIndex++] = tokens[i]\n        }\n      }\n\n      blockTokens[j].children = newTokens\n    }\n  }\n}\n","// Simple typographic replacements\n//\n// (c) (C) → ©\n// (tm) (TM) → ™\n// (r) (R) → ®\n// +- → ±\n// ... → … (also ?.... → ?.., !.... → !..)\n// ???????? → ???, !!!!! → !!!, `,,` → `,`\n// -- → &ndash;, --- → &mdash;\n//\n\n// TODO:\n// - fractionals 1/2, 1/4, 3/4 -> ½, ¼, ¾\n// - multiplications 2 x 4 -> 2 × 4\n\nimport type StateCore from './state_core.ts'\nimport type Token from '../token.ts'\n\nconst RARE_RE = /\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/\n\n// Workaround for phantomjs - need regex without /g flag,\n// or root check will fail every second time\nconst SCOPED_ABBR_TEST_RE = /\\((c|tm|r)\\)/i\n\nconst SCOPED_ABBR_RE = /\\((c|tm|r)\\)/ig\nconst SCOPED_ABBR: Record<string, string> = {\n  c: '©',\n  r: '®',\n  tm: '™'\n}\n\nfunction replaceFn (match: string, name: string) {\n  return SCOPED_ABBR[name.toLowerCase()]\n}\n\nfunction replace_scoped (inlineTokens: Token[]) {\n  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const token = inlineTokens[i]\n\n    if (token.type === 'text' && !inside_autolink) {\n      token.content = token.content.replace(SCOPED_ABBR_RE, replaceFn)\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++\n    }\n  }\n}\n\nfunction replace_rare (inlineTokens: Token[]) {\n  let inside_autolink = 0\n\n  for (let i = inlineTokens.length - 1; i >= 0; i--) {\n    const token = inlineTokens[i]\n\n    if (token.type === 'text' && !inside_autolink) {\n      if (RARE_RE.test(token.content)) {\n        token.content = token.content\n          .replace(/\\+-/g, '±')\n          // .., ..., ....... -> …\n          // but ?..... & !..... -> ?.. & !..\n          .replace(/\\.{2,}/g, '…').replace(/([?!])…/g, '$1..')\n          .replace(/([?!]){4,}/g, '$1$1$1').replace(/,{2,}/g, ',')\n          // em-dash\n          .replace(/(^|[^-])---(?=[^-]|$)/mg, '$1\\u2014')\n          // en-dash\n          .replace(/(^|\\s)--(?=\\s|$)/mg, '$1\\u2013')\n          .replace(/(^|[^-\\s])--(?=[^-\\s]|$)/mg, '$1\\u2013')\n      }\n    }\n\n    if (token.type === 'link_open' && token.info === 'auto') {\n      inside_autolink--\n    }\n\n    if (token.type === 'link_close' && token.info === 'auto') {\n      inside_autolink++\n    }\n  }\n}\n\nexport default function replace (state: StateCore): void {\n  let blkIdx\n\n  if (!state.md.options.typographer) { return }\n\n  for (blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline') { continue }\n\n    if (SCOPED_ABBR_TEST_RE.test(state.tokens[blkIdx].content)) {\n      replace_scoped(state.tokens[blkIdx].children!)\n    }\n\n    if (RARE_RE.test(state.tokens[blkIdx].content)) {\n      replace_rare(state.tokens[blkIdx].children!)\n    }\n  }\n}\n","// Convert straight quotation marks to typographic ones\n//\n\nimport { isWhiteSpace, isPunctCharCode, isMdAsciiPunct } from '../common/utils.ts'\nimport type Token from '../token.ts'\nimport type StateCore from './state_core.ts'\n\nconst QUOTE_TEST_RE = /['\"]/\nconst QUOTE_RE = /['\"]/g\nconst APOSTROPHE = '\\u2019' /* ’ */\n\ninterface Replacement {\n  pos: number\n  ch: string\n}\n\ntype ReplacementMap = Record<string, Replacement[]>\n\nfunction addReplacement (\n  replacements: ReplacementMap,\n  tokenIdx: number,\n  pos: number,\n  ch: string\n) {\n  if (!replacements[tokenIdx]) {\n    replacements[tokenIdx] = []\n  }\n\n  replacements[tokenIdx].push({ pos, ch })\n}\n\nfunction applyReplacements (str: string, replacements: Replacement[]) {\n  let result = ''\n  let lastPos = 0\n\n  replacements.sort((a, b) => a.pos - b.pos)\n\n  for (let i = 0; i < replacements.length; i++) {\n    const replacement = replacements[i]\n\n    result += str.slice(lastPos, replacement.pos) + replacement.ch\n    lastPos = replacement.pos + 1\n  }\n\n  return result + str.slice(lastPos)\n}\n\nfunction process_inlines (tokens: Token[], state: StateCore) {\n  let j\n\n  const stack = []\n  // token index -> list of replacements in the original token content\n  const replacements: ReplacementMap = {}\n\n  for (let i = 0; i < tokens.length; i++) {\n    const token = tokens[i]\n\n    const thisLevel = tokens[i].level\n\n    for (j = stack.length - 1; j >= 0; j--) {\n      if (stack[j].level <= thisLevel) { break }\n    }\n    stack.length = j + 1\n\n    if (token.type !== 'text') { continue }\n\n    const text = token.content\n    let pos = 0\n    const max = text.length\n\n    /* eslint no-labels:0,block-scoped-var:0 */\n    OUTER:\n    while (pos < max) {\n      QUOTE_RE.lastIndex = pos\n      const t = QUOTE_RE.exec(text)\n      if (!t) { break }\n\n      let canOpen = true\n      let canClose = true\n      pos = t.index + 1\n      const isSingle = (t[0] === \"'\")\n\n      // Find previous character,\n      // default to space if it's the beginning of the line\n      //\n      let lastChar = 0x20\n\n      if (t.index - 1 >= 0) {\n        lastChar = text.charCodeAt(t.index - 1)\n      } else {\n        for (j = i - 1; j >= 0; j--) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // lastChar defaults to 0x20\n          if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          lastChar = tokens[j].content.charCodeAt(tokens[j].content.length - 1)\n          break\n        }\n      }\n\n      // Find next character,\n      // default to space if it's the end of the line\n      //\n      let nextChar = 0x20\n\n      if (pos < max) {\n        nextChar = text.charCodeAt(pos)\n      } else {\n        for (j = i + 1; j < tokens.length; j++) {\n          if (tokens[j].type === 'softbreak' || tokens[j].type === 'hardbreak') break // nextChar defaults to 0x20\n          if (!tokens[j].content) continue // should skip all tokens except 'text', 'html_inline' or 'code_inline'\n\n          nextChar = tokens[j].content.charCodeAt(0)\n          break\n        }\n      }\n\n      const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar)\n      const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar)\n\n      const isLastWhiteSpace = isWhiteSpace(lastChar)\n      const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n      if (isNextWhiteSpace) {\n        canOpen = false\n      } else if (isNextPunctChar) {\n        if (!(isLastWhiteSpace || isLastPunctChar)) {\n          canOpen = false\n        }\n      }\n\n      if (isLastWhiteSpace) {\n        canClose = false\n      } else if (isLastPunctChar) {\n        if (!(isNextWhiteSpace || isNextPunctChar)) {\n          canClose = false\n        }\n      }\n\n      if (nextChar === 0x22 /* \" */ && t[0] === '\"') {\n        if (lastChar >= 0x30 /* 0 */ && lastChar <= 0x39 /* 9 */) {\n          // special case: 1\"\" - count first quote as an inch\n          canClose = canOpen = false\n        }\n      }\n\n      if (canOpen && canClose) {\n        // Replace quotes in the middle of punctuation sequence, but not\n        // in the middle of the words, i.e.:\n        //\n        // 1. foo \" bar \" baz - not replaced\n        // 2. foo-\"-bar-\"-baz - replaced\n        // 3. foo\"bar\"baz     - not replaced\n        //\n        canOpen = isLastPunctChar\n        canClose = isNextPunctChar\n      }\n\n      if (!canOpen && !canClose) {\n        // middle of word\n        if (isSingle) {\n          addReplacement(replacements, i, t.index, APOSTROPHE)\n        }\n        continue\n      }\n\n      if (canClose) {\n        // this could be a closing quote, rewind the stack to get a match\n        for (j = stack.length - 1; j >= 0; j--) {\n          let item = stack[j]\n          if (stack[j].level < thisLevel) { break }\n          if (item.single === isSingle && stack[j].level === thisLevel) {\n            item = stack[j]\n\n            let openQuote\n            let closeQuote\n            if (isSingle) {\n              openQuote = state.md.options.quotes[2]\n              closeQuote = state.md.options.quotes[3]\n            } else {\n              openQuote = state.md.options.quotes[0]\n              closeQuote = state.md.options.quotes[1]\n            }\n\n            addReplacement(replacements, i, t.index, closeQuote)\n            addReplacement(replacements, item.token, item.pos, openQuote)\n\n            stack.length = j\n            continue OUTER\n          }\n        }\n      }\n\n      if (canOpen) {\n        stack.push({\n          token: i,\n          pos: t.index,\n          single: isSingle,\n          level: thisLevel\n        })\n      } else if (canClose && isSingle) {\n        addReplacement(replacements, i, t.index, APOSTROPHE)\n      }\n    }\n  }\n\n  Object.keys(replacements).forEach(function (tokenIdx) {\n    const idx = Number(tokenIdx)\n    tokens[idx].content = applyReplacements(tokens[idx].content, replacements[tokenIdx])\n  })\n}\n\nexport default function smartquotes (state: StateCore): void {\n  /* eslint max-depth:0 */\n  if (!state.md.options.typographer) { return }\n\n  for (let blkIdx = state.tokens.length - 1; blkIdx >= 0; blkIdx--) {\n    if (state.tokens[blkIdx].type !== 'inline' ||\n        !QUOTE_TEST_RE.test(state.tokens[blkIdx].content)) {\n      continue\n    }\n\n    process_inlines(state.tokens[blkIdx].children!, state)\n  }\n}\n","// Join raw text tokens with the rest of the text\n//\n// This is set as a separate rule to provide an opportunity for plugins\n// to run text replacements after text join, but before escape join.\n//\n// For example, `\\:)` shouldn't be replaced with an emoji.\n//\n\nimport type StateCore from './state_core.ts'\nimport type Token from '../token.ts'\n\nfunction join_alt (tokens: Token[]): void {\n  let curr, last\n  const max = tokens.length\n\n  for (curr = 0; curr < max; curr++) {\n    if (tokens[curr].type === 'text_special') tokens[curr].type = 'text'\n  }\n\n  for (curr = last = 0; curr < max; curr++) {\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr] }\n\n      last++\n    }\n  }\n\n  if (curr !== last) tokens.length = last\n}\n\nexport default function text_join (state: StateCore): void {\n  let curr, last\n  const blockTokens = state.tokens\n  const l = blockTokens.length\n\n  for (let j = 0; j < l; j++) {\n    if (blockTokens[j].type !== 'inline') continue\n\n    const tokens = blockTokens[j].children!\n    const max = tokens.length\n\n    for (curr = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text_special') tokens[curr].type = 'text'\n\n      // image `alt` is parsed into its own token tree\n      if (tokens[curr].children) join_alt(tokens[curr].children!)\n    }\n\n    for (curr = last = 0; curr < max; curr++) {\n      if (tokens[curr].type === 'text' &&\n          curr + 1 < max &&\n          tokens[curr + 1].type === 'text') {\n        // collapse two adjacent text nodes\n        tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n      } else {\n        if (curr !== last) { tokens[last] = tokens[curr] }\n\n        last++\n      }\n    }\n\n    if (curr !== last) tokens.length = last\n  }\n}\n","import Ruler from './ruler.ts'\nimport StateCore from './rules_core/state_core.ts'\n\nimport r_normalize from './rules_core/normalize.ts'\nimport r_block from './rules_core/block.ts'\nimport r_strip_references from './rules_core/strip_references.ts'\nimport r_inline from './rules_core/inline.ts'\nimport r_linkify from './rules_core/linkify.ts'\nimport r_replacements from './rules_core/replacements.ts'\nimport r_smartquotes from './rules_core/smartquotes.ts'\nimport r_text_join from './rules_core/text_join.ts'\n\nconst _rules: Array<[\n  name: string,\n  rule: (state: StateCore) => void\n]> = [\n  ['normalize', r_normalize],\n  ['block', r_block],\n  ['strip_references', r_strip_references],\n  ['inline', r_inline],\n  ['linkify', r_linkify],\n  ['replacements', r_replacements],\n  ['smartquotes', r_smartquotes],\n  // `text_join` finds `text_special` tokens (for escape sequences)\n  // and joins them with the rest of the text\n  ['text_join', r_text_join]\n]\n\n/**\n * Top-level rules executor. Glues block/inline parsers and does intermediate\n * transformations.\n */\nclass ParserCore {\n  /**\n   * {@link Ruler} instance. Keep configuration of core rules.\n   */\n  ruler = new Ruler<[StateCore], void>()\n\n  State = StateCore\n\n  constructor () {\n    for (let i = 0; i < _rules.length; i++) {\n      this.ruler.push(_rules[i][0], _rules[i][1])\n    }\n  }\n\n  /**\n   * Executes core chain rules.\n   */\n  process (state: StateCore): void {\n    const rules = this.ruler.getRules('')\n\n    for (let i = 0, l = rules.length; i < l; i++) {\n      rules[i](state)\n    }\n  }\n}\n\nexport default ParserCore\n","import Token from '../token.ts'\nimport { isSpace } from '../common/utils.ts'\nimport type MarkdownIt from '../markdownit.ts'\nimport type { Env } from '../types.ts'\n\n/** Mutable state passed to block rules while tokenizing a source document. */\nclass StateBlock {\n  declare src: string\n  declare md: MarkdownIt\n  declare env: Env\n  declare tokens: Token[]\n\n  bMarks: number[] = [] // line begin offsets for fast jumps\n  eMarks: number[] = [] // line end offsets for fast jumps\n  tShift: number[] = [] // offsets of the first non-space characters (tabs not expanded)\n  sCount: number[] = [] // indents for each line (tabs expanded)\n\n  // An amount of virtual spaces (tabs expanded) between beginning\n  // of each line (bMarks) and real beginning of that line.\n  //\n  // It exists only as a hack because blockquotes override bMarks\n  // losing information in the process.\n  //\n  // It's used only when expanding tabs, you can think about it as\n  // an initial tab length, e.g. bsCount=21 applied to string `\\t123`\n  // means first tab should be expanded to 4-21%4 === 3 spaces.\n  //\n  bsCount: number[] = []\n\n  // block parser variables\n\n  // required block content indent (for example, if we are\n  // inside a list, it would be positioned after list marker)\n  blkIndent = 0\n  line = 0 // line index in src\n  lineMax = 0 // lines count\n  tight = false // loose/tight mode for lists\n  listIndent = -1 // indent of the current list block (-1 if there isn't any)\n\n  // can be 'blockquote', 'list', 'root', 'paragraph' or 'reference'\n  // used in lists to determine if they interrupt a paragraph\n  parentType = 'root'\n\n  level = 0\n\n  // re-export Token class to use in block rules\n  Token = Token\n\n  constructor (src: string, md: MarkdownIt, env: Env, tokens: Token[]) {\n    this.src = src\n\n    // link to parser instance\n    this.md = md\n\n    this.env = env\n\n    //\n    // Internal state vartiables\n    //\n\n    this.tokens = tokens\n\n    // Create caches\n    // Generate markers.\n    const s = this.src\n\n    for (let start = 0, pos = 0, indent = 0, offset = 0, len = s.length, indent_found = false; pos < len; pos++) {\n      const ch = s.charCodeAt(pos)\n\n      if (!indent_found) {\n        if (isSpace(ch)) {\n          indent++\n\n          if (ch === 0x09) {\n            offset += 4 - offset % 4\n          } else {\n            offset++\n          }\n          continue\n        } else {\n          indent_found = true\n        }\n      }\n\n      if (ch === 0x0A || pos === len - 1) {\n        if (ch !== 0x0A) { pos++ }\n        this.bMarks.push(start)\n        this.eMarks.push(pos)\n        this.tShift.push(indent)\n        this.sCount.push(offset)\n        this.bsCount.push(0)\n\n        indent_found = false\n        indent = 0\n        offset = 0\n        start = pos + 1\n      }\n    }\n\n    // Push fake entry to simplify cache bounds checks\n    this.bMarks.push(s.length)\n    this.eMarks.push(s.length)\n    this.tShift.push(0)\n    this.sCount.push(0)\n    this.bsCount.push(0)\n\n    this.lineMax = this.bMarks.length - 1 // don't count last fake line\n  }\n\n  // Push new token to \"stream\".\n  //\n  push (type: string, tag: string, nesting: -1 | 0 | 1): Token {\n    const token = new Token(type, tag, nesting)\n    token.block = true\n\n    if (nesting < 0) this.level-- // closing tag\n    token.level = this.level\n    if (nesting > 0) this.level++ // opening tag\n\n    this.tokens.push(token)\n    return token\n  }\n\n  isEmpty (line: number): boolean {\n    return this.bMarks[line] + this.tShift[line] >= this.eMarks[line]\n  }\n\n  skipEmptyLines (from: number): number {\n    for (let max = this.lineMax; from < max; from++) {\n      if (this.bMarks[from] + this.tShift[from] < this.eMarks[from]) {\n        break\n      }\n    }\n    return from\n  }\n\n  // Skip spaces from given position.\n  skipSpaces (pos: number): number {\n    for (let max = this.src.length; pos < max; pos++) {\n      const ch = this.src.charCodeAt(pos)\n      if (!isSpace(ch)) { break }\n    }\n    return pos\n  }\n\n  // Skip spaces from given position in reverse.\n  skipSpacesBack (pos: number, min: number): number {\n    if (pos <= min) { return pos }\n\n    while (pos > min) {\n      if (!isSpace(this.src.charCodeAt(--pos))) { return pos + 1 }\n    }\n    return pos\n  }\n\n  // Skip char codes from given position\n  skipChars (pos: number, code: number): number {\n    for (let max = this.src.length; pos < max; pos++) {\n      if (this.src.charCodeAt(pos) !== code) { break }\n    }\n    return pos\n  }\n\n  // Skip char codes reverse from given position - 1\n  skipCharsBack (pos: number, code: number, min: number): number {\n    if (pos <= min) { return pos }\n\n    while (pos > min) {\n      if (code !== this.src.charCodeAt(--pos)) { return pos + 1 }\n    }\n    return pos\n  }\n\n  // cut lines range from source.\n  getLines (begin: number, end: number, indent: number, keepLastLF: boolean): string {\n    if (begin >= end) {\n      return ''\n    }\n\n    const queue = new Array(end - begin)\n\n    for (let i = 0, line = begin; line < end; line++, i++) {\n      let lineIndent = 0\n      const lineStart = this.bMarks[line]\n      let first = lineStart\n      let last\n\n      if (line + 1 < end || keepLastLF) {\n        // No need for bounds check because we have fake entry on tail.\n        last = this.eMarks[line] + 1\n      } else {\n        last = this.eMarks[line]\n      }\n\n      while (first < last && lineIndent < indent) {\n        const ch = this.src.charCodeAt(first)\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            lineIndent += 4 - (lineIndent + this.bsCount[line]) % 4\n          } else {\n            lineIndent++\n          }\n        } else if (first - lineStart < this.tShift[line]) {\n          // patched tShift masked characters to look like spaces (blockquotes, list markers)\n          lineIndent++\n        } else {\n          break\n        }\n\n        first++\n      }\n\n      if (lineIndent > indent) {\n        // partially expanding tabs in code blocks, e.g '\\t\\tfoobar'\n        // with indent=2 becomes '  \\tfoobar'\n        queue[i] = new Array(lineIndent - indent + 1).join(' ') + this.src.slice(first, last)\n      } else {\n        queue[i] = this.src.slice(first, last)\n      }\n    }\n\n    return queue.join('')\n  }\n}\n\nexport default StateBlock\n","// GFM table, https://github.github.com/gfm/#tables-extension-\n\nimport { isSpace } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\n// Limit the amount of empty autocompleted cells in a table,\n// see https://github.com/markdown-it/markdown-it/issues/1000,\n//\n// Both pulldown-cmark and commonmark-hs limit the number of cells this way to ~200k.\n// We set it to 65k, which can expand user input by a factor of x370\n// (256x256 square is 1.8kB expanded into 650kB).\nconst MAX_AUTOCOMPLETED_CELLS = 0x10000\n\nfunction getLine (state: StateBlock, line: number) {\n  const pos = state.bMarks[line] + state.tShift[line]\n  const max = state.eMarks[line]\n\n  return state.src.slice(pos, max)\n}\n\nfunction escapedSplit (str: string) {\n  const result = []\n  const max = str.length\n\n  let pos = 0\n  let ch = str.charCodeAt(pos)\n  let isEscaped = false\n  let lastPos = 0\n  let current = ''\n\n  while (pos < max) {\n    if (ch === 0x7c/* | */) {\n      if (!isEscaped) {\n        // pipe separating cells, '|'\n        result.push(current + str.substring(lastPos, pos))\n        current = ''\n        lastPos = pos + 1\n      } else {\n        // escaped pipe, '\\|'\n        current += str.substring(lastPos, pos - 1)\n        lastPos = pos\n      }\n    }\n\n    isEscaped = (ch === 0x5c/* \\ */)\n    pos++\n\n    ch = str.charCodeAt(pos)\n  }\n\n  result.push(current + str.substring(lastPos))\n\n  return result\n}\n\nexport default function table (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  // should have at least two lines\n  if (startLine + 2 > endLine) { return false }\n\n  let nextLine = startLine + 1\n\n  if (state.sCount[nextLine] < state.blkIndent) { return false }\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n  // first character of the second line should be '|', '-', ':',\n  // and no other characters are allowed but spaces;\n  // basically, this is the equivalent of /^[-:|][-:|\\s]*$/ regexp\n\n  let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const firstCh = state.src.charCodeAt(pos++)\n  if (firstCh !== 0x7C/* | */ && firstCh !== 0x2D/* - */ && firstCh !== 0x3A/* : */) { return false }\n\n  if (pos >= state.eMarks[nextLine]) { return false }\n\n  const secondCh = state.src.charCodeAt(pos++)\n  if (secondCh !== 0x7C/* | */ && secondCh !== 0x2D/* - */ && secondCh !== 0x3A/* : */ && !isSpace(secondCh)) {\n    return false\n  }\n\n  // if first character is '-', then second character must not be a space\n  // (due to parsing ambiguity with list)\n  if (firstCh === 0x2D/* - */ && isSpace(secondCh)) { return false }\n\n  while (pos < state.eMarks[nextLine]) {\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch !== 0x7C/* | */ && ch !== 0x2D/* - */ && ch !== 0x3A/* : */ && !isSpace(ch)) { return false }\n\n    pos++\n  }\n\n  let lineText = getLine(state, startLine + 1)\n  let columns = lineText.split('|')\n  const aligns = []\n  for (let i = 0; i < columns.length; i++) {\n    const t = columns[i].trim()\n    if (!t) {\n      // allow empty columns before and after table, but not in between columns;\n      // e.g. allow ` |---| `, disallow ` ---||--- `\n      if (i === 0 || i === columns.length - 1) {\n        continue\n      } else {\n        return false\n      }\n    }\n\n    if (!/^:?-+:?$/.test(t)) { return false }\n    if (t.charCodeAt(t.length - 1) === 0x3A/* : */) {\n      aligns.push(t.charCodeAt(0) === 0x3A/* : */ ? 'center' : 'right')\n    } else if (t.charCodeAt(0) === 0x3A/* : */) {\n      aligns.push('left')\n    } else {\n      aligns.push('')\n    }\n  }\n\n  lineText = getLine(state, startLine).trim()\n  if (lineText.indexOf('|') === -1) { return false }\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n  columns = escapedSplit(lineText)\n  if (columns.length && columns[0] === '') columns.shift()\n  if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n  // header row will define an amount of columns in the entire table,\n  // and align row should be exactly the same (the rest of the rows can differ)\n  const columnCount = columns.length\n  if (columnCount === 0 || columnCount !== aligns.length) { return false }\n\n  if (silent) { return true }\n\n  const oldParentType = state.parentType\n  state.parentType = 'table'\n\n  // use 'blockquote' lists for termination because it's\n  // the most similar to tables\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const token_to = state.push('table_open', 'table', 1)\n  const tableLines: [number, number] = [startLine, 0]\n  token_to.map = tableLines\n\n  const token_tho = state.push('thead_open', 'thead', 1)\n  token_tho.map = [startLine, startLine + 1]\n\n  const token_htro = state.push('tr_open', 'tr', 1)\n  token_htro.map = [startLine, startLine + 1]\n\n  for (let i = 0; i < columns.length; i++) {\n    const token_ho = state.push('th_open', 'th', 1)\n    if (aligns[i]) {\n      token_ho.attrs = [['style', `text-align:${aligns[i]}`]]\n    }\n\n    const token_il = state.push('inline', '', 0)\n    token_il.content = columns[i].trim()\n    token_il.children = []\n\n    state.push('th_close', 'th', -1)\n  }\n\n  state.push('tr_close', 'tr', -1)\n  state.push('thead_close', 'thead', -1)\n\n  let tbodyLines: [number, number] | undefined\n  let autocompletedCells = 0\n\n  for (nextLine = startLine + 2; nextLine < endLine; nextLine++) {\n    if (state.sCount[nextLine] < state.blkIndent) { break }\n\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n\n    if (terminate) { break }\n    lineText = getLine(state, nextLine).trim()\n    if (!lineText) { break }\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n    columns = escapedSplit(lineText)\n    if (columns.length && columns[0] === '') columns.shift()\n    if (columns.length && columns[columns.length - 1] === '') columns.pop()\n\n    // note: autocomplete count can be negative if user specifies more columns than header,\n    // but that does not affect intended use (which is limiting expansion)\n    autocompletedCells += columnCount - columns.length\n    if (autocompletedCells > MAX_AUTOCOMPLETED_CELLS) { break }\n\n    if (nextLine === startLine + 2) {\n      const token_tbo = state.push('tbody_open', 'tbody', 1)\n      token_tbo.map = tbodyLines = [startLine + 2, 0]\n    }\n\n    const token_tro = state.push('tr_open', 'tr', 1)\n    token_tro.map = [nextLine, nextLine + 1]\n\n    for (let i = 0; i < columnCount; i++) {\n      const token_tdo = state.push('td_open', 'td', 1)\n      if (aligns[i]) {\n        token_tdo.attrs = [['style', `text-align:${aligns[i]}`]]\n      }\n\n      const token_il = state.push('inline', '', 0)\n      token_il.content = columns[i] ? columns[i].trim() : ''\n      token_il.children = []\n\n      state.push('td_close', 'td', -1)\n    }\n    state.push('tr_close', 'tr', -1)\n  }\n\n  if (tbodyLines) {\n    state.push('tbody_close', 'tbody', -1)\n    tbodyLines[1] = nextLine\n  }\n\n  state.push('table_close', 'table', -1)\n  tableLines[1] = nextLine\n\n  state.parentType = oldParentType\n  state.line = nextLine\n  return true\n}\n","// Code block (4 spaces padded)\n\nimport type StateBlock from './state_block.ts'\n\nexport default function code (state: StateBlock, startLine: number, endLine: number/*, silent */): boolean {\n  if (state.sCount[startLine] - state.blkIndent < 4) { return false }\n\n  let nextLine = startLine + 1\n  let last = nextLine\n\n  while (nextLine < endLine) {\n    if (state.isEmpty(nextLine)) {\n      nextLine++\n      continue\n    }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      nextLine++\n      last = nextLine\n      continue\n    }\n    break\n  }\n\n  state.line = last\n\n  const token = state.push('code_block', 'code', 0)\n  token.content = state.getLines(startLine, last, 4 + state.blkIndent, false) + '\\n'\n  token.map = [startLine, state.line]\n\n  return true\n}\n","// fences (``` lang, ~~~ lang)\n\nimport type StateBlock from './state_block.ts'\n\nexport default function fence (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (pos + 3 > max) { return false }\n\n  const marker = state.src.charCodeAt(pos)\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false\n  }\n\n  // scan marker length\n  let mem = pos\n  pos = state.skipChars(pos, marker)\n\n  let len = pos - mem\n\n  if (len < 3) { return false }\n\n  const markup = state.src.slice(mem, pos)\n  const params = state.src.slice(pos, max)\n\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true }\n\n  // search end of block\n  let nextLine = startLine\n  let haveEndMarker = false\n\n  for (;;) {\n    nextLine++\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n    max = state.eMarks[nextLine]\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue\n    }\n\n    pos = state.skipChars(pos, marker)\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos)\n\n    if (pos < max) { continue }\n\n    haveEndMarker = true\n    // found!\n    break\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine]\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n  const token = state.push('fence', 'code', 0)\n  token.info = params\n  token.content = state.getLines(startLine + 1, nextLine, len, true)\n  token.markup = markup\n  token.map = [startLine, state.line]\n\n  return true\n}\n","// Block quotes\n\nimport { isSpace } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\nexport default function blockquote (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  const oldLineMax = state.lineMax\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  // check the block quote marker\n  if (state.src.charCodeAt(pos) !== 0x3E/* > */) { return false }\n\n  // we know that it's going to be a valid blockquote,\n  // so no point trying to find the end of it in silent mode\n  if (silent) { return true }\n\n  const oldBMarks = []\n  const oldBSCount = []\n  const oldSCount = []\n  const oldTShift = []\n\n  const terminatorRules = state.md.block.ruler.getRules('blockquote')\n\n  const oldParentType = state.parentType\n  state.parentType = 'blockquote'\n  let lastLineEmpty = false\n  let nextLine\n\n  // Search the end of the block\n  //\n  // Block ends with either:\n  //  1. an empty line outside:\n  //     ```\n  //     > test\n  //\n  //     ```\n  //  2. an empty line inside:\n  //     ```\n  //     >\n  //     test\n  //     ```\n  //  3. another tag:\n  //     ```\n  //     > test\n  //      - - -\n  //     ```\n  for (nextLine = startLine; nextLine < endLine; nextLine++) {\n    // check if it's outdented, i.e. it's inside list item and indented\n    // less than said list item:\n    //\n    // ```\n    // 1. anything\n    //    > current blockquote\n    // 2. checking this line\n    // ```\n    const isOutdented = state.sCount[nextLine] < state.blkIndent\n\n    pos = state.bMarks[nextLine] + state.tShift[nextLine]\n    max = state.eMarks[nextLine]\n\n    if (pos >= max) {\n      // Case 1: line is not inside the blockquote, and this line is empty.\n      break\n    }\n\n    if (state.src.charCodeAt(pos++) === 0x3E/* > */ && !isOutdented) {\n      // This line is inside the blockquote.\n\n      // set offset past spaces and \">\"\n      let initial = state.sCount[nextLine] + 1\n      let spaceAfterMarker\n      let adjustTab\n\n      // skip one optional space after '>'\n      if (state.src.charCodeAt(pos) === 0x20 /* space */) {\n        // ' >   test '\n        //     ^ -- position start of line here:\n        pos++\n        initial++\n        adjustTab = false\n        spaceAfterMarker = true\n      } else if (state.src.charCodeAt(pos) === 0x09 /* tab */) {\n        spaceAfterMarker = true\n\n        if ((state.bsCount[nextLine] + initial) % 4 === 3) {\n          // '  >\\t  test '\n          //       ^ -- position start of line here (tab has width===1)\n          pos++\n          initial++\n          adjustTab = false\n        } else {\n          // ' >\\t  test '\n          //    ^ -- position start of line here + shift bsCount slightly\n          //         to make extra space appear\n          adjustTab = true\n        }\n      } else {\n        spaceAfterMarker = false\n      }\n\n      let offset = initial\n      oldBMarks.push(state.bMarks[nextLine])\n      state.bMarks[nextLine] = pos\n\n      while (pos < max) {\n        const ch = state.src.charCodeAt(pos)\n\n        if (isSpace(ch)) {\n          if (ch === 0x09) {\n            offset += 4 - (offset + state.bsCount[nextLine] + (adjustTab ? 1 : 0)) % 4\n          } else {\n            offset++\n          }\n        } else {\n          break\n        }\n\n        pos++\n      }\n\n      lastLineEmpty = pos >= max\n\n      oldBSCount.push(state.bsCount[nextLine])\n      state.bsCount[nextLine] = state.sCount[nextLine] + 1 + (spaceAfterMarker ? 1 : 0)\n\n      oldSCount.push(state.sCount[nextLine])\n      state.sCount[nextLine] = offset - initial\n\n      oldTShift.push(state.tShift[nextLine])\n      state.tShift[nextLine] = pos - state.bMarks[nextLine]\n      continue\n    }\n\n    // Case 2: line is not inside the blockquote, and the last line was empty.\n    if (lastLineEmpty) { break }\n\n    // Case 3: another tag found.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n\n    if (terminate) {\n      // Quirk to enforce \"hard termination mode\" for paragraphs;\n      // normally if you call `tokenize(state, startLine, nextLine)`,\n      // paragraphs will look below nextLine for paragraph continuation,\n      // but if blockquote is terminated by another tag, they shouldn't\n      state.lineMax = nextLine\n\n      if (state.blkIndent !== 0) {\n        // state.blkIndent was non-zero, we now set it to zero,\n        // so we need to re-calculate all offsets to appear as\n        // if indent wasn't changed\n        oldBMarks.push(state.bMarks[nextLine])\n        oldBSCount.push(state.bsCount[nextLine])\n        oldTShift.push(state.tShift[nextLine])\n        oldSCount.push(state.sCount[nextLine])\n        state.sCount[nextLine] -= state.blkIndent\n      }\n\n      break\n    }\n\n    oldBMarks.push(state.bMarks[nextLine])\n    oldBSCount.push(state.bsCount[nextLine])\n    oldTShift.push(state.tShift[nextLine])\n    oldSCount.push(state.sCount[nextLine])\n\n    // A negative indentation means that this is a paragraph continuation\n    //\n    state.sCount[nextLine] = -1\n  }\n\n  const oldIndent = state.blkIndent\n  state.blkIndent = 0\n\n  const token_o = state.push('blockquote_open', 'blockquote', 1)\n  token_o.markup = '>'\n  const lines: [number, number] = [startLine, 0]\n  token_o.map = lines\n\n  state.md.block.tokenize(state, startLine, nextLine)\n\n  const token_c = state.push('blockquote_close', 'blockquote', -1)\n  token_c.markup = '>'\n\n  state.lineMax = oldLineMax\n  state.parentType = oldParentType\n  lines[1] = state.line\n\n  // Restore original tShift; this might not be necessary since the parser\n  // has already been here, but just to make sure we can do that.\n  for (let i = 0; i < oldTShift.length; i++) {\n    state.bMarks[i + startLine] = oldBMarks[i]\n    state.tShift[i + startLine] = oldTShift[i]\n    state.sCount[i + startLine] = oldSCount[i]\n    state.bsCount[i + startLine] = oldBSCount[i]\n  }\n  state.blkIndent = oldIndent\n\n  return true\n}\n","// Horizontal rule\n\nimport { isSpace } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\nexport default function hr (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  const max = state.eMarks[startLine]\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  const marker = state.src.charCodeAt(pos++)\n\n  // Check hr marker\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x5F/* _ */) {\n    return false\n  }\n\n  // markers can be mixed with spaces, but there should be at least 3 of them\n\n  let cnt = 1\n  while (pos < max) {\n    const ch = state.src.charCodeAt(pos++)\n    if (ch !== marker && !isSpace(ch)) { return false }\n    if (ch === marker) { cnt++ }\n  }\n\n  if (cnt < 3) { return false }\n\n  if (silent) { return true }\n\n  state.line = startLine + 1\n\n  const token = state.push('hr', 'hr', 0)\n  token.map = [startLine, state.line]\n  token.markup = Array(cnt + 1).join(String.fromCharCode(marker))\n\n  return true\n}\n","// Lists\n\nimport { isSpace } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\n// Search `[-+*][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipBulletListMarker (state: StateBlock, startLine: number) {\n  const max = state.eMarks[startLine]\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n\n  const marker = state.src.charCodeAt(pos++)\n  // Check bullet\n  if (marker !== 0x2A/* * */ &&\n      marker !== 0x2D/* - */ &&\n      marker !== 0x2B/* + */) {\n    return -1\n  }\n\n  if (pos < max) {\n    const ch = state.src.charCodeAt(pos)\n\n    if (!isSpace(ch)) {\n      // \" -test \" - is not a list item\n      return -1\n    }\n  }\n\n  return pos\n}\n\n// Search `\\d+[.)][\\n ]`, returns next pos after marker on success\n// or -1 on fail.\nfunction skipOrderedListMarker (state: StateBlock, startLine: number) {\n  const start = state.bMarks[startLine] + state.tShift[startLine]\n  const max = state.eMarks[startLine]\n  let pos = start\n\n  // List marker should have at least 2 chars (digit + dot)\n  if (pos + 1 >= max) { return -1 }\n\n  let ch = state.src.charCodeAt(pos++)\n\n  if (ch < 0x30/* 0 */ || ch > 0x39/* 9 */) { return -1 }\n\n  for (;;) {\n    // EOL -> fail\n    if (pos >= max) { return -1 }\n\n    ch = state.src.charCodeAt(pos++)\n\n    if (ch >= 0x30/* 0 */ && ch <= 0x39/* 9 */) {\n      // List marker should have no more than 9 digits\n      // (prevents integer overflow in browsers)\n      if (pos - start >= 10) { return -1 }\n\n      continue\n    }\n\n    // found valid marker\n    if (ch === 0x29/* ) */ || ch === 0x2e/* . */) {\n      break\n    }\n\n    return -1\n  }\n\n  if (pos < max) {\n    ch = state.src.charCodeAt(pos)\n\n    if (!isSpace(ch)) {\n      // \" 1.test \" - is not a list item\n      return -1\n    }\n  }\n  return pos\n}\n\nfunction markTightParagraphs (state: StateBlock, idx: number) {\n  const level = state.level + 2\n\n  for (let i = idx + 2, l = state.tokens.length - 2; i < l; i++) {\n    if (state.tokens[i].level === level && state.tokens[i].type === 'paragraph_open') {\n      state.tokens[i + 2].hidden = true\n      state.tokens[i].hidden = true\n      i += 2\n    }\n  }\n}\n\nexport default function list (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  let max, pos, start, token\n  let nextLine = startLine\n  let tight = true\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[nextLine] - state.blkIndent >= 4) { return false }\n\n  // Special case:\n  //  - item 1\n  //   - item 2\n  //    - item 3\n  //     - item 4\n  //      - this one is a paragraph continuation\n  if (state.listIndent >= 0 &&\n      state.sCount[nextLine] - state.listIndent >= 4 &&\n      state.sCount[nextLine] < state.blkIndent) {\n    return false\n  }\n\n  let isTerminatingParagraph = false\n\n  // limit conditions when list can interrupt\n  // a paragraph (validation mode only)\n  if (silent && state.parentType === 'paragraph') {\n    // Next list item should still terminate previous list item;\n    //\n    // This code can fail if plugins use blkIndent as well as lists,\n    // but I hope the spec gets fixed long before that happens.\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      isTerminatingParagraph = true\n    }\n  }\n\n  // Detect list type and position after marker\n  let isOrdered\n  let markerValue\n  let posAfterMarker\n  if ((posAfterMarker = skipOrderedListMarker(state, nextLine)) >= 0) {\n    isOrdered = true\n    start = state.bMarks[nextLine] + state.tShift[nextLine]\n    markerValue = Number(state.src.slice(start, posAfterMarker - 1))\n\n    // If we're starting a new ordered list right after\n    // a paragraph, it should start with 1.\n    if (isTerminatingParagraph && markerValue !== 1) return false\n  } else if ((posAfterMarker = skipBulletListMarker(state, nextLine)) >= 0) {\n    isOrdered = false\n  } else {\n    return false\n  }\n\n  // If we're starting a new unordered list right after\n  // a paragraph, first line should not be empty.\n  if (isTerminatingParagraph) {\n    if (state.skipSpaces(posAfterMarker) >= state.eMarks[nextLine]) return false\n  }\n\n  // For validation mode we can terminate immediately\n  if (silent) { return true }\n\n  // We should terminate list on style change. Remember first one to compare.\n  const markerCharCode = state.src.charCodeAt(posAfterMarker - 1)\n\n  // Start list\n  const listTokIdx = state.tokens.length\n\n  if (isOrdered) {\n    token = state.push('ordered_list_open', 'ol', 1)\n    if (markerValue !== 1) {\n      token.attrs = [['start', markerValue!]]\n    }\n  } else {\n    token = state.push('bullet_list_open', 'ul', 1)\n  }\n\n  const listLines: [number, number] = [nextLine, 0]\n  token.map = listLines\n  token.markup = String.fromCharCode(markerCharCode)\n\n  //\n  // Iterate list items\n  //\n\n  let prevEmptyEnd = false\n  const terminatorRules = state.md.block.ruler.getRules('list')\n\n  const oldParentType = state.parentType\n  state.parentType = 'list'\n\n  while (nextLine < endLine) {\n    pos = posAfterMarker\n    max = state.eMarks[nextLine]\n\n    const initial = state.sCount[nextLine] + posAfterMarker - (state.bMarks[nextLine] + state.tShift[nextLine])\n    let offset = initial\n\n    while (pos < max) {\n      const ch = state.src.charCodeAt(pos)\n\n      if (ch === 0x09) {\n        offset += 4 - (offset + state.bsCount[nextLine]) % 4\n      } else if (ch === 0x20) {\n        offset++\n      } else {\n        break\n      }\n\n      pos++\n    }\n\n    const contentStart = pos\n    let indentAfterMarker\n\n    if (contentStart >= max) {\n      // trimming space in \"-    \\n  3\" case, indent is 1 here\n      indentAfterMarker = 1\n    } else {\n      indentAfterMarker = offset - initial\n    }\n\n    // If we have more than 4 spaces, the indent is 1\n    // (the rest is just indented code block)\n    if (indentAfterMarker > 4) { indentAfterMarker = 1 }\n\n    // \"  -  test\"\n    //  ^^^^^ - calculating total length of this thing\n    const indent = initial + indentAfterMarker\n\n    // Run subparser & write tokens\n    token = state.push('list_item_open', 'li', 1)\n    token.markup = String.fromCharCode(markerCharCode)\n    const itemLines: [number, number] = [nextLine, 0]\n    token.map = itemLines\n    if (isOrdered) {\n      token.info = state.src.slice(start, posAfterMarker - 1)\n    }\n\n    // change current state, then restore it after parser subcall\n    const oldTight = state.tight\n    const oldTShift = state.tShift[nextLine]\n    const oldSCount = state.sCount[nextLine]\n\n    //  - example list\n    // ^ listIndent position will be here\n    //   ^ blkIndent position will be here\n    //\n    const oldListIndent = state.listIndent\n    state.listIndent = state.blkIndent\n    state.blkIndent = indent\n\n    state.tight = true\n    state.tShift[nextLine] = contentStart - state.bMarks[nextLine]\n    state.sCount[nextLine] = offset\n\n    if (contentStart >= max && state.isEmpty(nextLine + 1)) {\n      // workaround for this case\n      // (list item is empty, list terminates before \"foo\"):\n      // ~~~~~~~~\n      //   -\n      //\n      //     foo\n      // ~~~~~~~~\n      state.line = Math.min(state.line + 2, endLine)\n    } else {\n      state.md.block.tokenize(state, nextLine, endLine)\n    }\n\n    // If any of list item is tight, mark list as tight\n    if (!state.tight || prevEmptyEnd) {\n      tight = false\n    }\n    // Item become loose if finish with empty line,\n    // but we should filter last element, because it means list finish\n    prevEmptyEnd = (state.line - nextLine) > 1 && state.isEmpty(state.line - 1)\n\n    state.blkIndent = state.listIndent\n    state.listIndent = oldListIndent\n    state.tShift[nextLine] = oldTShift\n    state.sCount[nextLine] = oldSCount\n    state.tight = oldTight\n\n    token = state.push('list_item_close', 'li', -1)\n    token.markup = String.fromCharCode(markerCharCode)\n\n    nextLine = state.line\n    itemLines[1] = nextLine\n\n    if (nextLine >= endLine) { break }\n\n    //\n    // Try to check if list is terminated or continued.\n    //\n    if (state.sCount[nextLine] < state.blkIndent) { break }\n\n    // if it's indented more than 3 spaces, it should be a code block\n    if (state.sCount[nextLine] - state.blkIndent >= 4) { break }\n\n    // fail if terminating block found\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n\n    // fail if list has another type\n    if (isOrdered) {\n      posAfterMarker = skipOrderedListMarker(state, nextLine)\n      if (posAfterMarker < 0) { break }\n      start = state.bMarks[nextLine] + state.tShift[nextLine]\n    } else {\n      posAfterMarker = skipBulletListMarker(state, nextLine)\n      if (posAfterMarker < 0) { break }\n    }\n\n    if (markerCharCode !== state.src.charCodeAt(posAfterMarker - 1)) { break }\n  }\n\n  // Finalize list\n  if (isOrdered) {\n    token = state.push('ordered_list_close', 'ol', -1)\n  } else {\n    token = state.push('bullet_list_close', 'ul', -1)\n  }\n  token.markup = String.fromCharCode(markerCharCode)\n\n  listLines[1] = nextLine\n  state.line = nextLine\n\n  state.parentType = oldParentType\n\n  // mark paragraphs tight if needed\n  if (tight) {\n    markTightParagraphs(state, listTokIdx)\n  }\n\n  return true\n}\n","import { isSpace, normalizeReference } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\nexport default function reference (state: StateBlock, startLine: number, _endLine: number, silent: boolean): boolean {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n  let nextLine = startLine + 1\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (state.src.charCodeAt(pos) !== 0x5B/* [ */) { return false }\n\n  function getNextLine (nextLine: number) {\n    const endLine = state.lineMax\n\n    if (nextLine >= endLine || state.isEmpty(nextLine)) {\n      // empty line or end of input\n      return null\n    }\n\n    let isContinuation = false\n\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { isContinuation = true }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { isContinuation = true }\n\n    if (!isContinuation) {\n      const terminatorRules = state.md.block.ruler.getRules('reference')\n      const oldParentType = state.parentType\n      state.parentType = 'reference'\n\n      // Some tags can terminate paragraph without empty line.\n      let terminate = false\n      for (let i = 0, l = terminatorRules.length; i < l; i++) {\n        if (terminatorRules[i](state, nextLine, endLine, true)) {\n          terminate = true\n          break\n        }\n      }\n\n      state.parentType = oldParentType\n      if (terminate) {\n        // terminated by another block\n        return null\n      }\n    }\n\n    const pos = state.bMarks[nextLine] + state.tShift[nextLine]\n    const max = state.eMarks[nextLine]\n\n    // max + 1 explicitly includes the newline\n    return state.src.slice(pos, max + 1)\n  }\n\n  let str = state.src.slice(pos, max + 1)\n\n  max = str.length\n  let labelEnd = -1\n\n  for (pos = 1; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x5B /* [ */) {\n      return false\n    } else if (ch === 0x5D /* ] */) {\n      labelEnd = pos\n      break\n    } else if (ch === 0x0A /* \\n */) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\n    } else if (ch === 0x5C /* \\ */) {\n      pos++\n      if (pos < max && str.charCodeAt(pos) === 0x0A) {\n        const lineContent = getNextLine(nextLine)\n        if (lineContent !== null) {\n          str += lineContent\n          max = str.length\n          nextLine++\n        }\n      }\n    }\n  }\n\n  if (labelEnd < 0 || str.charCodeAt(labelEnd + 1) !== 0x3A/* : */) { return false }\n\n  // [label]:   destination   'title'\n  //         ^^^ skip optional whitespace here\n  for (pos = labelEnd + 2; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\n    } else if (isSpace(ch)) {\n      /* eslint no-empty:0 */\n    } else {\n      break\n    }\n  }\n\n  // [label]:   destination   'title'\n  //            ^^^^^^^^^^^ parse this\n  const destRes = state.md.helpers.parseLinkDestination(str, pos, max)\n  if (!destRes.ok) { return false }\n\n  const href = state.md.normalizeLink(destRes.str)\n  if (!state.md.validateLink(href)) { return false }\n\n  pos = destRes.pos\n\n  // save cursor state, we could require to rollback later\n  const destEndPos = pos\n  const destEndLineNo = nextLine\n\n  // [label]:   destination   'title'\n  //                       ^^^ skipping those spaces\n  const start = pos\n  for (; pos < max; pos++) {\n    const ch = str.charCodeAt(pos)\n    if (ch === 0x0A) {\n      const lineContent = getNextLine(nextLine)\n      if (lineContent !== null) {\n        str += lineContent\n        max = str.length\n        nextLine++\n      }\n    } else if (isSpace(ch)) {\n      /* Nothing */\n    } else {\n      break\n    }\n  }\n\n  // [label]:   destination   'title'\n  //                          ^^^^^^^ parse this\n  let titleRes = state.md.helpers.parseLinkTitle(str, pos, max)\n  while (titleRes.can_continue) {\n    const lineContent = getNextLine(nextLine)\n    if (lineContent === null) break\n    str += lineContent\n    pos = max\n    max = str.length\n    nextLine++\n    titleRes = state.md.helpers.parseLinkTitle(str, pos, max, titleRes)\n  }\n  let title\n\n  if (pos < max && start !== pos && titleRes.ok) {\n    title = titleRes.str\n    pos = titleRes.pos\n  } else {\n    title = ''\n    pos = destEndPos\n    nextLine = destEndLineNo\n  }\n\n  // skip trailing spaces until the rest of the line\n  while (pos < max) {\n    const ch = str.charCodeAt(pos)\n    if (!isSpace(ch)) { break }\n    pos++\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    if (title) {\n      // garbage at the end of the line after title,\n      // but it could still be a valid reference if we roll back\n      title = ''\n      pos = destEndPos\n      nextLine = destEndLineNo\n      while (pos < max) {\n        const ch = str.charCodeAt(pos)\n        if (!isSpace(ch)) { break }\n        pos++\n      }\n    }\n  }\n\n  if (pos < max && str.charCodeAt(pos) !== 0x0A) {\n    // garbage at the end of the line\n    return false\n  }\n\n  const label = normalizeReference(str.slice(1, labelEnd))\n  if (!label) {\n    // CommonMark 0.20 disallows empty labels\n    return false\n  }\n\n  // Reference can not terminate anything. This check is for safety only.\n  /* istanbul ignore if */\n  if (silent) { return true }\n\n  if (typeof state.env.references === 'undefined') {\n    state.env.references = {}\n  }\n  if (typeof state.env.references[label] === 'undefined') {\n    state.env.references[label] = { title, href }\n  }\n\n  // Marks the place definition took in the source. Renders to nothing,\n  // href/title stay in `env.references`.\n  const token = state.push('reference_definition', '', 0)\n  token.map = [startLine, nextLine]\n  token.hidden = true\n\n  const meta: Record<string, unknown> = Object.create(null)\n  meta.label = label\n  token.meta = meta\n\n  state.line = nextLine\n  return true\n}\n","// List of valid html blocks names, according to commonmark spec\n// https://spec.commonmark.org/0.30/#html-blocks\n\nexport default [\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","// Regexps to match html elements\n\nconst attr_name = '[a-zA-Z_:][a-zA-Z0-9:._-]*'\n\nconst unquoted = '[^\"\\'=<>`\\\\x00-\\\\x20]+'\nconst single_quoted = \"'[^']*'\"\nconst double_quoted = '\"[^\"]*\"'\n\nconst attr_value = `(?:${unquoted}|${single_quoted}|${double_quoted})`\n\nconst attribute = `(?:\\\\s+${attr_name}(?:\\\\s*=\\\\s*${attr_value})?)`\n\nconst open_tag = `<[A-Za-z][A-Za-z0-9\\\\-]*${attribute}*\\\\s*\\\\/?>`\n\nconst close_tag = '<\\\\/[A-Za-z][A-Za-z0-9\\\\-]*\\\\s*>'\nconst comment = '<!---?>|<!--(?:[^-]|-[^-]|--[^>])*-->'\nconst processing = '<[?][\\\\s\\\\S]*?[?]>'\nconst declaration = '<![A-Za-z][^>]*>'\nconst cdata = '<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>'\n\nconst HTML_TAG_RE = new RegExp(\n  `^(?:${open_tag}|${close_tag}|${comment}|${processing}|${declaration}|${cdata})`\n)\nconst HTML_OPEN_CLOSE_TAG_RE = new RegExp(`^(?:${open_tag}|${close_tag})`)\n\nexport { HTML_TAG_RE, HTML_OPEN_CLOSE_TAG_RE }\n","// HTML block\n\nimport block_names from '../common/html_blocks.ts'\nimport { HTML_OPEN_CLOSE_TAG_RE } from '../common/html_re.ts'\nimport type StateBlock from './state_block.ts'\n\n// An array of opening and corresponding closing sequences for html tags,\n// last argument defines whether it can terminate a paragraph or not\n//\nconst HTML_SEQUENCES: Array<[\n  open: RegExp,\n  close: RegExp,\n  canTerminateParagraph: boolean\n]> = [\n  [/^<(script|pre|style|textarea)(?=(\\s|>|$))/i, /<\\/(script|pre|style|textarea)>/i, true],\n  [/^<!--/, /-->/, true],\n  [/^<\\?/, /\\?>/, true],\n  [/^<![A-Za-z]/, />/, true],\n  [/^<!\\[CDATA\\[/, /\\]\\]>/, true],\n  [new RegExp(`^</?(${block_names.join('|')})(?=(\\\\s|/?>|$))`, 'i'), /^$/, true],\n  [new RegExp(`${HTML_OPEN_CLOSE_TAG_RE.source}\\\\s*$`), /^$/, false]\n]\n\nexport default function html_block (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (!state.md.options.html) { return false }\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n  let lineText = state.src.slice(pos, max)\n\n  let i = 0\n  for (; i < HTML_SEQUENCES.length; i++) {\n    if (HTML_SEQUENCES[i][0].test(lineText)) { break }\n  }\n  if (i === HTML_SEQUENCES.length) { return false }\n\n  if (silent) {\n    // true if this sequence can be a terminator, false otherwise\n    return HTML_SEQUENCES[i][2]\n  }\n\n  let nextLine = startLine + 1\n\n  // Block types 6 and 7 (the only ones whose end condition is a blank line)\n  // have `/^$/` as their closing regexp. For all other types (1-5, e.g.\n  // `<!--` comments), a blank line is regular content and must not terminate\n  // the block - it ends only when its closing sequence is found.\n  const endsOnBlankLine = HTML_SEQUENCES[i][1].test('')\n\n  // If we are here - we detected HTML block.\n  // Let's roll down till block end.\n  if (!HTML_SEQUENCES[i][1].test(lineText)) {\n    for (; nextLine < endLine; nextLine++) {\n      if (state.sCount[nextLine] < state.blkIndent) {\n        // An outdented blank line shouldn't end a block that doesn't end on a\n        // blank line (e.g. a `<!--` comment inside a list item). Such blocks\n        // must continue until their closing sequence regardless of indent.\n        if (endsOnBlankLine || !state.isEmpty(nextLine)) { break }\n      }\n\n      pos = state.bMarks[nextLine] + state.tShift[nextLine]\n      max = state.eMarks[nextLine]\n      lineText = state.src.slice(pos, max)\n\n      if (HTML_SEQUENCES[i][1].test(lineText)) {\n        if (lineText.length !== 0) { nextLine++ }\n        break\n      }\n    }\n  }\n\n  state.line = nextLine\n\n  const token = state.push('html_block', '', 0)\n  token.map = [startLine, nextLine]\n  token.content = state.getLines(startLine, nextLine, state.blkIndent, true)\n\n  return true\n}\n","// heading (#, ##, ...)\n\nimport { isSpace, asciiTrim } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\nexport default function heading (state: StateBlock, startLine: number, endLine: number, silent: boolean): boolean {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  let ch = state.src.charCodeAt(pos)\n\n  if (ch !== 0x23/* # */ || pos >= max) { return false }\n\n  // count heading level\n  let level = 1\n  ch = state.src.charCodeAt(++pos)\n  while (ch === 0x23/* # */ && pos < max && level <= 6) {\n    level++\n    ch = state.src.charCodeAt(++pos)\n  }\n\n  if (level > 6 || (pos < max && !isSpace(ch))) { return false }\n\n  if (silent) { return true }\n\n  // Let's cut tails like '    ###  ' from the end of string\n\n  max = state.skipSpacesBack(max, pos)\n  const tmp = state.skipCharsBack(max, 0x23, pos) // #\n  if (tmp > pos && isSpace(state.src.charCodeAt(tmp - 1))) {\n    max = tmp\n  }\n\n  state.line = startLine + 1\n\n  const token_o = state.push('heading_open', `h${level}`, 1)\n  token_o.markup = '########'.slice(0, level)\n  token_o.map = [startLine, state.line]\n\n  const token_i = state.push('inline', '', 0)\n  token_i.content = asciiTrim(state.src.slice(pos, max))\n  token_i.map = [startLine, state.line]\n  token_i.children = []\n\n  const token_c = state.push('heading_close', `h${level}`, -1)\n  token_c.markup = '########'.slice(0, level)\n\n  return true\n}\n","// lheading (---, ===)\n\nimport { asciiTrim } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\nexport default function lheading (state: StateBlock, startLine: number, endLine: number/*, silent */): boolean {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph')\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  const oldParentType = state.parentType\n  state.parentType = 'paragraph' // use paragraph to match terminatorRules\n\n  // jump line-by-line until empty one or EOF\n  let level = 0\n  let marker\n  let nextLine = startLine + 1\n\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n    //\n    // Check for underline in setext header\n    //\n    if (state.sCount[nextLine] >= state.blkIndent) {\n      let pos = state.bMarks[nextLine] + state.tShift[nextLine]\n      const max = state.eMarks[nextLine]\n\n      if (pos < max) {\n        marker = state.src.charCodeAt(pos)\n\n        if (marker === 0x2D/* - */ || marker === 0x3D/* = */) {\n          pos = state.skipChars(pos, marker)\n          pos = state.skipSpaces(pos)\n\n          if (pos >= max) {\n            level = (marker === 0x3D/* = */ ? 1 : 2)\n            break\n          }\n        }\n      }\n    }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n  }\n\n  if (!level) {\n    // Didn't find valid underline\n    state.parentType = oldParentType\n    return false\n  }\n\n  const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false))\n\n  state.line = nextLine + 1\n\n  const token_o = state.push('heading_open', `h${level}`, 1)\n  token_o.markup = String.fromCharCode(marker!)\n  token_o.map = [startLine, state.line]\n\n  const token_i = state.push('inline', '', 0)\n  token_i.content = content\n  token_i.map = [startLine, state.line - 1]\n  token_i.children = []\n\n  const token_c = state.push('heading_close', `h${level}`, -1)\n  token_c.markup = String.fromCharCode(marker!)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","// Paragraph\n\nimport { asciiTrim } from '../common/utils.ts'\nimport type StateBlock from './state_block.ts'\n\nexport default function paragraph (state: StateBlock, startLine: number, endLine: number): boolean {\n  const terminatorRules = state.md.block.ruler.getRules('paragraph')\n  const oldParentType = state.parentType\n  let nextLine = startLine + 1\n  state.parentType = 'paragraph'\n\n  // jump line-by-line until empty one or EOF\n  for (; nextLine < endLine && !state.isEmpty(nextLine); nextLine++) {\n    // this would be a code block normally, but after paragraph\n    // it's considered a lazy continuation regardless of what's there\n    if (state.sCount[nextLine] - state.blkIndent > 3) { continue }\n\n    // quirk for blockquotes, this line should already be checked by that rule\n    if (state.sCount[nextLine] < 0) { continue }\n\n    // Some tags can terminate paragraph without empty line.\n    let terminate = false\n    for (let i = 0, l = terminatorRules.length; i < l; i++) {\n      if (terminatorRules[i](state, nextLine, endLine, true)) {\n        terminate = true\n        break\n      }\n    }\n    if (terminate) { break }\n  }\n\n  const content = asciiTrim(state.getLines(startLine, nextLine, state.blkIndent, false))\n\n  state.line = nextLine\n\n  const token_o = state.push('paragraph_open', 'p', 1)\n  token_o.map = [startLine, state.line]\n\n  const token_i = state.push('inline', '', 0)\n  token_i.content = content\n  token_i.map = [startLine, state.line]\n  token_i.children = []\n\n  state.push('paragraph_close', 'p', -1)\n\n  state.parentType = oldParentType\n\n  return true\n}\n","import Ruler from './ruler.ts'\nimport StateBlock from './rules_block/state_block.ts'\nimport type Token from './token.ts'\nimport type MarkdownIt from './markdownit.ts'\nimport type { Env } from './types.ts'\n\nimport r_table from './rules_block/table.ts'\nimport r_code from './rules_block/code.ts'\nimport r_fence from './rules_block/fence.ts'\nimport r_blockquote from './rules_block/blockquote.ts'\nimport r_hr from './rules_block/hr.ts'\nimport r_list from './rules_block/list.ts'\nimport r_reference from './rules_block/reference.ts'\nimport r_html_block from './rules_block/html_block.ts'\nimport r_heading from './rules_block/heading.ts'\nimport r_lheading from './rules_block/lheading.ts'\nimport r_paragraph from './rules_block/paragraph.ts'\n\nconst _rules: Array<[\n  name: string,\n  rule: (state: StateBlock, startLine: number, endLine: number, silent: boolean) => boolean,\n  alt?: string[]\n]> = [\n  // First 2 params - rule name & source. Secondary array - list of rules,\n  // which can be terminated by this one.\n  ['table', r_table, ['paragraph', 'reference']],\n  ['code', r_code],\n  ['fence', r_fence, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['blockquote', r_blockquote, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['hr', r_hr, ['paragraph', 'reference', 'blockquote', 'list']],\n  ['list', r_list, ['paragraph', 'reference', 'blockquote']],\n  ['reference', r_reference],\n  ['html_block', r_html_block, ['paragraph', 'reference', 'blockquote']],\n  ['heading', r_heading, ['paragraph', 'reference', 'blockquote']],\n  ['lheading', r_lheading],\n  ['paragraph', r_paragraph]\n]\n\n/**\n * Block-level tokenizer.\n */\nclass ParserBlock {\n  /**\n   * {@link Ruler} instance. Keep configuration of block rules.\n   */\n  ruler = new Ruler<[StateBlock, number, number, boolean], boolean>()\n\n  State = StateBlock\n\n  constructor () {\n    for (let i = 0; i < _rules.length; i++) {\n      this.ruler.push(_rules[i][0], _rules[i][1], { alt: (_rules[i][2] || []).slice() })\n    }\n  }\n\n  // Generate tokens for input range\n  //\n  tokenize (state: StateBlock, startLine: number, endLine: number): void {\n    const rules = this.ruler.getRules('')\n    const len = rules.length\n    const maxNesting = state.md.options.maxNesting\n    let line = startLine\n    let hasEmptyLines = false\n\n    while (line < endLine) {\n      state.line = line = state.skipEmptyLines(line)\n      if (line >= endLine) { break }\n\n      // Termination condition for nested calls.\n      // Nested calls currently used for blockquotes & lists\n      if (state.sCount[line] < state.blkIndent) { break }\n\n      // If nesting level exceeded - skip tail to the end. That's not ordinary\n      // situation and we should not care about content.\n      if (state.level >= maxNesting) {\n        state.line = endLine\n        break\n      }\n\n      // Try all possible rules.\n      // On success, rule should:\n      //\n      // - update `state.line`\n      // - update `state.tokens`\n      // - return true\n      const prevLine = state.line\n      let ok = false\n\n      for (let i = 0; i < len; i++) {\n        ok = rules[i](state, line, endLine, false)\n        if (ok) {\n          if (prevLine >= state.line) {\n            throw new Error(\"block rule didn't increment state.line\")\n          }\n          break\n        }\n      }\n\n      // this can only happen if user disables paragraph rule\n      if (!ok) throw new Error('none of the block rules matched')\n\n      // set state.tight if we had an empty line before current tag\n      // i.e. latest empty line should not count\n      state.tight = !hasEmptyLines\n\n      // paragraph might \"eat\" one newline after it in nested lists\n      if (state.isEmpty(state.line - 1)) {\n        hasEmptyLines = true\n      }\n\n      line = state.line\n\n      if (line < endLine && state.isEmpty(line)) {\n        hasEmptyLines = true\n        line++\n        state.line = line\n      }\n    }\n  }\n\n  /**\n   * Process input string and push block tokens into `outTokens`\n   */\n  parse (src: string, md: MarkdownIt, env: Env, outTokens: Token[]): void {\n    if (!src) { return }\n\n    const state = new this.State(src, md, env, outTokens)\n\n    this.tokenize(state, state.line, state.lineMax)\n  }\n}\n\nexport default ParserBlock\n","import Token from '../token.ts'\nimport { isWhiteSpace, isPunctCharCode, isMdAsciiPunct } from '../common/utils.ts'\nimport type MarkdownIt from '../markdownit.ts'\nimport type { Delimiter, Env } from '../types.ts'\n\n/** @inline */\ninterface ScannedDelimiters {\n  can_open: boolean\n  can_close: boolean\n  length: number\n}\n\n/** @inline */\ntype StateTokenMeta = Record<string, unknown> & {\n  delimiters?: Delimiter[]\n}\n\n/** Mutable state passed to inline rules while tokenizing inline content. */\nclass StateInline {\n  declare src: string\n  declare env: Env\n  declare md: MarkdownIt\n  declare tokens: Token[]\n  declare tokens_meta: Array<StateTokenMeta | undefined>\n\n  pos = 0\n  declare posMax: number\n  level = 0\n  pending = ''\n  pendingLevel = 0\n\n  // Stores { start: end } pairs. Useful for backtrack\n  // optimization of pairs parse (emphasis, strikes).\n  cache: Record<number, number> = {}\n\n  // backtick run length => position of its last run, built lazily on first use\n  backticks: Record<number, number> = {}\n  backticksScanned = false\n\n  // Counter used to disable inline linkify-it execution\n  // inside <a> and markdown links\n  linkLevel = 0\n\n  // List of emphasis-like delimiters for current tag\n  delimiters: Delimiter[] = []\n\n  // Stack of delimiter lists for upper level tags\n  _prev_delimiters: Delimiter[][] = []\n\n  // re-export Token class to use in block rules\n  Token = Token\n\n  constructor (src: string, md: MarkdownIt, env: Env, outTokens: Token[]) {\n    this.src = src\n    this.env = env\n    this.md = md\n    this.tokens = outTokens\n    this.tokens_meta = Array(outTokens.length)\n\n    this.posMax = this.src.length\n  }\n\n  // Flush pending text\n  //\n  pushPending (): Token {\n    const token = new Token('text', '', 0)\n    token.content = this.pending\n    token.level = this.pendingLevel\n    this.tokens.push(token)\n    this.pending = ''\n    return token\n  }\n\n  // Push new token to \"stream\".\n  // If pending text exists - flush it as text token\n  //\n  push (type: string, tag: string, nesting: -1 | 0 | 1): Token {\n    if (this.pending) {\n      this.pushPending()\n    }\n\n    const token = new Token(type, tag, nesting)\n    let token_meta = undefined\n\n    if (nesting < 0) {\n      // closing tag\n      this.level--\n      this.delimiters = this._prev_delimiters.pop()!\n    }\n\n    token.level = this.level\n\n    if (nesting > 0) {\n      // opening tag\n      this.level++\n      this._prev_delimiters.push(this.delimiters)\n      this.delimiters = []\n      token_meta = { delimiters: this.delimiters }\n    }\n\n    this.pendingLevel = this.level\n    this.tokens.push(token)\n    this.tokens_meta.push(token_meta)\n    return token\n  }\n\n  // Scan a sequence of emphasis-like markers, and determine whether\n  // it can start an emphasis sequence or end an emphasis sequence.\n  //\n  //  - start - position to scan from (it should point at a valid marker);\n  //  - canSplitWord - determine if these markers can be found inside a word\n  //\n  scanDelims (start: number, canSplitWord: boolean): ScannedDelimiters {\n    const max = this.posMax\n    const marker = this.src.charCodeAt(start)\n\n    // Astral characters below are combined manually, because .codePointAt()\n    // does not guarantee numeric type output. And we don't wish JIT cache issues.\n    // The broken surrogate pairs are evaluated as U+FFFD to prevent possible\n    // crashes.\n\n    let lastChar\n    if (start === 0) {\n      // treat beginning of the line as a whitespace\n      lastChar = 0x20\n    } else if (start === 1) {\n      lastChar = this.src.charCodeAt(0)\n      if ((lastChar & 0xF800) === 0xD800) { lastChar = 0xFFFD }\n    } else {\n      lastChar = this.src.charCodeAt(start - 1)\n      if ((lastChar & 0xFC00) === 0xDC00) {\n        // low surrogate => add high one, replace broken pair with U+FFFD\n        const highSurr = this.src.charCodeAt(start - 2)\n        lastChar = (highSurr & 0xFC00) === 0xD800\n          ? 0x10000 + ((highSurr - 0xD800) << 10) + (lastChar - 0xDC00)\n          : 0xFFFD\n      } else if ((lastChar & 0xFC00) === 0xD800) {\n        lastChar = 0xFFFD\n      }\n    }\n\n    let pos = start\n    while (pos < max && this.src.charCodeAt(pos) === marker) { pos++ }\n\n    const count = pos - start\n\n    // treat end of the line as a whitespace\n    let nextChar = pos < max ? this.src.charCodeAt(pos) : 0x20\n    if ((nextChar & 0xFC00) === 0xD800) {\n      // high surrogate => add low one, replace broken pair with U+FFFD\n      const lowSurr = this.src.charCodeAt(pos + 1)\n      nextChar = (lowSurr & 0xFC00) === 0xDC00\n        ? 0x10000 + ((nextChar - 0xD800) << 10) + (lowSurr - 0xDC00)\n        : 0xFFFD\n    } else if ((nextChar & 0xFC00) === 0xDC00) {\n      nextChar = 0xFFFD\n    }\n\n    const isLastPunctChar = isMdAsciiPunct(lastChar) || isPunctCharCode(lastChar)\n    const isNextPunctChar = isMdAsciiPunct(nextChar) || isPunctCharCode(nextChar)\n\n    const isLastWhiteSpace = isWhiteSpace(lastChar)\n    const isNextWhiteSpace = isWhiteSpace(nextChar)\n\n    const left_flanking =\n      !isNextWhiteSpace && (!isNextPunctChar || isLastWhiteSpace || isLastPunctChar)\n    const right_flanking =\n      !isLastWhiteSpace && (!isLastPunctChar || isNextWhiteSpace || isNextPunctChar)\n\n    const can_open = left_flanking && (canSplitWord || !right_flanking || isLastPunctChar)\n    const can_close = right_flanking && (canSplitWord || !left_flanking || isNextPunctChar)\n\n    return { can_open, can_close, length: count }\n  }\n}\n\nexport default StateInline\n","// Skip text characters for text token, place those to pending buffer\n// and increment current pos\n\nimport type StateInline from './state_inline.ts'\n\n// Rule to skip pure text\n// '{}$%@~+=:' reserved for extentions\n\n// !, \", #, $, %, &, ', (, ), *, +, ,, -, ., /, :, ;, <, =, >, ?, @, [, \\, ], ^, _, `, {, |, }, or ~\n\n// !!!! Don't confuse with \"Markdown ASCII Punctuation\" chars\n// http://spec.commonmark.org/0.15/#ascii-punctuation-character\nfunction isTerminatorChar (ch: number) {\n  switch (ch) {\n    case 0x0A/* \\n */:\n    case 0x21/* ! */:\n    case 0x23/* # */:\n    case 0x24/* $ */:\n    case 0x25/* % */:\n    case 0x26/* & */:\n    case 0x2A/* * */:\n    case 0x2B/* + */:\n    case 0x2D/* - */:\n    case 0x3A/* : */:\n    case 0x3C/* < */:\n    case 0x3D/* = */:\n    case 0x3E/* > */:\n    case 0x40/* @ */:\n    case 0x5B/* [ */:\n    case 0x5C/* \\ */:\n    case 0x5D/* ] */:\n    case 0x5E/* ^ */:\n    case 0x5F/* _ */:\n    case 0x60/* ` */:\n    case 0x7B/* { */:\n    case 0x7D/* } */:\n    case 0x7E/* ~ */:\n      return true\n    default:\n      return false\n  }\n}\n\nexport default function text (state: StateInline, silent: boolean): boolean {\n  let pos = state.pos\n\n  while (pos < state.posMax && !isTerminatorChar(state.src.charCodeAt(pos))) {\n    pos++\n  }\n\n  if (pos === state.pos) { return false }\n\n  if (!silent) { state.pending += state.src.slice(state.pos, pos) }\n\n  state.pos = pos\n\n  return true\n}\n\n// Alternative implementation, for memory.\n//\n// It costs 10% of performance, but allows extend terminators list, if place it\n// to `ParserInline` property. Probably, will switch to it sometime, such\n// flexibility required.\n\n/*\nvar TERMINATOR_RE = /[\\n!#$%&*+\\-:<=>@[\\\\\\]^_`{}~]/;\n\nmodule.exports = function text(state, silent) {\n  var pos = state.pos,\n      idx = state.src.slice(pos).search(TERMINATOR_RE);\n\n  // first char is terminator -> empty text\n  if (idx === 0) { return false; }\n\n  // no terminator -> text till end of string\n  if (idx < 0) {\n    if (!silent) { state.pending += state.src.slice(pos); }\n    state.pos = state.src.length;\n    return true;\n  }\n\n  if (!silent) { state.pending += state.src.slice(pos, pos + idx); }\n\n  state.pos += idx;\n\n  return true;\n}; */\n","// Early process links like https://example.org/ to have priority\n// over emphasis, etc.\n\nimport type StateInline from './state_inline.ts'\n\n// RFC3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\nfunction isAsciiAlpha (code: number): boolean {\n  return (code >= 0x41 && code <= 0x5A) || (code >= 0x61 && code <= 0x7A)\n}\n\nfunction isSchemeChar (code: number): boolean {\n  return (code >= 0x41 && code <= 0x5A) ||\n    (code >= 0x61 && code <= 0x7A) ||\n    (code >= 0x30 && code <= 0x39) ||\n    code === 0x2B || code === 0x2D || code === 0x2E\n}\n\nexport default function linkify (state: StateInline, silent: boolean): boolean {\n  if (!state.md.options.linkify) return false\n  if (state.linkLevel > 0) return false\n\n  const pos = state.pos\n  const max = state.posMax\n\n  if (pos + 3 > max) return false\n  if (state.src.charCodeAt(pos) !== 0x3A/* : */) return false\n  if (state.src.charCodeAt(pos + 1) !== 0x2F/* / */) return false\n  if (state.src.charCodeAt(pos + 2) !== 0x2F/* / */) return false\n\n  // Search backwards for the scheme, but no more than 10 characters, the length\n  // of the pending string, or the length of the source prefix.\n  // Use state.src instead of state.pending because it is faster to access.\n  const protoMin = pos - Math.min(10, state.pending.length, pos)\n  let protoStart = pos\n  while (protoStart > protoMin && isSchemeChar(state.src.charCodeAt(protoStart - 1))) {\n    protoStart--\n  }\n\n  if (protoStart === pos || !isAsciiAlpha(state.src.charCodeAt(protoStart))) return false\n\n  const protoLength = pos - protoStart\n\n  const link = state.md.linkify.matchAtStart(state.src.slice(protoStart))\n  if (!link) return false\n\n  let url = link.url\n\n  // invalid link, but still detected by linkify somehow;\n  // need to check to prevent infinite loop below\n  if (url.length <= protoLength) return false\n\n  // disallow '*' at the end of the link (conflicts with emphasis)\n  // do manual backsearch to avoid perf issues with regex /\\*+$/ on \"****...****a\".\n  let urlEnd = url.length\n  while (urlEnd > 0 && url.charCodeAt(urlEnd - 1) === 0x2A/* * */) {\n    urlEnd--\n  }\n  if (urlEnd !== url.length) {\n    url = url.slice(0, urlEnd)\n  }\n\n  const fullUrl = state.md.normalizeLink(url)\n  if (!state.md.validateLink(fullUrl)) return false\n\n  if (!silent) {\n    state.pending = state.pending.slice(0, -protoLength)\n\n    const token_o = state.push('link_open', 'a', 1)\n    token_o.attrs = [['href', fullUrl]]\n    token_o.markup = 'linkify'\n    token_o.info = 'auto'\n\n    const token_t = state.push('text', '', 0)\n    token_t.content = state.md.normalizeLinkText(url)\n\n    const token_c = state.push('link_close', 'a', -1)\n    token_c.markup = 'linkify'\n    token_c.info = 'auto'\n  }\n\n  state.pos += url.length - protoLength\n  return true\n}\n","// Proceess '\\n'\n\nimport { isSpace } from '../common/utils.ts'\nimport type StateInline from './state_inline.ts'\n\nexport default function newline (state: StateInline, silent: boolean): boolean {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x0A/* \\n */) { return false }\n\n  const pmax = state.pending.length - 1\n  const max = state.posMax\n\n  // '  \\n' -> hardbreak\n  // Lookup in pending chars is bad practice! Don't copy to other rules!\n  // Pending string is stored in concat mode, indexed lookups will cause\n  // convertion to flat mode.\n  if (!silent) {\n    if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) {\n      if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) {\n        // Find whitespaces tail of pending chars.\n        let ws = pmax - 1\n        while (ws >= 1 && state.pending.charCodeAt(ws - 1) === 0x20) ws--\n\n        state.pending = state.pending.slice(0, ws)\n        state.push('hardbreak', 'br', 0)\n      } else {\n        state.pending = state.pending.slice(0, -1)\n        state.push('softbreak', 'br', 0)\n      }\n    } else {\n      state.push('softbreak', 'br', 0)\n    }\n  }\n\n  pos++\n\n  // skip heading spaces for next line\n  while (pos < max && isSpace(state.src.charCodeAt(pos))) { pos++ }\n\n  state.pos = pos\n  return true\n}\n","// Process escaped chars and hardbreaks\n\nimport { isSpace } from '../common/utils.ts'\nimport type StateInline from './state_inline.ts'\n\nconst ESCAPED: number[] = []\n\nfor (let i = 0; i < 256; i++) { ESCAPED.push(0) }\n\n'\\\\!\"#$%&\\'()*+,./:;<=>?@[]^_`{|}~-'\n  .split('').forEach(function (ch) { ESCAPED[ch.charCodeAt(0)] = 1 })\n\nexport default function escape (state: StateInline, silent: boolean): boolean {\n  let pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x5C/* \\ */) return false\n  pos++\n\n  // '\\' at the end of the inline block\n  if (pos >= max) return false\n\n  let ch1 = state.src.charCodeAt(pos)\n\n  if (ch1 === 0x0A) {\n    if (!silent) {\n      state.push('hardbreak', 'br', 0)\n    }\n\n    pos++\n    // skip leading whitespaces from next line\n    while (pos < max) {\n      ch1 = state.src.charCodeAt(pos)\n      if (!isSpace(ch1)) break\n      pos++\n    }\n\n    state.pos = pos\n    return true\n  }\n\n  // '\\' before a space is a literal backslash. Don't consume the space, so a\n  // trailing two-space hard line break is still detected by the newline rule.\n  if (ch1 === 0x20) {\n    if (!silent) {\n      const token = state.push('text_special', '', 0)\n      token.content = '\\\\'\n      token.markup = '\\\\'\n      token.info = 'escape'\n    }\n\n    state.pos = pos\n    return true\n  }\n\n  let escapedStr = state.src[pos]\n\n  if (ch1 >= 0xD800 && ch1 <= 0xDBFF && pos + 1 < max) {\n    const ch2 = state.src.charCodeAt(pos + 1)\n\n    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF) {\n      escapedStr += state.src[pos + 1]\n      pos++\n    }\n  }\n\n  const origStr = '\\\\' + escapedStr\n\n  if (!silent) {\n    const token = state.push('text_special', '', 0)\n\n    if (ch1 < 256 && ESCAPED[ch1] !== 0) {\n      token.content = escapedStr\n    } else {\n      token.content = origStr\n    }\n\n    token.markup = origStr\n    token.info = 'escape'\n  }\n\n  state.pos = pos + 1\n  return true\n}\n","// Parse backticks\n\nimport type StateInline from './state_inline.ts'\n\n// Position of the last backtick run of each length. Derived from the string in\n// one pass, so unlike an incremental cache it never depends on how the parser\n// walks it, and stays valid across lookaheads and narrowed ranges.\nfunction buildLastRuns (src: string): Record<number, number> {\n  const lastRuns: Record<number, number> = {}\n  let pos = 0\n\n  while ((pos = src.indexOf('`', pos)) !== -1) {\n    const start = pos\n    while (src.charCodeAt(++pos) === 0x60/* ` */) { /* scan run length */ }\n    lastRuns[pos - start] = start\n  }\n\n  return lastRuns\n}\n\nexport default function backtick (state: StateInline, silent: boolean): boolean {\n  const start = state.pos\n\n  if (state.src.charCodeAt(start) !== 0x60/* ` */) { return false }\n\n  const max = state.posMax\n  let pos = start + 1\n\n  // scan marker length\n  while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++ }\n\n  const marker = state.src.slice(start, pos)\n  const openerLength = marker.length\n\n  if (!state.backticksScanned) {\n    state.backticks = buildLastRuns(state.src)\n    state.backticksScanned = true\n  }\n\n  // Nothing of the same length left in the string, so no closer can exist\n  if ((state.backticks[openerLength] ?? -1) >= pos) {\n    let matchEnd = pos\n    let matchStart\n\n    while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1 && matchStart < max) {\n      // Measure the whole run, not just its part inside the current range,\n      // otherwise a run straddling `max` would be mistaken for a shorter one\n      matchEnd = matchStart + 1\n      while (state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++ }\n\n      if (matchEnd > max) break\n\n      if (matchEnd - matchStart === openerLength) {\n        if (!silent) {\n          const token = state.push('code_inline', 'code', 0)\n          token.markup = marker\n          let content = state.src.slice(pos, matchStart).replace(/\\n/g, ' ')\n\n          // Strip one space from each side, unless the content is all spaces\n          if (content.startsWith(' ') && content.endsWith(' ') && /[^ ]/.test(content)) {\n            content = content.slice(1, -1)\n          }\n\n          token.content = content\n        }\n        state.pos = matchEnd\n        return true\n      }\n    }\n  }\n\n  if (!silent) state.pending += marker\n  state.pos = pos\n  return true\n}\n","// ~~strike through~~\n//\n\nimport type { Delimiter } from '../types.ts'\nimport type StateInline from './state_inline.ts'\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction strikethrough_tokenize (state: StateInline, silent: boolean): boolean {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x7E/* ~ */) { return false }\n\n  const scanned = state.scanDelims(state.pos, true)\n  let len = scanned.length\n  const ch = String.fromCharCode(marker)\n\n  if (len < 2) { return false }\n\n  let token\n\n  if (len % 2) {\n    token = state.push('text', '', 0)\n    token.content = ch\n    len--\n  }\n\n  for (let i = 0; i < len; i += 2) {\n    token = state.push('text', '', 0)\n    token.content = ch + ch\n\n    state.delimiters.push({\n      marker,\n      length: 0,     // disable \"rule of 3\" length checks meant for emphasis\n      token: state.tokens.length - 1,\n      end: -1,\n      open: scanned.can_open,\n      close: scanned.can_close\n    })\n  }\n\n  state.pos += scanned.length\n\n  return true\n}\n\nfunction postProcess (state: StateInline, delimiters: Delimiter[]) {\n  let token\n  const loneMarkers = []\n  const max = delimiters.length\n\n  for (let i = 0; i < max; i++) {\n    const startDelim = delimiters[i]\n\n    if (startDelim.marker !== 0x7E/* ~ */) {\n      continue\n    }\n\n    if (startDelim.end === -1) {\n      continue\n    }\n\n    const endDelim = delimiters[startDelim.end]\n\n    token = state.tokens[startDelim.token]\n    token.type = 's_open'\n    token.tag = 's'\n    token.nesting = 1\n    token.markup = '~~'\n    token.content = ''\n\n    token = state.tokens[endDelim.token]\n    token.type = 's_close'\n    token.tag = 's'\n    token.nesting = -1\n    token.markup = '~~'\n    token.content = ''\n\n    if (state.tokens[endDelim.token - 1].type === 'text' &&\n        state.tokens[endDelim.token - 1].content === '~') {\n      loneMarkers.push(endDelim.token - 1)\n    }\n  }\n\n  // If a marker sequence has an odd number of characters, it's splitted\n  // like this: `~~~~~` -> `~` + `~~` + `~~`, leaving one marker at the\n  // start of the sequence.\n  //\n  // So, we have to move all those markers after subsequent s_close tags.\n  //\n  while (loneMarkers.length) {\n    const i = loneMarkers.pop()!\n    let j = i + 1\n\n    while (j < state.tokens.length && state.tokens[j].type === 's_close') {\n      j++\n    }\n\n    j--\n\n    if (i !== j) {\n      token = state.tokens[j]\n      state.tokens[j] = state.tokens[i]\n      state.tokens[i] = token\n    }\n  }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction strikethrough_postProcess (state: StateInline): void {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    const delimiters = tokens_meta[curr]?.delimiters\n    if (delimiters) {\n      postProcess(state, delimiters)\n    }\n  }\n}\n\nexport default {\n  tokenize: strikethrough_tokenize,\n  postProcess: strikethrough_postProcess\n}\n","// Process *this* and _that_\n//\n\nimport type { Delimiter } from '../types.ts'\nimport type StateInline from './state_inline.ts'\n\n// Insert each marker as a separate text token, and add it to delimiter list\n//\nfunction emphasis_tokenize (state: StateInline, silent: boolean): boolean {\n  const start = state.pos\n  const marker = state.src.charCodeAt(start)\n\n  if (silent) { return false }\n\n  if (marker !== 0x5F /* _ */ && marker !== 0x2A /* * */) { return false }\n\n  const scanned = state.scanDelims(state.pos, marker === 0x2A)\n\n  for (let i = 0; i < scanned.length; i++) {\n    const token = state.push('text', '', 0)\n    token.content = String.fromCharCode(marker)\n\n    state.delimiters.push({\n      // Char code of the starting marker (number).\n      //\n      marker,\n\n      // Total length of these series of delimiters.\n      //\n      length: scanned.length,\n\n      // A position of the token this delimiter corresponds to.\n      //\n      token: state.tokens.length - 1,\n\n      // If this delimiter is matched as a valid opener, `end` will be\n      // equal to its position, otherwise it's `-1`.\n      //\n      end: -1,\n\n      // Boolean flags that determine if this delimiter could open or close\n      // an emphasis.\n      //\n      open: scanned.can_open,\n      close: scanned.can_close\n    })\n  }\n\n  state.pos += scanned.length\n\n  return true\n}\n\nfunction postProcess (state: StateInline, delimiters: Delimiter[]) {\n  const max = delimiters.length\n\n  for (let i = max - 1; i >= 0; i--) {\n    const startDelim = delimiters[i]\n\n    if (startDelim.marker !== 0x5F/* _ */ && startDelim.marker !== 0x2A/* * */) {\n      continue\n    }\n\n    // Process only opening markers\n    if (startDelim.end === -1) {\n      continue\n    }\n\n    const endDelim = delimiters[startDelim.end]\n\n    // If the previous delimiter has the same marker and is adjacent to this one,\n    // merge those into one strong delimiter.\n    //\n    // `<em><em>whatever</em></em>` -> `<strong>whatever</strong>`\n    //\n    const isStrong = i > 0 &&\n               delimiters[i - 1].end === startDelim.end + 1 &&\n               // check that first two markers match and adjacent\n               delimiters[i - 1].marker === startDelim.marker &&\n               delimiters[i - 1].token === startDelim.token - 1 &&\n               // check that last two markers are adjacent (we can safely assume they match)\n               delimiters[startDelim.end + 1].token === endDelim.token + 1\n\n    const ch = String.fromCharCode(startDelim.marker)\n\n    const token_o = state.tokens[startDelim.token]\n    token_o.type = isStrong ? 'strong_open' : 'em_open'\n    token_o.tag = isStrong ? 'strong' : 'em'\n    token_o.nesting = 1\n    token_o.markup = isStrong ? ch + ch : ch\n    token_o.content = ''\n\n    const token_c = state.tokens[endDelim.token]\n    token_c.type = isStrong ? 'strong_close' : 'em_close'\n    token_c.tag = isStrong ? 'strong' : 'em'\n    token_c.nesting = -1\n    token_c.markup = isStrong ? ch + ch : ch\n    token_c.content = ''\n\n    if (isStrong) {\n      state.tokens[delimiters[i - 1].token].content = ''\n      state.tokens[delimiters[startDelim.end + 1].token].content = ''\n      i--\n    }\n  }\n}\n\n// Walk through delimiter list and replace text tokens with tags\n//\nfunction emphasis_post_process (state: StateInline): void {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  postProcess(state, state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    const delimiters = tokens_meta[curr]?.delimiters\n    if (delimiters) {\n      postProcess(state, delimiters)\n    }\n  }\n}\n\nexport default {\n  tokenize: emphasis_tokenize,\n  postProcess: emphasis_post_process\n}\n","// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.ts'\nimport type StateInline from './state_inline.ts'\n\nexport default function link (state: StateInline, silent: boolean): boolean {\n  let code, label, res, ref\n  let href = ''\n  let title = ''\n  let start = state.pos\n  let parseReference = true\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n  const oldPos = state.pos\n  const max = state.posMax\n  const labelStart = state.pos + 1\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false }\n\n  let pos = labelEnd + 1\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n    if (pos >= max) { return false }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str)\n      if (state.md.validateLink(href)) {\n        pos = res.pos\n      } else {\n        href = ''\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                ^^ skipping these spaces\n      start = pos\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos)\n        if (!isSpace(code) && code !== 0x0A) { break }\n      }\n\n      // [link](  <href>  \"title\"  )\n      //                  ^^^^^^^ parsing link title\n      res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n      if (pos < max && start !== pos && res.ok) {\n        title = res.str\n        pos = res.pos\n\n        // [link](  <href>  \"title\"  )\n        //                         ^^ skipping these spaces\n        for (; pos < max; pos++) {\n          code = state.src.charCodeAt(pos)\n          if (!isSpace(code) && code !== 0x0A) { break }\n        }\n      }\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true\n    }\n    pos++\n  }\n\n  if (parseReference) {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1\n      pos = state.md.helpers.parseLinkLabel(state, pos)\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++)\n      } else {\n        pos = labelEnd + 1\n      }\n    } else {\n      pos = labelEnd + 1\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n    label = normalizeReference(label)\n    ref = state.env.references[label]\n    if (!ref) {\n      state.pos = oldPos\n      return false\n    }\n    href = ref.href\n    title = ref.title\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    state.pos = labelStart\n    state.posMax = labelEnd\n\n    const token_o = state.push('link_open', 'a', 1)\n    const attrs: Array<[string, string]> = [['href', href]]\n    token_o.attrs = attrs\n    if (title) {\n      attrs.push(['title', title])\n    }\n    if (label) {\n      const meta: Record<string, unknown> = Object.create(null)\n      meta.label = label\n      token_o.meta = meta\n    }\n\n    state.linkLevel++\n    state.md.inline.tokenize(state)\n    state.linkLevel--\n\n    state.push('link_close', 'a', -1)\n  }\n\n  state.pos = pos\n  state.posMax = max\n  return true\n}\n","// Process ![image](<src> \"title\")\n\nimport { normalizeReference, isSpace } from '../common/utils.ts'\nimport type Token from '../token.ts'\nimport type StateInline from './state_inline.ts'\n\nexport default function image (state: StateInline, silent: boolean): boolean {\n  let code, content, label, pos, ref, res, title, start\n  let href = ''\n  const oldPos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n  const labelStart = state.pos + 2\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false }\n\n  pos = labelEnd + 1\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n    if (pos >= max) { return false }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str)\n      if (state.md.validateLink(href)) {\n        pos = res.pos\n      } else {\n        href = ''\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str\n      pos = res.pos\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos)\n        if (!isSpace(code) && code !== 0x0A) { break }\n      }\n    } else {\n      title = ''\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos\n      return false\n    }\n    pos++\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1\n      pos = state.md.helpers.parseLinkLabel(state, pos)\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++)\n      } else {\n        pos = labelEnd + 1\n      }\n    } else {\n      pos = labelEnd + 1\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n    label = normalizeReference(label)\n    ref = state.env.references[label]\n    if (!ref) {\n      state.pos = oldPos\n      return false\n    }\n    href = ref.href\n    title = ref.title\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd)\n\n    const tokens: Token[] = []\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens\n    )\n\n    const token = state.push('image', 'img', 0)\n    const attrs: Array<[string, string]> = [['src', href], ['alt', '']]\n    token.attrs = attrs\n    token.children = tokens\n    token.content = content\n\n    if (title) {\n      attrs.push(['title', title])\n    }\n    if (label) {\n      const meta: Record<string, unknown> = Object.create(null)\n      meta.label = label\n      token.meta = meta\n    }\n  }\n\n  state.pos = pos\n  state.posMax = max\n  return true\n}\n","// Process autolinks '<protocol:...>'\n\nimport type StateInline from './state_inline.ts'\n\n/* eslint max-len:0 */\nconst EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/\n/* eslint-disable-next-line no-control-regex */\nconst AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.-]{1,31}):([^<>\\x00-\\x20]*)$/\n\nexport default function autolink (state: StateInline, silent: boolean): boolean {\n  let pos = state.pos\n\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false }\n\n  const start = state.pos\n  const max = state.posMax\n\n  for (;;) {\n    if (++pos >= max) return false\n\n    const ch = state.src.charCodeAt(pos)\n\n    if (ch === 0x3C /* < */) return false\n    if (ch === 0x3E /* > */) break\n  }\n\n  const url = state.src.slice(start + 1, pos)\n\n  if (AUTOLINK_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink(url)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o = state.push('link_open', 'a', 1)\n      token_o.attrs = [['href', fullUrl]]\n      token_o.markup = 'autolink'\n      token_o.info = 'auto'\n\n      const token_t = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c = state.push('link_close', 'a', -1)\n      token_c.markup = 'autolink'\n      token_c.info = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  if (EMAIL_RE.test(url)) {\n    const fullUrl = state.md.normalizeLink(`mailto:${url}`)\n    if (!state.md.validateLink(fullUrl)) { return false }\n\n    if (!silent) {\n      const token_o = state.push('link_open', 'a', 1)\n      token_o.attrs = [['href', fullUrl]]\n      token_o.markup = 'autolink'\n      token_o.info = 'auto'\n\n      const token_t = state.push('text', '', 0)\n      token_t.content = state.md.normalizeLinkText(url)\n\n      const token_c = state.push('link_close', 'a', -1)\n      token_c.markup = 'autolink'\n      token_c.info = 'auto'\n    }\n\n    state.pos += url.length + 2\n    return true\n  }\n\n  return false\n}\n","// Process html tags\n\nimport { HTML_TAG_RE } from '../common/html_re.ts'\nimport type StateInline from './state_inline.ts'\n\nfunction isLinkOpen (str: string) {\n  return /^<a[>\\s]/i.test(str)\n}\nfunction isLinkClose (str: string) {\n  return /^<\\/a\\s*>/i.test(str)\n}\n\nfunction isLetter (ch: number) {\n  /* eslint no-bitwise:0 */\n  const lc = ch | 0x20 // to lower case\n  return (lc >= 0x61/* a */) && (lc <= 0x7a/* z */)\n}\n\nexport default function html_inline (state: StateInline, silent: boolean): boolean {\n  if (!state.md.options.html) { return false }\n\n  // Check start\n  const max = state.posMax\n  const pos = state.pos\n  if (state.src.charCodeAt(pos) !== 0x3C/* < */ ||\n      pos + 2 >= max) {\n    return false\n  }\n\n  // Quick fail on second char\n  const ch = state.src.charCodeAt(pos + 1)\n  if (ch !== 0x21/* ! */ &&\n      ch !== 0x3F/* ? */ &&\n      ch !== 0x2F/* / */ &&\n      !isLetter(ch)) {\n    return false\n  }\n\n  const match = state.src.slice(pos).match(HTML_TAG_RE)\n  if (!match) { return false }\n\n  if (!silent) {\n    const token = state.push('html_inline', '', 0)\n    token.content = match[0]\n\n    if (isLinkOpen(token.content)) state.linkLevel++\n    if (isLinkClose(token.content)) state.linkLevel--\n  }\n  state.pos += match[0].length\n  return true\n}\n","// Process html entity - &#123;, &#xAF;, &quot;, ...\n\nimport { decodeHTMLStrict } from 'entities'\nimport { isValidEntityCode, fromCodePoint } from '../common/utils.ts'\nimport type StateInline from './state_inline.ts'\n\nconst DIGITAL_RE = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i\nconst NAMED_RE = /^&([a-z][a-z0-9]{1,31});/i\n\nexport default function entity (state: StateInline, silent: boolean): boolean {\n  const pos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(pos) !== 0x26/* & */) return false\n\n  if (pos + 1 >= max) return false\n\n  const ch = state.src.charCodeAt(pos + 1)\n\n  if (ch === 0x23 /* # */) {\n    const match = state.src.slice(pos).match(DIGITAL_RE)\n    if (match) {\n      if (!silent) {\n        const code = match[1][0].toLowerCase() === 'x' ? parseInt(match[1].slice(1), 16) : parseInt(match[1], 10)\n\n        const token = state.push('text_special', '', 0)\n        token.content = isValidEntityCode(code) ? fromCodePoint(code) : fromCodePoint(0xFFFD)\n        token.markup = match[0]\n        token.info = 'entity'\n      }\n      state.pos += match[0].length\n      return true\n    }\n  } else {\n    const match = state.src.slice(pos).match(NAMED_RE)\n    if (match) {\n      const decoded = decodeHTMLStrict(match[0])\n      if (decoded !== match[0]) {\n        if (!silent) {\n          const token = state.push('text_special', '', 0)\n          token.content = decoded\n          token.markup = match[0]\n          token.info = 'entity'\n        }\n        state.pos += match[0].length\n        return true\n      }\n    }\n  }\n\n  return false\n}\n","// For each opening emphasis-like marker find a matching closing one\n//\n\nimport type { Delimiter } from '../types.ts'\nimport type StateInline from './state_inline.ts'\n\nfunction processDelimiters (delimiters: Delimiter[]) {\n  const openersBottom: Record<number, number[]> = {}\n  const max = delimiters.length\n\n  if (!max) return\n\n  // headerIdx is the first delimiter of the current (where closer is) delimiter run\n  let headerIdx = 0\n  let lastTokenIdx = -2 // needs any value lower than -1\n  const jumps: number[] = []\n\n  for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n    const closer = delimiters[closerIdx]\n\n    jumps.push(0)\n\n    // markers belong to same delimiter run if:\n    //  - they have adjacent tokens\n    //  - AND markers are the same\n    //\n    if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n      headerIdx = closerIdx\n    }\n\n    lastTokenIdx = closer.token\n\n    // Length is only used for emphasis-specific \"rule of 3\",\n    // if it's not defined (in strikethrough or 3rd party plugins),\n    // we can default it to 0 to disable those checks.\n    //\n    closer.length = closer.length || 0\n\n    if (!closer.close) continue\n\n    // Previously calculated lower bounds (previous fails)\n    // for each marker, each delimiter length modulo 3,\n    // and for whether this closer can be an opener;\n    // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n    /* eslint-disable-next-line no-prototype-builtins */\n    if (!openersBottom.hasOwnProperty(closer.marker)) {\n      openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n    }\n\n    const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n    let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n    let newMinOpenerIdx = openerIdx\n\n    for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n      const opener = delimiters[openerIdx]\n\n      if (opener.marker !== closer.marker) continue\n\n      if (opener.open && opener.end < 0) {\n        let isOddMatch = false\n\n        // from spec:\n        //\n        // If one of the delimiters can both open and close emphasis, then the\n        // sum of the lengths of the delimiter runs containing the opening and\n        // closing delimiters must not be a multiple of 3 unless both lengths\n        // are multiples of 3.\n        //\n        if (opener.close || closer.open) {\n          if ((opener.length! + closer.length) % 3 === 0) {\n            if (opener.length! % 3 !== 0 || closer.length % 3 !== 0) {\n              isOddMatch = true\n            }\n          }\n        }\n\n        if (!isOddMatch) {\n          // If previous delimiter cannot be an opener, we can safely skip\n          // the entire sequence in future checks. This is required to make\n          // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n          //\n          const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n            ? jumps[openerIdx - 1] + 1\n            : 0\n\n          jumps[closerIdx] = closerIdx - openerIdx + lastJump\n          jumps[openerIdx] = lastJump\n\n          closer.open = false\n          opener.end = closerIdx\n          opener.close = false\n          newMinOpenerIdx = -1\n          // treat next token as start of run,\n          // it optimizes skips in **<...>**a**<...>** pathological case\n          lastTokenIdx = -2\n          break\n        }\n      }\n    }\n\n    if (newMinOpenerIdx !== -1) {\n      // If match for this delimiter run failed, we want to set lower bound for\n      // future lookups. This is required to make sure algorithm has linear\n      // complexity.\n      //\n      // See details here:\n      // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n      //\n      openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n    }\n  }\n}\n\nexport default function link_pairs (state: StateInline): void {\n  const tokens_meta = state.tokens_meta\n  const max = state.tokens_meta.length\n\n  processDelimiters(state.delimiters)\n\n  for (let curr = 0; curr < max; curr++) {\n    const delimiters = tokens_meta[curr]?.delimiters\n    if (delimiters) {\n      processDelimiters(delimiters)\n    }\n  }\n}\n","// Clean up tokens after emphasis and strikethrough postprocessing:\n// merge adjacent text nodes into one and re-calculate all token levels\n//\n// This is necessary because initially emphasis delimiter markers (*, _, ~)\n// are treated as their own separate text tokens. Then emphasis rule either\n// leaves them as text (needed to merge with adjacent text) or turns them\n// into opening/closing tags (which messes up levels inside).\n//\n\nimport type StateInline from './state_inline.ts'\n\nexport default function fragments_join (state: StateInline): void {\n  let curr, last\n  let level = 0\n  const tokens = state.tokens\n  const max = state.tokens.length\n\n  for (curr = last = 0; curr < max; curr++) {\n    // re-calculate levels after emphasis/strikethrough turns some text nodes\n    // into opening/closing tags\n    if (tokens[curr].nesting < 0) level-- // closing tag\n    tokens[curr].level = level\n    if (tokens[curr].nesting > 0) level++ // opening tag\n\n    if (tokens[curr].type === 'text' &&\n        curr + 1 < max &&\n        tokens[curr + 1].type === 'text') {\n      // collapse two adjacent text nodes\n      tokens[curr + 1].content = tokens[curr].content + tokens[curr + 1].content\n    } else {\n      if (curr !== last) { tokens[last] = tokens[curr] }\n\n      last++\n    }\n  }\n\n  if (curr !== last) {\n    tokens.length = last\n  }\n}\n","import Ruler from './ruler.ts'\nimport StateInline from './rules_inline/state_inline.ts'\nimport type Token from './token.ts'\nimport type MarkdownIt from './markdownit.ts'\nimport type { Env } from './types.ts'\n\nimport r_text from './rules_inline/text.ts'\nimport r_linkify from './rules_inline/linkify.ts'\nimport r_newline from './rules_inline/newline.ts'\nimport r_escape from './rules_inline/escape.ts'\nimport r_backticks from './rules_inline/backticks.ts'\nimport r_strikethrough from './rules_inline/strikethrough.ts'\nimport r_emphasis from './rules_inline/emphasis.ts'\nimport r_link from './rules_inline/link.ts'\nimport r_image from './rules_inline/image.ts'\nimport r_autolink from './rules_inline/autolink.ts'\nimport r_html_inline from './rules_inline/html_inline.ts'\nimport r_entity from './rules_inline/entity.ts'\n\nimport r_balance_pairs from './rules_inline/balance_pairs.ts'\nimport r_fragments_join from './rules_inline/fragments_join.ts'\n\n// Parser rules\n\nconst _rules: Array<[\n  name: string,\n  rule: (state: StateInline, silent: boolean) => boolean\n]> = [\n  ['text', r_text],\n  ['linkify', r_linkify],\n  ['newline', r_newline],\n  ['escape', r_escape],\n  ['backticks', r_backticks],\n  ['strikethrough', r_strikethrough.tokenize],\n  ['emphasis', r_emphasis.tokenize],\n  ['link', r_link],\n  ['image', r_image],\n  ['autolink', r_autolink],\n  ['html_inline', r_html_inline],\n  ['entity', r_entity]\n]\n\n// `rule2` ruleset was created specifically for emphasis/strikethrough\n// post-processing and may be changed in the future.\n//\n// Don't use this for anything except pairs (plugins working with `balance_pairs`).\n//\nconst _rules2: Array<[\n  name: string,\n  rule: (state: StateInline) => void\n]> = [\n  ['balance_pairs', r_balance_pairs],\n  ['strikethrough', r_strikethrough.postProcess],\n  ['emphasis', r_emphasis.postProcess],\n  // rules for pairs separate '**' into its own text tokens, which may be left unused,\n  // rule below merges unused segments back with the rest of the text\n  ['fragments_join', r_fragments_join]\n]\n\n/**\n * Tokenizes paragraph content.\n */\nclass ParserInline {\n  /**\n   * {@link Ruler} instance. Keep configuration of inline rules.\n   */\n  ruler = new Ruler<[StateInline, boolean], boolean>()\n\n  /**\n   * {@link Ruler} instance. Second ruler used for post-processing\n   * (e.g. in emphasis-like rules).\n   */\n  ruler2 = new Ruler<[StateInline], void>()\n\n  State = StateInline\n\n  constructor () {\n    for (let i = 0; i < _rules.length; i++) {\n      this.ruler.push(_rules[i][0], _rules[i][1])\n    }\n\n    for (let i = 0; i < _rules2.length; i++) {\n      this.ruler2.push(_rules2[i][0], _rules2[i][1])\n    }\n  }\n\n  // Skip single token by running all rules in validation mode;\n  // returns `true` if any rule reported success\n  //\n  skipToken (state: StateInline): void {\n    const pos = state.pos\n    const rules = this.ruler.getRules('')\n    const len = rules.length\n    const maxNesting = state.md.options.maxNesting\n    const cache = state.cache\n\n    if (typeof cache[pos] !== 'undefined') {\n      state.pos = cache[pos]\n      return\n    }\n\n    let ok = false\n\n    if (state.level < maxNesting) {\n      for (let i = 0; i < len; i++) {\n        // Increment state.level and decrement it later to limit recursion.\n        // It's harmless to do here, because no tokens are created. But ideally,\n        // we'd need a separate private state variable for this purpose.\n        //\n        state.level++\n        ok = rules[i](state, true)\n        state.level--\n\n        if (ok) {\n          if (pos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n          break\n        }\n      }\n    } else {\n      // Too much nesting, just skip until the end of the paragraph.\n      //\n      // NOTE: this will cause links to behave incorrectly in the following case,\n      //       when an amount of `[` is exactly equal to `maxNesting + 1`:\n      //\n      //       [[[[[[[[[[[[[[[[[[[[[foo]()\n      //\n      // TODO: remove this workaround when CM standard will allow nested links\n      //       (we can replace it by preventing links from being parsed in\n      //       validation mode)\n      //\n      state.pos = state.posMax\n    }\n\n    if (!ok) { state.pos++ }\n    cache[pos] = state.pos\n  }\n\n  // Generate tokens for input range\n  //\n  tokenize (state: StateInline): void {\n    const rules = this.ruler.getRules('')\n    const len = rules.length\n    const end = state.posMax\n    const maxNesting = state.md.options.maxNesting\n\n    while (state.pos < end) {\n      // Try all possible rules.\n      // On success, rule should:\n      //\n      // - update `state.pos`\n      // - update `state.tokens`\n      // - return true\n      const prevPos = state.pos\n      let ok = false\n\n      if (state.level < maxNesting) {\n        for (let i = 0; i < len; i++) {\n          ok = rules[i](state, false)\n          if (ok) {\n            if (prevPos >= state.pos) { throw new Error(\"inline rule didn't increment state.pos\") }\n            break\n          }\n        }\n      }\n\n      if (ok) {\n        if (state.pos >= end) { break }\n        continue\n      }\n\n      state.pending += state.src[state.pos++]\n    }\n\n    if (state.pending) {\n      state.pushPending()\n    }\n  }\n\n  /**\n   * Process input string and push inline tokens into `outTokens`\n   */\n  parse (str: string, md: MarkdownIt, env: Env, outTokens: Token[]): void {\n    const state = new this.State(str, md, env, outTokens)\n\n    this.tokenize(state)\n\n    const rules = this.ruler2.getRules('')\n    const len = rules.length\n\n    for (let i = 0; i < len; i++) {\n      rules[i](state)\n    }\n  }\n}\n\nexport default ParserInline\n","// markdown-it default options\n\nimport type { MarkdownItOptions } from '../types.ts'\n\nconst options: Required<MarkdownItOptions> = {\n  // Enable HTML tags in source\n  html: false,\n\n  // Use '/' to close single tags (<br />)\n  xhtmlOut: false,\n\n  // Convert '\\n' in paragraphs into <br>\n  breaks: false,\n\n  // CSS language prefix for fenced blocks\n  langPrefix: 'language-',\n\n  // autoconvert URL-like texts to links\n  linkify: false,\n\n  // Enable some language-neutral replacements + quotes beautification\n  typographer: false,\n\n  // Double + single quotes replacement pairs, when typographer enabled,\n  // and smartquotes on. Could be either a String or an Array.\n  //\n  // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n  // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n  quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n  // Highlighter function. Should return escaped HTML,\n  // or '' if the source string is not changed and should be escaped externaly.\n  // If result starts with <pre... internal wrapper is skipped.\n  //\n  // function (/*str, lang*/) { return ''; }\n  //\n  highlight: null,\n\n  // Internal protection, recursion limit\n  maxNesting: 100\n}\n\nexport default {\n  options,\n\n  components: {\n    core: {},\n    block: {},\n    inline: {}\n  }\n}\n","// \"Zero\" preset, with nothing enabled. Useful for manual configuring of simple\n// modes. For example, to parse bold/italic only.\n\nimport type { MarkdownItOptions } from '../types.ts'\n\nconst options: Required<MarkdownItOptions> = {\n  // Enable HTML tags in source\n  html: false,\n\n  // Use '/' to close single tags (<br />)\n  xhtmlOut: false,\n\n  // Convert '\\n' in paragraphs into <br>\n  breaks: false,\n\n  // CSS language prefix for fenced blocks\n  langPrefix: 'language-',\n\n  // autoconvert URL-like texts to links\n  linkify: false,\n\n  // Enable some language-neutral replacements + quotes beautification\n  typographer: false,\n\n  // Double + single quotes replacement pairs, when typographer enabled,\n  // and smartquotes on. Could be either a String or an Array.\n  //\n  // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n  // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n  quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n  // Highlighter function. Should return escaped HTML,\n  // or '' if the source string is not changed and should be escaped externaly.\n  // If result starts with <pre... internal wrapper is skipped.\n  //\n  // function (/*str, lang*/) { return ''; }\n  //\n  highlight: null,\n\n  // Internal protection, recursion limit\n  maxNesting: 20\n}\n\nexport default {\n  options,\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'strip_references',\n        'inline',\n        'text_join'\n      ]\n    },\n\n    block: {\n      rules: [\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'fragments_join'\n      ]\n    }\n  }\n}\n","// Commonmark default options\n\nimport type { MarkdownItOptions } from '../types.ts'\n\nconst options: Required<MarkdownItOptions> = {\n  // Enable HTML tags in source\n  html: true,\n\n  // Use '/' to close single tags (<br />)\n  xhtmlOut: true,\n\n  // Convert '\\n' in paragraphs into <br>\n  breaks: false,\n\n  // CSS language prefix for fenced blocks\n  langPrefix: 'language-',\n\n  // autoconvert URL-like texts to links\n  linkify: false,\n\n  // Enable some language-neutral replacements + quotes beautification\n  typographer: false,\n\n  // Double + single quotes replacement pairs, when typographer enabled,\n  // and smartquotes on. Could be either a String or an Array.\n  //\n  // For example, you can use '«»„“' for Russian, '„“‚‘' for German,\n  // and ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] for French (including nbsp).\n  quotes: '\\u201c\\u201d\\u2018\\u2019', /* “”‘’ */\n\n  // Highlighter function. Should return escaped HTML,\n  // or '' if the source string is not changed and should be escaped externaly.\n  // If result starts with <pre... internal wrapper is skipped.\n  //\n  // function (/*str, lang*/) { return ''; }\n  //\n  highlight: null,\n\n  // Internal protection, recursion limit\n  maxNesting: 20\n}\n\nexport default {\n  options,\n\n  components: {\n\n    core: {\n      rules: [\n        'normalize',\n        'block',\n        'strip_references',\n        'inline',\n        'text_join'\n      ]\n    },\n\n    block: {\n      rules: [\n        'blockquote',\n        'code',\n        'fence',\n        'heading',\n        'hr',\n        'html_block',\n        'lheading',\n        'list',\n        'reference',\n        'paragraph'\n      ]\n    },\n\n    inline: {\n      rules: [\n        'autolink',\n        'backticks',\n        'emphasis',\n        'entity',\n        'escape',\n        'html_inline',\n        'image',\n        'link',\n        'newline',\n        'text'\n      ],\n      rules2: [\n        'balance_pairs',\n        'emphasis',\n        'fragments_join'\n      ]\n    }\n  }\n}\n","// Main parser class\n\nimport * as utils from './common/utils.ts'\nimport * as helpers from './helpers/index.ts'\nimport Token from './token.ts'\nimport Ruler from './ruler.ts'\nimport Renderer from './renderer.ts'\nimport ParserCore from './parser_core.ts'\nimport StateCore from './rules_core/state_core.ts'\nimport ParserBlock from './parser_block.ts'\nimport StateBlock from './rules_block/state_block.ts'\nimport ParserInline from './parser_inline.ts'\nimport StateInline from './rules_inline/state_inline.ts'\nimport { LinkifyIt } from 'linkify-it'\nimport * as mdurl from 'mdurl'\nimport punycode from 'punycode.js'\n\nimport cfg_default from './presets/default.ts'\nimport cfg_zero from './presets/zero.ts'\nimport cfg_commonmark from './presets/commonmark.ts'\nimport type { Env, MarkdownItOptions } from './types.ts'\n\nconst config = {\n  default: cfg_default,\n  zero: cfg_zero,\n  commonmark: cfg_commonmark\n}\n\ntype MarkdownItPresetName = keyof typeof config\n\n/**\n * Parser preset containing options and enabled rules for each parser component.\n */\nexport interface MarkdownItPreset {\n  options?: Required<MarkdownItOptions>\n  components?: {\n    core?: {\n      rules?: string[]\n    }\n    block?: {\n      rules?: string[]\n    }\n    inline?: {\n      rules?: string[]\n      rules2?: string[]\n    }\n  }\n}\n\ntype MarkdownItComponentName = keyof NonNullable<MarkdownItPreset['components']>\n\n//\n// This validator can prohibit more than really needed to prevent XSS. It's a\n// tradeoff to keep code simple and to be secure by default.\n//\n// If you need different setup - override validator method as you wish. Or\n// replace it with dummy function and use external sanitizer.\n//\n\nconst BAD_PROTO_RE = /^(vbscript|javascript|file|data):/\nconst GOOD_DATA_RE = /^data:image\\/(gif|png|jpeg|webp);/\n\nconst RECODE_HOSTNAME_FOR = ['http:', 'https:', 'mailto:']\n\n/**\n * Parses Markdown into tokens and renders them to HTML.\n *\n * @category Main\n */\nclass MarkdownIt {\n  /**\n   * Instance of {@link ParserInline}. You may need it to add new rules when\n   * writing plugins. For simple rules control use {@link MarkdownIt.disable}\n   * and {@link MarkdownIt.enable}.\n   */\n  inline = new ParserInline()\n\n  /**\n   * Instance of {@link ParserBlock}. You may need it to add new rules when\n   * writing plugins. For simple rules control use {@link MarkdownIt.disable}\n   * and {@link MarkdownIt.enable}.\n   */\n  block = new ParserBlock()\n\n  /**\n   * Instance of {@link ParserCore} chain executor. You may need it to add new\n   * rules when writing plugins. For simple rules control use\n   * {@link MarkdownIt.disable} and {@link MarkdownIt.enable}.\n   */\n  core = new ParserCore()\n\n  /**\n   * Instance of {@link Renderer}. Use it to modify output look. Or to add rendering\n   * rules for new token types, generated by plugins.\n   *\n   * See {@link Renderer} docs and\n   * [source code](https://github.com/markdown-it/markdown-it/blob/master/src/renderer.ts).\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * function myToken(tokens, idx, options, env, self) {\n   *   //...\n   *   return result;\n   * };\n   *\n   * md.renderer.rules['my_token'] = myToken\n   * ```\n   */\n  renderer = new Renderer()\n\n  /**\n   * [linkify-it](https://github.com/markdown-it/linkify-it) instance.\n   * Used by [linkify](https://github.com/markdown-it/markdown-it/blob/master/src/rules_core/linkify.ts)\n   * rule.\n   */\n  linkify = new LinkifyIt()\n\n  /**\n   * Link validation function. CommonMark allows too much in links. By default\n   * we disable `javascript:`, `vbscript:`, `file:` schemas, and almost all `data:...` schemas\n   * except some embedded image types.\n   *\n   * You can change this behaviour:\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * const md = new MarkdownIt()\n   *\n   * // enable everything\n   * md.validateLink = function () { return true; }\n   * ```\n   */\n  validateLink (url: string): boolean {\n    // url should be normalized at this point, and existing entities are decoded\n    const str = url.trim().toLowerCase()\n\n    return BAD_PROTO_RE.test(str) ? GOOD_DATA_RE.test(str) : true\n  }\n\n  /**\n   * Function used to encode link url to a machine-readable format,\n   * which includes url-encoding, punycode, etc.\n   */\n  normalizeLink (url: string): string {\n    // Each url part should be encoded separately, with proper encoder\n    const parsed = mdurl.parse(url, true)\n\n    if (parsed.hostname) {\n      // Encode hostnames in urls like:\n      // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n      //\n      // We don't encode unknown schemas, because it's likely that we encode\n      // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n      //\n      if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n        try {\n          parsed.hostname = punycode.toASCII(parsed.hostname)\n        } catch (er) { /**/ }\n      }\n    }\n\n    if (parsed.auth) parsed.auth = mdurl.encode(parsed.auth)\n    if (parsed.hostname) parsed.hostname = mdurl.encode(parsed.hostname)\n    if (parsed.pathname) parsed.pathname = mdurl.encode(parsed.pathname)\n    if (parsed.search) parsed.search = mdurl.encode(parsed.search)\n    if (parsed.hash) parsed.hash = mdurl.encode(parsed.hash)\n\n    return mdurl.format(parsed)\n  }\n\n  /**\n   * Function used to decode link url to a human-readable format`\n   */\n  normalizeLinkText (url: string): string {\n    const parsed = mdurl.parse(url, true)\n\n    if (parsed.hostname) {\n      // Encode hostnames in urls like:\n      // `http://host/`, `https://host/`, `mailto:user@host`, `//host/`\n      //\n      // We don't encode unknown schemas, because it's likely that we encode\n      // something we shouldn't (e.g. `skype:name` treated as `skype:host`)\n      //\n      if (!parsed.protocol || RECODE_HOSTNAME_FOR.indexOf(parsed.protocol) >= 0) {\n        try {\n          parsed.hostname = punycode.toUnicode(parsed.hostname)\n        } catch (er) { /**/ }\n      }\n    }\n\n    // add '%' to exclude list because of https://github.com/markdown-it/markdown-it/issues/720\n    return mdurl.decode(mdurl.format(parsed), mdurl.decode.defaultChars + '%')\n  }\n\n  // Expose utils & helpers for easy acces from plugins\n\n  /**\n   * Assorted utility functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/src/common/utils.ts).\n   */\n  utils = utils\n\n  /**\n   * Link components parser functions, useful to write plugins. See details\n   * [here](https://github.com/markdown-it/markdown-it/blob/master/src/helpers).\n   */\n  helpers = Object.assign({}, helpers)\n\n  declare options: Required<MarkdownItOptions>\n\n  constructor (\n    ...args:\n      | []\n      | [options: MarkdownItOptions]\n      | [presetName: MarkdownItPresetName, options?: MarkdownItOptions]\n  ) {\n    const [presetNameOrOptions, options] = args\n\n    if (typeof presetNameOrOptions === 'string') {\n      this.configure(presetNameOrOptions)\n      if (options) { this.set(options) }\n    } else {\n      this.configure('default')\n      this.set(presetNameOrOptions || {})\n    }\n  }\n\n  /**\n   * Set parser options (in the same format as in constructor). Probably, you\n   * will never need it, but you can change options after constructor call.\n   *\n   * __Note:__ To achieve the best possible performance, don't modify a\n   * `markdown-it` instance options on the fly. If you need multiple configurations\n   * it's best to create multiple instances and initialize each with separate\n   * config.\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   *\n   * const md = new MarkdownIt()\n   *   .set({ html: true, breaks: true })\n   *   .set({ typographer: true })\n   * ```\n   */\n  set (options: MarkdownItOptions): this {\n    Object.assign(this.options, options)\n    return this\n  }\n\n  /**\n   * Batch load of all options and compenent settings. This is internal method,\n   * and you probably will not need it. But if you will - see available presets\n   * and data structure [here](https://github.com/markdown-it/markdown-it/tree/master/src/presets)\n   *\n   * We strongly recommend to use presets instead of direct config loads. That\n   * will give better compatibility with next versions.\n   */\n  configure (presets: MarkdownItPresetName | MarkdownItPreset): this {\n    let p: MarkdownItPreset\n\n    if (typeof presets === 'string') {\n      const presetName = presets\n      p = config[presetName]\n      if (!p) { throw new Error(`Wrong 'markdown-it' preset \"${presetName}\", check name`) }\n    } else {\n      p = presets\n    }\n\n    if (!p) { throw new Error('Wrong `markdown-it` preset, can\\'t be empty') }\n\n    if (p.options) { this.options = { ...p.options } }\n\n    const components = p.components\n    if (components) {\n      const componentNames: MarkdownItComponentName[] = ['core', 'block', 'inline']\n      componentNames.forEach((name) => {\n        const rules = components[name]?.rules\n        if (rules) {\n          this[name].ruler.enableOnly(rules)\n        }\n      })\n\n      const rules2 = components.inline?.rules2\n      if (rules2) {\n        this.inline.ruler2.enableOnly(rules2)\n      }\n    }\n    return this\n  }\n\n  /**\n   * Enable list or rules. It will automatically find appropriate components,\n   * containing rules with given names. If rule not found, and `ignoreInvalid`\n   * not set - throws exception.\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   *\n   * const md = new MarkdownIt()\n   *   .enable(['sub', 'sup'])\n   *   .disable('smartquotes')\n   * ```\n   */\n  enable (list: string | string[], ignoreInvalid = false): this {\n    let result: string[] = []\n\n    if (!Array.isArray(list)) { list = [list] }\n\n    const chains: MarkdownItComponentName[] = ['core', 'block', 'inline']\n    chains.forEach((chain) => {\n      result = result.concat(this[chain].ruler.enable(list, true))\n    })\n\n    result = result.concat(this.inline.ruler2.enable(list, true))\n\n    const missed = list.filter((name) => result.indexOf(name) < 0)\n\n    if (missed.length && !ignoreInvalid) {\n      throw new Error(`MarkdownIt. Failed to enable unknown rule(s): ${missed}`)\n    }\n\n    return this\n  }\n\n  /**\n   * The same as {@link MarkdownIt.enable}, but turn specified rules off.\n   */\n  disable (list: string | string[], ignoreInvalid = false): this {\n    let result: string[] = []\n\n    if (!Array.isArray(list)) { list = [list] }\n\n    const chains: MarkdownItComponentName[] = ['core', 'block', 'inline']\n    chains.forEach((chain) => {\n      result = result.concat(this[chain].ruler.disable(list, true))\n    })\n\n    result = result.concat(this.inline.ruler2.disable(list, true))\n\n    const missed = list.filter((name) => result.indexOf(name) < 0)\n\n    if (missed.length && !ignoreInvalid) {\n      throw new Error(`MarkdownIt. Failed to disable unknown rule(s): ${missed}`)\n    }\n    return this\n  }\n\n  /**\n   * Load specified plugin with given params into current parser instance.\n   * It's just a sugar to call `plugin(md, params)` with curring.\n   *\n   * @example\n   * ```javascript\n   * import MarkdownIt from 'markdown-it'\n   * import iterator from 'markdown-it-for-inline'\n   *\n   * const md = new MarkdownIt()\n   *   .use(iterator, 'foo_replace', 'text', function (tokens, idx) {\n   *     tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar')\n   *   })\n   * ```\n   */\n  use<Params extends unknown[]> (\n    plugin: (md: this, ...params: Params) => void,\n    ...params: Params\n  ): this {\n    plugin.apply(plugin, [this, ...params])\n    return this\n  }\n\n  /**\n   * Parse input string and return list of block tokens (special token type\n   * \"inline\" will contain list of inline tokens). You should not call this\n   * method directly, until you write custom renderer (for example, to produce\n   * AST).\n   *\n   * `env` is used to pass data between \"distributed\" rules and return additional\n   * metadata like reference info, needed for the renderer. It also can be used to\n   * inject data in specific cases. Usually, you will be ok to pass `{}`,\n   * and then pass updated object to renderer.\n   */\n  parse (src: string, env: Env): Token[] {\n    if (typeof src !== 'string') {\n      throw new Error('Input data should be a String')\n    }\n\n    const state = new this.core.State(src, this, env)\n\n    this.core.process(state)\n\n    return state.tokens\n  }\n\n  /**\n   * Render markdown string into html. It does all magic for you :).\n   *\n   * `env` can be used to inject additional metadata (`{}` by default).\n   * But you will not need it with high probability. See also comment\n   * in {@link MarkdownIt.parse}.\n   */\n  render (src: string, env: Env = {}): string {\n    return this.renderer.render(this.parse(src, env), this.options, env)\n  }\n\n  /**\n   * The same as {@link MarkdownIt.parse} but skip all block rules. It returns\n   * the block tokens list with the single `inline` element, containing parsed\n   * inline tokens in `children` property. Also updates `env` object.\n   */\n  parseInline (src: string, env: Env): Token[] {\n    const state = new this.core.State(src, this, env)\n\n    state.inlineMode = true\n    this.core.process(state)\n\n    return state.tokens\n  }\n\n  /**\n   * Similar to {@link MarkdownIt.render} but for single paragraph content.\n   * Result will NOT be wrapped into `<p>` tags.\n   */\n  renderInline (src: string, env: Env = {}): string {\n    return this.renderer.render(this.parseInline(src, env), this.options, env)\n  }\n\n  static Token = Token\n  static Ruler = Ruler\n  static Renderer = Renderer\n  static ParserCore = ParserCore\n  static StateCore = StateCore\n  static ParserBlock = ParserBlock\n  static StateBlock = StateBlock\n  static ParserInline = ParserInline\n  static StateInline = StateInline\n}\n\nexport default MarkdownIt\n","import { callable } from './common/utils.ts'\nimport MarkdownIt from './markdownit.ts'\n\n/**\n * Default package export.\n *\n * For backward compatibility, the {@link MarkdownIt} class is wrapped so\n * legacy code can call it without `new`. New code should instantiate it as a\n * regular class with `new`. The compatibility wrapper may be removed in a\n * future release.\n *\n * @category Main\n */\nconst MarkdownItCallable = callable(MarkdownIt)\n\nexport default MarkdownItCallable\n\nexport type { default as MarkdownIt, MarkdownItPreset } from './markdownit.ts'\nexport type { Delimiter, Env, MarkdownItOptions } from './types.ts'\nexport type { default as Token } from './token.ts'\nexport type { default as Ruler } from './ruler.ts'\nexport type { default as Renderer, RendererRule } from './renderer.ts'\nexport type { default as ParserCore } from './parser_core.ts'\nexport type { default as StateCore } from './rules_core/state_core.ts'\nexport type { default as ParserBlock } from './parser_block.ts'\nexport type { default as StateBlock } from './rules_block/state_block.ts'\nexport type { default as ParserInline } from './parser_inline.ts'\nexport type { default as StateInline } from './rules_inline/state_inline.ts'\n","import MarkdownIt from \"markdown-it\";\n\nconst linkify = new MarkdownIt(\"zero\").linkify.set({ fuzzyLink: false, fuzzyEmail: false });\n\n/** Split web URLs from literal text so Vue can escape every displayed fragment. */\nexport function linkedText(text: string): Array<{ text: string; href?: string }> {\n  const parts: Array<{ text: string; href?: string }> = [];\n  let offset = 0;\n  for (const match of linkify.match(text) ?? []) {\n    if (match.schema !== \"http:\" && match.schema !== \"https:\") continue;\n    if (match.index > offset) parts.push({ text: text.slice(offset, match.index) });\n    parts.push({ text: match.raw, href: match.url });\n    offset = match.lastIndex;\n  }\n  if (offset < text.length || !parts.length) parts.push({ text: text.slice(offset) });\n  return parts;\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.parts, (part, index) => {\n    return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n      (part.href)\n        ? (_openBlock(), _createElementBlock(\"a\", {\n            key: 0,\n            class: \"linked-text__link\",\n            href: part.href,\n            target: \"_blank\",\n            rel: \"noopener noreferrer\",\n            title: \"Opent in een nieuw tabblad\"\n          }, _toDisplayString(part.text), 9 /* TEXT, PROPS */, _hoisted_1))\n        : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n            _createTextVNode(_toDisplayString(part.text), 1 /* TEXT */)\n          ], 64 /* STABLE_FRAGMENT */))\n    ], 64 /* STABLE_FRAGMENT */))\n  }), 128 /* KEYED_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LinkedText.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LinkedText.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LinkedText.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/LinkedText.vue\";script.__scopeId = \"data-v-cff22b47\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"mir__content\" }\nconst _hoisted_2 = { class: \"mir__meta\" }\nconst _hoisted_3 = [\"datetime\"]\nconst _hoisted_4 = { class: \"mir__text\" }\nconst _hoisted_5 = [\"aria-label\"]\nconst _hoisted_6 = {\n  width: \"18\",\n  height: \"18\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.7\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_7 = [\"d\"]\nconst _hoisted_8 = {\n  width: \"18\",\n  height: \"18\",\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.7\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_9 = [\"d\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"ContextMenuRoot\"], { modal: false }, {\n    default: _withCtx(() => [\n      _createVNode($setup[\"ContextMenuTrigger\"], {\n        \"as-child\": \"\",\n        disabled: !$props.canEdit\n      }, {\n        default: _withCtx(() => [\n          _createElementVNode(\"li\", {\n            class: _normalizeClass([\"mir\", { 'mir--editable': $props.canEdit }]),\n            onDblclick: $setup.editFromRow\n          }, [\n            _createElementVNode(\"div\", _hoisted_1, [\n              _createElementVNode(\"div\", _hoisted_2, [\n                _createElementVNode(\"span\", null, _toDisplayString($props.name), 1 /* TEXT */),\n                _createElementVNode(\"time\", {\n                  datetime: $props.item.createdAt\n                }, \"Ingediend \" + _toDisplayString($setup.fmtInputDate($props.item.createdAt)), 9 /* TEXT, PROPS */, _hoisted_3)\n              ]),\n              _createElementVNode(\"p\", _hoisted_4, [\n                _createVNode($setup[\"LinkedText\"], {\n                  text: $props.item.text\n                }, null, 8 /* PROPS */, [\"text\"])\n              ])\n            ]),\n            ($props.canEdit)\n              ? (_openBlock(), _createBlock($setup[\"DropdownMenuRoot\"], {\n                  key: 0,\n                  modal: false\n                }, {\n                  default: _withCtx(() => [\n                    _createVNode($setup[\"DropdownMenuTrigger\"], { \"as-child\": \"\" }, {\n                      default: _withCtx(() => [\n                        _createElementVNode(\"button\", {\n                          ref: \"trigger\",\n                          type: \"button\",\n                          class: \"mir__trigger\",\n                          \"aria-label\": `Acties voor punt: ${$props.item.text}`,\n                          title: \"Acties\"\n                        }, _cache[2] || (_cache[2] = [\n                          _createElementVNode(\"svg\", {\n                            width: \"20\",\n                            height: \"20\",\n                            viewBox: \"0 0 24 24\",\n                            fill: \"currentColor\",\n                            \"aria-hidden\": \"true\"\n                          }, [\n                            _createElementVNode(\"circle\", {\n                              cx: \"12\",\n                              cy: \"5\",\n                              r: \"2\"\n                            }),\n                            _createElementVNode(\"circle\", {\n                              cx: \"12\",\n                              cy: \"12\",\n                              r: \"2\"\n                            }),\n                            _createElementVNode(\"circle\", {\n                              cx: \"12\",\n                              cy: \"19\",\n                              r: \"2\"\n                            })\n                          ], -1 /* CACHED */)\n                        ]), 8 /* PROPS */, _hoisted_5)\n                      ]),\n                      _: 1 /* STABLE */\n                    }),\n                    _createVNode($setup[\"DropdownMenuPortal\"], null, {\n                      default: _withCtx(() => [\n                        _createVNode($setup[\"DropdownMenuContent\"], {\n                          class: \"mir__menu\",\n                          align: \"end\",\n                          \"side-offset\": 6,\n                          \"collision-padding\": 12,\n                          loop: \"\",\n                          onCloseAutoFocus: $setup.onCloseAutoFocus,\n                          onInteractOutside: _cache[0] || (_cache[0] = $event => ($setup.interactedOutside = true))\n                        }, {\n                          default: _withCtx(() => [\n                            (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.actions, (action) => {\n                              return (_openBlock(), _createElementBlock(_Fragment, {\n                                key: action.key\n                              }, [\n                                (action.key === 'delete')\n                                  ? (_openBlock(), _createBlock($setup[\"DropdownMenuSeparator\"], {\n                                      key: 0,\n                                      class: \"mir__separator\"\n                                    }))\n                                  : _createCommentVNode(\"v-if\", true),\n                                _createVNode($setup[\"DropdownMenuItem\"], {\n                                  class: _normalizeClass([\"mir__action\", { 'mir__action--destructive': action.key === 'delete' }]),\n                                  onSelect: $event => ($setup.select(action.key))\n                                }, {\n                                  default: _withCtx(() => [\n                                    (_openBlock(), _createElementBlock(\"svg\", _hoisted_6, [\n                                      _createElementVNode(\"path\", {\n                                        d: action.icon\n                                      }, null, 8 /* PROPS */, _hoisted_7)\n                                    ])),\n                                    _createTextVNode(\" \" + _toDisplayString(action.label), 1 /* TEXT */)\n                                  ]),\n                                  _: 2 /* DYNAMIC */\n                                }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"class\", \"onSelect\"])\n                              ], 64 /* STABLE_FRAGMENT */))\n                            }), 64 /* STABLE_FRAGMENT */))\n                          ]),\n                          _: 1 /* STABLE */\n                        })\n                      ]),\n                      _: 1 /* STABLE */\n                    })\n                  ]),\n                  _: 1 /* STABLE */\n                }))\n              : _createCommentVNode(\"v-if\", true)\n          ], 34 /* CLASS, NEED_HYDRATION */)\n        ]),\n        _: 1 /* STABLE */\n      }, 8 /* PROPS */, [\"disabled\"]),\n      ($props.canEdit)\n        ? (_openBlock(), _createBlock($setup[\"ContextMenuPortal\"], { key: 0 }, {\n            default: _withCtx(() => [\n              _createVNode($setup[\"ContextMenuContent\"], {\n                class: \"mir__menu\",\n                \"aria-label\": `Acties voor punt: ${$props.item.text}`,\n                \"collision-padding\": 12,\n                loop: \"\",\n                onCloseAutoFocus: $setup.onCloseAutoFocus,\n                onInteractOutside: _cache[1] || (_cache[1] = $event => ($setup.interactedOutside = true))\n              }, {\n                default: _withCtx(() => [\n                  (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.actions, (action) => {\n                    return (_openBlock(), _createElementBlock(_Fragment, {\n                      key: action.key\n                    }, [\n                      (action.key === 'delete')\n                        ? (_openBlock(), _createBlock($setup[\"ContextMenuSeparator\"], {\n                            key: 0,\n                            class: \"mir__separator\"\n                          }))\n                        : _createCommentVNode(\"v-if\", true),\n                      _createVNode($setup[\"ContextMenuItem\"], {\n                        class: _normalizeClass([\"mir__action\", { 'mir__action--destructive': action.key === 'delete' }]),\n                        onSelect: $event => ($setup.select(action.key))\n                      }, {\n                        default: _withCtx(() => [\n                          (_openBlock(), _createElementBlock(\"svg\", _hoisted_8, [\n                            _createElementVNode(\"path\", {\n                              d: action.icon\n                            }, null, 8 /* PROPS */, _hoisted_9)\n                          ])),\n                          _createTextVNode(\" \" + _toDisplayString(action.label), 1 /* TEXT */)\n                        ]),\n                        _: 2 /* DYNAMIC */\n                      }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"class\", \"onSelect\"])\n                    ], 64 /* STABLE_FRAGMENT */))\n                  }), 64 /* STABLE_FRAGMENT */))\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"aria-label\"])\n            ]),\n            _: 1 /* STABLE */\n          }))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _: 1 /* STABLE */\n  }))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputRow.vue\";script.__scopeId = \"data-v-9e20feff\";export default script;","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"mil__empty\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"mil__list\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (!$setup.rows.length)\n    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, \"Nog geen punten ingestuurd.\"))\n    : (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.rows, ({ item, name }) => {\n          return (_openBlock(), _createBlock($setup[\"MeetingInputRow\"], {\n            key: item.id,\n            item: item,\n            name: name,\n            \"can-edit\": item.personId === $props.ownPersonId,\n            onEdit: _cache[0] || (_cache[0] = $event => (_ctx.$emit('edit', $event))),\n            onDelete: _cache[1] || (_cache[1] = $event => (_ctx.$emit('delete', $event)))\n          }, null, 8 /* PROPS */, [\"item\", \"name\", \"can-edit\"]))\n        }), 128 /* KEYED_FRAGMENT */))\n      ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputList.vue\";script.__scopeId = \"data-v-75adb93f\";export default script;","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"mis\",\n  role: \"status\",\n  \"aria-label\": \"Input laden\"\n}\nconst _hoisted_2 = { \"aria-hidden\": \"true\" }\nconst _hoisted_3 = { class: \"mis__list\" }\n\nexport function render(_ctx, _cache) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _cache[1] || (_cache[1] = _createElementVNode(\"div\", { class: \"mis__tabs\" }, [\n        _createElementVNode(\"span\", { class: \"mis__block mis__tab\" }),\n        _createElementVNode(\"span\", { class: \"mis__block mis__tab\" })\n      ], -1 /* CACHED */)),\n      _createElementVNode(\"div\", _hoisted_3, [\n        (_openBlock(), _createElementBlock(_Fragment, null, _renderList(2, (row) => {\n          return _createElementVNode(\"div\", {\n            key: row,\n            class: \"mis__row\"\n          }, _cache[0] || (_cache[0] = [\n            _createElementVNode(\"span\", { class: \"mis__block mis__meta\" }, null, -1 /* CACHED */),\n            _createElementVNode(\"span\", { class: \"mis__block mis__text\" }, null, -1 /* CACHED */)\n          ]))\n        }), 64 /* STABLE_FRAGMENT */))\n      ]),\n      _cache[2] || (_cache[2] = _createElementVNode(\"div\", { class: \"mis__form\" }, [\n        _createElementVNode(\"span\", { class: \"mis__block mis__label\" }),\n        _createElementVNode(\"span\", { class: \"mis__block mis__field\" }),\n        _createElementVNode(\"span\", { class: \"mis__block mis__button\" })\n      ], -1 /* CACHED */))\n    ])\n  ]))\n}","const script = {};import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputSkeleton.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputSkeleton.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputSkeleton.vue\";script.__scopeId = \"data-v-035c8503\";export default script;","import type { MeetingInputOverview } from \"@mod-tech42_tools/js/mondays/types\";\n\n/** Offer person filters only when multiple contributors have waiting points. */\nexport function meetingInputTabs({ overview, selected }: { overview: MeetingInputOverview | null; selected: string }) {\n  const people = (overview?.people ?? []).map(person => ({\n    id: String(person.id), label: person.short,\n    items: overview?.items.filter(item => item.personId === person.id) ?? [],\n  })).filter(tab => tab.items.length > 0);\n  const tabs = [\n    { id: \"all\", label: \"Iedereen\", items: overview?.items ?? [] },\n    ...(people.length > 1 ? people : []),\n  ];\n  return { tabs, selected: tabs.some(tab => tab.id === selected) ? selected : \"all\" };\n}\n","import { createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, vShow as _vShow, normalizeClass as _normalizeClass, withDirectives as _withDirectives, vModelText as _vModelText, withModifiers as _withModifiers, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = [\"id\", \"aria-label\", \"aria-selected\", \"tabindex\", \"aria-controls\", \"onClick\"]\nconst _hoisted_3 = { class: \"mi__count\" }\nconst _hoisted_4 = [\"id\", \"role\", \"aria-labelledby\"]\nconst _hoisted_5 = {\n  key: 0,\n  class: \"mi__msg\",\n  role: \"alert\"\n}\nconst _hoisted_6 = {\n  class: \"mi__label\",\n  for: \"mi-new\"\n}\nconst _hoisted_7 = [\"aria-invalid\", \"disabled\"]\nconst _hoisted_8 = {\n  class: \"mi__msg\",\n  role: \"alert\"\n}\nconst _hoisted_9 = { class: \"mi__acts\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n  key: 2,\n  class: \"mi__sub\"\n}\nconst _hoisted_12 = [\"aria-invalid\", \"disabled\"]\nconst _hoisted_13 = {\n  class: \"mi__msg\",\n  role: \"alert\"\n}\nconst _hoisted_14 = { class: \"mi__acts\" }\nconst _hoisted_15 = [\"disabled\"]\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = { class: \"mi__ask mi__quote\" }\nconst _hoisted_18 = {\n  class: \"mi__msg\",\n  role: \"alert\"\n}\nconst _hoisted_19 = { class: \"mi__acts\" }\nconst _hoisted_20 = [\"disabled\"]\nconst _hoisted_21 = [\"disabled\"]\nconst _hoisted_22 = {\n  key: 1,\n  class: \"mi__msg\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", {\n    class: \"mi\",\n    \"aria-label\": \"Input voor de meeting\",\n    \"aria-busy\": !$setup.overview && !$setup.loadError\n  }, [\n    _cache[3] || (_cache[3] = _createElementVNode(\"div\", { class: \"mi__head\" }, [\n      _createElementVNode(\"h2\", { class: \"mi__title\" }, \"Input voor de volgende meeting\")\n    ], -1 /* CACHED */)),\n    ($setup.overview)\n      ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n          _createCommentVNode(\" Keep the tab divider and its rows outside the card's section gap. \"),\n          _createElementVNode(\"div\", null, [\n            ($setup.tabs.length > 1)\n              ? (_openBlock(), _createElementBlock(\"div\", {\n                  key: 0,\n                  class: \"mi__tabs\",\n                  role: \"tablist\",\n                  \"aria-label\": \"Input per persoon\",\n                  onKeydown: $setup.onTabKey\n                }, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.tabs, (tab) => {\n                    return (_openBlock(), _createElementBlock(\"button\", {\n                      id: `mi-tab-${tab.id}`,\n                      key: tab.id,\n                      type: \"button\",\n                      role: \"tab\",\n                      \"aria-label\": `${tab.label} (${tab.items.length})`,\n                      \"aria-selected\": $setup.activeTab === tab.id,\n                      tabindex: $setup.activeTab === tab.id ? 0 : -1,\n                      \"aria-controls\": `mi-panel-${tab.id}`,\n                      onClick: $event => ($setup.selected = tab.id)\n                    }, [\n                      _createTextVNode(_toDisplayString(tab.label), 1 /* TEXT */),\n                      _createElementVNode(\"span\", _hoisted_3, _toDisplayString(tab.items.length), 1 /* TEXT */)\n                    ], 8 /* PROPS */, _hoisted_2))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ], 32 /* NEED_HYDRATION */))\n              : _createCommentVNode(\"v-if\", true),\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.tabs, (tab) => {\n              return _withDirectives((_openBlock(), _createElementBlock(\"div\", {\n                id: `mi-panel-${tab.id}`,\n                key: tab.id,\n                class: _normalizeClass([\"mi__panel\", { 'mi__panel--empty': !tab.items.length, 'mi__panel--standalone': $setup.tabs.length === 1 }]),\n                role: $setup.tabs.length > 1 ? 'tabpanel' : undefined,\n                \"aria-labelledby\": $setup.tabs.length > 1 ? `mi-tab-${tab.id}` : undefined\n              }, [\n                _createVNode($setup[\"MeetingInputList\"], {\n                  items: tab.items,\n                  people: $setup.overview.people,\n                  \"own-person-id\": $setup.overview.person?.id ?? null,\n                  onEdit: $setup.startEdit,\n                  onDelete: $setup.askDelete\n                }, null, 8 /* PROPS */, [\"items\", \"people\", \"own-person-id\"])\n              ], 10 /* CLASS, PROPS */, _hoisted_4)), [\n                [_vShow, $setup.activeTab === tab.id]\n              ])\n            }), 128 /* KEYED_FRAGMENT */))\n          ]),\n          ($setup.loadError)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.loadError), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          ($setup.overview.person)\n            ? (_openBlock(), _createElementBlock(\"form\", {\n                key: 1,\n                class: \"mi__add\",\n                novalidate: \"\",\n                onSubmit: _withModifiers($setup.add, [\"prevent\"])\n              }, [\n                _createElementVNode(\"label\", _hoisted_6, \"Jouw input toevoegen, \" + _toDisplayString($setup.overview.person.short), 1 /* TEXT */),\n                _withDirectives(_createElementVNode(\"textarea\", {\n                  id: \"mi-new\",\n                  \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.newText) = $event)),\n                  class: _normalizeClass([\"input input--area mi__text\", { 'input--err': $setup.addError }]),\n                  rows: \"3\",\n                  placeholder: \"Een onderwerp, een vraag, iets wat iedereen moet weten…\",\n                  \"aria-invalid\": Boolean($setup.addError),\n                  disabled: $setup.adding\n                }, null, 10 /* CLASS, PROPS */, _hoisted_7), [\n                  [_vModelText, $setup.newText]\n                ]),\n                _createElementVNode(\"p\", _hoisted_8, _toDisplayString($setup.addError), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_9, [\n                  _createElementVNode(\"button\", {\n                    type: \"submit\",\n                    class: \"btn btn--primary\",\n                    disabled: $setup.adding\n                  }, _toDisplayString($setup.adding ? \"Toevoegen…\" : \"Toevoegen\"), 9 /* TEXT, PROPS */, _hoisted_10)\n                ])\n              ], 32 /* NEED_HYDRATION */))\n            : (_openBlock(), _createElementBlock(\"p\", _hoisted_11, \"Je account hoort bij niemand van het team, dus je kunt geen input voor de meeting insturen.\")),\n          _createVNode($setup[\"ModalDialog\"], {\n            open: $setup.editingId !== null,\n            size: \"s\",\n            title: \"Punt bewerken\",\n            onClose: $setup.cancelEdit\n          }, {\n            default: _withCtx(() => [\n              _createElementVNode(\"form\", {\n                class: \"mi__edit\",\n                novalidate: \"\",\n                onSubmit: _withModifiers($setup.saveEdit, [\"prevent\"])\n              }, [\n                _withDirectives(_createElementVNode(\"textarea\", {\n                  ref: \"editField\",\n                  \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.editText) = $event)),\n                  class: _normalizeClass([\"input input--area mi__text\", { 'input--err': $setup.editError }]),\n                  rows: \"5\",\n                  \"aria-label\": \"Punt bewerken\",\n                  \"aria-invalid\": Boolean($setup.editError),\n                  disabled: $setup.savingEdit\n                }, null, 10 /* CLASS, PROPS */, _hoisted_12), [\n                  [_vModelText, $setup.editText]\n                ]),\n                _createElementVNode(\"p\", _hoisted_13, _toDisplayString($setup.editError), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_14, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"btn\",\n                    disabled: $setup.savingEdit,\n                    onClick: $setup.cancelEdit\n                  }, \"Annuleren\", 8 /* PROPS */, _hoisted_15),\n                  _createElementVNode(\"button\", {\n                    type: \"submit\",\n                    class: \"btn btn--primary\",\n                    disabled: $setup.savingEdit\n                  }, _toDisplayString($setup.savingEdit ? \"Opslaan…\" : \"Opslaan\"), 9 /* TEXT, PROPS */, _hoisted_16)\n                ])\n              ], 32 /* NEED_HYDRATION */)\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"open\"]),\n          _createVNode($setup[\"ModalDialog\"], {\n            open: $setup.deleting !== null,\n            size: \"s\",\n            title: \"Punt verwijderen\",\n            onClose: $setup.cancelDelete\n          }, {\n            default: _withCtx(() => [\n              _cache[2] || (_cache[2] = _createElementVNode(\"p\", { class: \"mi__ask\" }, \"Weet je zeker dat je dit punt wilt verwijderen?\", -1 /* CACHED */)),\n              _createElementVNode(\"p\", _hoisted_17, _toDisplayString($setup.deleting?.text), 1 /* TEXT */),\n              _createElementVNode(\"p\", _hoisted_18, _toDisplayString($setup.deleteError), 1 /* TEXT */),\n              _createElementVNode(\"div\", _hoisted_19, [\n                _createElementVNode(\"button\", {\n                  ref: \"deleteCancel\",\n                  type: \"button\",\n                  class: \"btn\",\n                  disabled: $setup.removing,\n                  onClick: $setup.cancelDelete\n                }, \"Annuleren\", 8 /* PROPS */, _hoisted_20),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn btn--primary\",\n                  disabled: $setup.removing,\n                  onClick: $setup.confirmDelete\n                }, _toDisplayString($setup.removing ? \"Verwijderen…\" : \"Verwijderen\"), 9 /* TEXT, PROPS */, _hoisted_21)\n              ])\n            ]),\n            _: 1 /* STABLE */,\n            __: [2]\n          }, 8 /* PROPS */, [\"open\"])\n        ], 64 /* STABLE_FRAGMENT */))\n      : ($setup.loadError)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_22, _toDisplayString($setup.loadError), 1 /* TEXT */))\n        : (_openBlock(), _createBlock($setup[\"MeetingInputSkeleton\"], { key: 2 }))\n  ], 8 /* PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MyInput.vue\";script.__scopeId = \"data-v-9e7780c7\";export default script;","import { createVNode as _createVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock, withModifiers as _withModifiers, Teleport as _Teleport } from \"vue\"\n\nconst _hoisted_1 = { class: \"ml\" }\nconst _hoisted_2 = { class: \"ml__canvas\" }\nconst _hoisted_3 = { class: \"ml__inner\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"ml__error\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"ml__error\"\n}\nconst _hoisted_6 = { class: \"ml__grid\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = { class: \"ml__new-text\" }\nconst _hoisted_9 = { class: \"ml__new-title\" }\nconst _hoisted_10 = { class: \"ml__body\" }\nconst _hoisted_11 = { class: \"ml__row\" }\nconst _hoisted_12 = { class: \"ml__names\" }\nconst _hoisted_13 = { class: \"ml__week\" }\nconst _hoisted_14 = { class: \"ml__weeknr\" }\nconst _hoisted_15 = { class: \"ml__stats\" }\nconst _hoisted_16 = { class: \"ml__stat\" }\nconst _hoisted_17 = { class: \"ml__stat-value\" }\nconst _hoisted_18 = { class: \"ml__stat\" }\nconst _hoisted_19 = { class: \"ml__stat-value\" }\nconst _hoisted_20 = { class: \"ml__stat\" }\nconst _hoisted_21 = { class: \"ml__stat-value\" }\nconst _hoisted_22 = {\n  key: 2,\n  class: \"ml__state\"\n}\nconst _hoisted_23 = {\n  class: \"att__box\",\n  role: \"dialog\",\n  \"aria-modal\": \"true\",\n  \"aria-label\": \"Wie is erbij?\"\n}\nconst _hoisted_24 = { class: \"att__sub\" }\nconst _hoisted_25 = [\"checked\", \"onChange\"]\nconst _hoisted_26 = {\n  key: 0,\n  class: \"ml__error\"\n}\nconst _hoisted_27 = { class: \"att__foot\" }\nconst _hoisted_28 = [\"disabled\"]\nconst _hoisted_29 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createVNode($setup[\"MondaysHeader\"]),\n    _createElementVNode(\"main\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _cache[8] || (_cache[8] = _createElementVNode(\"div\", { class: \"ml__top\" }, [\n          _createElementVNode(\"div\", { class: \"ml__heading\" }, [\n            _createElementVNode(\"span\", { class: \"ml__eyebrow\" }, \"Elke maandag, samen\"),\n            _createElementVNode(\"h1\", { class: \"ml__title\" }, \"Maandag kick-off\")\n          ])\n        ], -1 /* CACHED */)),\n        ($setup.startError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($setup.startError), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.error)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.error), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createVNode($setup[\"MyInput\"]),\n        _createElementVNode(\"div\", _hoisted_6, [\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"ml__new\",\n            disabled: $setup.starting || $setup.loading,\n            onClick: $setup.start\n          }, [\n            _cache[3] || (_cache[3] = _createElementVNode(\"span\", {\n              class: \"ml__plus\",\n              \"aria-hidden\": \"true\"\n            }, \"+\", -1 /* CACHED */)),\n            _createElementVNode(\"span\", _hoisted_8, [\n              _createElementVNode(\"span\", _hoisted_9, _toDisplayString($setup.starting ? \"Starten…\" : $setup.openLabel ?? \"Nieuwe meeting\"), 1 /* TEXT */),\n              _cache[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"ml__new-sub\" }, \"Neemt de “deze week”-updates en open acties van vorige week mee.\", -1 /* CACHED */))\n            ])\n          ], 8 /* PROPS */, _hoisted_7),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.meetings, (meeting) => {\n            return (_openBlock(), _createBlock($setup[\"RouterLink\"], {\n              key: meeting.id,\n              class: \"ml__card\",\n              to: { name: 'monday', params: { id: meeting.id } }\n            }, {\n              default: _withCtx(() => [\n                _createCommentVNode(\" A thumbnail of the five boards, in their own colours. \"),\n                _cache[7] || (_cache[7] = _createElementVNode(\"div\", {\n                  class: \"ml__preview\",\n                  \"aria-hidden\": \"true\"\n                }, [\n                  _createElementVNode(\"div\", { class: \"ml__mini ml__mini--people\" }, [\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\")\n                  ]),\n                  _createElementVNode(\"div\", { class: \"ml__mini ml__mini--finance\" }, [\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\", { class: \"ml__mini-line\" })\n                  ]),\n                  _createElementVNode(\"div\", { class: \"ml__mini ml__mini--updates\" }, [\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\", { class: \"ml__mini-hot\" })\n                  ]),\n                  _createElementVNode(\"div\", { class: \"ml__mini ml__mini--actions\" }, [\n                    _createElementVNode(\"span\"),\n                    _createElementVNode(\"span\")\n                  ])\n                ], -1 /* CACHED */)),\n                _createElementVNode(\"div\", _hoisted_10, [\n                  _createElementVNode(\"div\", _hoisted_11, [\n                    _createElementVNode(\"div\", _hoisted_12, [\n                      _createElementVNode(\"span\", _hoisted_13, \"Week van \" + _toDisplayString($setup.fmtWeekOf(meeting.date)), 1 /* TEXT */),\n                      _createElementVNode(\"span\", _hoisted_14, _toDisplayString($setup.fmtWeek(meeting.date)), 1 /* TEXT */)\n                    ]),\n                    _createElementVNode(\"span\", {\n                      class: _normalizeClass([\"badge\", meeting.finished ? 'badge--neutral' : 'badge--brand'])\n                    }, _toDisplayString(meeting.finished ? \"Afgerond\" : \"Bezig\"), 3 /* TEXT, CLASS */)\n                  ]),\n                  _createElementVNode(\"div\", _hoisted_15, [\n                    _createElementVNode(\"div\", _hoisted_16, [\n                      _createElementVNode(\"span\", _hoisted_17, _toDisplayString($setup.fmtAverage(meeting.teamScore)), 1 /* TEXT */),\n                      _cache[4] || (_cache[4] = _createElementVNode(\"span\", { class: \"ml__stat-label\" }, \"Teamscore\", -1 /* CACHED */))\n                    ]),\n                    _createElementVNode(\"div\", _hoisted_18, [\n                      _createElementVNode(\"span\", _hoisted_19, _toDisplayString(meeting.actionsDone) + \"/\" + _toDisplayString(meeting.actionsTotal), 1 /* TEXT */),\n                      _cache[5] || (_cache[5] = _createElementVNode(\"span\", { class: \"ml__stat-label\" }, \"Acties afgerond\", -1 /* CACHED */))\n                    ]),\n                    _createElementVNode(\"div\", _hoisted_20, [\n                      _createElementVNode(\"span\", _hoisted_21, _toDisplayString(meeting.noteCount), 1 /* TEXT */),\n                      _cache[6] || (_cache[6] = _createElementVNode(\"span\", { class: \"ml__stat-label\" }, \"Notities\", -1 /* CACHED */))\n                    ])\n                  ])\n                ])\n              ]),\n              _: 2 /* DYNAMIC */,\n              __: [7]\n            }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"to\"]))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]),\n        ($setup.loading)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_22, \"Bezig met laden…\"))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n      ($setup.picking)\n        ? (_openBlock(), _createElementBlock(\"div\", {\n            key: 0,\n            class: \"att\",\n            onClick: _cache[1] || (_cache[1] = _withModifiers($event => ($setup.picking = false), [\"self\"]))\n          }, [\n            _createElementVNode(\"div\", _hoisted_23, [\n              _cache[9] || (_cache[9] = _createElementVNode(\"h2\", { class: \"att__title\" }, \"Wie is erbij?\", -1 /* CACHED */)),\n              _createElementVNode(\"p\", _hoisted_24, \"Vink aan wie \" + _toDisplayString($setup.isThisWeek ? \"deze maandag\" : `maandag ${$setup.fmtWeekOf($setup.targetDate)}`) + \" aan tafel zit. Wie niet aanwezig is, hoeft niet te scoren.\", 1 /* TEXT */),\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.people, (person) => {\n                return (_openBlock(), _createElementBlock(\"label\", {\n                  key: person.id,\n                  class: \"att__row\"\n                }, [\n                  _createElementVNode(\"input\", {\n                    type: \"checkbox\",\n                    checked: $setup.chosen.has(person.id),\n                    onChange: $event => ($setup.togglePerson(person.id))\n                  }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_25),\n                  _createElementVNode(\"span\", null, _toDisplayString(person.name), 1 /* TEXT */)\n                ]))\n              }), 128 /* KEYED_FRAGMENT */)),\n              ($setup.startError)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_26, _toDisplayString($setup.startError), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true),\n              _createElementVNode(\"div\", _hoisted_27, [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn btn--tertiary\",\n                  disabled: $setup.starting,\n                  onClick: _cache[0] || (_cache[0] = $event => ($setup.picking = false))\n                }, \"Annuleren\", 8 /* PROPS */, _hoisted_28),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"btn btn--primary\",\n                  disabled: $setup.starting,\n                  onClick: $setup.confirmStart\n                }, _toDisplayString($setup.starting ? \"Starten…\" : \"Start meeting\"), 9 /* TEXT, PROPS */, _hoisted_29)\n              ])\n            ])\n          ]))\n        : _createCommentVNode(\"v-if\", true)\n    ]))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MondaysListView.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MondaysListView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MondaysListView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MondaysListView.vue\";script.__scopeId = \"data-v-80e5d278\";export default script;","<template>\n  <div class=\"mv\">\n    <MondaysHeader class=\"mv__header\" :inert=\"leaving || undefined\">\n      <a class=\"mv__back\" :href=\"router.resolve({ name: 'mondays' }).href\" @click=\"onBack\">‹ Meetings</a>\n      <template v-if=\"meeting\">\n        <div class=\"mv__heading\">\n          <span class=\"mv__title\">Week van {{ fmtWeekOf(meeting.date) }}</span>\n          <span class=\"mv__sub\" :class=\"{ 'mv__sub--error': store.saveError.value }\" aria-live=\"polite\">\n            {{ fmtWeek(meeting.date) }} ·\n            <template v-if=\"store.saveError.value\">\n              {{ store.saveError.value }}\n              <button type=\"button\" class=\"mv__retry\" @click=\"store.flush()\">Opnieuw</button>\n            </template>\n            <template v-else-if=\"store.saving.value\">opslaan…</template>\n            <template v-else>{{ meeting.finishedAt ? \"afgerond, opgeslagen in WRD\" : \"opgeslagen in WRD\" }}</template>\n          </span>\n        </div>\n        <nav class=\"mv__tabs\" aria-label=\"Borden\">\n          <button\n            v-for=\"(board, index) in BOARDS\"\n            :key=\"board.block\"\n            type=\"button\"\n            class=\"mv__tab\"\n            :class=\"{ 'mv__tab--on': index === step && !overview }\"\n            :aria-current=\"index === step && !overview ? 'step' : undefined\"\n            @click=\"go(index)\"\n          >\n            <span class=\"mv__swatch\" :style=\"{ background: board.color }\" />{{ board.label }}\n          </button>\n        </nav>\n        <div class=\"mv__right\">\n          <div v-if=\"reviewWork\" class=\"mv__progress\">\n            <span>{{ reviewWork.label }}</span>\n            <progress max=\"100\" :value=\"reviewWork.value\" :aria-label=\"`Linear-weekoverzicht: ${reviewWork.label}`\" />\n          </div>\n          <button type=\"button\" class=\"mv__overview\" :class=\"{ 'mv__overview--on': overview }\" :aria-pressed=\"overview\" @click=\"overview = !overview\">\n            Overzicht\n          </button>\n          <div class=\"mv__team\">\n            <PersonAvatar v-for=\"person in store.people.value\" :key=\"person.id\" :name=\"person.name\" class=\"mv__member\" />\n          </div>\n        </div>\n      </template>\n    </MondaysHeader>\n\n    <div class=\"mv__stage\" :inert=\"leaving || undefined\">\n      <p v-if=\"store.loading.value\" class=\"mv__state\">Bezig met laden…</p>\n      <div v-else-if=\"store.loadError.value\" class=\"mv__state\">\n        <p class=\"mv__error\">{{ store.loadError.value }}</p>\n        <RouterLink class=\"btn\" :to=\"{ name: 'mondays' }\">Naar alle meetings</RouterLink>\n      </div>\n\n      <template v-else-if=\"meeting\">\n        <div ref=\"canvas\" class=\"mv__canvas\" @scroll=\"keepLeft\">\n          <div class=\"mv__strip\" :style=\"{ gap: `${GAP}px`, transform: stripTransform }\">\n            <BoardFrame\n              v-for=\"(board, index) in BOARDS\"\n              :key=\"board.block\"\n              :block=\"board.block\"\n              :label=\"board.label\"\n              :color=\"board.color\"\n              :text-color=\"board.text\"\n              :width=\"frameWidth\"\n              :dimmed=\"!overview && index !== step\"\n              :pickable=\"overview || index !== step\"\n              @pick=\"go(index)\"\n            >\n              <component :is=\"board.component\" />\n            </BoardFrame>\n          </div>\n        </div>\n\n        <MeetingDock\n          :step=\"step\"\n          :total=\"BOARDS.length\"\n          :next-label=\"BOARDS[step + 1]?.label ?? ''\"\n          :finished=\"Boolean(meeting.finishedAt)\"\n          :finishing=\"finishing || leaving\"\n          @go=\"go\"\n          @sticky=\"addSticky\"\n          @finish=\"leave({ finish: true })\"\n        />\n      </template>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, provide, ref, watch } from \"vue\";\nimport { RouterLink, onBeforeRouteLeave, useRouter } from \"vue-router\";\nimport type { Block } from \"@mod-tech42_tools/js/mondays/types\";\nimport BoardActions from \"../components/mondays/BoardActions.vue\";\nimport BoardFinance from \"../components/mondays/BoardFinance.vue\";\nimport BoardFocus from \"../components/mondays/BoardFocus.vue\";\nimport BoardFrame from \"../components/mondays/BoardFrame.vue\";\nimport BoardPeople from \"../components/mondays/BoardPeople.vue\";\nimport BoardUpdates from \"../components/mondays/BoardUpdates.vue\";\nimport MeetingDock from \"../components/mondays/MeetingDock.vue\";\nimport MondaysHeader from \"../components/mondays/MondaysHeader.vue\";\nimport PersonAvatar from \"../components/mondays/PersonAvatar.vue\";\nimport { MEETING_STORE, createMeetingStore } from \"../lib/meeting-store\";\nimport { reviewProgress } from \"../lib/meeting-review\";\nimport { fmtWeek, fmtWeekOf } from \"../lib/mondays-format\";\nimport { undoToasts } from \"../lib/undo-toasts\";\n\nconst props = defineProps<{ id: number; step: string }>();\nconst router = useRouter();\n\n// The FigJam's own section names and colours, so whoever knew the board finds their way.\nconst BOARDS: Array<{ block: Block; label: string; color: string; text: string; component: unknown }> = [\n  { block: \"people\", label: \"People\", color: \"var(--t42-green-200)\", text: \"var(--ink)\", component: BoardPeople },\n  { block: \"finance\", label: \"Cijfers\", color: \"var(--sticky-paper)\", text: \"var(--ink)\", component: BoardFinance },\n  { block: \"updates\", label: \"Updates\", color: \"var(--sticky-update)\", text: \"var(--ink)\", component: BoardUpdates },\n  { block: \"focus\", label: \"Focus\", color: \"var(--sticky-focus)\", text: \"var(--ink)\", component: BoardFocus },\n  { block: \"actions\", label: \"Acties\", color: \"var(--primary)\", text: \"var(--foreground)\", component: BoardActions },\n];\n\nconst store = createMeetingStore();\nprovide(MEETING_STORE, store);\nconst meeting = store.meeting;\nconst reviewWork = computed(() => reviewProgress(store.reviewStatus.value));\n\nconst step = computed(() => Math.max(0, BOARDS.findIndex(b => b.block === props.step)));\nconst overview = ref(false);\n\nfunction go(index: number) {\n  const clamped = Math.max(0, Math.min(BOARDS.length - 1, index));\n  overview.value = false;\n  if (clamped !== step.value) void router.replace({ name: \"monday\", params: { id: props.id, step: BOARDS[clamped].block } });\n}\n\n//\n// The canvas: five frames side by side, panned by a transform.\n//\n\nconst PAD = 80;\nconst GAP = 64;\nconst canvas = ref<HTMLElement | null>(null);\nconst viewport = ref(window.innerWidth);\nconst boardPadding = computed(() => viewport.value < 760 ? 16 : PAD);\nconst frameWidth = computed(() => viewport.value < 760 ? Math.max(280, viewport.value - 32) : Math.max(1100, viewport.value - 2 * PAD));\nconst stripTransform = computed(() => {\n  if (overview.value) {\n    const total = BOARDS.length * frameWidth.value + (BOARDS.length - 1) * GAP;\n    return `translate(${PAD}px, 0px) scale(${((viewport.value - 2 * PAD) / total).toFixed(4)})`;\n  }\n  return `translate(${boardPadding.value - step.value * (frameWidth.value + GAP)}px, 0px) scale(1)`;\n});\n\nlet observer: ResizeObserver | undefined;\nwatch(canvas, element => {\n  observer?.disconnect();\n  if (!element) return;\n  viewport.value = element.clientWidth;\n  observer = new ResizeObserver(() => { viewport.value = element.clientWidth; });\n  observer.observe(element);\n});\n\n/** Focusing a field on a neighbouring board would scroll the canvas sideways and\n * throw the pan off: the transform is the only horizontal position there is. */\nfunction keepLeft() {\n  if (canvas.value && canvas.value.scrollLeft) canvas.value.scrollLeft = 0;\n}\n\nasync function addSticky(authorId: number) {\n  await store.addNote(BOARDS[step.value].block, authorId);\n}\n\nconst finishing = ref(false);\n\nconst leaving = ref(false);\n\n/** Both visible exits persist local edits before navigating. Finishing keeps\n * its existing finance snapshot behavior and never writes to Linear. */\nasync function leave(options: { finish?: boolean } = {}) {\n  if (leaving.value) return;\n  leaving.value = true;\n  try {\n    // Pending undo deletions are local writes too; settle them before leaving.\n    undoToasts.flush();\n    await undoToasts.settled();\n    if (store.saveError.value) return;\n    await store.flush();\n    if (store.saveError.value) return;\n    if (options.finish && meeting.value && !meeting.value.finishedAt) {\n      finishing.value = true;\n      if (!(await store.finish())) return;\n    }\n    await router.push({ name: \"mondays\" });\n  } finally {\n    finishing.value = false;\n    leaving.value = false;\n  }\n}\n\n/** A plain click on the back link goes through leave(); ctrl/cmd/middle-click keep the browser's own behaviour. */\nfunction onBack(evt: MouseEvent) {\n  if (evt.button !== 0 || evt.metaKey || evt.ctrlKey || evt.shiftKey || evt.altKey) return;\n  evt.preventDefault();\n  void leave();\n}\n\nwatch(() => props.id, async id => {\n  overview.value = false;\n  await store.load(id);\n  // A meeting that is going shows Hourly as it is now; a finished one keeps its snapshot.\n  if (store.meeting.value && !store.meeting.value.finishedAt) void store.refreshFinance();\n  await nextTick();\n  canvas.value?.scrollTo({ top: 0 });\n}, { immediate: true });\n\n// Arrow keys walk the boards, which is how a meeting on one shared screen is\n// driven. Never while someone is typing.\nfunction onKey(evt: KeyboardEvent) {\n  const target = evt.target as HTMLElement | null;\n  if (leaving.value || evt.altKey || evt.metaKey || evt.ctrlKey || target?.closest(\"input, textarea, select, [contenteditable], dialog, [role=tablist]\")) return;\n  if (evt.key === \"ArrowRight\") go(step.value + 1);\n  else if (evt.key === \"ArrowLeft\") go(step.value - 1);\n  else if (evt.key === \"Escape\" && overview.value) overview.value = false;\n}\n\nfunction onBeforeUnload(evt: BeforeUnloadEvent) {\n  if (!store.hasPending()) return;\n  void store.flush();\n  evt.preventDefault();\n}\n\nonMounted(() => {\n  window.addEventListener(\"keydown\", onKey);\n  window.addEventListener(\"beforeunload\", onBeforeUnload);\n});\nonBeforeUnmount(() => {\n  observer?.disconnect();\n  window.removeEventListener(\"keydown\", onKey);\n  window.removeEventListener(\"beforeunload\", onBeforeUnload);\n});\nonBeforeRouteLeave(async () => {\n  await store.flush();\n  return !store.saveError.value;\n});\n</script>\n\n<style scoped>\n.mv {\n  display: flex;\n  flex-direction: column;\n  height: 100vh;\n  overflow: hidden;\n  background: var(--background);\n}\n.mv__back {\n  display: inline-flex;\n  flex-shrink: 0;\n  align-items: center;\n  height: 32px;\n  padding: 0 10px;\n  border-radius: var(--radius-md);\n  color: var(--muted-foreground);\n  font-size: 14px;\n  font-weight: 500;\n  text-decoration: none;\n  white-space: nowrap;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.mv__back:hover { background: var(--field); }\n.mv__heading { display: flex; flex-shrink: 0; flex-direction: column; gap: 2px; white-space: nowrap; }\n.mv__title { font-size: 16px; font-weight: 500; line-height: 1.1; }\n.mv__sub { font-size: 12px; color: var(--weak); }\n.mv__sub--error { color: var(--fire); }\n.mv__retry {\n  padding: 0;\n  border: none;\n  background: none;\n  color: var(--primary-hover);\n  font-size: 12px;\n  text-decoration: underline;\n  cursor: pointer;\n}\n.mv__tabs { display: flex; gap: 2px; min-width: 0; margin-left: 16px; overflow-x: auto; }\n.mv__tab {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  gap: 8px;\n  height: 36px;\n  padding: 0 12px;\n  border: 1px solid transparent;\n  border-radius: var(--radius-md);\n  background: transparent;\n  color: var(--muted-foreground);\n  font-size: 14px;\n  font-weight: 500;\n  white-space: nowrap;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);\n}\n.mv__tab:hover { background: var(--field); }\n.mv__tab--on,\n.mv__tab--on:hover { border-color: var(--border); background: var(--hover-strong); color: var(--foreground); }\n.mv__swatch { width: 10px; height: 10px; }\n.mv__right { display: flex; flex-shrink: 0; align-items: center; gap: 16px; margin-left: auto; }\n.mv__progress { display: flex; flex-direction: column; gap: 4px; width: 200px; min-width: 0; font-size: 11px; color: var(--muted-foreground); }\n.mv__progress progress { display: block; appearance: none; width: 100%; height: 6px; border: 0; border-radius: 3px; overflow: hidden; background: var(--field); accent-color: var(--primary); }\n.mv__progress progress::-webkit-progress-bar { background: var(--field); border-radius: 3px; }\n.mv__progress progress::-webkit-progress-value { background: var(--primary); border-radius: 3px; }\n.mv__progress progress::-moz-progress-bar { background: var(--primary); border-radius: 3px; }\n.mv__progress progress:indeterminate { background: linear-gradient(90deg, var(--field) 0% 35%, var(--primary) 35% 65%, var(--field) 65%); background-size: 200% 100%; animation: mv-progress-pending 2s linear infinite; }\n.mv__progress progress:indeterminate::-webkit-progress-bar { background: transparent; }\n@keyframes mv-progress-pending { from { background-position: 150% 0; } to { background-position: -150% 0; } }\n@media (prefers-reduced-motion: reduce) { .mv__progress progress:indeterminate { animation: none; background-position: center; } }\n.mv__overview {\n  height: 32px;\n  padding: 0 12px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-md);\n  background: transparent;\n  color: var(--foreground);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.mv__overview:hover { background: var(--field); }\n.mv__overview--on,\n.mv__overview--on:hover { border-color: var(--hairline-strong); background: var(--hover-strong); }\n.mv__team { display: flex; padding-left: 6px; }\n/* The 2px ring sits around the 24px disc, as in the design: 28px apart minus 6. */\n.mv__member { box-sizing: content-box; margin-left: -6px; border: 2px solid var(--background); }\n\n.mv__stage { position: relative; flex: 1; min-height: 0; }\n.mv__state { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; padding: 48px 80px; color: var(--muted-foreground); }\n.mv__error { margin: 0; color: var(--fire); }\n.mv__canvas {\n  position: absolute;\n  inset: 0;\n  overflow-x: hidden;\n  overflow-y: auto;\n  background-color: var(--background);\n  background-image: var(--dot-grid);\n  background-size: 24px 24px;\n}\n.mv__strip {\n  display: flex;\n  align-items: flex-start;\n  width: max-content;\n  padding: 48px 0 160px;\n  transform-origin: 0 0;\n  transition: transform var(--dur-pan) var(--ease);\n}\n@media (max-width: 760px) {\n  .mv__header { flex-wrap: wrap; height: auto; padding: 12px 16px; gap: 12px; }\n  .mv__heading { white-space: normal; }\n  .mv__tabs { margin-left: 0; flex: 1 1 100%; flex-wrap: wrap; overflow: visible; }\n  .mv__team { display: none; }\n  .mv__strip { padding-top: 24px; }\n  .mv__right { margin-left: auto; gap: 12px; }\n  .mv__progress { width: clamp(80px, 30vw, 200px); }\n}\n</style>\n","<template>\n  <div class=\"ba__head\">\n    <h2 class=\"board-title\">Acties</h2>\n    <span class=\"board-sub\">{{ open }} open · {{ actions.length - open }} afgerond</span>\n  </div>\n\n  <div class=\"ba__grid\">\n    <template v-for=\"(item, index) in items\" :key=\"item.key\">\n      <!-- Actions made automatically from an assigned update point come after the\n           typed ones, under their own label; the new-action form comes last. -->\n      <div v-if=\"item.kind === 'label'\" class=\"ba__section-head\">\n        <span class=\"ba__section-label\">Overgenomen uit updates</span>\n      </div>\n      <div\n        v-else\n        class=\"ba__card\"\n        :class=\"{ 'ba__card--done': item.action.done, 'ba__card--from': item.action.fromUpdate }\"\n        :style=\"{ transform: `rotate(${tilt(index)})` }\"\n      >\n        <div class=\"ba__top\">\n          <button\n            type=\"button\"\n            class=\"ba__chip\"\n            :class=\"{ 'ba__chip--empty': !item.action.due }\"\n            :aria-expanded=\"editingDue === item.action.id\"\n            :aria-label=\"item.action.due ? `Deadline ${fmtDue(item.action.due)} wijzigen` : 'Deadline kiezen'\"\n            @click=\"editingDue = editingDue === item.action.id ? null : item.action.id\"\n          >\n            {{ fmtDue(item.action.due) || \"+ Deadline\" }}\n          </button>\n          <div class=\"ba__meta\">\n            <a\n              v-if=\"item.action.linear\"\n              class=\"ba__linear\"\n              :href=\"item.action.linear.url\"\n              target=\"_blank\"\n              rel=\"noopener noreferrer\"\n              :aria-label=\"`${item.action.linear.identifier} openen in Linear`\"\n            >{{ item.action.linear.identifier }}</a>\n            <span v-if=\"item.action.carried\" class=\"ba__carried\">Van vorige week</span>\n            <button type=\"button\" class=\"ba__remove\" :aria-label=\"`${item.action.what} verwijderen`\" @click=\"store.deleteAction(item.action.id)\">×</button>\n          </div>\n        </div>\n        <DuePicker\n          v-if=\"editingDue === item.action.id\"\n          :model-value=\"item.action.due\"\n          :label=\"`Deadline: ${item.action.what}`\"\n          @update:model-value=\"setDue(item.action, $event)\"\n        />\n        <span class=\"ba__what\">{{ item.action.what }}</span>\n        <div class=\"ba__bottom\">\n          <div class=\"ba__who\">\n            <div class=\"ba__avatars\">\n              <PersonAvatar v-for=\"person in peopleOf(item.action.who)\" :key=\"person.id\" :name=\"person.name\" class=\"ba__avatar\" />\n            </div>\n            <span class=\"ba__names\">{{ peopleOf(item.action.who).map(p => p.short).join(\" & \") }}</span>\n          </div>\n          <button\n            type=\"button\"\n            class=\"ba__box\"\n            :class=\"{ 'ba__box--on': item.action.done }\"\n            role=\"checkbox\"\n            :aria-checked=\"item.action.done\"\n            :aria-label=\"`${item.action.what} afgerond`\"\n            @click=\"toggle(item.action)\"\n          />\n        </div>\n      </div>\n    </template>\n\n    <form class=\"ba__new\" @submit.prevent=\"add\">\n      <input v-model=\"what\" class=\"ba__new-what\" placeholder=\"+ Nieuwe actie\" aria-label=\"Nieuwe actie\">\n      <div class=\"ba__pick\">\n        <button\n          v-for=\"person in store.people.value\"\n          :key=\"person.id\"\n          type=\"button\"\n          class=\"ba__toggle\"\n          :class=\"{ 'ba__toggle--on': who.includes(person.id) }\"\n          :aria-pressed=\"who.includes(person.id)\"\n          @click=\"toggleWho(person.id)\"\n        >\n          {{ person.short }}\n        </button>\n      </div>\n      <DuePicker v-model=\"due\" tone=\"dark\" label=\"Deadline nieuwe actie\" />\n      <div class=\"ba__new-foot\">\n        <button type=\"submit\" class=\"btn btn--primary\" :disabled=\"adding\">Toevoegen</button>\n      </div>\n    </form>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport type { Action, Person } from \"@mod-tech42_tools/js/mondays/types\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { fmtDue, tilt } from \"../../lib/mondays-format\";\nimport DuePicker from \"./DuePicker.vue\";\nimport PersonAvatar from \"./PersonAvatar.vue\";\n\nconst store = useMeetingStore();\nconst actions = computed(() => store.meeting.value!.actions);\nconst open = computed(() => actions.value.filter(a => !a.done).length);\n\ntype Item = { kind: \"action\"; key: string; action: Action } | { kind: \"label\"; key: string };\nconst items = computed((): Item[] => {\n  const typed = actions.value.filter(a => !a.fromUpdate);\n  const fromUpdates = actions.value.filter(a => a.fromUpdate);\n  const card = (action: Action): Item => ({ kind: \"action\", key: `a${action.id}`, action });\n  return [\n    ...typed.map(card),\n    ...fromUpdates.length ? [{ kind: \"label\", key: \"label\" } as const] : [],\n    ...fromUpdates.map(card),\n  ];\n});\n\nconst editingDue = ref<number | null>(null);\nasync function setDue(action: Action, due: string | null) {\n  action.due = due;\n  editingDue.value = null;\n  await store.updateAction(action);\n}\n\nconst peopleOf = (ids: number[]): Person[] => ids.map(id => store.personById(id)).filter((p): p is Person => p !== null);\n\nasync function toggle(action: Action) {\n  action.done = !action.done;\n  await store.updateAction(action);\n}\n\nconst what = ref(\"\");\nconst due = ref<string | null>(null);\nconst who = ref<number[]>([]);\nconst adding = ref(false);\n\nfunction toggleWho(id: number) {\n  who.value = who.value.includes(id) ? who.value.filter(x => x !== id) : [...who.value, id];\n}\n\nasync function add() {\n  const text = what.value.trim();\n  if (!text) return;\n  adding.value = true;\n  try {\n    if (await store.addAction({ who: who.value, what: text, due: due.value })) {\n      what.value = \"\";\n      due.value = null;\n      who.value = [];\n    }\n  } finally {\n    adding.value = false;\n  }\n}\n</script>\n\n<style scoped>\n.ba__head {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 32px;\n}\n.ba__grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));\n  align-items: start;\n  gap: 24px;\n}\n.ba__section-head { display: flex; grid-column: 1 / -1; align-items: center; gap: 12px; margin-top: 16px; }\n.ba__section-label {\n  font-size: 12px;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--weak);\n}\n.ba__card {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  min-height: 190px;\n  padding: 20px;\n  background: var(--sticky-paper);\n  color: var(--ink);\n  transition: opacity var(--dur-base) var(--ease);\n}\n.ba__card--from { background: var(--sticky-update); }\n.ba__card--done { opacity: 0.5; }\n.ba__card--done .ba__what { text-decoration: line-through; }\n.ba__top { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ba__chip {\n  padding: 4px 8px;\n  border: none;\n  border-radius: var(--radius-md);\n  background: rgba(30, 40, 36, 0.08);\n  color: var(--ink);\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n}\n.ba__chip:hover { background: rgba(30, 40, 36, 0.14); }\n.ba__chip--empty { background: transparent; color: var(--ink-soft); }\n.ba__meta { display: flex; align-items: center; gap: 10px; }\n.ba__carried { font-size: 12px; color: var(--weak); }\n.ba__linear {\n  font-size: 12px;\n  color: var(--ink-soft);\n  text-decoration: none;\n  font-variant-numeric: tabular-nums;\n  cursor: pointer;\n}\n.ba__linear:hover { text-decoration: underline; }\n.ba__remove {\n  padding: 0;\n  border: none;\n  background: transparent;\n  color: var(--weak);\n  font-size: 16px;\n  cursor: pointer;\n}\n.ba__what { flex: 1; font-size: 20px; font-weight: 500; line-height: 1.2; }\n.ba__bottom { display: flex; align-items: center; justify-content: space-between; gap: 8px; }\n.ba__who { display: flex; align-items: center; gap: 8px; min-width: 0; }\n.ba__avatars { display: flex; }\n.ba__avatar { box-sizing: content-box; margin-right: -6px; border: 2px solid var(--sticky-paper); }\n.ba__names { margin-left: 6px; font-size: 13px; color: var(--ink-soft); }\n.ba__box {\n  flex: none;\n  width: 24px;\n  height: 24px;\n  padding: 0;\n  border: 1.5px solid rgba(30, 40, 36, 0.4);\n  border-radius: var(--radius-md);\n  background: transparent;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease);\n}\n.ba__box--on { border-color: var(--primary); background: var(--primary); }\n\n.ba__new {\n  display: flex;\n  flex-direction: column;\n  gap: 12px;\n  min-height: 190px;\n  margin: 0;\n  padding: 20px;\n  border: 1px dashed var(--hairline-strong);\n  border-radius: var(--radius-md);\n}\n.ba__new-what {\n  height: 36px;\n  padding: 0;\n  border: none;\n  border-bottom: 1px solid var(--border);\n  background: transparent;\n  color: var(--foreground);\n  font-size: 18px;\n  font-weight: 500;\n  outline: none;\n}\n.ba__new-what:focus { border-bottom-color: var(--ring); }\n.ba__new-what::placeholder { color: currentColor; opacity: 0.5; }\n.ba__pick { display: flex; flex-wrap: wrap; gap: 4px; }\n.ba__toggle {\n  height: 28px;\n  padding: 0 8px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-md);\n  background: transparent;\n  color: var(--muted-foreground);\n  font-size: 12px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);\n}\n.ba__toggle:hover { background: var(--field); }\n.ba__toggle--on { border-color: var(--primary); background: var(--primary); color: var(--foreground); }\n.ba__toggle--on:hover { border-color: var(--primary-hover); background: var(--primary-hover); }\n.ba__new-foot { display: flex; justify-content: flex-end; margin-top: auto; }\n</style>\n","import { inject, nextTick, ref, watch, type InjectionKey } from \"vue\";\nimport { FOCUS_COUNT, type Action, type Block, type Meeting, type MeetingPatch, type Note, type Person, type Update } from \"@mod-tech42_tools/js/mondays/types\";\nimport { api } from \"./api\";\nimport type { MeetingReviewStatus } from \"@mod-tech42_tools/js/mondays/meeting-review-types\";\nimport { errorMessage } from \"./errors\";\nimport { MeetingSaveQueue } from \"./meeting-save-queue\";\nimport { undoToasts } from \"./undo-toasts\";\n\ntype Section = keyof MeetingPatch;\nconst SECTIONS: Section[] = [\"scores\", \"targets\", \"updates\", \"focus\"];\n\n/** How long typing may pause before a section is saved. */\nconst SAVE_DELAY_MS = 500;\n\n/**\n * One open meeting and its autosave. The boards edit `meeting` in place; a\n * watcher compares each section with what was last sent and saves only the\n * sections that changed, so the Updates board never overwrites the scores.\n * Actions and notes are separate rows on the server and go through their own\n * calls instead.\n */\nexport function createMeetingStore() {\n  const meeting = ref<Meeting | null>(null);\n  const people = ref<Person[]>([]);\n  // Shared by the existing overview poller and header; never part of autosave.\n  const reviewStatus = ref<MeetingReviewStatus | null>(null);\n  const loading = ref(true);\n  const loadError = ref(\"\");\n  const saving = ref(false);\n  const saveError = ref(\"\");\n\n  const personById = (id: number | null) => people.value.find(p => p.id === id) ?? null;\n\n  const lastSent = new Map<Section, string>();\n  const pending = new Set<Section>();\n  const saveQueue = new MeetingSaveQueue();\n  let timer: ReturnType<typeof setTimeout> | undefined;\n\n  function remember(sections: Section[] = SECTIONS) {\n    for (const section of sections) lastSent.set(section, JSON.stringify(meeting.value?.[section]));\n  }\n\n  async function load(id: number) {\n    await flush();\n    // Drop the previous meeting before the next one arrives: a board that\n    // stayed editable meanwhile would take edits into the wrong meeting.\n    meeting.value = null;\n    reviewStatus.value = null;\n    pending.clear();\n    loading.value = true;\n    loadError.value = \"\";\n    try {\n      const [loaded, team] = await Promise.all([api.getMeeting({ id }), people.value.length ? people.value : api.listMeetingPeople()]);\n      people.value = team;\n      // Always three focus areas on the board, also for a meeting saved with fewer.\n      while (loaded.focus.length < FOCUS_COUNT) loaded.focus.push({ title: \"\", body: \"\" });\n      meeting.value = loaded;\n      remember();\n    } catch (e) {\n      meeting.value = null;\n      loadError.value = errorMessage(e, \"De meeting kon niet worden geladen.\");\n    } finally {\n      loading.value = false;\n    }\n  }\n\n  async function flush() {\n    // Vue's section watcher must see the last input before the exit drains it.\n    await nextTick();\n    clearTimeout(timer);\n    await saveQueue.flush({ save: savePending, hasPending: () => pending.size > 0, hasError: () => Boolean(saveError.value) });\n  }\n\n  async function savePending() {\n    clearTimeout(timer);\n    const current = meeting.value;\n    if (!current || !pending.size || saving.value) return;\n\n    const sections = [...pending];\n    pending.clear();\n    const patch: Record<string, unknown> = {};\n    const previous = new Map<Section, string | undefined>();\n    for (const section of sections) {\n      patch[section] = current[section];\n      previous.set(section, lastSent.get(section));\n      lastSent.set(section, JSON.stringify(current[section]));\n    }\n\n    saving.value = true;\n    try {\n      const spawned = await api.saveMeeting({ id: current.id, patch });\n      // Handing an update point to someone makes an action on the server, and a new\n      // deadline on the point moves its action's; show both without a reload.\n      if (spawned.length && meeting.value?.id === current.id) {\n        const actions = meeting.value.actions;\n        for (const action of spawned) {\n          const index = actions.findIndex(a => a.id === action.id);\n          if (index >= 0) actions[index].due = action.due;\n          else actions.push(action);\n        }\n      }\n      saveError.value = \"\";\n    } catch (e) {\n      // Put the sections back, so the next edit or \"Opnieuw\" sends them again.\n      for (const [section, sent] of previous) {\n        lastSent.set(section, sent ?? \"\");\n        pending.add(section);\n      }\n      saveError.value = errorMessage(e, \"Opslaan is niet gelukt.\");\n    } finally {\n      saving.value = false;\n    }\n    // Something may have changed while the call was out.\n    if (pending.size && !saveError.value) schedule();\n  }\n\n  function schedule() {\n    clearTimeout(timer);\n    timer = setTimeout(() => void flush(), SAVE_DELAY_MS);\n  }\n\n  watch(\n    () => SECTIONS.map(section => JSON.stringify(meeting.value?.[section])),\n    (values) => {\n      if (!meeting.value) return;\n      SECTIONS.forEach((section, index) => {\n        if (values[index] !== lastSent.get(section)) pending.add(section);\n      });\n      if (pending.size) schedule();\n    },\n  );\n\n  /** A call that is not a section save: its failure shows where the autosave's does. */\n  async function run<T>(fn: () => Promise<T>, failure: string): Promise<T | undefined> {\n    try {\n      const result = await fn();\n      saveError.value = \"\";\n      return result;\n    } catch (e) {\n      saveError.value = errorMessage(e, failure);\n      return undefined;\n    }\n  }\n\n  return {\n    meeting,\n    people,\n    reviewStatus,\n    loading,\n    loadError,\n    saving,\n    saveError,\n    personById,\n    load,\n    flush,\n    hasPending: () => pending.size > 0 || saving.value,\n\n    async refreshFinance() {\n      const id = meeting.value!.id;\n      const finance = await run(() => api.refreshMeetingFinance({ id }), \"Hourly kon niet worden bijgewerkt.\");\n      if (finance && meeting.value?.id === id) meeting.value.finance = finance;\n    },\n    async finish(): Promise<boolean> {\n      await flush();\n      if (saveError.value) return false;\n      const finished = await run(() => api.finishMeeting({ id: meeting.value!.id }), \"Afronden is niet gelukt.\");\n      // The dock reads this, so a retry after failed navigation does not offer to finish again.\n      if (finished && meeting.value?.id === finished.id) meeting.value.finishedAt = finished.finishedAt;\n      return Boolean(finished);\n    },\n    async addAction(fields: Pick<Action, \"who\" | \"what\" | \"due\">) {\n      const meetingId = meeting.value!.id;\n      const action = await run(() => api.addMeetingAction({ meetingId, action: fields }), \"De actie is niet opgeslagen.\");\n      if (action && meeting.value?.id === meetingId) meeting.value.actions.push(action);\n      return Boolean(action);\n    },\n    async updateAction(action: Action) {\n      const { id, who, what, due, done } = action;\n      await run(() => api.updateMeetingAction({ id, action: { who, what, due, done } }), \"De actie is niet opgeslagen.\");\n    },\n    /** Optimistic: the card leaves at once, the server delete waits out the undo window. */\n    deleteAction(id: number) {\n      const list = meeting.value?.actions;\n      const index = list?.findIndex(a => a.id === id) ?? -1;\n      if (!list || index < 0) return;\n      const [removed] = list.splice(index, 1);\n      undoToasts.show({\n        message: \"Actie verwijderd\",\n        commit: () => api.deleteMeetingAction({ id }),\n        undo: () => list.splice(index, 0, removed),\n        onError: (e) => { list.splice(index, 0, removed); saveError.value = errorMessage(e, \"Verwijderen is niet gelukt.\"); },\n      });\n    },\n\n    /** A \"deze week\" point. The section autosave persists the removal; undo puts it\n     * back and the next autosave re-saves it, so there is no server call of its own. */\n    deleteUpdatePoint(update: Update, index: number) {\n      const [removed] = update.cur.splice(index, 1);\n      undoToasts.show({\n        message: \"Punt verwijderd\",\n        commit: () => { /* the updates autosave already did the work */ },\n        undo: () => update.cur.splice(index, 0, removed),\n        onError: () => { /* nothing to restore beyond the array */ },\n      });\n    },\n\n    /** An extra focus area (kept for symmetry with the other undo toasts). */\n    deleteFocusArea(index: number) {\n      const focus = meeting.value?.focus;\n      if (!focus) return;\n      const [removed] = focus.splice(index, 1);\n      undoToasts.show({\n        message: \"Focus verwijderd\",\n        commit: () => { /* the focus autosave already did the work */ },\n        undo: () => focus.splice(index, 0, removed),\n        onError: () => { /* nothing to restore beyond the array */ },\n      });\n    },\n\n    /** The author is picked when the sticky is made (Wouter, TEC-210), not remembered. */\n    async addNote(block: Block, authorId: number): Promise<Note | undefined> {\n      const meetingId = meeting.value!.id;\n      const note = await run(() => api.addMeetingNote({ meetingId, block, text: \"\", authorId }), \"De notitie is niet opgeslagen.\");\n      if (note && meeting.value?.id === meetingId) meeting.value.notes.push(note);\n      return note;\n    },\n    async updateNote(note: Note) {\n      await run(() => api.updateMeetingNote({ id: note.id, text: note.text }), \"De notitie is niet opgeslagen.\");\n    },\n    /** Optimistic, with an undo window, like deleteAction. */\n    deleteNote(id: number) {\n      const list = meeting.value?.notes;\n      const index = list?.findIndex(n => n.id === id) ?? -1;\n      if (!list || index < 0) return;\n      const [removed] = list.splice(index, 1);\n      undoToasts.show({\n        message: \"Notitie verwijderd\",\n        commit: () => api.deleteMeetingNote({ id }),\n        undo: () => list.splice(index, 0, removed),\n        onError: (e) => { list.splice(index, 0, removed); saveError.value = errorMessage(e, \"Verwijderen is niet gelukt.\"); },\n      });\n    },\n  };\n}\n\nexport type MeetingStore = ReturnType<typeof createMeetingStore>;\n\nexport const MEETING_STORE: InjectionKey<MeetingStore> = Symbol(\"meeting-store\");\n\nexport function useMeetingStore(): MeetingStore {\n  const store = inject(MEETING_STORE);\n  if (!store) throw new Error(\"useMeetingStore() needs a MeetingView above it\");\n  return store;\n}\n\n/** Run `fn` at most once per `ms`, with the last arguments. For a row that saves itself. */\nexport function debounced<A extends unknown[]>(fn: (...args: A) => void, ms: number): ((...args: A) => void) & { flush(): void } {\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  let lastArgs: A | null = null;\n  const run = () => {\n    clearTimeout(timer);\n    if (lastArgs) {\n      const args = lastArgs;\n      lastArgs = null;\n      fn(...args);\n    }\n  };\n  return Object.assign((...args: A) => {\n    lastArgs = args;\n    clearTimeout(timer);\n    timer = setTimeout(run, ms);\n  }, { flush: run });\n}\n","/** Serializes section saves and drains edits that arrive during a request. */\nexport class MeetingSaveQueue {\n  #running: Promise<void> | null = null;\n\n  /** A failed batch stays pending for the user's retry, rather than looping. */\n  public async flush(options: { save: () => Promise<void>; hasPending: () => boolean; hasError: () => boolean }): Promise<void> {\n    if (this.#running) {\n      await this.#running;\n      if (options.hasError()) return;\n      await this.flush(options);\n      return;\n    } else {\n      this.#running = options.save();\n      try {\n        await this.#running;\n      } finally {\n        this.#running = null;\n      }\n    }\n    if (options.hasPending() && !options.hasError()) await this.flush(options);\n  }\n}\n","<template>\n  <div class=\"due\" :class=\"`due--${tone}`\" role=\"group\" :aria-label=\"label\">\n    <div class=\"due__row\">\n      <span class=\"due__label\">{{ modelValue ? `Deadline ${fmtDue(modelValue)}` : \"Deadline\" }}</span>\n      <button\n        v-for=\"choice in QUICK\"\n        :key=\"choice.key\"\n        type=\"button\"\n        class=\"due__chip\"\n        :class=\"{ 'due__chip--on': active === choice.key }\"\n        :aria-pressed=\"active === choice.key\"\n        @click=\"set(dueFor(choice.key, new Date()))\"\n      >\n        {{ choice.label }}\n      </button>\n      <button\n        type=\"button\"\n        class=\"due__chip\"\n        :class=\"{ 'due__chip--on': typeof active === 'number' }\"\n        :aria-expanded=\"mode === 'day'\"\n        @click=\"mode = mode === 'day' ? '' : 'day'\"\n      >\n        Dag\n      </button>\n      <button\n        type=\"button\"\n        class=\"due__chip\"\n        :class=\"{ 'due__chip--on': active === 'other' }\"\n        :aria-expanded=\"mode === 'other'\"\n        @click=\"mode = mode === 'other' ? '' : 'other'\"\n      >\n        Anders\n      </button>\n      <button v-if=\"modelValue\" type=\"button\" class=\"due__clear\" aria-label=\"Deadline weghalen\" @click=\"set(null)\">×</button>\n    </div>\n    <div v-if=\"mode === 'day'\" class=\"due__row\">\n      <button\n        v-for=\"(day, index) in DAYS\"\n        :key=\"day\"\n        type=\"button\"\n        class=\"due__chip\"\n        :class=\"{ 'due__chip--on': active === index + 1 }\"\n        :aria-pressed=\"active === index + 1\"\n        @click=\"pickDay(index + 1)\"\n      >\n        {{ day }}\n      </button>\n    </div>\n    <input\n      v-if=\"mode === 'other'\"\n      type=\"date\"\n      class=\"due__date\"\n      :value=\"modelValue ?? ''\"\n      aria-label=\"Deadline, datum\"\n      @change=\"set(($event.target as HTMLInputElement).value || null)\"\n    >\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { dueFor, type DueChoice } from \"@mod-tech42_tools/js/mondays/rules\";\nimport { fmtDue } from \"../../lib/mondays-format\";\n\nconst props = withDefaults(defineProps<{ modelValue: string | null; tone?: \"sticky\" | \"dark\"; label?: string }>(), {\n  tone: \"sticky\",\n  label: \"Deadline\",\n});\nconst emit = defineEmits<{ \"update:modelValue\": [value: string | null] }>();\n\nconst QUICK = [{ key: \"today\", label: \"Vandaag\" }, { key: \"endOfWeek\", label: \"Einde week\" }] as const;\nconst DAYS = [\"ma\", \"di\", \"wo\", \"do\", \"vr\"];\n\nconst mode = ref<\"\" | \"day\" | \"other\">(\"\");\n\n/** Which choice the current deadline reads as. The quick ones win, so a Friday\n * this week lights up \"Einde week\" rather than \"vr\". */\nconst active = computed((): DueChoice | \"other\" | null => {\n  if (!props.modelValue) return null;\n  const today = new Date();\n  const choices: DueChoice[] = [\"today\", \"endOfWeek\", 1, 2, 3, 4, 5];\n  return choices.find(choice => dueFor(choice, today) === props.modelValue) ?? \"other\";\n});\n\nfunction set(value: string | null) {\n  emit(\"update:modelValue\", value);\n}\n\nfunction pickDay(weekday: DueChoice) {\n  set(dueFor(weekday, new Date()));\n  mode.value = \"\";\n}\n</script>\n\n<style scoped>\n.due { display: flex; flex-direction: column; gap: 6px; }\n.due__row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }\n.due__label { margin-right: 4px; font-size: 12px; font-variant-numeric: tabular-nums; }\n.due__chip {\n  height: 24px;\n  padding: 0 8px;\n  border: 1px solid;\n  border-radius: var(--radius-md);\n  background: transparent;\n  font-size: 12px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);\n}\n.due__clear {\n  padding: 0 4px;\n  border: none;\n  background: transparent;\n  font-size: 14px;\n  cursor: pointer;\n}\n.due__date {\n  align-self: flex-start;\n  height: 28px;\n  padding: 0 8px;\n  border: 1px solid;\n  border-radius: var(--radius-md);\n  font: inherit;\n  font-size: 13px;\n}\n\n.due--sticky .due__label,\n.due--sticky .due__clear { color: var(--ink-soft); }\n.due--sticky .due__chip { border-color: rgba(30, 40, 36, 0.2); color: var(--ink-soft); }\n.due--sticky .due__chip:hover { background: rgba(30, 40, 36, 0.08); }\n.due--sticky .due__chip--on,\n.due--sticky .due__chip--on:hover { border-color: var(--ink); background: var(--ink); color: var(--sticky-paper); }\n.due--sticky .due__date { border-color: rgba(30, 40, 36, 0.3); background: transparent; color: var(--ink); }\n\n.due--dark .due__label,\n.due--dark .due__clear { color: var(--muted-foreground); }\n.due--dark .due__chip { border-color: var(--border); color: var(--muted-foreground); }\n.due--dark .due__chip:hover { background: var(--field); }\n.due--dark .due__chip--on,\n.due--dark .due__chip--on:hover { border-color: var(--primary); background: var(--primary); color: var(--foreground); }\n.due--dark .due__date { border-color: var(--border); background: var(--background); color: var(--foreground); color-scheme: dark; }\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\nconst _hoisted_2 = { class: \"due__row\" }\nconst _hoisted_3 = { class: \"due__label\" }\nconst _hoisted_4 = [\"aria-pressed\", \"onClick\"]\nconst _hoisted_5 = [\"aria-expanded\"]\nconst _hoisted_6 = [\"aria-expanded\"]\nconst _hoisted_7 = {\n  key: 0,\n  class: \"due__row\"\n}\nconst _hoisted_8 = [\"aria-pressed\", \"onClick\"]\nconst _hoisted_9 = [\"value\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"due\", `due--${$props.tone}`]),\n    role: \"group\",\n    \"aria-label\": $props.label\n  }, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.modelValue ? `Deadline ${$setup.fmtDue($props.modelValue)}` : \"Deadline\"), 1 /* TEXT */),\n      (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.QUICK, (choice) => {\n        return _createElementVNode(\"button\", {\n          key: choice.key,\n          type: \"button\",\n          class: _normalizeClass([\"due__chip\", { 'due__chip--on': $setup.active === choice.key }]),\n          \"aria-pressed\": $setup.active === choice.key,\n          onClick: $event => ($setup.set($setup.dueFor(choice.key, new Date())))\n        }, _toDisplayString(choice.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_4)\n      }), 64 /* STABLE_FRAGMENT */)),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"due__chip\", { 'due__chip--on': typeof $setup.active === 'number' }]),\n        \"aria-expanded\": $setup.mode === 'day',\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.mode = $setup.mode === 'day' ? '' : 'day'))\n      }, \" Dag \", 10 /* CLASS, PROPS */, _hoisted_5),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"due__chip\", { 'due__chip--on': $setup.active === 'other' }]),\n        \"aria-expanded\": $setup.mode === 'other',\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.mode = $setup.mode === 'other' ? '' : 'other'))\n      }, \" Anders \", 10 /* CLASS, PROPS */, _hoisted_6),\n      ($props.modelValue)\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 0,\n            type: \"button\",\n            class: \"due__clear\",\n            \"aria-label\": \"Deadline weghalen\",\n            onClick: _cache[2] || (_cache[2] = $event => ($setup.set(null)))\n          }, \"×\"))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    ($setup.mode === 'day')\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n          (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.DAYS, (day, index) => {\n            return _createElementVNode(\"button\", {\n              key: day,\n              type: \"button\",\n              class: _normalizeClass([\"due__chip\", { 'due__chip--on': $setup.active === index + 1 }]),\n              \"aria-pressed\": $setup.active === index + 1,\n              onClick: $event => ($setup.pickDay(index + 1))\n            }, _toDisplayString(day), 11 /* TEXT, CLASS, PROPS */, _hoisted_8)\n          }), 64 /* STABLE_FRAGMENT */))\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.mode === 'other')\n      ? (_openBlock(), _createElementBlock(\"input\", {\n          key: 1,\n          type: \"date\",\n          class: \"due__date\",\n          value: $props.modelValue ?? '',\n          \"aria-label\": \"Deadline, datum\",\n          onChange: _cache[3] || (_cache[3] = $event => ($setup.set(($event.target as HTMLInputElement).value || null)))\n        }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_9))\n      : _createCommentVNode(\"v-if\", true)\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/DuePicker.vue\";script.__scopeId = \"data-v-b5b56a5d\";export default script;","import { toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"title\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"span\", {\n    class: _normalizeClass([\"av\", `av--${$props.size}`]),\n    title: $props.name,\n    \"aria-hidden\": \"true\"\n  }, _toDisplayString($setup.initials($props.name)), 11 /* TEXT, CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/PersonAvatar.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/PersonAvatar.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/PersonAvatar.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/PersonAvatar.vue\";script.__scopeId = \"data-v-0ace74a6\";export default script;","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, createBlock as _createBlock, normalizeStyle as _normalizeStyle, vModelText as _vModelText, withDirectives as _withDirectives, createVNode as _createVNode, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"ba__head\" }\nconst _hoisted_2 = { class: \"board-sub\" }\nconst _hoisted_3 = { class: \"ba__grid\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"ba__section-head\"\n}\nconst _hoisted_5 = { class: \"ba__top\" }\nconst _hoisted_6 = [\"aria-expanded\", \"aria-label\", \"onClick\"]\nconst _hoisted_7 = { class: \"ba__meta\" }\nconst _hoisted_8 = [\"href\", \"aria-label\"]\nconst _hoisted_9 = {\n  key: 1,\n  class: \"ba__carried\"\n}\nconst _hoisted_10 = [\"aria-label\", \"onClick\"]\nconst _hoisted_11 = { class: \"ba__what\" }\nconst _hoisted_12 = { class: \"ba__bottom\" }\nconst _hoisted_13 = { class: \"ba__who\" }\nconst _hoisted_14 = { class: \"ba__avatars\" }\nconst _hoisted_15 = { class: \"ba__names\" }\nconst _hoisted_16 = [\"aria-checked\", \"aria-label\", \"onClick\"]\nconst _hoisted_17 = { class: \"ba__pick\" }\nconst _hoisted_18 = [\"aria-pressed\", \"onClick\"]\nconst _hoisted_19 = { class: \"ba__new-foot\" }\nconst _hoisted_20 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"div\", _hoisted_1, [\n      _cache[2] || (_cache[2] = _createElementVNode(\"h2\", { class: \"board-title\" }, \"Acties\", -1 /* CACHED */)),\n      _createElementVNode(\"span\", _hoisted_2, _toDisplayString($setup.open) + \" open · \" + _toDisplayString($setup.actions.length - $setup.open) + \" afgerond\", 1 /* TEXT */)\n    ]),\n    _createElementVNode(\"div\", _hoisted_3, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.items, (item, index) => {\n        return (_openBlock(), _createElementBlock(_Fragment, {\n          key: item.key\n        }, [\n          _createCommentVNode(\" Actions made automatically from an assigned update point come after the\\n           typed ones, under their own label; the new-action form comes last. \"),\n          (item.kind === 'label')\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_4, _cache[3] || (_cache[3] = [\n                _createElementVNode(\"span\", { class: \"ba__section-label\" }, \"Overgenomen uit updates\", -1 /* CACHED */)\n              ])))\n            : (_openBlock(), _createElementBlock(\"div\", {\n                key: 1,\n                class: _normalizeClass([\"ba__card\", { 'ba__card--done': item.action.done, 'ba__card--from': item.action.fromUpdate }]),\n                style: _normalizeStyle({ transform: `rotate(${$setup.tilt(index)})` })\n              }, [\n                _createElementVNode(\"div\", _hoisted_5, [\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: _normalizeClass([\"ba__chip\", { 'ba__chip--empty': !item.action.due }]),\n                    \"aria-expanded\": $setup.editingDue === item.action.id,\n                    \"aria-label\": item.action.due ? `Deadline ${$setup.fmtDue(item.action.due)} wijzigen` : 'Deadline kiezen',\n                    onClick: $event => ($setup.editingDue = $setup.editingDue === item.action.id ? null : item.action.id)\n                  }, _toDisplayString($setup.fmtDue(item.action.due) || \"+ Deadline\"), 11 /* TEXT, CLASS, PROPS */, _hoisted_6),\n                  _createElementVNode(\"div\", _hoisted_7, [\n                    (item.action.linear)\n                      ? (_openBlock(), _createElementBlock(\"a\", {\n                          key: 0,\n                          class: \"ba__linear\",\n                          href: item.action.linear.url,\n                          target: \"_blank\",\n                          rel: \"noopener noreferrer\",\n                          \"aria-label\": `${item.action.linear.identifier} openen in Linear`\n                        }, _toDisplayString(item.action.linear.identifier), 9 /* TEXT, PROPS */, _hoisted_8))\n                      : _createCommentVNode(\"v-if\", true),\n                    (item.action.carried)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9, \"Van vorige week\"))\n                      : _createCommentVNode(\"v-if\", true),\n                    _createElementVNode(\"button\", {\n                      type: \"button\",\n                      class: \"ba__remove\",\n                      \"aria-label\": `${item.action.what} verwijderen`,\n                      onClick: $event => ($setup.store.deleteAction(item.action.id))\n                    }, \"×\", 8 /* PROPS */, _hoisted_10)\n                  ])\n                ]),\n                ($setup.editingDue === item.action.id)\n                  ? (_openBlock(), _createBlock($setup[\"DuePicker\"], {\n                      key: 0,\n                      \"model-value\": item.action.due,\n                      label: `Deadline: ${item.action.what}`,\n                      \"onUpdate:modelValue\": $event => ($setup.setDue(item.action, $event))\n                    }, null, 8 /* PROPS */, [\"model-value\", \"label\", \"onUpdate:modelValue\"]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"span\", _hoisted_11, _toDisplayString(item.action.what), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_12, [\n                  _createElementVNode(\"div\", _hoisted_13, [\n                    _createElementVNode(\"div\", _hoisted_14, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.peopleOf(item.action.who), (person) => {\n                        return (_openBlock(), _createBlock($setup[\"PersonAvatar\"], {\n                          key: person.id,\n                          name: person.name,\n                          class: \"ba__avatar\"\n                        }, null, 8 /* PROPS */, [\"name\"]))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]),\n                    _createElementVNode(\"span\", _hoisted_15, _toDisplayString($setup.peopleOf(item.action.who).map(p => p.short).join(\" & \")), 1 /* TEXT */)\n                  ]),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: _normalizeClass([\"ba__box\", { 'ba__box--on': item.action.done }]),\n                    role: \"checkbox\",\n                    \"aria-checked\": item.action.done,\n                    \"aria-label\": `${item.action.what} afgerond`,\n                    onClick: $event => ($setup.toggle(item.action))\n                  }, null, 10 /* CLASS, PROPS */, _hoisted_16)\n                ])\n              ], 6 /* CLASS, STYLE */))\n        ], 64 /* STABLE_FRAGMENT */))\n      }), 128 /* KEYED_FRAGMENT */)),\n      _createElementVNode(\"form\", {\n        class: \"ba__new\",\n        onSubmit: _withModifiers($setup.add, [\"prevent\"])\n      }, [\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.what) = $event)),\n          class: \"ba__new-what\",\n          placeholder: \"+ Nieuwe actie\",\n          \"aria-label\": \"Nieuwe actie\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelText, $setup.what]\n        ]),\n        _createElementVNode(\"div\", _hoisted_17, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.store.people.value, (person) => {\n            return (_openBlock(), _createElementBlock(\"button\", {\n              key: person.id,\n              type: \"button\",\n              class: _normalizeClass([\"ba__toggle\", { 'ba__toggle--on': $setup.who.includes(person.id) }]),\n              \"aria-pressed\": $setup.who.includes(person.id),\n              onClick: $event => ($setup.toggleWho(person.id))\n            }, _toDisplayString(person.short), 11 /* TEXT, CLASS, PROPS */, _hoisted_18))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]),\n        _createVNode($setup[\"DuePicker\"], {\n          modelValue: $setup.due,\n          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.due) = $event)),\n          tone: \"dark\",\n          label: \"Deadline nieuwe actie\"\n        }, null, 8 /* PROPS */, [\"modelValue\"]),\n        _createElementVNode(\"div\", _hoisted_19, [\n          _createElementVNode(\"button\", {\n            type: \"submit\",\n            class: \"btn btn--primary\",\n            disabled: $setup.adding\n          }, \"Toevoegen\", 8 /* PROPS */, _hoisted_20)\n        ])\n      ], 32 /* NEED_HYDRATION */)\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardActions.vue\";script.__scopeId = \"data-v-7a927ce9\";export default script;","<template>\n  <div class=\"bfi__head\">\n    <h2 class=\"board-title\">Financiële cijfers</h2>\n    <div class=\"bfi__sync\">\n      <span class=\"bfi__veil\">\n        <span class=\"bfi__dot\" :class=\"{ 'bfi__dot--off': !finance }\" />\n        {{ syncLabel }}\n      </span>\n      <button v-if=\"!finished\" type=\"button\" class=\"btn\" :disabled=\"refreshing\" @click=\"refresh\">\n        {{ refreshing ? \"Bijwerken…\" : \"Vernieuwen\" }}\n      </button>\n    </div>\n  </div>\n\n  <div class=\"bfi__stats\">\n    <div v-for=\"(stat, index) in stats\" :key=\"stat.label\" class=\"bfi__stat\" :style=\"{ transform: `rotate(${tilt([0, 1, 3][index])})` }\">\n      <span class=\"bfi__value\">{{ stat.value }}</span>\n      <span class=\"bfi__label\">{{ stat.label }}</span>\n    </div>\n  </div>\n\n  <div class=\"bfi__lower\">\n    <RevenueChart :months=\"finance?.months ?? []\" />\n    <div class=\"bfi__targets\">\n      <div v-for=\"(target, index) in targets\" :key=\"index\" class=\"bfi__target\" :style=\"{ transform: `rotate(${tilt(index + 4)})` }\">\n        <template v-if=\"editing === index\">\n          <label class=\"bfi__field\">Jaar <input :value=\"target.year\" type=\"number\" class=\"bfi__input\" min=\"2000\" max=\"2100\" @input=\"setNumber(target, 'year', $event)\"></label>\n          <label class=\"bfi__field\">Betalende klanten <input :value=\"target.customers\" type=\"number\" class=\"bfi__input\" min=\"0\" @input=\"setNumber(target, 'customers', $event)\"></label>\n          <label class=\"bfi__field\">Omzet per maand (€) <input :value=\"target.monthlyRevenue\" type=\"number\" class=\"bfi__input\" min=\"0\" step=\"1000\" @input=\"setNumber(target, 'monthlyRevenue', $event)\"></label>\n          <button type=\"button\" class=\"bfi__edit\" @click=\"editing = null\">Klaar</button>\n        </template>\n        <template v-else>\n          <div class=\"bfi__target-top\">\n            <span class=\"bfi__eyebrow\">Target eind {{ target.year }}</span>\n            <button type=\"button\" class=\"bfi__edit\" :aria-label=\"`Target eind ${target.year} wijzigen`\" @click=\"editing = index\">Wijzig</button>\n          </div>\n          <span class=\"bfi__customers\">{{ target.customers }} betalende klanten</span>\n          <span class=\"bfi__revenue\">{{ fmtEuroK(target.monthlyRevenue) }} per maand</span>\n          <div class=\"bfi__progress\">\n            <div class=\"bfi__bar\"><div class=\"bfi__fill\" :style=\"{ width: barWidth(target.monthlyRevenue) }\" /></div>\n            <span class=\"bfi__progress-label\">Omzet {{ monthLabel }} {{ fmtEuro(currentRevenue) }} · {{ percentOf(currentRevenue, target.monthlyRevenue) }} van doel</span>\n          </div>\n        </template>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport type { Target } from \"@mod-tech42_tools/js/mondays/types\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { fmtClock, fmtEuro, fmtEuroK, fmtHours, fmtMonth, percentOf, tilt } from \"../../lib/mondays-format\";\nimport RevenueChart from \"./RevenueChart.vue\";\n\nconst store = useMeetingStore();\nconst meeting = computed(() => store.meeting.value!);\nconst finance = computed(() => meeting.value.finance);\nconst finished = computed(() => Boolean(meeting.value.finishedAt));\nconst targets = computed(() => meeting.value.targets);\n\nconst refreshing = ref(false);\nconst editing = ref<number | null>(null);\n\nasync function refresh() {\n  refreshing.value = true;\n  try {\n    await store.refreshFinance();\n  } finally {\n    refreshing.value = false;\n  }\n}\n\nconst syncLabel = computed(() => {\n  if (!finance.value) return \"Hourly niet bereikbaar\";\n  const time = fmtClock(finance.value.fetchedAt);\n  return finished.value ? `Uit Hourly, vastgelegd · ${time}` : `Live uit Hourly · ${time}`;\n});\n\nconst stats = computed(() => {\n  const week = finance.value?.week;\n  const dash = \"–\";\n  return [\n    { value: week ? fmtHours(week.hours) : dash, label: \"Uren geschreven vorige week\" },\n    { value: week ? fmtHours(week.billableHours) : dash, label: \"Uren facturabel\" },\n    { value: week ? fmtEuro(week.amount, { cents: true }) : dash, label: \"Week omzet\" },\n  ];\n});\n\nconst currentRevenue = computed(() => finance.value?.months.find(m => m.month === finance.value!.currentMonth)?.amount ?? 0);\nconst monthLabel = computed(() => fmtMonth(finance.value?.currentMonth ?? meeting.value.date.slice(0, 7)));\n/** An emptied field saves as 0 rather than as text the server refuses; a year\n * is only taken once it is a whole one, not at the \"2\" of typing \"2027\". */\nfunction setNumber(target: Target, key: keyof Target, event: Event) {\n  const value = Math.max(0, Math.round(Number((event.target as HTMLInputElement).value) || 0));\n  if (key === \"year\" && (value < 2000 || value > 2100)) return;\n  target[key] = value;\n}\n\nconst barWidth = (goal: number) => `${goal > 0 ? Math.min(100, currentRevenue.value / goal * 100) : 0}%`;\n</script>\n\n<style scoped>\n.bfi__head {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 32px;\n}\n.bfi__sync { display: flex; align-items: center; gap: 12px; }\n/* The veil capsule, the brand's one use of transparency. */\n.bfi__veil {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  padding: 8px 14px;\n  border-radius: var(--radius-md);\n  background: var(--hover);\n  font-size: 14px;\n  font-weight: 500;\n  color: var(--muted-foreground);\n}\n.bfi__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--ack); }\n.bfi__dot--off { background: var(--fire); }\n\n.bfi__stats { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 28px; }\n.bfi__stat {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  gap: 24px;\n  min-height: 200px;\n  padding: 28px;\n  background: var(--sticky-paper);\n  color: var(--ink);\n}\n.bfi__value { font-size: 72px; font-weight: 500; line-height: 0.9; font-variant-numeric: tabular-nums; white-space: nowrap; }\n.bfi__label { max-width: 16ch; font-size: 18px; font-weight: 500; line-height: 1.3; }\n\n.bfi__lower { display: grid; grid-template-columns: minmax(0, 1.8fr) minmax(0, 1fr); gap: 28px; }\n.bfi__targets { display: flex; flex-direction: column; gap: 24px; }\n.bfi__target {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  gap: 10px;\n  padding: 22px;\n  background: var(--sticky-focus);\n  color: var(--ink);\n}\n.bfi__target-top { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }\n.bfi__eyebrow { font-size: 13px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }\n.bfi__customers { font-size: 24px; font-weight: 500; line-height: 1.1; }\n.bfi__revenue { font-size: 16px; font-weight: 500; }\n.bfi__progress { display: flex; flex-direction: column; gap: 6px; margin-top: auto; }\n.bfi__bar { height: 6px; background: rgba(30, 40, 36, 0.16); }\n.bfi__fill { height: 100%; background: var(--ink); }\n.bfi__progress-label { font-size: 12px; font-weight: 500; }\n.bfi__edit {\n  align-self: flex-end;\n  padding: 0;\n  border: none;\n  background: none;\n  color: var(--ink-soft);\n  font-size: 12px;\n  font-weight: 500;\n  text-decoration: underline;\n  cursor: pointer;\n}\n.bfi__field { display: flex; flex-direction: column; gap: 4px; font-size: 12px; font-weight: 500; }\n.bfi__input {\n  height: 32px;\n  padding: 0 8px;\n  border: 1px solid rgba(30, 40, 36, 0.3);\n  border-radius: var(--radius-md);\n  background: rgba(247, 247, 255, 0.4);\n  color: var(--ink);\n  font-size: 14px;\n}\n.bfi__input:focus { outline: 2px solid var(--ring-soft); outline-offset: 1px; }\n</style>\n","<template>\n  <div class=\"rc\">\n    <div class=\"rc__head\">\n      <span class=\"rc__title\">Omzet en target</span>\n      <div class=\"rc__legend\">\n        <span class=\"rc__key\"><span class=\"rc__swatch rc__swatch--revenue\" />Omzet</span>\n        <span class=\"rc__key\"><span class=\"rc__swatch rc__swatch--target\" />Target</span>\n      </div>\n    </div>\n    <div class=\"rc__body\">\n      <div class=\"rc__axis\">\n        <span v-for=\"label in axisLabels\" :key=\"label\">{{ label }}</span>\n      </div>\n      <div class=\"rc__plot-wrap\">\n        <div class=\"rc__plot\">\n          <svg viewBox=\"0 0 600 200\" preserveAspectRatio=\"none\" class=\"rc__svg\" role=\"img\" :aria-label=\"summary\">\n            <path :d=\"revenueArea\" class=\"rc__area\" />\n            <path :d=\"targetPath\" class=\"rc__line rc__line--target\" vector-effect=\"non-scaling-stroke\" />\n            <path :d=\"revenuePath\" class=\"rc__line rc__line--revenue\" vector-effect=\"non-scaling-stroke\" />\n          </svg>\n          <!-- A target with no neighbour draws no line; mark it, or it is not there at all. -->\n          <span v-for=\"dot in loneTargets\" :key=\"dot.month\" class=\"rc__dot\" :style=\"{ left: dot.left, top: dot.top }\" :title=\"dot.title\" />\n        </div>\n        <div class=\"rc__months\">\n          <span v-for=\"m in months\" :key=\"m.month\">{{ fmtMonth(m.month) }}</span>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { MonthFigures } from \"@mod-tech42_tools/js/mondays/types\";\nimport { fmtEuro, fmtEuroK, fmtMonth } from \"../../lib/mondays-format\";\n\nconst props = defineProps<{ months: MonthFigures[] }>();\n\nconst WIDTH = 600;\nconst HEIGHT = 200;\n\n/** Four equal steps on a multiple of €5k, and never less than the €20k the board started with. */\nconst top = computed(() => {\n  const highest = Math.max(0, ...props.months.flatMap(m => [m.amount ?? 0, m.target ?? 0]));\n  const step = Math.max(5000, Math.ceil(highest / 4 / 5000) * 5000);\n  return step * 4;\n});\nconst axisLabels = computed(() => [4, 3, 2, 1, 0].map(i => i ? fmtEuroK(top.value / 4 * i) : \"€0\"));\n\nconst x = (index: number) => props.months.length > 1 ? index / (props.months.length - 1) * WIDTH : 0;\nconst y = (value: number) => HEIGHT - value / top.value * HEIGHT;\n\n/** A line through the months that have a value; a month without one breaks it. */\nfunction path(values: Array<number | null>): string {\n  let d = \"\";\n  let drawing = false;\n  values.forEach((value, index) => {\n    if (value === null) {\n      drawing = false;\n      return;\n    }\n    d += `${drawing ? \"L\" : \"M\"}${x(index).toFixed(1)},${y(value).toFixed(1)} `;\n    drawing = true;\n  });\n  return d.trim();\n}\n\nconst revenue = computed(() => props.months.map(m => m.amount));\nconst revenuePath = computed(() => path(revenue.value));\nconst targetPath = computed(() => path(props.months.map(m => m.target)));\nconst revenueArea = computed(() => {\n  const last = revenue.value.findLastIndex(v => v !== null);\n  if (last < 0 || !revenuePath.value) return \"\";\n  return `${revenuePath.value} L${x(last).toFixed(1)},${HEIGHT} L0,${HEIGHT} Z`;\n});\n\nconst loneTargets = computed(() => props.months.flatMap((m, index) => {\n  const isolated = m.target !== null && props.months[index - 1]?.target == null && props.months[index + 1]?.target == null;\n  return isolated ? [{\n    month: m.month,\n    left: `${x(index) / WIDTH * 100}%`,\n    top: `${y(m.target!) / HEIGHT * 100}%`,\n    title: `Target ${fmtMonth(m.month)} ${fmtEuro(m.target!)}`,\n  }] : [];\n}));\n\nconst summary = computed(() => props.months\n  .filter(m => m.amount !== null)\n  .map(m => `${fmtMonth(m.month)} ${fmtEuro(m.amount!)}`)\n  .join(\", \"));\n</script>\n\n<style scoped>\n.rc {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  padding: 24px;\n  border: 1px solid var(--hairline-weak);\n  border-radius: var(--radius-xl);\n  background: var(--background);\n}\n.rc__head { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n.rc__title { font-size: 18px; font-weight: 500; }\n.rc__legend { display: flex; gap: 16px; font-size: 12px; color: var(--muted-foreground); }\n.rc__key { display: flex; align-items: center; gap: 6px; }\n.rc__swatch { width: 14px; height: 3px; }\n.rc__swatch--revenue { background: var(--primary); }\n.rc__swatch--target { background: var(--t42-green-200); }\n.rc__body { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 12px; }\n.rc__axis {\n  display: flex;\n  flex-direction: column;\n  justify-content: space-between;\n  height: 220px;\n  margin: -7px 0;\n  font-size: 12px;\n  color: var(--weak);\n  text-align: right;\n}\n.rc__plot-wrap { display: flex; flex-direction: column; gap: 8px; }\n.rc__plot {\n  position: relative;\n  height: 220px;\n  border-bottom: 1px solid var(--border);\n  background-image: linear-gradient(rgba(247, 247, 255, 0.07) 1px, transparent 1px);\n  background-size: 100% 25%;\n}\n.rc__svg { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }\n.rc__area { fill: rgba(255, 119, 0, 0.14); stroke: none; }\n.rc__line { fill: none; }\n.rc__line--revenue { stroke: var(--primary); stroke-width: 2.5; }\n.rc__line--target { stroke: var(--t42-green-200); stroke-width: 2; }\n.rc__dot {\n  position: absolute;\n  width: 8px;\n  height: 8px;\n  background: var(--t42-green-200);\n  transform: translate(-50%, -50%);\n}\n.rc__months { display: flex; justify-content: space-between; font-size: 12px; color: var(--weak); }\n</style>\n","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"rc\" }\nconst _hoisted_2 = { class: \"rc__body\" }\nconst _hoisted_3 = { class: \"rc__axis\" }\nconst _hoisted_4 = { class: \"rc__plot-wrap\" }\nconst _hoisted_5 = { class: \"rc__plot\" }\nconst _hoisted_6 = [\"aria-label\"]\nconst _hoisted_7 = [\"d\"]\nconst _hoisted_8 = [\"d\"]\nconst _hoisted_9 = [\"d\"]\nconst _hoisted_10 = [\"title\"]\nconst _hoisted_11 = { class: \"rc__months\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _cache[0] || (_cache[0] = _createStaticVNode(\"<div class=\\\"rc__head\\\" data-v-d6242555><span class=\\\"rc__title\\\" data-v-d6242555>Omzet en target</span><div class=\\\"rc__legend\\\" data-v-d6242555><span class=\\\"rc__key\\\" data-v-d6242555><span class=\\\"rc__swatch rc__swatch--revenue\\\" data-v-d6242555></span>Omzet</span><span class=\\\"rc__key\\\" data-v-d6242555><span class=\\\"rc__swatch rc__swatch--target\\\" data-v-d6242555></span>Target</span></div></div>\", 1)),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.axisLabels, (label) => {\n          return (_openBlock(), _createElementBlock(\"span\", { key: label }, _toDisplayString(label), 1 /* TEXT */))\n        }), 128 /* KEYED_FRAGMENT */))\n      ]),\n      _createElementVNode(\"div\", _hoisted_4, [\n        _createElementVNode(\"div\", _hoisted_5, [\n          (_openBlock(), _createElementBlock(\"svg\", {\n            viewBox: \"0 0 600 200\",\n            preserveAspectRatio: \"none\",\n            class: \"rc__svg\",\n            role: \"img\",\n            \"aria-label\": $setup.summary\n          }, [\n            _createElementVNode(\"path\", {\n              d: $setup.revenueArea,\n              class: \"rc__area\"\n            }, null, 8 /* PROPS */, _hoisted_7),\n            _createElementVNode(\"path\", {\n              d: $setup.targetPath,\n              class: \"rc__line rc__line--target\",\n              \"vector-effect\": \"non-scaling-stroke\"\n            }, null, 8 /* PROPS */, _hoisted_8),\n            _createElementVNode(\"path\", {\n              d: $setup.revenuePath,\n              class: \"rc__line rc__line--revenue\",\n              \"vector-effect\": \"non-scaling-stroke\"\n            }, null, 8 /* PROPS */, _hoisted_9)\n          ], 8 /* PROPS */, _hoisted_6)),\n          _createCommentVNode(\" A target with no neighbour draws no line; mark it, or it is not there at all. \"),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.loneTargets, (dot) => {\n            return (_openBlock(), _createElementBlock(\"span\", {\n              key: dot.month,\n              class: \"rc__dot\",\n              style: _normalizeStyle({ left: dot.left, top: dot.top }),\n              title: dot.title\n            }, null, 12 /* STYLE, PROPS */, _hoisted_10))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]),\n        _createElementVNode(\"div\", _hoisted_11, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.months, (m) => {\n            return (_openBlock(), _createElementBlock(\"span\", {\n              key: m.month\n            }, _toDisplayString($setup.fmtMonth(m.month)), 1 /* TEXT */))\n          }), 128 /* KEYED_FRAGMENT */))\n        ])\n      ])\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/RevenueChart.vue\";script.__scopeId = \"data-v-d6242555\";export default script;","import { createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"bfi__head\" }\nconst _hoisted_2 = { class: \"bfi__sync\" }\nconst _hoisted_3 = { class: \"bfi__veil\" }\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = { class: \"bfi__stats\" }\nconst _hoisted_6 = { class: \"bfi__value\" }\nconst _hoisted_7 = { class: \"bfi__label\" }\nconst _hoisted_8 = { class: \"bfi__lower\" }\nconst _hoisted_9 = { class: \"bfi__targets\" }\nconst _hoisted_10 = { class: \"bfi__field\" }\nconst _hoisted_11 = [\"value\", \"onInput\"]\nconst _hoisted_12 = { class: \"bfi__field\" }\nconst _hoisted_13 = [\"value\", \"onInput\"]\nconst _hoisted_14 = { class: \"bfi__field\" }\nconst _hoisted_15 = [\"value\", \"onInput\"]\nconst _hoisted_16 = { class: \"bfi__target-top\" }\nconst _hoisted_17 = { class: \"bfi__eyebrow\" }\nconst _hoisted_18 = [\"aria-label\", \"onClick\"]\nconst _hoisted_19 = { class: \"bfi__customers\" }\nconst _hoisted_20 = { class: \"bfi__revenue\" }\nconst _hoisted_21 = { class: \"bfi__progress\" }\nconst _hoisted_22 = { class: \"bfi__bar\" }\nconst _hoisted_23 = { class: \"bfi__progress-label\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"div\", _hoisted_1, [\n      _cache[1] || (_cache[1] = _createElementVNode(\"h2\", { class: \"board-title\" }, \"Financiële cijfers\", -1 /* CACHED */)),\n      _createElementVNode(\"div\", _hoisted_2, [\n        _createElementVNode(\"span\", _hoisted_3, [\n          _createElementVNode(\"span\", {\n            class: _normalizeClass([\"bfi__dot\", { 'bfi__dot--off': !$setup.finance }])\n          }, null, 2 /* CLASS */),\n          _createTextVNode(\" \" + _toDisplayString($setup.syncLabel), 1 /* TEXT */)\n        ]),\n        (!$setup.finished)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 0,\n              type: \"button\",\n              class: \"btn\",\n              disabled: $setup.refreshing,\n              onClick: $setup.refresh\n            }, _toDisplayString($setup.refreshing ? \"Bijwerken…\" : \"Vernieuwen\"), 9 /* TEXT, PROPS */, _hoisted_4))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _createElementVNode(\"div\", _hoisted_5, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.stats, (stat, index) => {\n        return (_openBlock(), _createElementBlock(\"div\", {\n          key: stat.label,\n          class: \"bfi__stat\",\n          style: _normalizeStyle({ transform: `rotate(${$setup.tilt([0, 1, 3][index])})` })\n        }, [\n          _createElementVNode(\"span\", _hoisted_6, _toDisplayString(stat.value), 1 /* TEXT */),\n          _createElementVNode(\"span\", _hoisted_7, _toDisplayString(stat.label), 1 /* TEXT */)\n        ], 4 /* STYLE */))\n      }), 128 /* KEYED_FRAGMENT */))\n    ]),\n    _createElementVNode(\"div\", _hoisted_8, [\n      _createVNode($setup[\"RevenueChart\"], {\n        months: $setup.finance?.months ?? []\n      }, null, 8 /* PROPS */, [\"months\"]),\n      _createElementVNode(\"div\", _hoisted_9, [\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.targets, (target, index) => {\n          return (_openBlock(), _createElementBlock(\"div\", {\n            key: index,\n            class: \"bfi__target\",\n            style: _normalizeStyle({ transform: `rotate(${$setup.tilt(index + 4)})` })\n          }, [\n            ($setup.editing === index)\n              ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                  _createElementVNode(\"label\", _hoisted_10, [\n                    _cache[2] || (_cache[2] = _createTextVNode(\"Jaar \", -1 /* CACHED */)),\n                    _createElementVNode(\"input\", {\n                      value: target.year,\n                      type: \"number\",\n                      class: \"bfi__input\",\n                      min: \"2000\",\n                      max: \"2100\",\n                      onInput: $event => ($setup.setNumber(target, 'year', $event))\n                    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_11)\n                  ]),\n                  _createElementVNode(\"label\", _hoisted_12, [\n                    _cache[3] || (_cache[3] = _createTextVNode(\"Betalende klanten \", -1 /* CACHED */)),\n                    _createElementVNode(\"input\", {\n                      value: target.customers,\n                      type: \"number\",\n                      class: \"bfi__input\",\n                      min: \"0\",\n                      onInput: $event => ($setup.setNumber(target, 'customers', $event))\n                    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_13)\n                  ]),\n                  _createElementVNode(\"label\", _hoisted_14, [\n                    _cache[4] || (_cache[4] = _createTextVNode(\"Omzet per maand (€) \", -1 /* CACHED */)),\n                    _createElementVNode(\"input\", {\n                      value: target.monthlyRevenue,\n                      type: \"number\",\n                      class: \"bfi__input\",\n                      min: \"0\",\n                      step: \"1000\",\n                      onInput: $event => ($setup.setNumber(target, 'monthlyRevenue', $event))\n                    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_15)\n                  ]),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"bfi__edit\",\n                    onClick: _cache[0] || (_cache[0] = $event => ($setup.editing = null))\n                  }, \"Klaar\")\n                ], 64 /* STABLE_FRAGMENT */))\n              : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                  _createElementVNode(\"div\", _hoisted_16, [\n                    _createElementVNode(\"span\", _hoisted_17, \"Target eind \" + _toDisplayString(target.year), 1 /* TEXT */),\n                    _createElementVNode(\"button\", {\n                      type: \"button\",\n                      class: \"bfi__edit\",\n                      \"aria-label\": `Target eind ${target.year} wijzigen`,\n                      onClick: $event => ($setup.editing = index)\n                    }, \"Wijzig\", 8 /* PROPS */, _hoisted_18)\n                  ]),\n                  _createElementVNode(\"span\", _hoisted_19, _toDisplayString(target.customers) + \" betalende klanten\", 1 /* TEXT */),\n                  _createElementVNode(\"span\", _hoisted_20, _toDisplayString($setup.fmtEuroK(target.monthlyRevenue)) + \" per maand\", 1 /* TEXT */),\n                  _createElementVNode(\"div\", _hoisted_21, [\n                    _createElementVNode(\"div\", _hoisted_22, [\n                      _createElementVNode(\"div\", {\n                        class: \"bfi__fill\",\n                        style: _normalizeStyle({ width: $setup.barWidth(target.monthlyRevenue) })\n                      }, null, 4 /* STYLE */)\n                    ]),\n                    _createElementVNode(\"span\", _hoisted_23, \"Omzet \" + _toDisplayString($setup.monthLabel) + \" \" + _toDisplayString($setup.fmtEuro($setup.currentRevenue)) + \" · \" + _toDisplayString($setup.percentOf($setup.currentRevenue, target.monthlyRevenue)) + \" van doel\", 1 /* TEXT */)\n                  ])\n                ], 64 /* STABLE_FRAGMENT */))\n          ], 4 /* STYLE */))\n        }), 128 /* KEYED_FRAGMENT */))\n      ])\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFinance.vue\";script.__scopeId = \"data-v-7ffddbb5\";export default script;","<template>\n  <div class=\"bfo__head\">\n    <h2 class=\"board-title\">Focus areas voor deze week</h2>\n    <span class=\"board-sub\">Minstens drie. Voeg er gerust meer toe.</span>\n  </div>\n  <div class=\"bfo__grid\">\n    <div v-for=\"(area, index) in focus\" :key=\"index\" class=\"bfo__card\" :style=\"{ transform: `rotate(${tilt(index + 1)})` }\">\n      <div class=\"bfo__top\">\n        <span class=\"bfo__nr\">{{ index + 1 }}</span>\n        <button\n          v-if=\"focus.length > minCount\"\n          type=\"button\"\n          class=\"bfo__remove\"\n          :aria-label=\"`Focus ${index + 1} verwijderen`\"\n          @click=\"store.deleteFocusArea(index)\"\n        >×</button>\n      </div>\n      <textarea\n        :value=\"editText(area)\"\n        class=\"bfo__body\"\n        placeholder=\"Beschrijf de prioriteit en hoe succes eruitziet\"\n        :aria-label=\"`Focus ${index + 1}`\"\n        @input=\"setText(area, ($event.target as HTMLTextAreaElement).value)\"\n      />\n      <!-- The ghost: last week's focus, so a change of focus reads as a change. -->\n      <div v-if=\"changedFrom(index)\" class=\"bfo__ghost\">\n        <span class=\"bfo__ghost-label\">Vorige week</span>\n        <span class=\"bfo__ghost-text\">{{ changedFrom(index) }}</span>\n      </div>\n    </div>\n\n    <button type=\"button\" class=\"bfo__add\" :disabled=\"focus.length >= maxCount\" @click=\"addFocus\">\n      <span class=\"bfo__add-plus\" aria-hidden=\"true\">+</span>\n      <span class=\"bfo__add-text\">Focus toevoegen</span>\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { FOCUS_COUNT, type FocusArea } from \"@mod-tech42_tools/js/mondays/types\";\nimport { MAX_FOCUS, focusText } from \"@mod-tech42_tools/js/mondays/rules\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { tilt } from \"../../lib/mondays-format\";\n\nconst store = useMeetingStore();\nconst minCount = FOCUS_COUNT;\nconst maxCount = MAX_FOCUS;\n\nconst focus = computed(() => store.meeting.value!.focus);\n\nfunction addFocus() {\n  if (focus.value.length >= maxCount) return;\n  focus.value.push({ title: \"\", body: \"\" } satisfies FocusArea);\n}\n\n/** What the field shows. Untrimmed while typing, or a space at the end would vanish\n * on every keystroke; only an old subject is folded in front. */\nfunction editText(area: FocusArea): string {\n  return area.title.trim() ? focusText(area) : area.body;\n}\n\n/** One text now: an old subject is folded into the description on the first edit. */\nfunction setText(area: FocusArea, text: string) {\n  area.title = \"\";\n  area.body = text;\n}\n\n/** Last week's focus, but only once this week's says something else. */\nfunction changedFrom(index: number): string {\n  const before = store.meeting.value!.previousFocus[index];\n  const text = before ? focusText(before) : \"\";\n  return !text || text === focusText(focus.value[index]) ? \"\" : text;\n}\n</script>\n\n<style scoped>\n.bfo__head { display: flex; flex-direction: column; gap: 12px; }\n.bfo__grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); align-items: start; gap: 32px; }\n.bfo__card {\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n  min-height: 400px;\n  padding: 28px;\n  background: var(--sticky-focus);\n  color: var(--ink);\n}\n.bfo__top { display: flex; align-items: flex-start; justify-content: space-between; }\n.bfo__nr { font-size: 120px; font-weight: 500; line-height: 0.8; }\n.bfo__remove {\n  padding: 0 4px;\n  border: none;\n  background: transparent;\n  color: var(--ink-soft);\n  font-size: 20px;\n  line-height: 1;\n  cursor: pointer;\n}\n.bfo__body {\n  flex: 1;\n  min-height: 160px;\n  margin-top: 12px;\n  /* Grows with its text instead of hiding the last lines behind a scrollbar. */\n  field-sizing: content;\n  padding: 0;\n  border: none;\n  background: transparent;\n  color: var(--ink);\n  font-family: inherit;\n  font-size: 20px;\n  line-height: 1.4;\n  resize: none;\n  outline: none;\n}\n.bfo__body::placeholder { color: currentColor; opacity: 0.5; }\n.bfo__ghost {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  padding-top: 12px;\n  border-top: 1px dashed rgba(30, 40, 36, 0.3);\n  color: var(--ink-soft);\n}\n.bfo__ghost-label { font-size: 12px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }\n.bfo__ghost-text { font-size: 14px; text-decoration: line-through; white-space: pre-line; }\n.bfo__add {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  min-height: 400px;\n  border: 1px dashed var(--hairline-strong);\n  border-radius: var(--radius-md);\n  background: transparent;\n  color: var(--muted-foreground);\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease);\n}\n.bfo__add:hover:not(:disabled) { background: var(--field); }\n.bfo__add:disabled { cursor: default; opacity: 0.5; }\n.bfo__add-plus { font-size: 56px; font-weight: 400; line-height: 0.8; }\n.bfo__add-text { font-size: 15px; font-weight: 500; }\n</style>\n","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"bfo__grid\" }\nconst _hoisted_2 = { class: \"bfo__top\" }\nconst _hoisted_3 = { class: \"bfo__nr\" }\nconst _hoisted_4 = [\"aria-label\", \"onClick\"]\nconst _hoisted_5 = [\"value\", \"aria-label\", \"onInput\"]\nconst _hoisted_6 = {\n  key: 0,\n  class: \"bfo__ghost\"\n}\nconst _hoisted_7 = { class: \"bfo__ghost-text\" }\nconst _hoisted_8 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _cache[2] || (_cache[2] = _createElementVNode(\"div\", { class: \"bfo__head\" }, [\n      _createElementVNode(\"h2\", { class: \"board-title\" }, \"Focus areas voor deze week\"),\n      _createElementVNode(\"span\", { class: \"board-sub\" }, \"Minstens drie. Voeg er gerust meer toe.\")\n    ], -1 /* CACHED */)),\n    _createElementVNode(\"div\", _hoisted_1, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.focus, (area, index) => {\n        return (_openBlock(), _createElementBlock(\"div\", {\n          key: index,\n          class: \"bfo__card\",\n          style: _normalizeStyle({ transform: `rotate(${$setup.tilt(index + 1)})` })\n        }, [\n          _createElementVNode(\"div\", _hoisted_2, [\n            _createElementVNode(\"span\", _hoisted_3, _toDisplayString(index + 1), 1 /* TEXT */),\n            ($setup.focus.length > $setup.minCount)\n              ? (_openBlock(), _createElementBlock(\"button\", {\n                  key: 0,\n                  type: \"button\",\n                  class: \"bfo__remove\",\n                  \"aria-label\": `Focus ${index + 1} verwijderen`,\n                  onClick: $event => ($setup.store.deleteFocusArea(index))\n                }, \"×\", 8 /* PROPS */, _hoisted_4))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"textarea\", {\n            value: $setup.editText(area),\n            class: \"bfo__body\",\n            placeholder: \"Beschrijf de prioriteit en hoe succes eruitziet\",\n            \"aria-label\": `Focus ${index + 1}`,\n            onInput: $event => ($setup.setText(area, ($event.target as HTMLTextAreaElement).value))\n          }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_5),\n          _createCommentVNode(\" The ghost: last week's focus, so a change of focus reads as a change. \"),\n          ($setup.changedFrom(index))\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n                _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"bfo__ghost-label\" }, \"Vorige week\", -1 /* CACHED */)),\n                _createElementVNode(\"span\", _hoisted_7, _toDisplayString($setup.changedFrom(index)), 1 /* TEXT */)\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 4 /* STYLE */))\n      }), 128 /* KEYED_FRAGMENT */)),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"bfo__add\",\n        disabled: $setup.focus.length >= $setup.maxCount,\n        onClick: $setup.addFocus\n      }, _cache[1] || (_cache[1] = [\n        _createElementVNode(\"span\", {\n          class: \"bfo__add-plus\",\n          \"aria-hidden\": \"true\"\n        }, \"+\", -1 /* CACHED */),\n        _createElementVNode(\"span\", { class: \"bfo__add-text\" }, \"Focus toevoegen\", -1 /* CACHED */)\n      ]), 8 /* PROPS */, _hoisted_8)\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFocus.vue\";script.__scopeId = \"data-v-77259a28\";export default script;","<template>\n  <aside class=\"ns\" aria-label=\"Notities\">\n    <span class=\"ns__label\">Notities</span>\n    <NoteSticky v-for=\"(note, index) in notes\" :key=\"note.id\" :note=\"note\" :rotation=\"tilt(index + offset)\" />\n    <NewSticky place=\"strip\" @pick=\"add\" />\n  </aside>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { BLOCKS, type Block } from \"@mod-tech42_tools/js/mondays/types\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { tilt } from \"../../lib/mondays-format\";\nimport NewSticky from \"./NewSticky.vue\";\nimport NoteSticky from \"./NoteSticky.vue\";\n\nconst props = defineProps<{ block: Block }>();\nconst store = useMeetingStore();\n\nconst notes = computed(() => store.meeting.value?.notes.filter(n => n.block === props.block) ?? []);\n// Each board starts the tilt cycle elsewhere, so the strips do not repeat each other.\nconst offset = computed(() => [1, 3, 0, 2, 4][BLOCKS.indexOf(props.block)]);\n\nasync function add(authorId: number) {\n  await store.addNote(props.block, authorId);\n}\n</script>\n\n<style scoped>\n.ns {\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n  padding-left: 32px;\n  border-left: 1px dashed var(--border);\n}\n.ns__label {\n  font-size: 12px;\n  font-weight: 500;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--weak);\n}\n</style>\n","<template>\n  <button v-if=\"!picking\" type=\"button\" class=\"nsk__add\" :class=\"`nsk__add--${place}`\" @click=\"picking = true\">+ Sticky</button>\n  <div v-else class=\"nsk__pick\" :class=\"`nsk__pick--${place}`\" role=\"group\" aria-label=\"Sticky van\">\n    <span class=\"nsk__label\">Sticky van</span>\n    <button v-for=\"person in store.people.value\" :key=\"person.id\" type=\"button\" class=\"nsk__person\" @click=\"pick(person.id)\">\n      {{ person.short }}\n    </button>\n    <button type=\"button\" class=\"nsk__cancel\" aria-label=\"Geen sticky\" @click=\"picking = false\">×</button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\n\ndefineProps<{ place: \"dock\" | \"strip\" }>();\nconst emit = defineEmits<{ pick: [authorId: number] }>();\nconst store = useMeetingStore();\nconst picking = ref(false);\n\nfunction pick(authorId: number) {\n  picking.value = false;\n  emit(\"pick\", authorId);\n}\n</script>\n\n<style scoped>\n.nsk__add {\n  border-radius: var(--radius-md);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n}\n.nsk__add--dock {\n  flex-shrink: 0;\n  height: 40px;\n  padding: 0 14px;\n  border: none;\n  background: var(--sticky-note);\n  color: var(--ink);\n}\n.nsk__add--dock:active { opacity: 0.86; }\n.nsk__add--strip {\n  height: 56px;\n  border: 1px dashed var(--hairline-strong);\n  background: transparent;\n  color: var(--muted-foreground);\n  transition: background-color var(--dur-base) var(--ease);\n}\n.nsk__add--strip:hover { background: var(--field); }\n\n.nsk__pick { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }\n.nsk__pick--dock { flex-wrap: nowrap; }\n.nsk__pick--strip {\n  padding: 8px;\n  border: 1px dashed var(--hairline-strong);\n  border-radius: var(--radius-md);\n}\n.nsk__label { padding: 0 4px; font-size: 12px; color: var(--weak); }\n.nsk__person {\n  height: 32px;\n  padding: 0 10px;\n  border: none;\n  border-radius: var(--radius-md);\n  background: var(--sticky-note);\n  color: var(--ink);\n  font-size: 13px;\n  font-weight: 500;\n  cursor: pointer;\n}\n.nsk__person:hover { opacity: 0.86; }\n.nsk__cancel {\n  padding: 0 6px;\n  border: none;\n  background: transparent;\n  color: var(--muted-foreground);\n  font-size: 16px;\n  cursor: pointer;\n}\n</style>\n","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = [\"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (!$setup.picking)\n    ? (_openBlock(), _createElementBlock(\"button\", {\n        key: 0,\n        type: \"button\",\n        class: _normalizeClass([\"nsk__add\", `nsk__add--${$props.place}`]),\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.picking = true))\n      }, \"+ Sticky\", 2 /* CLASS */))\n    : (_openBlock(), _createElementBlock(\"div\", {\n        key: 1,\n        class: _normalizeClass([\"nsk__pick\", `nsk__pick--${$props.place}`]),\n        role: \"group\",\n        \"aria-label\": \"Sticky van\"\n      }, [\n        _cache[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"nsk__label\" }, \"Sticky van\", -1 /* CACHED */)),\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.store.people.value, (person) => {\n          return (_openBlock(), _createElementBlock(\"button\", {\n            key: person.id,\n            type: \"button\",\n            class: \"nsk__person\",\n            onClick: $event => ($setup.pick(person.id))\n          }, _toDisplayString(person.short), 9 /* TEXT, PROPS */, _hoisted_1))\n        }), 128 /* KEYED_FRAGMENT */)),\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"nsk__cancel\",\n          \"aria-label\": \"Geen sticky\",\n          onClick: _cache[1] || (_cache[1] = $event => ($setup.picking = false))\n        }, \"×\")\n      ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NewSticky.vue\";script.__scopeId = \"data-v-3d15b50f\";export default script;","<template>\n  <div class=\"note\" :style=\"{ transform: `rotate(${rotation})` }\" :data-note=\"note.id\">\n    <textarea\n      ref=\"field\"\n      v-model=\"note.text\"\n      class=\"note__text\"\n      placeholder=\"Typ een notitie…\"\n      aria-label=\"Notitie\"\n      @input=\"save\"\n      @blur=\"save.flush()\"\n    />\n    <div class=\"note__foot\">\n      <span>{{ author }} · {{ fmtClock(note.createdAt) }}</span>\n      <button type=\"button\" class=\"note__remove\" aria-label=\"Notitie verwijderen\" @click=\"store.deleteNote(note.id)\">×</button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref } from \"vue\";\nimport type { Note } from \"@mod-tech42_tools/js/mondays/types\";\nimport { debounced, useMeetingStore } from \"../../lib/meeting-store\";\nimport { fmtClock } from \"../../lib/mondays-format\";\n\nconst props = defineProps<{ note: Note; rotation: string }>();\nconst store = useMeetingStore();\nconst field = ref<HTMLTextAreaElement | null>(null);\n\nconst author = computed(() => store.personById(props.note.authorId)?.short ?? \"Iemand\");\nconst save = debounced(() => void store.updateNote(props.note), 500);\n\n// A sticky that was just added is empty: put the cursor in it.\nonMounted(() => {\n  if (!props.note.text && Date.now() - new Date(props.note.createdAt).getTime() < 10_000)\n    field.value?.focus({ preventScroll: true });\n});\nonBeforeUnmount(() => save.flush());\n</script>\n\n<style scoped>\n.note {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  min-height: 180px;\n  padding: 18px;\n  background: var(--sticky-note);\n  color: var(--ink);\n}\n.note__text {\n  flex: 1;\n  min-height: 110px;\n  /* Grows with its text instead of hiding the last lines behind a scrollbar. */\n  field-sizing: content;\n  padding: 0;\n  border: none;\n  background: transparent;\n  color: var(--ink);\n  font-family: inherit;\n  font-size: 16px;\n  line-height: 1.4;\n  resize: none;\n  outline: none;\n}\n.note__text::placeholder { color: currentColor; opacity: 0.5; }\n.note__foot {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  font-size: 12px;\n  color: var(--ink-soft);\n}\n.note__remove {\n  padding: 0;\n  border: none;\n  background: transparent;\n  color: var(--ink-soft);\n  font-size: 16px;\n  cursor: pointer;\n}\n</style>\n","import { vModelText as _vModelText, createElementVNode as _createElementVNode, withDirectives as _withDirectives, toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"data-note\"]\nconst _hoisted_2 = { class: \"note__foot\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: \"note\",\n    style: _normalizeStyle({ transform: `rotate(${$props.rotation})` }),\n    \"data-note\": $props.note.id\n  }, [\n    _withDirectives(_createElementVNode(\"textarea\", {\n      ref: \"field\",\n      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($props.note.text) = $event)),\n      class: \"note__text\",\n      placeholder: \"Typ een notitie…\",\n      \"aria-label\": \"Notitie\",\n      onInput: _cache[1] || (_cache[1] = (...args) => ($setup.save && $setup.save(...args))),\n      onBlur: _cache[2] || (_cache[2] = $event => ($setup.save.flush()))\n    }, null, 544 /* NEED_HYDRATION, NEED_PATCH */), [\n      [_vModelText, $props.note.text]\n    ]),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"span\", null, _toDisplayString($setup.author) + \" · \" + _toDisplayString($setup.fmtClock($props.note.createdAt)), 1 /* TEXT */),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"note__remove\",\n        \"aria-label\": \"Notitie verwijderen\",\n        onClick: _cache[3] || (_cache[3] = $event => ($setup.store.deleteNote($props.note.id)))\n      }, \"×\")\n    ])\n  ], 12 /* STYLE, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NoteSticky.vue\";script.__scopeId = \"data-v-dbdf6715\";export default script;","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"ns\",\n  \"aria-label\": \"Notities\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"aside\", _hoisted_1, [\n    _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"ns__label\" }, \"Notities\", -1 /* CACHED */)),\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.notes, (note, index) => {\n      return (_openBlock(), _createBlock($setup[\"NoteSticky\"], {\n        key: note.id,\n        note: note,\n        rotation: $setup.tilt(index + $setup.offset)\n      }, null, 8 /* PROPS */, [\"note\", \"rotation\"]))\n    }), 128 /* KEYED_FRAGMENT */)),\n    _createVNode($setup[\"NewSticky\"], {\n      place: \"strip\",\n      onPick: $setup.add\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/NotesStrip.vue\";script.__scopeId = \"data-v-50d1478d\";export default script;","<template>\n  <section\n    class=\"bf\"\n    :class=\"{ 'bf--dim': dimmed, 'bf--pick': pickable, 'bf--updates': block === 'updates' }\"\n    :style=\"{ width: `${width}px` }\"\n    :aria-label=\"label\"\n    @click=\"pickable && emit('pick')\"\n  >\n    <span class=\"bf__tab\" :style=\"{ background: color, color: textColor }\">{{ label }}</span>\n    <div class=\"bf__frame\" :inert=\"pickable || undefined\">\n      <div class=\"bf__content\">\n        <slot />\n      </div>\n      <NotesStrip :block=\"block\" />\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Block } from \"@mod-tech42_tools/js/mondays/types\";\nimport NotesStrip from \"./NotesStrip.vue\";\n\ndefineProps<{\n  block: Block;\n  label: string;\n  color: string;\n  textColor: string;\n  width: number;\n  /** Not the board in view: shown at 40%. */\n  dimmed: boolean;\n  /** A click jumps here instead of reaching the controls (a neighbour, or any board in Overzicht). */\n  pickable: boolean;\n}>();\nconst emit = defineEmits<{ pick: [] }>();\n</script>\n\n<style scoped>\n.bf {\n  display: flex;\n  flex: none;\n  flex-direction: column;\n  gap: 12px;\n  transition: opacity var(--dur-frame) var(--ease);\n}\n.bf--dim { opacity: 0.4; }\n/* The frame goes `inert` while pickable: its controls leave the tab order and a\n   click passes through to the section, which then jumps to the board. */\n.bf--pick { cursor: pointer; }\n.bf__tab {\n  align-self: flex-start;\n  padding: 6px 14px;\n  border-radius: var(--radius-md);\n  font-size: 20px;\n  font-weight: 500;\n}\n.bf__frame {\n  display: grid;\n  grid-template-columns: minmax(0, 1fr) 280px;\n  gap: 56px;\n  min-height: 780px;\n  padding: 56px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--card);\n}\n.bf__content {\n  display: flex;\n  flex-direction: column;\n  gap: 40px;\n  min-width: 0;\n}\n@media (max-width: 760px) {\n  .bf--updates .bf__frame { grid-template-columns: minmax(0, 1fr); gap: 32px; padding: 20px; }\n  .bf--updates .bf__content { gap: 24px; }\n}\n</style>\n","import { toDisplayString as _toDisplayString, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, renderSlot as _renderSlot, createVNode as _createVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\nconst _hoisted_2 = [\"inert\"]\nconst _hoisted_3 = { class: \"bf__content\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", {\n    class: _normalizeClass([\"bf\", { 'bf--dim': $props.dimmed, 'bf--pick': $props.pickable, 'bf--updates': $props.block === 'updates' }]),\n    style: _normalizeStyle({ width: `${$props.width}px` }),\n    \"aria-label\": $props.label,\n    onClick: _cache[0] || (_cache[0] = $event => ($props.pickable && $setup.emit('pick')))\n  }, [\n    _createElementVNode(\"span\", {\n      class: \"bf__tab\",\n      style: _normalizeStyle({ background: $props.color, color: $props.textColor })\n    }, _toDisplayString($props.label), 5 /* TEXT, STYLE */),\n    _createElementVNode(\"div\", {\n      class: \"bf__frame\",\n      inert: $props.pickable || undefined\n    }, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n      ]),\n      _createVNode($setup[\"NotesStrip\"], { block: $props.block }, null, 8 /* PROPS */, [\"block\"])\n    ], 8 /* PROPS */, _hoisted_2)\n  ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardFrame.vue\";script.__scopeId = \"data-v-4b0d4937\";export default script;","<template>\n  <div class=\"bp__head\">\n    <div class=\"bp__titles\">\n      <h2 class=\"board-title\">Hoe gaat het met iedereen?</h2>\n      <span class=\"board-sub\">Ieder een score van 1 tot 5, per onderwerp.</span>\n    </div>\n    <div class=\"bp__board\">\n      <div v-for=\"tile in scoreboard\" :key=\"tile.key\" class=\"bp__tile\">\n        <span class=\"bp__tile-label\">{{ tile.label }}</span>\n        <span class=\"bp__tile-value\">{{ fmtAverage(tile.average) }}</span>\n        <div class=\"bp__segs\">\n          <span v-for=\"n in 5\" :key=\"n\" class=\"bp__seg\" :class=\"{ 'bp__seg--on': tile.average !== null && n <= Math.round(tile.average) }\" />\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"bp__people\">\n    <div v-for=\"(person, index) in presentPeople\" :key=\"person.id\" class=\"bp__card\" :style=\"{ transform: `rotate(${tilt(index)})` }\">\n      <div class=\"bp__who\">\n        <PersonAvatar :name=\"person.name\" size=\"l\" />\n        <div class=\"bp__names\">\n          <span class=\"bp__name\">{{ person.name }}</span>\n          <span class=\"bp__state\">{{ stateOf(person.id) }}</span>\n        </div>\n      </div>\n      <div v-for=\"cat in CATEGORIES\" :key=\"cat.key\" class=\"bp__cat\" role=\"radiogroup\" :aria-label=\"`${cat.label} van ${person.short}`\">\n        <span class=\"bp__cat-label\">{{ cat.label }}</span>\n        <div class=\"bp__opts\">\n          <button\n            v-for=\"n in 5\"\n            :key=\"n\"\n            type=\"button\"\n            class=\"bp__opt\"\n            :class=\"{ 'bp__opt--on': (scoreOf(person.id, cat.key) ?? 0) >= n }\"\n            role=\"radio\"\n            :aria-checked=\"scoreOf(person.id, cat.key) === n\"\n            @click=\"pick(person.id, cat.key, n)\"\n          >\n            {{ n }}\n          </button>\n        </div>\n        <!-- The ghost: last week's score, so this week reads against it. -->\n        <span v-if=\"prevScoreOf(person.id, cat.key) !== null\" class=\"bp__ghost\">Vorige week: {{ prevScoreOf(person.id, cat.key) }}</span>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { emptyScores } from \"@mod-tech42_tools/js/mondays/rules\";\nimport { SCORE_KEYS, type ScoreKey } from \"@mod-tech42_tools/js/mondays/types\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { fmtAverage, tilt } from \"../../lib/mondays-format\";\nimport PersonAvatar from \"./PersonAvatar.vue\";\n\nconst LABELS: Record<ScoreKey, string> = { financial: \"Financieel\", development: \"Ontwikkeling\", fun: \"Plezier\" };\nconst CATEGORIES = SCORE_KEYS.map(key => ({ key, label: LABELS[key] }));\n\nconst store = useMeetingStore();\nconst scores = computed(() => store.meeting.value!.scores);\nconst previousScores = computed(() => store.meeting.value!.previousScores);\n\n// Only the people who were at the table get a card. An old meeting from before\n// attendance existed has an empty list, which reads as \"everyone\" (Wouter, TEC-210).\nconst presentPeople = computed(() => {\n  const present = store.meeting.value!.present;\n  return present.length ? store.people.value.filter(p => present.includes(p.id)) : store.people.value;\n});\n\nconst scoreOf = (personId: number, key: ScoreKey) => scores.value[personId]?.[key] ?? null;\nconst prevScoreOf = (personId: number, key: ScoreKey) => previousScores.value[personId]?.[key] ?? null;\n\nconst scoreboard = computed(() => CATEGORIES.map(cat => {\n  const given = presentPeople.value.map(p => scoreOf(p.id, cat.key)).filter((s): s is number => s !== null);\n  return { ...cat, average: given.length ? given.reduce((a, b) => a + b, 0) / given.length : null };\n}));\n\nfunction stateOf(personId: number): string {\n  const filled = SCORE_KEYS.filter(key => scoreOf(personId, key) !== null).length;\n  if (filled === SCORE_KEYS.length) return \"Ingevuld\";\n  return filled ? `${filled} van ${SCORE_KEYS.length} ingevuld` : \"Nog niet ingevuld\";\n}\n\n/** Clicking the chosen score again clears it. */\nfunction pick(personId: number, key: ScoreKey, n: number) {\n  const row = scores.value[personId] ?? (scores.value[personId] = emptyScores());\n  row[key] = row[key] === n ? null : n;\n}\n</script>\n\n<style scoped>\n.bp__head {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 32px;\n}\n.bp__titles { display: flex; flex-direction: column; gap: 12px; }\n.bp__board { display: flex; gap: 12px; }\n.bp__tile {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n  min-width: 132px;\n  padding: 16px 18px;\n  border: 1px solid var(--hairline-weak);\n  border-radius: var(--radius-xl);\n  background: var(--background);\n}\n.bp__tile-label {\n  font-size: 12px;\n  font-weight: 500;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--weak);\n}\n.bp__tile-value { font-size: 40px; font-weight: 500; line-height: 0.9; }\n.bp__segs { display: flex; gap: 3px; }\n.bp__seg { flex: 1; height: 6px; background: var(--hover); }\n.bp__seg--on { background: var(--primary); }\n\n.bp__people {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n  gap: 28px;\n}\n.bp__card {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n  padding: 22px;\n  background: var(--sticky-paper);\n  color: var(--ink);\n}\n.bp__who { display: flex; align-items: center; gap: 12px; }\n.bp__names { display: flex; flex-direction: column; gap: 2px; }\n.bp__name { font-size: 18px; font-weight: 500; }\n.bp__state { font-size: 12px; color: var(--weak); }\n.bp__cat { display: flex; flex-direction: column; gap: 8px; }\n.bp__cat-label { font-size: 13px; font-weight: 500; color: var(--ink-soft); }\n.bp__opts { display: grid; grid-template-columns: repeat(5, 1fr); gap: 4px; }\n.bp__opt {\n  height: 36px;\n  border: 1px solid rgba(30, 40, 36, 0.12);\n  border-radius: var(--radius-md);\n  background: rgba(30, 40, 36, 0.05);\n  color: var(--ink-soft);\n  font-size: 14px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);\n}\n.bp__opt:hover { background: rgba(30, 40, 36, 0.1); }\n.bp__opt--on { border-color: var(--primary); background: var(--primary); color: var(--foreground); }\n.bp__opt--on:hover { border-color: var(--primary-hover); background: var(--primary-hover); }\n.bp__ghost { font-size: 12px; color: var(--ink-soft); text-decoration: line-through; }\n</style>\n","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createVNode as _createVNode, createCommentVNode as _createCommentVNode, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"bp__head\" }\nconst _hoisted_2 = { class: \"bp__board\" }\nconst _hoisted_3 = { class: \"bp__tile-label\" }\nconst _hoisted_4 = { class: \"bp__tile-value\" }\nconst _hoisted_5 = { class: \"bp__segs\" }\nconst _hoisted_6 = { class: \"bp__people\" }\nconst _hoisted_7 = { class: \"bp__who\" }\nconst _hoisted_8 = { class: \"bp__names\" }\nconst _hoisted_9 = { class: \"bp__name\" }\nconst _hoisted_10 = { class: \"bp__state\" }\nconst _hoisted_11 = [\"aria-label\"]\nconst _hoisted_12 = { class: \"bp__cat-label\" }\nconst _hoisted_13 = { class: \"bp__opts\" }\nconst _hoisted_14 = [\"aria-checked\", \"onClick\"]\nconst _hoisted_15 = {\n  key: 0,\n  class: \"bp__ghost\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"div\", _hoisted_1, [\n      _cache[0] || (_cache[0] = _createElementVNode(\"div\", { class: \"bp__titles\" }, [\n        _createElementVNode(\"h2\", { class: \"board-title\" }, \"Hoe gaat het met iedereen?\"),\n        _createElementVNode(\"span\", { class: \"board-sub\" }, \"Ieder een score van 1 tot 5, per onderwerp.\")\n      ], -1 /* CACHED */)),\n      _createElementVNode(\"div\", _hoisted_2, [\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.scoreboard, (tile) => {\n          return (_openBlock(), _createElementBlock(\"div\", {\n            key: tile.key,\n            class: \"bp__tile\"\n          }, [\n            _createElementVNode(\"span\", _hoisted_3, _toDisplayString(tile.label), 1 /* TEXT */),\n            _createElementVNode(\"span\", _hoisted_4, _toDisplayString($setup.fmtAverage(tile.average)), 1 /* TEXT */),\n            _createElementVNode(\"div\", _hoisted_5, [\n              (_openBlock(), _createElementBlock(_Fragment, null, _renderList(5, (n) => {\n                return _createElementVNode(\"span\", {\n                  key: n,\n                  class: _normalizeClass([\"bp__seg\", { 'bp__seg--on': tile.average !== null && n <= Math.round(tile.average) }])\n                }, null, 2 /* CLASS */)\n              }), 64 /* STABLE_FRAGMENT */))\n            ])\n          ]))\n        }), 128 /* KEYED_FRAGMENT */))\n      ])\n    ]),\n    _createElementVNode(\"div\", _hoisted_6, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.presentPeople, (person, index) => {\n        return (_openBlock(), _createElementBlock(\"div\", {\n          key: person.id,\n          class: \"bp__card\",\n          style: _normalizeStyle({ transform: `rotate(${$setup.tilt(index)})` })\n        }, [\n          _createElementVNode(\"div\", _hoisted_7, [\n            _createVNode($setup[\"PersonAvatar\"], {\n              name: person.name,\n              size: \"l\"\n            }, null, 8 /* PROPS */, [\"name\"]),\n            _createElementVNode(\"div\", _hoisted_8, [\n              _createElementVNode(\"span\", _hoisted_9, _toDisplayString(person.name), 1 /* TEXT */),\n              _createElementVNode(\"span\", _hoisted_10, _toDisplayString($setup.stateOf(person.id)), 1 /* TEXT */)\n            ])\n          ]),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.CATEGORIES, (cat) => {\n            return (_openBlock(), _createElementBlock(\"div\", {\n              key: cat.key,\n              class: \"bp__cat\",\n              role: \"radiogroup\",\n              \"aria-label\": `${cat.label} van ${person.short}`\n            }, [\n              _createElementVNode(\"span\", _hoisted_12, _toDisplayString(cat.label), 1 /* TEXT */),\n              _createElementVNode(\"div\", _hoisted_13, [\n                (_openBlock(), _createElementBlock(_Fragment, null, _renderList(5, (n) => {\n                  return _createElementVNode(\"button\", {\n                    key: n,\n                    type: \"button\",\n                    class: _normalizeClass([\"bp__opt\", { 'bp__opt--on': ($setup.scoreOf(person.id, cat.key) ?? 0) >= n }]),\n                    role: \"radio\",\n                    \"aria-checked\": $setup.scoreOf(person.id, cat.key) === n,\n                    onClick: $event => ($setup.pick(person.id, cat.key, n))\n                  }, _toDisplayString(n), 11 /* TEXT, CLASS, PROPS */, _hoisted_14)\n                }), 64 /* STABLE_FRAGMENT */))\n              ]),\n              _createCommentVNode(\" The ghost: last week's score, so this week reads against it. \"),\n              ($setup.prevScoreOf(person.id, cat.key) !== null)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"Vorige week: \" + _toDisplayString($setup.prevScoreOf(person.id, cat.key)), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true)\n            ], 8 /* PROPS */, _hoisted_11))\n          }), 128 /* KEYED_FRAGMENT */))\n        ], 4 /* STYLE */))\n      }), 128 /* KEYED_FRAGMENT */))\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardPeople.vue\";script.__scopeId = \"data-v-3d70f8ca\";export default script;","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport BoardTeamUpdates from \"./BoardTeamUpdates.vue\";\nimport LinearWeekOverview from \"./LinearWeekOverview.vue\";\nimport MeetingInputs from \"./MeetingInputs.vue\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nconst route = useRoute();\nconst router = useRouter();\nconst MODES = [\"linear\", \"input\", \"team\"] as const;\ntype Mode = typeof MODES[number];\nconst store = useMeetingStore();\nconst inputCount = computed(() => store.meeting.value?.inputs.length ?? 0);\nconst mode = computed<Mode>(() => MODES.find(m => m !== \"linear\" && m === route.query.updates) ?? \"linear\");\nfunction select(mode: Mode) {\n  void router.replace({ query: { ...route.query, updates: mode === \"linear\" ? undefined : mode } });\n}\nfunction onTabKey(event: KeyboardEvent) {\n  if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\" || event.key === \"Home\" || event.key === \"End\") {\n    event.preventDefault();\n    event.stopPropagation();\n    const at = MODES.indexOf(mode.value);\n    const next = event.key === \"Home\" ? MODES[0]\n      : event.key === \"End\" ? MODES[MODES.length - 1]\n        : MODES[(at + (event.key === \"ArrowRight\" ? 1 : MODES.length - 1)) % MODES.length];\n    select(next);\n    (event.currentTarget as HTMLElement).querySelector<HTMLButtonElement>(`[data-mode=\"${next}\"]`)?.focus();\n  }\n}\n</script>\n\n<template>\n  <div class=\"bu-tabs\" role=\"tablist\" aria-label=\"Updatesweergave\" @keydown=\"onTabKey\">\n    <button id=\"updates-linear-tab\" type=\"button\" role=\"tab\" data-mode=\"linear\" :aria-selected=\"mode === 'linear'\" :tabindex=\"mode === 'linear' ? 0 : -1\" aria-controls=\"updates-linear-panel\" @click=\"select('linear')\">Linear-weekoverzicht</button>\n    <button id=\"updates-input-tab\" type=\"button\" role=\"tab\" data-mode=\"input\" :aria-selected=\"mode === 'input'\" :tabindex=\"mode === 'input' ? 0 : -1\" aria-controls=\"updates-input-panel\" @click=\"select('input')\">Vooraf ingestuurd<span v-if=\"inputCount\" class=\"bu-count\">{{ inputCount }}</span></button>\n    <button id=\"updates-team-tab\" type=\"button\" role=\"tab\" data-mode=\"team\" :aria-selected=\"mode === 'team'\" :tabindex=\"mode === 'team' ? 0 : -1\" aria-controls=\"updates-team-panel\" @click=\"select('team')\">Teamupdates</button>\n  </div>\n  <!-- Keep both views mounted: tab changes must not discard pending manual edits. -->\n  <div v-show=\"mode === 'linear'\" id=\"updates-linear-panel\" role=\"tabpanel\" aria-labelledby=\"updates-linear-tab\"><LinearWeekOverview /></div>\n  <div v-show=\"mode === 'input'\" id=\"updates-input-panel\" role=\"tabpanel\" aria-labelledby=\"updates-input-tab\"><MeetingInputs /></div>\n  <div v-show=\"mode === 'team'\" id=\"updates-team-panel\" role=\"tabpanel\" aria-labelledby=\"updates-team-tab\"><BoardTeamUpdates /></div>\n</template>\n\n<style scoped>\n.bu-tabs { display: flex; flex-wrap: wrap; gap: 8px; border-bottom: 1px solid var(--border); padding-bottom: 12px; }\n.bu-tabs button { padding: 9px 12px; border: 1px solid transparent; border-radius: var(--radius-md); background: transparent; color: var(--muted-foreground); cursor: pointer; font: inherit; }\n.bu-tabs button:hover { background: var(--field); }\n.bu-tabs button[aria-selected=\"true\"] { background: var(--hover-strong); border-color: var(--border); color: var(--foreground); }\n.bu-count { margin-left: 8px; padding: 1px 7px; border-radius: var(--radius-md); background: var(--field); font-size: 12px; font-variant-numeric: tabular-nums; }\n.bu-tabs button:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }\n</style>\n","<template>\n  <div class=\"bu__titles\">\n    <h3 class=\"board-title\">Teamupdates</h3>\n    <span class=\"board-sub\">“Vorige week” komt mee uit de vorige meeting. Wijs iemand toe en er komt een actie bij.</span>\n  </div>\n\n  <div class=\"bu__grid\">\n    <div\n      v-for=\"(card, index) in cards\"\n      :key=\"card.key\"\n      class=\"bu__card\"\n      :class=\"{ 'bu__card--cool': !card.hasWeeks }\"\n      :style=\"{ transform: `rotate(${tilt(index + 2)})` }\"\n    >\n      <span class=\"bu__title\">{{ card.title }}</span>\n      <div v-if=\"card.hasWeeks\" class=\"bu__section\">\n        <span class=\"bu__label bu__label--prev\">Vorige week</span>\n        <span v-for=\"(point, i) in card.update.prev\" :key=\"i\" class=\"bu__prev\">– {{ point }}</span>\n        <span v-if=\"!card.update.prev.length\" class=\"bu__none\">Niets vastgelegd</span>\n      </div>\n      <div class=\"bu__section\">\n        <span class=\"bu__label\">Deze week</span>\n        <div v-for=\"(point, i) in card.update.cur\" :key=\"point.id\" class=\"bu__item\">\n          <div class=\"bu__item-row\">\n            <input\n              v-model=\"point.text\"\n              class=\"bu__edit\"\n              :aria-label=\"`Punt in ${card.title} wijzigen`\"\n              @keydown.enter.prevent=\"focusAdd(card.key)\"\n            >\n            <button type=\"button\" class=\"bu__remove\" :aria-label=\"`${point.text} verwijderen`\" @click=\"store.deleteUpdatePoint(card.update, i)\">×</button>\n          </div>\n          <div v-if=\"card.hasWeeks\" class=\"bu__assign\" role=\"group\" :aria-label=\"`Toewijzen: ${point.text}`\">\n            <button\n              v-for=\"person in store.people.value\"\n              :key=\"person.id\"\n              type=\"button\"\n              class=\"bu__chip\"\n              :class=\"{ 'bu__chip--on': point.assignees.includes(person.id) }\"\n              :aria-pressed=\"point.assignees.includes(person.id)\"\n              @click=\"toggleAssignee(point, person.id)\"\n            >\n              {{ person.short }}\n            </button>\n          </div>\n          <!-- Only a point handed to someone becomes an action, so only then a deadline. -->\n          <DuePicker v-if=\"card.hasWeeks && point.assignees.length\" v-model=\"point.due\" :label=\"`Deadline: ${point.text}`\" />\n        </div>\n        <input\n          :ref=\"el => setAddRef(card.key, el)\"\n          v-model=\"drafts[card.key]\"\n          class=\"bu__add\"\n          placeholder=\"+ Punt toevoegen\"\n          :aria-label=\"`Punt toevoegen aan ${card.title}`\"\n          @keydown.enter.prevent=\"add(card.update, card.key)\"\n        >\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive } from \"vue\";\nimport { newUpdateItemId } from \"@mod-tech42_tools/js/mondays/rules\";\nimport { UPDATE_CATEGORIES, type Update, type UpdateCategoryKey, type UpdateItem } from \"@mod-tech42_tools/js/mondays/types\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { tilt } from \"../../lib/mondays-format\";\nimport DuePicker from \"./DuePicker.vue\";\n\nconst store = useMeetingStore();\n\n// The repository hands every category over, so each card finds its update.\nconst cards = computed(() => UPDATE_CATEGORIES\n  .map(category => ({ ...category, update: store.meeting.value!.updates.find(u => u.category === category.key)! }))\n  .filter(card => card.update));\n\nconst drafts = reactive<Partial<Record<UpdateCategoryKey, string>>>({});\nconst addRefs = new Map<UpdateCategoryKey, HTMLInputElement>();\n\nfunction setAddRef(key: UpdateCategoryKey, el: unknown) {\n  if (el instanceof HTMLInputElement) addRefs.set(key, el);\n  else addRefs.delete(key);\n}\n\nfunction focusAdd(key: UpdateCategoryKey) {\n  addRefs.get(key)?.focus();\n}\n\nfunction add(update: Update, key: UpdateCategoryKey) {\n  const point = (drafts[key] ?? \"\").trim();\n  if (!point) return;\n  update.cur.push({ id: newUpdateItemId(), text: point, assignees: [], due: null });\n  drafts[key] = \"\";\n}\n\nfunction toggleAssignee(point: UpdateItem, personId: number) {\n  point.assignees = point.assignees.includes(personId)\n    ? point.assignees.filter(id => id !== personId)\n    : [...point.assignees, personId];\n}\n</script>\n\n<style scoped>\n.bu__titles { display: flex; flex-direction: column; gap: 12px; }\n.bu__grid {\n  display: grid;\n  /* Five cards read as 3 + 2 on the big screen, not 4 + 1 (Wouter, TEC-210). */\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  align-items: start;\n  gap: 28px;\n}\n.bu__card {\n  display: flex;\n  flex-direction: column;\n  gap: 18px;\n  min-height: 240px;\n  padding: 22px;\n  background: var(--sticky-update);\n  color: var(--ink);\n}\n.bu__card--cool { background: var(--sticky-focus); }\n.bu__title { font-size: 20px; font-weight: 500; }\n.bu__section { display: flex; flex-direction: column; gap: 6px; }\n.bu__label {\n  font-size: 12px;\n  font-weight: 700;\n  letter-spacing: 0.04em;\n  text-transform: uppercase;\n  color: var(--ink);\n}\n.bu__label--prev { color: var(--ink-soft); }\n.bu__prev { font-size: 14px; line-height: 1.4; color: var(--ink-soft); }\n.bu__none { font-size: 14px; color: var(--t42-green-500); }\n.bu__item { display: flex; flex-direction: column; gap: 6px; padding-bottom: 8px; }\n.bu__item-row { display: flex; align-items: flex-start; gap: 8px; }\n.bu__edit {\n  flex: 1;\n  min-width: 0;\n  padding: 0;\n  border: none;\n  border-bottom: 1px solid transparent;\n  background: transparent;\n  color: var(--ink);\n  font-size: 15px;\n  font-weight: 500;\n  line-height: 1.4;\n  outline: none;\n}\n.bu__edit:focus { border-bottom-color: var(--ink); }\n.bu__remove {\n  flex: none;\n  padding: 0 2px;\n  border: none;\n  background: transparent;\n  color: var(--ink-soft);\n  font-size: 15px;\n  line-height: 1.3;\n  cursor: pointer;\n}\n.bu__assign { display: flex; flex-wrap: wrap; gap: 4px; }\n.bu__chip {\n  height: 24px;\n  padding: 0 8px;\n  border: 1px solid rgba(30, 40, 36, 0.2);\n  border-radius: var(--radius-md);\n  background: transparent;\n  color: var(--ink-soft);\n  font-size: 12px;\n  font-weight: 500;\n  cursor: pointer;\n  transition: background-color var(--dur-base) var(--ease), border-color var(--dur-base) var(--ease), color var(--dur-base) var(--ease);\n}\n.bu__chip:hover { background: rgba(30, 40, 36, 0.08); }\n.bu__chip--on,\n.bu__chip--on:hover { border-color: var(--ink); background: var(--ink); color: var(--sticky-update); }\n.bu__add {\n  height: 32px;\n  margin-top: 4px;\n  padding: 0;\n  border: none;\n  border-bottom: 1px dashed rgba(30, 40, 36, 0.3);\n  background: transparent;\n  color: var(--ink);\n  font-size: 14px;\n  outline: none;\n}\n.bu__add::placeholder { color: currentColor; opacity: 0.5; }\n.bu__add:focus { border-bottom-color: var(--ink); }\n</style>\n\n<style scoped>\n@media (max-width: 760px) { .bu__grid { grid-template-columns: 1fr; gap: 20px; } .bu__card { transform: none !important; } }\n</style>\n","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withModifiers as _withModifiers, withKeys as _withKeys, withDirectives as _withDirectives, normalizeClass as _normalizeClass, createBlock as _createBlock, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"bu__grid\" }\nconst _hoisted_2 = { class: \"bu__title\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"bu__section\"\n}\nconst _hoisted_4 = {\n  key: 0,\n  class: \"bu__none\"\n}\nconst _hoisted_5 = { class: \"bu__section\" }\nconst _hoisted_6 = { class: \"bu__item-row\" }\nconst _hoisted_7 = [\"onUpdate:modelValue\", \"aria-label\", \"onKeydown\"]\nconst _hoisted_8 = [\"aria-label\", \"onClick\"]\nconst _hoisted_9 = [\"aria-label\"]\nconst _hoisted_10 = [\"aria-pressed\", \"onClick\"]\nconst _hoisted_11 = [\"onUpdate:modelValue\", \"aria-label\", \"onKeydown\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _cache[2] || (_cache[2] = _createElementVNode(\"div\", { class: \"bu__titles\" }, [\n      _createElementVNode(\"h3\", { class: \"board-title\" }, \"Teamupdates\"),\n      _createElementVNode(\"span\", { class: \"board-sub\" }, \"“Vorige week” komt mee uit de vorige meeting. Wijs iemand toe en er komt een actie bij.\")\n    ], -1 /* CACHED */)),\n    _createElementVNode(\"div\", _hoisted_1, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.cards, (card, index) => {\n        return (_openBlock(), _createElementBlock(\"div\", {\n          key: card.key,\n          class: _normalizeClass([\"bu__card\", { 'bu__card--cool': !card.hasWeeks }]),\n          style: _normalizeStyle({ transform: `rotate(${$setup.tilt(index + 2)})` })\n        }, [\n          _createElementVNode(\"span\", _hoisted_2, _toDisplayString(card.title), 1 /* TEXT */),\n          (card.hasWeeks)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n                _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"bu__label bu__label--prev\" }, \"Vorige week\", -1 /* CACHED */)),\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(card.update.prev, (point, i) => {\n                  return (_openBlock(), _createElementBlock(\"span\", {\n                    key: i,\n                    class: \"bu__prev\"\n                  }, \"– \" + _toDisplayString(point), 1 /* TEXT */))\n                }), 128 /* KEYED_FRAGMENT */)),\n                (!card.update.prev.length)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"Niets vastgelegd\"))\n                  : _createCommentVNode(\"v-if\", true)\n              ]))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"div\", _hoisted_5, [\n            _cache[1] || (_cache[1] = _createElementVNode(\"span\", { class: \"bu__label\" }, \"Deze week\", -1 /* CACHED */)),\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(card.update.cur, (point, i) => {\n              return (_openBlock(), _createElementBlock(\"div\", {\n                key: point.id,\n                class: \"bu__item\"\n              }, [\n                _createElementVNode(\"div\", _hoisted_6, [\n                  _withDirectives(_createElementVNode(\"input\", {\n                    \"onUpdate:modelValue\": $event => ((point.text) = $event),\n                    class: \"bu__edit\",\n                    \"aria-label\": `Punt in ${card.title} wijzigen`,\n                    onKeydown: _withKeys(_withModifiers($event => ($setup.focusAdd(card.key)), [\"prevent\"]), [\"enter\"])\n                  }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_7), [\n                    [_vModelText, point.text]\n                  ]),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"bu__remove\",\n                    \"aria-label\": `${point.text} verwijderen`,\n                    onClick: $event => ($setup.store.deleteUpdatePoint(card.update, i))\n                  }, \"×\", 8 /* PROPS */, _hoisted_8)\n                ]),\n                (card.hasWeeks)\n                  ? (_openBlock(), _createElementBlock(\"div\", {\n                      key: 0,\n                      class: \"bu__assign\",\n                      role: \"group\",\n                      \"aria-label\": `Toewijzen: ${point.text}`\n                    }, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.store.people.value, (person) => {\n                        return (_openBlock(), _createElementBlock(\"button\", {\n                          key: person.id,\n                          type: \"button\",\n                          class: _normalizeClass([\"bu__chip\", { 'bu__chip--on': point.assignees.includes(person.id) }]),\n                          \"aria-pressed\": point.assignees.includes(person.id),\n                          onClick: $event => ($setup.toggleAssignee(point, person.id))\n                        }, _toDisplayString(person.short), 11 /* TEXT, CLASS, PROPS */, _hoisted_10))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ], 8 /* PROPS */, _hoisted_9))\n                  : _createCommentVNode(\"v-if\", true),\n                _createCommentVNode(\" Only a point handed to someone becomes an action, so only then a deadline. \"),\n                (card.hasWeeks && point.assignees.length)\n                  ? (_openBlock(), _createBlock($setup[\"DuePicker\"], {\n                      key: 1,\n                      modelValue: point.due,\n                      \"onUpdate:modelValue\": $event => ((point.due) = $event),\n                      label: `Deadline: ${point.text}`\n                    }, null, 8 /* PROPS */, [\"modelValue\", \"onUpdate:modelValue\", \"label\"]))\n                  : _createCommentVNode(\"v-if\", true)\n              ]))\n            }), 128 /* KEYED_FRAGMENT */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              ref_for: true,\n              ref: el => $setup.setAddRef(card.key, el),\n              \"onUpdate:modelValue\": $event => (($setup.drafts[card.key]) = $event),\n              class: \"bu__add\",\n              placeholder: \"+ Punt toevoegen\",\n              \"aria-label\": `Punt toevoegen aan ${card.title}`,\n              onKeydown: _withKeys(_withModifiers($event => ($setup.add(card.update, card.key)), [\"prevent\"]), [\"enter\"])\n            }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_11), [\n              [_vModelText, $setup.drafts[card.key]]\n            ])\n          ])\n        ], 6 /* CLASS, STYLE */))\n      }), 128 /* KEYED_FRAGMENT */))\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue?type=style&index=0\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue?type=style&index=1\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardTeamUpdates.vue\";script.__scopeId = \"data-v-5b933f7b\";export default script;","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref, watch } from \"vue\";\nimport type { SummaryCitation } from \"@mod-tech42_tools/js/mondays/linear-summary-types\";\nimport { api } from \"../../lib/api\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { MeetingReviewLoader } from \"../../lib/meeting-review-loader\";\nimport { groupReviewProjects, reviewPeriodLabel, reviewMessage, reviewNotice, retryableReviewError, type ReviewOverview } from \"../../lib/meeting-review\";\nimport LinearSourcePanel from \"./LinearSourcePanel.vue\";\n\nconst store = useMeetingStore();\nconst overview = ref<ReviewOverview | null>(null);\nconst failure = ref(\"\");\nconst retrying = ref(false);\nconst selection = ref<{ issueId: string; sourceId: string; generation: string } | null>(null);\nconst projectFilter = ref(\"all\");\nconst status = computed(() => overview.value?.status ?? null);\nconst projects = computed(() => overview.value ? groupReviewProjects(overview.value) : []);\nconst shownProjects = computed(() => projects.value.filter(project => projectFilter.value === \"all\" || project.id === projectFilter.value));\nconst period = computed(() => status.value?.published?.period ?? status.value?.period);\nconst periodLabel = computed(() => period.value ? reviewPeriodLabel(period.value) : \"\");\nconst loader = new MeetingReviewLoader({\n  load: options => api.getMeetingReviewOverview(options),\n  publish: options => { overview.value = options.overview; store.reviewStatus.value = options.overview.status; failure.value = \"\"; },\n  fail: () => { store.reviewStatus.value = null; failure.value = \"Het weekoverzicht kon niet worden geladen. Probeer opnieuw.\"; },\n  schedule: run => window.setTimeout(run, 3000),\n  cancel: timer => window.clearTimeout(timer as number),\n});\nwatch(() => store.meeting.value?.id, id => {\n  loader.stop();\n  overview.value = null;\n  store.reviewStatus.value = null;\n  selection.value = null;\n  projectFilter.value = \"all\";\n  if (id) loader.start(id);\n}, { immediate: true });\nonBeforeUnmount(() => { loader.stop(); store.reviewStatus.value = null; });\n\nfunction openSource(citation: Pick<SummaryCitation, \"issueId\" | \"sourceId\">) {\n  const generation = status.value?.published?.generation;\n  if (generation) selection.value = { ...citation, generation };\n}\n\n/** Explicit retries are separate from ordinary reloads, which only read the stored overview. */\nasync function retry() {\n  const id = store.meeting.value?.id;\n  if (!id || retrying.value) return;\n  retrying.value = true;\n  failure.value = \"\";\n  try {\n    if (status.value?.summary.error && status.value.published && !status.value.fetch.error) await api.retryMeetingSummary({ id });\n    else await api.retryMeetingReview({ id });\n    if (store.meeting.value?.id === id) loader.start(id);\n  } catch { failure.value = \"Opnieuw proberen is niet gelukt. De bewaarde bronnen blijven beschikbaar.\"; }\n  finally { retrying.value = false; }\n}\nfunction reload() { const id = store.meeting.value?.id; if (id) loader.start(id); }\n</script>\n\n<template>\n  <section class=\"lw\" aria-label=\"Linear-weekoverzicht\">\n    <header class=\"lw__header\">\n      <h2 class=\"board-title\">Linear<template v-if=\"periodLabel\"> · {{ periodLabel }}</template></h2>\n      <p v-if=\"retryableReviewError(status)\" class=\"lw__error\" role=\"alert\">{{ reviewMessage(status) }}</p>\n      <p v-if=\"reviewNotice(status)\" class=\"lw__notice\">{{ reviewNotice(status) }}</p>\n      <p v-if=\"failure\" class=\"lw__error\" role=\"alert\">{{ failure }} <button type=\"button\" @click=\"reload\">Opnieuw laden</button></p>\n      <button v-if=\"retryableReviewError(status)\" type=\"button\" class=\"lw__retry\" :disabled=\"retrying\" @click=\"retry\">{{ retrying ? \"Opnieuw proberen…\" : status?.summary.error && !status?.fetch.error ? \"Samenvatting opnieuw proberen\" : \"Bronnen opnieuw ophalen\" }}</button>\n    </header>\n    <label v-if=\"projects.length > 1\" class=\"lw__filter\">Project\n      <select v-model=\"projectFilter\" aria-label=\"Project selecteren\"><option value=\"all\">Alle projecten</option><option v-for=\"project in projects\" :key=\"project.id\" :value=\"project.id\">{{ project.name }}</option></select>\n    </label>\n    <section v-for=\"project in shownProjects\" :key=\"project.id\" class=\"lw__project\" :aria-label=\"project.name\">\n      <header><h3>{{ project.name }}</h3><span>{{ project.issues.length }} issues · {{ project.sourceCount }} bronnen</span></header>\n      <div v-if=\"project.issueBlocks.length\" class=\"lw__blocks\">\n        <article v-for=\"block in project.issueBlocks\" :key=\"block.id\" class=\"lw__block\">\n          <h4><a v-if=\"block.url\" :href=\"block.url\" target=\"_blank\" rel=\"noopener noreferrer\">{{ block.identifier }}<template v-if=\"block.title\"> · {{ block.title }}</template></a><template v-else>{{ block.identifier }}<template v-if=\"block.title\"> · {{ block.title }}</template></template></h4>\n          <p><template v-for=\"(claim, index) in block.claims\" :key=\"index\">{{ index ? \" \" : \"\" }}<strong v-if=\"claim.kind === 'attention'\" class=\"lw__attention\">Aandachtspunt: </strong>{{ claim.text }}</template></p>\n        </article>\n      </div>\n      <p v-else class=\"lw__meta\">Geen samenvatting beschikbaar voor dit project. Open een issue om de bewaarde bronnen te lezen.</p>\n      <details class=\"lw__issues\" :open=\"!project.claims.length\"><summary>Alle {{ project.issues.length }} issues en hun bronnen</summary><button v-for=\"issue in project.issues\" :key=\"issue.id\" type=\"button\" @click=\"openSource({ issueId: issue.id, sourceId: '' })\"><strong>{{ issue.identifier }}</strong> {{ issue.title }} <span>{{ issue.sourceCount }} bronnen</span></button></details>\n    </section>\n    <LinearSourcePanel v-if=\"selection && store.meeting.value\" :key=\"`${store.meeting.value.id}:${selection.generation}:${selection.issueId}:${selection.sourceId}`\" :meeting-id=\"store.meeting.value.id\" :selection=\"selection\" @close=\"selection = null\" />\n  </section>\n</template>\n\n<style scoped>\n.lw { display: flex; flex-direction: column; gap: 24px; min-width: 0; }\n.lw__header { display: flex; flex-direction: column; gap: 10px; }\n.lw p { margin: 0; line-height: 1.55; max-width: 75ch; }\n.lw__meta, .lw__project header span { font-size: 13px; color: var(--muted-foreground); }\n.lw__notice { padding: 10px 12px; border: 1px solid var(--border); background: var(--field); border-radius: var(--radius-md); font-size: 13px; }\n.lw__filter { display: flex; align-items: center; gap: 12px; }\n.lw select { max-width: 100%; min-width: 0; background: var(--field); color: var(--foreground); padding: 8px; border: 1px solid var(--border); border-radius: var(--radius-md); font: inherit; }\n.lw__project { padding-top: 24px; border-top: 1px solid var(--border); min-width: 0; }\n.lw__project header { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 16px; margin-bottom: 14px; }\n.lw h3 { margin: 0; font-size: 21px; font-weight: 500; overflow-wrap: anywhere; }\n.lw__blocks { display: flex; flex-direction: column; gap: 18px; }\n.lw__block { max-width: 75ch; min-width: 0; overflow-wrap: anywhere; }\n.lw__block p { margin: 0; line-height: 1.6; }\n.lw__block h4 { margin: 0 0 6px; font-size: 15px; font-weight: 600; }\n.lw__block a { color: var(--foreground); text-decoration: underline; text-underline-offset: 3px; }\n.lw__block a:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }\n.lw__attention { color: var(--primary-hover); font-weight: 600; }\n.lw button { font: inherit; cursor: pointer; }\n.lw__retry, .lw__error button { border: 1px solid var(--border); border-radius: var(--radius-md); padding: 6px 10px; background: transparent; color: var(--foreground); font-size: 12px; }\n.lw__retry { align-self: start; }\n.lw button:hover { background: var(--hover-strong); }\n.lw button:focus-visible, .lw summary:focus-visible, .lw select:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }\n.lw__issues { margin-top: 18px; font-size: 13px; }\n.lw summary { cursor: pointer; color: var(--muted-foreground); padding: 8px 0; }\n.lw__issues button { display: block; width: 100%; text-align: left; padding: 10px 0; border: 0; border-top: 1px solid var(--border); background: transparent; color: var(--foreground); overflow-wrap: anywhere; }\n.lw__issues button span { display: block; margin-top: 4px; color: var(--muted-foreground); font-size: 12px; }\n.lw__error { color: var(--fire); }\n@media (max-width: 760px) { .lw__filter { flex-direction: column; align-items: stretch; } }\n</style>\n","import type { ReviewOverview } from \"./meeting-review\";\n\ntype LoaderOptions = {\n  load: (options: { id: number }) => Promise<ReviewOverview>;\n  publish: (options: { id: number; overview: ReviewOverview }) => void;\n  fail: () => void;\n  schedule: (run: () => void) => unknown;\n  cancel: (timer: unknown) => void;\n};\n\n/** Owns polling for one mounted meeting. Late responses and callbacks are ignored after stop or a route change. */\nexport class MeetingReviewLoader {\n  #options: LoaderOptions;\n  #epoch = 0;\n  #timer: unknown;\n\n  constructor(options: LoaderOptions) { this.#options = options; }\n\n  public start(id: number): void {\n    this.stop();\n    void this.#load({ id, epoch: this.#epoch });\n  }\n\n  public stop(): void {\n    ++this.#epoch;\n    if (this.#timer !== undefined) this.#options.cancel(this.#timer);\n    this.#timer = undefined;\n  }\n\n  async #load(options: { id: number; epoch: number }): Promise<void> {\n    if (options.epoch !== this.#epoch) return;\n    try {\n      const overview = await this.#options.load({ id: options.id });\n      if (options.epoch !== this.#epoch) return;\n      this.#options.publish({ id: options.id, overview });\n      const phase = overview.status?.phase;\n      if (phase === \"waiting\" || phase === \"fetching\" || phase === \"summarizing\" || (phase === \"sources-ready\" && !overview.status?.summary.error))\n        this.#timer = this.#options.schedule(() => void this.#load(options));\n    } catch {\n      if (options.epoch === this.#epoch) this.#options.fail();\n    }\n  }\n}\n","import MarkdownIt from \"markdown-it\";\nimport type { ReviewHistory, ReviewIssueSnapshot, ReviewSource } from \"@mod-tech42_tools/js/mondays/linear-review-types\";\nimport type { MeetingReviewStatus, ReviewIssueIndex } from \"@mod-tech42_tools/js/mondays/meeting-review-types\";\nimport type { ProjectSummary, SummaryClaim } from \"@mod-tech42_tools/js/mondays/linear-summary-types\";\n\nexport type ReviewOverview = { status: MeetingReviewStatus | null; issues: ReviewIssueIndex[]; summaries: ProjectSummary[]; summaryLimited: boolean };\nexport type ReviewIssueBlock = { id: string; identifier: string; title: string; url: string | undefined; claims: SummaryClaim[] };\nexport type ReviewProjectView = { id: string; name: string; issues: ReviewIssueIndex[]; claims: SummaryClaim[]; issueBlocks: ReviewIssueBlock[]; sourceCount: number };\nexport type SourceTab = \"changes\" | \"description\" | \"comments\";\n\n/** Group by the observed project ID; issue titles are never project metadata. */\nexport function groupReviewProjects(overview: Pick<ReviewOverview, \"issues\" | \"summaries\">): ReviewProjectView[] {\n  const groups = new Map<string, ReviewProjectView>();\n  const issuesById = new Map(overview.issues.map(issue => [issue.id, issue]));\n  for (const issue of overview.issues) {\n    const id = issue.project?.id ?? \"\";\n    if (!groups.has(id)) groups.set(id, { id, name: issue.project?.name ?? \"Zonder project\", issues: [], claims: [], issueBlocks: [], sourceCount: 0 });\n    const group = groups.get(id)!;\n    group.issues.push(issue);\n    group.sourceCount += issue.sourceCount;\n  }\n  for (const summary of overview.summaries) {\n    const id = summary.project?.id ?? \"\";\n    if (!groups.has(id)) groups.set(id, { id, name: summary.project?.name ?? \"Zonder project\", issues: [], claims: [], issueBlocks: [], sourceCount: 0 });\n    const group = groups.get(id)!;\n    group.claims = summary.claims;\n    const blocks = new Map<string, ReviewIssueBlock>();\n    for (const claim of summary.claims) {\n      // A claim can describe several issues together. Preserve its complete text\n      // for each cited issue, but do not repeat it for multiple sources of one issue.\n      const involved = new Set<string>();\n      for (const citation of claim.citations) {\n        if (involved.has(citation.issueId)) continue;\n        involved.add(citation.issueId);\n        if (!blocks.has(citation.issueId)) {\n          // Citation URLs may target comments, so only the stored index supplies an issue link.\n          const issue = issuesById.get(citation.issueId);\n          blocks.set(citation.issueId, {\n            id: citation.issueId, identifier: issue?.identifier ?? citation.identifier,\n            title: issue?.title ?? \"\", url: issue ? safeSourceUrl(issue.url) : undefined, claims: [],\n          });\n        }\n        blocks.get(citation.issueId)!.claims.push(claim);\n      }\n    }\n    group.issueBlocks = [...blocks.values()];\n  }\n  const identifiers = new Intl.Collator(\"nl\", { numeric: true });\n  for (const group of groups.values()) {\n    group.issues.sort((a, b) => identifiers.compare(a.identifier, b.identifier));\n    group.issueBlocks.sort((a, b) => identifiers.compare(a.identifier, b.identifier));\n  }\n  return [...groups.values()].sort((a, b) => a.id === \"\" ? 1 : b.id === \"\" ? -1 : a.name.localeCompare(b.name, \"nl\"));\n}\n\nexport function sourceTab(source: Pick<ReviewSource, \"kind\">): SourceTab {\n  return source.kind === \"comment\" ? \"comments\" : source.kind === \"description-version\" ? \"description\" : \"changes\";\n}\n\n/** Compare consecutive stored snapshots, never an old version with today's text. */\nexport function descriptionComparison(options: { snapshot: ReviewIssueSnapshot; selectedId: string }) {\n  const versions = options.snapshot.sources.filter(source => source.kind === \"description-version\")\n    .sort((a, b) => a.version.contentDataSnapshotAt.localeCompare(b.version.contentDataSnapshotAt));\n  const index = versions.findIndex(source => source.id === options.selectedId);\n  if (index < 1) return null;\n  return { before: versions[index - 1], after: versions[index] };\n}\n\n/** Describe every supplied field instead of suggesting a status change is a deploy. */\nexport function describeHistory(history: Partial<ReviewHistory>): string[] {\n  const rows: string[] = [];\n  const fields = [\n    [\"Status\", history.fromState?.name, history.toState?.name],\n    [\"Project\", history.fromProject?.name, history.toProject?.name],\n    [\"Toegewezen aan\", history.fromAssignee?.name, history.toAssignee?.name],\n    [\"Titel\", history.fromTitle, history.toTitle],\n    [\"Prioriteit\", history.fromPriority, history.toPriority],\n    [\"Deadline\", history.fromDueDate, history.toDueDate],\n    [\"Inschatting\", history.fromEstimate, history.toEstimate],\n    [\"Cyclus\", history.fromCycle?.name ?? history.fromCycle?.number, history.toCycle?.name ?? history.toCycle?.number],\n  ];\n  for (const [label, before, after] of fields) {\n    if ((before !== null && before !== undefined) || (after !== null && after !== undefined)) rows.push(`${label}: ${before ?? \"Niet ingevuld\"} → ${after ?? \"Niet ingevuld\"}`);\n  }\n  if (history.updatedDescription) {\n    rows.push(\"Beschrijving gewijzigd\");\n    if (history.descriptionUpdatedBy?.length) rows.push(`Beschrijvingauteurs: ${history.descriptionUpdatedBy.map(actor => actor.name).join(\", \")}`);\n  }\n  if (history.addedLabels?.length) rows.push(`Labels toegevoegd: ${history.addedLabels.map(label => label.name).join(\", \")}`);\n  if (history.removedLabels?.length) rows.push(`Labels verwijderd: ${history.removedLabels.map(label => label.name).join(\", \")}`);\n  if (history.relationChanges?.length) rows.push(`Relaties: ${history.relationChanges.map(relation => `${relation.identifier} (${relation.type})`).join(\", \")}`);\n  return rows.length ? rows : [\"Gebeurtenis zonder verdere velddetails\"];\n}\n\n/** Codes that are a setting of this server, not a failure: retrying changes nothing. */\nconst SETTLED_CODES = new Set([\"configuration\", \"disabled\"]);\n\n/** A calm explanation instead of an error, or null when there is none to give. */\nexport function reviewNotice(state: MeetingReviewStatus | null): string | null {\n  if (state?.summary.error?.code === \"disabled\" && !state.fetch.error)\n    return \"Op deze server wordt geen AI gebruikt, dus er komt geen samenvatting. De Linear-bronnen staan per project hieronder.\";\n  if (state?.fetch.error?.code === \"configuration\" || state?.summary.error?.code === \"configuration\")\n    return \"Het overzicht is nog niet beschikbaar. Beheer moet de koppeling controleren. De meeting blijft bruikbaar.\";\n  return null;\n}\n\n/** Whether there is a failure that \"opnieuw proberen\" could fix. */\nexport function retryableReviewError(state: MeetingReviewStatus | null): boolean {\n  const errors = [state?.fetch.error, state?.summary.error].filter(e => e);\n  return errors.length > 0 && !errors.some(e => SETTLED_CODES.has(e!.code));\n}\n\nexport function reviewMessage(state: MeetingReviewStatus | null): string {\n  if (!state) return \"Geen weekoverzicht bewaard voor deze meeting. Teamupdates blijven beschikbaar.\";\n  if (state.phase === \"waiting\") return \"Het weekoverzicht staat klaar om opgehaald te worden.\";\n  if (state.phase === \"fetching\") return \"Linear-bronnen worden opgehaald. Je kunt verder met de meeting.\";\n  if (state.phase === \"summarizing\") return \"De projectsamenvatting wordt gemaakt. Bronnen zijn al beschikbaar.\";\n  if (state.phase === \"failed\") return state.published ? \"Vernieuwen is mislukt. De eerder bewaarde bronnen blijven beschikbaar.\" : \"Linear-bronnen konden niet worden opgehaald.\";\n  if (state.summary.error) return \"De samenvatting kon niet worden gemaakt. Bronnen zijn beschikbaar per project.\";\n  if (state.phase === \"sources-ready\") return \"Bronnen zijn beschikbaar. De projectsamenvatting volgt.\";\n  if (!state.published?.issueCount && state.published?.status === \"complete\") return state.provisional ? \"Nog geen wijzigingen in het opgehaalde deel van deze week.\" : \"Geen wijzigingen gevonden in deze week.\";\n  return \"Bewaard weekoverzicht. Reacties zijn samengevat; verwijzingen openen de oorspronkelijke bronnen.\";\n}\n\n/** Percentages describe saved summary batches, never elapsed time or an unknown fetch total. */\nexport function reviewProgress(state: MeetingReviewStatus | null): { label: string; value: number | undefined } | null {\n  if (!state || state.fetch.error || state.summary.error || state.phase === \"ready\" || state.phase === \"failed\") return null;\n  if (state.phase === \"waiting\") return { label: \"In wachtrij\", value: undefined };\n  if (state.phase === \"fetching\") return { label: \"Bronnen ophalen\", value: undefined };\n  const progress = state.progress;\n  if (!progress || progress.totalBatches <= 0) return { label: \"Samenvatten\", value: undefined };\n  const value = Math.max(0, Math.min(100, Math.floor(100 * progress.completedBatches / progress.totalBatches)));\n  return { label: `Samenvatten ${value}%`, value };\n}\n\n/** The review period ends exclusively; show the last included Dutch calendar date. */\nexport function reviewPeriodLabel(period: { start: string; end: string }): string {\n  const start = new Date(period.start);\n  const end = new Date(Date.parse(period.end) - 1);\n  const options = { timeZone: \"Europe/Amsterdam\" };\n  const year = new Intl.DateTimeFormat(\"nl-NL\", { ...options, year: \"numeric\" });\n  const month = new Intl.DateTimeFormat(\"nl-NL\", { ...options, year: \"numeric\", month: \"numeric\" });\n  const sameYear = year.format(start) === year.format(end);\n  const sameMonth = month.format(start) === month.format(end);\n  const first = new Intl.DateTimeFormat(\"nl-NL\", {\n    ...options, day: \"numeric\", ...(!sameMonth ? { month: \"long\" as const } : {}), ...(!sameYear ? { year: \"numeric\" as const } : {}),\n  }).format(start);\n  const last = new Intl.DateTimeFormat(\"nl-NL\", { ...options, day: \"numeric\", month: \"long\", year: \"numeric\" }).format(end);\n  return `${first}–${last}`;\n}\n\nexport function reviewDate(value: string): string {\n  return new Intl.DateTimeFormat(\"nl-NL\", { dateStyle: \"medium\", timeStyle: \"short\", timeZone: \"Europe/Amsterdam\" }).format(new Date(value));\n}\n\nexport function safeSourceUrl(value: string): string | undefined {\n  try { const url = new URL(value); return url.protocol === \"https:\" || url.protocol === \"http:\" ? url.href : undefined; } catch { return undefined; }\n}\n\nconst markdown = new MarkdownIt({ html: false, linkify: true, typographer: false });\nmarkdown.renderer.rules.link_open = (tokens, index, options, environment, renderer) => {\n  tokens[index].attrSet(\"target\", \"_blank\");\n  tokens[index].attrSet(\"rel\", \"noopener noreferrer\");\n  return renderer.renderToken(tokens, index, options);\n};\n// Source images are escaped labels, so opening a pane never requests a remote tracking image.\nmarkdown.renderer.rules.image = (tokens, index) => markdown.utils.escapeHtml(`[Afbeelding: ${tokens[index].content}]`);\n/** Raw HTML is escaped and markdown-it rejects executable link protocols. */\nexport function renderSourceMarkdown(value: string): string { return markdown.render(value); }\n\nexport type DescriptionDiffRow = { kind: \"same\" | \"removed\" | \"added\"; text: string };\n/** A bounded line diff: long documents use a common prefix/suffix rather than an unbounded LCS matrix. */\nexport function descriptionDiff(options: { before: string; after: string }): DescriptionDiffRow[] {\n  const before = options.before.split(\"\\n\");\n  const after = options.after.split(\"\\n\");\n  let prefix = 0;\n  while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix]) ++prefix;\n  let suffix = 0;\n  while (suffix < before.length - prefix && suffix < after.length - prefix && before[before.length - 1 - suffix] === after[after.length - 1 - suffix]) ++suffix;\n  const oldMiddle = before.slice(prefix, before.length - suffix);\n  const newMiddle = after.slice(prefix, after.length - suffix);\n  const middle: DescriptionDiffRow[] = [];\n  // Cap the quadratic work. The fallback is a literal replacement block and\n  // the pane explicitly says such blocks can contain unchanged middle lines.\n  if (oldMiddle.length * newMiddle.length > 250_000) {\n    middle.push(...oldMiddle.map(text => ({ kind: \"removed\" as const, text })), ...newMiddle.map(text => ({ kind: \"added\" as const, text })));\n  } else {\n    const width = newMiddle.length + 1;\n    const lengths = new Uint32Array((oldMiddle.length + 1) * width);\n    for (let i = oldMiddle.length - 1; i >= 0; --i) {\n      for (let j = newMiddle.length - 1; j >= 0; --j) {\n        lengths[i * width + j] = oldMiddle[i] === newMiddle[j] ? lengths[(i + 1) * width + j + 1] + 1 : Math.max(lengths[(i + 1) * width + j], lengths[i * width + j + 1]);\n      }\n    }\n    let i = 0;\n    let j = 0;\n    while (i < oldMiddle.length || j < newMiddle.length) {\n      if (i < oldMiddle.length && j < newMiddle.length && oldMiddle[i] === newMiddle[j]) {\n        middle.push({ kind: \"same\", text: oldMiddle[i++] });\n        ++j;\n      } else if (i < oldMiddle.length && (j === newMiddle.length || lengths[(i + 1) * width + j] >= lengths[i * width + j + 1])) middle.push({ kind: \"removed\", text: oldMiddle[i++] });\n      else middle.push({ kind: \"added\", text: newMiddle[j++] });\n    }\n  }\n  return [\n    ...before.slice(0, prefix).map(text => ({ kind: \"same\" as const, text })),\n    ...middle,\n    ...before.slice(before.length - suffix).map(text => ({ kind: \"same\" as const, text })),\n  ];\n}\n","<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport type { ReviewIssueSnapshot } from \"@mod-tech42_tools/js/mondays/linear-review-types\";\nimport { api } from \"../../lib/api\";\nimport { describeHistory, descriptionComparison, descriptionDiff, renderSourceMarkdown, reviewDate, safeSourceUrl, sourceTab, type SourceTab } from \"../../lib/meeting-review\";\n\nconst props = defineProps<{ meetingId: number; selection: { issueId: string; sourceId: string; generation: string } }>();\nconst emit = defineEmits<{ close: [] }>();\nconst dialog = ref<HTMLDialogElement | null>(null);\nconst snapshot = ref<ReviewIssueSnapshot | null>(null);\nconst loading = ref(true);\nconst failure = ref(\"\");\nconst active = ref<SourceTab>(\"changes\");\nconst descriptionId = ref(\"current\");\nconst opener = document.activeElement instanceof HTMLElement ? document.activeElement : null;\nlet alive = true;\nconst selected = computed(() => snapshot.value?.sources.find(source => source.id === props.selection.sourceId));\nconst changes = computed(() => snapshot.value?.sources.filter(source => source.kind === \"history\" || source.kind === \"creation\") ?? []);\nconst comments = computed(() => snapshot.value?.sources.filter(source => source.kind === \"comment\") ?? []);\nconst versions = computed(() => snapshot.value?.sources.filter(source => source.kind === \"description-version\") ?? []);\nconst description = computed(() => descriptionId.value === \"current\" ? snapshot.value?.issue.description ?? \"\" : versions.value.find(source => source.id === descriptionId.value)?.text ?? \"\");\nconst comparison = computed(() => snapshot.value ? descriptionComparison({ snapshot: snapshot.value, selectedId: descriptionId.value }) : null);\nconst diff = computed(() => comparison.value ? descriptionDiff({ before: comparison.value.before.text, after: comparison.value.after.text }) : []);\nconst tabs: Array<{ key: SourceTab; label: string }> = [{ key: \"changes\", label: \"Wijzigingen\" }, { key: \"description\", label: \"Beschrijving / vergelijking\" }, { key: \"comments\", label: \"Reacties\" }];\n\nasync function load() {\n  loading.value = true;\n  failure.value = \"\";\n  try {\n    const result = await api.getMeetingReviewSource({ id: props.meetingId, generation: props.selection.generation, issueId: props.selection.issueId });\n    if (!alive) return;\n    snapshot.value = result;\n    if (!result) { failure.value = \"Deze brongeneratie is niet meer beschikbaar. Sluit het paneel en laad het overzicht opnieuw.\"; return; }\n    const source = result.sources.find(item => item.id === props.selection.sourceId);\n    if (props.selection.sourceId && !source) failure.value = \"De aangewezen bron is niet gevonden in deze snapshot. De andere bewaarde bronnen staan hieronder.\";\n    active.value = source ? sourceTab(source) : \"changes\";\n    // A history event only identifies an update. The nearest stored version is\n    // shown as context without pretending it is the event's exact original text.\n    const relevantVersions = versions.value.filter(version => !source || version.time.end <= source.time.end)\n      .sort((a, b) => b.version.contentDataSnapshotAt.localeCompare(a.version.contentDataSnapshotAt));\n    descriptionId.value = source?.kind === \"description-version\" ? source.id : relevantVersions[0]?.id ?? \"current\";\n  } catch { if (alive) failure.value = \"De bron kon niet worden geladen. Probeer opnieuw.\"; }\n  finally { if (alive) { loading.value = false; await focusSource({ focus: true }); } }\n}\nasync function focusSource(options: { focus?: boolean } = {}) {\n  await nextTick();\n  if (!alive) return;\n  const element = [...dialog.value?.querySelectorAll<HTMLElement>(\"[data-source-id]\") ?? []].find(item => item.dataset.sourceId === props.selection.sourceId);\n  if (element && sourceTab(selected.value ?? { kind: \"creation\" }) === active.value) {\n    if (options.focus) element.focus({ preventScroll: true });\n    element.scrollIntoView({ block: \"nearest\" });\n  }\n}\nwatch(active, () => void focusSource());\nfunction onTabKey(event: KeyboardEvent) {\n  const index = tabs.findIndex(tab => tab.key === active.value);\n  const next = event.key === \"ArrowRight\" ? (index + 1) % tabs.length : event.key === \"ArrowLeft\" ? (index + tabs.length - 1) % tabs.length : event.key === \"Home\" ? 0 : event.key === \"End\" ? tabs.length - 1 : -1;\n  if (next < 0) return;\n  event.preventDefault();\n  active.value = tabs[next].key;\n  dialog.value?.querySelector<HTMLButtonElement>(`#source-${active.value}-tab`)?.focus();\n}\nonMounted(() => { dialog.value?.showModal(); void load(); });\nonBeforeUnmount(() => {\n  alive = false;\n  dialog.value?.close();\n  if (opener?.isConnected) opener.focus({ preventScroll: true });\n});\n</script>\n\n<template>\n  <Teleport to=\"body\">\n    <dialog ref=\"dialog\" class=\"ls\" aria-labelledby=\"source-title\" @cancel.prevent=\"emit('close')\" @keydown.stop @click=\"($event.target === dialog) && emit('close')\">\n      <div class=\"ls__shell\">\n        <header class=\"ls__header\">\n          <div><p class=\"ls__meta\">{{ snapshot?.issue.identifier ?? \"Linear-bron\" }} · {{ snapshot?.issue.project?.name ?? \"Zonder project\" }}</p><h2 id=\"source-title\">{{ snapshot?.issue.title ?? \"Bron laden\" }}</h2></div>\n          <button type=\"button\" class=\"ls__close\" aria-label=\"Bronpaneel sluiten\" @click=\"emit('close')\">Sluiten</button>\n        </header>\n        <p v-if=\"loading\" role=\"status\">Brongegevens laden…</p>\n        <p v-if=\"failure\" role=\"alert\" class=\"ls__notice\">{{ failure }} <button v-if=\"!snapshot\" type=\"button\" @click=\"load\">Opnieuw laden</button></p>\n        <template v-if=\"snapshot\">\n          <div class=\"ls__context\"><a v-if=\"safeSourceUrl(snapshot.issue.url)\" :href=\"safeSourceUrl(snapshot.issue.url)\" target=\"_blank\" rel=\"noopener noreferrer\">Open {{ snapshot.issue.identifier }} in Linear</a><span>Opgehaald op {{ reviewDate(snapshot.fetchedAt) }} · Projectindeling bij ophalen</span></div>\n          <p v-if=\"snapshot.historyStatus === 'partial'\" class=\"ls__notice\">Onvolledige gebeurtenishistorie: deze verzameling bevat mogelijk niet alle wijzigingen.</p>\n          <p v-if=\"snapshot.versionsStatus !== 'complete'\" class=\"ls__notice\">{{ snapshot.versionsStatus === \"partial\" ? \"Onvolledige versiehistorie: niet alle beschrijvingsversies zijn beschikbaar.\" : \"Historie niet beschikbaar: de oorspronkelijke beschrijving kan niet voor ieder moment worden gereconstrueerd.\" }}</p>\n          <nav class=\"ls__tabs\" role=\"tablist\" aria-label=\"Brongegevens\" @keydown=\"onTabKey\">\n            <button v-for=\"tab in tabs\" :id=\"`source-${tab.key}-tab`\" :key=\"tab.key\" type=\"button\" role=\"tab\" :aria-selected=\"active === tab.key\" :tabindex=\"active === tab.key ? 0 : -1\" :aria-controls=\"`source-${tab.key}-panel`\" @click=\"active = tab.key\">{{ tab.label }}</button>\n          </nav>\n          <section v-if=\"active === 'changes'\" id=\"source-changes-panel\" class=\"ls__body\" role=\"tabpanel\" aria-labelledby=\"source-changes-tab\">\n            <p v-if=\"!changes.length\">Geen gebeurtenissen bewaard voor dit issue.</p>\n            <article v-for=\"source in changes\" :key=\"source.id\" :data-source-id=\"source.id\" tabindex=\"-1\" class=\"ls__source\" :class=\"{ 'ls__source--selected': source.id === selection.sourceId }\">\n              <p v-if=\"source.id === selection.sourceId\" class=\"ls__selected\">Aangewezen bron</p>\n              <p class=\"ls__meta\">{{ reviewDate(source.time.start) }}<template v-if=\"source.time.precision === 'grouped'\"> t/m {{ reviewDate(source.time.end) }} · gebundelde gebeurtenis</template> · Gebeurtenisactor: {{ source.actor?.name ?? \"Niet meegeleverd\" }}</p>\n              <p v-if=\"source.time.overlapsBoundary\" class=\"ls__notice\">Het tijdbereik overlapt de weekgrens; de exacte wijzigingstijd binnen de week is onzeker.</p>\n              <p v-if=\"source.kind === 'creation'\">Issue aangemaakt. Titel en beschrijving hieronder zijn actuele inhoud bij ophalen.</p>\n              <ul v-else-if=\"source.kind === 'history'\"><li v-for=\"(row, index) in describeHistory(source.history)\" :key=\"index\">{{ row }}</li></ul>\n              <a v-if=\"safeSourceUrl(source.url)\" :href=\"safeSourceUrl(source.url)\" target=\"_blank\" rel=\"noopener noreferrer\">Bekijk in Linear</a>\n            </article>\n          </section>\n          <section v-else-if=\"active === 'description'\" id=\"source-description-panel\" class=\"ls__body\" role=\"tabpanel\" aria-labelledby=\"source-description-tab\">\n            <label class=\"ls__version\">Beschrijvingversie <select v-model=\"descriptionId\" aria-label=\"Beschrijvingversie\"><option value=\"current\">Actuele inhoud bij ophalen · {{ reviewDate(snapshot.fetchedAt) }}</option><option v-for=\"version in versions\" :key=\"version.id\" :value=\"version.id\">Historische versie · {{ reviewDate(version.version.contentDataSnapshotAt) }}{{ version.role === 'comparison-before' ? ' · vóór de periode' : '' }}</option></select></label>\n            <p class=\"ls__notice\">{{ descriptionId === \"current\" ? \"Actuele inhoud bij ophalen. Deze tekst bewijst niet wat er in de reviewweek stond.\" : \"Historische versie uit de bewaarde bron. Een snapshot is geen garantie voor alle tussenliggende wijzigingen.\" }}</p>\n            <div v-if=\"comparison\" class=\"ls__comparison\"><h3>Vergelijking van twee bewaarde snapshots</h3><p>Vóór: {{ reviewDate(comparison.before.version.contentDataSnapshotAt) }}<br>Na: {{ reviewDate(comparison.after.version.contentDataSnapshotAt) }}</p><p class=\"ls__meta\">Regels met − zijn verwijderd; regels met + zijn toegevoegd. Een blok kan ook ongewijzigde tussenregels bevatten.</p><pre class=\"ls__diff\"><span v-for=\"(row, index) in diff\" :key=\"index\" :class=\"`ls__diff--${row.kind}`\">{{ row.kind === 'removed' ? '− ' : row.kind === 'added' ? '+ ' : '  ' }}{{ row.text }}{{ '\\n' }}</span></pre></div>\n            <p v-else-if=\"descriptionId !== 'current'\" class=\"ls__notice\">Geen eerdere snapshot beschikbaar voor een vergelijking. Er wordt geen oude tekst verzonnen.</p>\n            <article :data-source-id=\"descriptionId\" tabindex=\"-1\" class=\"ls__source\" :class=\"{ 'ls__source--selected': descriptionId === selection.sourceId }\"><p v-if=\"descriptionId === selection.sourceId\" class=\"ls__selected\">Aangewezen bron</p><h3>Volledige {{ descriptionId === \"current\" ? \"inhoud bij ophalen\" : \"historische beschrijving\" }}</h3><div v-if=\"description\" class=\"ls__prose\" v-html=\"renderSourceMarkdown(description)\" /><p v-else>Geen beschrijving in deze snapshot.</p></article>\n          </section>\n          <section v-else id=\"source-comments-panel\" class=\"ls__body\" role=\"tabpanel\" aria-labelledby=\"source-comments-tab\">\n            <p v-if=\"!comments.length\">Geen reacties bewaard voor dit issue.</p>\n            <article v-for=\"source in comments\" :key=\"source.id\" :data-source-id=\"source.id\" tabindex=\"-1\" class=\"ls__source\" :class=\"{ 'ls__source--selected': source.id === selection.sourceId }\">\n              <p v-if=\"source.id === selection.sourceId\" class=\"ls__selected\">Aangewezen bron</p><h3>{{ source.comment.user?.name ?? \"Auteur niet meegeleverd\" }}</h3>\n              <p class=\"ls__meta\">Aangemaakt {{ reviewDate(source.comment.createdAt) }} · bijgewerkt {{ reviewDate(source.comment.updatedAt) }}<template v-if=\"source.comment.editedAt\"> · tekst bewerkt {{ reviewDate(source.comment.editedAt) }}</template></p>\n              <p v-if=\"source.textEvidence === 'edited-after-period'\" class=\"ls__notice\">Later bewerkte reactie: deze tekst is na de reviewweek bewerkt. De oorspronkelijke reactietekst is niet beschikbaar.</p>\n              <p v-else class=\"ls__meta\">Bewaarde reactietekst bij ophalen. Een bijgewerkte datum bewijst op zichzelf geen tekstwijziging.</p>\n              <div class=\"ls__prose\" v-html=\"renderSourceMarkdown(source.comment.body)\" /><a v-if=\"safeSourceUrl(source.comment.url)\" :href=\"safeSourceUrl(source.comment.url)\" target=\"_blank\" rel=\"noopener noreferrer\">Open deze reactie in Linear</a>\n            </article>\n          </section>\n        </template>\n      </div>\n    </dialog>\n  </Teleport>\n</template>\n\n<style scoped>\n.ls { --diff-removed-foreground: var(--fire); --diff-removed-background: var(--fire-soft); --diff-added-foreground: var(--t42-green-100); --diff-added-background: var(--t42-green-700); position: fixed; inset: 0 0 0 auto; margin: 0; width: min(860px, 100vw); max-width: 100vw; height: 100dvh; max-height: 100dvh; padding: 0; border: 0; border-left: 1px solid var(--border); background: var(--card); color: var(--foreground); overflow-y: auto; scrollbar-color: var(--hairline-strong) var(--card); }\n.ls::backdrop { background: rgb(0 0 0 / 0.55); }\n.ls__shell { padding: 28px; display: flex; flex-direction: column; gap: 18px; }\n.ls__header { display: flex; align-items: flex-start; gap: 20px; justify-content: space-between; }\n.ls h2 { margin: 4px 0 0; font-size: 25px; font-weight: 500; line-height: 1.35; overflow-wrap: anywhere; }\n.ls h3 { margin: 0 0 8px; font-size: 17px; font-weight: 500; }\n.ls p { margin: 0; line-height: 1.6; }\n.ls button, .ls select { cursor: pointer; padding: 8px 10px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--field); color: var(--foreground); font: inherit; }\n.ls__close { flex: none; }\n.ls a { color: var(--primary-hover); text-underline-offset: 3px; overflow-wrap: anywhere; }\n.ls__context { display: flex; flex-direction: column; gap: 8px; font-size: 13px; }\n.ls__context span, .ls__meta { color: var(--muted-foreground); font-size: 12px; }\n.ls__notice { padding: 12px; border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--field); font-size: 13px; }\n.ls__tabs { display: flex; gap: 8px; flex-wrap: wrap; padding-bottom: 12px; border-bottom: 1px solid var(--border); }\n.ls__tabs button { border-color: transparent; background: transparent; color: var(--muted-foreground); }\n.ls__tabs button[aria-selected=\"true\"] { border-color: var(--border); background: var(--hover-strong); color: var(--foreground); }\n.ls__body { display: flex; flex-direction: column; gap: 20px; min-width: 0; }\n.ls__source { padding: 16px; border: 1px solid var(--border); border-radius: var(--radius-md); display: flex; flex-direction: column; gap: 10px; scroll-margin: 24px; overflow-wrap: anywhere; }\n.ls__source--selected { border-color: var(--primary); background: var(--field); }\n.ls__selected { color: var(--primary-hover); font-size: 12px; font-weight: 600; }\n.ls__source ul { margin: 0; padding-left: 20px; line-height: 1.65; }\n.ls__version { display: flex; flex-direction: column; gap: 8px; font-size: 13px; }\n.ls__version select { min-width: 0; width: 100%; }\n.ls__comparison { display: flex; flex-direction: column; gap: 10px; }\n.ls__diff { margin: 0; padding: 12px; background: var(--background); font: 13px/1.65 monospace; white-space: pre-wrap; overflow-wrap: anywhere; }\n.ls__diff span { display: inline; }\n.ls__diff--removed { color: var(--diff-removed-foreground); background: var(--diff-removed-background); }\n.ls__diff--added { color: var(--diff-added-foreground); background: var(--diff-added-background); }\n.ls__prose { line-height: 1.7; max-width: 75ch; }\n.ls__prose :deep(pre) { white-space: pre-wrap; overflow-wrap: anywhere; background: var(--background); padding: 12px; font-size: 13px; }\n.ls__prose :deep(table) { display: block; max-width: 100%; overflow-x: auto; }\n.ls__prose :deep(a) { color: var(--primary-hover); }\n.ls button:hover { background: var(--hover-strong); }\n.ls button:focus-visible, .ls a:focus-visible, .ls select:focus-visible, .ls__source:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; }\n@media (max-width: 600px) { .ls__shell { padding: 18px; } .ls h2 { font-size: 21px; } .ls__header { gap: 12px; } }\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, vModelSelect as _vModelSelect, withDirectives as _withDirectives, withModifiers as _withModifiers, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"ls__shell\" }\nconst _hoisted_2 = { class: \"ls__header\" }\nconst _hoisted_3 = { class: \"ls__meta\" }\nconst _hoisted_4 = { id: \"source-title\" }\nconst _hoisted_5 = {\n  key: 0,\n  role: \"status\"\n}\nconst _hoisted_6 = {\n  key: 1,\n  role: \"alert\",\n  class: \"ls__notice\"\n}\nconst _hoisted_7 = { class: \"ls__context\" }\nconst _hoisted_8 = [\"href\"]\nconst _hoisted_9 = {\n  key: 0,\n  class: \"ls__notice\"\n}\nconst _hoisted_10 = {\n  key: 1,\n  class: \"ls__notice\"\n}\nconst _hoisted_11 = [\"id\", \"aria-selected\", \"tabindex\", \"aria-controls\", \"onClick\"]\nconst _hoisted_12 = {\n  key: 2,\n  id: \"source-changes-panel\",\n  class: \"ls__body\",\n  role: \"tabpanel\",\n  \"aria-labelledby\": \"source-changes-tab\"\n}\nconst _hoisted_13 = { key: 0 }\nconst _hoisted_14 = [\"data-source-id\"]\nconst _hoisted_15 = {\n  key: 0,\n  class: \"ls__selected\"\n}\nconst _hoisted_16 = { class: \"ls__meta\" }\nconst _hoisted_17 = {\n  key: 1,\n  class: \"ls__notice\"\n}\nconst _hoisted_18 = { key: 2 }\nconst _hoisted_19 = { key: 3 }\nconst _hoisted_20 = [\"href\"]\nconst _hoisted_21 = {\n  key: 3,\n  id: \"source-description-panel\",\n  class: \"ls__body\",\n  role: \"tabpanel\",\n  \"aria-labelledby\": \"source-description-tab\"\n}\nconst _hoisted_22 = { class: \"ls__version\" }\nconst _hoisted_23 = { value: \"current\" }\nconst _hoisted_24 = [\"value\"]\nconst _hoisted_25 = { class: \"ls__notice\" }\nconst _hoisted_26 = {\n  key: 0,\n  class: \"ls__comparison\"\n}\nconst _hoisted_27 = { class: \"ls__diff\" }\nconst _hoisted_28 = {\n  key: 1,\n  class: \"ls__notice\"\n}\nconst _hoisted_29 = [\"data-source-id\"]\nconst _hoisted_30 = {\n  key: 0,\n  class: \"ls__selected\"\n}\nconst _hoisted_31 = [\"innerHTML\"]\nconst _hoisted_32 = { key: 2 }\nconst _hoisted_33 = {\n  key: 4,\n  id: \"source-comments-panel\",\n  class: \"ls__body\",\n  role: \"tabpanel\",\n  \"aria-labelledby\": \"source-comments-tab\"\n}\nconst _hoisted_34 = { key: 0 }\nconst _hoisted_35 = [\"data-source-id\"]\nconst _hoisted_36 = {\n  key: 0,\n  class: \"ls__selected\"\n}\nconst _hoisted_37 = { class: \"ls__meta\" }\nconst _hoisted_38 = {\n  key: 1,\n  class: \"ls__notice\"\n}\nconst _hoisted_39 = {\n  key: 2,\n  class: \"ls__meta\"\n}\nconst _hoisted_40 = [\"innerHTML\"]\nconst _hoisted_41 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    _createElementVNode(\"dialog\", {\n      ref: \"dialog\",\n      class: \"ls\",\n      \"aria-labelledby\": \"source-title\",\n      onCancel: _cache[2] || (_cache[2] = _withModifiers($event => ($setup.emit('close')), [\"prevent\"])),\n      onKeydown: _cache[3] || (_cache[3] = _withModifiers(() => {}, [\"stop\"])),\n      onClick: _cache[4] || (_cache[4] = $event => (($event.target === $setup.dialog) && $setup.emit('close')))\n    }, [\n      _createElementVNode(\"div\", _hoisted_1, [\n        _createElementVNode(\"header\", _hoisted_2, [\n          _createElementVNode(\"div\", null, [\n            _createElementVNode(\"p\", _hoisted_3, _toDisplayString($setup.snapshot?.issue.identifier ?? \"Linear-bron\") + \" · \" + _toDisplayString($setup.snapshot?.issue.project?.name ?? \"Zonder project\"), 1 /* TEXT */),\n            _createElementVNode(\"h2\", _hoisted_4, _toDisplayString($setup.snapshot?.issue.title ?? \"Bron laden\"), 1 /* TEXT */)\n          ]),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"ls__close\",\n            \"aria-label\": \"Bronpaneel sluiten\",\n            onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('close')))\n          }, \"Sluiten\")\n        ]),\n        ($setup.loading)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, \"Brongegevens laden…\"))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.failure)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, [\n              _createTextVNode(_toDisplayString($setup.failure) + \" \", 1 /* TEXT */),\n              (!$setup.snapshot)\n                ? (_openBlock(), _createElementBlock(\"button\", {\n                    key: 0,\n                    type: \"button\",\n                    onClick: $setup.load\n                  }, \"Opnieuw laden\"))\n                : _createCommentVNode(\"v-if\", true)\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.snapshot)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n              _createElementVNode(\"div\", _hoisted_7, [\n                ($setup.safeSourceUrl($setup.snapshot.issue.url))\n                  ? (_openBlock(), _createElementBlock(\"a\", {\n                      key: 0,\n                      href: $setup.safeSourceUrl($setup.snapshot.issue.url),\n                      target: \"_blank\",\n                      rel: \"noopener noreferrer\"\n                    }, \"Open \" + _toDisplayString($setup.snapshot.issue.identifier) + \" in Linear\", 9 /* TEXT, PROPS */, _hoisted_8))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"span\", null, \"Opgehaald op \" + _toDisplayString($setup.reviewDate($setup.snapshot.fetchedAt)) + \" · Projectindeling bij ophalen\", 1 /* TEXT */)\n              ]),\n              ($setup.snapshot.historyStatus === 'partial')\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_9, \"Onvolledige gebeurtenishistorie: deze verzameling bevat mogelijk niet alle wijzigingen.\"))\n                : _createCommentVNode(\"v-if\", true),\n              ($setup.snapshot.versionsStatus !== 'complete')\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_10, _toDisplayString($setup.snapshot.versionsStatus === \"partial\" ? \"Onvolledige versiehistorie: niet alle beschrijvingsversies zijn beschikbaar.\" : \"Historie niet beschikbaar: de oorspronkelijke beschrijving kan niet voor ieder moment worden gereconstrueerd.\"), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true),\n              _createElementVNode(\"nav\", {\n                class: \"ls__tabs\",\n                role: \"tablist\",\n                \"aria-label\": \"Brongegevens\",\n                onKeydown: $setup.onTabKey\n              }, [\n                (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.tabs, (tab) => {\n                  return _createElementVNode(\"button\", {\n                    id: `source-${tab.key}-tab`,\n                    key: tab.key,\n                    type: \"button\",\n                    role: \"tab\",\n                    \"aria-selected\": $setup.active === tab.key,\n                    tabindex: $setup.active === tab.key ? 0 : -1,\n                    \"aria-controls\": `source-${tab.key}-panel`,\n                    onClick: $event => ($setup.active = tab.key)\n                  }, _toDisplayString(tab.label), 9 /* TEXT, PROPS */, _hoisted_11)\n                }), 64 /* STABLE_FRAGMENT */))\n              ], 32 /* NEED_HYDRATION */),\n              ($setup.active === 'changes')\n                ? (_openBlock(), _createElementBlock(\"section\", _hoisted_12, [\n                    (!$setup.changes.length)\n                      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, \"Geen gebeurtenissen bewaard voor dit issue.\"))\n                      : _createCommentVNode(\"v-if\", true),\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.changes, (source) => {\n                      return (_openBlock(), _createElementBlock(\"article\", {\n                        key: source.id,\n                        \"data-source-id\": source.id,\n                        tabindex: \"-1\",\n                        class: _normalizeClass([\"ls__source\", { 'ls__source--selected': source.id === $props.selection.sourceId }])\n                      }, [\n                        (source.id === $props.selection.sourceId)\n                          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_15, \"Aangewezen bron\"))\n                          : _createCommentVNode(\"v-if\", true),\n                        _createElementVNode(\"p\", _hoisted_16, [\n                          _createTextVNode(_toDisplayString($setup.reviewDate(source.time.start)), 1 /* TEXT */),\n                          (source.time.precision === 'grouped')\n                            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                _createTextVNode(\" t/m \" + _toDisplayString($setup.reviewDate(source.time.end)) + \" · gebundelde gebeurtenis\", 1 /* TEXT */)\n                              ], 64 /* STABLE_FRAGMENT */))\n                            : _createCommentVNode(\"v-if\", true),\n                          _createTextVNode(\" · Gebeurtenisactor: \" + _toDisplayString(source.actor?.name ?? \"Niet meegeleverd\"), 1 /* TEXT */)\n                        ]),\n                        (source.time.overlapsBoundary)\n                          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_17, \"Het tijdbereik overlapt de weekgrens; de exacte wijzigingstijd binnen de week is onzeker.\"))\n                          : _createCommentVNode(\"v-if\", true),\n                        (source.kind === 'creation')\n                          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_18, \"Issue aangemaakt. Titel en beschrijving hieronder zijn actuele inhoud bij ophalen.\"))\n                          : (source.kind === 'history')\n                            ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_19, [\n                                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.describeHistory(source.history), (row, index) => {\n                                  return (_openBlock(), _createElementBlock(\"li\", { key: index }, _toDisplayString(row), 1 /* TEXT */))\n                                }), 128 /* KEYED_FRAGMENT */))\n                              ]))\n                            : _createCommentVNode(\"v-if\", true),\n                        ($setup.safeSourceUrl(source.url))\n                          ? (_openBlock(), _createElementBlock(\"a\", {\n                              key: 4,\n                              href: $setup.safeSourceUrl(source.url),\n                              target: \"_blank\",\n                              rel: \"noopener noreferrer\"\n                            }, \"Bekijk in Linear\", 8 /* PROPS */, _hoisted_20))\n                          : _createCommentVNode(\"v-if\", true)\n                      ], 10 /* CLASS, PROPS */, _hoisted_14))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ]))\n                : ($setup.active === 'description')\n                  ? (_openBlock(), _createElementBlock(\"section\", _hoisted_21, [\n                      _createElementVNode(\"label\", _hoisted_22, [\n                        _cache[5] || (_cache[5] = _createTextVNode(\"Beschrijvingversie \", -1 /* CACHED */)),\n                        _withDirectives(_createElementVNode(\"select\", {\n                          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.descriptionId) = $event)),\n                          \"aria-label\": \"Beschrijvingversie\"\n                        }, [\n                          _createElementVNode(\"option\", _hoisted_23, \"Actuele inhoud bij ophalen · \" + _toDisplayString($setup.reviewDate($setup.snapshot.fetchedAt)), 1 /* TEXT */),\n                          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.versions, (version) => {\n                            return (_openBlock(), _createElementBlock(\"option\", {\n                              key: version.id,\n                              value: version.id\n                            }, \"Historische versie · \" + _toDisplayString($setup.reviewDate(version.version.contentDataSnapshotAt)) + _toDisplayString(version.role === 'comparison-before' ? ' · vóór de periode' : ''), 9 /* TEXT, PROPS */, _hoisted_24))\n                          }), 128 /* KEYED_FRAGMENT */))\n                        ], 512 /* NEED_PATCH */), [\n                          [_vModelSelect, $setup.descriptionId]\n                        ])\n                      ]),\n                      _createElementVNode(\"p\", _hoisted_25, _toDisplayString($setup.descriptionId === \"current\" ? \"Actuele inhoud bij ophalen. Deze tekst bewijst niet wat er in de reviewweek stond.\" : \"Historische versie uit de bewaarde bron. Een snapshot is geen garantie voor alle tussenliggende wijzigingen.\"), 1 /* TEXT */),\n                      ($setup.comparison)\n                        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_26, [\n                            _cache[7] || (_cache[7] = _createElementVNode(\"h3\", null, \"Vergelijking van twee bewaarde snapshots\", -1 /* CACHED */)),\n                            _createElementVNode(\"p\", null, [\n                              _createTextVNode(\"Vóór: \" + _toDisplayString($setup.reviewDate($setup.comparison.before.version.contentDataSnapshotAt)), 1 /* TEXT */),\n                              _cache[6] || (_cache[6] = _createElementVNode(\"br\", null, null, -1 /* CACHED */)),\n                              _createTextVNode(\"Na: \" + _toDisplayString($setup.reviewDate($setup.comparison.after.version.contentDataSnapshotAt)), 1 /* TEXT */)\n                            ]),\n                            _cache[8] || (_cache[8] = _createElementVNode(\"p\", { class: \"ls__meta\" }, \"Regels met − zijn verwijderd; regels met + zijn toegevoegd. Een blok kan ook ongewijzigde tussenregels bevatten.\", -1 /* CACHED */)),\n                            _createElementVNode(\"pre\", _hoisted_27, [\n                              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.diff, (row, index) => {\n                                return (_openBlock(), _createElementBlock(\"span\", {\n                                  key: index,\n                                  class: _normalizeClass(`ls__diff--${row.kind}`)\n                                }, _toDisplayString(row.kind === 'removed' ? '− ' : row.kind === 'added' ? '+ ' : '  ') + _toDisplayString(row.text) + _toDisplayString('\\n'), 3 /* TEXT, CLASS */))\n                              }), 128 /* KEYED_FRAGMENT */))\n                            ])\n                          ]))\n                        : ($setup.descriptionId !== 'current')\n                          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_28, \"Geen eerdere snapshot beschikbaar voor een vergelijking. Er wordt geen oude tekst verzonnen.\"))\n                          : _createCommentVNode(\"v-if\", true),\n                      _createElementVNode(\"article\", {\n                        \"data-source-id\": $setup.descriptionId,\n                        tabindex: \"-1\",\n                        class: _normalizeClass([\"ls__source\", { 'ls__source--selected': $setup.descriptionId === $props.selection.sourceId }])\n                      }, [\n                        ($setup.descriptionId === $props.selection.sourceId)\n                          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_30, \"Aangewezen bron\"))\n                          : _createCommentVNode(\"v-if\", true),\n                        _createElementVNode(\"h3\", null, \"Volledige \" + _toDisplayString($setup.descriptionId === \"current\" ? \"inhoud bij ophalen\" : \"historische beschrijving\"), 1 /* TEXT */),\n                        ($setup.description)\n                          ? (_openBlock(), _createElementBlock(\"div\", {\n                              key: 1,\n                              class: \"ls__prose\",\n                              innerHTML: $setup.renderSourceMarkdown($setup.description)\n                            }, null, 8 /* PROPS */, _hoisted_31))\n                          : (_openBlock(), _createElementBlock(\"p\", _hoisted_32, \"Geen beschrijving in deze snapshot.\"))\n                      ], 10 /* CLASS, PROPS */, _hoisted_29)\n                    ]))\n                  : (_openBlock(), _createElementBlock(\"section\", _hoisted_33, [\n                      (!$setup.comments.length)\n                        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_34, \"Geen reacties bewaard voor dit issue.\"))\n                        : _createCommentVNode(\"v-if\", true),\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.comments, (source) => {\n                        return (_openBlock(), _createElementBlock(\"article\", {\n                          key: source.id,\n                          \"data-source-id\": source.id,\n                          tabindex: \"-1\",\n                          class: _normalizeClass([\"ls__source\", { 'ls__source--selected': source.id === $props.selection.sourceId }])\n                        }, [\n                          (source.id === $props.selection.sourceId)\n                            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_36, \"Aangewezen bron\"))\n                            : _createCommentVNode(\"v-if\", true),\n                          _createElementVNode(\"h3\", null, _toDisplayString(source.comment.user?.name ?? \"Auteur niet meegeleverd\"), 1 /* TEXT */),\n                          _createElementVNode(\"p\", _hoisted_37, [\n                            _createTextVNode(\"Aangemaakt \" + _toDisplayString($setup.reviewDate(source.comment.createdAt)) + \" · bijgewerkt \" + _toDisplayString($setup.reviewDate(source.comment.updatedAt)), 1 /* TEXT */),\n                            (source.comment.editedAt)\n                              ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                  _createTextVNode(\" · tekst bewerkt \" + _toDisplayString($setup.reviewDate(source.comment.editedAt)), 1 /* TEXT */)\n                                ], 64 /* STABLE_FRAGMENT */))\n                              : _createCommentVNode(\"v-if\", true)\n                          ]),\n                          (source.textEvidence === 'edited-after-period')\n                            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_38, \"Later bewerkte reactie: deze tekst is na de reviewweek bewerkt. De oorspronkelijke reactietekst is niet beschikbaar.\"))\n                            : (_openBlock(), _createElementBlock(\"p\", _hoisted_39, \"Bewaarde reactietekst bij ophalen. Een bijgewerkte datum bewijst op zichzelf geen tekstwijziging.\")),\n                          _createElementVNode(\"div\", {\n                            class: \"ls__prose\",\n                            innerHTML: $setup.renderSourceMarkdown(source.comment.body)\n                          }, null, 8 /* PROPS */, _hoisted_40),\n                          ($setup.safeSourceUrl(source.comment.url))\n                            ? (_openBlock(), _createElementBlock(\"a\", {\n                                key: 3,\n                                href: $setup.safeSourceUrl(source.comment.url),\n                                target: \"_blank\",\n                                rel: \"noopener noreferrer\"\n                              }, \"Open deze reactie in Linear\", 8 /* PROPS */, _hoisted_41))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 10 /* CLASS, PROPS */, _hoisted_35))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]))\n            ], 64 /* STABLE_FRAGMENT */))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ], 544 /* NEED_HYDRATION, NEED_PATCH */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearSourcePanel.vue\";script.__scopeId = \"data-v-d053e6e9\";export default script;","import { toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, vModelSelect as _vModelSelect, withDirectives as _withDirectives, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"lw\",\n  \"aria-label\": \"Linear-weekoverzicht\"\n}\nconst _hoisted_2 = { class: \"lw__header\" }\nconst _hoisted_3 = { class: \"board-title\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"lw__error\",\n  role: \"alert\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"lw__notice\"\n}\nconst _hoisted_6 = {\n  key: 2,\n  class: \"lw__error\",\n  role: \"alert\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"lw__filter\"\n}\nconst _hoisted_9 = [\"value\"]\nconst _hoisted_10 = [\"aria-label\"]\nconst _hoisted_11 = {\n  key: 0,\n  class: \"lw__blocks\"\n}\nconst _hoisted_12 = [\"href\"]\nconst _hoisted_13 = {\n  key: 0,\n  class: \"lw__attention\"\n}\nconst _hoisted_14 = {\n  key: 1,\n  class: \"lw__meta\"\n}\nconst _hoisted_15 = [\"open\"]\nconst _hoisted_16 = [\"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"h2\", _hoisted_3, [\n        _cache[2] || (_cache[2] = _createTextVNode(\"Linear\", -1 /* CACHED */)),\n        ($setup.periodLabel)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _createTextVNode(\" · \" + _toDisplayString($setup.periodLabel), 1 /* TEXT */)\n            ], 64 /* STABLE_FRAGMENT */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      ($setup.retryableReviewError($setup.status))\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($setup.reviewMessage($setup.status)), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.reviewNotice($setup.status))\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.reviewNotice($setup.status)), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.failure)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, [\n            _createTextVNode(_toDisplayString($setup.failure) + \" \", 1 /* TEXT */),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              onClick: $setup.reload\n            }, \"Opnieuw laden\")\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.retryableReviewError($setup.status))\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 3,\n            type: \"button\",\n            class: \"lw__retry\",\n            disabled: $setup.retrying,\n            onClick: $setup.retry\n          }, _toDisplayString($setup.retrying ? \"Opnieuw proberen…\" : $setup.status?.summary.error && !$setup.status?.fetch.error ? \"Samenvatting opnieuw proberen\" : \"Bronnen opnieuw ophalen\"), 9 /* TEXT, PROPS */, _hoisted_7))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    ($setup.projects.length > 1)\n      ? (_openBlock(), _createElementBlock(\"label\", _hoisted_8, [\n          _cache[4] || (_cache[4] = _createTextVNode(\"Project \", -1 /* CACHED */)),\n          _withDirectives(_createElementVNode(\"select\", {\n            \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.projectFilter) = $event)),\n            \"aria-label\": \"Project selecteren\"\n          }, [\n            _cache[3] || (_cache[3] = _createElementVNode(\"option\", { value: \"all\" }, \"Alle projecten\", -1 /* CACHED */)),\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.projects, (project) => {\n              return (_openBlock(), _createElementBlock(\"option\", {\n                key: project.id,\n                value: project.id\n              }, _toDisplayString(project.name), 9 /* TEXT, PROPS */, _hoisted_9))\n            }), 128 /* KEYED_FRAGMENT */))\n          ], 512 /* NEED_PATCH */), [\n            [_vModelSelect, $setup.projectFilter]\n          ])\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.shownProjects, (project) => {\n      return (_openBlock(), _createElementBlock(\"section\", {\n        key: project.id,\n        class: \"lw__project\",\n        \"aria-label\": project.name\n      }, [\n        _createElementVNode(\"header\", null, [\n          _createElementVNode(\"h3\", null, _toDisplayString(project.name), 1 /* TEXT */),\n          _createElementVNode(\"span\", null, _toDisplayString(project.issues.length) + \" issues · \" + _toDisplayString(project.sourceCount) + \" bronnen\", 1 /* TEXT */)\n        ]),\n        (project.issueBlocks.length)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(project.issueBlocks, (block) => {\n                return (_openBlock(), _createElementBlock(\"article\", {\n                  key: block.id,\n                  class: \"lw__block\"\n                }, [\n                  _createElementVNode(\"h4\", null, [\n                    (block.url)\n                      ? (_openBlock(), _createElementBlock(\"a\", {\n                          key: 0,\n                          href: block.url,\n                          target: \"_blank\",\n                          rel: \"noopener noreferrer\"\n                        }, [\n                          _createTextVNode(_toDisplayString(block.identifier), 1 /* TEXT */),\n                          (block.title)\n                            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                _createTextVNode(\" · \" + _toDisplayString(block.title), 1 /* TEXT */)\n                              ], 64 /* STABLE_FRAGMENT */))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 8 /* PROPS */, _hoisted_12))\n                      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                          _createTextVNode(_toDisplayString(block.identifier), 1 /* TEXT */),\n                          (block.title)\n                            ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                                _createTextVNode(\" · \" + _toDisplayString(block.title), 1 /* TEXT */)\n                              ], 64 /* STABLE_FRAGMENT */))\n                            : _createCommentVNode(\"v-if\", true)\n                        ], 64 /* STABLE_FRAGMENT */))\n                  ]),\n                  _createElementVNode(\"p\", null, [\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(block.claims, (claim, index) => {\n                      return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n                        _createTextVNode(_toDisplayString(index ? \" \" : \"\"), 1 /* TEXT */),\n                        (claim.kind === 'attention')\n                          ? (_openBlock(), _createElementBlock(\"strong\", _hoisted_13, \"Aandachtspunt: \"))\n                          : _createCommentVNode(\"v-if\", true),\n                        _createTextVNode(_toDisplayString(claim.text), 1 /* TEXT */)\n                      ], 64 /* STABLE_FRAGMENT */))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ])\n                ]))\n              }), 128 /* KEYED_FRAGMENT */))\n            ]))\n          : (_openBlock(), _createElementBlock(\"p\", _hoisted_14, \"Geen samenvatting beschikbaar voor dit project. Open een issue om de bewaarde bronnen te lezen.\")),\n        _createElementVNode(\"details\", {\n          class: \"lw__issues\",\n          open: !project.claims.length\n        }, [\n          _createElementVNode(\"summary\", null, \"Alle \" + _toDisplayString(project.issues.length) + \" issues en hun bronnen\", 1 /* TEXT */),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(project.issues, (issue) => {\n            return (_openBlock(), _createElementBlock(\"button\", {\n              key: issue.id,\n              type: \"button\",\n              onClick: $event => ($setup.openSource({ issueId: issue.id, sourceId: '' }))\n            }, [\n              _createElementVNode(\"strong\", null, _toDisplayString(issue.identifier), 1 /* TEXT */),\n              _createTextVNode(\" \" + _toDisplayString(issue.title) + \" \", 1 /* TEXT */),\n              _createElementVNode(\"span\", null, _toDisplayString(issue.sourceCount) + \" bronnen\", 1 /* TEXT */)\n            ], 8 /* PROPS */, _hoisted_16))\n          }), 128 /* KEYED_FRAGMENT */))\n        ], 8 /* PROPS */, _hoisted_15)\n      ], 8 /* PROPS */, _hoisted_10))\n    }), 128 /* KEYED_FRAGMENT */)),\n    ($setup.selection && $setup.store.meeting.value)\n      ? (_openBlock(), _createBlock($setup[\"LinearSourcePanel\"], {\n          key: `${$setup.store.meeting.value.id}:${$setup.selection.generation}:${$setup.selection.issueId}:${$setup.selection.sourceId}`,\n          \"meeting-id\": $setup.store.meeting.value.id,\n          selection: $setup.selection,\n          onClose: _cache[1] || (_cache[1] = $event => ($setup.selection = null))\n        }, null, 8 /* PROPS */, [\"meeting-id\", \"selection\"]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/LinearWeekOverview.vue\";script.__scopeId = \"data-v-d4a92d71\";export default script;","<template>\n  <!-- Sent in from the meeting list before the meeting; also from someone who is not at the table. -->\n  <section class=\"mx\" aria-label=\"Vooraf ingestuurd\">\n    <p v-if=\"!inputs.length\" class=\"mx__empty\">Nog niets vooraf ingestuurd. Iedereen kan punten insturen vanaf het meetingoverzicht.</p>\n    <div v-else class=\"mx__list\">\n      <div v-for=\"(input, index) in inputs\" :key=\"input.id\" class=\"mx__note\" :style=\"{ transform: `rotate(${tilt(index + 2)})` }\">\n        <div class=\"mx__who\">\n          <PersonAvatar :name=\"input.name\" />\n          <span class=\"mx__name\">{{ input.name }}</span>\n        </div>\n        <time class=\"mx__date\" :datetime=\"input.createdAt\">Ingediend {{ fmtInputDate(input.createdAt) }}</time>\n        <p class=\"mx__text\"><LinkedText :text=\"input.text\" /></p>\n      </div>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useMeetingStore } from \"../../lib/meeting-store\";\nimport { fmtInputDate, tilt } from \"../../lib/mondays-format\";\nimport PersonAvatar from \"./PersonAvatar.vue\";\nimport LinkedText from \"../LinkedText.vue\";\n\nconst store = useMeetingStore();\nconst inputs = computed(() => (store.meeting.value?.inputs ?? []).map(input => ({\n  ...input,\n  name: store.people.value.find(p => p.id === input.personId)?.name ?? \"Onbekend\",\n})));\n</script>\n\n<style scoped>\n.mx { display: flex; flex-direction: column; gap: 18px; }\n.mx__empty { margin: 0; font-size: 14px; color: var(--muted-foreground); }\n.mx__list {\n  display: grid;\n  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));\n  gap: 28px;\n}\n.mx__note {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n  padding: 18px 22px;\n  background: var(--sticky-note);\n  color: var(--ink);\n}\n.mx__who { display: flex; align-items: center; gap: 12px; }\n.mx__name { font-size: 16px; font-weight: 500; }\n.mx__date { font-size: 12px; }\n.mx__text { margin: 0; font-size: 16px; line-height: 1.45; white-space: pre-wrap; overflow-wrap: anywhere; }\n</style>\n","import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"mx\",\n  \"aria-label\": \"Vooraf ingestuurd\"\n}\nconst _hoisted_2 = {\n  key: 0,\n  class: \"mx__empty\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"mx__list\"\n}\nconst _hoisted_4 = { class: \"mx__who\" }\nconst _hoisted_5 = { class: \"mx__name\" }\nconst _hoisted_6 = [\"datetime\"]\nconst _hoisted_7 = { class: \"mx__text\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Sent in from the meeting list before the meeting; also from someone who is not at the table. \"),\n    _createElementVNode(\"section\", _hoisted_1, [\n      (!$setup.inputs.length)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, \"Nog niets vooraf ingestuurd. Iedereen kan punten insturen vanaf het meetingoverzicht.\"))\n        : (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.inputs, (input, index) => {\n              return (_openBlock(), _createElementBlock(\"div\", {\n                key: input.id,\n                class: \"mx__note\",\n                style: _normalizeStyle({ transform: `rotate(${$setup.tilt(index + 2)})` })\n              }, [\n                _createElementVNode(\"div\", _hoisted_4, [\n                  _createVNode($setup[\"PersonAvatar\"], {\n                    name: input.name\n                  }, null, 8 /* PROPS */, [\"name\"]),\n                  _createElementVNode(\"span\", _hoisted_5, _toDisplayString(input.name), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"time\", {\n                  class: \"mx__date\",\n                  datetime: input.createdAt\n                }, \"Ingediend \" + _toDisplayString($setup.fmtInputDate(input.createdAt)), 9 /* TEXT, PROPS */, _hoisted_6),\n                _createElementVNode(\"p\", _hoisted_7, [\n                  _createVNode($setup[\"LinkedText\"], {\n                    text: input.text\n                  }, null, 8 /* PROPS */, [\"text\"])\n                ])\n              ], 4 /* STYLE */))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]))\n    ])\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingInputs.vue\";script.__scopeId = \"data-v-851d8a1a\";export default script;","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createVNode as _createVNode, vShow as _vShow, withDirectives as _withDirectives, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = [\"aria-selected\", \"tabindex\"]\nconst _hoisted_2 = [\"aria-selected\", \"tabindex\"]\nconst _hoisted_3 = {\n  key: 0,\n  class: \"bu-count\"\n}\nconst _hoisted_4 = [\"aria-selected\", \"tabindex\"]\nconst _hoisted_5 = {\n  id: \"updates-linear-panel\",\n  role: \"tabpanel\",\n  \"aria-labelledby\": \"updates-linear-tab\"\n}\nconst _hoisted_6 = {\n  id: \"updates-input-panel\",\n  role: \"tabpanel\",\n  \"aria-labelledby\": \"updates-input-tab\"\n}\nconst _hoisted_7 = {\n  id: \"updates-team-panel\",\n  role: \"tabpanel\",\n  \"aria-labelledby\": \"updates-team-tab\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"div\", {\n      class: \"bu-tabs\",\n      role: \"tablist\",\n      \"aria-label\": \"Updatesweergave\",\n      onKeydown: $setup.onTabKey\n    }, [\n      _createElementVNode(\"button\", {\n        id: \"updates-linear-tab\",\n        type: \"button\",\n        role: \"tab\",\n        \"data-mode\": \"linear\",\n        \"aria-selected\": $setup.mode === 'linear',\n        tabindex: $setup.mode === 'linear' ? 0 : -1,\n        \"aria-controls\": \"updates-linear-panel\",\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.select('linear')))\n      }, \"Linear-weekoverzicht\", 8 /* PROPS */, _hoisted_1),\n      _createElementVNode(\"button\", {\n        id: \"updates-input-tab\",\n        type: \"button\",\n        role: \"tab\",\n        \"data-mode\": \"input\",\n        \"aria-selected\": $setup.mode === 'input',\n        tabindex: $setup.mode === 'input' ? 0 : -1,\n        \"aria-controls\": \"updates-input-panel\",\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.select('input')))\n      }, [\n        _cache[3] || (_cache[3] = _createTextVNode(\"Vooraf ingestuurd\", -1 /* CACHED */)),\n        ($setup.inputCount)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString($setup.inputCount), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ], 8 /* PROPS */, _hoisted_2),\n      _createElementVNode(\"button\", {\n        id: \"updates-team-tab\",\n        type: \"button\",\n        role: \"tab\",\n        \"data-mode\": \"team\",\n        \"aria-selected\": $setup.mode === 'team',\n        tabindex: $setup.mode === 'team' ? 0 : -1,\n        \"aria-controls\": \"updates-team-panel\",\n        onClick: _cache[2] || (_cache[2] = $event => ($setup.select('team')))\n      }, \"Teamupdates\", 8 /* PROPS */, _hoisted_4)\n    ], 32 /* NEED_HYDRATION */),\n    _createCommentVNode(\" Keep both views mounted: tab changes must not discard pending manual edits. \"),\n    _withDirectives(_createElementVNode(\"div\", _hoisted_5, [\n      _createVNode($setup[\"LinearWeekOverview\"])\n    ], 512 /* NEED_PATCH */), [\n      [_vShow, $setup.mode === 'linear']\n    ]),\n    _withDirectives(_createElementVNode(\"div\", _hoisted_6, [\n      _createVNode($setup[\"MeetingInputs\"])\n    ], 512 /* NEED_PATCH */), [\n      [_vShow, $setup.mode === 'input']\n    ]),\n    _withDirectives(_createElementVNode(\"div\", _hoisted_7, [\n      _createVNode($setup[\"BoardTeamUpdates\"])\n    ], 512 /* NEED_PATCH */), [\n      [_vShow, $setup.mode === 'team']\n    ])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/BoardUpdates.vue\";script.__scopeId = \"data-v-1480934d\";export default script;","<template>\n  <div class=\"dock\" role=\"toolbar\" aria-label=\"Meeting\">\n    <button type=\"button\" class=\"btn btn--m btn--tertiary\" :disabled=\"step === 0\" @click=\"emit('go', step - 1)\">Vorige</button>\n    <span class=\"dock__divider\" />\n    <NewSticky place=\"dock\" @pick=\"emit('sticky', $event)\" />\n    <span class=\"dock__divider\" />\n    <span class=\"dock__count\">{{ step + 1 }} / {{ total }}</span>\n    <button type=\"button\" class=\"btn btn--m btn--primary\" :disabled=\"finishing\" @click=\"next\">\n      {{ step < total - 1 ? `Volgende: ${nextLabel}` : finishing ? \"Afronden…\" : finished ? \"Terug naar meetings\" : \"Meeting afronden\" }}\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport NewSticky from \"./NewSticky.vue\";\n\nconst props = defineProps<{ step: number; total: number; nextLabel: string; finished: boolean; finishing: boolean }>();\nconst emit = defineEmits<{ go: [step: number]; sticky: [authorId: number]; finish: [] }>();\n\nfunction next() {\n  if (props.step < props.total - 1) emit(\"go\", props.step + 1);\n  else emit(\"finish\");\n}\n</script>\n\n<style scoped>\n.dock {\n  position: absolute;\n  bottom: 24px;\n  left: 50%;\n  z-index: 3;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  max-width: calc(100% - 32px);\n  padding: 8px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-xl);\n  background: var(--card);\n  box-shadow: var(--shadow-overlay);\n  white-space: nowrap;\n  transform: translateX(-50%);\n}\n.dock__divider { flex: none; width: 1px; height: 24px; background: var(--border); }\n.dock__count {\n  min-width: 32px;\n  font-size: 13px;\n  color: var(--weak);\n  text-align: center;\n  font-variant-numeric: tabular-nums;\n}\n@media (max-width: 760px) {\n  /* The desktop row is wider than a phone. Reserve one row for sticky controls\n     so navigation labels remain fully visible, including the final action. */\n  .dock {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) auto minmax(0, 2fr);\n    width: calc(100% - 32px);\n    gap: 8px;\n    bottom: 16px;\n    white-space: normal;\n  }\n  .dock__divider { display: none; }\n  .dock__count { grid-row: 2; grid-column: 2; }\n  .dock > .btn--tertiary { grid-row: 2; grid-column: 1; }\n  .dock > .btn--primary { grid-row: 2; grid-column: 3; }\n  .dock > .btn { min-width: 0; min-height: 40px; height: auto; padding: 8px; white-space: normal; }\n  .dock > :deep(.nsk__add--dock), .dock > :deep(.nsk__pick--dock) { grid-row: 1; grid-column: 1 / -1; }\n  .dock > :deep(.nsk__pick--dock) { flex-wrap: wrap; justify-content: center; white-space: normal; }\n}\n</style>\n","import { createElementVNode as _createElementVNode, createVNode as _createVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"dock\",\n  role: \"toolbar\",\n  \"aria-label\": \"Meeting\"\n}\nconst _hoisted_2 = [\"disabled\"]\nconst _hoisted_3 = { class: \"dock__count\" }\nconst _hoisted_4 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: \"btn btn--m btn--tertiary\",\n      disabled: $props.step === 0,\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('go', $props.step - 1)))\n    }, \"Vorige\", 8 /* PROPS */, _hoisted_2),\n    _cache[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"dock__divider\" }, null, -1 /* CACHED */)),\n    _createVNode($setup[\"NewSticky\"], {\n      place: \"dock\",\n      onPick: _cache[1] || (_cache[1] = $event => ($setup.emit('sticky', $event)))\n    }),\n    _cache[3] || (_cache[3] = _createElementVNode(\"span\", { class: \"dock__divider\" }, null, -1 /* CACHED */)),\n    _createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.step + 1) + \" / \" + _toDisplayString($props.total), 1 /* TEXT */),\n    _createElementVNode(\"button\", {\n      type: \"button\",\n      class: \"btn btn--m btn--primary\",\n      disabled: $props.finishing,\n      onClick: $setup.next\n    }, _toDisplayString($props.step < $props.total - 1 ? `Volgende: ${$props.nextLabel}` : $props.finishing ? \"Afronden…\" : $props.finished ? \"Terug naar meetings\" : \"Meeting afronden\"), 9 /* TEXT, PROPS */, _hoisted_4)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/components/mondays/MeetingDock.vue\";script.__scopeId = \"data-v-db9bc6c7\";export default script;","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass, renderList as _renderList, normalizeStyle as _normalizeStyle, createBlock as _createBlock, withCtx as _withCtx, createVNode as _createVNode, resolveDynamicComponent as _resolveDynamicComponent } from \"vue\"\n\nconst _hoisted_1 = { class: \"mv\" }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = { class: \"mv__heading\" }\nconst _hoisted_4 = { class: \"mv__title\" }\nconst _hoisted_5 = {\n  class: \"mv__tabs\",\n  \"aria-label\": \"Borden\"\n}\nconst _hoisted_6 = [\"aria-current\", \"onClick\"]\nconst _hoisted_7 = { class: \"mv__right\" }\nconst _hoisted_8 = {\n  key: 0,\n  class: \"mv__progress\"\n}\nconst _hoisted_9 = [\"value\", \"aria-label\"]\nconst _hoisted_10 = [\"aria-pressed\"]\nconst _hoisted_11 = { class: \"mv__team\" }\nconst _hoisted_12 = [\"inert\"]\nconst _hoisted_13 = {\n  key: 0,\n  class: \"mv__state\"\n}\nconst _hoisted_14 = {\n  key: 1,\n  class: \"mv__state\"\n}\nconst _hoisted_15 = { class: \"mv__error\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createVNode($setup[\"MondaysHeader\"], {\n      class: \"mv__header\",\n      inert: $setup.leaving || undefined\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"a\", {\n          class: \"mv__back\",\n          href: $setup.router.resolve({ name: 'mondays' }).href,\n          onClick: $setup.onBack\n        }, \"‹ Meetings\", 8 /* PROPS */, _hoisted_2),\n        ($setup.meeting)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _createElementVNode(\"div\", _hoisted_3, [\n                _createElementVNode(\"span\", _hoisted_4, \"Week van \" + _toDisplayString($setup.fmtWeekOf($setup.meeting.date)), 1 /* TEXT */),\n                _createElementVNode(\"span\", {\n                  class: _normalizeClass([\"mv__sub\", { 'mv__sub--error': $setup.store.saveError.value }]),\n                  \"aria-live\": \"polite\"\n                }, [\n                  _createTextVNode(_toDisplayString($setup.fmtWeek($setup.meeting.date)) + \" · \", 1 /* TEXT */),\n                  ($setup.store.saveError.value)\n                    ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                        _createTextVNode(_toDisplayString($setup.store.saveError.value) + \" \", 1 /* TEXT */),\n                        _createElementVNode(\"button\", {\n                          type: \"button\",\n                          class: \"mv__retry\",\n                          onClick: _cache[0] || (_cache[0] = $event => ($setup.store.flush()))\n                        }, \"Opnieuw\")\n                      ], 64 /* STABLE_FRAGMENT */))\n                    : ($setup.store.saving.value)\n                      ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                          _createTextVNode(\"opslaan…\")\n                        ], 64 /* STABLE_FRAGMENT */))\n                      : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                          _createTextVNode(_toDisplayString($setup.meeting.finishedAt ? \"afgerond, opgeslagen in WRD\" : \"opgeslagen in WRD\"), 1 /* TEXT */)\n                        ], 64 /* STABLE_FRAGMENT */))\n                ], 2 /* CLASS */)\n              ]),\n              _createElementVNode(\"nav\", _hoisted_5, [\n                (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.BOARDS, (board, index) => {\n                  return _createElementVNode(\"button\", {\n                    key: board.block,\n                    type: \"button\",\n                    class: _normalizeClass([\"mv__tab\", { 'mv__tab--on': index === $setup.step && !$setup.overview }]),\n                    \"aria-current\": index === $setup.step && !$setup.overview ? 'step' : undefined,\n                    onClick: $event => ($setup.go(index))\n                  }, [\n                    _createElementVNode(\"span\", {\n                      class: \"mv__swatch\",\n                      style: _normalizeStyle({ background: board.color })\n                    }, null, 4 /* STYLE */),\n                    _createTextVNode(_toDisplayString(board.label), 1 /* TEXT */)\n                  ], 10 /* CLASS, PROPS */, _hoisted_6)\n                }), 64 /* STABLE_FRAGMENT */))\n              ]),\n              _createElementVNode(\"div\", _hoisted_7, [\n                ($setup.reviewWork)\n                  ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n                      _createElementVNode(\"span\", null, _toDisplayString($setup.reviewWork.label), 1 /* TEXT */),\n                      _createElementVNode(\"progress\", {\n                        max: \"100\",\n                        value: $setup.reviewWork.value,\n                        \"aria-label\": `Linear-weekoverzicht: ${$setup.reviewWork.label}`\n                      }, null, 8 /* PROPS */, _hoisted_9)\n                    ]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: _normalizeClass([\"mv__overview\", { 'mv__overview--on': $setup.overview }]),\n                  \"aria-pressed\": $setup.overview,\n                  onClick: _cache[1] || (_cache[1] = $event => ($setup.overview = !$setup.overview))\n                }, \" Overzicht \", 10 /* CLASS, PROPS */, _hoisted_10),\n                _createElementVNode(\"div\", _hoisted_11, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.store.people.value, (person) => {\n                    return (_openBlock(), _createBlock($setup[\"PersonAvatar\"], {\n                      key: person.id,\n                      name: person.name,\n                      class: \"mv__member\"\n                    }, null, 8 /* PROPS */, [\"name\"]))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ])\n              ])\n            ], 64 /* STABLE_FRAGMENT */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"inert\"]),\n    _createElementVNode(\"div\", {\n      class: \"mv__stage\",\n      inert: $setup.leaving || undefined\n    }, [\n      ($setup.store.loading.value)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, \"Bezig met laden…\"))\n        : ($setup.store.loadError.value)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_14, [\n              _createElementVNode(\"p\", _hoisted_15, _toDisplayString($setup.store.loadError.value), 1 /* TEXT */),\n              _createVNode($setup[\"RouterLink\"], {\n                class: \"btn\",\n                to: { name: 'mondays' }\n              }, {\n                default: _withCtx(() => _cache[3] || (_cache[3] = [\n                  _createTextVNode(\"Naar alle meetings\", -1 /* CACHED */)\n                ])),\n                _: 1 /* STABLE */,\n                __: [3]\n              })\n            ]))\n          : ($setup.meeting)\n            ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                _createElementVNode(\"div\", {\n                  ref: \"canvas\",\n                  class: \"mv__canvas\",\n                  onScroll: $setup.keepLeft\n                }, [\n                  _createElementVNode(\"div\", {\n                    class: \"mv__strip\",\n                    style: _normalizeStyle({ gap: `${$setup.GAP}px`, transform: $setup.stripTransform })\n                  }, [\n                    (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.BOARDS, (board, index) => {\n                      return _createVNode($setup[\"BoardFrame\"], {\n                        key: board.block,\n                        block: board.block,\n                        label: board.label,\n                        color: board.color,\n                        \"text-color\": board.text,\n                        width: $setup.frameWidth,\n                        dimmed: !$setup.overview && index !== $setup.step,\n                        pickable: $setup.overview || index !== $setup.step,\n                        onPick: $event => ($setup.go(index))\n                      }, {\n                        default: _withCtx(() => [\n                          (_openBlock(), _createBlock(_resolveDynamicComponent(board.component)))\n                        ]),\n                        _: 2 /* DYNAMIC */\n                      }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"block\", \"label\", \"color\", \"text-color\", \"width\", \"dimmed\", \"pickable\", \"onPick\"])\n                    }), 64 /* STABLE_FRAGMENT */))\n                  ], 4 /* STYLE */)\n                ], 544 /* NEED_HYDRATION, NEED_PATCH */),\n                _createVNode($setup[\"MeetingDock\"], {\n                  step: $setup.step,\n                  total: $setup.BOARDS.length,\n                  \"next-label\": $setup.BOARDS[$setup.step + 1]?.label ?? '',\n                  finished: Boolean($setup.meeting.finishedAt),\n                  finishing: $setup.finishing || $setup.leaving,\n                  onGo: $setup.go,\n                  onSticky: $setup.addSticky,\n                  onFinish: _cache[2] || (_cache[2] = $event => ($setup.leave({ finish: true })))\n                }, null, 8 /* PROPS */, [\"step\", \"total\", \"next-label\", \"finished\", \"finishing\"])\n              ], 64 /* STABLE_FRAGMENT */))\n            : _createCommentVNode(\"v-if\", true)\n    ], 8 /* PROPS */, _hoisted_12)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MeetingView.vue?type=script\";import \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MeetingView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MeetingView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/views/MeetingView.vue\";script.__scopeId = \"data-v-146e109f\";export default script;","import \"@webhare/frontend/src/init\";import \"/opt/wh/whtree/modules/publisher/js/internal/polyfills/all\";\nimport \"/opt/whdata/installedmodules/tech42_tools.20261022T181351.281Z/webdesigns/tech42_tools/frontend/frontend\";const aps = globalThis.whAssetPacks ||= {}; aps[\"tech42_tools:tech42_tools\"]=\"2026-10-22T18:13:59.063Z\";"],"mappings":"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AAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,MAAM,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,EAE1jDC,GAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KA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G,UACfsuB,EAActuB,EAAG,WACjB,CAAE,aAAAuuB,EAAc,cAAAC,EAAe,aAAAC,EAAc,YAAAC,CAAY,EAAInc,EACnE,GAAIic,EACFjc,EAAS,cAAgB8b,EACrBppB,GAAgBopB,EAAWG,CAAa,GAC1CzkB,EACEykB,EACAH,EACA9b,EAAS,gBACT,KACApS,EACAoS,EACAlS,EACAC,EACAC,CACF,EACIgS,EAAS,MAAQ,EACnBA,EAAS,QAAQ,EACRkc,IACJC,IACH3kB,EACEwkB,EACAD,EACAruB,EACAC,EACAC,EACA,KAEAE,EACAC,EACAC,CACF,EACA6tB,GAAgB7b,EAAU+b,CAAW,MAIzC/b,EAAS,UAAYkb,KACjBiB,GACFnc,EAAS,YAAc,GACvBA,EAAS,aAAeic,GAExBpsB,EAAQosB,EAAeruB,EAAiBoS,CAAQ,EAElDA,EAAS,KAAO,EAChBA,EAAS,QAAQ,OAAS,EAC1BA,EAAS,gBAAkBpB,EAAc,KAAK,EAC1Csd,GACF1kB,EACE,KACAskB,EACA9b,EAAS,gBACT,KACApS,EACAoS,EACAlS,EACAC,EACAC,CACF,EACIgS,EAAS,MAAQ,EACnBA,EAAS,QAAQ,GAEjBxI,EACEwkB,EACAD,EACAruB,EACAC,EACAC,EACA,KAEAE,EACAC,EACAC,CACF,EACA6tB,GAAgB7b,EAAU+b,CAAW,IAE9BC,GAAgBtpB,GAAgBopB,EAAWE,CAAY,GAChExkB,EACEwkB,EACAF,EACApuB,EACAC,EACAC,EACAoS,EACAlS,EACAC,EACAC,CACF,EACAgS,EAAS,QAAQ,EAAI,IAErBxI,EACE,KACAskB,EACA9b,EAAS,gBACT,KACApS,EACAoS,EACAlS,EACAC,EACAC,CACF,EACIgS,EAAS,MAAQ,GACnBA,EAAS,QAAQ,YAKnBgc,GAAgBtpB,GAAgBopB,EAAWE,CAAY,EACzDxkB,EACEwkB,EACAF,EACApuB,EACAC,EACAC,EACAoS,EACAlS,EACAC,EACAC,CACF,EACA6tB,GAAgB7b,EAAU8b,CAAS,UAEnCL,GAAahuB,EAAI,WAAW,EAC5BuS,EAAS,cAAgB8b,EACrBA,EAA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","names":["require_shared_cjs_prod","__commonJSMin","exports","makeMap","str","map","key","val","EMPTY_OBJ","EMPTY_ARR","NOOP","NO","isOn","isModelListener","extend","remove","arr","el","i","hasOwnProperty","hasOwn","isArray","isMap","toTypeString","isSet","isDate","isRegExp","isFunction","isString","isSymbol","isObject","isPromise","objectToString","value","toRawType","isPlainObject","isIntegerKey","isReservedProp","isBuiltInDirective","cacheStringFunction","fn","cache","camelizeRE","camelize","_","c","hyphenateRE","hyphenate","capitalize","toHandlerKey","hasChanged","oldValue","invokeArrayFns","fns","arg","def","obj","writable","looseToNumber","n","toNumber","_globalThis","getGlobalThis","identRE","genPropsAccessExp","name","genCacheKey","source","options","PatchFlags","PatchFlagNames","ShapeFlags","SlotFlags","slotFlagsText","GLOBALS_ALLOWED","isGloballyAllowed","isGloballyWhitelisted","range","generateCodeFrame","start","end","lines","newlineSequences","idx","count","res","j","line","lineLength","newLineSeqLength","pad","length","normalizeStyle","item","normalized","parseStringStyle","listDelimiterRE","propertyDelimiterRE","styleCommentRE","cssText","ret","tmp","stringifyStyle","styles","normalizedKey","normalizeClass","normalizeProps","props","klass","style","HTML_TAGS","SVG_TAGS","MATH_TAGS","VOID_TAGS","isHTMLTag","isSVGTag","isMathMLTag","isVoidTag","specialBooleanAttrs","isSpecialBooleanAttr","isBooleanAttr","includeBooleanAttr","unsafeAttrCharRE","attrValidationCache","isSSRSafeAttrName","isUnsafe","propsToAttrMap","isKnownHtmlAttr","isKnownSvgAttr","isKnownMathMLAttr","isRenderableAttrValue","type","escapeRE","escapeHtml","string","match","html","escaped","index","lastIndex","commentStripRE","escapeHtmlComment","src","cssVarNameEscapeSymbolsRE","getEscapedCssVarName","doubleEscape","s","looseCompareArrays","a","b","equal","looseEqual","aValidType","bValidType","aKeysCount","bKeysCount","aHasKey","bHasKey","looseIndexOf","isRef","toDisplayString","replacer","_key","entries","val2","stringifySymbol","v","_a","normalizeCssVarValue","require_shared","__commonJSMin","exports","module","exports","c","exports","c","decodeMap","exports","_a","codePoint","output","replaceCodePoint","decodeCodePoint","decode_data_html_js_1","__importDefault","exports","decode_data_xml_js_1","decode_codepoint_js_1","__importStar","decode_codepoint_js_2","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","code","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","str","offset","start","end","base","digitCount","startIdx","char","lastCp","expectedLength","_a","current","valueLength","determineBranch","_b","result","consumed","getDecoder","ret","decoder","lastIndex","len","nodeIdx","branchCount","jumpOffset","value","lo","hi","mid","midVal","htmlDecoder","xmlDecoder","decodeHTML","mode","decodeHTMLAttribute","decodeHTMLStrict","decodeXML","Position","constructor","line","col","index","column","SourceLocation","start","end","filename","identifierName","createPositionWithColumnOffset","position","columnOffset","code","ModuleErrors","ImportMetaOutsideModule","message","ImportOutsideModule","NodeDescriptions","ArrayPattern","AssignmentExpression","AssignmentPattern","ArrowFunctionExpression","ConditionalExpression","CatchClause","ForOfStatement","ForInStatement","ForStatement","FormalParameters","Identifier","ImportSpecifier","ImportDefaultSpecifier","ImportNamespaceSpecifier","ObjectPattern","ParenthesizedExpression","RestElement","UpdateExpression","true","false","VariableDeclarator","YieldExpression","toNodeDescription","node","type","prefix","StandardErrors","AccessorIsGenerator","kind","ArgumentsInClass","AsyncFunctionInSingleStatementContext","AwaitBindingIdentifier","AwaitBindingIdentifierInStaticBlock","AwaitExpressionFormalParameter","AwaitUsingNotInAsyncContext","AwaitNotInAsyncContext","BadGetterArity","BadSetterArity","BadSetterRestParameter","ConstructorClassField","ConstructorClassPrivateField","ConstructorIsAccessor","ConstructorIsAsync","ConstructorIsGenerator","DeclarationMissingInitializer","DecoratorArgumentsOutsideParentheses","DecoratorBeforeExport","DecoratorsBeforeAfterExport","DecoratorConstructor","DecoratorExportClass","DecoratorSemicolon","DecoratorStaticBlock","DeferImportRequiresNamespace","DeletePrivateField","DestructureNamedImport","DuplicateConstructor","DuplicateDefaultExport","DuplicateExport","exportName","DuplicateProto","DuplicateRegExpFlags","ElementAfterRest","EscapedCharNotAnIdentifier","ExportBindingIsString","localName","ExportDefaultFromAsIdentifier","ForInOfLoopInitializer","ForInUsing","ForOfAsync","ForOfLet","GeneratorInSingleStatementContext","IllegalBreakContinue","IllegalLanguageModeDirective","IllegalReturn","ImportAttributesUseAssert","ImportBindingIsString","importName","ImportCallArity","ImportCallNotNewExpression","ImportCallSpreadArgument","ImportJSONBindingNotDefault","ImportReflectionHasAssertion","ImportReflectionNotBinding","IncompatibleRegExpUVFlags","InvalidBigIntLiteral","InvalidCodePoint","InvalidCoverDiscardElement","InvalidCoverInitializedName","InvalidDecimal","InvalidDigit","radix","InvalidEscapeSequence","InvalidEscapeSequenceTemplate","InvalidEscapedReservedWord","reservedWord","InvalidIdentifier","InvalidLhs","ancestor","InvalidLhsBinding","InvalidLhsOptionalChaining","InvalidNumber","InvalidOrMissingExponent","InvalidOrUnexpectedToken","unexpected","InvalidParenthesizedAssignment","InvalidPrivateFieldResolution","InvalidPropertyBindingPattern","InvalidRecordProperty","InvalidRestAssignmentPattern","LabelRedeclaration","labelName","LetInLexicalBinding","LineTerminatorBeforeArrow","MalformedRegExpFlags","MissingClassName","MissingEqInAssignment","MissingSemicolon","MissingPlugin","missingPlugin","map","name","JSON","stringify","join","MissingOneOfPlugins","MissingUnicodeEscape","MixingCoalesceWithLogical","ModuleAttributeDifferentFromType","ModuleAttributeInvalidValue","ModuleAttributesWithDuplicateKeys","key","ModuleExportNameHasLoneSurrogate","surrogateCharCode","toString","ModuleExportUndefined","MultipleDefaultsInSwitch","NewlineAfterThrow","NoCatchOrFinally","NumberIdentifier","NumericSeparatorInEscapeSequence","ObsoleteAwaitStar","OptionalChainingNoNew","OptionalChainingNoTemplate","OverrideOnConstructor","ParamDupe","PatternHasAccessor","PatternHasMethod","PrivateInExpectedIn","PrivateNameRedeclaration","RecordExpressionBarIncorrectEndSyntaxType","RecordExpressionBarIncorrectStartSyntaxType","RecordExpressionHashIncorrectStartSyntaxType","RecordNoProto","RestTrailingComma","SloppyFunction","SloppyFunctionAnnexB","SourcePhaseImportRequiresDefault","StaticPrototype","SuperNotAllowed","SuperPrivateField","TrailingDecorator","TupleExpressionBarIncorrectEndSyntaxType","TupleExpressionBarIncorrectStartSyntaxType","TupleExpressionHashIncorrectStartSyntaxType","UnexpectedArgumentPlaceholder","UnexpectedAwaitAfterPipelineBody","UnexpectedDigitAfterHash","UnexpectedImportExport","UnexpectedKeyword","keyword","UnexpectedLeadingDecorator","UnexpectedLexicalDeclaration","UnexpectedNewTarget","UnexpectedNumericSeparator","UnexpectedPrivateField","UnexpectedReservedWord","UnexpectedSuper","UnexpectedToken","expected","UnexpectedTokenUnaryExponentiation","UnexpectedUsingDeclaration","UnexpectedVoidPattern","UnsupportedBind","UnsupportedDecoratorExport","UnsupportedDefaultExport","UnsupportedImport","UnsupportedMetaProperty","target","onlyValidPropertyName","UnsupportedParameterDecorator","UnsupportedPropertyDecorator","UnsupportedSuper","UnterminatedComment","UnterminatedRegExp","UnterminatedString","UnterminatedTemplate","UsingDeclarationExport","UsingDeclarationHasBindingPattern","VarRedeclaration","VoidPatternCatchClauseParam","VoidPatternInitializer","YieldBindingIdentifier","YieldInParameter","YieldNotInGeneratorFunction","ZeroDigitNumericSeparator","StrictModeErrors","StrictDelete","StrictEvalArguments","referenceName","StrictEvalArgumentsBinding","bindingName","StrictFunction","StrictNumericEscape","StrictOctalLiteral","StrictWith","ParseExpressionErrors","ParseExpressionEmptyInput","ParseExpressionExpectsEOF","String","fromCodePoint","UnparenthesizedPipeBodyDescriptions","Set","Object","assign","PipeBodyIsTighter","PipeTopicRequiresHackPipes","PipeTopicUnbound","PipeTopicUnconfiguredToken","token","PipeTopicUnused","PipeUnparenthesizedBody","PipelineBodyNoArrow","PipelineBodySequenceExpression","PipelineHeadSequenceExpression","PipelineTopicUnused","PrimaryTopicNotAllowed","PrimaryTopicRequiresSmartPipeline","defineHidden","obj","value","defineProperty","enumerable","configurable","toParseErrorConstructor","toMessage","reasonCode","syntaxPlugin","hasMissingPlugin","oldReasonCodes","AccessorCannotDeclareThisParameter","AccessorCannotHaveTypeParameters","ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference","SetAccessorCannotHaveOptionalParameter","SetAccessorCannotHaveRestParameter","SetAccessorCannotHaveReturnType","loc","details","error","SyntaxError","pos","overrides","_overrides$loc","get","set","writable","ParseErrorEnum","argument","Array","isArray","parseErrorTemplates","ParseErrorConstructors","keys","template","_ref","rest","_objectWithoutPropertiesLoose","_excluded","Errors","PipelineOperatorErrors","createDefaultOptions","sourceType","sourceFilename","undefined","startIndex","startColumn","startLine","allowAwaitOutsideFunction","allowReturnOutsideFunction","allowNewTargetOutsideFunction","allowImportExportEverywhere","allowSuperOutsideMethod","allowUndeclaredExports","allowYieldOutsideFunction","plugins","strictMode","ranges","tokens","createImportExpressions","createParenthesizedExpressions","errorRecovery","attachComment","annexB","getOptions","opts","options","Error","toUnenumerable","object","toESTreeLocation","estree","superClass","parse","file","optionFlags","parseRegExpLiteral","pattern","flags","regex","RegExp","estreeParseLiteral","parseBigIntLiteral","bigInt","BigInt","bigint","parseDecimalLiteral","decimal","parseLiteral","parseStringLiteral","parseNumericLiteral","parseNullLiteral","parseBooleanLiteral","estreeParseChainExpression","endLoc","chain","startNodeAtNode","expression","finishNodeAt","directiveToStmt","directive","castNodeTo","raw","extra","expressionValue","stmt","rawValue","fillOptionalPropertiesForTSESLint","cloneEstreeStringLiteral","range","cloned","create","prototype","initFunction","isAsync","checkDeclaration","isObjectProperty","getObjectOrClassMethodParams","method","params","isValidDirective","_stmt$expression$extr","parenthesized","parseBlockBody","allowDirectives","topLevel","afterBlockParse","directiveStatements","directives","d","body","concat","parsePrivateName","getPluginOption","convertPrivateNameToPrivateIdentifier","getPrivateNameSV","id","isPrivateName","parseFunctionBody","allowExpression","isMethod","parseMethod","isGenerator","isConstructor","allowDirectSuper","inClassScope","funcNode","startNode","typeParameters","resetStartLocationFromNode","valueNode","computed","shorthand","finishNode","nameIsConstructor","parseClassProperty","args","propertyNode","parseClassPrivateProperty","parseClassAccessorProperty","accessorPropertyNode","abstract","hasPlugin","parseObjectProperty","prop","startLoc","isPattern","refExpressionErrors","finishObjectProperty","isValidLVal","isUnparenthesizedInAssign","binding","isAssignable","isBinding","toAssignable","isLHS","classScope","usePrivateName","toAssignableObjectExpressionProp","isLast","raise","finishCallExpression","unfinished","optional","callee","source","arguments","_ref2","attributes","toReferencedArguments","parseExport","decorators","exportStartLoc","state","lastTokStartLoc","exported","specifiers","length","_declaration$decorato","declaration","resetStartLocation","stopParseSubscript","base","optionalChainMember","parseMember","isOptionalMemberExpression","hasPropertyAsPrivateName","isObjectMethod","result","cloneIdentifier","cloneStringLiteral","resetEndLocation","lastTokEndLoc","TokContext","preserveSpace","types","brace","j_oTag","j_cTag","j_expr","beforeExpr","startsExpr","isLoop","isAssign","postfix","ExportedTokenType","label","conf","rightAssociative","binop","updateContext","keywords","Map","createKeyword","createToken","createBinop","tokenTypeCounter","tokenTypes","tokenLabels","tokenBinops","tokenBeforeExprs","tokenStartsExprs","tokenPrefixes","_options$binop","_options$beforeExpr","_options$startsExpr","_options$prefix","push","createKeywordLike","_options$binop2","_options$beforeExpr2","_options$startsExpr2","_options$prefix2","tt","bracketL","bracketHashL","bracketBarL","bracketR","bracketBarR","braceL","braceBarL","braceHashL","braceR","braceBarR","parenL","parenR","comma","semi","colon","doubleColon","dot","question","questionDot","arrow","ellipsis","backQuote","dollarBraceL","templateTail","templateNonTail","at","hash","interpreterDirective","eq","slashAssign","xorAssign","moduloAssign","incDec","bang","tilde","doubleCaret","doubleAt","pipeline","nullishCoalescing","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","lt","gt","relational","bitShift","bitShiftL","bitShiftR","plusMin","modulo","star","slash","exponent","_in","_instanceof","_break","_case","_catch","_continue","_debugger","_default","_else","_finally","_function","_if","_return","_switch","_throw","_try","_var","_const","_with","_new","_this","_super","_class","_extends","_export","_import","_null","_true","_false","_typeof","_void","_delete","_do","_for","_while","_as","_assert","_async","_await","_defer","_from","_get","_let","_meta","_of","_sent","_set","_source","_static","_using","_yield","_asserts","_checks","_exports","_global","_implements","_intrinsic","_infer","_is","_mixins","_proto","_require","_satisfies","_keyof","_readonly","_unique","_abstract","_declare","_enum","_module","_namespace","_interface","_type","_opaque","placeholder","string","num","regexp","privateName","eof","jsxName","jsxText","jsxTagStart","jsxTagEnd","tokenIsIdentifier","tokenKeywordOrIdentifierIsKeyword","tokenIsKeywordOrIdentifier","tokenIsLiteralPropertyName","tokenComesBeforeExpression","tokenCanStartExpression","tokenIsAssignment","tokenIsFlowInterfaceOrTypeOrOpaque","tokenIsLoop","tokenIsKeyword","tokenIsOperator","tokenIsPostfix","tokenIsPrefix","tokenIsTSTypeOperator","tokenIsTSDeclarationStart","tokenLabelName","tokenOperatorPrecedence","tokenIsRightAssociative","tokenIsTemplate","getExportedToken","context","pop","tc","nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","i","isIdentifierStart","test","fromCharCode","isIdentifierChar","reservedWords","strict","strictBind","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword","isIteratorStart","current","next","next2","reservedWordLikeSet","canBeReservedWord","Scope","names","firstLexicalName","ScopeHandler","parser","scopeStack","undefinedExports","inTopLevel","currentScope","inFunction","currentVarScopeFlags","allowSuper","currentThisScopeFlags","allowNewTarget","inClass","inClassAndNotInNonArrowFunction","inStaticBlock","ScopeFlag","inNonArrowFunction","inBareCaseStatement","treatFunctionsAsVar","treatFunctionsAsVarInScope","createScope","enter","exit","scope","declareName","bindingType","checkRedeclarationInScope","maybeExportDefined","delete","isRedeclaredInScope","checkLocalExport","FlowScope","declareFunctions","FlowScopeHandler","add","reservedTypes","FlowErrors","AmbiguousConditionalArrow","AmbiguousDeclareModuleKind","AssignReservedType","reservedType","DeclareClassElement","DeclareClassFieldInitializer","DuplicateDeclareModuleExports","EnumBooleanMemberNotInitialized","memberName","enumName","EnumDuplicateMemberName","EnumInconsistentMemberValues","EnumInvalidExplicitType","invalidEnumType","EnumInvalidExplicitTypeUnknownSupplied","EnumInvalidMemberInitializerPrimaryType","explicitType","EnumInvalidMemberInitializerSymbolType","EnumInvalidMemberInitializerUnknownType","EnumInvalidMemberName","suggestion","EnumNumberMemberNotInitialized","EnumStringMemberInconsistentlyInitialized","GetterMayNotHaveThisParam","ImportReflectionHasImportType","ImportTypeShorthandOnlyInPureImport","InexactInsideExact","InexactInsideNonObject","InexactVariance","InvalidNonTypeImportInDeclareModule","MissingTypeParamDefault","NestedDeclareModule","NestedFlowComment","PatternIsOptional","SetterMayNotHaveThisParam","SpreadVariance","ThisParamAnnotationRequired","ThisParamBannedInConstructor","ThisParamMayNotBeOptional","ThisParamMustBeFirst","ThisParamNoDefault","TypeBeforeInitializer","TypeCastInPattern","UnexpectedExplicitInexactInObject","UnexpectedReservedType","UnexpectedReservedUnderscore","UnexpectedSpaceBetweenModuloChecks","UnexpectedSpreadType","UnexpectedSubtractionOperand","UnexpectedTokenAfterTypeParameter","UnexpectedTypeParameterBeforeAsyncArrowFunction","UnsupportedDeclareExportKind","unsupportedExportKind","UnsupportedStatementInDeclareModule","UnterminatedFlowComment","isEsModuleType","bodyElement","hasTypeImportKind","importKind","exportSuggestions","const","let","interface","partition","list","list1","list2","FLOW_PRAGMA_REGEX","flow","flowPragma","getScopeHandler","shouldParseTypes","finishToken","val","addComment","comment","matches","exec","flowParseTypeInitialiser","tok","oldInType","inType","expect","flowParseType","flowParsePredicate","moduloLoc","expectContextual","eat","parseExpression","flowParseTypeAndPredicateInitialiser","predicate","match","flowParseDeclareClass","flowParseInterfaceish","flowParseDeclareFunction","parseIdentifier","typeNode","typeContainer","flowParseTypeParameterDeclaration","tmp","flowParseFunctionTypeParams","this","returnType","typeAnnotation","semicolon","flowParseDeclare","insideModule","flowParseDeclareVariable","eatContextual","flowParseDeclareModuleExports","flowParseDeclareModule","isContextual","flowParseDeclareTypeAlias","flowParseDeclareOpaqueType","flowParseDeclareInterface","flowParseDeclareExportDeclaration","flowParseTypeAnnotatableIdentifier","parseExprAtom","bodyNode","parseImport","hasModuleExport","forEach","default","isLet","exportKind","flowParseTypeAnnotation","finished","flowParseTypeAlias","flowParseOpaqueType","isClass","flowParseRestrictedIdentifier","extends","flowParseInterfaceExtends","implements","mixins","flowParseObjectType","allowStatic","allowExact","allowSpread","allowProto","allowInexact","flowParseQualifiedTypeIdentifier","flowParseTypeParameterInstantiation","flowParseInterface","checkNotUnderscore","checkReservedType","liberal","right","declare","supertype","impltype","flowParseTypeParameter","requireDefault","nodeStartLoc","variance","flowParseVariance","ident","bound","defaultRequired","typeParameter","flowInTopLevelContext","cb","curContext","oldContext","flowParseTypeParameterInstantiationInExpression","reScan_lt","oldNoAnonFunctionType","noAnonFunctionType","reScan_lt_gt","flowParseTypeParameterInstantiationCallOrNew","flowParseTypeOrImplicitInstantiation","flowParseInterfaceType","flowParseObjectPropertyKey","flowParseObjectTypeIndexer","isStatic","static","lookahead","flowParseObjectTypeInternalSlot","flowParseObjectTypeMethodish","startNodeAt","flowParseFunctionTypeParam","flowParseObjectTypeCallProperty","nodeStart","callProperties","properties","indexers","internalSlots","endDelim","exact","inexact","protoStartLoc","inexactStartLoc","propOrInexact","flowParseObjectTypeProperty","flowObjectTypeSemicolon","out","proto","flowCheckGetterSetterParams","property","paramCount","node2","qualification","flowParseGenericType","flowParseTypeofType","flowParsePrimaryType","flowParseTupleType","first","lh","isThis","reinterpretTypeAsFunctionTypeParam","flowIdentToTypeAnnotation","isGroupedType","parseLiteralAtNode","createIdentifier","flowParsePostfixType","seenOptionalIndexedAccess","canInsertSemicolon","elementType","objectType","indexType","flowParsePrefixType","flowParseAnonFunctionWithoutParens","param","flowParseIntersectionType","flowParseUnionType","allowPrimitiveOverride","typeCastToParameter","allowExpressionBody","forwardNoArrowParamsConversionAt","parseFunctionBodyAndFinish","parseStatementLike","flowParseEnumDeclaration","parseExpressionStatement","expr","shouldParseExportDeclaration","containsEsc","isExportDefaultSpecifier","parseExportDefaultExpression","parseConditional","maybeInArrowParameters","nextCh","lookaheadCharCode","setOptionalParametersError","clone","originalNoArrowAt","noArrowAt","consequent","failed","tryParseConditionalConsequent","valid","invalid","getArrowLikeExpressions","alternate","parseMaybeAssign","noArrowParamsConversionAt","parseMaybeAssignAllowIn","disallowInvalid","stack","arrows","finishArrowValidation","every","_node$extra","toAssignableList","trailingCommaLoc","checkParams","includes","offsetToSourcePos","parseParenItem","newNode","typeCastNode","assertModuleNodeAllowed","parseExportDeclaration","declarationNode","parseExportSpecifiers","parseExportFrom","eatExportStar","maybeParseExportNamespaceSpecifier","hasNamespace","parseClassId","isStatement","optionalId","parseClassMember","classBody","member","parseClassMemberFromModifier","isIterator","readIterator","readWord1","fullWord","curPosition","getTokenFromCode","input","charCodeAt","finishOp","left","exprList","toReferencedList","isParenthesizedExpr","_expr$extra","parseArrayLike","close","canBePattern","isTuple","elements","isParenthesized","isClassMethod","isClassProperty","isNonstaticConstructor","pushClassMethod","allowsDirectSuper","isThisParam","pushClassPrivateMethod","parseClassSuper","superTypeParameters","implemented","checkGetterSetterParams","parsePropertyNamePrefixOperator","parseObjPropValue","isAccessor","parseFunctionParamType","parseMaybeDefault","checkImportReflection","module","parseImportSpecifierLocal","specifier","local","finishImportSpecifier","isPotentialImportPhase","isExport","ch","applyImportPhase","phase","parseImportSpecifier","importedIsString","isInTypeOnlyImport","isMaybeTypeOnly","firstIdent","imported","specifierTypeKind","isLookaheadContextual","as_ident","specifierIsTypeImport","checkReservedWord","parseBindingAtom","parseFunctionParams","parseVarId","decl","parseAsyncArrowFromCallExpression","call","shouldParseAsyncArrow","afterLeftParse","_jsx","jsx","tryParse","currentContext","_jsx2","_jsx3","abort","_arrowExpression$extr","arrowExpression","maybeUnwrapTypeCastExpression","aborted","async","failState","thrown","parseArrow","shouldParseArrow","setArrowFunctionParameters","allowDuplicates","isArrowFunction","strictModeChanged","parseParenAndDistinguishExpression","canBeArrow","sourceToOffsetPos","parseSubscripts","noCalls","parseCallExpressionArguments","parseAsyncArrowWithTypeParameters","parseSubscript","subscriptState","isLookaheadToken_lt","stop","typeArguments","parseNewCallee","targs","parseArrowExpression","readToken_mult_modulo","hasFlowComment","nextToken","readToken_pipe_amp","parseTopLevel","program","fileNode","skipBlockComment","skipFlowComment","hasFlowCommentCompletion","commentSkip","shiftToFirstNonWhiteSpace","ch2","ch3","slice","indexOf","flowEnumErrorBooleanMemberNotInitialized","flowEnumErrorInvalidMemberInitializer","enumContext","flowEnumErrorNumberMemberNotInitialized","flowEnumErrorStringMemberInconsistentlyInitialized","flowEnumMemberInit","endOfInit","literal","flowEnumMemberRaw","init","flowEnumCheckExplicitTypeMismatch","expectedType","flowEnumMembers","seenNames","members","booleanMembers","numberMembers","stringMembers","defaultedMembers","hasUnknownMembers","memberNode","toUpperCase","flowEnumStringMembers","initializedMembers","flowEnumParseExplicitType","flowEnumBody","nameLoc","empty","boolsLen","numsLen","strsLen","defaultedLen","jsxParseOpeningElementAfterName","nextTokenStart","afterNext","readToken_lt","readToken_gt","entities","__proto__","quot","amp","apos","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","copy","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","OElig","oelig","Scaron","scaron","Yuml","fnof","circ","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","bull","hellip","permil","prime","Prime","lsaquo","rsaquo","oline","frasl","euro","image","weierp","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sub","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","lineBreak","lineBreakG","isNewLine","hasNewLine","skipWhiteSpace","skipWhiteSpaceInLine","isWhitespace","JsxErrors","AttributeIsEmpty","MissingClosingTagElement","openingTagName","MissingClosingTagFragment","UnexpectedSequenceExpression","HTMLEntity","UnsupportedJsxValue","UnterminatedJsxContent","UnwrappedAdjacentJSXElements","isFragment","getQualifiedJSXName","namespace","jsxReadToken","chunkStart","canStartJSXElement","jsxReadEntity","jsxReadNewLine","normalizeCRLF","curLine","lineStart","jsxReadString","quote","startPos","codePointAtPos","codePoint","readInt","count","desc","entity","XHTMLEntities","jsxReadWord","jsxParseIdentifier","jsxParseNamespacedName","jsxParseElementName","jsxParseAttributeValue","setContext","jsxParseExpressionContainer","jsxParseEmptyExpression","jsxParseSpreadChild","previousContext","jsxParseAttribute","jsxParseOpeningElementAt","selfClosing","jsxParseClosingElementAt","jsxParseElementAt","children","openingElement","closingElement","contents","openingFragment","closingFragment","jsxParseElement","newContext","replaceToken","skipSpace","prevType","splice","TypeScriptScope","tsNames","TypeScriptScopeHandler","importsStack","hasImport","allowShadow","len","isConst","wasConst","ProductionParameterHandler","stacks","currentFlags","hasAwait","hasYield","hasReturn","hasIn","functionFlags","BaseParser","sawUnambiguousESM","ambiguousScriptDifferentAst","sourcePos","offsetPos","pluginConfig","pluginName","pluginOptions","actualOptions","plugin","_this$plugins$get","setTrailingComments","comments","trailingComments","unshift","setLeadingComments","leadingComments","setInnerComments","innerComments","adjustInnerComments","commentWS","lastElement","CommentsParser","commentsLen","processComment","commentStack","commentStackLength","lastCommentWS","leadingNode","commentEnd","containingNode","finalizeComment","trailingNode","_node$options","commentStart","finalizeRemainingComments","resetPreviousNodeTrailingComments","takeSurroundingComments","State","errors","potentialArrowAt","topicContext","maxNumOfResolvableTopics","maxTopicIndex","labels","ct","firstInvalidTemplateEscapePos","strictErrors","tokensLength","v","isAmbientContext","inAbstractClass","inDisallowConditionalTypesContext","soloAwait","inFSharpPipelineDirectBody","hasTopLevelAwait","forbiddenNumericSeparatorSiblings","decBinOct","hex","isAllowedNumericSeparatorSibling","bin","oct","dec","readStringContents","initialPos","initialLineStart","initialCurLine","firstInvalidLoc","unterminated","isStringEnd","res","readEscapedChar","str","containsInvalid","inTemplate","throwOnInvalid","readHexChar","readCodePoint","strictNumericEscape","octalStr","octal","parseInt","forceLen","n","invalidEscapeSequence","allowNumSeparator","bailOnError","forbiddenSiblings","isAllowedSibling","total","e","Infinity","prev","Number","isNaN","unexpectedNumericSeparator","numericSeparatorInEscapeSequence","_isDigit","invalidDigit","invalidCodePoint","buildPosition","VALID_REGEX_FLAGS","Token","Tokenizer","isLookahead","errorHandlers_readInt","errorBuilder","errorHandlers_readCodePoint","errorHandlers_readStringContents_string","recordStrictModeErrors","errorHandlers_readStringContents_template","pushToken","checkKeywordEscapes","createLookaheadState","old","curr","nextTokenStartSince","lastIndex","lookaheadCharCodeSince","nextTokenInLineStart","nextTokenInLineStartSince","lookaheadInLineCharCode","cp","trail","setStrict","toParseError","clear","skipLineComment","startSkip","spaceStart","loop","commentWhitespace","readToken_numberSign","readToken_interpreter","nextPos","expectPlugin","readToken_dot","readNumber","readToken_slash","width","readToken_caret","proposal","topicToken","codePointAt","readToken_atSign","readToken_plus_min","size","readToken_eq_excl","readToken_question","readTemplateToken","readRadixNumber","readString","readWord","readRegexp","escaped","content","mods","char","isBigInt","replace","startsWithDot","isFloat","hasExponent","isOctal","hasLeadingZero","integer","underscorePos","isDecimal","parseFloat","readTemplateContinuation","opening","firstCode","escStart","identifierCheck","esc","keywordTypes","raiseOverwrite","expectOnePlugin","pluginNames","some","ClassScope","privateNames","loneAccessors","undefinedPrivateNames","ClassScopeHandler","oldClassScope","from","declarePrivateName","redefined","accessor","oldStatic","newStatic","oldKind","newKind","ExpressionScope","canBeArrowParameterDeclaration","isCertainlyParameterDeclaration","ArrowHeadParsingScope","declarationErrors","recordDeclarationError","ParsingErrorClass","clearDeclarationError","iterateErrors","iterator","ExpressionScopeHandler","recordParameterInitializerError","origin","recordArrowParameterBindingError","recordAsyncArrowParametersError","validateAsPattern","newParameterDeclarationScope","newArrowHeadScope","newAsyncArrowScope","newExpressionScope","UtilParser","addExtra","isUnparsedContextual","nameStart","startsWith","hasPrecedingLineBreak","hasFollowingLineBreak","isLineTerminator","allowAsi","fn","oldState","abortSignal","checkExpressionErrors","andThrow","shorthandAssignLoc","doubleProtoLoc","privateKeyLoc","optionalParametersLoc","voidPatternLoc","hasErrors","isLiteralPropertyName","initializeScopes","oldLabels","oldExportedIdentifiers","exportedIdentifiers","oldInModule","oldScope","oldProdParam","prodParam","oldExpressionScope","expressionScope","enterInitialScopes","paramFlags","isCommonJS","scopeFlags","checkDestructuringPrivate","ExpressionErrors","Node","NodePrototype","__clone","NodeUtils","locationNode","unwrapParenthesizedExpression","LValParser","_node$extra3","last","_node$extra2","operator","arg","checkToRestConversion","elt","toAssignableListItem","element","toReferencedListDeep","parseSpread","parseRestBinding","parseBindingList","ParseBindingListFlags","parseObjectLike","parseVoidPattern","closeCharCode","allowEmpty","elts","checkCommaAfterRest","parseDecorator","parseBindingElement","parseBindingRestProperty","parseBindingProperty","parsePropertyName","checkLVal","checkClashes","hasParenthesizedAncestor","_expression$extra","checkIdentifier","validity","ParseErrorClass","isParenthesizedExpression","nextAncestor","child","declareNameFromIdentifier","identifier","allowPattern","nonNull","x","assert","TSErrors","AbstractMethodHasImplementation","methodName","AbstractPropertyHasInitializer","propertyName","AccessorCannotBeOptional","ClassMethodHasDeclare","ClassMethodHasReadonly","ConstructorHasTypeParameters","DeclareAccessor","DeclareClassFieldHasInitializer","DeclareFunctionHasImplementation","DuplicateAccessibilityModifier","modifier","DuplicateModifier","EmptyHeritageClauseType","EmptyTypeArguments","EmptyTypeParameters","ExpectedAmbientAfterExportDeclare","ImportAliasHasImportType","IncompatibleModifiers","modifiers","IndexSignatureHasAbstract","IndexSignatureHasAccessibility","IndexSignatureHasDeclare","IndexSignatureHasOverride","IndexSignatureHasStatic","InitializerNotAllowedInAmbientContext","InvalidHeritageClauseType","InvalidModifierOnAwaitUsingDeclaration","InvalidModifierOnTypeMember","InvalidModifierOnTypeParameter","InvalidModifierOnTypeParameterPositions","InvalidModifierOnUsingDeclaration","InvalidModifiersOrder","orderedModifiers","InvalidPropertyAccessAfterInstantiationExpression","InvalidTupleMemberLabel","MissingInterfaceName","NonAbstractClassHasAbstractMethod","NonClassMethodPropertyHasAbstractModifier","OptionalTypeBeforeRequired","OverrideNotInSubClass","PrivateElementHasAbstract","PrivateElementHasAccessibility","ReadonlyForMethodSignature","ReservedArrowTypeParam","ReservedTypeAssertion","SingleTypeParameterWithoutTrailingComma","typeParameterName","StaticBlockCannotHaveModifier","TupleOptionalAfterType","TypeAnnotationAfterAssign","TypeImportCannotSpecifyDefaultAndNamed","TypeModifierIsUsedInTypeExports","TypeModifierIsUsedInTypeImports","UnexpectedParameterModifier","UnexpectedReadonly","UnexpectedTypeAnnotation","UnexpectedTypeCastInParameter","UnsupportedImportTypeArgument","UnsupportedParameterPropertyKind","UnsupportedSignatureParameterKind","UsingDeclarationInAmbientContext","keywordTypeFromName","tsIsAccessModifier","tsIsVarianceAnnotations","typescript","tsParseInOutModifiers","tsParseModifiers","bind","allowedModifiers","disallowedModifiers","errorTemplate","tsParseConstModifier","tsParseInOutConstModifiers","tsIsIdentifier","tsTokenCanFollowModifier","tsNextTokenOnSameLineAndCanFollowModifier","tsNextTokenCanFollowModifier","tsParseModifier","stopOnStartOfClassStaticBlock","hasSeenStaticModifier","tsIsStartOfStaticBlocks","tsTryParse","modified","enforceOrder","before","after","incompatible","mod1","mod2","accessibility","hasOwnProperty","tsIsListTerminator","tsParseList","parseElement","tsParseDelimitedList","refTrailingCommaPos","tsParseDelimitedListWorker","expectSuccess","trailingCommaPos","tsParseBracketedList","bracket","skipFirstToken","tsParseImportType","tsParseImportTypeOptions","qualifier","tsParseEntityName","tsParseEntityNameFlags","tsParseTypeArguments","withProperty","tsParseImportTypeWithPropertyValue","parsePropertyDefinition","tsParseTypeReference","typeName","tsParseThisTypePredicate","lhs","parameterName","tsParseTypeAnnotation","asserts","tsParseThisTypeNode","tsParseTypeQuery","exprName","tsParseTypeParameter","parseModifiers","tsParseTypeParameterName","constraint","tsEatThenParseType","tsTryParseTypeParameters","tsParseTypeParameters","tsFillSignature","returnToken","signature","returnTokenRequired","paramsKey","returnTypeKey","tsParseBindingListForSignature","tsParseTypeOrTypePredicateAnnotation","tsParseTypeMemberSemicolon","tsParseSignatureMember","tsIsUnambiguouslyIndexSignature","tsTryParseIndexSignature","tsLookAhead","parameters","tsTryParseTypeAnnotation","tsParsePropertyOrMethodSignature","readonly","firstParameter","tsParseTypeMember","idx","tsParseTypeLiteral","tsParseObjectTypeMembers","tsIsStartOfMappedType","tsParseMappedType","tsExpectThenParseType","nameType","tsParseType","tsTryParseType","tsParseTupleType","elementTypes","tsParseTupleElementType","seenOptionalElement","elementNode","restStartLoc","labeled","chAfterWord","wordName","typeOrLabel","tsParseNonArrayType","labeledNode","optionalTypeNode","restNode","tsParseParenthesizedType","tsParseFunctionOrConstructorType","tsInAllowConditionalTypesContext","tsParseLiteralTypeNode","tsParseTemplateLiteralType","parseTemplate","parseTemplateSubstitution","tsParseThisTypeOrThisTypePredicate","thisKeyword","parseMaybeUnary","nodeType","tsParseArrayTypeOrHigher","tsParseTypeOperator","tsParseTypeOperatorOrHigher","tsCheckTypeAnnotationForReadOnly","tsParseInferType","tsParseConstraintForInferType","tsInDisallowConditionalTypesContext","tsParseUnionOrIntersectionType","parseConstituentType","hasLeadingOperator","tsParseIntersectionTypeOrHigher","tsParseUnionTypeOrHigher","tsIsStartOfFunctionType","tsIsUnambiguouslyStartOfFunctionType","tsSkipParameterStart","previousErrorCount","tsInType","t","tsParseTypePredicateAsserts","thisTypePredicate","typePredicateVariable","tsParseTypePredicatePrefix","tsTryParseTypeOrTypePredicateAnnotation","eatColon","tsParseNonConditionalType","checkType","extendsType","trueType","falseType","isAbstractConstructorSignature","tsParseTypeAssertion","tsParseHeritageClause","originalStartLoc","delimitedList","tsParseInterfaceDeclaration","tsParseTypeAliasDeclaration","tsInTopLevelContext","oldInDisallowConditionalTypesContext","tsNextThenParseType","tsParseEnumMember","initializer","tsParseEnumDeclaration","tsParseEnumBody","tsParseModuleBlock","parseBlockOrModuleBlockBody","tsParseModuleOrNamespaceDeclaration","nested","inner","tsParseAmbientExternalModuleDeclaration","global","tsParseImportEqualsDeclaration","maybeDefaultIdentifier","moduleReference","tsParseModuleReference","tsIsExternalModuleReference","tsParseExternalModuleReference","f","tsTryParseAndCatch","tsTryParseDeclare","startType","tsInAmbientContext","parseFunctionStatement","parseClass","parseVarStatement","isUsing","isAwaitUsing","tsParseDeclaration","tsTryParseExportDeclaration","tsParseExpressionStatement","mod","tsCheckLineTerminator","tsParseAbstractDeclaration","tsTryParseGenericAsyncArrowFunction","oldMaybeInArrowParameters","tsParseTypeArgumentsInExpression","tsIsDeclarationStart","override","pp","parameter","isSimpleParameter","tsDisallowOptionalPattern","bodilessType","registerFunctionStatementId","tsCheckForInvalidTypeCasts","items","isInParens","nonNullExpression","isOptionalCall","missingParenErrorLoc","atPossibleAsyncArrow","asyncArrowFn","parseTaggedTemplateExpression","tokenType","_callee$extra","parseExprOp","leftStartLoc","minPrec","isSatisfies","checkKeywords","checkDuplicateExports","importNode","parseMaybeImportPhase","parseImportSpecifiersAndAfter","nodeImportEquals","isAbstractClass","cls","allowMissingInitializer","declarations","isValidAmbientConstInitializer","parseStatementContent","parseAccessModifier","tsHasSomeModifiers","callParseClassMemberWithIsStatic","parseClassStaticBlock","parseClassMemberWithIsStatic","hadSuperClass","parsePostMemberNameModifiers","methodOrProp","isDeclare","parseClassPropertyAnnotation","definite","declareClassPrivateMethodInScope","_typeCast","_typeCast2","typeCast","_typeParameters","reportReservedArrowTypeParam","trailingComma","sawUnary","toAssignableParenthesizedExpression","parseMaybeDecoratorArguments","canHaveLeadingDecorator","getGetterSetterExpectedParamCount","baseCount","firstParam","parseCatchClauseParam","oldIsAmbientContext","oldStrict","oldInAbstractClass","maybeTakeDecorators","shouldParseAsAmbientContext","getExpression","parseExportSpecifier","isString","isInTypeExport","parseTypeOnlyImportExportSpecifier","isImport","isInTypeOnlyImportExport","leftOfAsKey","rightOfAsKey","leftOfAs","rightOfAs","hasTypeSpecifier","canParseAsKeyword","firstAs","secondAs","parseModuleExportName","kindKey","_node$directive","_node$decorators","_node$optional","_node$typeAnnotation","_node$accessibility","_node$decorators2","_node$override","_node$readonly","_node$static","_node$declare","_node$returnType","_node$typeParameters","_node$optional2","_node$optional3","_node$accessibility2","_node$readonly2","_node$static2","_node$declare2","_node$definite","_node$readonly3","_node$typeAnnotation2","_node$accessibility3","_node$decorators3","_node$override2","_node$optional4","_node$id","_node$abstract","_node$declare3","_node$decorators4","_node$implements","_node$superTypeArgume","_node$typeParameters2","_node$declare4","_node$definite2","_node$const","_node$declare5","_node$computed","_node$qualifier","_node$declare6","_node$extends","_node$declare7","_node$global","_node$const2","_node$in","_node$out","superTypeArguments","in","isPossiblyLiteralEnum","expressions","isUncomputedMemberExpressionChain","isNumber","isNegativeNumber","PlaceholderErrors","ClassNameIsRequired","UnexpectedSpace","placeholders","parsePlaceholder","expectedNode","assertNoSpace","finishPlaceholder","chStartsBindingIdentifier","verifyBreakContinue","isBreak","parseStatementOrSloppyAnnexBFunctionDeclaration","stmtPlaceholder","parseBlock","createNewLexicalScope","parseFunctionId","requireId","parseClassBody","maybeParseExportDefaultSpecifier","_specifiers","checkExport","filter","maybeParseStarImportSpecifier","parseNamedImportSpecifiers","parseImportSource","v8intrinsic","parseV8Intrinsic","v8IntrinsicStartLoc","parseIdentifierName","PIPELINE_PROPOSALS","TOPIC_TOKENS","validatePlugins","pluginsMap","decoratorsBeforeExport","allowCallParenthesized","_pluginsMap$get2","proposalList","p","tokenList","_pluginsMap$get","syntaxType","version","deprecatedAssertSyntax","RECORD_AND_TUPLE_SYNTAX_TYPES","missingPlugins","mixinPlugins","mixinPluginNames","ExpressionParser","checkProto","isRecord","sawProto","shouldExitDescending","disallowIn","disallowInAnd","parseExpressionBase","allowInAnd","parseMaybeAssignDisallowIn","isYield","parseYield","ownExpressionErrors","parseMaybeConditional","isAmbiguousPrefixOrIdentifier","parseExprOps","parseMaybeUnaryOrPrivate","op","prec","checkPipelineAtInfixOperator","logical","coalesce","parseExprOpRightExpr","finishedNode","nextOp","withTopicBindingContext","parseHackPipeBody","withSoloAwaitPermittingContext","parseFSharpPipelineBody","parseSmartPipelineBodyInStyle","parseExprOpBaseRightExpr","_body$extra","topicReferenceWasUsedInCurrentContext","checkExponentialAfterUnary","isAwait","recordAwaitIfAllowed","parseAwait","update","isDelete","parseUpdate","updateExpressionNode","parseExprSubscripts","maybeAsyncArrow","parseBind","parseCoverCallAndAsyncArrowHead","parseNoCallExpr","tag","quasi","allowPlaceholder","nodeForExtra","oldInFSharpPipelineDirectBody","addTrailingCommaExtraToNode","parseExprListItem","_call$extra","parseSuper","parseImportMetaPropertyOrPhaseCall","parseImportCall","parseDo","parseFunctionOrFunctionSent","parseDecorators","parseNewOrNewTarget","parseTopicReferenceThenEqualsSign","parseTopicReference","pipeProposal","lookaheadCh","parseModuleExpression","parseAsyncFunctionExpression","parseAsyncArrowUnaryFunction","topicTokenType","topicTokenValue","finishTopicReference","testTopicReferenceConfiguration","topicReferenceIsAllowedInCurrentContext","registerTopicReference","meta","parseMetaProperty","parseFunction","isSource","createIdentifierAt","innerStartLoc","spreadStartLoc","optionalCommaStartLoc","spreadNodeStartLoc","parseMaybeAssignAllowInOrVoidPattern","innerEndLoc","arrowNode","wrapParenthesis","parenExpression","metaProp","parseNew","parseExprList","parseTemplateElement","isTagged","elemStart","elem","isTail","endOffset","elemEnd","cooked","tail","curElt","quasis","substitutions","maybeAsyncOrAccessorProp","keyName","_params","parseObjectMethod","finishedProp","generator","isExpression","hasStrictModeDirective","nonSimple","isSimpleParamList","formalParameters","isAwaitAllowed","delegating","delegate","childExpr","isSimpleReference","checkSmartPipeTopicBodyEarlyErrors","callback","outerContextTopicState","withSmartMixTopicForbiddingContext","outerContextSoloAwaitState","ParamKind","ret","revertScopes","parseProgram","nextCode","loopLabel","switchLabel","loneSurrogate","keywordRelationalOperator","babel7CompatTokens","hashEndPos","hashEndLoc","backquoteEnd","backquoteEndLoc","startToken","templateValue","templateElementEnd","templateElementEndLoc","endToken","StatementParser","interpreter","parseInterpreterDirective","finishedProgram","stmtToDirective","directiveLiteral","hasFollowingBindingAtom","isForUsing","nextCharAfterOf","endCh","chStartsBindingPattern","hasInLineFollowingBindingIdentifierOrBrace","allowsUsing","parseModuleItem","ParseStatementFlag","parseStatementListItem","allowLabeledFunction","parseStatement","allowDeclaration","allowFunctionDeclaration","parseBreakContinueStatement","parseDebuggerStatement","parseDoWhileStatement","parseForStatement","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","nextTokenCharCode","isAsyncFunction","maybeName","parseLabeledStatement","decoratorsEnabledBeforeExport","maybeDecorators","classNode","exportNode","_classNode$decorators","allowExport","paramsStartLoc","lab","parseHeaderExpression","awaitAt","parseFor","startsWithLet","startsWithAwaitUsing","starsWithUsingDeclaration","isLetOrUsing","initNode","parseVar","isForIn","parseForIn","startsWithAsync","isForOf","isHangingDeclaration","ParseFunctionFlag","discriminant","cases","cur","sawDefault","isCase","block","handler","clause","finalizer","statementStart","parsedNonDirective","await","isFor","hangingDeclaration","isDeclaration","hadConstructor","publicMethod","privateMethod","publicProp","privateProp","accessorProp","publicMember","parseClassElementName","maybeContextualKw","isPrivate","maybeQuestionTokenStartLoc","pushClassPrivateProperty","pushClassProperty","pushClassAccessorProperty","_member$decorators","parseInitializer","hasDefault","parseAfterDefault","hasStar","parseAfterNamespace","isFromRequired","hasSpecifiers","maybeParseExportNamedSpecifiers","hasDeclaration","maybeParseExportDeclaration","_node2$declaration","_ref$specifiers","isTypeExport","assertions","nextChar","hasFrom","nextAfterFrom","maybeParseImportAttributes","checkJSONModuleImport","checkNames","isDefault","isFrom","_node$specifiers","_declaration$extra","nodes","surrogate","isJSONModuleImport","singleBindingType","_node$assertions","nonDefaultNamedSpecifier","find","phaseIdentifier","phaseIdentifierName","isPrecedingIdImportPhase","parseImportSourceAndAttributes","parseNext","maybeParseDefaultImportSpecifier","_node$specifiers2","parseImportAttributes","attrs","attrNames","parseModuleAttributes","useWith","importSpecifier","Parser","_options","getParser","ast","moduleError","generateExportedTokenTypes","internalTokenTypes","tokTypes","getParserClass","parserClassCache","pluginList","require_estree_walker","__commonJSMin","exports","module","global","factory","WalkerBase","node","parent","prop","index","SyncWalker","enter","leave","_should_skip","_should_remove","_replacement","skipped","removed","key","value","i","AsyncWalker","walk","ast","asyncWalk","require_base64","__commonJSMin","exports","intToCharMap","number","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","require_base64_vlq","__commonJSMin","exports","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","encoded","digit","vlq","aStr","aIndex","aOutParam","strLen","result","shift","continuation","require_util","__commonJSMin","exports","getArg","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","match","urlGenerate","aParsedUrl","url","MAX_CACHED_INPUTS","lruMemoize","f","cache","input","i","temp","result","normalize","aPath","path","isAbsolute","parts","start","part","up","join","aRoot","aPathUrl","aRootUrl","joined","relative","level","index","supportsNullProto","obj","identity","s","toSetString","aStr","isProtoString","fromSetString","length","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByOriginalPositionsNoSource","compareByGeneratedPositionsDeflated","onlyCompareGenerated","compareByGeneratedPositionsDeflatedNoLine","aStr1","aStr2","compareByGeneratedPositionsInflated","parseSourceMapInput","str","computeSourceURL","sourceRoot","sourceURL","sourceMapURL","parsed","require_array_set","__commonJSMin","exports","util","has","hasNativeMap","ArraySet","aArray","aAllowDuplicates","set","len","aStr","sStr","isDuplicate","idx","aIdx","require_mapping_list","__commonJSMin","exports","util","generatedPositionAfter","mappingA","mappingB","lineA","lineB","columnA","columnB","MappingList","aCallback","aThisArg","aMapping","require_source_map_generator","__commonJSMin","exports","base64VLQ","util","ArraySet","MappingList","SourceMapGenerator","aArgs","aSourceMapConsumer","generatorOps","sourceRoot","generator","mapping","newMapping","sourceFile","sourceRelative","content","generated","original","source","name","aSourceFile","aSourceContent","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","aSource","aName","message","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","next","nameIdx","sourceIdx","mappings","i","len","aSources","aSourceRoot","key","map","require_binary_search","__commonJSMin","exports","recursiveSearch","aLow","aHigh","aNeedle","aHaystack","aCompare","aBias","mid","cmp","index","require_quick_sort","__commonJSMin","exports","SortTemplate","comparator","swap","ary","x","y","temp","randomIntInRange","low","high","doQuickSort","p","r","pivotIndex","i","pivot","j","q","cloneSort","template","sortCache","start","require_source_map_consumer","__commonJSMin","exports","util","binarySearch","ArraySet","base64VLQ","quickSort","SourceMapConsumer","aSourceMap","aSourceMapURL","sourceMap","IndexedSourceMapConsumer","BasicSourceMapConsumer","aStr","index","c","aSourceRoot","aCallback","aContext","aOrder","context","order","mappings","sourceRoot","boundCallback","names","sources","sourceMapURL","i","n","mapping","source","aArgs","line","needle","originalLine","originalColumn","version","sourcesContent","file","s","aSource","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","length","srcMapping","destMapping","Mapping","compareGenerated","sortGenerated","array","start","l","a","b","j","generatedLine","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","temp","originalMappings","str","segment","end","value","subarrayStart","currentSource","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","nextMapping","name","sc","nullOnMissing","url","fileUriAbsPath","sections","lastOffset","offset","offsetLine","offsetColumn","sectionIndex","section","cmp","content","generatedPosition","ret","sectionMappings","adjustedMapping","require_source_node","__commonJSMin","exports","SourceMapGenerator","util","REGEX_NEWLINE","NEWLINE_CODE","isSourceNode","SourceNode","aLine","aColumn","aSource","aChunks","aName","aGeneratedCode","aSourceMapConsumer","aRelativePath","node","remainingLines","remainingLinesIndex","shiftNextLine","lineContents","getNextLine","newLine","lastGeneratedLine","lastGeneratedColumn","lastMapping","mapping","addMappingWithCode","nextLine","code","sourceFile","content","source","aChunk","chunk","i","aFn","len","aSep","newChildren","aPattern","aReplacement","lastChild","aSourceFile","aSourceContent","sources","str","aArgs","generated","map","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","original","idx","length","sourceContent","require_source_map","__commonJSMin","exports","require_compiler_core_cjs_prod","__commonJSMin","exports","shared","decode_js","parser","estreeWalker","sourceMapJs","FRAGMENT","TELEPORT","SUSPENSE","KEEP_ALIVE","BASE_TRANSITION","OPEN_BLOCK","CREATE_BLOCK","CREATE_ELEMENT_BLOCK","CREATE_VNODE","CREATE_ELEMENT_VNODE","CREATE_COMMENT","CREATE_TEXT","CREATE_STATIC","RESOLVE_COMPONENT","RESOLVE_DYNAMIC_COMPONENT","RESOLVE_DIRECTIVE","RESOLVE_FILTER","WITH_DIRECTIVES","RENDER_LIST","RENDER_SLOT","CREATE_SLOTS","TO_DISPLAY_STRING","MERGE_PROPS","NORMALIZE_CLASS","NORMALIZE_STYLE","NORMALIZE_PROPS","GUARD_REACTIVE_PROPS","TO_HANDLERS","CAMELIZE","CAPITALIZE","TO_HANDLER_KEY","SET_BLOCK_TRACKING","PUSH_SCOPE_ID","POP_SCOPE_ID","WITH_CTX","UNREF","IS_REF","WITH_MEMO","IS_MEMO_SAME","helperNameMap","registerRuntimeHelpers","helpers","s","Namespaces","NodeTypes","ElementTypes","ConstantTypes","locStub","createRoot","children","source","createVNodeCall","context","tag","props","patchFlag","dynamicProps","directives","isBlock","disableTracking","isComponent","loc","getVNodeBlockHelper","getVNodeHelper","createArrayExpression","elements","createObjectExpression","properties","createObjectProperty","key","value","createSimpleExpression","content","isStatic","constType","createInterpolation","createCompoundExpression","createCallExpression","callee","args","createFunctionExpression","params","returns","newline","isSlot","createConditionalExpression","test","consequent","alternate","createCacheExpression","index","needPauseTracking","inVOnce","createBlockStatement","body","createTemplateLiteral","createIfStatement","createAssignmentExpression","left","right","createSequenceExpression","expressions","createReturnStatement","ssr","convertToBlock","node","helper","removeHelper","inSSR","defaultDelimitersOpen","defaultDelimitersClose","isTagStartChar","c","isWhitespace","isEndOfTagSection","toCharCodes","str","ret","i","Sequences","Tokenizer","stack","cbs","cp","consumed","line","column","newlineIndex","start","isEnd","endOfText","actualIndex","cc","sequence","offset","quote","length","input","endIndex","CompilerDeprecationTypes","deprecationData","getCompatValue","compatConfig","isCompatEnabled","mode","checkCompatEnabled","warnDeprecation","message","link","msg","err","defaultOnError","error","defaultOnWarn","createCompilerError","code","messages","additionalMessage","errorMessages","ErrorCodes","walkIdentifiers","root","onIdentifier","includeAll","parentStack","knownIds","rootExp","parent","TS_NODE_TYPES","isLocal","isRefed","isReferencedIdentifier","isFunctionType","id","markKnownIds","walkFunctionParams","markScopeIdentifier","walkBlockDeclarations","extractIdentifiers","isForStatement","walkForStatement","isReferenced","isInDestructureAssignment","p","isInNewExpression","onIdent","block","stmt","decl","isVar","variable","param","nodes","object","prop","element","name","child","isStaticProperty","isStaticPropertyKey","grandparent","unwrapTSNode","isStaticExp","isCoreComponent","nonIdentifierRE","isSimpleIdentifier","validFirstIdentCharRE","validIdentCharRE","whitespaceRE","getExpSource","exp","isMemberExpressionBrowser","path","state","stateStack","currentOpenBracketCount","currentOpenParensCount","currentStringType","char","isMemberExpressionNode","isMemberExpression","fnExpRE","isFnExpressionBrowser","isFnExpressionNode","isFnExpression","advancePositionWithClone","pos","numberOfCharacters","advancePositionWithMutation","linesCount","lastNewLinePos","assert","condition","findDir","allowEmpty","findProp","dynamicOnly","isStaticArgOf","arg","hasDynamicKeyVBind","isText$1","isVPre","isVSlot","isTemplateNode","isSlotOutlet","propsHelperSet","getUnnormalizedProps","callPath","injectProp","propsWithInjection","parentCall","first","hasProp","result","propKeyName","toValidAssetId","type","searchValue","replaceValue","hasScopeRef","ids","b","getMemoedVNodeCall","forAliasRE","defaultParserOptions","currentOptions","currentRoot","currentInput","currentOpenTag","currentProp","currentAttrValue","currentAttrStartIndex","currentAttrEndIndex","inPre","inVPre","currentVPreBoundary","tokenizer","emitError","end","onText","getSlice","innerStart","innerEnd","addNode","createExp","getLoc","endOpenTag","found","j","el","onCloseTag","backTrack","raw","dirToAttr","setLocEnd","mod","condense","expParseMode","parseForExpression","syncIndex","forIteratorRE","stripParensRE","inMatch","LHS","RHS","createAliasExpression","asParam","valueContent","trimmedOffset","iteratorMatch","keyContent","keyOffset","indexContent","ns","lastNode","isImplied","lookAhead","isFragmentTemplate","condenseWhitespace","inlineTemplateProp","specialTemplateDir","isUpperCase","windowsNewlineRE","shouldCondense","removedWhitespace","isAllWhitespace","prev","next","hasNewlineChar","prevCharIsWhitespace","cloneLoc","dir","attr","parseMode","plugins","options","e","reset","baseParse","delimiters","cacheStatic","walk","getSingleElementRoot","x","doNotHoistNode","inFor","toCache","constantType","getConstantType","codegenNode","flag","getGeneratedPropsConstantType","getNodeProps","i2","cachedAsArray","slotCacheKeys","getCacheExpression","slot","getSlotNode","slotName","node2","constantCache","cached","returnType2","generatedPropsType","childType","expType","returnType","allowHoistedHelperSet","getConstantTypeOfHelperCall","keyType","valueType","createTransformContext","filename","prefixIdentifiers","hoistStatic","hmr","cacheHandlers","nodeTransforms","directiveTransforms","transformHoist","isBuiltInComponent","isCustomElement","expressionPlugins","scopeId","slotted","ssrCssVars","bindingMetadata","inline","isTS","onError","onWarn","nameMatch","count","currentCount","list","removalIndex","addId","removeId","identifier","isVNode","cacheExp","identifiers","transform","traverseNode","createRootCodegen","singleElementRootChild","traverseChildren","nodeRemoved","exitFns","onExit","createStructuralDirectiveTransform","fn","matches","PURE_ANNOTATION","aliasHelper","createCodegenContext","ast","sourceMap","optimizeImports","runtimeGlobalName","runtimeModuleName","ssrRuntimeModuleName","addMapping","withoutNewLine","n","_names","_mappings","generate","push","indent","deindent","hasHelpers","useWithBlock","genScopeId","isSetupInlined","preambleContext","genModulePreamble","genFunctionPreamble","functionName","signature","genAssets","genNode","VueBinding","staticHelpers","genHoists","genImports","assets","resolver","maybeSelfReference","hoists","importsOptions","imports","isText","genNodeListAsArray","multilines","genNodeList","comma","genText","genExpression","genInterpolation","genCompoundExpression","genComment","genVNodeCall","genCallExpression","genObjectExpression","genArrayExpression","genFunctionExpression","genConditionalExpression","genCacheExpression","genTemplateLiteral","genIfStatement","genAssignmentExpression","genSequenceExpression","genReturnStatement","pure","genExpressionAsPropertyKey","text","patchFlagString","callHelper","genNullableArgs","needNewline","needsParens","isNested","needArraySpread","l","isLiteralWhitelisted","transformExpression","processExpression","memo","asParams","asRawStatements","localVars","rewriteIdentifier","isAssignmentLVal","isUpdateArg","isDestructureAssignment","isNewExpression","wrapWithUnref","raw2","wrapped","isConst","rVal","operator","rExp","rawExp","rExpString","stringifyExpression","isPrefix","prefix","postfix","isScopeVarReference","isAllowedGlobal","isLiteral","_","needPrefix","canPrefix","a","last","leadingText","transformIf","processIf","ifNode","branch","isRoot","siblings","sibling","createCodegenNodeForBranch","parentCondition","getParentCondition","processCodegen","createIfBranch","userKey","isSameKey","isTemplateIf","keyIndex","createChildrenCodegenNode","keyProperty","firstChild","vnodeCall","branchExp","transformBind","_node","modifiers","transformBindShorthand","injectPrefix","propName","transformFor","processFor","forNode","renderExp","isTemplate","keyProp","isDirKey","keyExp","isStableFragment","fragmentFlag","childBlock","needFragmentWrapper","slotOutlet","loop","createForLoopParams","parseResult","finalizeForParseResult","addIdentifiers","removeIdentifiers","scopes","memoArgs","createParamsList","defaultFallback","trackSlotScopes","vSlot","slotProps","trackVForSlotScopes","vFor","buildClientSlotFn","_vForExp","buildSlots","buildSlotFn","slotsProperties","dynamicSlots","hasDynamicSlots","onComponentSlot","hasTemplateSlots","hasNamedDefaultSlot","implicitDefaultChildren","seenSlotNames","conditionalBranchIndex","slotElement","slotDir","slotChildren","slotLoc","dirLoc","staticSlotName","slotFunction","vIf","vElse","buildDynamicSlot","isNonWhitespaceContent","conditional","buildDefaultSlotProperty","children2","slotFlag","hasForwardedSlots","slots","directiveImportMap","transformElement","vnodeTag","resolveComponentType","isDynamicComponent","vnodeProps","vnodeChildren","vnodeDynamicProps","dynamicPropNames","vnodeDirectives","shouldUseBlock","propsBuildResult","buildProps","buildDirectiveArgs","hasDynamicTextChild","stringifyDynamicPropNames","isExplicitDynamic","isComponentTag","isProp","builtIn","fromSetup","resolveSetupReference","dotIndex","bindings","camelName","PascalName","checkType","fromConst","fromMaybeRef","fromProps","elementLoc","mergeArgs","runtimeDirectives","hasChildren","hasRef","hasClassBinding","hasStyleBinding","hasHydrationEventBinding","hasDynamicKeys","hasVnodeHook","pushMergeArg","dedupeProperties","pushRefVForMarker","analyzePatchFlag","isEventHandler","nameLoc","binding","isVBind","isVOn","directiveTransform","props2","needRuntime","propsExpression","classKeyIndex","styleKeyIndex","hasDynamicKey","classProp","styleProp","knownProps","deduped","existing","mergeAsArray","incoming","dirArgs","runtime","trueExpression","modifier","propsNamesString","transformSlotOutlet","processSlotOutlet","slotArgs","expectedLen","nonNameProps","transformOn","augmentor","eventName","rawName","eventString","shouldCache","isMemberExp","isInlineStatement","hasMultipleStatements","transformText","currentContainer","hasText","callArgs","seen$1","transformOnce","cur","transformModel","createTransformProps","expString","bindingType","maybeRef","assignmentExp","eventArg","altAssignment","m","modifiersKey","validDivisionCharRE","transformFilter","rewriteFilter","parseFilter","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","lastFilterIndex","expression","filters","pushFilter","wrapFilter","filter","seen","transformMemo","getBaseTransformPreset","baseCompile","isModuleMode","resolvedOptions","BindingTypes","noopDirectiveTransform","require_compiler_core","__commonJSMin","exports","module","require_compiler_dom_cjs_prod","__commonJSMin","exports","compilerCore","shared","V_MODEL_RADIO","V_MODEL_CHECKBOX","V_MODEL_TEXT","V_MODEL_SELECT","V_MODEL_DYNAMIC","V_ON_WITH_MODIFIERS","V_ON_WITH_KEYS","V_SHOW","TRANSITION","TRANSITION_GROUP","parserOptions","tag","parent","rootNamespace","ns","a","transformStyle","node","p","i","parseInlineCSS","cssText","loc","normalized","createDOMCompilerError","code","DOMErrorMessages","DOMErrorCodes","transformVHtml","dir","context","exp","transformVText","transformModel","baseResult","isCustomElement","directiveToUse","isInvalidType","type","isEventOptionModifier","isNonKeyModifier","maybeKeyModifier","isKeyboardEvent","resolveModifiers","key","modifiers","keyModifiers","nonKeyModifiers","eventOptionModifiers","modifier","transformClick","event","transformOn","handlerExp","modifierPostfix","transformShow","expReplaceRE","stringifyStatic","children","isParentCached","nc","ec","currentChunk","stringifyCurrentChunk","currentIndex","staticCall","stringifyNode","deleteCount","cacheIndex","i2","c","child","getCachedNode","result","analyzeNode","dataAriaRE","isStringifiableAttr","name","isNonStringifiable","bailed","bail","walk","node2","isOptionTag","stringifyElement","evaluateConstant","res","innerHTML","evaluated","arg","ignoreSideEffectTags","DOMNodeTransforms","DOMDirectiveTransforms","compile","src","options","parse","template","k","require_compiler_dom","__commonJSMin","exports","module","require_reactivity_cjs_prod","__commonJSMin","exports","shared","activeEffectScope","EffectScope","detached","i","l","fn","currentEffectScope","fromParent","last","effectScope","getCurrentScope","onScopeDispose","failSilently","activeSub","EffectFlags","pausedQueueEffects","ReactiveEffect","batch","cleanupEffect","prepareDeps","prevEffect","prevShouldTrack","shouldTrack","cleanupDeps","link","removeSub","isDirty","batchDepth","batchedSub","batchedComputed","sub","isComputed","startBatch","endBatch","e","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","value","soft","nextSub","prevDep","nextDep","effect","options","runner","stop","trackStack","pauseTracking","enableTracking","resetTracking","onEffectCleanup","cleanup","Link","Dep","debugInfo","addSub","currentTail","targetMap","ITERATE_KEY","MAP_KEY_ITERATE_KEY","ARRAY_ITERATE_KEY","track","target","type","key","depsMap","trigger","newValue","oldValue","oldTarget","run","targetIsArray","isArrayIndex","newLength","key2","getDepFromReactive","object","depMap","reactiveReadArray","array","raw","toRaw","isShallow","toReactive","shallowReadArray","arr","arrayInstrumentations","iterator","args","x","thisArg","apply","v","searchProxy","separator","noTracking","reduce","comparer","self","method","wrapValue","iter","result","arrayProto","wrappedRetFn","needsWrap","methodFn","result2","wrappedFn","item","index","acc","res","isProxy","isNonTrackableKeys","builtInSymbols","hasOwnProperty","obj","BaseReactiveHandler","_isReadonly","_isShallow","receiver","isReadonly2","isShallow2","shallowReadonlyMap","readonlyMap","shallowReactiveMap","reactiveMap","isRef","readonly","reactive","MutableReactiveHandler","isOldValueReadonly","isReadonly","hadKey","ReadonlyReactiveHandler","mutableHandlers","readonlyHandlers","shallowReactiveHandlers","shallowReadonlyHandlers","toShallow","getProto","createIterableMethod","rawTarget","targetIsMap","isPair","isKeyOnly","innerIterator","wrap","toReadonly","done","createReadonlyMethod","createInstrumentations","shallow","instrumentations","rawKey","has","callback","observed","get","hadItems","createInstrumentationGetter","mutableCollectionHandlers","shallowCollectionHandlers","readonlyCollectionHandlers","shallowReadonlyCollectionHandlers","targetTypeMap","rawType","getTargetType","createReactiveObject","shallowReactive","shallowReadonly","baseHandlers","collectionHandlers","proxyMap","targetType","existingProxy","proxy","isReactive","markRaw","r","ref","createRef","shallowRef","rawValue","RefImpl","useDirectValue","triggerRef","ref2","unref","toValue","source","shallowUnwrapHandlers","proxyRefs","objectWithRefs","CustomRefImpl","factory","set","newVal","customRef","toRefs","ret","propertyToRef","ObjectRefImpl","_object","_key","_defaultValue","val","GetterRefImpl","_getter","toRef","defaultValue","ComputedRefImpl","setter","isSSR","getterOrOptions","debugOptions","getter","TrackOpTypes","TriggerOpTypes","ReactiveFlags","WatchErrorCodes","INITIAL_WATCHER_VALUE","cleanupMap","activeWatcher","getCurrentWatcher","onWatcherCleanup","cleanupFn","owner","cleanups","watch","cb","immediate","deep","once","scheduler","augmentJob","call","reactiveGetter","source2","traverse","boundCleanup","forceTrigger","isMultiSource","s","currentEffect","baseGetter","depth","scope","watchHandle","_cb","job","immediateFirstRun","currentWatcher","cleanup2","seen","require_reactivity","__commonJSMin","exports","module","require_runtime_core_cjs_prod","__commonJSMin","exports","reactivity","shared","pushWarningContext","vnode","popWarningContext","assertNumber","val","type","ErrorCodes","ErrorTypeStrings$1","callWithErrorHandling","fn","instance","args","err","handleError","callWithAsyncErrorHandling","res","values","i","throwInDev","contextVNode","errorHandler","throwUnhandledErrorInProduction","cur","exposedInstance","errorInfo","errorCapturedHooks","logError","throwInProd","queue","flushIndex","pendingPostFlushCbs","activePostFlushCbs","postFlushIndex","resolvedPromise","currentFlushPromise","nextTick","p","findInsertionIndex","id","start","end","middle","middleJob","middleJobId","getId","queueJob","job","jobId","lastJob","queueFlush","flushJobs","queuePostFlushCb","cb","flushPreFlushCbs","seen","flushPostFlushCbs","deduped","a","b","currentRenderingInstance","currentScopeId","setCurrentRenderingInstance","prev","pushScopeId","popScopeId","withScopeId","_id","withCtx","ctx","isNonScopedSlot","renderFnWithContext","setBlockTracking","prevInstance","withDirectives","directives","getComponentPublicInstance","bindings","dir","value","arg","modifiers","invokeDirectiveHook","prevVNode","name","oldBindings","binding","hook","TeleportEndKey","isTeleport","isTeleportDisabled","props","isTeleportDeferred","isTargetSVG","target","isTargetMathML","resolveTarget","select","targetSelector","TeleportImpl","n1","n2","container","anchor","parentComponent","parentSuspense","namespace","slotScopeIds","optimized","internals","mountChildren","patchChildren","patchBlockChildren","insert","querySelector","createText","createComment","disabled","shapeFlag","children","dynamicChildren","placeholder","mainAnchor","mount","container2","anchor2","mountToTarget","targetAnchor","prepareAnchor","updateCssVars","queuePostRenderEffect","wasDisabled","currentContainer","currentAnchor","traverseStaticChildren","moveTeleport","nextTarget","unmount","hostRemove","doRemove","targetStart","shouldRemove","child","hydrateTeleport","parentAnchor","move","moveType","el","isReorder","node","nextSibling","parentNode","hydrateChildren","targetNode","Teleport","isDisabled","leaveCbKey","enterCbKey","useTransitionState","state","onMounted","onBeforeUnmount","TransitionHookValidator","BaseTransitionPropsValidators","recursiveGetSubtree","subTree","BaseTransitionImpl","slots","getCurrentInstance","getTransitionRawChildren","findNonCommentChild","rawProps","mode","emptyPlaceholder","innerChild","getInnerChild$1","enterHooks","resolveTransitionHooks","hooks","Comment","setTransitionHooks","oldInnerChild","isSameVNodeType","leavingHooks","earlyRemove","delayedLeave","leavingVNodesCache","getLeavingNodesForType","c","BaseTransition","leavingVNodes","postClone","appear","persisted","onBeforeEnter","onEnter","onAfterEnter","onEnterCancelled","onBeforeLeave","onLeave","onAfterLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAfterAppear","onAppearCancelled","key","callHook","callAsyncHook","done","hook2","leavingVNode","afterHook","cancelHook","called","cancelled","remove","key2","vnode2","hooks2","isKeepAlive","cloneVNode","keepComment","parentKey","ret","keyedFragmentCount","Fragment","defineComponent","options","extraOptions","useId","markAsyncBoundary","useTemplateRef","refs","setRef","rawRef","oldRawRef","isUnmount","r","isAsyncWrapper","refValue","owner","ref","oldRef","setupState","rawSetupState","canSetSetupRef","_isString","_isRef","doSet","existing","hasLoggedMismatchError","logMismatchError","isSVGContainer","isMathMLContainer","getContainerType","isComment","createHydrationFunctions","rendererInternals","mountComponent","patch","patchProp","hydrate","hydrateNode","isFragmentStart","onMismatch","handleMismatch","patchFlag","domType","nextNode","Text","isTemplateNode","replaceNode","Static","needToAdoptContent","hydrateFragment","hydrateElement","locateClosingAnchor","createVNode","createTextVNode","dirs","transition","forcePatch","needCallTransitionHooks","needTransition","content","cls","next","isMismatchAllowed","clientText","isCustomElement","vnodeHooks","invokeVNodeHook","queueEffectWithSuspense","parentVNode","l","normalizeVNode","isText","fragmentSlotScopeIds","isFragment","next2","updateHOCHostEl","open","close","match","newNode","oldNode","parentNode2","parent","allowMismatchAttr","MismatchTypeString","allowedType","allowedAttr","list","requestIdleCallback","cancelIdleCallback","hydrateOnIdle","timeout","elementIsVisibleInViewport","top","left","bottom","right","innerHeight","innerWidth","hydrateOnVisible","opts","forEach","ob","entries","e","hydrateOnMediaQuery","query","mql","hydrateOnInteraction","interactions","hasHydrated","doHydrate","teardown","forEachElement","depth","defineAsyncComponent","source","loader","loadingComponent","errorComponent","delay","hydrateStrategy","suspensible","userOnError","pendingRequest","resolvedComp","retries","retry","load","thisRequest","resolve","reject","comp","patched","performHydrate","currentInstance","createInnerComp","onError","isInSSRComponentSetup","loaded","error","delayed","ref2","ce","KeepAliveImpl","sharedContext","cache","keys","current","_unmount","createElement","storageContainer","instance2","vnodeHook","invalidateMount","resetShapeFlag","pruneCache","filter","getComponentName","pruneCacheEntry","cached","watch","include","exclude","matches","pendingCacheKey","cacheSubtree","isSuspense","getInnerChild","onUpdated","suspense","da","rawVNode","isVNode","max","cachedVNode","KeepAlive","pattern","onActivated","registerKeepAliveHook","onDeactivated","wrappedHook","injectHook","injectToKeepAliveRoot","keepAliveRoot","injected","onUnmounted","prepend","reset","setCurrentInstance","createHook","lifecycle","onBeforeMount","onBeforeUpdate","onServerPrefetch","onRenderTriggered","onRenderTracked","onErrorCaptured","COMPONENTS","DIRECTIVES","resolveComponent","maybeSelfReference","resolveAsset","NULL_DYNAMIC_COMPONENT","resolveDynamicComponent","component","resolveDirective","warnMissing","Component","selfName","registry","renderList","renderItem","index","sourceIsArray","sourceIsReactiveArray","needsWrap","isReadonlySource","item","createSlots","dynamicSlots","slot","j","renderSlot","fallback","noSlotted","openBlock","createBlock","validSlotContent","ensureValidVNode","slotKey","rendered","vnodes","toHandlers","obj","preserveCaseIfNecessary","getPublicInstance","isStatefulComponent","publicPropertiesMap","resolveMergedOptions","instanceWatch","hasSetupBinding","PublicInstanceProxyHandlers","data","accessCache","appContext","normalizedProps","n","shouldCacheAccess","publicGetter","cssModule","globalProperties","propsOptions","descriptor","RuntimeCompiledPublicInstanceProxyHandlers","_","defineProps","defineEmits","defineExpose","exposed","defineOptions","defineSlots","defineModel","withDefaults","defaults","useSlots","getContext","useAttrs","calledFunctionName","createSetupContext","normalizePropsOrEmits","normalized","mergeDefaults","raw","opt","mergeModels","createPropsRestProxy","excludedKeys","withAsyncContext","getAwaitable","awaitable","unsetCurrentInstance","applyOptions","publicThis","dataOptions","computedOptions","methods","watchOptions","provideOptions","injectOptions","created","beforeMount","mounted","beforeUpdate","updated","activated","deactivated","beforeDestroy","beforeUnmount","destroyed","unmounted","render","renderTracked","renderTriggered","errorCaptured","serverPrefetch","expose","inheritAttrs","components","filters","resolveInjections","methodHandler","get","set","computed","v","createWatcher","provides","provide","registerLifecycleHook","register","_hook","checkDuplicateProperties","normalizeInject","inject","h","getter","createPathGetter","handler","base","mixins","extendsOptions","globalMixins","optionMergeStrategies","resolved","m","mergeOptions","to","from","strats","asMixin","strat","internalOptionMergeStrats","mergeDataFn","mergeEmitsOrPropsOptions","mergeObjectOptions","mergeAsArray","mergeWatchOptions","mergeInject","merged","createAppContext","uid$1","createAppAPI","rootComponent","rootProps","context","installedPlugins","pluginCleanupFns","isMounted","app","version","plugin","mixin","directive","rootContainer","isHydrate","cleanupFn","lastApp","currentApp","parentProvides","defaultValue","treatDefaultAsFactory","hasInjectionContext","internalObjectProto","createInternalObject","isInternalObject","initProps","isStateful","isSSR","attrs","setFullProps","updateProps","rawPrevProps","rawCurrentProps","hasAttrsChanged","propsToUpdate","isEmitListener","camelizedKey","resolvePropValue","kebabKey","needCastKeys","rawCastValues","camelKey","castValues","isAbsent","hasDefault","propsDefaults","mixinPropsCache","normalizePropsOptions","hasExtends","extendProps","raw2","normalizedKey","validatePropName","prop","propType","shouldCast","shouldCastTrue","typeName","isInternalKey","normalizeSlotValue","normalizeSlot","rawSlot","normalizeObjectSlots","rawSlots","normalizeVNodeSlots","assignSlots","initSlots","cacheIndexes","updateSlots","needDeletionCheck","deletionComparisonTarget","createRenderer","baseCreateRenderer","createHydrationRenderer","createHydrationFns","hostInsert","hostPatchProp","hostCreateElement","hostCreateText","hostCreateComment","hostSetText","hostSetElementText","hostParentNode","hostNextSibling","hostSetScopeId","hostInsertStaticContent","getNextHostNode","processText","processCommentNode","mountStaticNode","processFragment","processElement","processComponent","moveStaticNode","removeStaticNode","mountElement","patchElement","resolveChildrenNamespace","setScopeId","scopeId","cloneIfMounted","oldProps","newProps","toggleRecurse","patchProps","oldChildren","newChildren","fallbackContainer","oldVNode","newVNode","fragmentStartAnchor","fragmentEndAnchor","updateComponent","initialVNode","createComponentInstance","setupComponent","setupRenderEffect","shouldUpdateComponent","updateComponentPreRender","componentUpdateFn","bu","u","nonHydratedAsyncRoot","locateNonHydratedAsyncRoot","originNext","nextTree","renderComponentRoot","prevTree","bm","root","isAsyncWrapperVNode","hydrateSubTree","scopedInitialVNode","effect","update","nextVNode","prevProps","c1","prevShapeFlag","c2","patchKeyedChildren","patchUnkeyedChildren","unmountChildren","oldLength","newLength","commonLength","nextChild","l2","e1","e2","nextPos","s1","s2","keyToNewIndexMap","toBePatched","moved","maxNewIndexSoFar","newIndexToOldIndexMap","prevChild","newIndex","increasingNewIndexSequence","getSequence","nextIndex","anchorVNode","leave","delayLeave","afterLeave","remove2","performLeave","cacheIndex","shouldInvokeDirs","shouldInvokeVnodeHook","unmountComponent","removeFragment","performRemove","bum","scope","um","slotCacheKeys","teleportEnd","isFlushing","currentNamespace","allowed","shallow","ch1","ch2","arr","result","len","arrI","subComponent","ssrContextKey","useSSRContext","watchEffect","doWatch","watchPostEffect","watchSyncEffect","immediate","deep","flush","once","baseWatchOptions","runsImmediately","ssrCleanup","watchStopHandle","isPre","isFirstRun","watchHandle","path","segments","useModel","camelizedName","hyphenatedName","getModelModifiers","track","trigger","localValue","prevSetValue","prevEmittedValue","propValue","emittedValue","i2","modelName","emit","event","rawArgs","isModelListener","handlerName","onceHandler","normalizeEmitsOptions","extendEmits","normalizedFromExtend","proxy","withProxy","renderCache","fallthroughAttrs","proxyToUse","thisProxy","render2","getFunctionalFallthrough","blockStack","filterModelListeners","filterSingleRoot","recurse","singleRoot","prevChildren","nextProps","nextChildren","emits","hasPropsChanged","dynamicProps","emitsOptions","nextKeys","suspenseId","SuspenseImpl","mountSuspense","patchSuspense","hydrateSuspense","normalizeSuspenseChildren","Suspense","triggerEvent","eventListener","hiddenContainer","createSuspenseBoundary","setActiveBranch","newBranch","newFallback","activeBranch","pendingBranch","isInFallback","isHydrating","pendingId","parentSuspenseId","isSuspensible","isVNodeSuspensible","initialAnchor","resume","sync","effects","parentComponent2","delayEnter","hasUnresolvedAncestor","fallbackVNode","namespace2","mountFallback","optimized2","isInPendingSuspense","hydratedEl","asyncSetupResult","handleSetupResult","parentSuspense2","isSlotChildren","normalizeSuspenseSlot","s","block","trackBlock","isBlockTreeEnabled","currentBlock","closeBlock","branch","disableTracking","inVOnce","setupBlock","createElementBlock","createBaseVNode","transformVNodeArgs","transformer","normalizeKey","normalizeRef","ref_key","ref_for","isBlockNode","needFullChildrenNormalization","normalizeChildren","_createVNode","cloned","isClassComponent","guardReactiveProps","klass","style","extraProps","mergeRef","cloneTransition","mergedProps","mergeProps","text","flag","createStaticVNode","numberOfNodes","createCommentVNode","asBlock","slotFlag","toMerge","incoming","emptyAppContext","uid","internalSetCurrentInstance","setInSSRSetupState","g","registerGlobalSetter","setter","setters","setupResult","setupStatefulComponent","setup","setupContext","isAsyncSetup","resolvedResult","finishComponentSetup","compile","installWithProxy","registerRuntimeCompiler","_compile","isRuntimeOnly","skipOptions","template","compilerOptions","delimiters","componentCompilerOptions","finalCompilerOptions","attrsProxyHandlers","includeInferred","getterOrOptions","debugOptions","propsOrChildren","initCustomFormatter","withMemo","memo","isMemoSame","warn$1","ErrorTypeStrings","devtools","setDevtoolsHook","_ssrUtils","ssrUtils","resolveFilter","compatUtils","DeprecationTypes","require_runtime_core","__commonJSMin","exports","module","require_runtime_dom_cjs_prod","__commonJSMin","exports","runtimeCore","shared","policy","tt","val","unsafeToTrustedHTML","svgNS","mathmlNS","doc","templateContainer","nodeOps","child","parent","anchor","tag","namespace","is","props","el","text","node","selector","id","content","start","end","before","template","wrapper","TRANSITION","ANIMATION","vtcKey","DOMTransitionPropsValidators","TransitionPropsValidators","decorate$1","t","Transition","slots","resolveTransitionProps","callHook","hook","args","h2","hasExplicitCallback","rawProps","baseProps","key","name","type","duration","enterFromClass","enterActiveClass","enterToClass","appearFromClass","appearActiveClass","appearToClass","leaveFromClass","leaveActiveClass","leaveToClass","durations","normalizeDuration","enterDuration","leaveDuration","onBeforeEnter","onEnter","onEnterCancelled","onLeave","onLeaveCancelled","onBeforeAppear","onAppear","onAppearCancelled","finishEnter","isAppear","done","isCancelled","removeTransitionClass","finishLeave","makeEnterHook","resolve","nextFrame","addTransitionClass","whenTransitionEnds","forceReflow","NumberOf","n","cls","c","_vtc","cb","endId","expectedType","explicitTimeout","resolveIfNotStale","timeout","propCount","getTransitionInfo","endEvent","ended","onEnd","e","styles","getStyleProperties","transitionDelays","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationDurations","animationTimeout","hasTransform","delays","d","i","toMs","s","patchClass","value","isSVG","transitionClasses","vShowOriginalDisplay","vShowHidden","vShow","transition","setDisplay","oldValue","initVShowForSSR","CSS_VAR_TEXT","useCssVars","getter","displayRE","patchStyle","prev","next","style","isCssString","hasControlledDisplay","prevStyle","setStyle","cssVarText","importantRE","v","prefixed","autoPrefix","prefixes","prefixCache","rawName","cached","xlinkNS","patchAttr","instance","isBoolean","patchDOMProp","parentComponent","attrName","newValue","needRemove","addEventListener","event","handler","options","removeEventListener","veiKey","patchEvent","prevValue","nextValue","invokers","existingInvoker","parseName","invoker","createInvoker","optionsModifierRE","m","cachedNow","p","getNow","initialValue","patchStopImmediatePropagation","originalStop","fn","e2","isNativeOn","patchProp","shouldSetAsProp","REMOVAL","defineCustomElement","extraOptions","_createApp","Comp","VueCustomElement","VueElement","initialProps","defineSSRCustomElement","createSSRApp","BaseClass","_VueElement","_def","_props","createApp","mutations","def","isAsync","numberProps","opt","asyncDef","exposed","declaredPropKeys","has","camelKey","shouldReflect","shouldUpdate","ob","vnode","render","dispatch","owner","nonce","slotName","outlets","scopeId","o","walker","comp","useHost","caller","useShadowRoot","useCssModule","modules","mod","positionMap","newPositionMap","moveCbKey","enterCbKey","decorate","TransitionGroupImpl","state","prevChildren","children","moveClass","hasCSSTransform","callPendingCbs","recordPosition","movedChildren","applyTranslation","cssTransitionProps","TransitionGroup","oldPos","newPos","dx","dy","root","clone","container","getModelAssigner","onCompositionStart","onCompositionEnd","target","assignKey","vModelText","lazy","trim","number","castToNumber","domValue","elValue","vModelCheckbox","_","modelValue","elementValue","getValue","checked","assign","index","found","filtered","cloned","getCheckboxValue","setChecked","binding","vModelRadio","vModelSelect","isSetModel","selectedVal","setSelected","_binding","isMultiple","isArrayValue","l","option","optionValue","optionType","vModelDynamic","callModelHook","prevVNode","resolveDynamicModel","tagName","initVModelForSSR","modelToUse","systemModifiers","modifierGuards","modifiers","withModifiers","cache","cacheKey","guard","keyNames","withKeys","eventKey","k","rendererOptions","renderer","enabledHydration","ensureRenderer","ensureHydrationRenderer","hydrate","app","mount","containerOrSelector","normalizeContainer","component","proxy","resolveRootNamespace","ssrDirectiveInitialized","initDirectivesForSSR","require_runtime_dom","__commonJSMin","exports","module","require_vue_cjs_prod","__commonJSMin","exports","compilerDom","runtimeDom","shared","_interopNamespaceDefault","n","k","runtimeDom__namespace","compileCache","compileToFunction","template","options","key","cached","el","opts","tag","code","render","require_vue","__commonJSMin","exports","module","require_vue_router_prod","__commonJSMin","exports","vue","isBrowser","isRouteComponent","component","isESModule","obj","assign","applyToParams","fn","params","newParams","key","value","isArray","noop","HASH_RE","AMPERSAND_RE","SLASH_RE","EQUAL_RE","IM_RE","PLUS_RE","ENC_BRACKET_OPEN_RE","ENC_BRACKET_CLOSE_RE","ENC_CARET_RE","ENC_BACKTICK_RE","ENC_CURLY_OPEN_RE","ENC_PIPE_RE","ENC_CURLY_CLOSE_RE","ENC_SPACE_RE","commonEncode","text","encodeHash","encodeQueryValue","encodeQueryKey","encodePath","encodeParam","decode","TRAILING_SLASH_RE","removeTrailingSlash","path","parseURL","parseQuery","location","currentLocation","query","searchString","hash","hashPos","searchPos","resolveRelativePath","stringifyURL","stringifyQuery","stripBase","pathname","base","isSameRouteLocation","a","b","aLastIndex","bLastIndex","isSameRouteRecord","isSameRouteLocationParams","isSameRouteLocationParamsValue","isEquivalentArray","i","to","from","fromSegments","toSegments","lastToSegment","position","toPosition","segment","START_LOCATION_NORMALIZED","NavigationType","NavigationDirection","START","normalizeBase","baseEl","BEFORE_HASH_RE","createHref","getElementPosition","el","offset","docRect","elRect","computeScrollPosition","scrollToPosition","scrollToOptions","positionEl","isIdSelector","getScrollKey","delta","scrollPositions","saveScrollPosition","scrollPosition","getSavedScrollPosition","scroll","createBaseLocation","createCurrentLocation","search","slicePos","pathFromHash","useHistoryListeners","historyState","replace","listeners","teardowns","pauseState","popStateHandler","state","fromState","listener","pauseListeners","listen","callback","teardown","index","beforeUnloadListener","history","destroy","buildState","back","current","forward","replaced","computeScroll","useHistoryStateNavigation","changeLocation","hashIndex","url","err","data","push","currentState","createWebHistory","historyNavigation","historyListeners","go","triggerListeners","routerHistory","createMemoryHistory","queue","setLocation","direction","info","shouldTrigger","createWebHashHistory","isRouteLocation","route","isRouteName","name","NavigationFailureSymbol","NavigationFailureType","ErrorTypeMessages","stringifyRoute","createRouterError","type","isNavigationFailure","error","propertiesToLog","BASE_PARAM_PATTERN","BASE_PATH_PARSER_OPTIONS","REGEX_CHARS_RE","tokensToParser","segments","extraOptions","options","score","pattern","keys","segmentScores","tokenIndex","token","subSegmentScore","repeatable","optional","regexp","re","subPattern","parse","match","stringify","avoidDuplicatedSlash","param","compareScoreArray","diff","comparePathParserScore","aScore","bScore","comp","isLastScoreNegative","last","ROOT_TOKEN","VALID_PARAM_RE","tokenizePath","crash","message","buffer","previousState","tokens","finalizeSegment","char","customRe","consumeBuffer","addCharToBuffer","createRouteRecordMatcher","record","parent","parser","matcher","createRouterMatcher","routes","globalOptions","matchers","matcherMap","mergeOptions","getRecordMatcher","addRoute","originalRecord","isRootAdd","mainNormalizedRecord","normalizeRouteRecord","normalizedRecords","aliases","alias","originalMatcher","normalizedRecord","parentPath","connectingSlash","isAliasRecord","removeRoute","isMatchable","insertMatcher","children","matcherRef","getRoutes","findInsertionIndex","resolve","paramsFromLocation","k","m","matched","parentMatcher","mergeMetaFields","clearRoutes","normalized","normalizeRecordProps","propsObject","props","meta","defaults","partialOptions","lower","upper","mid","insertionAncestor","getInsertionAncestor","ancestor","searchParams","searchParam","eqPos","currentValue","v","normalizeQuery","normalizedQuery","matchedRouteKey","viewDepthKey","routerKey","routeLocationKey","routerViewLocationKey","useCallbacks","handlers","add","handler","reset","registerGuard","guard","removeFromList","onBeforeRouteLeave","leaveGuard","activeRecord","onBeforeRouteUpdate","updateGuard","guardToPromiseFn","runWithContext","enterCallbackArray","reject","next","valid","guardReturn","guardCall","extractComponentsGuards","guardType","guards","rawComponent","componentPromise","resolved","resolvedComponent","loadRouteLocation","promises","useLink","router","currentRoute","activeRecordIndex","length","routeMatched","currentMatched","parentRecordPath","getOriginalPath","isActive","includesParams","isExactActive","navigate","e","guardEvent","p","preferSingleVNode","vnodes","RouterLinkImpl","slots","link","elClass","getLinkClass","RouterLink","target","outer","inner","innerValue","outerValue","propClass","globalClass","defaultClass","RouterViewImpl","attrs","injectedRoute","routeToDisplay","injectedDepth","depth","initialDepth","matchedRoute","matchedRouteRef","viewRef","instance","oldInstance","oldName","currentName","ViewComponent","normalizeSlot","routePropsOption","routeProps","onVnodeUnmounted","vnode","slot","slotContent","RouterView","createRouter","parseQuery$1","stringifyQuery$1","beforeGuards","beforeResolveGuards","afterGuards","pendingLocation","normalizeParams","paramValue","encodeParams","decodeParams","parentOrRoute","recordMatcher","routeMatcher","hasRoute","rawLocation","locationNormalized","href","matcherLocation","targetParams","fullPath","locationAsObject","checkCanceledNavigation","pushWithRedirect","handleRedirectRecord","lastMatched","redirect","newTargetLocation","redirectedFrom","targetLocation","force","shouldRedirect","toLocation","failure","handleScroll","markAsReady","triggerError","finalizeNavigation","triggerAfterEach","checkCanceledNavigationAndReject","app","installedApps","leavingRecords","updatingRecords","enteringRecords","extractChangingRecords","canceledNavigationCheck","runGuardQueue","beforeEnter","isPush","isFirstNavigation","removeHistoryListener","setupListeners","_from","readyHandlers","errorListeners","ready","list","isReady","scrollBehavior","started","reactiveRoute","unmountApp","promise","len","recordFrom","recordTo","useRouter","useRoute","_name","require_vue_router","__commonJSMin","exports","module","require_lib","__commonJSMin","exports","Vue","key","target","val","settingschangedcallbacks","globalDebugFlags","localDebugFlags","debugFlagsOverridesCB","DebugFlagsProxyHandler","debugFlagsOverridesCB","localDebugFlags","globalDebugFlags","target","p","record","keys","key","newValue","toModify","runSettingsCallbacks","value","debugFlags","formatForConsoleLogs","cb","settingschangedcallbacks","e","dtapStage","isLive","backendBase","dtapstage","dtapStage","islive","isLive","initEnv","setDtapStage","setBackendBase","dtapStage","isLive","backendBase","dtapstage","islive","getBrowserDebugFlags","varname","flags","urldebugvar","debugcookie","debugcookievalue","flag","sessionDebug","qR","node_or_selector","selector","matches","qSA","isElement","node","isHTMLElement","parseLanguageTag","languageTag","match","getLang","node","tag","getWHType","obj","isCrossRealm","value","isMoney","isTemporalInstant","isTemporalPlainDateTime","isTemporalPlainDate","isTemporalPlainTime","isTemporalZonedDateTime","isDate","isBlob","isFile","stdTypeOf","value","isMoney","isBlob","isFile","isDate","isTemporalInstant","isTemporalPlainTime","isTemporalPlainDate","isTemporalPlainDateTime","isTemporalZonedDateTime","stripUnneededDecimals","num","decimals","isneg","toText","amount","decimalpoint","mindecimals","isnegative","astext","splitValue","money","split","sign","joinPrice","parts","adjustDecimals","requiredecimals","toadd","multiplier","idx","__add","lhs","rhs","requiredecimals","adjustDecimals","add","amount1","amount2","joinPrice","splitValue","subtract","amount","tosubtract","__multiply","multiply","cmp","diff","getPercentageOfAmount","perc","result","normalize","__roundIntegerToMultiple","value","roundunit","mode","roundToMultiple","unit","split_value","splitValue","split_unit","requiredecimals","adjustDecimals","result","joinPrice","min","amount","amounts","val","cmp","max","getNonNegativePowerOf10","exp","retval","running_exp","divide","divisor","lhs","rhs","mul10exp","mulfactor","test","lhs","relation","rhs","compareresult","cmp","stripUnneededDecimals","num","decimals","isneg","splitValue","money","split","sign","toText","amount","decimalpoint","mindecimals","thousandpoint","isnegative","astext","beforepoint","afterpoint","Money","_Money","value","intvalue","param","isMoney","left","right","sum","item","add","subtract","roundto","mode","roundToMultiple","lhs","rhs","cmp","relation","test","multiply","percentage","getPercentageOfAmount","numerator","divisor","divide","amounts","min","max","format","nameToSnakeCase","name","c","recodeObject","inp","isDate","isMoney","isBlob","isTemporalInstant","isTemporalPlainDate","isTemporalPlainDateTime","isTemporalZonedDateTime","recursiveToSnakeCase","toSnakeCase","key","value","toSnakeCase","inp","recursiveToSnakeCase","escapeRegExp","text","options","mask","isHTMLUnrepresentableChar","curch","encodeEntities","str","html","s","char","stringify","arg","options","usereplacer","key","value","origvalue","type","stdTypeOf","lhs","rhs","result","encodeEntities","parseTyped","input","Money","omit","value","keys","elt","ret","key","val","unlock","LocalMutex","defer","LocalLock","mutex","config","siteroot","dtapStage","whconfigel","parsedConfig","omit","initEnv","flag","getBrowserDebugFlags","debugFlags","frontendConfig","getLang","prop","getFrontendData","dataObject","allowMissing","retval","resolve","reject","_resolve","_reject","items","callbackfn","retval","idx","item","key","list","IteratorPrototype","ArrayIteratorPrototype","OriginalIteratorPrototype","callback","it","value","next_value","real_value","max_count","values","limit","remaining","index","mapper","mapped","reducer","initial_value","acc","count","string","final","first","iterables","others","it_array","e","finished","partition1","partition2","i","max","min","isObject","t","GetIteratorFlattenable","obj","method","iterator","Iterator","WrappedIterator","#iterator","args","returnMethod","Iterator_from","submitForm","action","values","method","form","item","input","navigateTo","navigation","debugFlags","CustomEvent","dispatchCustomEvent","node","event","params","prop","evt","CustomEvent","defaultaction","stop","event","addDocEventListener","node","type","listener","options","locallocks","modallocked","uiwatcher","installedanticancelhandler","currentbusymodaldialog","currentbusymodaluserdialog","busymodalcontent","mylockmgr","getLockmgr","getParentLockManager","LockManager","anyModalLocks","l","scheduleCheckUIFree","checkUIFree","toggleBusyModal","lockmgr","isDialogElement","el","checkCancelEvent","evt","show","dispatchCustomEvent","dialog","toembed","lock","pos","debugFlags","BusyLock","options","lockmgr","getLockmgr","locallocks","modallocked","toggleBusyModal","debugFlags","lockpos","scheduleCheckUIFree","flagUIBusy","options","BusyLock","getParentLockManager","debugFlags","locallocks","l","lockmgr","getLockmgr","locallockmgr","LockManager","lock","mylockmgr","isDomReady","onDomReady","callback","e","components","map","isNodeCompletelyInDom","node","processRegistration","item","reg","domready","list","applyRegistration","startnode","isDomReady","items","e","register","selector","handler","options","newreg","components","isDomReady","onDomReady","registerMissed","applyRegistration","startnode","item","getCookie","key","value","escapeRegExp","parseUserAgent","ua","UA","platform","name","version","device","browser","parseUserAgent","getBrowser","config","forwardPublisherNavigation","event","isHTMLElement","navaction","desturl","origin","configureForCMS","import_vue","UNKNOWN_FUNCTION","parse","stackString","lines","stack","line","parseResult","parseChrome","parseWinjs","parseGecko","parseNode","parseJSC","chromeRe","chromeEvalRe","parts","isNative","isEval","submatch","winjsRe","geckoRe","geckoEvalRe","javaScriptCoreRe","nodeRe","parseTrace","parse","i","formatTrace","trace","e","prependStackTrace","error","stacklines","tracelines","globalseqnr","getDebugAppend","urldebugvar","ControlledCall","client","method","stack","id","options","callurl","fetchoptions","fetchpromise","requestStack","response","retryafter","resolve","exception","jsonresponse","logitem","err","prependStackTrace","RPCClient","url","debugFlags","error","backendBase","params","parseTrace","ServiceProxy","target","prop","receiver","newoptions","createClient","args","servicename","rpcclient","isAbsolute","url","getBaseURL","backendBase","ControlledCall","client","method","stack","options","callurl","fetchoptions","fetchpromise","requestStack","response","exception","retryafter","resolve","jsonresponse","parseTyped","logitem","omit","err","prependStackTrace","RPCClient","debugFlags","error","params","stringify","parseTrace","ServiceProxy","target","prop","receiver","newoptions","rpc","args","service","servicematch","rpcclient","PublicCookieSuffix","authOptions","getCookieName","getFrontendData","getAuthLocalData","c","parseTyped","getCookie","PublicCookieSuffix","submitLoginForm","node","event","_stack","stop","username","password","site","returnto","persistentlogin","login","lock","__using","flagUIBusy","loginresult","refreshLoginStatus","navigateTo","failLogin","_","_error","_hasError","__callDispose","loggedIn","isLoggedIn","setupWRDAuth","options","register","addDocEventListener","evt","handleLogoutClick","doLogout","logout","onDomReady","message","response","form","evtdetail","dispatchCustomEvent","loginfield","qR","getLoginTweaks","tweaks","getLang","urlvars","login","username","password","options","cookieName","getCookieName","result","rpc","getBrowser","getAuthLocalData","doLogout","logout","navigateTo","startSSOLogin","tag","client","createClient","defer","toSnakeCase","instr","e","postRenderChecks","log","logtext","onDomReady","import_vue","import_vue_router","import_vue","_hoisted_1","render","_ctx","_cache","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createStaticVNode","script","render","Tech42Logo_default","api","rpc","import_vue","errorMessage","error","fallback","tools","loading","error","started","load","api","errorMessage","useTools","route","tools","useTools","toolKey","toolName","t","user","api","onLogout","logout","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_component_RouterLink","_resolveComponent","_openBlock","_createElementBlock","_createVNode","_withCtx","_createElementVNode","_createCommentVNode","_toDisplayString","_createBlock","_createTextVNode","AppHeader_default","render","import_vue","GOOGLE_IDP_TAG","GENERIC","OVERRIDES","loginFailureMessage","code","platformMessage","DEVELOPER_MACHINE","ACCOUNTS_BY_HOST","devAccounts","hostname","loginPrefill","first","MIN_LOGIN_BUSY_MS","LOGIN_SAFETY_MS","EMAIL_KEY","REMEMBER_ME_KEY","prefill","loginPrefill","accounts","devAccounts","googleAvailable","getFrontendData","startingGoogle","errorMessage","loggingIn","loginSubmittedAt","failTimer","safetyTimer","readStored","key","email","value","password","rememberMe","on","form","useAccount","account","clearTimers","onLoginSubmit","onGoogleLogin","startSSOLogin","GOOGLE_IDP_TAG","e","onLoginFailed","evt","detail","message","loginFailureMessage","wait","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_createTextVNode","_toDisplayString","_Fragment","_renderList","account","_normalizeClass","$event","_createCommentVNode","_createStaticVNode","_withDirectives","_vModelText","_vModelCheckbox","LoginForm_default","render","import_vue","timerScheduler","run","delayMs","handle","UndoToastQueue","#scheduler","#pending","#listeners","#inFlight","#nextId","scheduler","item","listener","spec","id","cancel","#close","#notify","ids","toast","outcome","#run","running","error","undoToasts","toasts","undoHint","unsubscribe","sync","undoToasts","onPageHide","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_TransitionGroup","_withCtx","_Fragment","_renderList","toast","_createElementVNode","_toDisplayString","_createCommentVNode","$event","ToastHost_default","render","import_vue","import_vue_router","import_vue","LOGGED_IN_CLASS","useWrdAuthState","isLoggedIn","observer","read","isLoggedIn","useWrdAuthState","route","onKey","evt","undoToasts","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_component_RouterView","_resolveComponent","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createBlock","_createVNode","_createElementVNode","App_default","render","import_vue_router","import_vue_router","tools","loading","error","useTools","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","tool","_createBlock","_resolveDynamicComponent","_mergeProps","_withCtx","_createTextVNode","_createCommentVNode","ToolsView_default","render","import_vue","import_vue","fmtBytes","n","fmtAgo","ms","now","s","fmtUptime","fmtDate","iso","d","fmtTime","time","date","props","__props","TYPE_OPTIONS","BADGE_CLASS","type","fireOnly","expanded","all","shown","list","e","toggle","key","next","badgeLabel","event","badgeClass","summaryFor","data","detailFor","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_withDirectives","$event","_Fragment","_renderList","opt","_toDisplayString","_vModelSelect","_vModelCheckbox","event","i","_normalizeClass","_createCommentVNode","AdaEventsPanel_default","render","statusClass","status","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_toDisplayString","_Fragment","_renderList","proc","_createElementVNode","_normalizeClass","AdaPm2Panel_default","render","import_vue","import_vue","props","__props","emit","__emit","onKey","evt","isOpen","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createElementBlock","_withModifiers","$event","_createElementVNode","_normalizeClass","_renderSlot","_createTextVNode","_toDisplayString","_createCommentVNode","ModalDialog_default","render","props","__props","emit","__emit","open","problems","okLine","c","busyLine","openSession","issue","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_toDisplayString","_createElementVNode","_createCommentVNode","_renderList","check","i","_normalizeClass","$event","_createVNode","_withCtx","AdaProblemsPanel_default","render","import_vue","props","__props","emit","__emit","meta","fmtBytes","fmtAgo","body","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_toDisplayString","_createElementBlock","_createCommentVNode","AdaSessionDialog_default","render","__emit","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_toDisplayString","_Fragment","_renderList","session","$event","_createElementVNode","AdaSessionsPanel_default","render","EVENT_LIMIT","INTERVALS","problems","pm2","events","sessions","updated","auto","intervalMs","busy","timer","load","fetcher","onError","err","errorMessage","refresh","p","m","e","s","api","error","restartTimer","level","markClass","value","prefix","sessionIssue","sessionData","sessionLoading","loadSession","full","issue","openSession","closeSession","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_createTextVNode","_withDirectives","$event","_vModelCheckbox","_Fragment","_renderList","opt","_toDisplayString","_vModelSelect","_createCommentVNode","_createVNode","AdaView_default","render","import_vue","import_vue_router","import_vue","formatExpiresIn","expiresAt","now","left","expiresLabel","short","dutchDate","date","pad","value","buildShareText","input","lines","plural","count","one","many","gistBadges","gist","badges","props","__props","badges","gistBadges","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_renderList","badge","_normalizeClass","_toDisplayString","GistBadges_default","render","gists","selectedIds","loading","busy","error","confirming","allSelected","someSelected","load","api","alive","gist","id","e","errorMessage","toggleAll","checked","toggleOne","other","remove","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","$event","_toDisplayString","_createCommentVNode","_createVNode","_withCtx","_createTextVNode","_Fragment","_renderList","gist","GistsListView_default","render","import_vue","import_vue_router","stateFromGist","gist","doc","toCreateRequest","state","toUpdateRequest","original","request","documents","import_vue","MARKDOWN_EXTENSIONS","isMarkdownFilename","name","lower","ext","stripMarkdownExtension","ensureMdExtension","trimmed","readMarkdownFiles","files","incoming","file","isMarkdownFilename","downloadMarkdown","doc","url","link","ensureMdExtension","documents","_useModel","__props","props","emit","__emit","addInput","replaceInput","replacing","reading","dragging","error","active","move","index","direction","next","target","rename","value","doc","i","replace","read","files","result","readMarkdownFiles","selected","event","replacement","input","drop","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","doc","index","$event","_","i","_createCommentVNode","_normalizeClass","_withModifiers","DocumentManager_default","render","import_vue","props","__props","emit","__emit","copied","error","timer","text","buildShareText","copy","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_createElementBlock","_toDisplayString","_createCommentVNode","ShareDialog_default","render","props","__props","router","original","state","emptyState","loading","busy","reading","error","titleError","message","missing","sharing","confirming","titleInput","generation","timer","locked","documents","value","expiryLabel","expiresLabel","showMessage","reportFailure","caught","fallback","detail","errorMessage","id","previous","onCleanup","current","gist","api","stateFromGist","save","existing","request","toUpdateRequest","toCreateRequest","remove","toggleRemovePassword","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_withCtx","_createTextVNode","_createElementVNode","_toDisplayString","$event","_createCommentVNode","_withModifiers","_withDirectives","_normalizeClass","_vModelText","_createBlock","_Fragment","_vModelSelect","_vModelCheckbox","GistEditorView_default","render","import_vue","import_vue_router","BLOCKS","SCORE_KEYS","UPDATE_CATEGORIES","FOCUS_COUNT","MAX_FOCUS","newUpdateItemId","pad","n","toIsoDate","date","fromIsoDate","iso","year","month","day","addDays","days","mondayOf","sinceMonday","meetingDateToStart","now","options","monday","isoWeekNumber","iso","date","fromIsoDate","thursday","firstThursday","days","emptyScores","dueFor","choice","today","iso","toIsoDate","weekday","current","addDays","focusText","area","import_vue_router","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_withCtx","_createElementVNode","_renderSlot","MondaysHeader_default","render","import_vue","import_vue","import_vue","createContext","providerComponentName: string | string[]","contextName?: string","symbolDescription","providerComponentName","contextName","injectionKey: InjectionKey<ContextValue | null>","fallback?: T","context","injectionKey","fallback","contextValue: ContextValue","contextValue","getActiveElement","activeElement","handleAndDispatchCustomEvent","name: string","handler: ((event: E) => void) | undefined","detail: { originalEvent: OriginalEvent } & (E extends CustomEvent<infer D>\n    ? D\n    : never)","target","detail","event","name","handler","isNullish","value: any","value","import_vue","computedEager","fn","options","_options$flush","result","tryOnScopeDispose","fn","failSilently","createGlobalState","stateFactory","initialized","state","scope","args","isClient","isWorker","isDef","val","toString","isObject","val","isIOS","getIsIOS","_window","_window2","_window3","isClient","toArray","value","cacheStringFunction","fn","cache","str","hyphenateRE","hyphenate","camelizeRE","camelize","_","c","getLifeCycleTarget","target","createSharedComposable","composable","isClient","subscribers","state","scope","dispose","args","tryOnScopeDispose","refAutoReset","defaultValue","afterMs","track","trigger","value","timer","resetAfter","tryOnScopeDispose","newValue","tryOnBeforeUnmount","fn","target","getLifeCycleTarget","watchImmediate","source","cb","options","import_vue","defaultWindow","isClient","defaultDocument","defaultNavigator","defaultLocation","unrefElement","elRef","_$el","plain","useEventListener","args","register","el","event","listener","options","firstParamTargets","test","toArray","e","watchImmediate","_firstParamTargets$va","_firstParamTargets$va2","raw_targets","raw_events","raw_listeners","raw_options","_","onCleanup","optionsClone","isObject","cleanups","fn","useMounted","isMounted","instance","createKeyPredicate","keyFilter","event","onKeyStroke","args","key","handler","options","target","defaultWindow","eventName","passive","dedupe","predicate","useEventListener","e","cloneFnJSON","source","DEFAULT_UNITS","useVModel","props","key","emit","options","_vm$$emit","_vm$proxy","clone","passive","eventName","deep","defaultValue","shouldEmit","vm","_emit","event","cloneFn","val","cloneFnJSON","getValue","isDef","triggerEmit","value","proxy","isUpdating","renderSlotFragments","children?: VNode[]","children","child","ignoredElement","useArrowNavigation","e: KeyboardEvent","currentElement: HTMLElement","parentElement: HTMLElement | undefined","options: ArrowNavigationOptions","currentElement","options","arrowKeyOptions","attributeName","itemsArray","loop","dir","preventScroll","focus","right","left","up","down","home","end","goingVertical","goingHorizontal","allCollectionItems: HTMLElement[]","parentElement","allCollectionItems","item: HTMLElement | null","item","findNextFocusableElement","elements: HTMLElement[]","options: FindNextFocusableElementOptions","iterations","elements","index","newIndex: number","newIndex","adjustedNewIndex","candidate","injectConfigProviderContext","provideConfigProviderContext","createContext","isPlainObject","value","prototype","_defu","baseObject","defaults","namespace","merger","object","key","createDefu","arguments_","p","c","defu","defuFn","currentValue","defuArrayFn","useBodyLockStackCount","createSharedComposable","map","initialOverflow","locked","value","context","injectConfigProviderContext","stopTouchMoveListener: Fn | null","resetBodyStyle","isIOS","stopTouchMoveListener","val","oldVal","isClient","verticalScrollbarWidth","defaultConfig","config","defu","useEventListener","e: TouchEvent","preventDefault","e","useBodyScrollLock","initialState?: boolean | undefined","id","initialState","tryOnBeforeUnmount","checkOverflowScroll","ele: Element","style","ele","parent","rawEvent: TouchEvent","rawEvent","_target","useDirection","dir?: Ref<Direction | undefined>","context","injectConfigProviderContext","dir","useEmitAsProps","emit: (name: Name, ...args: any[]) => void","vm","events","result: Record<string, any>","ev","result","arg","emit","count","useFocusGuards","cleanupFn","isClient","edgeGuards","createFocusGuard","node","element","useForwardExpose","instance","currentRef","currentElement","resolveCurrentElement","unrefElement","localExpose: Record<string, any> | null","ret: Record<string, any>","key","ret","localExpose","forwardRef","ref: Element | T | null","ref","childExposed","merged","useForwardProps","props: MaybeRefOrGetter<T>","vm","defaultProps","prev","curr","defaultValue","refProps","props","preservedProps","assignedProps","key","useForwardPropsEmits","props: MaybeRefOrGetter<T>","emit?: (name: Name, ...args: any[]) => void","parsedProps","useForwardProps","props","emitsAsProps","emit","useEmitAsProps","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","node","correctTargets","parent","targets","target","correctedTarget","x","applyAttributeToOthers","parentNode","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","el","deep","attr","alreadyHidden","counterValue","markerValue","e","hideOthers","activeParentNode","useHideOthers","target: MaybeElementRef","undo: ReturnType<typeof hideOthers>","unrefElement","target","el","isInsideClosedPopover","undo","hideOthers","count","useId","deterministicId?: string | null | undefined","prefix","deterministicId","id: string","configProviderContext","injectConfigProviderContext","id","vue","useSize","element: MaybeElementRef","size","width","height","el","unrefElement","element","resizeObserver","entries","entry","width: number","height: number","borderSizeEntry","borderSize","width$1","height$1","useStateMachine","initialState: MachineState<M>","machine: M & Machine<MachineState<M>>","state","initialState","reducer","event: MachineEvent<M>","machine","event","useTypeahead","callback?: (search: string) => void","search","refAutoReset","key: string","items: { ref: HTMLElement, value?: any }[]","key","callback","currentItem","getActiveElement","itemsWithTextValue","items","item","currentMatch","values","nextMatch","getNextMatch","newItem","wrapArray","array: T[]","startIndex: number","array","_","index","startIndex","values: string[]","search: string","currentMatch?: string","normalizedSearch","char","currentMatchIndex","wrappedValues","v","value","usePresence","present: Ref<boolean>","node: Ref<HTMLElement | undefined>","stylesRef","prevAnimationNameRef","prevPresentRef","present","initialState","timeoutId: number | undefined","ownerWindow","node","defaultWindow","state","dispatch","useStateMachine","dispatchCustomEvent","name: 'enter' | 'after-enter' | 'leave' | 'after-leave'","isClient","customEvent","name","currentPresent","prevPresent","hasPresentChanged","prevAnimationName","currentAnimationName","getAnimationName","handleAnimationEnd","event: AnimationEvent","isCurrentAnimation","event","directionName","currentFillMode","timeoutId","handleAnimationStart","watcher","newNode","oldNode","stateWatcher","node?: HTMLElement","Presence_default","props","slots","expose","present","forceMount","node","isPresent","usePresence","children","renderSlotFragments","instance","componentName","line","v","el","unrefElement","Slot","_","attrs","slots","children","renderSlotFragments","firstNonCommentChildrenIndex","child","firstNonCommentChildren","mergedProps","cloned","SELF_CLOSING_TAGS","Primitive","props","attrs","slots","asTag","Slot","usePrimitiveElement","primitiveElement","currentElement","unrefElement","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","isLayerExist","layerElement: HTMLElement","targetElement: HTMLElement","targetElement","targetLayer","mainLayer","layerElement","nodeList","usePointerDownOutside","onPointerDownOutside?: (event: PointerDownOutsideEvent) => void","element?: Ref<HTMLElement | undefined>","enabled: MaybeRefOrGetter<boolean>","ownerDocument: Document","element","isPointerInsideDOMTree","handleClickRef","cleanupFn","isClient","enabled","handlePointerDown","event: PointerEvent","target","event","handleAndDispatchPointerDownOutsideEvent","handleAndDispatchCustomEvent","onPointerDownOutside","eventDetail","ownerDocument","timerId","useFocusOutside","onFocusOutside?: (event: FocusOutsideEvent) => void","isFocusInsideDOMTree","handleFocus","event: FocusEvent","onFocusOutside","context","props","__props","emits","__emit","forwardRef","layerElement","useForwardExpose","ownerDocument","layers","index","isBodyPointerEventsDisabled","isPointerEventsEnabled","localLayers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","pointerDownOutside","usePointerDownOutside","event","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","onKeyStroke","element","disableOutsidePointerEvents","_","onCleanup","isNullish","cleanupFn","Primitive","asChild","as","_ctx","useFocusStackState","createGlobalState","createFocusScopesStack","stack","focusScope: FocusScopeAPI","activeFocusScope","focusScope","arrayRemove","array: T[]","item: T","updatedArray","array","index","item","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","focusFirst","candidates: HTMLElement[]","select","previouslyFocusedElement","getActiveElement","candidate","candidates","focus","getTabbableEdges","container: HTMLElement","getTabbableCandidates","container","first","findVisible","last","nodes: HTMLElement[]","walker","node: any","isHiddenInput","node","nodes","elements: HTMLElement[]","element","elements","isHidden","node: HTMLElement","upTo","isSelectableInput","element: any","element?: FocusableTarget | null","props","__props","emits","__emit","currentRef","currentElement","useForwardExpose","lastFocusedElementRef","focusScopesStack","createFocusScopesStack","focusScope","cleanupFn","isClient","container","handleFocusIn","event","target","focus","handleFocusOut","relatedTarget","handleMutations","mutations","lastFocusedElement","m","mutationObserver","previouslyFocusedElement","getActiveElement","mountEvent","AUTOFOCUS_ON_MOUNT","EVENT_OPTIONS","ev","focusFirst","getTabbableCandidates","unmountEvent","AUTOFOCUS_ON_UNMOUNT","unmountEventHandler","handleKeyDown","isTabKey","focusedElement","first","last","getTabbableEdges","Primitive","asChild","as","_ctx","ITEM_SELECT","SELECTION_KEYS","FIRST_KEYS","LAST_KEYS","FIRST_LAST_KEYS","SUB_OPEN_KEYS: Record<Direction, string[]>","getOpenState","open: boolean","open","focusFirst","candidates: HTMLElement[]","PREVIOUSLY_FOCUSED_ELEMENT","getActiveElement","candidate","candidates","isPointInPolygon","point: Point","polygon: Polygon","x","y","point","inside","i","j","polygon","xi","yi","xj","yj","isPointerInGraceArea","event: PointerEvent","area?: Polygon","area","cursorPos","event","isMouseEvent","isMounted","useMounted","forceMount","to","disabled","defer","_ctx","ITEM_DATA_ATTR","useCollection","options: { key?: string, isProvider?: boolean }","key","isProvider","options","injectionKey","context: CollectionContext<ItemData>","itemMap","context","getItems","includeDisabledItem","collectionNode","orderedNodes","orderedItems","a","i","CollectionSlot","_","slots","attrs","primitiveElement","currentElement","usePrimitiveElement","Slot","CollectionItem","props","cleanupFn","reactiveItems","itemMapSize","ENTRY_FOCUS","EVENT_OPTIONS","focusFirst","candidates: HTMLElement[]","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","getActiveElement","candidate","candidates","injectPopperRootContext","providePopperRootContext","createContext","anchor","element","_ctx","props","__props","forwardRef","currentElement","useForwardExpose","rootContext","injectPopperRootContext","Primitive","as","asChild","_ctx","isNotNull","value: T | null","value","transformOrigin","options: {\n  arrowWidth: number\n  arrowHeight: number\n}","options","data","placement","rects","middlewareData","isArrowHidden","arrowWidth","arrowHeight","placedSide","placedAlign","getSideAndAlignFromPlacement","noArrowAlign","arrowXCenter","arrowYCenter","x","y","placement: Placement","side","align","sides","min","max","round","floor","createCoords","v","oppositeSideMap","clamp","start","value","end","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","x","y","width","height","computeCoordsFromPlacement","_ref","placement","rtl","reference","floating","sideAxis","getSideAxis","alignmentAxis","getAlignmentAxis","alignLength","getAxisLength","side","getSide","isVertical","commonX","commonY","commonAlign","coords","getAlignment","detectOverflow","state","options","_await$platform$isEle","x","y","platform","rects","elements","strategy","boundary","rootBoundary","elementContext","altBoundary","padding","evaluate","paddingObject","getPaddingObject","element","clippingClientRect","rectToClientRect","rect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","config","middleware","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","i","currentMiddleware","name","fn","nextX","nextY","data","reset","arrow","axis","length","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","min","maxPadding","min$1","max","center","offset","clamp","shouldAddOffset","alignmentOffset","flip","options","state","_middlewareData$arrow","_middlewareData$flip","placement","middlewareData","rects","initialPlacement","platform","elements","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","flipAlignment","detectOverflowOptions","evaluate","side","getSide","initialSideAxis","getSideAxis","isBasePlacement","rtl","fallbackPlacements","getOppositePlacement","getExpandedPlacements","hasFallbackAxisSideDirection","getOppositeAxisPlacements","placements","overflow","overflows","overflowsData","sides","getAlignmentSides","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","d","resetPlacement","a","b","_overflowsData$filter2","currentSideAxis","acc","getSideOffsets","rect","isAnySideFullyClipped","hide","strategy","offsets","originSides","convertValueToCoords","state","options","placement","platform","elements","rtl","side","getSide","alignment","getAlignment","isVertical","getSideAxis","mainAxisMulti","crossAxisMulti","rawValue","evaluate","mainAxis","crossAxis","alignmentAxis","offset","_middlewareData$offse","_middlewareData$arrow","x","y","middlewareData","diffCoords","shift","checkMainAxis","checkCrossAxis","limiter","_ref","detectOverflowOptions","coords","overflow","getOppositeAxis","mainAxisCoord","crossAxisCoord","minSide","maxSide","min","max","clamp","limitedCoords","limitShift","rects","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","size","_state$middlewareData","_state$middlewareData2","apply","isYAxis","width","height","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","_ref","value","isElement","isHTMLElement","isShadowRoot","isOverflowElement","element","overflow","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","result","getNearestOverflowAncestor","parentNode","getOverflowAncestors","list","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","element","css","getComputedStyle","width","height","hasOffset","isHTMLElement","offsetWidth","offsetHeight","shouldFallback","round","unwrapElement","isElement","getScale","domElement","createCoords","rect","$","x","y","noOffsets","getVisualOffsets","win","getWindow","isWebKit","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","offsetParent","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","getFrameElement","iframeScale","iframeRect","left","top","rectToClientRect","getWindowScrollBarX","leftScroll","getNodeScroll","getDocumentElement","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","_ref","elements","strategy","topLayer","isTopLayer","offsets","isOffsetParentAnElement","getNodeName","isOverflowElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","max","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","parentNode","getParentNode","isLastTraversableNode","getClippingElementAncestors","cache","cachedResult","result","getOverflowAncestors","el","currentContainingBlockComputedStyle","elementIsFixed","currentNode","computedStyle","currentNodeIsContaining","isContainingBlock","ancestor","getClippingRect","boundary","rootBoundary","clippingAncestors","firstRect","right","bottom","i","min","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","isTableElement","getContainingBlock","getElementRects","data","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","platform","rectsAreEqual","a","b","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","threshold","elementRectForRootMargin","insetTop","floor","insetRight","insetBottom","insetLeft","options","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","reference","floating","update","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset","shift","flip","size","hide","arrow","limitShift","computePosition","reference","floating","options","cache","mergedOptions","platform","platformWithCache","import_vue_demi","isComponentPublicInstance","target","unwrapElement","element","isNode","getNodeName","toValue","source","arrow","options","args","getDPR","roundByDPR","value","dpr","useFloating","reference","floating","whileElementsMountedOption","openOption","_toValue","middlewareOption","placementOption","_toValue2","strategyOption","_toValue3","transformOption","_toValue4","referenceElement","floatingElement","x","y","strategy","placement","middlewareData","isPositioned","floatingStyles","initialStyles","xVal","yVal","whileElementsMountedCleanup","update","open","computePosition","position","cleanup","attach","reset","PopperContentPropsDefaultValue","injectPopperContentContext","providePopperContentContext","createContext","props","__props","emits","__emit","rootContext","injectPopperRootContext","forwardRef","contentElement","useForwardExpose","floatingRef","arrow$1","arrowWidth","arrowHeight","useSize","desiredPlacement","collisionPadding","boundary","detectOverflowOptions","isNotNull","flipOptions","computedMiddleware","computedEager","offset","flip","shift","limitShift","size","elements","rects","availableWidth","availableHeight","anchorWidth","anchorHeight","contentStyle","arrow","transformOrigin","hide","reference","floatingStyles","placement","isPositioned","middlewareData","update","useFloating","args","autoUpdate","placedSide","getSideAndAlignFromPlacement","placedAlign","shouldHideArrow","cannotCenterArrow","contentZIndex","arrowX","arrowY","element","Primitive","$attrs","as","_ctx","injectRovingFocusGroupContext","provideRovingFocusGroupContext","createContext","props","__props","emits","__emit","loop","orientation","propDir","dir","useDirection","currentTabStopId","useVModel","isTabbingBackOut","isClickFocus","focusableItemsCount","getItems","CollectionSlot","useCollection","handleFocus","event","isKeyboardFocus","entryFocusEvent","ENTRY_FOCUS","EVENT_OPTIONS","items","i","activeItem","item","highlightedItem","currentItem","candidateItems","focusFirst","handleMouseUp","__expose","tabStopId","Primitive","as","asChild","_cache","$event","_ctx","props","__props","PopperAnchor_default","_ctx","useIsUsingKeyboardImpl","isUsingKeyboard","useEventListener","useIsUsingKeyboard","createSharedComposable","injectMenuContext","provideMenuContext","createContext","injectMenuRootContext","provideMenuRootContext","props","__props","emits","__emit","modal","propDir","dir","useDirection","open","useVModel","content","isUsingKeyboardRef","useIsUsingKeyboard","value","element","PopperRoot_default","_ctx","injectMenuContentContext","provideMenuContentContext","createContext","props","__props","emits","__emit","menuContext","injectMenuContext","rootContext","injectMenuRootContext","trapFocus","disableOutsidePointerEvents","loop","useFocusGuards","useBodyScrollLock","searchRef","timerRef","pointerGraceTimerRef","pointerGraceIntentRef","pointerDirRef","lastPointerXRef","currentItemId","rovingFocusGroupRef","forwardRef","contentElement","useForwardExpose","handleTypeaheadSearch","useTypeahead","highlightedElement","onKeydownNavigation","event","el","useArrowNavigation","getActiveElement","onKeydownEnter","filterElement","activeSubmenuContext","isPointerMovingToSubmenu","isPointerInGraceArea","handleMountAutoFocus","handleKeyDown","target","isKeyDownInside","isKeyDownInTextField","isModifierKey","isCharacterKey","collectionItems","FIRST_LAST_KEYS","candidateNodes","item","LAST_KEYS","focusFirst","handleBlur","handlePointerMove","isMouseEvent","pointerXHasChanged","newDir","handlePointerEnter","intent","FocusScope_default","_cache","$event","DismissableLayer_default","RovingFocusGroup_default","PopperContent_default","as","asChild","getOpenState","side","sideOffset","align","alignOffset","avoidCollisions","collisionBoundary","collisionPadding","arrowPadding","prioritizePosition","positionStrategy","updatePositionStrategy","sticky","hideWhenDetached","reference","_ctx","props","__props","contentContext","injectMenuContentContext","forwardRef","currentElement","useForwardExpose","CollectionItem","useCollection","isFocused","isHighlighted","handlePointerMove","event","isMouseEvent","item","getActiveElement","handlePointerLeave","textValue","Primitive","$attrs","as","asChild","disabled","_cache","_ctx","props","__props","emits","__emit","forwardRef","currentElement","useForwardExpose","rootContext","injectMenuRootContext","contentContext","injectMenuContentContext","isPointerDownRef","handleSelect","menuItem","itemSelectEvent","ITEM_SELECT","MenuItemImpl_default","_cache","event","isTypingAhead","disabled","SELECTION_KEYS","_ctx","props","__props","emits","__emit","forwarded","useForwardPropsEmits","menuContext","injectMenuContext","forwardRef","currentElement","useForwardExpose","useHideOthers","MenuContentImpl_default","_cache","$event","_ctx","forwarded","useForwardPropsEmits","__props","__emit","menuContext","injectMenuContext","MenuContentImpl_default","_cache","$event","_ctx","forwarded","useForwardPropsEmits","__props","__emit","menuContext","injectMenuContext","rootContext","injectMenuRootContext","Presence_default","forceMount","MenuRootContentModal_default","$attrs","_ctx","MenuRootContentNonModal_default","props","__props","Teleport_default","_ctx","props","__props","Primitive","_ctx","injectContextMenuRootContext","provideContextMenuRootContext","createContext","props","__props","emits","__emit","propDir","modal","pressOpenDelay","useForwardExpose","dir","useDirection","open","triggerElement","value","MenuRoot_default","$event","_ctx","forwarded","useForwardPropsEmits","__props","__emit","useForwardExpose","rootContext","injectContextMenuRootContext","hasInteractedOutside","MenuContent_default","_cache","event","_ctx","props","__props","emitsAsProps","useEmitAsProps","__emit","useForwardExpose","MenuItem_default","_ctx","props","__props","MenuPortal_default","_ctx","props","__props","useForwardExpose","MenuSeparator_default","_ctx","isTouchOrPen","event: PointerEvent","event","props","__props","disabled","forwardRef","currentElement","useForwardExpose","rootContext","injectContextMenuRootContext","point","virtualEl","longPressTimer","clearLongPress","handleOpen","event","handleContextMenu","handlePointerDown","isTouchOrPen","handlePointerEvent","MenuAnchor_default","Primitive","as","asChild","$attrs","_ctx","injectDropdownMenuRootContext","provideDropdownMenuRootContext","createContext","props","__props","emit","__emit","useForwardExpose","open","useVModel","triggerElement","modal","propDir","dir","useDirection","value","MenuRoot_default","$event","_ctx","forwarded","useForwardPropsEmits","__props","__emit","useForwardExpose","rootContext","injectDropdownMenuRootContext","hasInteractedOutsideRef","handleCloseAutoFocus","event","useId","MenuContent_default","_cache","originalEvent","ctrlLeftClick","isRightClick","_ctx","props","__props","emitsAsProps","useEmitAsProps","__emit","useForwardExpose","MenuItem_default","_ctx","props","__props","MenuPortal_default","_ctx","props","__props","useForwardExpose","MenuSeparator_default","_ctx","props","__props","rootContext","injectDropdownMenuRootContext","forwardRef","triggerElement","useForwardExpose","useId","MenuAnchor_default","Primitive","as","disabled","_cache","event","_ctx","euro","euroCents","decimal","oneDecimal","kilo","shortDate","date","withYear","fmtEuro","amount","options","fmtEuroK","fmtHours","hours","percentOf","value","goal","fmtWeekOf","iso","fromIsoDate","fmtWeek","isoWeekNumber","fmtMonth","month","fromIsoDate","WEEKDAYS","fmtDue","iso","date","shortDate","fmtClock","fmtInputDate","day","time","fmtAverage","value","oneDecimal","initials","name","words","ROTATIONS","tilt","index","import_vue","mdurl_exports","__export","decode_default","encode_default","format","parse_default","decodeCache","getDecodeCache","exclude","cache","i","ch","decode","string","seq","result","l","b1","b2","chr","b3","b4","decode_default","encodeCache","getEncodeCache","exclude","cache","i","ch","encode","string","keepEscaped","result","l","code","nextCode","encode_default","format","url","result","Url","protocolPattern","portPattern","simplePathPattern","delims","unwise","autoEscape","nonHostChars","hostEndingChars","hostnameMaxLen","hostnamePartPattern","hostnamePartStart","hostlessProtocol","slashedProtocol","urlParse","url","slashesDenoteHost","u","lowerProto","hec","slashes","rest","simplePath","proto","hostEnd","i","auth","atSign","host","ipv6Hostname","hostparts","l","part","newpart","j","k","validParts","notHost","bit","hash","qm","port","parse_default","build_exports","__export","Any","Cc","Cf","P","S","Z","decodeMap","replaceCodePoint","codePoint","decodeBase64","input","binary","evenLength","out","index","outIndex","lo","hi","htmlDecodeTree","decodeBase64","BinTrieFlags","CharCodes","TO_LOWER_BIT","isNumber","code","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","input","offset","char","digit","lastCp","expectedLength","replaceCodePoint","current","valueLength","BinTrieFlags","runLength","firstChar","charIndexInPacked","packedWord","expectedChar","determineBranch","result","consumed","getDecoder","returnValue","decoder","data","lastIndex","length","nodeIndex","branchCount","jumpOffset","value","packedKeySlots","lo","hi","mid","slot","midKey","htmlDecoder","htmlDecodeTree","decodeHTMLStrict","htmlString","htmlDecoder","DecodingMode","EntityLevel","EncodingMode","REBuilder","Any","Cc","Z","P","opts","str","open","close","depth","openRE","closeRE","atom","pair","level","h16","ls32","tlds_src","name","web_schema","text","pos","self","re","m","match","defaultSchemas","tlds_2ch","tlds_default","unpackTlds","result","item","sep","prefix","suffix","defaultOptions","Match","schema","index","lastIndex","raw","LinkifyIt","options","rebuilder","linkifyOptions","definition","def","mailHostRe","mailNameRe","schemaRe","fuzzyLinkRe","fuzzyLinkCandidate","fuzzyEmailCandidate","schemaPrefix","schemaDone","fuzzyLinkDone","fuzzyEmailDone","scanFrom","fuzzyCandidate","schemaCandidate","len","candidate","list","keepOld","regexPunycode","regexNonASCII","regexSeparators","errors","baseMinusTMin","floor","stringFromCharCode","error","type","map","array","callback","result","length","mapDomain","domain","parts","labels","encoded","ucs2decode","string","output","counter","value","extra","ucs2encode","codePoints","basicToDigit","codePoint","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","k","decode","input","inputLength","i","n","bias","basic","j","index","oldi","w","t","baseMinusT","out","encode","currentValue","basicLength","handledCPCount","m","handledCPCountPlusOne","q","qMinusT","toUnicode","toASCII","punycode","punycode_es6_default","punycode","callable","cls","wrapper","args","arrayReplaceAt","src","pos","newElements","isValidEntityCode","c","fromCodePoint","surrogate1","surrogate2","UNESCAPE_MD_RE","UNESCAPE_ALL_RE","DIGITAL_ENTITY_TEST_RE","replaceEntityPattern","match","name","code","decoded","decodeHTMLStrict","unescapeMd","str","unescapeAll","escaped","entity","HTML_ESCAPE_TEST_RE","HTML_ESCAPE_REPLACE_RE","HTML_REPLACEMENTS","replaceUnsafeChar","ch","escapeHtml","REGEXP_ESCAPE_RE","escapeRE","isSpace","isWhiteSpace","isPunctChar","P","S","isPunctCharCode","isMdAsciiPunct","normalizeReference","isAsciiTrimmable","asciiTrim","start","end","lib","mdurl_exports","build_exports","parseLinkLabel","state","disableNested","level","found","marker","prevPos","max","oldPos","labelEnd","parseLinkDestination","result","parseLinkTitle","prev_state","Token","type","tag","nesting","attrs","i","len","attrData","value","idx","Ruler","chains","rule","altName","chain","fn","options","index","beforeName","ruleName","afterName","list","ignoreInvalid","chainName","default_rules","tokens","env","slf","token","info","langName","langAttrs","arr","highlighted","tmpAttrs","tmpToken","Renderer","l","prev","needLf","next","nextToken","rules","StateCore","md","_defineProperty","UNNORMALIZED_NEWLINE_RE","NULL_RE","normalize","block","strip_references","last","curr","inline","tok","isLinkOpen$1","isLinkClose$1","linkify$1","blockTokens","j","replacements","htmlLinkLevel","currentToken","text","links","nodes","lastPos","ln","url","fullUrl","urlText","token_o","token_t","token_c","newTokensLength","replacement","newTokens","replacementIndex","newTokenIndex","node","RARE_RE","SCOPED_ABBR_TEST_RE","SCOPED_ABBR_RE","SCOPED_ABBR","replaceFn","replace_scoped","inlineTokens","inside_autolink","replace_rare","replace","blkIdx","QUOTE_TEST_RE","QUOTE_RE","APOSTROPHE","addReplacement","tokenIdx","applyReplacements","a","b","process_inlines","stack","thisLevel","OUTER","t","canOpen","canClose","isSingle","lastChar","nextChar","isLastPunctChar","isNextPunctChar","isLastWhiteSpace","isNextWhiteSpace","item","openQuote","closeQuote","smartquotes","join_alt","text_join","_rules$2","ParserCore","StateBlock","s","indent","offset","indent_found","line","from","min","begin","keepLastLF","queue","lineIndent","lineStart","first","MAX_AUTOCOMPLETED_CELLS","getLine","escapedSplit","isEscaped","current","table","startLine","endLine","silent","nextLine","firstCh","secondCh","lineText","columns","aligns","columnCount","oldParentType","terminatorRules","token_to","tableLines","token_tho","token_htro","token_ho","token_il","tbodyLines","autocompletedCells","terminate","token_tbo","token_tro","token_tdo","fence","mem","markup","params","haveEndMarker","blockquote","oldLineMax","oldBMarks","oldBSCount","oldSCount","oldTShift","lastLineEmpty","isOutdented","initial","spaceAfterMarker","adjustTab","oldIndent","lines","hr","cnt","skipBulletListMarker","skipOrderedListMarker","markTightParagraphs","tight","isTerminatingParagraph","isOrdered","markerValue","posAfterMarker","markerCharCode","listTokIdx","listLines","prevEmptyEnd","contentStart","indentAfterMarker","itemLines","oldTight","oldListIndent","reference","_endLine","getNextLine","isContinuation","lineContent","destRes","href","destEndPos","destEndLineNo","titleRes","title","label","meta","html_blocks_default","open_tag","close_tag","HTML_TAG_RE","HTML_OPEN_CLOSE_TAG_RE","HTML_SEQUENCES","html_block","endsOnBlankLine","heading","tmp","token_i","lheading","content","paragraph","_rules$1","ParserBlock","maxNesting","hasEmptyLines","prevLine","ok","outTokens","StateInline","token_meta","canSplitWord","highSurr","count","lowSurr","left_flanking","right_flanking","isTerminatorChar","isAsciiAlpha","isSchemeChar","linkify","protoMin","protoStart","protoLength","link","urlEnd","newline","pmax","ws","ESCAPED","escape","ch1","escapedStr","ch2","origStr","buildLastRuns","lastRuns","backtick","openerLength","_state$backticks$open","matchEnd","matchStart","strikethrough_tokenize","scanned","postProcess$1","delimiters","loneMarkers","startDelim","endDelim","strikethrough_postProcess","tokens_meta","_tokens_meta$curr","strikethrough_default","emphasis_tokenize","postProcess","isStrong","emphasis_post_process","emphasis_default","res","ref","parseReference","labelStart","image","EMAIL_RE","AUTOLINK_RE","autolink","isLinkOpen","isLinkClose","isLetter","lc","html_inline","DIGITAL_RE","NAMED_RE","processDelimiters","openersBottom","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","fragments_join","_rules","_rules2","ParserInline","cache","config","BAD_PROTO_RE","GOOD_DATA_RE","RECODE_HOSTNAME_FOR","MarkdownIt","parsed","parse_default","punycode_es6_default","encode_default","format","decode_default","LinkifyIt","utils_exports","helpers_exports","presetNameOrOptions","presets","p","presetName","components","_components$name","rules2","_components$inline","missed","plugin","MarkdownItCallable","linkify","MarkdownItCallable","linkedText","text","parts","offset","match","props","__props","parts","linkedText","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_renderList","part","index","_toDisplayString","_createTextVNode","LinkedText_default","render","props","__props","emit","__emit","trigger","openingDialog","interactedOutside","actions","select","action","onCloseAutoFocus","event","editFromRow","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_withCtx","_createVNode","_createElementVNode","_normalizeClass","_toDisplayString","$event","_createElementBlock","_Fragment","_renderList","action","_createCommentVNode","_createTextVNode","MeetingInputRow_default","render","props","__props","rows","item","person","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_renderList","item","name","_createBlock","$event","MeetingInputList_default","render","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","row","script","render","MeetingInputSkeleton_default","meetingInputTabs","overview","selected","people","person","item","tab","tabs","EMPTY","overview","selected","inputView","meetingInputTabs","tabs","activeTab","onTabKey","event","at","tab","index","loadError","newText","adding","addError","editingId","editText","editError","savingEdit","editField","deleting","deleteError","removing","deleteCancel","actionTrigger","restoreActionFocus","load","api","e","errorMessage","add","startEdit","item","cancelEdit","saveEdit","id","askDelete","cancelDelete","confirmDelete","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_createCommentVNode","_renderList","tab","$event","_createTextVNode","_toDisplayString","_withDirectives","_normalizeClass","_createVNode","_vShow","_withModifiers","_vModelText","_withCtx","_createBlock","MyInput_default","render","router","meetings","people","loading","error","starting","startError","picking","chosen","targetDate","meetingDateToStart","m","mondayOf","isThisWeek","targetExists","openLabel","load","list","team","api","e","errorMessage","start","openThisWeek","p","meeting","togglePerson","id","next","confirmStart","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_createElementVNode","_toDisplayString","_createCommentVNode","_Fragment","_renderList","meeting","_createBlock","_withCtx","_normalizeClass","_Teleport","_withModifiers","$event","person","MondaysListView_default","render","import_vue","import_vue_router","import_vue","import_vue","MeetingSaveQueue","#running","options","SECTIONS","SAVE_DELAY_MS","createMeetingStore","meeting","people","reviewStatus","loading","loadError","saving","saveError","personById","id","p","lastSent","pending","saveQueue","MeetingSaveQueue","timer","remember","sections","section","load","flush","loaded","team","api","FOCUS_COUNT","e","errorMessage","savePending","current","patch","previous","spawned","actions","action","index","a","sent","schedule","values","run","fn","failure","result","finance","finished","fields","meetingId","who","what","due","done","list","removed","undoToasts","update","focus","block","authorId","note","n","MEETING_STORE","useMeetingStore","store","debounced","ms","lastArgs","args","import_vue","props","__props","emit","__emit","QUICK","DAYS","mode","active","today","choice","dueFor","set","value","pickDay","weekday","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_toDisplayString","_Fragment","_renderList","choice","$event","_createCommentVNode","day","index","DuePicker_default","render","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","PersonAvatar_default","render","store","useMeetingStore","actions","open","a","items","typed","fromUpdates","card","action","editingDue","setDue","due","peopleOf","ids","id","p","toggle","what","who","adding","toggleWho","x","add","text","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_toDisplayString","_renderList","item","index","_createCommentVNode","_normalizeClass","_normalizeStyle","$event","_createBlock","person","p","_withModifiers","_withDirectives","_vModelText","_createVNode","BoardActions_default","render","import_vue","import_vue","WIDTH","HEIGHT","props","__props","top","highest","m","axisLabels","i","fmtEuroK","x","index","y","value","path","values","d","drawing","revenue","revenuePath","targetPath","revenueArea","last","v","loneTargets","fmtMonth","fmtEuro","summary","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createStaticVNode","_createElementVNode","_Fragment","_renderList","label","_toDisplayString","_createCommentVNode","dot","_normalizeStyle","m","RevenueChart_default","render","store","useMeetingStore","meeting","finance","finished","targets","refreshing","editing","refresh","syncLabel","time","fmtClock","stats","week","dash","fmtHours","fmtEuro","currentRevenue","m","monthLabel","fmtMonth","setNumber","target","key","event","value","goal","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_normalizeClass","_createTextVNode","_toDisplayString","_createCommentVNode","_renderList","stat","index","_normalizeStyle","_createVNode","target","$event","BoardFinance_default","render","import_vue","store","useMeetingStore","minCount","FOCUS_COUNT","maxCount","MAX_FOCUS","focus","addFocus","editText","area","focusText","setText","text","changedFrom","index","before","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_renderList","area","index","_normalizeStyle","_toDisplayString","$event","_createCommentVNode","BoardFocus_default","render","import_vue","import_vue","emit","__emit","store","useMeetingStore","picking","pick","authorId","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_Fragment","_renderList","person","$event","_toDisplayString","NewSticky_default","render","import_vue","props","__props","store","useMeetingStore","field","author","save","debounced","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeStyle","_withDirectives","_createElementVNode","$event","args","_vModelText","_toDisplayString","NoteSticky_default","render","props","__props","store","useMeetingStore","notes","n","offset","BLOCKS","add","authorId","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_Fragment","_renderList","note","index","_createBlock","_createVNode","NotesStrip_default","render","__emit","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_normalizeStyle","$event","_createElementVNode","_toDisplayString","_renderSlot","_createVNode","BoardFrame_default","render","import_vue","LABELS","CATEGORIES","SCORE_KEYS","key","store","useMeetingStore","scores","previousScores","presentPeople","present","p","scoreOf","personId","prevScoreOf","scoreboard","cat","given","s","a","b","stateOf","filled","pick","n","row","emptyScores","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_renderList","tile","_toDisplayString","n","_normalizeClass","person","index","_normalizeStyle","_createVNode","cat","$event","_createCommentVNode","BoardPeople_default","render","import_vue","import_vue_router","import_vue","store","useMeetingStore","cards","UPDATE_CATEGORIES","category","u","card","drafts","addRefs","setAddRef","key","el","focusAdd","add","update","point","newUpdateItemId","toggleAssignee","personId","id","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_renderList","card","index","_normalizeClass","_normalizeStyle","_toDisplayString","point","i","_createCommentVNode","_withDirectives","$event","_withKeys","_withModifiers","_vModelText","person","_createBlock","el","BoardTeamUpdates_default","render","import_vue","MeetingReviewLoader","#options","#epoch","#timer","options","id","#load","overview","phase","groupReviewProjects","overview","groups","issuesById","issue","id","group","summary","blocks","claim","involved","citation","safeSourceUrl","identifiers","a","b","sourceTab","source","descriptionComparison","options","versions","index","describeHistory","history","rows","fields","label","before","after","actor","relation","SETTLED_CODES","reviewNotice","state","retryableReviewError","errors","e","reviewMessage","reviewProgress","progress","value","reviewPeriodLabel","period","start","end","year","month","sameYear","sameMonth","first","last","reviewDate","url","markdown","MarkdownItCallable","tokens","environment","renderer","renderSourceMarkdown","descriptionDiff","prefix","suffix","oldMiddle","newMiddle","middle","text","width","lengths","i","j","import_vue","props","__props","emit","__emit","dialog","snapshot","loading","failure","active","descriptionId","opener","alive","selected","source","changes","comments","versions","description","comparison","descriptionComparison","diff","descriptionDiff","tabs","load","result","api","item","sourceTab","relevantVersions","version","a","b","focusSource","options","element","onTabKey","event","index","tab","next","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createElementVNode","_withModifiers","$event","_toDisplayString","_createElementBlock","_createCommentVNode","_createTextVNode","_Fragment","_renderList","tab","source","_normalizeClass","row","index","_withDirectives","version","_vModelSelect","LinearSourcePanel_default","render","store","useMeetingStore","overview","failure","retrying","selection","projectFilter","status","projects","groupReviewProjects","shownProjects","project","period","periodLabel","reviewPeriodLabel","loader","MeetingReviewLoader","options","api","run","timer","id","openSource","citation","generation","retry","reload","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createTextVNode","_Fragment","_toDisplayString","_createCommentVNode","_withDirectives","$event","_renderList","project","_vModelSelect","block","claim","index","issue","_createBlock","LinearWeekOverview_default","render","import_vue","store","useMeetingStore","inputs","input","p","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createElementVNode","_renderList","input","index","_normalizeStyle","_createVNode","_toDisplayString","MeetingInputs_default","render","route","router","MODES","store","useMeetingStore","inputCount","mode","m","select","onTabKey","event","at","next","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","$event","_createTextVNode","_toDisplayString","_createCommentVNode","_withDirectives","_createVNode","_vShow","BoardUpdates_default","render","props","__props","emit","__emit","next","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","$event","_createVNode","_toDisplayString","MeetingDock_default","render","PAD","GAP","props","__props","router","BOARDS","BoardPeople_default","BoardFinance_default","BoardUpdates_default","BoardFocus_default","BoardActions_default","store","createMeetingStore","MEETING_STORE","meeting","reviewWork","reviewProgress","step","b","overview","go","index","clamped","canvas","viewport","boardPadding","frameWidth","stripTransform","total","observer","element","keepLeft","addSticky","authorId","finishing","leaving","leave","options","undoToasts","onBack","evt","id","onKey","target","onBeforeUnload","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_withCtx","_createElementVNode","_Fragment","_toDisplayString","_normalizeClass","_createTextVNode","$event","_renderList","board","index","_normalizeStyle","_createCommentVNode","person","_createBlock","_resolveDynamicComponent","MeetingView_default","render","routes","ToolsView_default","AdaView_default","GistsListView_default","GistEditorView_default","route","MondaysListView_default","MeetingView_default","router","onDomReady","app","App_default","router","setupWRDAuth","aps"]}