{"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/velkom.admin/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-html.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/generated/decode-data-xml.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/https:/raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/decode_codepoint.ts","/opt/whdata/generated/platform/ap/velkom.admin/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","@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::velkom/webdesigns/admin/frontend/frontend.ts","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/CustomerAccess.vue","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/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/CustomerApp.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/AppShell.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Topbar.vue","mod::velkom/webdesigns/admin/frontend/lib/icons.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Icon.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Icon.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Topbar.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/shell/Topbar.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Sidebar.vue","mod::velkom/webdesigns/admin/frontend/lib/navigation.ts","mod::velkom/webdesigns/admin/frontend/lib/router.ts","mod::velkom/webdesigns/admin/frontend/lib/route-contract.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Sidebar.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/shell/Sidebar.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Button.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Button.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Dialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Dialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Dialog.vue","mod::velkom/webdesigns/admin/frontend/composables/useFormGuard.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue","mod::velkom/webdesigns/admin/frontend/lib/toast.ts","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ToastHost.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ToastHost.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/ToastHost.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/AppShell.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/shell/AppShell.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/RouteView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/OverviewView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue","mod::velkom/webdesigns/admin/frontend/lib/result.ts","mod::velkom/webdesigns/admin/frontend/components/dashboard/mobile-overview.ts","mod::velkom/webdesigns/admin/frontend/lib/avatar.ts","mod::velkom/webdesigns/admin/frontend/lib/format.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/StatCard.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/StatCard.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/dashboard/StatCard.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue","mod::velkom/webdesigns/admin/frontend/components/dashboard/clock.ts","mod::velkom/webdesigns/admin/frontend/components/dashboard/overview-presentation.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/EmptyState.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/EmptyState.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/EmptyState.vue","mod::velkom/webdesigns/admin/frontend/lib/customer.ts","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ContextMenu.vue","mod::velkom/webdesigns/admin/frontend/lib/context-menu.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ContextMenu.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/ContextMenu.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/OverviewView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/customer/OverviewView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/BezoekenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/PageHeader.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/PageHeader.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SectionCard.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SectionCard.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/SectionCard.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/StatusBadge.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/StatusBadge.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/StatusBadge.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Skeleton.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Skeleton.vue","mod::velkom/webdesigns/admin/frontend/lib/loading.ts","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Checkbox.vue","mod::velkom/webdesigns/admin/frontend/lib/formField.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Checkbox.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Checkbox.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationReports.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/DataTable.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/DataTable.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/DataTable.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/FormField.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/FormField.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/FormField.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Select.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Select.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Select.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationReports.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/EvacuationReports.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue","mod::velkom/webdesigns/admin/frontend/components/customer/visits/visit-rows.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue","mod::velkom/webdesigns/admin/frontend/components/customer/visits/days.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/BezoekenView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/customer/BezoekenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue","mod::velkom/webdesigns/admin/frontend/composables/useFormValidation.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SearchFilter.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SearchFilter.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/SearchFilter.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/TextInput.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/TextInput.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/TextInput.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue","mod::velkom/webdesigns/admin/frontend/components/customer/employees/contact-rows.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/InstellingenView.vue","mod::velkom/js/admin-plans.ts","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Tabs.vue","mod::velkom/webdesigns/admin/frontend/composables/useSectionRoute.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Tabs.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Tabs.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Switch.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Switch.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Switch.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/UsersTable.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-script:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Badge.vue?type=script","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Badge.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Badge.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/UsersTable.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/instellingen/UsersTable.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/InstellingenView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/customer/InstellingenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/SchermenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/LanguageSwitcher.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/LanguageSwitcher.vue?type=template","mod::velkom/webdesigns/velkom/components/LanguageSwitcher.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskShell.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskShell.vue?type=template","mod::velkom/webdesigns/velkom/components/KioskShell.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/WelcomePresentation.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-script:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskIcon.vue?type=script","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskIcon.vue?type=template","mod::velkom/webdesigns/velkom/components/KioskIcon.vue","mod::velkom/webdesigns/velkom/texts.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/WelcomePresentation.vue?type=template","mod::velkom/webdesigns/velkom/components/WelcomePresentation.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue","mod::velkom/node_modules/qrcode-generator/dist/qrcode.mjs","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue","mod::velkom/webdesigns/admin/frontend/components/customer/screens/screen-rows.ts","mod::velkom/webdesigns/velkom/screen-link.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/SchermenView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/customer/SchermenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/KoppelingenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftInstructions.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/integrations/MicrosoftInstructions.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Textarea.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Textarea.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/ui/Textarea.vue","mod::velkom/webdesigns/admin/frontend/lib/outlook-tenant.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/KoppelingenView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/customer/KoppelingenView.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/RouteView.vue?type=template","mod::velkom/webdesigns/admin/frontend/views/RouteView.vue","mod::velkom/webdesigns/admin/frontend/lib/feedback-widget.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/CustomerApp.vue?type=template","mod::velkom/webdesigns/admin/frontend/CustomerApp.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/InvitationForm.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/InvitationForm.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/auth/InvitationForm.vue","mod::velkom/webdesigns/admin/frontend/lib/login-return.ts","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/LoginForm.vue","/opt/whdata/generated/platform/ap/velkom.admin/opt/whdata/installedmodules/vue.20260923T121342.395Z/libs/auth/CodeInput.vue","mod::ww/js/auth/code-login-frontend.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/vue.20260923T121342.395Z/libs/auth/CodeInput.vue?type=template","mod::vue/libs/auth/CodeInput.vue","mod::vue/libs/auth/useLoginCode.ts","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/LoginForm.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/auth/LoginForm.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/CustomerAccess.vue?type=template","mod::velkom/webdesigns/admin/frontend/components/auth/CustomerAccess.vue","/opt/whdata/generated/platform/ap/velkom.admin/build/sfc-template:/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/App.vue?type=template","mod::velkom/webdesigns/admin/frontend/App.vue","mod::velkom/webdesigns/admin/frontend/lib/favicon.ts","/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","//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 } from \"@webhare/dompack\";\nimport App from \"./App.vue\";\nimport { installFavicon } from \"./lib/favicon\";\n\nonDomReady(() => {\n  installFavicon();\n  const mount = document.getElementById(\"app\");\n  if (!mount)\n    return;\n  createApp(App).mount(mount);\n});\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, shallowRef } from \"vue\";\nimport { getFrontendData, isLoggedIn, logout, setupWRDAuth } from \"@webhare/frontend\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"@mod-velkom/js/admin-rpc\";\nimport CustomerApp from \"../../CustomerApp.vue\";\nimport InvitationForm from \"./InvitationForm.vue\";\nimport { consumeInvitationLink } from \"../../lib/customer\";\nimport { restoreLoginReturn } from \"../../lib/login-return\";\nimport { captureMicrosoftCallback, continueMicrosoftSignIn, hasMicrosoftSignIn } from \"../../lib/outlook-tenant\";\nimport LoginForm from \"./LoginForm.vue\";\nimport Button from \"../ui/Button.vue\";\nimport Dialog from \"../ui/Dialog.vue\";\n\ncaptureMicrosoftCallback();\nconst legacyLink = new URL(window.location.href);\nif (legacyLink.searchParams.has(\"_ed\")) {\n  legacyLink.searchParams.delete(\"_ed\");\n  legacyLink.searchParams.delete(\"wrd_pwdaction\");\n  window.history.replaceState(window.history.state, \"\", legacyLink.href);\n}\nconst configured = getFrontendData(\"velkom:admin\", { allowMissing: true })?.mode === \"customer\";\nconst customer = shallowRef<AdminBootstrap | null>(null);\nconst loading = shallowRef(true);\nconst connectingMicrosoft = shallowRef(hasMicrosoftSignIn());\nconst error = shallowRef(\"\");\nconst denied = shallowRef(false);\nconst logoutOpen = shallowRef(false);\nconst loggingOut = shallowRef(false);\nconst logoutError = shallowRef(\"\");\nconst invitation = shallowRef(consumeInvitationLink({ href: window.location.href, replace: url => window.history.replaceState(window.history.state, \"\", url) }));\nconst invitationNotice = shallowRef(\"\");\nconst demoHref = `mailto:hello@tech42.nl?subject=${encodeURIComponent(\"Demo van Velkom\")}&body=${encodeURIComponent(\"Hallo,\\n\\nIk wil graag een demo van Velkom plannen.\\n\\nNaam:\\nOrganisatie:\\nTelefoonnummer:\\n\\nMet vriendelijke groet,\")}`;\n\nfunction finishInvitation(accepted: boolean): void {\n  invitation.value = null;\n  invitationNotice.value = accepted ? \"Je uitnodiging is geaccepteerd. Je kunt nu inloggen.\" : \"\";\n}\n\nasync function loadCustomer(): Promise<void> {\n  loading.value = true;\n  error.value = \"\";\n  customer.value = null;\n  denied.value = false;\n  try {\n    // Cookie state is only a UI hint; the server rechecks identity and membership.\n    customer.value = await rpc(\"velkom:admin\").bootstrap();\n    const hash = restoreLoginReturn({ hash: window.location.hash });\n    if (hash) {\n      window.history.replaceState(window.history.state, \"\", window.location.pathname + window.location.search + hash);\n      window.dispatchEvent(new Event(\"hashchange\"));\n    }\n  } catch {\n    denied.value = isLoggedIn();\n    if (denied.value)\n      error.value = \"Velkom kan niet worden geopend. Controleer je verbinding of neem contact op met je beheerder.\";\n  } finally {\n    loading.value = false;\n  }\n}\n\nasync function signOut(): Promise<void> {\n  if (loggingOut.value)\n    return;\n  loggingOut.value = true;\n  logoutError.value = \"\";\n  // logout() reloads the current URL; drop the section hash so the reload shows the login page.\n  const previousUrl = window.location.href;\n  window.history.replaceState(window.history.state, \"\", window.location.pathname + window.location.search);\n  try {\n    await logout();\n  } catch {\n    window.history.replaceState(window.history.state, \"\", previousUrl);\n    logoutError.value = \"Uitloggen is niet gelukt. Probeer het opnieuw.\";\n    loggingOut.value = false;\n  }\n}\n\nfunction organizationSaved(profile: { name: string }): void {\n  if (customer.value)\n    customer.value = { ...customer.value, customer: { ...customer.value.customer, name: profile.name } };\n}\n\n// shortcut: placeholder info pages in the login panel, replace with real pages once the content exists.\nfunction readInfoPage(): \"privacy\" | \"hulp\" | null {\n  const page = window.location.hash.slice(2);\n  return page === \"privacy\" || page === \"hulp\" ? page : null;\n}\nconst infoPage = shallowRef(readInfoPage());\nconst updateInfoPage = (): void => { infoPage.value = readInfoPage(); };\nonBeforeUnmount(() => window.removeEventListener(\"hashchange\", updateInfoPage));\n\nonMounted(() => {\n  window.addEventListener(\"hashchange\", updateInfoPage);\n  if (!configured) {\n    error.value = \"Deze omgeving is niet beschikbaar. Neem contact op met je beheerder.\";\n    denied.value = true;\n    loading.value = false;\n    return;\n  }\n  setupWRDAuth();\n  if (invitation.value) {\n    loading.value = false;\n    return;\n  }\n  void (async () => {\n    // Between Microsoft's sign-in and its consent screen, show one calm step instead of the whole app.\n    if (await continueMicrosoftSignIn(input => rpc(\"velkom:admin\").finishMicrosoftSignIn(input)))\n      return;\n    connectingMicrosoft.value = false;\n    await loadCustomer();\n  })();\n});\n</script>\n\n<template>\n  <main v-if=\"connectingMicrosoft\" class=\"access-pending\" aria-busy=\"true\"><p role=\"status\" class=\"access-pending__status access-pending__status--now\">Bezig met koppelen met Microsoft...</p></main>\n  <CustomerApp v-else-if=\"customer\" :bootstrap=\"customer\" @logout=\"logoutOpen = true\" @organization-saved=\"organizationSaved\" />\n  <!-- Blank while checking access: showing the login screen would flash it before the app for signed-in users. -->\n  <main v-else-if=\"loading\" class=\"access-pending\" aria-busy=\"true\"><p role=\"status\" class=\"access-pending__status\">Velkom laden...</p></main>\n  <main v-else class=\"access\" data-testid=\"customer-access\">\n    <svg viewBox=\"0 0 1280 350\" class=\"access__logo\" role=\"img\" aria-label=\"Velkom\"><path fill=\"currentColor\" d=\"M83.44 290 16.8 106.4H52.67L101.46 245.46L150.25 106.4H186.12L119.48 290Z M270.15 295.1Q242.78 295.1 222.13 283.12Q201.47 271.13 190 249.62Q178.52 228.12 178.52 199.73Q178.52 169.64 189.83 147.54Q201.13 125.44 221.36 113.37Q241.59 101.3 268.45 101.3Q296.5 101.3 316.22 114.3Q335.94 127.31 345.72 151.28Q355.49 175.25 353.45 208.23H317.92V195.31Q317.58 163.35 305.77 148.05Q293.95 132.75 269.81 132.75Q243.12 132.75 229.69 149.58Q216.26 166.41 216.26 198.2Q216.26 228.46 229.69 245.03Q243.12 261.61 268.45 261.61Q285.11 261.61 297.26 254.05Q309.42 246.48 316.22 232.37L351.07 243.42Q340.36 268.07 318.6 281.59Q296.84 295.1 270.15 295.1ZM204.7 208.23V180.52H335.77V208.23Z M366.93 290V40.1H402.46V290Z M425.29 290 425.46 45.2H461.5V194.8L533.58 106.4H578.8L502.64 198.2L586.62 290H538.34L461.5 201.6V290Z M425.46 40.10H461.50V46.20H425.46Z M655.35 295.1Q627.81 295.1 607.58 282.69Q587.35 270.28 576.38 248.44Q565.42 226.59 565.42 198.03Q565.42 169.3 576.64 147.45Q587.86 125.61 608.09 113.45Q628.32 101.3 655.35 101.3Q682.89 101.3 703.12 113.71Q723.35 126.12 734.4 147.88Q745.45 169.64 745.45 198.03Q745.45 226.76 734.32 248.6Q723.18 270.45 702.95 282.77Q682.72 295.1 655.35 295.1ZM655.35 261.61Q681.7 261.61 694.71 243.84Q707.71 226.08 707.71 198.03Q707.71 169.3 694.54 152.05Q681.36 134.79 655.35 134.79Q637.5 134.79 625.94 142.87Q614.38 150.94 608.77 165.13Q603.16 179.33 603.16 198.03Q603.16 226.93 616.42 244.27Q629.68 261.61 655.35 261.61Z M974.83 290 975 175.59Q975 155.7 964.8 144.56Q954.6 133.43 937.94 133.43Q927.74 133.43 919.33 138.1Q910.91 142.78 905.73 152.05Q900.54 161.31 900.54 175.25L883.37 166.58Q883.03 147.2 891.62 132.58Q900.2 117.96 914.99 109.88Q929.78 101.81 948.14 101.81Q977.89 101.81 994.21 119.66Q1010.53 137.51 1010.53 167.09L1010.36 290ZM754.68 290V106.4H786.3V159.44H790.38V290ZM864.84 290 865.01 176.27Q865.01 156.21 854.9 144.82Q844.78 133.43 827.78 133.43Q810.95 133.43 800.67 144.99Q790.38 156.55 790.38 175.25L773.38 164.37Q773.38 146.35 782.05 132.24Q790.72 118.13 805.51 109.97Q820.3 101.81 839 101.81Q858.55 101.81 872.32 110.05Q886.09 118.3 893.32 133.09Q900.54 147.88 900.54 167.43L900.37 290Z\"></path><circle cx=\"1080\" cy=\"100\" r=\"40\" class=\"access__logo-dot\"></circle></svg>\n    <aside class=\"access__branding\" aria-label=\"Velkom\">\n      <div class=\"access__brand-row\">\n        <span class=\"access__badge\"><span aria-hidden=\"true\" />Beheeromgeving</span>\n      </div>\n      <div class=\"access__brand-content\">\n        <p class=\"access__eyebrow\">Bezoekerservaring</p>\n        <p class=\"access__headline\">Elke gast<br>voelt zich<br>verwacht<span>.</span></p>\n        <svg class=\"access__flourish\" viewBox=\"0 0 760 200\" aria-hidden=\"true\">\n          <path pathLength=\"1\" d=\"M -80 150 C 30 150, 80 150, 140 140 C 200 130, 220 60, 290 60 C 350 60, 380 140, 440 150 C 520 165, 545 80, 495 72 C 445 64, 445 160, 535 158 C 585 157, 600 105, 640 105 C 680 105, 690 130, 724 130\" />\n          <circle cx=\"724\" cy=\"130\" r=\"17\" />\n        </svg>\n      </div>\n    </aside>\n    <section class=\"access__panel\" aria-labelledby=\"velkom-title\" :aria-busy=\"loading || undefined\">\n      <svg class=\"access__mobile-flourish\" viewBox=\"0 0 390 150\" aria-hidden=\"true\">\n        <path pathLength=\"1\" d=\"M-10 122C40 122 70 42 130 42C190 42 204 108 162 108C120 108 136 48 204 48C262 48 292 74 338 66\" />\n        <circle cx=\"346\" cy=\"64\" r=\"11\" />\n      </svg>\n      <p class=\"access__panel-top\"><span>Nog geen Velkom?</span><a :href=\"demoHref\">Plan een demo</a></p>\n      <div class=\"access__form\">\n        <template v-if=\"denied\">\n          <h1 id=\"velkom-title\" class=\"access__title\">Geen toegang</h1>\n          <p class=\"access__message\" role=\"alert\">{{ error }}</p>\n          <div v-if=\"configured\" class=\"access__actions\">\n            <Button @click=\"loadCustomer\">Opnieuw proberen</Button>\n            <Button @click=\"logoutOpen = true\">Uitloggen</Button>\n          </div>\n        </template>\n        <InvitationForm v-else-if=\"invitation\" :invitation=\"invitation\" @accepted=\"finishInvitation(true)\" @cancel=\"finishInvitation(false)\" />\n        <template v-else-if=\"infoPage === 'privacy'\">\n          <h1 id=\"velkom-title\" class=\"access__title\">Privacy</h1>\n          <p class=\"access__message\">Hier komt de privacyverklaring van Velkom. Heb je tot die tijd een vraag over privacy, mail dan naar <a href=\"mailto:hello@tech42.nl\">hello@tech42.nl</a>.</p>\n          <a href=\"#/\" class=\"access__back\">Terug naar inloggen</a>\n        </template>\n        <template v-else-if=\"infoPage === 'hulp'\">\n          <h1 id=\"velkom-title\" class=\"access__title\">Hulp</h1>\n          <p class=\"access__message\">Hier komt de hulppagina van Velkom. Lukt inloggen niet of heb je een vraag, mail dan naar <a href=\"mailto:hello@tech42.nl\">hello@tech42.nl</a>.</p>\n          <a href=\"#/\" class=\"access__back\">Terug naar inloggen</a>\n        </template>\n        <template v-else>\n          <p v-if=\"invitationNotice\" class=\"access__message\" role=\"status\" data-testid=\"invitation-notice\">{{ invitationNotice }}</p>\n          <LoginForm />\n        </template>\n      </div>\n      <nav class=\"access__panel-footer\" aria-label=\"Informatie\"><a href=\"#/privacy\">Privacy</a><a href=\"#/hulp\">Hulp</a></nav>\n    </section>\n  </main>\n  <Dialog :open=\"logoutOpen\" :pending=\"loggingOut\" title=\"Uitloggen\" @close=\"logoutOpen = false\">\n      <p>Wil je uitloggen bij Velkom?</p>\n      <p v-if=\"logoutError\" class=\"access__error\" role=\"alert\">{{ logoutError }}</p>\n      <template #footer>\n        <Button autofocus :disabled=\"loggingOut\" @click=\"logoutOpen = false\">Annuleren</Button>\n        <Button variant=\"primary\" :disabled=\"loggingOut\" @click=\"signOut\">{{ loggingOut ? \"Uitloggen...\" : \"Uitloggen\" }}</Button>\n      </template>\n  </Dialog>\n</template>\n\n<style scoped>\n.access-pending { display: grid; place-items: center; min-height: 100dvh; }\n/* Only a slow check shows the text; a normal one stays blank. */\n.access-pending__status { margin: 0; color: var(--muted-foreground); animation: access-fade 0.2s ease-out 1s both; }\n.access-pending__status--now { animation: none; }\n@keyframes access-fade { from { opacity: 0; } }\n.access { position: relative; display: flex; flex-wrap: wrap; min-height: max(960px, 100dvh); width: 100%; color: var(--foreground); background: var(--surface-raised); }\n.access__branding { position: sticky; top: 0; align-self: flex-start; height: 100dvh; flex: 1 1 620px; display: flex; flex-direction: column; justify-content: space-between; gap: 48px; min-height: 640px; box-sizing: border-box; padding: 48px 64px 56px; overflow: hidden; background: var(--accent); }\n/* The global lime selection is invisible here and covers the tight headline lines. */\n.access__branding ::selection { background: rgb(255 107 74 / 0.35); }\n.access__headline span::selection { color: var(--coral); }\n.access__brand-row { position: relative; z-index: 2; display: flex; align-items: center; justify-content: flex-end; gap: 16px; min-height: 36px; }\n.access__logo { position: fixed; z-index: 3; left: 64px; top: 48px; display: block; width: 132px; height: 36px; }\n.access__logo-dot { fill: var(--coral); }\n.access__badge { display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 16px; border-radius: 999px; background: var(--foreground); color: var(--background); font-size: 15px; font-weight: 600; white-space: nowrap; }\n.access__badge span { width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }\n.access__brand-content { position: relative; z-index: 2; }\n.access__eyebrow { margin: 0 0 24px; font-size: 15px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; }\n.access__headline { margin: 0; font-family: var(--font-display); font-size: clamp(60px, 7vw, 112px); line-height: 0.9; font-weight: 800; letter-spacing: -0.045em; }\n.access__headline span { color: var(--coral); }\n.access__flourish { display: block; width: calc(100% + 64px); height: auto; margin: 32px 0 0 -64px; overflow: visible; }\n.access__flourish path, .access__mobile-flourish path { fill: none; stroke: var(--foreground); stroke-linecap: round; stroke-linejoin: round; }\n.access__flourish path { stroke-width: 16px; }\n.access__flourish circle, .access__mobile-flourish circle { fill: var(--coral); }\n/* Entrance motion from the supplied design: short and firm on arrival, then still. */\n.access__branding { animation: access-wipe 0.8s cubic-bezier(0.7, 0, 0.2, 1) both; }\n.access__headline { animation: access-rise 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) 0.25s both; }\n.access__flourish path, .access__mobile-flourish path { stroke-dasharray: 1; animation: access-draw 1.6s cubic-bezier(0.6, 0, 0.2, 1) 0.3s both; }\n.access__flourish circle, .access__mobile-flourish circle { transform-box: fill-box; transform-origin: center; animation: access-pop 0.5s cubic-bezier(0.3, 1.6, 0.5, 1) 1.85s both; }\n@keyframes access-wipe { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }\n@keyframes access-rise { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }\n@keyframes access-draw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }\n@keyframes access-pop { from { transform: scale(0); } to { transform: scale(1); } }\n@media (prefers-reduced-motion: reduce) {\n  .access__branding, .access__headline, .access__flourish path, .access__mobile-flourish path, .access__flourish circle, .access__mobile-flourish circle { animation: none; }\n}\n.access__panel { position: relative; flex: 1 1 440px; display: flex; flex-direction: column; justify-content: space-between; gap: 40px; box-sizing: border-box; min-width: 0; padding: 48px 64px; background: var(--surface-raised); }\n.access__panel-top { display: flex; justify-content: flex-end; align-items: center; gap: 8px; min-height: 44px; margin: 0; font-size: 15px; }\n.access__panel-top span { color: var(--muted-foreground); }\n.access__panel-top a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px; color: var(--foreground); font-weight: 700; }\n.access__panel-footer { display: flex; justify-content: flex-end; gap: 20px; font-size: 15px; }\n.access__panel-footer a { color: var(--muted-foreground); }\n.access__message a, .access__back { color: var(--foreground); font-weight: 700; }\n.access__form { width: 100%; max-width: 420px; margin: 0 auto; }\n.access__mobile-flourish { display: none; }\n.access__title { margin: 0 0 24px; font-family: var(--font-display); font-size: 48px; line-height: 1; font-weight: 800; letter-spacing: -0.03em; }\n.access__message { margin: 0 0 24px; font-size: 16px; line-height: 1.5; }\n.access__actions { display: flex; flex-wrap: wrap; gap: 12px; }\n.access__error { color: var(--danger); }\n@media (max-width: 900px) {\n  .access { display: block; min-height: 100dvh; background: #c7ff63; }\n  .access__branding { display: none; }\n  .access__panel { display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; gap: 0; min-height: 100dvh; padding: 60px 20px 36px; overflow: hidden; background: #c7ff63; }\n  .access__logo { position: absolute; left: 20px; top: 60px; width: 128px; height: 35px; }\n  .access__mobile-flourish { display: block; position: absolute; left: 0; top: 104px; width: 390px; max-width: 100%; height: 150px; }\n  .access__mobile-flourish path { stroke-width: 6px; }\n  .access__panel-top, .access__panel-footer { display: none; }\n  .access__form { position: relative; width: min(100%, 420px); margin: 195px auto 0; }\n  .access__title { font-size: 46px; line-height: 0.94; letter-spacing: -0.07em; }\n}\n</style>\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","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, watch } from \"vue\";\nimport type { AdminBootstrap } from \"@mod-velkom/js/admin-rpc\";\nimport AppShell from \"./components/shell/AppShell.vue\";\nimport RouteView from \"./views/RouteView.vue\";\nimport { customerNavigation } from \"./lib/customer\";\nimport { replaceRoute, route, setNavigationGuard } from \"./lib/router\";\nimport { confirmDiscard } from \"./composables/useFormGuard\";\nimport { feedbackPageUrl, mountFeedbackWidget } from \"./lib/feedback-widget\";\n\nconst props = defineProps<{ bootstrap: AdminBootstrap }>();\nconst emit = defineEmits<{ logout: []; organizationSaved: [profile: { name: string }] }>();\nconst navigation = computed(() => customerNavigation(props.bootstrap.features));\nconst identity = computed(() => ({ ...props.bootstrap.identity, initials: props.bootstrap.identity.name.split(/\\s+/).map(part => part[0]).slice(0, 2).join(\"\").toUpperCase() }));\nconst organization = computed(() => ({ slug: \"customer\", name: props.bootstrap.customer.name }));\nlet feedback: ReturnType<typeof mountFeedbackWidget> | undefined;\n\nwatch(route, () => feedback?.update());\n\nonMounted(() => {\n  // An empty entry has no tenant selection; malformed or foreign deep links remain visibly refused.\n  if (!window.location.hash)\n    replaceRoute(\"customer\", navigation.value[0]?.section ?? \"overzicht\");\n  setNavigationGuard(() => confirmDiscard(\"navigate\"));\n  feedback = mountFeedbackWidget({ user: props.bootstrap.identity, pageUrl: () => feedbackPageUrl({ href: window.location.href, route: route.value, features: props.bootstrap.features }) });\n});\nonBeforeUnmount(() => {\n  setNavigationGuard(null);\n  feedback?.dispose();\n});\n</script>\n\n<template>\n  <AppShell org=\"customer\" :org-name=\"bootstrap.customer.name\" :section=\"route.section\" :tab=\"route.query.tab ?? ''\"\n            :nav-items=\"navigation\" :user=\"identity\" :active-org=\"organization\" @logout=\"emit('logout')\">\n    <RouteView :bootstrap=\"bootstrap\" @logout=\"emit('logout')\" @organization-saved=\"emit('organizationSaved', $event)\" />\n  </AppShell>\n</template>\n","<template>\n  <div class=\"shell\" :class=\"{ 'shell--drawer': drawerMode, 'shell--demo': demo }\" :data-section=\"section\">\n    <a class=\"shell__skip\" href=\"#velkom-main\" :inert=\"drawerModal || undefined\" @click.prevent=\"focusMain\">Naar inhoud</a>\n\n    <Topbar ref=\"topbar\" :org-name=\"orgName\" :home-href=\"buildHash(org, 'overzicht')\"\n            :user=\"user\" :active-org=\"activeOrg\" :organizations=\"organizations\" :demo=\"demo\" :authenticated=\"authenticated\"\n            :drawer-open=\"drawerOpen\" :inert=\"drawerModal || undefined\" @open-search=\"openSearch\" @toggle-drawer=\"toggleDrawer\"\n            @select-org=\"slug => emit('selectOrg', slug)\" @reset-demo=\"emit('resetDemo')\" @logout=\"emit('logout')\">\n      <template #notice>\n        <div v-if=\"demo\" class=\"shell__notice\">\n          <p v-if=\"demo\" class=\"shell__demo\" role=\"note\" title=\"Gesimuleerde gegevens; niets wordt opgeslagen of verzonden.\" data-testid=\"demo-notice\">Demo</p>\n        </div>\n      </template>\n    </Topbar>\n\n    <div class=\"shell__body\">\n      <Sidebar :nav-items=\"navItems\" :org=\"org\" :section=\"section\" :tab=\"tab\" :collapsed=\"collapsed\" :drawer=\"drawerMode\" :drawer-open=\"drawerOpen\" :searchable=\"demo\"\n               @toggle-collapse=\"toggleCollapse\" @close-drawer=\"closeDrawer('dismiss')\" @navigated=\"closeDrawer('navigated')\" @open-search=\"openSearch\" />\n      <div v-if=\"drawerModal\" class=\"shell__scrim\" aria-hidden=\"true\" @click=\"closeDrawer('dismiss')\" />\n\n      <main id=\"velkom-main\" ref=\"mainEl\" class=\"shell__main\" tabindex=\"-1\" data-testid=\"content\" :inert=\"drawerModal || undefined\">\n        <div class=\"shell__content\">\n          <slot />\n        </div>\n      </main>\n    </div>\n\n    <nav class=\"shell__mobile-nav\" aria-label=\"Snelle navigatie\" :inert=\"drawerModal || undefined\" data-testid=\"mobile-navigation\">\n      <a v-for=\"item in mobileNavItems\" :key=\"item.section\" class=\"shell__mobile-item\" :class=\"{ 'shell__mobile-item--active': item.section === section }\"\n         :href=\"buildHash(org, item.section)\" :aria-current=\"item.section === section ? 'page' : undefined\" :data-testid=\"`mobile-nav-${item.section}`\">\n        <span class=\"shell__mobile-icon\">\n          <svg v-if=\"demo && mobileIcons[item.section]\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path :d=\"mobileIcons[item.section]\" /></svg>\n          <Icon v-else :name=\"item.icon\" :size=\"20\" />\n        </span>\n        <span>{{ item.section === 'overzicht' ? 'Nu binnen' : item.section === 'contactpersonen' ? (demo ? 'Medewerkers' : 'Contacten') : item.label }}</span>\n      </a>\n      <button type=\"button\" class=\"shell__mobile-item\" :class=\"{ 'shell__mobile-item--active': moreActive }\" :aria-expanded=\"drawerOpen\"\n              aria-label=\"Meer navigatie\" aria-controls=\"velkom-sidebar\" data-testid=\"mobile-nav-more\" @click=\"openMore\">\n        <span class=\"shell__mobile-icon\"><Icon name=\"menu\" :size=\"20\" /></span>\n        <span>Meer</span>\n      </button>\n    </nav>\n\n    <slot v-if=\"demo\" name=\"search\" :open=\"searchOpen\" :close=\"closeSearch\" />\n    <UnsavedChangesDialog />\n    <ToastHost />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport Topbar from \"./Topbar.vue\";\nimport Sidebar from \"./Sidebar.vue\";\nimport UnsavedChangesDialog from \"./UnsavedChangesDialog.vue\";\nimport ToastHost from \"../ui/ToastHost.vue\";\nimport Icon from \"../ui/Icon.vue\";\nimport { buildHash, route } from \"../../lib/router\";\nimport type { NavItem, ShellIdentity, ShellOrganization } from \"../../lib/navigation\";\n\nconst props = withDefaults(defineProps<{ org: string; orgName: string; section: string; tab: string; navItems: NavItem[]; user: ShellIdentity; activeOrg: ShellOrganization; organizations?: ShellOrganization[]; demo?: boolean; authenticated?: boolean }>(), { organizations: () => [], demo: false, authenticated: false });\nconst emit = defineEmits<{ selectOrg: [slug: string]; resetDemo: []; logout: [] }>();\n\nconst storageKey = \"velkom.sidebar\";\nconst wideQuery = window.matchMedia(\"(min-width: 1024px)\");\nconst drawerQuery = window.matchMedia(\"(max-width: 1023px)\");\n\nfunction readPreference(): \"expanded\" | \"collapsed\" | null {\n  try {\n    const value = localStorage.getItem(storageKey);\n    return value === \"expanded\" || value === \"collapsed\" ? value : null;\n  } catch {\n    return null;\n  }\n}\n\nconst topbar = ref<InstanceType<typeof Topbar> | null>(null);\nconst mainEl = ref<HTMLElement | null>(null);\nconst drawerMode = ref(drawerQuery.matches);\nconst drawerOpen = ref(false);\nconst searchOpen = ref(false);\nconst preference = ref(readPreference());\nconst collapsed = ref(preference.value ? preference.value === \"collapsed\" : !wideQuery.matches);\n// Use the supplied navigation so mobile links respect the same account permissions as the drawer.\nconst mobileNavItems = computed(() => [\"overzicht\", \"bezoeken\", \"contactpersonen\"]\n  .map(section => props.navItems.find(item => item.section === section))\n  .filter((item): item is NavItem => Boolean(item)));\nconst moreActive = computed(() => !mobileNavItems.value.some(item => item.section === props.section));\nconst mobileIcons: Record<string, string> = {\n  overzicht: \"M11 3h4.5A1.5 1.5 0 0 1 17 4.5v11a1.5 1.5 0 0 1-1.5 1.5H11M3 10h9M8.5 6.5L12 10l-3.5 3.5\",\n  bezoeken: \"M11 3h4.5A1.5 1.5 0 0 1 17 4.5v11a1.5 1.5 0 0 1-1.5 1.5H11M3 10h9M8.5 6.5L12 10l-3.5 3.5\",\n  contactpersonen: \"M10 3.3a3.2 3.2 0 1 1 0 6.4a3.2 3.2 0 1 1 0-6.4zM3.8 17c.8-3.2 3.3-5 6.2-5s5.4 1.8 6.2 5\",\n};\nlet drawerTrigger: HTMLElement | null = null;\n\nfunction toggleDrawer(): void {\n  drawerTrigger = null;\n  drawerOpen.value = !drawerOpen.value;\n}\n\nfunction openMore(event: MouseEvent): void {\n  drawerTrigger = event.currentTarget as HTMLElement;\n  drawerOpen.value = true;\n}\n\nfunction toggleCollapse(): void {\n  collapsed.value = !collapsed.value;\n  preference.value = collapsed.value ? \"collapsed\" : \"expanded\";\n  try {\n    localStorage.setItem(storageKey, preference.value);\n  } catch {\n    // Preference only; private mode may block storage.\n  }\n}\n\nfunction onWideChange(): void {\n  if (!preference.value)\n    collapsed.value = !wideQuery.matches;\n}\n\nfunction onDrawerChange(): void {\n  drawerMode.value = drawerQuery.matches;\n  drawerOpen.value = false;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n  if (props.demo && (event.metaKey || event.ctrlKey) && event.key.toLowerCase() === \"k\") {\n    event.preventDefault();\n    openSearch();\n  } else if (event.key === \"Escape\" && drawerOpen.value) {\n    closeDrawer(\"dismiss\");\n  } else if (event.key === \"Tab\" && drawerModal.value) {\n    trapTab(event);\n  }\n}\n\n/** Keep Tab cycling inside the open drawer instead of leaving the page. */\nfunction trapTab(event: KeyboardEvent): void {\n  const items = Array.from(document.querySelectorAll<HTMLElement>(\"#velkom-sidebar a, #velkom-sidebar button\"));\n  if (!items.length)\n    return;\n  const index = items.indexOf(document.activeElement as HTMLElement);\n  if (event.shiftKey && index <= 0) {\n    event.preventDefault();\n    items[items.length - 1].focus();\n  } else if (!event.shiftKey && (index === -1 || index === items.length - 1)) {\n    event.preventDefault();\n    items[0].focus();\n  }\n}\n\nfunction focusPageHeading(): void {\n  const heading = Array.from(mainEl.value?.querySelectorAll<HTMLElement>(\"h1\") ?? []).find(element => element.getClientRects().length);\n  if (heading) {\n    heading.tabIndex = -1;\n    heading.focus();\n  } else {\n    mainEl.value?.focus();\n  }\n}\n\n/** The open drawer is modal: topbar and content are inert, so focus and Tab stay inside it (PRD 12.3). */\nconst drawerModal = computed(() => drawerMode.value && drawerOpen.value);\nlet focusContentAfterRoute = false;\n\nwatch(drawerModal, async open => {\n  if (!open)\n    return;\n  await nextTick();\n  document.querySelector<HTMLElement>(\"#velkom-sidebar a, #velkom-sidebar button\")?.focus();\n});\n\n/** Closing returns focus to the drawer trigger, or after a navigation to the new page's heading. */\nfunction closeDrawer(reason: \"dismiss\" | \"navigated\"): void {\n  if (!drawerModal.value) {\n    drawerOpen.value = false;\n    return;\n  }\n  drawerOpen.value = false;\n  if (reason === \"navigated\") {\n    focusContentAfterRoute = true;\n    // A link to the current page, or one a guard refuses, never changes the route: focus this page's heading,\n    // unless a dialog (the unsaved-changes question) holds focus.\n    window.setTimeout(() => {\n      if (focusContentAfterRoute) {\n        focusContentAfterRoute = false;\n        if (!document.querySelector(\"dialog[open]\"))\n          focusPageHeading();\n      }\n    }, 400);\n  } else {\n    void nextTick(() => drawerTrigger ? drawerTrigger.focus() : topbar.value?.focusMenuButton());\n  }\n}\n\nwatch(() => route.value, async () => {\n  if (!focusContentAfterRoute)\n    return;\n  focusContentAfterRoute = false;\n  await nextTick();\n  await nextTick();\n  focusPageHeading();\n});\n\nfunction openSearch(): void {\n  topbar.value?.closeMenus();\n  if (drawerModal.value) {\n    // The search dialog must restore focus to a visible trigger when it closes.\n    closeDrawer(\"dismiss\");\n    void nextTick(() => { searchOpen.value = true; });\n  } else {\n    searchOpen.value = true;\n  }\n}\n\nfunction closeSearch(): void {\n  searchOpen.value = false;\n}\n\nfunction focusMain(): void {\n  mainEl.value?.focus();\n}\n\n/** Org switch contract: close every overlay that belongs to the previous context. */\nfunction closeOverlays(): void {\n  searchOpen.value = false;\n  drawerOpen.value = false;\n  topbar.value?.closeMenus();\n}\n\ndefineExpose({ closeOverlays, focusOrgTrigger: () => topbar.value?.focusOrgTrigger(), scrollToTop: () => mainEl.value?.scrollTo({ top: 0 }) });\n\nonMounted(() => {\n  wideQuery.addEventListener(\"change\", onWideChange);\n  drawerQuery.addEventListener(\"change\", onDrawerChange);\n  window.addEventListener(\"keydown\", onKeydown);\n});\n\nonBeforeUnmount(() => {\n  wideQuery.removeEventListener(\"change\", onWideChange);\n  drawerQuery.removeEventListener(\"change\", onDrawerChange);\n  window.removeEventListener(\"keydown\", onKeydown);\n});\n</script>\n\n<style scoped>\n.shell {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  background: var(--shell);\n  /* clip, not hidden: scrollIntoView must not scroll the shell itself. */\n  overflow: clip;\n}\n\n.shell__skip {\n  position: absolute;\n  left: 8px;\n  top: -48px;\n  z-index: 70;\n  padding: 8px 12px;\n  border-radius: var(--radius-control);\n  background: var(--primary);\n  color: var(--primary-foreground);\n  text-decoration: none;\n}\n\n.shell__skip:focus {\n  top: 8px;\n}\n\n.shell__body {\n  position: relative;\n  flex: 1;\n  display: flex;\n  min-height: 0;\n}\n\n.shell__notice {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  align-items: center;\n  gap: 8px;\n  padding: 0;\n}\n\n.shell__demo {\n  margin: 0;\n  font-size: 12px;\n  font-weight: 700;\n}\n\n.shell__main {\n  flex: 999 1 560px;\n  max-width: 1200px;\n  min-width: 0;\n  overflow-y: auto;\n  scrollbar-width: none;\n  background: var(--surface);\n  outline: none;\n}\n\n.shell__main::-webkit-scrollbar { width: 0; height: 0; }\n\n.shell__content {\n  width: 100%;\n  max-width: 1200px;\n  padding: 28px 24px 48px;\n}\n\n.shell__scrim {\n  position: fixed;\n  inset: 0;\n  z-index: 44;\n  background: var(--overlay);\n}\n\n.shell__mobile-nav {\n  display: flex;\n  flex-shrink: 0;\n  min-height: calc(76px + env(safe-area-inset-bottom, 0px));\n  padding: 8px 2px max(26px, env(safe-area-inset-bottom, 0px));\n  background: #ffffff;\n}\n\n.shell__mobile-item {\n  display: flex;\n  flex: 1 1 0;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  gap: 4px;\n  min-width: 0;\n  min-height: 58px;\n  padding: 0;\n  border: none;\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--muted-foreground);\n  font-size: 15px;\n  font-weight: 600;\n  letter-spacing: -0.02em;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.shell__mobile-icon {\n  display: grid;\n  place-items: center;\n  width: 60px;\n  height: 32px;\n  border-radius: var(--radius-control);\n}\n\n.shell__mobile-item--active {\n  color: var(--foreground);\n  font-weight: 700;\n}\n\n.shell__mobile-item--active .shell__mobile-icon {\n  background: var(--accent);\n}\n\n@media (hover: hover) {\n  .shell__mobile-item:hover {\n    background: var(--hover);\n  }\n}\n\n@media (max-width: 767px) {\n  /* Account access occupies the reference's top inset without adding a second header row. */\n  .shell--demo :deep(.topbar), .shell:is([data-section=\"overzicht\"], [data-section=\"instellingen\"]) :deep(.topbar) {\n    position: absolute;\n    inset: 0 0 auto;\n    z-index: 20;\n    height: 44px;\n    border: 0;\n    background: var(--surface);\n  }\n  .shell[data-section=\"overzicht\"] :deep(.topbar) { background: var(--accent); }\n  .shell--demo :deep(.topbar__brand), .shell:is([data-section=\"overzicht\"], [data-section=\"instellingen\"]) :deep(.topbar__brand) { display: none; }\n  .shell--demo :deep(.orgswitch__trigger), .shell:is([data-section=\"overzicht\"], [data-section=\"instellingen\"]) :deep(.orgswitch__trigger) { width: 32px; height: 32px; min-height: 32px; padding: 0; border: 0; background: transparent; }\n  .shell--demo :deep(.orgswitch__avatar), .shell:is([data-section=\"overzicht\"], [data-section=\"instellingen\"]) :deep(.orgswitch__avatar) { width: 28px; height: 28px; font-size: 11px; }\n\n  .shell__content {\n    padding: 20px;\n  }\n  .shell--demo:not([data-section=\"overzicht\"]) .shell__content, .shell[data-section=\"instellingen\"] .shell__content { padding-top: 58px; }\n\n  .shell__notice {\n    gap: 4px;\n  }\n}\n\n@media (min-width: 768px) {\n  .shell__mobile-nav {\n    display: none;\n  }\n}\n\n@media (min-width: 1024px) {\n  .shell__content {\n    padding: 40px 48px 72px;\n  }\n}\n</style>\n","<template>\n  <header class=\"topbar\" data-testid=\"topbar\">\n    <div class=\"topbar__start\">\n    <button ref=\"menuButton\" type=\"button\" class=\"topbar__menu\" aria-label=\"Navigatie openen\" :aria-expanded=\"drawerOpen\"\n            aria-controls=\"velkom-sidebar\" @click=\"emit('toggleDrawer')\">\n      <Icon name=\"menu\" :size=\"20\" />\n    </button>\n\n    <a class=\"topbar__brand\" :href=\"homeHref\" aria-label=\"Velkom, naar overzicht\">\n      <svg viewBox=\"0 0 1280 350\" class=\"topbar__wordmark\" aria-hidden=\"true\" focusable=\"false\"><path fill=\"currentColor\" d=\"M83.44 290 16.8 106.4H52.67L101.46 245.46L150.25 106.4H186.12L119.48 290Z M270.15 295.1Q242.78 295.1 222.13 283.12Q201.47 271.13 190 249.62Q178.52 228.12 178.52 199.73Q178.52 169.64 189.83 147.54Q201.13 125.44 221.36 113.37Q241.59 101.3 268.45 101.3Q296.5 101.3 316.22 114.3Q335.94 127.31 345.72 151.28Q355.49 175.25 353.45 208.23H317.92V195.31Q317.58 163.35 305.77 148.05Q293.95 132.75 269.81 132.75Q243.12 132.75 229.69 149.58Q216.26 166.41 216.26 198.2Q216.26 228.46 229.69 245.03Q243.12 261.61 268.45 261.61Q285.11 261.61 297.26 254.05Q309.42 246.48 316.22 232.37L351.07 243.42Q340.36 268.07 318.6 281.59Q296.84 295.1 270.15 295.1ZM204.7 208.23V180.52H335.77V208.23Z M366.93 290V40.1H402.46V290Z M425.29 290 425.46 45.2H461.5V194.8L533.58 106.4H578.8L502.64 198.2L586.62 290H538.34L461.5 201.6V290Z M425.46 40.10H461.50V46.20H425.46Z M655.35 295.1Q627.81 295.1 607.58 282.69Q587.35 270.28 576.38 248.44Q565.42 226.59 565.42 198.03Q565.42 169.3 576.64 147.45Q587.86 125.61 608.09 113.45Q628.32 101.3 655.35 101.3Q682.89 101.3 703.12 113.71Q723.35 126.12 734.4 147.88Q745.45 169.64 745.45 198.03Q745.45 226.76 734.32 248.6Q723.18 270.45 702.95 282.77Q682.72 295.1 655.35 295.1ZM655.35 261.61Q681.7 261.61 694.71 243.84Q707.71 226.08 707.71 198.03Q707.71 169.3 694.54 152.05Q681.36 134.79 655.35 134.79Q637.5 134.79 625.94 142.87Q614.38 150.94 608.77 165.13Q603.16 179.33 603.16 198.03Q603.16 226.93 616.42 244.27Q629.68 261.61 655.35 261.61Z M974.83 290 975 175.59Q975 155.7 964.8 144.56Q954.6 133.43 937.94 133.43Q927.74 133.43 919.33 138.1Q910.91 142.78 905.73 152.05Q900.54 161.31 900.54 175.25L883.37 166.58Q883.03 147.2 891.62 132.58Q900.2 117.96 914.99 109.88Q929.78 101.81 948.14 101.81Q977.89 101.81 994.21 119.66Q1010.53 137.51 1010.53 167.09L1010.36 290ZM754.68 290V106.4H786.3V159.44H790.38V290ZM864.84 290 865.01 176.27Q865.01 156.21 854.9 144.82Q844.78 133.43 827.78 133.43Q810.95 133.43 800.67 144.99Q790.38 156.55 790.38 175.25L773.38 164.37Q773.38 146.35 782.05 132.24Q790.72 118.13 805.51 109.97Q820.3 101.81 839 101.81Q858.55 101.81 872.32 110.05Q886.09 118.3 893.32 133.09Q900.54 147.88 900.54 167.43L900.37 290Z\"></path><circle cx=\"1080\" cy=\"100\" r=\"40\" class=\"topbar__dot\"></circle></svg>\n    </a>\n    <slot name=\"notice\" />\n    </div>\n\n    <button v-if=\"demo\" type=\"button\" class=\"topbar__search\" data-testid=\"search-trigger\" :aria-label=\"`Zoeken in ${orgName}`\" @click=\"emit('openSearch')\">\n      <Icon name=\"search\" :size=\"16\" />\n      <span class=\"topbar__search-label\">Zoeken in {{ orgName }}</span>\n      <kbd class=\"topbar__kbd\" aria-hidden=\"true\">{{ shortcut }}</kbd>\n    </button>\n\n    <div class=\"topbar__end\">\n    <OrganizationSwitcher ref=\"switcher\" :user=\"user\" :active-org=\"activeOrg\" :organizations=\"organizations\" :demo=\"demo\" :authenticated=\"authenticated\"\n                          @select=\"slug => emit('selectOrg', slug)\" @reset=\"emit('resetDemo')\" @logout=\"emit('logout')\" />\n    </div>\n  </header>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport type { ShellIdentity, ShellOrganization } from \"../../lib/navigation\";\nimport Icon from \"../ui/Icon.vue\";\nimport OrganizationSwitcher from \"./OrganizationSwitcher.vue\";\n\ndefineProps<{ orgName: string; homeHref: string; drawerOpen: boolean; user: ShellIdentity; activeOrg: ShellOrganization; organizations: ShellOrganization[]; demo: boolean; authenticated: boolean }>();\nconst emit = defineEmits<{ openSearch: []; toggleDrawer: []; selectOrg: [slug: string]; resetDemo: []; logout: [] }>();\n\nconst switcher = ref<InstanceType<typeof OrganizationSwitcher> | null>(null);\nconst menuButton = ref<HTMLButtonElement | null>(null);\nconst shortcut = /Mac|iPhone|iPad/.test(navigator.platform) ? \"⌘K\" : \"Ctrl K\";\n\ndefineExpose({\n  closeMenus: () => switcher.value?.close(false),\n  focusOrgTrigger: () => switcher.value?.focusTrigger(),\n  focusMenuButton: () => menuButton.value?.focus(),\n});\n</script>\n\n<style scoped>\n.topbar {\n  display: flex;\n  align-items: center;\n  gap: 16px;\n  height: var(--topbar-height);\n  flex-shrink: 0;\n  padding: 0 24px;\n  border-bottom: 1px solid var(--border);\n}\n\n.topbar__menu {\n  display: none;\n  place-items: center;\n  width: 44px;\n  height: 44px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--muted-foreground);\n  cursor: pointer;\n}\n\n.topbar__brand {\n  display: flex;\n  align-items: center;\n  flex-shrink: 0;\n  color: var(--foreground);\n  text-decoration: none;\n  border-radius: var(--radius-control);\n}\n\n/* Use the exported outlines so the wordmark does not depend on a font loading. */\n.topbar__wordmark {\n  display: block;\n  width: 104px;\n  height: 28px;\n}\n\n.topbar__dot {\n  fill: var(--coral);\n}\n\n/* Equal-width start and end columns keep the search trigger centered on the viewport, as in the frame. */\n.topbar__start,\n.topbar__end {\n  display: flex;\n  flex: 1 1 0;\n  align-items: center;\n  gap: 16px;\n  min-width: 0;\n}\n\n.topbar__end {\n  justify-content: flex-end;\n}\n\n.topbar__search {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: min(460px, 36vw);\n  height: 44px;\n  padding: 0 8px 0 16px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-control);\n  background: var(--surface-raised);\n  color: var(--muted-foreground);\n  font-size: 14px;\n  text-align: left;\n  cursor: pointer;\n}\n\n.topbar__search:hover {\n  background: var(--hover);\n}\n\n.topbar__search-label {\n  flex: 1;\n  min-width: 0;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.topbar__kbd {\n  padding: 3px 9px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-control);\n  background: transparent;\n  font-family: inherit;\n  font-size: 12px;\n  font-weight: 700;\n  line-height: 1.2;\n  color: var(--muted-foreground);\n}\n\n.topbar__menu {\n  flex-shrink: 0;\n}\n\n.topbar__menu:hover {\n  background: var(--hover);\n  color: var(--foreground);\n}\n\n@media (max-width: 1023px) {\n  .topbar {\n    gap: 8px;\n    padding: 0 8px 0 12px;\n  }\n\n  .topbar__start,\n  .topbar__end {\n    gap: 8px;\n  }\n\n  .topbar__menu {\n    display: grid;\n  }\n\n  .topbar__search {\n    width: 44px;\n    padding: 0;\n    justify-content: center;\n    flex-shrink: 0;\n  }\n\n  .topbar__search-label,\n  .topbar__kbd {\n    display: none;\n  }\n\n}\n\n/* Keep the organization readable on phones. */\n@media (max-width: 767px) {\n  .topbar {\n    height: 72px;\n    padding-inline: 20px;\n  }\n\n  .topbar__menu,\n  .topbar__search {\n    display: none;\n  }\n\n  .topbar__brand {\n    min-width: 0;\n  }\n}\n</style>\n","/* Carbon Design System icons (IBM, Apache 2.0), path bodies from Iconify, viewBox 0 0 32 32. */\nexport const icons = {\n  \"add\": \"<path fill=\\\"currentColor\\\" d=\\\"M17 15V8h-2v7H8v2h7v7h2v-7h7v-2z\\\"/>\",\n  \"add-alt\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 4c6.6 0 12 5.4 12 12s-5.4 12-12 12S4 22.6 4 16S9.4 4 16 4m0-2C8.3 2 2 8.3 2 16s6.3 14 14 14s14-6.3 14-14S23.7 2 16 2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M24 15h-7V8h-2v7H8v2h7v7h2v-7h7z\\\"/>\",\n  \"alarm\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 28a11 11 0 1 1 11-11a11 11 0 0 1-11 11m0-20a9 9 0 1 0 9 9a9 9 0 0 0-9-9\\\"/><path fill=\\\"currentColor\\\" d=\\\"M18.59 21L15 17.41V11h2v5.58l3 3.01zM4 7.592l3.582-3.589l1.416 1.413l-3.582 3.589zm19-2.184l1.415-1.413l3.581 3.589l-1.415 1.413z\\\"/>\",\n  \"analytics\": \"<path fill=\\\"currentColor\\\" d=\\\"M4 2H2v26a2 2 0 0 0 2 2h26v-2H4Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M30 9h-7v2h3.59L19 18.59l-4.29-4.3a1 1 0 0 0-1.42 0L6 21.59L7.41 23L14 16.41l4.29 4.3a1 1 0 0 0 1.42 0l8.29-8.3V16h2Z\\\"/>\",\n  \"api\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 22a3.86 3.86 0 0 0-2 .57l-3.09-3.1a6 6 0 0 0 0-6.94L24 9.43a3.86 3.86 0 0 0 2 .57a4 4 0 1 0-4-4a3.86 3.86 0 0 0 .57 2l-3.1 3.09a6 6 0 0 0-6.94 0L9.43 8A3.86 3.86 0 0 0 10 6a4 4 0 1 0-4 4a3.86 3.86 0 0 0 2-.57l3.09 3.1a6 6 0 0 0 0 6.94L8 22.57A3.86 3.86 0 0 0 6 22a4 4 0 1 0 4 4a3.86 3.86 0 0 0-.57-2l3.1-3.09a6 6 0 0 0 6.94 0l3.1 3.09a3.86 3.86 0 0 0-.57 2a4 4 0 1 0 4-4m0-18a2 2 0 1 1-2 2a2 2 0 0 1 2-2M4 6a2 2 0 1 1 2 2a2 2 0 0 1-2-2m2 22a2 2 0 1 1 2-2a2 2 0 0 1-2 2m10-8a4 4 0 1 1 4-4a4 4 0 0 1-4 4m10 8a2 2 0 1 1 2-2a2 2 0 0 1-2 2\\\"/>\",\n  \"api-1\": \"<path fill=\\\"currentColor\\\" d=\\\"M8 9H4a2 2 0 0 0-2 2v12h2v-5h4v5h2V11a2 2 0 0 0-2-2m-4 7v-5h4v5Zm18-5h3v10h-3v2h8v-2h-3V11h3V9h-8zm-8 12h-2V9h6a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-4Zm0-7h4v-5h-4Z\\\"/>\",\n  \"archive\": \"<path fill=\\\"currentColor\\\" d=\\\"M14 19h4v2h-4z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M6 2v26a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2Zm18 26H8V16h16Zm0-14H8v-4h16ZM8 8V4h16v4Z\\\"/>\",\n  \"arrow-down\": \"<path fill=\\\"currentColor\\\" d=\\\"M24.59 16.59L17 24.17V4h-2v20.17l-7.59-7.58L6 18l10 10l10-10z\\\"/>\",\n  \"arrow-left\": \"<path fill=\\\"currentColor\\\" d=\\\"m14 26l1.41-1.41L7.83 17H28v-2H7.83l7.58-7.59L14 6L4 16z\\\"/>\",\n  \"arrow-right\": \"<path fill=\\\"currentColor\\\" d=\\\"m18 6l-1.43 1.393L24.15 15H4v2h20.15l-7.58 7.573L18 26l10-10z\\\"/>\",\n  \"arrow-up\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 4L6 14l1.41 1.41L15 7.83V28h2V7.83l7.59 7.58L26 14z\\\"/>\",\n  \"arrows-horizontal\": \"<path fill=\\\"currentColor\\\" d=\\\"M11.41 26.59L7.83 23H28v-2H7.83l3.58-3.59L10 16l-6 6l6 6zM28 10l-6-6l-1.41 1.41L24.17 9H4v2h20.17l-3.58 3.59L22 16z\\\"/>\",\n  \"assembly-cluster\": \"<path fill=\\\"currentColor\\\" d=\\\"m21.3 4.9l-4.5-2.7c-.3-.1-.5-.2-.8-.2s-.5.1-.7.2l-4.5 2.7c-.5.3-.8.8-.8 1.3v5.6c0 .5.3 1 .7 1.3l4.5 2.7c.2.1.5.2.7.2s.5-.1.7-.2l4.5-2.7c.4-.3.7-.7.7-1.3V6.2c.2-.5-.1-1-.5-1.3M20 11.5l-4 2.4l-4-2.4v-5l4-2.4l4 2.4zm9.3 7.4l-4.5-2.7c-.3-.1-.5-.2-.8-.2s-.5.1-.7.2l-4.5 2.7c-.4.3-.7.7-.7 1.3v5.6c0 .5.3 1 .7 1.3l4.5 2.7c.2.1.5.2.7.2s.5-.1.7-.2l4.5-2.7c.4-.3.7-.7.7-1.3v-5.6c.1-.5-.2-1-.6-1.3M28 25.5l-4 2.4l-4-2.4v-5l4-2.4l4 2.4zm-14.7-6.6l-4.5-2.7c-.3-.1-.5-.2-.8-.2s-.5.1-.7.2l-4.5 2.7c-.5.3-.8.8-.8 1.3v5.6c0 .5.3 1 .7 1.3l4.5 2.7c.3.1.5.2.8.2s.5-.1.7-.2l4.5-2.7c.4-.3.7-.7.7-1.3v-5.6c.1-.5-.2-1-.6-1.3M12 25.5l-4 2.4l-4-2.4v-5l4-2.4l4 2.4z\\\"/>\",\n  \"badge\": \"<path fill=\\\"currentColor\\\" d=\\\"m23 2l1.593 3L28 5.414l-2.5 2.253L26 11l-3-1.875L20 11l.5-3.333L18 5.414L21.5 5z\\\"/><path fill=\\\"currentColor\\\" d=\\\"m22.717 13.249l-1.938-.498a6.994 6.994 0 1 1-5.028-8.531l.499-1.937A8.99 8.99 0 0 0 8 17.69V30l6-4l6 4V17.708a8.96 8.96 0 0 0 2.717-4.459M18 26.263l-4-2.667l-4 2.667V19.05a8.92 8.92 0 0 0 8 .006Z\\\"/>\",\n  \"barcode\": \"<path fill=\\\"currentColor\\\" d=\\\"M2 6h2v22H2zm10 0h2v20h-2zM6 6h4v20H6zm10 0h4v20h-4zm6 0h4v20h-4zm6 0h2v22h-2z\\\"/>\",\n  \"battery-full\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 24H6a2 2 0 0 1-2-2V10a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2v1h1a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2h-1v1a2 2 0 0 1-2 2M6 10v12h18v-3h3v-6h-3v-3Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M22 12v8H8v-8z\\\"/>\",\n  \"building\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 2H16a2 2 0 0 0-2 2v10H4a2 2 0 0 0-2 2v14h28V4a2 2 0 0 0-2-2M9 28v-7h4v7Zm19 0H15v-8a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v8H4V16h12V4h12Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M18 8h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2z\\\"/>\",\n  \"building-insights-1\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 2H16a2 2 0 0 0-2 2v10H4a2 2 0 0 0-2 2v14h28V4a2 2 0 0 0-2-2M9 28v-7h4v7Zm19 0H15v-8a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v8H4V16h12V4h12Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M18 8h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2zM9 12H7a5.006 5.006 0 0 1 5-5v2a3.003 3.003 0 0 0-3 3m-5 0H2A10.01 10.01 0 0 1 12 2v2a8.01 8.01 0 0 0-8 8\\\"/>\",\n  \"building-insights-3\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 2H16a2 2 0 0 0-2 2v10H4a2 2 0 0 0-2 2v14h28V4a2 2 0 0 0-2-2M9 28v-7h4v7Zm19 0H15v-8a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v8H4V16h12V4h12Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M18 8h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2zm-6 6h2v2h-2zm6 0h2v2h-2zM2 10h5v2H2zm8-8h2v5h-2zM4 5.414L5.414 4L9 7.585L7.585 9z\\\"/>\",\n  \"cafe\": \"<path fill=\\\"currentColor\\\" d=\\\"M2 28h28v2H2zm22.5-17H8a2 2 0 0 0-2 2v8a5.006 5.006 0 0 0 5 5h8a5.006 5.006 0 0 0 5-5v-1h.5a4.5 4.5 0 0 0 0-9M22 21a3.003 3.003 0 0 1-3 3h-8a3.003 3.003 0 0 1-3-3v-8h14Zm2.5-3H24v-5h.5a2.5 2.5 0 0 1 0 5M19 9h-2v-.146a1.99 1.99 0 0 0-1.105-1.789L13.21 5.724A3.98 3.98 0 0 1 11 2.146V1h2v1.146a1.99 1.99 0 0 0 1.106 1.789l2.683 1.341A3.98 3.98 0 0 1 19 8.854Z\\\"/>\",\n  \"calendar\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 4h-4V2h-2v2h-8V2h-2v2H6c-1.1 0-2 .9-2 2v20c0 1.1.9 2 2 2h20c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 22H6V12h20zm0-16H6V6h4v2h2V6h8v2h2V6h4z\\\"/>\",\n  \"calendar-heat-map\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 4h-4V2h-2v2h-8V2h-2v2H6a2.003 2.003 0 0 0-2 2v20a2.003 2.003 0 0 0 2 2h20a2.003 2.003 0 0 0 2-2V6a2.003 2.003 0 0 0-2-2M6 6h4v2h2V6h8v2h2V6h4v4H6Zm0 6h5v6H6Zm13 14h-6v-6h6Zm0-8h-6v-6h6Zm2 8v-6h5l.001 6Z\\\"/>\",\n  \"car\": \"<path fill=\\\"currentColor\\\" d=\\\"m29.338 15.934l-7.732-2.779l-3.232-4.058A2.99 2.99 0 0 0 16.054 8H8.058a3 3 0 0 0-2.48 1.312l-2.712 3.983A5 5 0 0 0 2 16.107V24a1 1 0 0 0 1 1h2.142a3.98 3.98 0 0 0 7.716 0h6.284a3.98 3.98 0 0 0 7.716 0H29a1 1 0 0 0 1-1v-7.125a1 1 0 0 0-.662-.941M9 26a2 2 0 1 1 2-2a2.003 2.003 0 0 1-2 2m14 0a2 2 0 1 1 2-2a2.003 2.003 0 0 1-2 2m5-3h-1.142a3.98 3.98 0 0 0-7.716 0h-6.284a3.98 3.98 0 0 0-7.716 0H4v-6.893a3 3 0 0 1 .52-1.688l2.711-3.981A1 1 0 0 1 8.058 10h7.996a1 1 0 0 1 .764.355l3.4 4.268a1 1 0 0 0 .444.318L28 17.578Z\\\"/>\",\n  \"car-front\": \"<path fill=\\\"currentColor\\\" d=\\\"M13 19h6v2h-6z\\\"/><path fill=\\\"currentColor\\\" d=\\\"m25.44 14l-1.27-4.55A2.01 2.01 0 0 0 22.246 8H9.754a2.01 2.01 0 0 0-1.923 1.45L6.531 14H4v2h2v7a2.003 2.003 0 0 0 2 2v3h2v-3h12v3h2v-3a2.003 2.003 0 0 0 2-2v-7h2v-2ZM9.755 10h12.492l1.428 5H8.326ZM24 21v2H8v-2h2v-2H8v-2h16v2h-2v2Z\\\"/>\",\n  \"catalog\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 2H8a2 2 0 0 0-2 2v4H4v2h2v5H4v2h2v5H4v2h2v4a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2m0 26H8v-4h2v-2H8v-5h2v-2H8v-5h2V8H8V4h18Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M14 8h8v2h-8zm0 7h8v2h-8zm0 7h8v2h-8z\\\"/>\",\n  \"certificate\": \"<path fill=\\\"currentColor\\\" d=\\\"m24 17l1.912 3.703l4.088.594L27 24l.771 4L24 25.75L20.229 28L21 24l-3-2.703l4.2-.594zM6 16h6v2H6zm0-4h10v2H6zm0-4h10v2H6z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 26H4V6h24v10h2V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h12Z\\\"/>\",\n  \"chart-bar\": \"<path fill=\\\"currentColor\\\" d=\\\"M4 2H2v26a2 2 0 0 0 2 2h26v-2H4v-3h22v-8H4v-4h14V5H4Zm20 17v4H4v-4ZM16 7v4H4V7Z\\\"/>\",\n  \"chart-column\": \"<path fill=\\\"currentColor\\\" d=\\\"M27 28V6h-8v22h-4V14H7v14H4V2H2v26a2 2 0 0 0 2 2h26v-2Zm-14 0H9V16h4Zm12 0h-4V8h4Z\\\"/>\",\n  \"chart-line\": \"<path fill=\\\"currentColor\\\" d=\\\"m4.67 28l6.39-12l7.3 6.49a2 2 0 0 0 1.7.47a2 2 0 0 0 1.42-1.07L27 10.9l-1.82-.9l-5.49 11l-7.3-6.49a2 2 0 0 0-1.68-.51a2 2 0 0 0-1.42 1L4 25V2H2v26a2 2 0 0 0 2 2h26v-2Z\\\"/>\",\n  \"chart-pie\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 4a12 12 0 1 0 12 12A12 12 0 0 0 16 4m10 11h-9V6.05A10 10 0 0 1 26 15M15.42 26A10 10 0 0 1 15 6.05v9a2 2 0 0 0 2 2h9A10 10 0 0 1 15.42 26\\\"/>\",\n  \"chat\": \"<path fill=\\\"currentColor\\\" d=\\\"M17.74 30L16 29l4-7h6a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V8a4 4 0 0 1 4-4h20a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4h-4.84Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M8 10h16v2H8zm0 6h10v2H8z\\\"/>\",\n  \"chat-bot\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 19a6.99 6.99 0 0 1-5.833-3.129l1.666-1.107a5 5 0 0 0 8.334 0l1.666 1.107A6.99 6.99 0 0 1 16 19m4-11a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2m-8 0a2 2 0 1 0 2 2a1.98 1.98 0 0 0-2-2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M17.736 30L16 29l4-7h6a1.997 1.997 0 0 0 2-2V6a1.997 1.997 0 0 0-2-2H6a1.997 1.997 0 0 0-2 2v14a1.997 1.997 0 0 0 2 2h9v2H6a4 4 0 0 1-4-4V6a4 4 0 0 1 4-4h20a4 4 0 0 1 4 4v14a4 4 0 0 1-4 4h-4.835Z\\\"/>\",\n  \"checkbox\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 4H6a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M6 26V6h20v20Z\\\"/>\",\n  \"checkbox-checked\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 4H6a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M6 26V6h20v20Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"m14 21.5l-5-4.96L10.59 15L14 18.35L21.41 11L23 12.58z\\\"/>\",\n  \"checkbox-indeterminate\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 14h12v4H10z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M26 4H6a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M6 26V6h20v20Z\\\"/>\",\n  \"checkmark\": \"<path fill=\\\"currentColor\\\" d=\\\"m13 24l-9-9l1.414-1.414L13 21.171L26.586 7.586L28 9z\\\"/>\",\n  \"checkmark-filled\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m-2 19.59l-5-5L10.59 15L14 18.41L21.41 11l1.596 1.586Z\\\"/><path fill=\\\"none\\\" d=\\\"m14 21.591l-5-5L10.591 15L14 18.409L21.41 11l1.595 1.585z\\\"/>\",\n  \"checkmark-outline\": \"<path fill=\\\"currentColor\\\" d=\\\"m14 21.414l-5-5.001L10.413 15L14 18.586L21.585 11L23 12.415z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 26a12 12 0 1 1 12-12a12 12 0 0 1-12 12\\\"/>\",\n  \"chevron-down\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 22L6 12l1.4-1.4l8.6 8.6l8.6-8.6L26 12z\\\"/>\",\n  \"chevron-left\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 16L20 6l1.4 1.4l-8.6 8.6l8.6 8.6L20 26z\\\"/>\",\n  \"chevron-right\": \"<path fill=\\\"currentColor\\\" d=\\\"M22 16L12 26l-1.4-1.4l8.6-8.6l-8.6-8.6L12 6z\\\"/>\",\n  \"chevron-sort\": \"<path fill=\\\"currentColor\\\" d=\\\"m16 28l-7-7l1.41-1.41L16 25.17l5.59-5.58L23 21zm0-24l7 7l-1.41 1.41L16 6.83l-5.59 5.58L9 11z\\\"/>\",\n  \"chevron-up\": \"<path fill=\\\"currentColor\\\" d=\\\"m16 10l10 10l-1.4 1.4l-8.6-8.6l-8.6 8.6L6 20z\\\"/>\",\n  \"circle-dash\": \"<path fill=\\\"currentColor\\\" d=\\\"M7.7 4.7a14.7 14.7 0 0 0-3 3.1L6.3 9a13.3 13.3 0 0 1 2.6-2.7Zm-3.1 7.6l-1.9-.6A12.5 12.5 0 0 0 2 16h2a11.5 11.5 0 0 1 .6-3.7m-1.9 8.1a14.4 14.4 0 0 0 2 3.9l1.6-1.2a12.9 12.9 0 0 1-1.7-3.3Zm5.1 6.9a14.4 14.4 0 0 0 3.9 2l.6-1.9A12.9 12.9 0 0 1 9 25.7Zm3.9-24.6l.6 1.9A11.5 11.5 0 0 1 16 4V2a12.5 12.5 0 0 0-4.3.7m12.5 24.6a15.2 15.2 0 0 0 3.1-3.1L25.7 23a11.5 11.5 0 0 1-2.7 2.7Zm3.2-7.6l1.9.6A15.5 15.5 0 0 0 30 16h-2a11.5 11.5 0 0 1-.6 3.7m1.8-8.1a14.4 14.4 0 0 0-2-3.9l-1.6 1.2a12.9 12.9 0 0 1 1.7 3.3Zm-5.1-7a14.4 14.4 0 0 0-3.9-2l-.6 1.9a12.9 12.9 0 0 1 3.3 1.7Zm-3.8 24.7l-.6-1.9a11.5 11.5 0 0 1-3.7.6v2a21.4 21.4 0 0 0 4.3-.7\\\"/>\",\n  \"circle-filled\": \"<circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"10\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 30a14 14 0 1 1 14-14a14.016 14.016 0 0 1-14 14m0-26a12 12 0 1 0 12 12A12.014 12.014 0 0 0 16 4\\\"/>\",\n  \"close\": \"<path fill=\\\"currentColor\\\" d=\\\"M17.414 16L24 9.414L22.586 8L16 14.586L9.414 8L8 9.414L14.586 16L8 22.586L9.414 24L16 17.414L22.586 24L24 22.586z\\\"/>\",\n  \"cloud-offline\": \"<path fill=\\\"currentColor\\\" d=\\\"M24.8 12.136a8.9 8.9 0 0 0-.979-2.543L30 3.414L28.587 2L2 28.587L3.414 30l5-5H23.5a6.497 6.497 0 0 0 1.3-12.864M23.5 23H10.414l11.928-11.928a6.9 6.9 0 0 1 .6 2.071l.099.812l.815.064A4.498 4.498 0 0 1 23.5 23m-19.204.449l1.432-1.431a4.477 4.477 0 0 1 2.416-7.999l.816-.064l.099-.812a6.987 6.987 0 0 1 10.63-5.086l1.443-1.443A8.986 8.986 0 0 0 7.2 12.136A6.49 6.49 0 0 0 4.296 23.45\\\"/>\",\n  \"collaborate\": \"<path fill=\\\"currentColor\\\" d=\\\"M6 21v-1H4v1a7 7 0 0 0 7 7h3v-2h-3a5 5 0 0 1-5-5m18-10v1h2v-1a7 7 0 0 0-7-7h-3v2h3a5 5 0 0 1 5 5m-13 0H5a3 3 0 0 0-3 3v2h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3 3 0 0 0-3-3m-3-1a4 4 0 1 0-4-4a4 4 0 0 0 4 4m0-6a2 2 0 1 1-2 2a2 2 0 0 1 2-2m19 21h-6a3 3 0 0 0-3 3v2h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3 3 0 0 0-3-3m-7-5a4 4 0 1 0 4-4a4 4 0 0 0-4 4m6 0a2 2 0 1 1-2-2a2 2 0 0 1 2 2\\\"/>\",\n  \"connect\": \"<path fill=\\\"currentColor\\\" d=\\\"M23 16.01a7 7 0 0 0-4.18 1.39l-4.22-4.22A6.86 6.86 0 0 0 16 9.01a7 7 0 1 0-2.81 5.59l4.21 4.22a7 7 0 1 0 5.6-2.81m-19-7a5 5 0 1 1 5 5a5 5 0 0 1-5-5\\\"/>\",\n  \"copy\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z\\\"/>\",\n  \"currency-euro\": \"<path fill=\\\"currentColor\\\" d=\\\"M17 26c-3.616 0-6.333-2.297-7.446-6H19v-2H9.132A15 15 0 0 1 9 16q.001-.495.026-1H19v-2H9.237C9.845 9.352 11.81 6 17 6c3.853 0 5.532 1.647 7.128 4.49l1.744-.98C24.265 6.649 22.078 4 17 4C10.645 4 7 8.374 7 16c0 7.065 4.112 12 10 12c5.078 0 7.265-2.648 8.872-5.51l-1.744-.98C22.532 24.354 20.853 26 17 26\\\"/>\",\n  \"cut\": \"<path fill=\\\"currentColor\\\" d=\\\"M26.5 19.63L20.24 16l6.26-3.63a5 5 0 0 0-1.21-9.2A5.2 5.2 0 0 0 24 3a5 5 0 0 0-4.33 7.53a5 5 0 0 0 2.39 2.1l-3.82 2.21L4 6.6L3 8.34L16.24 16L3 23.68l1 1.74l14.24-8.26l3.82 2.21a5 5 0 0 0-2.39 2.1A5 5 0 0 0 24 29a5.2 5.2 0 0 0 1.29-.17a5 5 0 0 0 1.21-9.2m-5.1-10.1a3 3 0 0 1 1.1-4.12a3 3 0 0 1 4.1 1.11a3 3 0 0 1-1.1 4.11a3 3 0 0 1-4.1-1.1m5.2 16a3 3 0 0 1-4.1 1.11a3 3 0 0 1-1.1-4.12a3 3 0 0 1 4.1-1.1a3 3 0 0 1 1.1 4.06Z\\\"/>\",\n  \"dashboard\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 21h2v5h-2zm-4-5h2v10h-2zm-9 10a5.006 5.006 0 0 1-5-5h2a3 3 0 1 0 3-3v-2a5 5 0 0 1 0 10\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 2H4a2 2 0 0 0-2 2v24a2 2 0 0 0 2 2h24a2.003 2.003 0 0 0 2-2V4a2 2 0 0 0-2-2m0 9H14V4h14ZM12 4v7H4V4ZM4 28V13h24l.002 15Z\\\"/>\",\n  \"dashboard-reference\": \"<path fill=\\\"currentColor\\\" d=\\\"M4 20v2h4.586L2 28.586L3.414 30L10 23.414V28h2v-8zm20 1h2v5h-2zm-4-5h2v10h-2zm-4 2h2v8h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 2H4a2 2 0 0 0-2 2v12h2v-3h24.001l.001 15H16v2h12a2.003 2.003 0 0 0 2-2V4a2 2 0 0 0-2-2m-16 9H4V4h8Zm2 0V4h14v7Z\\\"/>\",\n  \"data-connected\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 30h-6v-2h4V4h-4V2h6z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M24.91 19.59a4.51 4.51 0 0 0-2.66-3.24a4.55 4.55 0 0 0-3.5 0a5 5 0 0 0-.64.35l-2.81-2.81a4.53 4.53 0 1 0-1.41 1.41l2.81 2.81a4.48 4.48 0 0 0-.61 3.3a4.51 4.51 0 0 0 2.66 3.24a4.55 4.55 0 0 0 3.5 0a4.51 4.51 0 0 0 2.66-3.24a4.7 4.7 0 0 0 0-1.82M11.5 14a2.5 2.5 0 1 1 2.5-2.5a2.5 2.5 0 0 1-2.5 2.5\\\"/><path fill=\\\"currentColor\\\" d=\\\"M8 30H2V2h6v2H4v24h4z\\\"/>\",\n  \"data-vis-1\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 22a3.96 3.96 0 0 0-2.02.567l-3.813-3.814a4.965 4.965 0 0 0 0-5.506l2.547-2.547A3.028 3.028 0 1 0 21.3 9.286l-2.547 2.547a4.965 4.965 0 0 0-5.506 0L9.433 8.019A3.96 3.96 0 0 0 10 6a4 4 0 1 0-4 4a3.96 3.96 0 0 0 2.02-.567l3.813 3.814a4.965 4.965 0 0 0 0 5.506l-3.814 3.814A3.96 3.96 0 0 0 6 22a4 4 0 1 0 4 4a3.96 3.96 0 0 0-.567-2.02l3.814-3.813a5 5 0 0 0 1.753.732v3.285a3 3 0 1 0 2 0v-3.285a5 5 0 0 0 1.753-.732l3.814 3.814A3.96 3.96 0 0 0 22 26a4 4 0 1 0 4-4m-10-9a3 3 0 1 1-3 3a3.003 3.003 0 0 1 3-3M4 6a2 2 0 1 1 2 2a2 2 0 0 1-2-2m2 22a2 2 0 1 1 2-2a2 2 0 0 1-2 2m20 0a2 2 0 1 1 2-2a2.003 2.003 0 0 1-2 2\\\"/>\",\n  \"devices\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 30H4a2 2 0 0 1-2-2V16a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2M4 16v12h6V16Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 4H6a2 2 0 0 0-2 2v6h2V6h22v14H14v2h2v4h-2v2h9v-2h-5v-4h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2\\\"/>\",\n  \"document\": \"<path fill=\\\"currentColor\\\" d=\\\"m25.7 9.3l-7-7c-.2-.2-.4-.3-.7-.3H8c-1.1 0-2 .9-2 2v24c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V10c0-.3-.1-.5-.3-.7M18 4.4l5.6 5.6H18zM24 28H8V4h8v6c0 1.1.9 2 2 2h6z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10 22h12v2H10zm0-6h12v2H10z\\\"/>\",\n  \"document-pdf\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 18v-2h-6v10h2v-4h3v-2h-3v-2zm-11 8h-4V16h4a3.003 3.003 0 0 1 3 3v4a3.003 3.003 0 0 1-3 3m-2-2h2a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1h-2Zm-6-8H6v10h2v-3h3a2.003 2.003 0 0 0 2-2v-3a2 2 0 0 0-2-2m-3 5v-3h3l.001 3Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M22 14v-4a.91.91 0 0 0-.3-.7l-7-7A.9.9 0 0 0 14 2H4a2.006 2.006 0 0 0-2 2v24a2 2 0 0 0 2 2h16v-2H4V4h8v6a2.006 2.006 0 0 0 2 2h6v2Zm-8-4V4.4l5.6 5.6Z\\\"/>\",\n  \"dot-mark\": \"<circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"8\\\" fill=\\\"currentColor\\\"/>\",\n  \"download\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 24v4H6v-4H4v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2v-4Zm0-10l-1.41-1.41L17 20.17V2h-2v18.17l-7.59-7.58L6 14l10 10z\\\"/>\",\n  \"draggable\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 6h4v4h-4zm8 0h4v4h-4zm-8 8h4v4h-4zm8 0h4v4h-4zm-8 8h4v4h-4zm8 0h4v4h-4z\\\"/>\",\n  \"edit\": \"<path fill=\\\"currentColor\\\" d=\\\"M2 26h28v2H2zM25.4 9c.8-.8.8-2 0-2.8l-3.6-3.6c-.8-.8-2-.8-2.8 0l-15 15V24h6.4zm-5-5L24 7.6l-3 3L17.4 7zM6 22v-3.6l10-10l3.6 3.6l-10 10z\\\"/>\",\n  \"email\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2m-2.2 2L16 14.78L6.2 8ZM4 24V8.91l11.43 7.91a1 1 0 0 0 1.14 0L28 8.91V24Z\\\"/>\",\n  \"email-new\": \"<path fill=\\\"currentColor\\\" d=\\\"M19 24H4L3.997 8.906l11.434 7.916a1 1 0 0 0 1.138 0L28 8.91V18h2V8a2.003 2.003 0 0 0-2-2H4a2 2 0 0 0-2 2v16a2.003 2.003 0 0 0 2 2h15Zm6.799-16L16 14.784L6.201 8Z\\\"/><circle cx=\\\"26\\\" cy=\\\"24\\\" r=\\\"4\\\" fill=\\\"currentColor\\\"/>\",\n  \"enterprise\": \"<path fill=\\\"currentColor\\\" d=\\\"M8 8h2v4H8zm0 6h2v4H8zm6-6h2v4h-2zm0 6h2v4h-2zm-6 6h2v4H8zm6 0h2v4h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M30 14a2 2 0 0 0-2-2h-6V4a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v26h28ZM4 4h16v24H4Zm18 24V14h6v14Z\\\"/>\",\n  \"error\": \"<path fill=\\\"currentColor\\\" d=\\\"M2 16A14 14 0 1 0 16 2A14 14 0 0 0 2 16m23.15 7.75L8.25 6.85a12 12 0 0 1 16.9 16.9M8.24 25.16a12 12 0 0 1-1.4-16.89l16.89 16.89a12 12 0 0 1-15.49 0\\\"/>\",\n  \"error-filled\": \"<path fill=\\\"none\\\" d=\\\"M9 10.555L10.555 9L23 21.444L21.444 23z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 2A13.914 13.914 0 0 0 2 16a13.914 13.914 0 0 0 14 14a13.914 13.914 0 0 0 14-14A13.914 13.914 0 0 0 16 2m5.445 21L9 10.556L10.556 9L23 21.445Z\\\"/>\",\n  \"event-schedule\": \"<path fill=\\\"currentColor\\\" d=\\\"M21 30a8 8 0 1 1 8-8a8 8 0 0 1-8 8m0-14a6 6 0 1 0 6 6a6 6 0 0 0-6-6\\\"/><path fill=\\\"currentColor\\\" d=\\\"M22.59 25L20 22.41V18h2v3.59l2 2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 6a2 2 0 0 0-2-2h-4V2h-2v2h-8V2h-2v2H6a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h4v-2H6V6h4v2h2V6h8v2h2V6h4v6h2Z\\\"/>\",\n  \"events\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 14h-2v2h2a3.003 3.003 0 0 1 3 3v4h2v-4a5.006 5.006 0 0 0-5-5M24 4a3 3 0 1 1-3 3a3 3 0 0 1 3-3m0-2a5 5 0 1 0 5 5a5 5 0 0 0-5-5m-1 28h-2v-2a3.003 3.003 0 0 0-3-3h-4a3.003 3.003 0 0 0-3 3v2H9v-2a5.006 5.006 0 0 1 5-5h4a5.006 5.006 0 0 1 5 5Zm-7-17a3 3 0 1 1-3 3a3 3 0 0 1 3-3m0-2a5 5 0 1 0 5 5a5 5 0 0 0-5-5m-8 3H6a5.006 5.006 0 0 0-5 5v4h2v-4a3.003 3.003 0 0 1 3-3h2ZM8 4a3 3 0 1 1-3 3a3 3 0 0 1 3-3m0-2a5 5 0 1 0 5 5a5 5 0 0 0-5-5\\\"/>\",\n  \"events-alt\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 31h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3.003 3.003 0 0 0-3-3h-6a3.003 3.003 0 0 0-3 3Zm6-6a4 4 0 1 1 4-4a4.004 4.004 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2.003 2.003 0 0 0-2-2M2 31h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3.003 3.003 0 0 0-3-3H5a3.003 3.003 0 0 0-3 3Zm6-6a4 4 0 1 1 4-4a4.004 4.004 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2m10-3h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3.003 3.003 0 0 0-3-3h-6a3.003 3.003 0 0 0-3 3Zm6-6a4 4 0 1 1 4-4a4.004 4.004 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2M2 16h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3.003 3.003 0 0 0-3-3H5a3.003 3.003 0 0 0-3 3Zm6-6a4 4 0 1 1 4-4a4.005 4.005 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2\\\"/>\",\n  \"exit\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 4h2v24h-2zM11.414 20.586L7.828 17H22v-2H7.828l3.586-3.586L10 10l-6 6l6 6z\\\"/>\",\n  \"export\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 24v4H6v-4H4v4l.008-.005A2 2 0 0 0 6 30h20a2 2 0 0 0 2-2v-4ZM6 12l1.411 1.405L15 5.825V24h2V5.825l7.591 7.58L26 12L16 2z\\\"/>\",\n  \"face-satisfied\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 26a12 12 0 1 1 12-12a12 12 0 0 1-12 12\\\"/><path fill=\\\"currentColor\\\" d=\\\"M11.5 11a2.5 2.5 0 1 0 2.5 2.5a2.48 2.48 0 0 0-2.5-2.5m9 0a2.5 2.5 0 1 0 2.5 2.5a2.48 2.48 0 0 0-2.5-2.5M16 24a8 8 0 0 0 6.85-3.89l-1.71-1a6 6 0 0 1-10.28 0l-1.71 1A8 8 0 0 0 16 24\\\"/>\",\n  \"favorite\": \"<path fill=\\\"currentColor\\\" d=\\\"M22.45 6a5.47 5.47 0 0 1 3.91 1.64a5.7 5.7 0 0 1 0 8L16 26.13L5.64 15.64a5.7 5.7 0 0 1 0-8a5.48 5.48 0 0 1 7.82 0l2.54 2.6l2.53-2.58A5.44 5.44 0 0 1 22.45 6m0-2a7.47 7.47 0 0 0-5.34 2.24L16 7.36l-1.11-1.12a7.49 7.49 0 0 0-10.68 0a7.72 7.72 0 0 0 0 10.82L16 29l11.79-11.94a7.72 7.72 0 0 0 0-10.82A7.5 7.5 0 0 0 22.45 4\\\"/>\",\n  \"filter\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 28h-4a2 2 0 0 1-2-2v-7.59L4.59 11A2 2 0 0 1 4 9.59V6a2 2 0 0 1 2-2h20a2 2 0 0 1 2 2v3.59a2 2 0 0 1-.59 1.41L20 18.41V26a2 2 0 0 1-2 2M6 6v3.59l8 8V26h4v-8.41l8-8V6Z\\\"/>\",\n  \"fire\": \"<path fill=\\\"currentColor\\\" d=\\\"M24.832 16.969c-.272-.647-.581-1.38-.883-2.285c-.79-2.369 1.734-4.953 1.758-4.977l-1.414-1.414c-.14.14-3.423 3.478-2.242 7.023c.326.978.652 1.75.938 2.43A9.4 9.4 0 0 1 24 22a6.24 6.24 0 0 1-4.19 5.293a8.52 8.52 0 0 0-2.103-8l-1.044-1.044l-.582 1.357c-1.836 4.284-4.021 6.154-5.306 6.934A5.84 5.84 0 0 1 8 22a9.6 9.6 0 0 1 .929-3.629A11.3 11.3 0 0 0 10 14v-1.778c.874.36 2 1.303 2 3.778v2.604l1.743-1.935c3.112-3.454 2.463-7.567 1.206-10.308A4.486 4.486 0 0 1 18 11h2c0-5.537-4.579-7-7-7h-2l1.2 1.599c.137.185 2.862 3.927 1.353 7.688A4.94 4.94 0 0 0 9 10H8v4a9.6 9.6 0 0 1-.929 3.629A11.3 11.3 0 0 0 6 22c0 3.848 3.823 8 10 8s10-4.152 10-8a11.4 11.4 0 0 0-1.168-5.031M12.835 27.526a16.5 16.5 0 0 0 4.367-5.598a6.1 6.1 0 0 1 .257 5.971A11 11 0 0 1 16 28a10.3 10.3 0 0 1-3.165-.474\\\"/>\",\n  \"flag\": \"<path fill=\\\"currentColor\\\" d=\\\"M6 30H4V2h24l-5.8 9l5.8 9H6Zm0-12h18.33l-4.53-7l4.53-7H6Z\\\"/>\",\n  \"floorplan\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 2H4c-1.1 0-2 .9-2 2v24c0 1.1.9 2 2 2h15v-2c0-2.8 2.2-5 5-5v-2c-3.9 0-7 3.1-7 7h-3v-4h-2v4H4V4h8v14h2v-5h4v-2h-4V4h14v7h-4v2h4v15h-4v2h4c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2\\\"/>\",\n  \"flow\": \"<path fill=\\\"currentColor\\\" d=\\\"M27 22.14V17a2 2 0 0 0-2-2h-8V9.86a4 4 0 1 0-2 0V15H7a2 2 0 0 0-2 2v5.14a4 4 0 1 0 2 0V17h18v5.14a4 4 0 1 0 2 0M8 26a2 2 0 1 1-2-2a2 2 0 0 1 2 2m6-20a2 2 0 1 1 2 2a2 2 0 0 1-2-2m12 22a2 2 0 1 1 2-2a2 2 0 0 1-2 2\\\"/>\",\n  \"flow-connection\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 18h-6a2 2 0 0 0-2 2v2h-5.586L10 17.586V12h2a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2v5.586l-4.707 4.707a1 1 0 0 0 0 1.414l5 5a1 1 0 0 0 1.414 0L14.414 24H20v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2M6 4h6v6H6Zm3 22.586L5.414 23L9 19.414L12.586 23ZM22 26v-6h6v6Z\\\"/>\",\n  \"forum\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 6H8c-1.2 0-2 .8-2 2v14c0 1.2.8 2 2 2h8v-2H8V8h20v14h-7.2L16 28.8l1.6 1.2l4.2-6H28c1.2 0 2-.8 2-2V8c0-1.2-.8-2-2-2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M4 18H2V5c0-1.7 1.3-3 3-3h13v2H5c-.6 0-1 .4-1 1z\\\"/>\",\n  \"globe\": \"<path fill=\\\"currentColor\\\" d=\\\"M14 4a7 7 0 1 1-7 7a7 7 0 0 1 7-7m0-2a9 9 0 1 0 9 9a9 9 0 0 0-9-9\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 11a13.96 13.96 0 0 0-4.105-9.895L22.48 2.52a11.994 11.994 0 0 1-16.924 17l-.038-.038l-1.414 1.414A13.96 13.96 0 0 0 14 25v3h-4v2h10v-2h-4v-3.16A14.01 14.01 0 0 0 28 11\\\"/>\",\n  \"grid\": \"<path fill=\\\"currentColor\\\" d=\\\"M12 4H6a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2m0 8H6V6h6Zm14-8h-6a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2m0 8h-6V6h6Zm-14 6H6a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2m0 8H6v-6h6Zm14-8h-6a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2m0 8h-6v-6h6Z\\\"/>\",\n  \"group\": \"<path fill=\\\"currentColor\\\" d=\\\"M31 30h-2v-3a3 3 0 0 0-3-3h-4a3 3 0 0 0-3 3v3h-2v-3a5 5 0 0 1 5-5h4a5 5 0 0 1 5 5Zm-7-18a3 3 0 1 1-3 3a3 3 0 0 1 3-3m0-2a5 5 0 1 0 5 5a5 5 0 0 0-5-5m-9 12h-2v-3a3 3 0 0 0-3-3H6a3 3 0 0 0-3 3v3H1v-3a5 5 0 0 1 5-5h4a5 5 0 0 1 5 5ZM8 4a3 3 0 1 1-3 3a3 3 0 0 1 3-3m0-2a5 5 0 1 0 5 5a5 5 0 0 0-5-5\\\"/>\",\n  \"headset\": \"<path fill=\\\"currentColor\\\" d=\\\"M25 10h-.06a9 9 0 0 0-17.88 0H7a5 5 0 0 0 0 10h2v-9a7 7 0 0 1 14 0v10a4 4 0 0 1-3.17 3.91a4 4 0 1 0 .05 2A6 6 0 0 0 25 21v-1a5 5 0 0 0 0-10M4 15a3 3 0 0 1 3-3v6a3 3 0 0 1-3-3m12 13a2 2 0 1 1 2-2a2 2 0 0 1-2 2m9-10v-6a3 3 0 0 1 0 6\\\"/>\",\n  \"health-cross\": \"<path fill=\\\"currentColor\\\" d=\\\"M19 28h-6a2 2 0 0 1-2-2v-5H6a2 2 0 0 1-2-2v-6a2 2 0 0 1 2-2h5V6a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v5h5a2 2 0 0 1 2 2v6a2.003 2.003 0 0 1-2 2h-5v5a2.003 2.003 0 0 1-2 2M6 13v6h7v7h6v-7h7v-6h-7V6h-6v7Z\\\"/>\",\n  \"help\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 26a12 12 0 1 1 12-12a12 12 0 0 1-12 12\\\"/><circle cx=\\\"16\\\" cy=\\\"23.5\\\" r=\\\"1.5\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"M17 8h-1.5a4.49 4.49 0 0 0-4.5 4.5v.5h2v-.5a2.5 2.5 0 0 1 2.5-2.5H17a2.5 2.5 0 0 1 0 5h-2v4.5h2V17a4.5 4.5 0 0 0 0-9\\\"/>\",\n  \"hospital\": \"<path fill=\\\"currentColor\\\" d=\\\"M21 10h-4V6h-2v4h-4v2h4v4h2v-4h4z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 10h-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v6H4a2 2 0 0 0-2 2v18h28V12a2 2 0 0 0-2-2M14 28v-6h4v6Zm6 0v-7a1 1 0 0 0-1-1h-6a1 1 0 0 0-1 1v7H4V12h4V4h16v8h4v16Z\\\"/>\",\n  \"hospital-bed\": \"<path fill=\\\"currentColor\\\" d=\\\"M25 16h-8a2 2 0 0 0-2 2v6H4V14H2v16h2v-4h24v4h2v-9a5.006 5.006 0 0 0-5-5m3 8H17v-6h8a3.003 3.003 0 0 1 3 3Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M9.5 17A1.5 1.5 0 1 1 8 18.5A1.5 1.5 0 0 1 9.5 17m0-2a3.5 3.5 0 1 0 3.5 3.5A3.5 3.5 0 0 0 9.5 15M21 6h-4V2h-2v4h-4v2h4v4h2V8h4z\\\"/>\",\n  \"hourglass\": \"<path fill=\\\"currentColor\\\" d=\\\"M15 19h2v2h-2zm0 4h2v2h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M23 11.67V4h3V2H6v2h3v7.67a2 2 0 0 0 .4 1.2L11.75 16L9.4 19.13a2 2 0 0 0-.4 1.2V28H6v2h20v-2h-3v-7.67a2 2 0 0 0-.4-1.2L20.25 16l2.35-3.13a2 2 0 0 0 .4-1.2M21 4v7H11V4Zm0 16.33V28H11v-7.67L14.25 16L12 13h8l-2.25 3Z\\\"/>\",\n  \"ibm-watson-language-translator\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 28h-3c-3.9 0-7-3.1-7-7v-4h2v4c0 2.8 2.2 5 5 5h3zm12 2h2.2l-4.6-11h-2.2l-4.6 11H21l.8-2h5.3zm-5.3-4l1.8-4.4l1.8 4.4zM28 15h-2v-4c0-2.8-2.2-5-5-5h-4V4h4c3.9 0 7 3.1 7 7zM14 5V3H9V1H7v2H2v2h8.2c-.2.9-.8 2.5-2.2 4c-.6-.7-1.1-1.4-1.4-2H4.3c.4 1 1.1 2.2 2.1 3.3c-.8.7-2 1.3-3.4 1.8l.7 1.9c1.8-.7 3.2-1.5 4.3-2.3c1.1.9 2.5 1.7 4.3 2.3l.7-1.9c-1.4-.5-2.6-1.2-3.5-1.8c1.9-2 2.5-4.1 2.7-5.3z\\\"/>\",\n  \"id\": \"<path d=\\\"M10 9h2v2h-2z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M18 23h-4V9h4a4 4 0 0 1 4 4v6a4 4 0 0 1-4 4zm-2-2h2a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2h-2z\\\" fill=\\\"currentColor\\\"/><path d=\\\"M10 13h2v10h-2z\\\" fill=\\\"currentColor\\\"/>\",\n  \"id-management\": \"<path fill=\\\"currentColor\\\" d=\\\"M15 20H9a3 3 0 0 0-3 3v2h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3 3 0 0 0-3-3m-3-1a4 4 0 1 0-4-4a4 4 0 0 0 4 4m0-6a2 2 0 1 1-2 2a2 2 0 0 1 2-2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 19v9H4V8h12V6H4a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2v-9Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M20 19h6v2h-6zm2 4h4v2h-4zm10-13V8h-2.101a5 5 0 0 0-.732-1.753l1.49-1.49l-1.414-1.414l-1.49 1.49A5 5 0 0 0 26 4.101V2h-2v2.101a5 5 0 0 0-1.753.732l-1.49-1.49l-1.414 1.414l1.49 1.49A5 5 0 0 0 20.101 8H18v2h2.101a5 5 0 0 0 .732 1.753l-1.49 1.49l1.414 1.414l1.49-1.49a5 5 0 0 0 1.753.732V16h2v-2.101a5 5 0 0 0 1.753-.732l1.49 1.49l1.414-1.414l-1.49-1.49A5 5 0 0 0 29.899 10Zm-7 2a3 3 0 1 1 3-3a3.003 3.003 0 0 1-3 3\\\"/>\",\n  \"identification\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 6v20H4V6zm0-2H4a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M6 10h7v2H6zm0 4h4v2H6zm17 4h-6a3 3 0 0 0-3 3v2h2v-2a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2h2v-2a3 3 0 0 0-3-3m-3-1a4 4 0 1 0-4-4a4 4 0 0 0 4 4m0-6a2 2 0 1 1-2 2a2 2 0 0 1 2-2\\\"/>\",\n  \"image\": \"<path fill=\\\"currentColor\\\" d=\\\"M19 14a3 3 0 1 0-3-3a3 3 0 0 0 3 3m0-4a1 1 0 1 1-1 1a1 1 0 0 1 1-1\\\"/><path fill=\\\"currentColor\\\" d=\\\"M26 4H6a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2m0 22H6v-6l5-5l5.59 5.59a2 2 0 0 0 2.82 0L21 19l5 5Zm0-4.83l-3.59-3.59a2 2 0 0 0-2.82 0L18 19.17l-5.59-5.59a2 2 0 0 0-2.82 0L6 17.17V6h20Z\\\"/>\",\n  \"import-export\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 24v4H4v-4H2v4l.008-.005A2 2 0 0 0 4 30h24a2 2 0 0 0 2-2v-4Zm-.4-9.4L24 18.2V4h-2v14.2l-3.6-3.6L17 16l6 6l6-6zM9 4l-6 6l1.4 1.4L8 7.8V22h2V7.8l3.6 3.6L15 10z\\\"/>\",\n  \"in-progress\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14.016 14.016 0 0 0 16 2m0 26a12 12 0 0 1 0-24v12l8.481 8.481A11.96 11.96 0 0 1 16 28\\\"/>\",\n  \"incomplete\": \"<path fill=\\\"currentColor\\\" d=\\\"m23.764 6.86l1.285-1.532a14 14 0 0 0-4.182-2.441l-.683 1.878a12 12 0 0 1 3.58 2.094M27.81 14l1.968-.413a13.9 13.9 0 0 0-1.638-4.541L26.409 10a12.5 12.5 0 0 1 1.401 4m-7.626 13.235l.683 1.878a14 14 0 0 0 4.182-2.44l-1.285-1.532a12 12 0 0 1-3.58 2.094M26.409 22l1.731 1a14.1 14.1 0 0 0 1.638-4.587l-1.968-.347A12.2 12.2 0 0 1 26.409 22M16 30V2a14 14 0 0 0 0 28\\\"/>\",\n  \"information\": \"<path fill=\\\"currentColor\\\" d=\\\"M17 22v-8h-4v2h2v6h-3v2h8v-2zM16 8a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 0 0 16 8\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 30a14 14 0 1 1 14-14a14 14 0 0 1-14 14m0-26a12 12 0 1 0 12 12A12 12 0 0 0 16 4\\\"/>\",\n  \"information-filled\": \"<path fill=\\\"none\\\" d=\\\"M16 8a1.5 1.5 0 1 1-1.5 1.5A1.5 1.5 0 0 1 16 8m4 13.875h-2.875v-8H13v2.25h1.875v5.75H12v2.25h8Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 6a1.5 1.5 0 1 1-1.5 1.5A1.5 1.5 0 0 1 16 8m4 16.125h-8v-2.25h2.875v-5.75H13v-2.25h4.125v8H20Z\\\"/>\",\n  \"key\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 9h-2l-2 7l-2-7h-2l3 9v5h2v-5zm-9 2V9h-8v14h8v-2h-6v-4h5v-2h-5v-4zM11 9H8.894L5 15.553V9H3v14h2v-4.294l.928-1.485L8.894 23H11l-3.89-7.57z\\\"/>\",\n  \"kiosk-device\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 19c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2H6c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h7v9H4v2h24v-2h-9v-9zm-9 9h-2v-9h2zM6 17V4h20v13zm10-4c-.55 0-1 .45-1 1s.45 1 1 1s1-.45 1-1s-.45-1-1-1\\\"/>\",\n  \"language\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 19h6v2h-6zm0-4h12v2H18zm0-4h12v2H18zm-4 10v-2H9v-2H7v2H2v2h8.215a8.6 8.6 0 0 1-2.216 3.977A9.3 9.3 0 0 1 6.552 23H4.333a10.9 10.9 0 0 0 2.145 3.297A14.7 14.7 0 0 1 3 28.127L3.702 30a16.4 16.4 0 0 0 4.29-2.336A16.5 16.5 0 0 0 12.299 30L13 28.127A14.7 14.7 0 0 1 9.523 26.3a10.3 10.3 0 0 0 2.729-5.3Zm-2.833-8h2.166L8.75 2H6.583L2 13h2.166L5 11h5.334ZM5.833 9l1.834-4.4L9.5 9Z\\\"/>\",\n  \"laptop\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 24.005H6a2 2 0 0 1-2-2v-14a2 2 0 0 1 2-2h20a2 2 0 0 1 2 2v14a2.003 2.003 0 0 1-2 2m-20-16v14h20v-14Zm-4 18h28v2H2z\\\"/>\",\n  \"launch\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 28H6a2.003 2.003 0 0 1-2-2V6a2.003 2.003 0 0 1 2-2h10v2H6v20h20V16h2v10a2.003 2.003 0 0 1-2 2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M20 2v2h6.586L18 12.586L19.414 14L28 5.414V12h2V2z\\\"/>\",\n  \"lightning\": \"<path fill=\\\"currentColor\\\" d=\\\"M11.61 29.92a1 1 0 0 1-.6-1.07L12.83 17H8a1 1 0 0 1-1-1.23l3-13A1 1 0 0 1 11 2h10a1 1 0 0 1 .78.37a1 1 0 0 1 .2.85L20.25 11H25a1 1 0 0 1 .9.56a1 1 0 0 1-.11 1l-13 17A1 1 0 0 1 12 30a1.1 1.1 0 0 1-.39-.08M17.75 13l2-9H11.8L9.26 15h5.91l-1.59 10.28L23 13Z\\\"/>\",\n  \"link\": \"<path fill=\\\"currentColor\\\" d=\\\"M29.25 6.76a6 6 0 0 0-8.5 0l1.42 1.42a4 4 0 1 1 5.67 5.67l-8 8a4 4 0 1 1-5.67-5.66l1.41-1.42l-1.41-1.42l-1.42 1.42a6 6 0 0 0 0 8.5A6 6 0 0 0 17 25a6 6 0 0 0 4.27-1.76l8-8a6 6 0 0 0-.02-8.48\\\"/><path fill=\\\"currentColor\\\" d=\\\"M4.19 24.82a4 4 0 0 1 0-5.67l8-8a4 4 0 0 1 5.67 0A3.94 3.94 0 0 1 19 14a4 4 0 0 1-1.17 2.85L15.71 19l1.42 1.42l2.12-2.12a6 6 0 0 0-8.51-8.51l-8 8a6 6 0 0 0 0 8.51A6 6 0 0 0 7 28a6.07 6.07 0 0 0 4.28-1.76l-1.42-1.42a4 4 0 0 1-5.67 0\\\"/>\",\n  \"list\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 6h18v2H10zm0 18h18v2H10zm0-9h18v2H10zm-6 0h2v2H4zm0-9h2v2H4zm0 18h2v2H4z\\\"/>\",\n  \"list-checked\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 22h14v2H16zm-2-2.6L12.6 18L6 24.6L3.4 22L2 23.4l4 4zM16 8h14v2H16zm-2-2.6L12.6 4L6 10.6L3.4 8L2 9.4l4 4z\\\"/>\",\n  \"location\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 18a5 5 0 1 1 5-5a5.006 5.006 0 0 1-5 5m0-8a3 3 0 1 0 3 3a3.003 3.003 0 0 0-3-3\\\"/><path fill=\\\"currentColor\\\" d=\\\"m16 30l-8.436-9.949a35 35 0 0 1-.348-.451A10.9 10.9 0 0 1 5 13a11 11 0 0 1 22 0a10.9 10.9 0 0 1-2.215 6.597l-.001.003s-.3.394-.345.447ZM8.813 18.395s.233.308.286.374L16 26.908l6.91-8.15c.044-.055.278-.365.279-.366A8.9 8.9 0 0 0 25 13a9 9 0 1 0-18 0a8.9 8.9 0 0 0 1.813 5.395\\\"/>\",\n  \"locked\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 14h-2V8a6 6 0 0 0-12 0v6H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V16a2 2 0 0 0-2-2M12 8a4 4 0 0 1 8 0v6h-8Zm12 20H8V16h16Z\\\"/>\",\n  \"login\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 30H14a2 2 0 0 1-2-2v-3h2v3h12V4H14v3h-2V4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v24a2 2 0 0 1-2 2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M14.59 20.59L18.17 17H4v-2h14.17l-3.58-3.59L16 10l6 6l-6 6z\\\"/>\",\n  \"logo-google\": \"<path fill=\\\"currentColor\\\" d=\\\"M27.39 13.82H16.21v4.63h6.44c-.6 2.95-3.11 4.64-6.44 4.64a7.09 7.09 0 0 1 0-14.18a7 7 0 0 1 4.42 1.58L24.12 7a12 12 0 1 0-7.91 21c6 0 11.45-4.36 11.45-12a9.56 9.56 0 0 0-.27-2.18Z\\\"/>\",\n  \"logo-slack\": \"<path fill=\\\"currentColor\\\" d=\\\"M9.042 19.166a2.521 2.521 0 1 1-2.52-2.521h2.52Zm1.271 0a2.521 2.521 0 0 1 5.042 0v6.313a2.521 2.521 0 1 1-5.042 0Zm2.521-10.124a2.521 2.521 0 1 1 2.521-2.52v2.52Zm0 1.271a2.521 2.521 0 0 1 0 5.042H6.52a2.521 2.521 0 1 1 0-5.042Zm10.124 2.521a2.521 2.521 0 1 1 2.52 2.521h-2.52Zm-1.271 0a2.521 2.521 0 0 1-5.042 0V6.52a2.521 2.521 0 1 1 5.042 0Zm-2.521 10.124a2.521 2.521 0 1 1-2.521 2.52v-2.52Zm0-1.271a2.521 2.521 0 0 1 0-5.042h6.313a2.521 2.521 0 1 1 0 5.042Z\\\"/>\",\n  \"logout\": \"<path fill=\\\"currentColor\\\" d=\\\"M6 30h12a2 2 0 0 0 2-2v-3h-2v3H6V4h12v3h2V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v24a2 2 0 0 0 2 2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M20.586 20.586L24.172 17H10v-2h14.172l-3.586-3.586L22 10l6 6l-6 6z\\\"/>\",\n  \"mail-all\": \"<path fill=\\\"currentColor\\\" d=\\\"M16.59 20.41L20.17 24l-3.59 3.59L18 29l5-5l-5-5zm7 0L27.17 24l-3.59 3.59L25 29l5-5l-5-5z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M14 23H4V7.91l11.43 7.91a1 1 0 0 0 1.14 0L28 7.91V17h2V7a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h10ZM25.8 7L16 13.78L6.2 7Z\\\"/>\",\n  \"map\": \"<path fill=\\\"currentColor\\\" d=\\\"m16 24l-6.09-8.6A8.14 8.14 0 0 1 16 2a8.08 8.08 0 0 1 8 8.13a8.2 8.2 0 0 1-1.8 5.13Zm0-20a6.07 6.07 0 0 0-6 6.13a6.2 6.2 0 0 0 1.49 4L16 20.52L20.63 14A6.24 6.24 0 0 0 22 10.13A6.07 6.07 0 0 0 16 4\\\"/><circle cx=\\\"16\\\" cy=\\\"9\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 12h-2v2h2v14H4V14h2v-2H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V14a2 2 0 0 0-2-2\\\"/>\",\n  \"maximize\": \"<path fill=\\\"currentColor\\\" d=\\\"M20 2v2h6.586L18 12.582L19.414 14L28 5.414V12h2V2zm-6 17.416L12.592 18L4 26.586V20H2v10h10v-2H5.414z\\\"/>\",\n  \"menu\": \"<path fill=\\\"currentColor\\\" d=\\\"M4 6h24v2H4zm0 18h24v2H4zm0-12h24v2H4zm0 6h24v2H4z\\\"/>\",\n  \"microphone\": \"<path fill=\\\"currentColor\\\" d=\\\"M23 14v3a7 7 0 0 1-14 0v-3H7v3a9 9 0 0 0 8 8.94V28h-4v2h10v-2h-4v-2.06A9 9 0 0 0 25 17v-3Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 22a5 5 0 0 0 5-5V7a5 5 0 0 0-10 0v10a5 5 0 0 0 5 5M13 7a3 3 0 0 1 6 0v10a3 3 0 0 1-6 0Z\\\"/>\",\n  \"minimize\": \"<path fill=\\\"currentColor\\\" d=\\\"M4 18v2h6.586L2 28.582L3.414 30L12 21.414V28h2V18zM30 3.416L28.592 2L20 10.586V4h-2v10h10v-2h-6.586z\\\"/>\",\n  \"misuse\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2C8.3 2 2 8.3 2 16s6.3 14 14 14s14-6.3 14-14S23.7 2 16 2m5.4 21L16 17.6L10.6 23L9 21.4l5.4-5.4L9 10.6L10.6 9l5.4 5.4L21.4 9l1.6 1.6l-5.4 5.4l5.4 5.4z\\\"/>\",\n  \"mobile\": \"<path fill=\\\"currentColor\\\" d=\\\"M22 4H10a2 2 0 0 0-2 2v22a2 2 0 0 0 2 2h12a2.003 2.003 0 0 0 2-2V6a2 2 0 0 0-2-2m0 2v2H10V6ZM10 28V10h12v18Z\\\"/>\",\n  \"money\": \"<path fill=\\\"currentColor\\\" d=\\\"M2 22h28v2H2zm0 4h28v2H2zm22-16a2 2 0 1 0 2 2a2 2 0 0 0-2-2m-8 6a4 4 0 1 1 4-4a4.005 4.005 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2m-8 0a2 2 0 1 0 2 2a2 2 0 0 0-2-2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 20H4a2.005 2.005 0 0 1-2-2V6a2.005 2.005 0 0 1 2-2h24a2.005 2.005 0 0 1 2 2v12a2.003 2.003 0 0 1-2 2m0-14H4v12h24Z\\\"/>\",\n  \"moon\": \"<path fill=\\\"currentColor\\\" d=\\\"M13.503 5.414a15.076 15.076 0 0 0 11.593 18.194a11.1 11.1 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1 1 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.07 13.07 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3\\\"/>\",\n  \"notification\": \"<path fill=\\\"currentColor\\\" d=\\\"M28.707 19.293L26 16.586V13a10.014 10.014 0 0 0-9-9.95V1h-2v2.05A10.014 10.014 0 0 0 6 13v3.586l-2.707 2.707A1 1 0 0 0 3 20v3a1 1 0 0 0 1 1h7v.777a5.15 5.15 0 0 0 4.5 5.199A5.006 5.006 0 0 0 21 25v-1h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-.293-.707M19 25a3 3 0 0 1-6 0v-1h6Zm8-3H5v-1.586l2.707-2.707A1 1 0 0 0 8 17v-4a8 8 0 0 1 16 0v4a1 1 0 0 0 .293.707L27 20.414Z\\\"/>\",\n  \"notification-off\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 16.586V13a9.9 9.9 0 0 0-1.083-4.502L30 3.414L28.586 2L2 28.586L3.414 30l6-6H11v1a5 5 0 0 0 10 0v-1h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-.293-.707ZM19 25a3 3 0 0 1-6 0v-1h6Zm8-3H11.414l11.998-11.998A8 8 0 0 1 24 13v4a1 1 0 0 0 .293.707L27 20.414ZM7.707 17.707A1 1 0 0 0 8 17v-4a8.01 8.01 0 0 1 8-8a7.93 7.93 0 0 1 4.986 1.768l1.426-1.426A9.93 9.93 0 0 0 17 3.05V1h-2v2.05A10.014 10.014 0 0 0 6 13v3.586l-3 3L4.414 21Z\\\"/>\",\n  \"number-1\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 10v12zm1-1h-5v2h3v10h-3v2h8v-2h-3z\\\"/>\",\n  \"number-2\": \"<path fill=\\\"currentColor\\\" d=\\\"M20 23h-8v-6a2 2 0 0 1 2-2h4v-4h-6V9h6a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-4v4h6Z\\\"/>\",\n  \"number-3\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 9h-6v2h6v4h-4v2h4v4h-6v2h6a2 2 0 0 0 2-2V11a2 2 0 0 0-2-2\\\"/>\",\n  \"number-4\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 10v8zm1-1h-2v8h-3V9h-2v10h5v4h2v-4h1v-2h-1z\\\"/>\",\n  \"number-5\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 23h-6v-2h6v-4h-6V9h8v2h-6v4h4a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2\\\"/>\",\n  \"open-panel-left\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 4H4a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M4 6h6v20H4Zm24 20H12V6h16Z\\\"/>\",\n  \"overflow-menu-horizontal\": \"<circle cx=\\\"8\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><circle cx=\\\"24\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/>\",\n  \"overflow-menu-vertical\": \"<circle cx=\\\"16\\\" cy=\\\"8\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><circle cx=\\\"16\\\" cy=\\\"24\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/>\",\n  \"partnership\": \"<path fill=\\\"currentColor\\\" d=\\\"M8 9a4 4 0 1 1 4-4a4 4 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2m16 6a4 4 0 1 1 4-4a4 4 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2m2 27h-4a2 2 0 0 1-2-2v-7h2v7h4v-9h2v-6a1 1 0 0 0-1-1h-6.42L16 20l-4.58-8H5a1 1 0 0 0-1 1v6h2v9h4v-7h2v7a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-7a2 2 0 0 1-2-2v-6a3 3 0 0 1 3-3h7.58L16 16l3.42-6H27a3 3 0 0 1 3 3v6a2 2 0 0 1-2 2v7a2 2 0 0 1-2 2\\\"/>\",\n  \"password\": \"<path fill=\\\"currentColor\\\" d=\\\"M21 2a8.998 8.998 0 0 0-8.612 11.612L2 24v6h6l10.388-10.388A9 9 0 1 0 21 2m0 16a7 7 0 0 1-2.032-.302l-1.147-.348l-.847.847l-3.181 3.181L12.414 20L11 21.414l1.379 1.379l-1.586 1.586L9.414 23L8 24.414l1.379 1.379L7.172 28H4v-3.172l9.802-9.802l.848-.847l-.348-1.147A7 7 0 1 1 21 18\\\"/><circle cx=\\\"22\\\" cy=\\\"10\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/>\",\n  \"pause\": \"<path fill=\\\"currentColor\\\" d=\\\"M12 8v16H8V8zm0-2H8a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2m12 2v16h-4V8zm0-2h-4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2\\\"/>\",\n  \"pending\": \"<circle cx=\\\"9\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><circle cx=\\\"23\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><circle cx=\\\"16\\\" cy=\\\"16\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 30a14 14 0 1 1 14-14a14.016 14.016 0 0 1-14 14m0-26a12 12 0 1 0 12 12A12.014 12.014 0 0 0 16 4\\\"/>\",\n  \"phone\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 29h-.17C6.18 27.87 3.39 11.29 3 6.23A3 3 0 0 1 5.76 3h5.51a2 2 0 0 1 1.86 1.26L14.65 8a2 2 0 0 1-.44 2.16l-2.13 2.15a9.37 9.37 0 0 0 7.58 7.6l2.17-2.15a2 2 0 0 1 2.17-.41l3.77 1.51A2 2 0 0 1 29 20.72V26a3 3 0 0 1-3 3M6 5a1 1 0 0 0-1 1v.08C5.46 12 8.41 26 25.94 27a1 1 0 0 0 1.06-.94v-5.34l-3.77-1.51l-2.87 2.85l-.48-.06c-8.7-1.09-9.88-9.79-9.88-9.88l-.06-.48l2.84-2.87L11.28 5Z\\\"/>\",\n  \"phone-filled\": \"<path fill=\\\"currentColor\\\" d=\\\"m20.33 21.48l2.24-2.24a2.19 2.19 0 0 1 2.34-.48l2.73 1.09a2.18 2.18 0 0 1 1.36 2v5A2.17 2.17 0 0 1 26.72 29C7.59 27.81 3.73 11.61 3 5.41A2.17 2.17 0 0 1 5.17 3H10a2.16 2.16 0 0 1 2 1.36l1.09 2.73a2.16 2.16 0 0 1-.47 2.34l-2.24 2.24s1.29 8.73 9.95 9.81\\\"/>\",\n  \"phone-outgoing\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 29h-.2C6.2 27.9 3.4 11.3 3 6.2C2.9 4.6 4.1 3.1 5.8 3h5.5c.8 0 1.6.5 1.9 1.3L14.6 8c.3.7.1 1.6-.4 2.2l-2.1 2.1c.7 3.9 3.7 6.9 7.6 7.6l2.2-2.1c.6-.6 1.4-.7 2.2-.4l3.8 1.5c.7.3 1.2 1 1.2 1.9V26c-.1 1.7-1.4 3-3.1 3M6 5c-.6 0-1 .4-1 1v.1C5.5 12 8.4 26 25.9 27c.6 0 1-.4 1.1-.9v-5.4l-3.8-1.5l-2.9 2.9l-.4-.1c-8.7-1.1-9.9-9.8-9.9-9.9l-.1-.5l2.8-2.9L11.3 5z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M20 4v2h4.6L18 12.6l1.4 1.4L26 7.4V12h2V4z\\\"/>\",\n  \"phone-voice\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 13h-2a3.003 3.003 0 0 0-3-3V8a5.006 5.006 0 0 1 5 5\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 13h-2a7.01 7.01 0 0 0-7-7V4a9.01 9.01 0 0 1 9 9m-2 16h-.17C6.18 27.87 3.39 11.29 3 6.23a3 3 0 0 1 2.761-3.221Q5.88 3 6 3h5.27a2 2 0 0 1 1.86 1.26L14.65 8a2 2 0 0 1-.44 2.16l-2.13 2.15a9.36 9.36 0 0 0 7.58 7.6l2.17-2.15a2 2 0 0 1 2.17-.41l3.77 1.51A2 2 0 0 1 29 20.72V26a3 3 0 0 1-3 3M6 5a1 1 0 0 0-1.003.997q0 .042.003.083C5.46 12 8.41 26 25.94 27a1 1 0 0 0 1.058-.938L27 26v-5.28l-3.77-1.51l-2.87 2.85l-.48-.06c-8.7-1.09-9.88-9.79-9.88-9.88l-.06-.48l2.84-2.87L11.28 5Z\\\"/>\",\n  \"pin\": \"<path fill=\\\"currentColor\\\" d=\\\"M28.59 13.31L30 11.9L20 2l-1.31 1.42l1.18 1.18l-11.49 9.72l-1.72-1.71L5.25 14l5.66 5.68L2 28.58L3.41 30l8.91-8.91L18 26.75l1.39-1.42l-1.71-1.71l9.72-11.49ZM16.26 22.2L9.8 15.74L21.29 6L26 10.71Z\\\"/>\",\n  \"play\": \"<path fill=\\\"currentColor\\\" d=\\\"M7 28a1 1 0 0 1-1-1V5a1 1 0 0 1 1.482-.876l20 11a1 1 0 0 1 0 1.752l-20 11A1 1 0 0 1 7 28M8 6.69v18.62L24.925 16Z\\\"/>\",\n  \"play-filled-alt\": \"<path fill=\\\"currentColor\\\" d=\\\"M7 28a1 1 0 0 1-1-1V5a1 1 0 0 1 1.482-.876l20 11a1 1 0 0 1 0 1.752l-20 11A1 1 0 0 1 7 28\\\"/>\",\n  \"plug\": \"<path fill=\\\"currentColor\\\" d=\\\"M22 8h-1V2h-2v6h-6V2h-2v6h-1a2 2 0 0 0-2 2v6a8.01 8.01 0 0 0 7 7.93V30h2v-6.07A8.01 8.01 0 0 0 24 16v-6a2 2 0 0 0-2-2m0 8a6 6 0 0 1-12 0v-6h12Z\\\"/>\",\n  \"plug-filled\": \"<path fill=\\\"currentColor\\\" d=\\\"M22 8h-1V2h-2v6h-6V2h-2v6h-1a2 2 0 0 0-2 2v6a8.01 8.01 0 0 0 7 7.93V30h2v-6.07A8.01 8.01 0 0 0 24 16v-6a2 2 0 0 0-2-2\\\"/>\",\n  \"policy\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 18a6 6 0 1 0-10 4.46V30l4-1.893L28 30v-7.54A5.98 5.98 0 0 0 30 18m-4 8.84l-2-.947l-2 .947v-3.19a5.9 5.9 0 0 0 4 0ZM24 22a4 4 0 1 1 4-4a4.005 4.005 0 0 1-4 4M9 14h7v2H9zm0-6h10v2H9z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M6 30a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4h-2V4H6v24h10v2Z\\\"/>\",\n  \"power\": \"<path fill=\\\"currentColor\\\" d=\\\"m22.5 5.74l-1 1.73a11 11 0 1 1-11 0l-1-1.73a13 13 0 1 0 13 0\\\"/><path fill=\\\"currentColor\\\" d=\\\"M15 2h2v14h-2z\\\"/>\",\n  \"printer\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 9h-3V3H7v6H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h3v6h18v-6h3a2 2 0 0 0 2-2V11a2 2 0 0 0-2-2M9 5h14v4H9Zm14 22H9V17h14Zm5-6h-3v-6H7v6H4V11h24Z\\\"/>\",\n  \"purchase\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 6H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2m0 2v3H4V8ZM4 24V13h24v11Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M6 20h10v2H6z\\\"/>\",\n  \"qr-code\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 28v-2h2v2zm-6-4v-2h2v2zm0 6h4v-2h-2v-2h-2zm8-4v-4h2v4zm2 0h2v4h-4v-2h2zm-2-6v-2h4v4h-2v-2zm-2 0h-2v4h-2v2h4zm-6 0v-2h4v2zM6 22h4v4H6z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M14 30H2V18h12ZM4 28h8v-8H4ZM22 6h4v4h-4z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M30 14H18V2h12Zm-10-2h8V4h-8ZM6 6h4v4H6z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M14 14H2V2h12ZM4 12h8V4H4Z\\\"/>\",\n  \"radio\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 10h-4V2h-2v8h-9V8h-2v2H8V8H6v2H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V12a2 2 0 0 0-2-2M4 28V12h24v16Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10 26a4 4 0 1 1 4-4a4 4 0 0 1-4 4m0-6a2 2 0 1 0 2 2a2 2 0 0 0-2-2m-3-6h6v2H7zm10 2h9v2h-9zm0 4h9v2h-9zm0 4h9v2h-9z\\\"/>\",\n  \"radio-button\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 26a12 12 0 1 1 12-12a12 12 0 0 1-12 12\\\"/>\",\n  \"radio-button-checked\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 26a12 12 0 1 1 12-12a12 12 0 0 1-12 12\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 10a6 6 0 1 0 6 6a6 6 0 0 0-6-6\\\"/>\",\n  \"receipt\": \"<path fill=\\\"currentColor\\\" d=\\\"M21 16h2v2h-2zM9 16h8v2H9zm12-4h2v2h-2zM9 12h8v2H9zm0-4h14v2H9z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M25 2H7a2 2 0 0 0-2 2v25a1 1 0 0 0 1 1h1a1 1 0 0 0 .8-.4l2.2-2.933l2.2 2.933a1.035 1.035 0 0 0 1.6 0l2.2-2.933l2.2 2.933a1.035 1.035 0 0 0 1.6 0l2.2-2.933l2.2 2.933a1 1 0 0 0 .8.4h1a1 1 0 0 0 1-1V4a2 2 0 0 0-2-2m0 25.333L22.8 24.4a1.035 1.035 0 0 0-1.6 0L19 27.333L16.8 24.4a1.035 1.035 0 0 0-1.6 0L13 27.333L10.8 24.4a1.035 1.035 0 0 0-1.6 0L7 27.333V4h18Z\\\"/>\",\n  \"recently-viewed\": \"<path fill=\\\"currentColor\\\" d=\\\"M20.59 22L15 16.41V7h2v8.58l5 5.01z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 2A13.94 13.94 0 0 0 6 6.23V2H4v8h8V8H7.08A12 12 0 1 1 4 16H2A14 14 0 1 0 16 2\\\"/>\",\n  \"renew\": \"<path fill=\\\"currentColor\\\" d=\\\"M12 10H6.78A11 11 0 0 1 27 16h2A13 13 0 0 0 6 7.68V4H4v8h8Zm8 12h5.22A11 11 0 0 1 5 16H3a13 13 0 0 0 23 8.32V28h2v-8h-8Z\\\"/>\",\n  \"repeat\": \"<path fill=\\\"currentColor\\\" d=\\\"M6 6h20.172l-3.586-3.586L24 1l6 6l-6 6l-1.414-1.414L26.172 8H6v7H4V8a2 2 0 0 1 2-2m3.414 14.414L5.828 24H26v-7h2v7a2 2 0 0 1-2 2H5.828l3.586 3.586L8 31l-6-6l6-6Z\\\"/>\",\n  \"report\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 18h8v2h-8zm0-5h12v2H10zm0 10h5v2h-5z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M25 5h-3V4a2 2 0 0 0-2-2h-8a2 2 0 0 0-2 2v1H7a2 2 0 0 0-2 2v21a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2M12 4h8v4h-8Zm13 24H7V7h3v3h12V7h3Z\\\"/>\",\n  \"report-data\": \"<path fill=\\\"currentColor\\\" d=\\\"M15 20h2v4h-2zm5-2h2v6h-2zm-10-4h2v10h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M25 5h-3V4a2 2 0 0 0-2-2h-8a2 2 0 0 0-2 2v1H7a2 2 0 0 0-2 2v21a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2M12 4h8v4h-8Zm13 24H7V7h3v3h12V7h3Z\\\"/>\",\n  \"reset\": \"<path fill=\\\"currentColor\\\" d=\\\"M18 28A12 12 0 1 0 6 16v6.2l-3.6-3.6L1 20l6 6l6-6l-1.4-1.4L8 22.2V16a10 10 0 1 1 10 10Z\\\"/>\",\n  \"restart\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 18A10 10 0 1 1 16 8h6.182l-3.584 3.585L20 13l6-6l-6-6l-1.402 1.414L22.185 6H16a12 12 0 1 0 12 12Z\\\"/>\",\n  \"restaurant\": \"<path fill=\\\"currentColor\\\" d=\\\"M9 2h2v10H9z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M14 11a4 4 0 0 1-8 0V2H4v9a6 6 0 0 0 5 5.91V30h2V16.91A6 6 0 0 0 16 11V2h-2Zm8-9h-1v28h2V20h3a2 2 0 0 0 2-2V8a5.78 5.78 0 0 0-6-6m4 16h-3V4.09c2.88.56 3 3.54 3 3.91Z\\\"/>\",\n  \"row-collapse\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 20H6a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2m0 6H6v-4h20ZM17 7.828l2.586 2.586L21 9l-5-5l-5 5l1.414 1.414L15 7.828V14H4v2h24v-2H17z\\\"/>\",\n  \"row-expand\": \"<path fill=\\\"currentColor\\\" d=\\\"M4 18h11v6.172l-2.586-2.586L11 23l5 5l5-5l-1.414-1.414L17 24.172V18h11v-2H4zM26 4H6a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2m0 6H6V6h20Z\\\"/>\",\n  \"save\": \"<path fill=\\\"currentColor\\\" d=\\\"m27.71 9.29l-5-5A1 1 0 0 0 22 4H6a2 2 0 0 0-2 2v20a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2V10a1 1 0 0 0-.29-.71M12 6h8v4h-8Zm8 20h-8v-8h8Zm2 0v-8a2 2 0 0 0-2-2h-8a2 2 0 0 0-2 2v8H6V6h4v4a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V6.41l4 4V26Z\\\"/>\",\n  \"screen\": \"<path fill=\\\"currentColor\\\" d=\\\"M28 4H4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h8v4H8v2h16v-2h-4v-4h8a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2M18 28h-4v-4h4Zm10-6H4V6h24Z\\\"/>\",\n  \"search\": \"<path fill=\\\"currentColor\\\" d=\\\"m29 27.586l-7.552-7.552a11.018 11.018 0 1 0-1.414 1.414L27.586 29ZM4 13a9 9 0 1 1 9 9a9.01 9.01 0 0 1-9-9\\\"/>\",\n  \"security\": \"<path fill=\\\"currentColor\\\" d=\\\"M14 16.59L11.41 14L10 15.41l4 4l8-8L20.59 10z\\\"/><path fill=\\\"currentColor\\\" d=\\\"m16 30l-6.176-3.293A10.98 10.98 0 0 1 4 17V4a2 2 0 0 1 2-2h20a2 2 0 0 1 2 2v13a10.98 10.98 0 0 1-5.824 9.707ZM6 4v13a8.99 8.99 0 0 0 4.766 7.942L16 27.733l5.234-2.79A8.99 8.99 0 0 0 26 17V4Z\\\"/>\",\n  \"send\": \"<path fill=\\\"currentColor\\\" d=\\\"m27.45 15.11l-22-11a1 1 0 0 0-1.08.12a1 1 0 0 0-.33 1L7 16L4 26.74A1 1 0 0 0 5 28a1 1 0 0 0 .45-.11l22-11a1 1 0 0 0 0-1.78m-20.9 10L8.76 17H18v-2H8.76L6.55 6.89L24.76 16Z\\\"/>\",\n  \"send-alt\": \"<path fill=\\\"currentColor\\\" d=\\\"M27.71 4.29a1 1 0 0 0-1.05-.23l-22 8a1 1 0 0 0 0 1.87l9.6 3.84l3.84 9.6a1 1 0 0 0 .9.63a1 1 0 0 0 .92-.66l8-22a1 1 0 0 0-.21-1.05M19 24.2l-2.79-7L21 12.41L19.59 11l-4.83 4.83L7.8 13l17.53-6.33Z\\\"/>\",\n  \"settings\": \"<path fill=\\\"currentColor\\\" d=\\\"M27 16.76v-1.53l1.92-1.68A2 2 0 0 0 29.3 11l-2.36-4a2 2 0 0 0-1.73-1a2 2 0 0 0-.64.1l-2.43.82a11 11 0 0 0-1.31-.75l-.51-2.52a2 2 0 0 0-2-1.61h-4.68a2 2 0 0 0-2 1.61l-.51 2.52a11.5 11.5 0 0 0-1.32.75l-2.38-.86A2 2 0 0 0 6.79 6a2 2 0 0 0-1.73 1L2.7 11a2 2 0 0 0 .41 2.51L5 15.24v1.53l-1.89 1.68A2 2 0 0 0 2.7 21l2.36 4a2 2 0 0 0 1.73 1a2 2 0 0 0 .64-.1l2.43-.82a11 11 0 0 0 1.31.75l.51 2.52a2 2 0 0 0 2 1.61h4.72a2 2 0 0 0 2-1.61l.51-2.52a11.5 11.5 0 0 0 1.32-.75l2.42.82a2 2 0 0 0 .64.1a2 2 0 0 0 1.73-1l2.28-4a2 2 0 0 0-.41-2.51ZM25.21 24l-3.43-1.16a8.9 8.9 0 0 1-2.71 1.57L18.36 28h-4.72l-.71-3.55a9.4 9.4 0 0 1-2.7-1.57L6.79 24l-2.36-4l2.72-2.4a8.9 8.9 0 0 1 0-3.13L4.43 12l2.36-4l3.43 1.16a8.9 8.9 0 0 1 2.71-1.57L13.64 4h4.72l.71 3.55a9.4 9.4 0 0 1 2.7 1.57L25.21 8l2.36 4l-2.72 2.4a8.9 8.9 0 0 1 0 3.13L27.57 20Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 22a6 6 0 1 1 6-6a5.94 5.94 0 0 1-6 6m0-10a3.91 3.91 0 0 0-4 4a3.91 3.91 0 0 0 4 4a3.91 3.91 0 0 0 4-4a3.91 3.91 0 0 0-4-4\\\"/>\",\n  \"settings-adjust\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 8h-4.1c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2v2h14.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30zm-9 4c-1.7 0-3-1.3-3-3s1.3-3 3-3s3 1.3 3 3s-1.3 3-3 3M2 24h4.1c.5 2.3 2.5 4 4.9 4s4.4-1.7 4.9-4H30v-2H15.9c-.5-2.3-2.5-4-4.9-4s-4.4 1.7-4.9 4H2zm9-4c1.7 0 3 1.3 3 3s-1.3 3-3 3s-3-1.3-3-3s1.3-3 3-3\\\"/>\",\n  \"shield-alert\": \"<path fill=\\\"currentColor\\\" d=\\\"M17 18h-2V7h2zm-2.5 4.5a1.5 1.5 0 1 0 3 0a1.5 1.5 0 0 0-3 0m1.979 7.378l5.786-3.156C25.803 24.792 28 21.067 28 17V4c0-1.103-.897-2-2-2H6c-1.103 0-2 .897-2 2v13c0 4.067 2.198 7.792 5.735 9.722l5.786 3.156a1 1 0 0 0 .958 0M26 4v13c0 3.335-1.798 6.387-4.692 7.966L16 27.86l-5.307-2.895C7.798 23.386 6 20.335 6 17V4z\\\"/>\",\n  \"signal-strength\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 6h2v20h-2zm-8 5h2v15h-2zm-7 5h2v10h-2zm-7 4h2v6H4z\\\"/>\",\n  \"skip-forward\": \"<path fill=\\\"currentColor\\\" d=\\\"M5 28a1 1 0 0 1-1-1V5a1 1 0 0 1 .5-.87a1 1 0 0 1 1 0l19 11a1 1 0 0 1 0 1.74l-19 11A1 1 0 0 1 5 28M6 6.73v18.54L22 16ZM28 4h2v24h-2z\\\"/>\",\n  \"sort-ascending\": \"<path fill=\\\"currentColor\\\" d=\\\"m18 22l1.414-1.414L23 24.172V4h2v20.172l3.586-3.586L30 22l-6 6zM2 18h14v2H2zm4-6h10v2H6zm4-6h6v2h-6z\\\"/>\",\n  \"sort-descending\": \"<path fill=\\\"currentColor\\\" d=\\\"m18 22l1.414-1.414L23 24.172V4h2v20.172l3.586-3.586L30 22l-6 6zM2 6h14v2H2zm4 6h10v2H6zm4 6h6v2h-6z\\\"/>\",\n  \"star\": \"<path fill=\\\"currentColor\\\" d=\\\"m16 6.52l2.76 5.58l.46 1l1 .15l6.16.89l-4.38 4.3l-.75.73l.18 1l1.05 6.13l-5.51-2.89L16 23l-.93.49l-5.51 2.85l1-6.13l.18-1l-.74-.77l-4.42-4.35l6.16-.89l1-.15l.46-1zM16 2l-4.55 9.22l-10.17 1.47l7.36 7.18L6.9 30l9.1-4.78L25.1 30l-1.74-10.13l7.36-7.17l-10.17-1.48Z\\\"/>\",\n  \"star-filled\": \"<path fill=\\\"currentColor\\\" d=\\\"m16 2l-4.55 9.22l-10.17 1.47l7.36 7.18L6.9 30l9.1-4.78L25.1 30l-1.74-10.13l7.36-7.17l-10.17-1.48Z\\\"/>\",\n  \"stop\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 8v16H8V8zm0-2H8a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2\\\"/>\",\n  \"subtract\": \"<path fill=\\\"currentColor\\\" d=\\\"M8 15h16v2H8z\\\"/>\",\n  \"subtract-alt\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 4c6.6 0 12 5.4 12 12s-5.4 12-12 12S4 22.6 4 16S9.4 4 16 4m0-2C8.3 2 2 8.3 2 16s6.3 14 14 14s14-6.3 14-14S23.7 2 16 2\\\"/><path fill=\\\"currentColor\\\" d=\\\"M8 15h16v2H8z\\\"/>\",\n  \"sun\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6M5.394 6.813L6.81 5.399l3.505 3.506L8.9 10.319zM2 15.005h5v2H2zm3.394 10.193L8.9 21.692l1.414 1.414l-3.505 3.506zM15 25.005h2v5h-2zm6.687-1.9l1.414-1.414l3.506 3.506l-1.414 1.414zm3.313-8.1h5v2h-5zm-3.313-6.101l3.506-3.506l1.414 1.414l-3.506 3.506zM15 2.005h2v5h-2z\\\"/>\",\n  \"tablet\": \"<path fill=\\\"currentColor\\\" d=\\\"M19 24v2h-6v-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M25 30H7a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h18a2 2 0 0 1 2 2v24a2.003 2.003 0 0 1-2 2M7 4v24h18V4Z\\\"/>\",\n  \"tag\": \"<path fill=\\\"currentColor\\\" d=\\\"M10 14a4 4 0 1 1 4-4a4.005 4.005 0 0 1-4 4m0-6a2 2 0 1 0 1.998 2.004A2 2 0 0 0 10 8\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16.644 29.415L2.586 15.355A2 2 0 0 1 2 13.942V4a2 2 0 0 1 2-2h9.941a2 2 0 0 1 1.414.586l14.06 14.058a2 2 0 0 1 0 2.828l-9.943 9.943a2 2 0 0 1-2.828 0M4 4v9.942L18.058 28L28 18.058L13.942 4Z\\\"/>\",\n  \"task\": \"<path fill=\\\"currentColor\\\" d=\\\"m14 20.18l-3.59-3.59L9 18l5 5l9-9l-1.41-1.42z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M25 5h-3V4a2 2 0 0 0-2-2h-8a2 2 0 0 0-2 2v1H7a2 2 0 0 0-2 2v21a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2M12 4h8v4h-8Zm13 24H7V7h3v3h12V7h3Z\\\"/>\",\n  \"thumbs-down\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 16V9a7.01 7.01 0 0 0-7-7H2v14h6.465l3.577 5.366l.846 5.917A2.01 2.01 0 0 0 14.868 29H17a3.003 3.003 0 0 0 3-3v-6h6a4.005 4.005 0 0 0 4-4M8 14H4V4h4Zm20 2a2.003 2.003 0 0 1-2 2h-8v8a1 1 0 0 1-1 1h-2.133l-.91-6.366L10 14.697V4h13a5.006 5.006 0 0 1 5 5Z\\\"/>\",\n  \"thumbs-up\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 12h-6V6a3.003 3.003 0 0 0-3-3h-2.133a2.01 2.01 0 0 0-1.98 1.717l-.845 5.917L8.465 16H2v14h21a7.01 7.01 0 0 0 7-7v-7a4.005 4.005 0 0 0-4-4M8 28H4V18h4Zm20-5a5.006 5.006 0 0 1-5 5H10V17.303l3.958-5.937l.91-6.366H17a1 1 0 0 1 1 1v8h8a2.003 2.003 0 0 1 2 2Z\\\"/>\",\n  \"ticket\": \"<path fill=\\\"currentColor\\\" d=\\\"M29 14a1 1 0 0 0 1-1V8a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v5a1 1 0 0 0 1 1a2 2 0 0 1 0 4a1 1 0 0 0-1 1v5a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2v-5a1 1 0 0 0-1-1a2 2 0 0 1 0-4m-1 5.87V24h-7v-3h-2v3H4v-4.13a4 4 0 0 0 0-7.74V8h15v3h2V8h7v4.13a4 4 0 0 0 0 7.74\\\"/><path fill=\\\"currentColor\\\" d=\\\"M19 13h2v6h-2z\\\"/>\",\n  \"time\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 30a14 14 0 1 1 14-14a14 14 0 0 1-14 14m0-26a12 12 0 1 0 12 12A12 12 0 0 0 16 4\\\"/><path fill=\\\"currentColor\\\" d=\\\"M20.59 22L15 16.41V7h2v8.58l5 5.01z\\\"/>\",\n  \"time-plot\": \"<path fill=\\\"currentColor\\\" d=\\\"M23.586 13L21 10.414V6h2v3.586l2 2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M22 18a8 8 0 1 1 8-8a8.01 8.01 0 0 1-8 8m0-14a6 6 0 1 0 6 6a6.007 6.007 0 0 0-6-6\\\"/><path fill=\\\"currentColor\\\" d=\\\"m8.63 18l7 6H30v-2H16.37l-7-6H4V2H2v26a2.003 2.003 0 0 0 2 2h26v-2H4V18Z\\\"/>\",\n  \"touch-1\": \"<path fill=\\\"currentColor\\\" d=\\\"M20 8h-2A5 5 0 0 0 8 8H6a7 7 0 0 1 14 0\\\"/><path fill=\\\"currentColor\\\" d=\\\"M25 15a2.94 2.94 0 0 0-1.47.4A3 3 0 0 0 21 14a2.94 2.94 0 0 0-1.47.4A3 3 0 0 0 16 13.18V8a3 3 0 0 0-6 0v11.1l-2.23-1.52A2.93 2.93 0 0 0 6 17a3 3 0 0 0-2.12 5.13l8 7.3A6.16 6.16 0 0 0 16 31h5a7 7 0 0 0 7-7v-6a3 3 0 0 0-3-3m1 9a5 5 0 0 1-5 5h-5a4.17 4.17 0 0 1-2.76-1l-7.95-7.3A1 1 0 0 1 5 20a1 1 0 0 1 1.6-.8l5.4 3.7V8a1 1 0 0 1 2 0v11h2v-3a1 1 0 0 1 2 0v3h2v-2a1 1 0 0 1 2 0v2h2v-1a1 1 0 0 1 2 0Z\\\"/>\",\n  \"touch-interaction\": \"<path fill=\\\"currentColor\\\" d=\\\"M26 21v-1a1 1 0 0 1 2 0v10h2V20a3.003 3.003 0 0 0-3-3a2.96 2.96 0 0 0-1.47.401a2.954 2.954 0 0 0-4-1A3 3 0 0 0 19 15a3 3 0 0 0-1 .185V10a3 3 0 0 0-6 0v11.105l-2.235-1.53v.001a2.999 2.999 0 0 0-3.882 4.55L12.323 30l1.347-1.478l-6.378-5.818A1 1 0 0 1 7 22a1 1 0 0 1 1.6-.8l5.4 3.695V10a1 1 0 0 1 2 0v11h2v-3a1 1 0 0 1 2 0v3h2v-2a1 1 0 0 1 2 0v2Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 12h-6v-2h6V4H4v6h4v2H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h24a2 2 0 0 1 2 2v6a2 2 0 0 1-2 2\\\"/>\",\n  \"translate\": \"<path fill=\\\"currentColor\\\" d=\\\"M27.85 29H30l-6-15h-2.35l-6 15h2.15l1.6-4h6.85Zm-7.65-6l2.62-6.56L25.45 23ZM18 7V5h-7V2H9v3H2v2h10.74a14.7 14.7 0 0 1-3.19 6.18A13.5 13.5 0 0 1 7.26 9h-2.1a16.5 16.5 0 0 0 3 5.58A16.8 16.8 0 0 1 3 18l.75 1.86A18.5 18.5 0 0 0 9.53 16a16.9 16.9 0 0 0 5.76 3.84L16 18a14.5 14.5 0 0 1-5.12-3.37A17.64 17.64 0 0 0 14.8 7Z\\\"/>\",\n  \"trash-can\": \"<path fill=\\\"currentColor\\\" d=\\\"M12 12h2v12h-2zm6 0h2v12h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M4 6v2h2v20a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V8h2V6Zm4 22V8h16v20Zm4-26h8v2h-8z\\\"/>\",\n  \"undo\": \"<path fill=\\\"currentColor\\\" d=\\\"M20 10H7.815l3.587-3.586L10 5l-6 6l6 6l1.402-1.415L7.818 12H20a6 6 0 0 1 0 12h-8v2h8a8 8 0 0 0 0-16\\\"/>\",\n  \"unlink\": \"<path fill=\\\"currentColor\\\" d=\\\"m3.584 5.002l1.414-1.414l3.416 3.414L7 8.417zm19.997 19.99l1.415-1.414l3.414 3.416l-1.414 1.414zM11 2h2v4h-2zm-9 9h4v2H2zm24 8h4v2h-4zm-7 7h2v4h-2zm-2.42-4.93l-3.71 3.72a4 4 0 1 1-5.66-5.66l3.72-3.72L9.51 14L5.8 17.72a6 6 0 0 0-.06 8.54A6 6 0 0 0 10 28a6.07 6.07 0 0 0 4.32-1.8L18 22.49Zm-1.17-10.14l3.72-3.72a4 4 0 1 1 5.66 5.66l-3.72 3.72L22.49 18l3.71-3.72a6 6 0 0 0 .06-8.54A6 6 0 0 0 22 4a6.07 6.07 0 0 0-4.32 1.8L14 9.51Z\\\"/>\",\n  \"unlocked\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 14H12V8a4 4 0 0 1 8 0h2a6 6 0 0 0-12 0v6H8a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V16a2 2 0 0 0-2-2m0 14H8V16h16Z\\\"/>\",\n  \"upload\": \"<path fill=\\\"currentColor\\\" d=\\\"m6 18l1.41 1.41L15 11.83V30h2V11.83l7.59 7.58L26 18L16 8zM6 8V4h20v4h2V4a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v4Z\\\"/>\",\n  \"user\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 4a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7m10 28h-2v-5a5 5 0 0 0-5-5h-6a5 5 0 0 0-5 5v5H6v-5a7 7 0 0 1 7-7h6a7 7 0 0 1 7 7Z\\\"/>\",\n  \"user-admin\": \"<path fill=\\\"currentColor\\\" d=\\\"M12 4a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7m10 28h-2v-5a5 5 0 0 0-5-5H9a5 5 0 0 0-5 5v5H2v-5a7 7 0 0 1 7-7h6a7 7 0 0 1 7 7Zm3-13.82l-2.59-2.59L21 15l4 4l7-7l-1.41-1.41z\\\"/>\",\n  \"user-avatar\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 8a5 5 0 1 0 5 5a5 5 0 0 0-5-5m0 8a3 3 0 1 1 3-3a3.003 3.003 0 0 1-3 3\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14.016 14.016 0 0 0 16 2m-6 24.377V25a3.003 3.003 0 0 1 3-3h6a3.003 3.003 0 0 1 3 3v1.377a11.9 11.9 0 0 1-12 0m13.993-1.451A5 5 0 0 0 19 20h-6a5 5 0 0 0-4.992 4.926a12 12 0 1 1 15.985 0\\\"/>\",\n  \"user-avatar-filled\": \"<path fill=\\\"none\\\" d=\\\"M8.007 24.93A4.996 4.996 0 0 1 13 20h6a4.996 4.996 0 0 1 4.993 4.93a11.94 11.94 0 0 1-15.986 0M20.5 12.5A4.5 4.5 0 1 1 16 8a4.5 4.5 0 0 1 4.5 4.5\\\"/><path fill=\\\"currentColor\\\" d=\\\"M26.749 24.93A13.99 13.99 0 1 0 2 16a13.9 13.9 0 0 0 3.251 8.93l-.02.017c.07.084.15.156.222.239c.09.103.187.2.28.3q.418.457.87.87q.14.124.28.242q.48.415.99.782c.044.03.084.069.128.1v-.012a13.9 13.9 0 0 0 16 0v.012c.044-.031.083-.07.128-.1q.51-.368.99-.782q.14-.119.28-.242q.451-.413.87-.87c.093-.1.189-.197.28-.3c.071-.083.152-.155.222-.24ZM16 8a4.5 4.5 0 1 1-4.5 4.5A4.5 4.5 0 0 1 16 8M8.007 24.93A4.996 4.996 0 0 1 13 20h6a4.996 4.996 0 0 1 4.993 4.93a11.94 11.94 0 0 1-15.986 0\\\"/>\",\n  \"user-certification\": \"<path fill=\\\"currentColor\\\" d=\\\"m25 10l1.593 3l3.407.414l-2.5 2.253L28 19l-3-1.875L22 19l.5-3.333l-2.5-2.253L23.5 13zm-3 20h-2v-5a5.006 5.006 0 0 0-5-5H9a5.006 5.006 0 0 0-5 5v5H2v-5a7.01 7.01 0 0 1 7-7h6a7.01 7.01 0 0 1 7 7ZM12 4a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7\\\"/>\",\n  \"user-follow\": \"<path fill=\\\"currentColor\\\" d=\\\"M32 14h-4v-4h-2v4h-4v2h4v4h2v-4h4zM12 4a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7m10 28h-2v-5a5 5 0 0 0-5-5H9a5 5 0 0 0-5 5v5H2v-5a7 7 0 0 1 7-7h6a7 7 0 0 1 7 7Z\\\"/>\",\n  \"user-identification\": \"<path fill=\\\"currentColor\\\" d=\\\"M22 11h4a1 1 0 0 1 1 1v2h-6v-2a1 1 0 0 1 1-1\\\"/><circle cx=\\\"24\\\" cy=\\\"8\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"M30 18H18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2.003 2.003 0 0 1-2 2M18 4v12h12.001L30 4Zm-3 26h-2v-4a2.947 2.947 0 0 0-3-3H6a2.947 2.947 0 0 0-3 3v4H1v-4a4.95 4.95 0 0 1 5-5h4a4.95 4.95 0 0 1 5 5ZM8 11a3 3 0 0 1 0 6a3 3 0 0 1 0-6m0-2a5 5 0 0 0 0 10A5 5 0 0 0 8 9\\\"/>\",\n  \"user-multiple\": \"<path fill=\\\"currentColor\\\" d=\\\"M30 30h-2v-5a5.006 5.006 0 0 0-5-5v-2a7.01 7.01 0 0 1 7 7Zm-8 0h-2v-5a5.006 5.006 0 0 0-5-5H9a5.006 5.006 0 0 0-5 5v5H2v-5a7.01 7.01 0 0 1 7-7h6a7.01 7.01 0 0 1 7 7ZM20 2v2a5 5 0 0 1 0 10v2a7 7 0 0 0 0-14m-8 2a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7\\\"/>\",\n  \"user-profile\": \"<path fill=\\\"currentColor\\\" d=\\\"M12 4a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7m10 28h-2v-5a5 5 0 0 0-5-5H9a5 5 0 0 0-5 5v5H2v-5a7 7 0 0 1 7-7h6a7 7 0 0 1 7 7Zm0-26h10v2H22zm0 5h10v2H22zm0 5h7v2h-7z\\\"/>\",\n  \"user-role\": \"<path fill=\\\"currentColor\\\" d=\\\"M28.07 21L22 15l6.07-6l1.43 1.41L24.86 15l4.64 4.59zM22 30h-2v-5a5 5 0 0 0-5-5H9a5 5 0 0 0-5 5v5H2v-5a7 7 0 0 1 7-7h6a7 7 0 0 1 7 7ZM12 4a5 5 0 1 1-5 5a5 5 0 0 1 5-5m0-2a7 7 0 1 0 7 7a7 7 0 0 0-7-7\\\"/>\",\n  \"video\": \"<path fill=\\\"currentColor\\\" d=\\\"M21 26H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h17a2 2 0 0 1 2 2v4.06l5.42-3.87A1 1 0 0 1 30 9v14a1 1 0 0 1-1.58.81L23 19.94V24a2 2 0 0 1-2 2M4 8v16h17v-6a1 1 0 0 1 1.58-.81L28 21.06V10.94l-5.42 3.87A1 1 0 0 1 21 14V8Z\\\"/>\",\n  \"view\": \"<path fill=\\\"currentColor\\\" d=\\\"M30.94 15.66A16.69 16.69 0 0 0 16 5A16.69 16.69 0 0 0 1.06 15.66a1 1 0 0 0 0 .68A16.69 16.69 0 0 0 16 27a16.69 16.69 0 0 0 14.94-10.66a1 1 0 0 0 0-.68M16 25c-5.3 0-10.9-3.93-12.93-9C5.1 10.93 10.7 7 16 7s10.9 3.93 12.93 9C26.9 21.07 21.3 25 16 25\\\"/><path fill=\\\"currentColor\\\" d=\\\"M16 10a6 6 0 1 0 6 6a6 6 0 0 0-6-6m0 10a4 4 0 1 1 4-4a4 4 0 0 1-4 4\\\"/>\",\n  \"view-off\": \"<path fill=\\\"currentColor\\\" d=\\\"m5.24 22.51l1.43-1.42A14.06 14.06 0 0 1 3.07 16C5.1 10.93 10.7 7 16 7a12.4 12.4 0 0 1 4 .72l1.55-1.56A14.7 14.7 0 0 0 16 5A16.69 16.69 0 0 0 1.06 15.66a1 1 0 0 0 0 .68a16 16 0 0 0 4.18 6.17\\\"/><path fill=\\\"currentColor\\\" d=\\\"M12 15.73a4 4 0 0 1 3.7-3.7l1.81-1.82a6 6 0 0 0-7.33 7.33Zm18.94-.07a16.4 16.4 0 0 0-5.74-7.44L30 3.41L28.59 2L2 28.59L3.41 30l5.1-5.1A15.3 15.3 0 0 0 16 27a16.69 16.69 0 0 0 14.94-10.66a1 1 0 0 0 0-.68M20 16a4 4 0 0 1-6 3.44L19.44 14a4 4 0 0 1 .56 2m-4 9a13.05 13.05 0 0 1-6-1.58l2.54-2.54a6 6 0 0 0 8.35-8.35l2.87-2.87A14.54 14.54 0 0 1 28.93 16C26.9 21.07 21.3 25 16 25\\\"/>\",\n  \"wallet\": \"<path fill=\\\"currentColor\\\" d=\\\"M22 17h2v2h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M28 8H4V5h22V3H4a2 2 0 0 0-2 2v21a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2M4 26V10h24v3h-8a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h8v3Zm24-11v6h-8v-6Z\\\"/>\",\n  \"warning\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2a14 14 0 1 0 14 14A14 14 0 0 0 16 2m0 26a12 12 0 1 1 12-12a12 12 0 0 1-12 12\\\"/><path fill=\\\"currentColor\\\" d=\\\"M15 8h2v11h-2zm1 14a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 0 0 16 22\\\"/>\",\n  \"warning-alt\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 23a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 0 0 16 23m-1-11h2v9h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M29 30H3a1 1 0 0 1-.887-1.461l13-25a1 1 0 0 1 1.774 0l13 25A1 1 0 0 1 29 30M4.65 28h22.7l.001-.003L16.002 6.17h-.004L4.648 27.997Z\\\"/>\",\n  \"warning-filled\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 2C8.3 2 2 8.3 2 16s6.3 14 14 14s14-6.3 14-14S23.7 2 16 2m-1.1 6h2.2v11h-2.2zM16 25c-.8 0-1.5-.7-1.5-1.5S15.2 22 16 22s1.5.7 1.5 1.5S16.8 25 16 25\\\"/>\",\n  \"warning-hex\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 21a1.5 1.5 0 1 0 1.5 1.5A1.5 1.5 0 0 0 16 21M15 8h2v10h-2z\\\"/><path fill=\\\"currentColor\\\" d=\\\"M23 29H9a1 1 0 0 1-.864-.496l-7-12a1 1 0 0 1 0-1.008l7-12A1 1 0 0 1 9 3h14a1 1 0 0 1 .864.496l7 12a1 1 0 0 1 0 1.008l-7 12A1 1 0 0 1 23 29M9.574 27h12.852l6.416-11l-6.416-11H9.574L3.158 16Z\\\"/>\",\n  \"webhook\": \"<path fill=\\\"currentColor\\\" d=\\\"M24 26a3 3 0 1 0-2.816-4H13v1a5 5 0 1 1-5-5v-2a7 7 0 1 0 6.929 8h6.255A2.99 2.99 0 0 0 24 26\\\"/><path fill=\\\"currentColor\\\" d=\\\"M24 16a7 7 0 0 0-2.57.487l-3.166-5.54a3.047 3.047 0 1 0-1.732 1l4.119 7.208l.868-.498a5 5 0 1 1-1.85 6.842l-1.732 1.002A7 7 0 1 0 24 16\\\"/><path fill=\\\"currentColor\\\" d=\\\"M8.532 20.054a3.03 3.03 0 1 0 1.733.998l3.625-6.344l.498-.868l-.868-.497a5 5 0 1 1 6.812-1.844l1.731 1.002a7 7 0 1 0-10.346 2.036c-.457.742-1.102 1.871-2.073 3.572Z\\\"/>\",\n  \"wifi\": \"<circle cx=\\\"16\\\" cy=\\\"25\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"m10.47 19.233l1.414 1.413a5.97 5.97 0 0 1 8.223-.009l1.413-1.413a7.963 7.963 0 0 0-11.05.01Z\\\"/><path fill=\\\"currentColor\\\" d=\\\"m6.229 14.993l1.414 1.413a11.955 11.955 0 0 1 16.704-.01l1.413-1.413a13.95 13.95 0 0 0-19.531.01\\\"/><path fill=\\\"currentColor\\\" d=\\\"M30 10.741a19.94 19.94 0 0 0-28 0v.023l1.404 1.404a17.934 17.934 0 0 1 25.181-.01L30 10.743Z\\\"/>\",\n  \"wifi-off\": \"<circle cx=\\\"16\\\" cy=\\\"25\\\" r=\\\"2\\\" fill=\\\"currentColor\\\"/><path fill=\\\"currentColor\\\" d=\\\"M30 3.414L28.586 2L2 28.586L3.414 30l10.682-10.682a5.94 5.94 0 0 1 6.01 1.32l1.414-1.414a7.97 7.97 0 0 0-5.125-2.204l3.388-3.388a12 12 0 0 1 4.564 2.765l1.413-1.414a14 14 0 0 0-4.426-2.903l2.997-2.997a18 18 0 0 1 4.254 3.075L30 10.743v-.002a20 20 0 0 0-4.19-3.138Zm-15.32 9.664l2.042-2.042C16.48 11.023 16.243 11 16 11a13.95 13.95 0 0 0-9.771 3.993l1.414 1.413a11.97 11.97 0 0 1 7.037-3.328M16 7a18 18 0 0 1 4.232.525l1.643-1.642A19.95 19.95 0 0 0 2 10.74v.023l1.404 1.404A17.92 17.92 0 0 1 16 7\\\"/>\",\n  \"workspace\": \"<path fill=\\\"currentColor\\\" d=\\\"M16 17v8H6v-8zm0-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-8a2 2 0 0 0-2-2m11-9v5H17V6zm0-2H17a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2m0 13v5h-5v-5zm0-2h-5a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2v-5a2 2 0 0 0-2-2M11 6v5H6V6zm0-2H6a2 2 0 0 0-2 2v5a2 2 0 0 0 2 2h5a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2\\\"/>\",\n} as const;\n\nexport type IconName = keyof typeof icons;\n","import { createCommentVNode as _createCommentVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = [\"width\", \"height\", \"innerHTML\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" eslint-disable-next-line vue/no-v-html -- trusted, bundled Carbon path data \"),\n    (_openBlock(), _createElementBlock(\"svg\", {\n      class: \"icon\",\n      width: $props.size,\n      height: $props.size,\n      viewBox: \"0 0 32 32\",\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      innerHTML: $setup.icons[$props.name]\n    }, null, 8 /* PROPS */, _hoisted_1))\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Icon.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Icon.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Icon.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Icon.vue\";script.__scopeId = \"data-v-c67b0688\";export default script;","<template>\n  <div ref=\"rootEl\" class=\"orgswitch\">\n    <button ref=\"triggerEl\" type=\"button\" class=\"orgswitch__trigger\" aria-haspopup=\"menu\" :aria-expanded=\"open\"\n            :aria-controls=\"menuId\" :aria-label=\"organizations.length ? `Account en organisatie wisselen, actief: ${activeOrg.name}` : `Account van ${user.name}`\"\n            data-testid=\"org-trigger\" @click=\"toggle\" @keydown=\"onTriggerKeydown\">\n      <span class=\"orgswitch__avatar\" aria-hidden=\"true\">{{ user.initials }}</span>\n      <span class=\"orgswitch__text\">\n        <span class=\"orgswitch__user\">{{ user.name }}</span>\n        <span class=\"orgswitch__org\" data-testid=\"org-active-name\">{{ activeOrg.name }}</span>\n      </span>\n      <Icon name=\"chevron-sort\" :size=\"16\" class=\"orgswitch__chevron\" />\n    </button>\n\n    <div v-if=\"open\" :id=\"menuId\" ref=\"menuEl\" class=\"orgswitch__menu\" role=\"menu\" :aria-label=\"organizations.length ? 'Organisaties' : 'Account'\"\n         data-testid=\"org-menu\" @keydown=\"onMenuKeydown\">\n      <div v-if=\"organizations.length\" class=\"orgswitch__heading\" aria-hidden=\"true\">Organisaties</div>\n      <button v-for=\"org in organizations\" :key=\"org.slug\" type=\"button\" role=\"menuitemradio\"\n              class=\"orgswitch__option\" :aria-checked=\"org.slug === activeOrg.slug\" tabindex=\"-1\"\n              :data-testid=\"`org-option-${org.slug}`\" @click=\"select(org.slug)\">\n        <span class=\"orgswitch__tile\" :class=\"{ 'orgswitch__tile--active': org.slug === activeOrg.slug }\" aria-hidden=\"true\">{{ org.initials }}</span>\n        <span class=\"orgswitch__option-text\">\n          <span class=\"orgswitch__option-name\">{{ org.name }}</span>\n          <span v-if=\"org.planLabel\" class=\"orgswitch__option-plan\">Pakket {{ org.planLabel }}</span>\n        </span>\n        <Icon v-if=\"org.slug === activeOrg.slug\" name=\"checkmark\" :size=\"16\" class=\"orgswitch__check\" />\n        <span v-else class=\"orgswitch__check-space\" />\n      </button>\n\n      <div class=\"orgswitch__separator\" role=\"separator\" />\n      <div class=\"orgswitch__identity\" aria-hidden=\"true\">\n        <span class=\"orgswitch__identity-name\">{{ user.name }}</span>\n        <span class=\"orgswitch__identity-email\">{{ user.email }}</span>\n      </div>\n      <button v-if=\"demo\" type=\"button\" role=\"menuitem\" class=\"orgswitch__option orgswitch__option--action\" tabindex=\"-1\"\n              data-testid=\"org-reset\" @click=\"reset\">\n        <Icon name=\"renew\" :size=\"16\" />\n        <span>Demo terugzetten</span>\n      </button>\n      <button v-if=\"!demo || authenticated\" type=\"button\" role=\"menuitem\" class=\"orgswitch__option orgswitch__option--action\" tabindex=\"-1\"\n              data-testid=\"customer-logout\" @click=\"close(); emit('logout')\">\n        <Icon name=\"logout\" :size=\"16\" />\n        <span>Uitloggen</span>\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, ref, useId } from \"vue\";\nimport Icon from \"../ui/Icon.vue\";\nimport type { ShellIdentity, ShellOrganization } from \"../../lib/navigation\";\n\nwithDefaults(defineProps<{ user: ShellIdentity; activeOrg: ShellOrganization; organizations?: ShellOrganization[]; demo?: boolean; authenticated?: boolean }>(), { organizations: () => [], demo: false, authenticated: false });\nconst emit = defineEmits<{ select: [slug: string]; reset: []; logout: [] }>();\n\nconst menuId = useId();\nconst open = ref(false);\nconst rootEl = ref<HTMLElement | null>(null);\nconst triggerEl = ref<HTMLButtonElement | null>(null);\nconst menuEl = ref<HTMLElement | null>(null);\n\nfunction items(): HTMLElement[] {\n  return Array.from(menuEl.value?.querySelectorAll<HTMLElement>(\"[role^='menuitem']\") ?? []);\n}\n\nfunction focusItem(index: number): void {\n  const list = items();\n  if (!list.length)\n    return;\n  list[(index + list.length) % list.length].focus();\n}\n\nfunction onDocumentPointer(event: PointerEvent): void {\n  if (rootEl.value && !rootEl.value.contains(event.target as Node))\n    close(false);\n}\n\nasync function openMenu(focus: \"active\" | \"first\" | \"last\" = \"active\"): Promise<void> {\n  open.value = true;\n  document.addEventListener(\"pointerdown\", onDocumentPointer, true);\n  await nextTick();\n  const list = items();\n  if (focus === \"last\")\n    focusItem(list.length - 1);\n  else if (focus === \"first\")\n    focusItem(0);\n  else\n    focusItem(Math.max(0, list.findIndex(el => el.getAttribute(\"aria-checked\") === \"true\")));\n}\n\n/** Closes the menu; returns focus to the trigger unless focus legitimately moved elsewhere. */\nfunction close(restoreFocus = true): void {\n  if (!open.value)\n    return;\n  open.value = false;\n  document.removeEventListener(\"pointerdown\", onDocumentPointer, true);\n  if (restoreFocus)\n    triggerEl.value?.focus();\n}\n\nfunction toggle(): void {\n  if (open.value)\n    close();\n  else\n    void openMenu();\n}\n\nfunction select(slug: string): void {\n  close();\n  emit(\"select\", slug);\n}\n\nfunction reset(): void {\n  close();\n  emit(\"reset\");\n}\n\nfunction onTriggerKeydown(event: KeyboardEvent): void {\n  if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n    event.preventDefault();\n    void openMenu(event.key === \"ArrowDown\" ? \"active\" : \"last\");\n  }\n}\n\nfunction onMenuKeydown(event: KeyboardEvent): void {\n  const list = items();\n  const index = list.indexOf(document.activeElement as HTMLElement);\n  switch (event.key) {\n    case \"ArrowDown\":\n      event.preventDefault();\n      focusItem(index + 1);\n      break;\n    case \"ArrowUp\":\n      event.preventDefault();\n      focusItem(index - 1);\n      break;\n    case \"Home\":\n      event.preventDefault();\n      focusItem(0);\n      break;\n    case \"End\":\n      event.preventDefault();\n      focusItem(list.length - 1);\n      break;\n    case \"Escape\":\n      event.preventDefault();\n      event.stopPropagation();\n      close();\n      break;\n    case \"Tab\":\n      close(false);\n      break;\n  }\n}\n\ndefineExpose({ close, focusTrigger: () => triggerEl.value?.focus() });\n\nonBeforeUnmount(() => document.removeEventListener(\"pointerdown\", onDocumentPointer, true));\n</script>\n\n<style scoped>\n.orgswitch {\n  position: relative;\n  flex-shrink: 0;\n  min-width: 0;\n}\n\n.orgswitch__trigger {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  height: 48px;\n  padding: 4px 14px 4px 4px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-control);\n  background: var(--surface-raised);\n  color: var(--foreground);\n  text-align: left;\n  white-space: nowrap;\n  cursor: pointer;\n}\n\n.orgswitch__trigger:hover,\n.orgswitch__trigger[aria-expanded=\"true\"] {\n  background: var(--hover);\n}\n\n.orgswitch__avatar {\n  display: grid;\n  place-items: center;\n  width: 38px;\n  height: 38px;\n  flex-shrink: 0;\n  border-radius: var(--radius-control);\n  background: var(--accent);\n  font-size: 14px;\n  font-weight: 700;\n}\n\n.orgswitch__text {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  min-width: 0;\n  max-width: 170px;\n}\n\n.orgswitch__user {\n  font-size: 14px;\n  font-weight: 700;\n  line-height: 1.1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.orgswitch__org {\n  font-size: 14px;\n  line-height: 1.1;\n  color: var(--muted-foreground);\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.orgswitch__chevron {\n  color: var(--subtle-foreground);\n}\n\n.orgswitch__menu {\n  position: absolute;\n  top: calc(100% + 6px);\n  right: 0;\n  z-index: 50;\n  width: 260px;\n  max-width: calc(100vw - 16px);\n  padding: 6px;\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  background: var(--surface-raised);\n  border: 1px solid var(--border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-overlay);\n}\n\n.orgswitch__heading {\n  padding: 8px 10px 6px;\n  font-size: 14px;\n  color: var(--subtle-foreground);\n}\n\n.orgswitch__option {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  width: 100%;\n  padding: 8px 10px;\n  border: none;\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--foreground);\n  text-align: left;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.orgswitch__option:hover,\n.orgswitch__option:focus-visible {\n  background: var(--hover);\n}\n\n.orgswitch__option:focus-visible {\n  outline-offset: -2px;\n}\n\n.orgswitch__option[aria-checked=\"true\"] {\n  background: var(--accent-soft);\n}\n\n.orgswitch__tile {\n  display: grid;\n  place-items: center;\n  flex-shrink: 0;\n  width: 28px;\n  height: 28px;\n  border-radius: var(--radius-control);\n  background: var(--surface-strong);\n  font-size: 14px;\n  font-weight: 500;\n}\n\n.orgswitch__tile--active {\n  background: var(--accent);\n  color: var(--foreground);\n}\n\n.orgswitch__option-text {\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n  min-width: 0;\n}\n\n.orgswitch__option-name {\n  font-size: 14px;\n  font-weight: 500;\n}\n\n.orgswitch__option-plan {\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n\n.orgswitch__check {\n  color: var(--primary);\n}\n\n.orgswitch__check-space {\n  width: 16px;\n}\n\n.orgswitch__separator {\n  height: 1px;\n  margin: 4px 0;\n  background: var(--border);\n}\n\n.orgswitch__identity {\n  display: flex;\n  flex-direction: column;\n  padding: 6px 10px;\n}\n\n.orgswitch__identity-name {\n  font-size: 14px;\n}\n\n.orgswitch__identity-email {\n  font-size: 14px;\n  color: var(--muted-foreground);\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.orgswitch__option--action {\n  color: var(--muted-foreground);\n}\n\n.orgswitch__option--action:hover {\n  color: var(--foreground);\n}\n\n@media (max-width: 767px) {\n  .orgswitch {\n    flex-shrink: 1;\n  }\n\n  .orgswitch__trigger {\n    width: 44px;\n    height: 44px;\n    padding: 0;\n    border: none;\n    background: var(--accent);\n  }\n\n  .orgswitch__text,\n  .orgswitch__user,\n  .orgswitch__chevron {\n    display: none;\n  }\n\n  .orgswitch__org {\n    max-width: 150px;\n    color: var(--foreground);\n    white-space: nowrap;\n  }\n\n  .orgswitch__avatar {\n    width: 44px;\n    height: 44px;\n  }\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  ref: \"rootEl\",\n  class: \"orgswitch\"\n}\nconst _hoisted_2 = [\"aria-expanded\", \"aria-controls\", \"aria-label\"]\nconst _hoisted_3 = {\n  class: \"orgswitch__avatar\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_4 = { class: \"orgswitch__text\" }\nconst _hoisted_5 = { class: \"orgswitch__user\" }\nconst _hoisted_6 = {\n  class: \"orgswitch__org\",\n  \"data-testid\": \"org-active-name\"\n}\nconst _hoisted_7 = [\"id\", \"aria-label\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"orgswitch__heading\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_9 = [\"aria-checked\", \"data-testid\", \"onClick\"]\nconst _hoisted_10 = { class: \"orgswitch__option-text\" }\nconst _hoisted_11 = { class: \"orgswitch__option-name\" }\nconst _hoisted_12 = {\n  key: 0,\n  class: \"orgswitch__option-plan\"\n}\nconst _hoisted_13 = {\n  key: 1,\n  class: \"orgswitch__check-space\"\n}\nconst _hoisted_14 = {\n  class: \"orgswitch__identity\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_15 = { class: \"orgswitch__identity-name\" }\nconst _hoisted_16 = { class: \"orgswitch__identity-email\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"button\", {\n      ref: \"triggerEl\",\n      type: \"button\",\n      class: \"orgswitch__trigger\",\n      \"aria-haspopup\": \"menu\",\n      \"aria-expanded\": $setup.open,\n      \"aria-controls\": $setup.menuId,\n      \"aria-label\": $props.organizations.length ? `Account en organisatie wisselen, actief: ${$props.activeOrg.name}` : `Account van ${$props.user.name}`,\n      \"data-testid\": \"org-trigger\",\n      onClick: $setup.toggle,\n      onKeydown: $setup.onTriggerKeydown\n    }, [\n      _createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.user.initials), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_4, [\n        _createElementVNode(\"span\", _hoisted_5, _toDisplayString($props.user.name), 1 /* TEXT */),\n        _createElementVNode(\"span\", _hoisted_6, _toDisplayString($props.activeOrg.name), 1 /* TEXT */)\n      ]),\n      _createVNode($setup[\"Icon\"], {\n        name: \"chevron-sort\",\n        size: 16,\n        class: \"orgswitch__chevron\"\n      })\n    ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_2),\n    ($setup.open)\n      ? (_openBlock(), _createElementBlock(\"div\", {\n          key: 0,\n          id: $setup.menuId,\n          ref: \"menuEl\",\n          class: \"orgswitch__menu\",\n          role: \"menu\",\n          \"aria-label\": $props.organizations.length ? 'Organisaties' : 'Account',\n          \"data-testid\": \"org-menu\",\n          onKeydown: $setup.onMenuKeydown\n        }, [\n          ($props.organizations.length)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, \"Organisaties\"))\n            : _createCommentVNode(\"v-if\", true),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.organizations, (org) => {\n            return (_openBlock(), _createElementBlock(\"button\", {\n              key: org.slug,\n              type: \"button\",\n              role: \"menuitemradio\",\n              class: \"orgswitch__option\",\n              \"aria-checked\": org.slug === $props.activeOrg.slug,\n              tabindex: \"-1\",\n              \"data-testid\": `org-option-${org.slug}`,\n              onClick: $event => ($setup.select(org.slug))\n            }, [\n              _createElementVNode(\"span\", {\n                class: _normalizeClass([\"orgswitch__tile\", { 'orgswitch__tile--active': org.slug === $props.activeOrg.slug }]),\n                \"aria-hidden\": \"true\"\n              }, _toDisplayString(org.initials), 3 /* TEXT, CLASS */),\n              _createElementVNode(\"span\", _hoisted_10, [\n                _createElementVNode(\"span\", _hoisted_11, _toDisplayString(org.name), 1 /* TEXT */),\n                (org.planLabel)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, \"Pakket \" + _toDisplayString(org.planLabel), 1 /* TEXT */))\n                  : _createCommentVNode(\"v-if\", true)\n              ]),\n              (org.slug === $props.activeOrg.slug)\n                ? (_openBlock(), _createBlock($setup[\"Icon\"], {\n                    key: 0,\n                    name: \"checkmark\",\n                    size: 16,\n                    class: \"orgswitch__check\"\n                  }))\n                : (_openBlock(), _createElementBlock(\"span\", _hoisted_13))\n            ], 8 /* PROPS */, _hoisted_9))\n          }), 128 /* KEYED_FRAGMENT */)),\n          _cache[3] || (_cache[3] = _createElementVNode(\"div\", {\n            class: \"orgswitch__separator\",\n            role: \"separator\"\n          }, null, -1 /* CACHED */)),\n          _createElementVNode(\"div\", _hoisted_14, [\n            _createElementVNode(\"span\", _hoisted_15, _toDisplayString($props.user.name), 1 /* TEXT */),\n            _createElementVNode(\"span\", _hoisted_16, _toDisplayString($props.user.email), 1 /* TEXT */)\n          ]),\n          ($props.demo)\n            ? (_openBlock(), _createElementBlock(\"button\", {\n                key: 1,\n                type: \"button\",\n                role: \"menuitem\",\n                class: \"orgswitch__option orgswitch__option--action\",\n                tabindex: \"-1\",\n                \"data-testid\": \"org-reset\",\n                onClick: $setup.reset\n              }, [\n                _createVNode($setup[\"Icon\"], {\n                  name: \"renew\",\n                  size: 16\n                }),\n                _cache[1] || (_cache[1] = _createElementVNode(\"span\", null, \"Demo terugzetten\", -1 /* CACHED */))\n              ]))\n            : _createCommentVNode(\"v-if\", true),\n          (!$props.demo || $props.authenticated)\n            ? (_openBlock(), _createElementBlock(\"button\", {\n                key: 2,\n                type: \"button\",\n                role: \"menuitem\",\n                class: \"orgswitch__option orgswitch__option--action\",\n                tabindex: \"-1\",\n                \"data-testid\": \"customer-logout\",\n                onClick: _cache[0] || (_cache[0] = $event => {$setup.close(); $setup.emit('logout')})\n              }, [\n                _createVNode($setup[\"Icon\"], {\n                  name: \"logout\",\n                  size: 16\n                }),\n                _cache[2] || (_cache[2] = _createElementVNode(\"span\", null, \"Uitloggen\", -1 /* CACHED */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_7))\n      : _createCommentVNode(\"v-if\", true)\n  ], 512 /* NEED_PATCH */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/OrganizationSwitcher.vue\";script.__scopeId = \"data-v-ffe94794\";export default script;","import { createVNode as _createVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"topbar\",\n  \"data-testid\": \"topbar\"\n}\nconst _hoisted_2 = { class: \"topbar__start\" }\nconst _hoisted_3 = [\"aria-expanded\"]\nconst _hoisted_4 = [\"href\"]\nconst _hoisted_5 = [\"aria-label\"]\nconst _hoisted_6 = { class: \"topbar__search-label\" }\nconst _hoisted_7 = {\n  class: \"topbar__kbd\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = { class: \"topbar__end\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"button\", {\n        ref: \"menuButton\",\n        type: \"button\",\n        class: \"topbar__menu\",\n        \"aria-label\": \"Navigatie openen\",\n        \"aria-expanded\": $props.drawerOpen,\n        \"aria-controls\": \"velkom-sidebar\",\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('toggleDrawer')))\n      }, [\n        _createVNode($setup[\"Icon\"], {\n          name: \"menu\",\n          size: 20\n        })\n      ], 8 /* PROPS */, _hoisted_3),\n      _createElementVNode(\"a\", {\n        class: \"topbar__brand\",\n        href: $props.homeHref,\n        \"aria-label\": \"Velkom, naar overzicht\"\n      }, _cache[5] || (_cache[5] = [\n        _createElementVNode(\"svg\", {\n          viewBox: \"0 0 1280 350\",\n          class: \"topbar__wordmark\",\n          \"aria-hidden\": \"true\",\n          focusable: \"false\"\n        }, [\n          _createElementVNode(\"path\", {\n            fill: \"currentColor\",\n            d: \"M83.44 290 16.8 106.4H52.67L101.46 245.46L150.25 106.4H186.12L119.48 290Z M270.15 295.1Q242.78 295.1 222.13 283.12Q201.47 271.13 190 249.62Q178.52 228.12 178.52 199.73Q178.52 169.64 189.83 147.54Q201.13 125.44 221.36 113.37Q241.59 101.3 268.45 101.3Q296.5 101.3 316.22 114.3Q335.94 127.31 345.72 151.28Q355.49 175.25 353.45 208.23H317.92V195.31Q317.58 163.35 305.77 148.05Q293.95 132.75 269.81 132.75Q243.12 132.75 229.69 149.58Q216.26 166.41 216.26 198.2Q216.26 228.46 229.69 245.03Q243.12 261.61 268.45 261.61Q285.11 261.61 297.26 254.05Q309.42 246.48 316.22 232.37L351.07 243.42Q340.36 268.07 318.6 281.59Q296.84 295.1 270.15 295.1ZM204.7 208.23V180.52H335.77V208.23Z M366.93 290V40.1H402.46V290Z M425.29 290 425.46 45.2H461.5V194.8L533.58 106.4H578.8L502.64 198.2L586.62 290H538.34L461.5 201.6V290Z M425.46 40.10H461.50V46.20H425.46Z M655.35 295.1Q627.81 295.1 607.58 282.69Q587.35 270.28 576.38 248.44Q565.42 226.59 565.42 198.03Q565.42 169.3 576.64 147.45Q587.86 125.61 608.09 113.45Q628.32 101.3 655.35 101.3Q682.89 101.3 703.12 113.71Q723.35 126.12 734.4 147.88Q745.45 169.64 745.45 198.03Q745.45 226.76 734.32 248.6Q723.18 270.45 702.95 282.77Q682.72 295.1 655.35 295.1ZM655.35 261.61Q681.7 261.61 694.71 243.84Q707.71 226.08 707.71 198.03Q707.71 169.3 694.54 152.05Q681.36 134.79 655.35 134.79Q637.5 134.79 625.94 142.87Q614.38 150.94 608.77 165.13Q603.16 179.33 603.16 198.03Q603.16 226.93 616.42 244.27Q629.68 261.61 655.35 261.61Z M974.83 290 975 175.59Q975 155.7 964.8 144.56Q954.6 133.43 937.94 133.43Q927.74 133.43 919.33 138.1Q910.91 142.78 905.73 152.05Q900.54 161.31 900.54 175.25L883.37 166.58Q883.03 147.2 891.62 132.58Q900.2 117.96 914.99 109.88Q929.78 101.81 948.14 101.81Q977.89 101.81 994.21 119.66Q1010.53 137.51 1010.53 167.09L1010.36 290ZM754.68 290V106.4H786.3V159.44H790.38V290ZM864.84 290 865.01 176.27Q865.01 156.21 854.9 144.82Q844.78 133.43 827.78 133.43Q810.95 133.43 800.67 144.99Q790.38 156.55 790.38 175.25L773.38 164.37Q773.38 146.35 782.05 132.24Q790.72 118.13 805.51 109.97Q820.3 101.81 839 101.81Q858.55 101.81 872.32 110.05Q886.09 118.3 893.32 133.09Q900.54 147.88 900.54 167.43L900.37 290Z\"\n          }),\n          _createElementVNode(\"circle\", {\n            cx: \"1080\",\n            cy: \"100\",\n            r: \"40\",\n            class: \"topbar__dot\"\n          })\n        ], -1 /* CACHED */)\n      ]), 8 /* PROPS */, _hoisted_4),\n      _renderSlot(_ctx.$slots, \"notice\", {}, undefined, true)\n    ]),\n    ($props.demo)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 0,\n          type: \"button\",\n          class: \"topbar__search\",\n          \"data-testid\": \"search-trigger\",\n          \"aria-label\": `Zoeken in ${$props.orgName}`,\n          onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('openSearch')))\n        }, [\n          _createVNode($setup[\"Icon\"], {\n            name: \"search\",\n            size: 16\n          }),\n          _createElementVNode(\"span\", _hoisted_6, \"Zoeken in \" + _toDisplayString($props.orgName), 1 /* TEXT */),\n          _createElementVNode(\"kbd\", _hoisted_7, _toDisplayString($setup.shortcut), 1 /* TEXT */)\n        ], 8 /* PROPS */, _hoisted_5))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"div\", _hoisted_8, [\n      _createVNode($setup[\"OrganizationSwitcher\"], {\n        ref: \"switcher\",\n        user: $props.user,\n        \"active-org\": $props.activeOrg,\n        organizations: $props.organizations,\n        demo: $props.demo,\n        authenticated: $props.authenticated,\n        onSelect: _cache[2] || (_cache[2] = slug => $setup.emit('selectOrg', slug)),\n        onReset: _cache[3] || (_cache[3] = $event => ($setup.emit('resetDemo'))),\n        onLogout: _cache[4] || (_cache[4] = $event => ($setup.emit('logout')))\n      }, null, 8 /* PROPS */, [\"user\", \"active-org\", \"organizations\", \"demo\", \"authenticated\"])\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Topbar.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Topbar.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Topbar.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Topbar.vue\";script.__scopeId = \"data-v-105c1358\";export default script;","<template>\n  <aside id=\"velkom-sidebar\" class=\"sidebar\" :class=\"{ 'sidebar--collapsed': collapsed && !drawer, 'sidebar--drawer': drawer, 'sidebar--open': drawerOpen }\"\n         :aria-label=\"drawer ? 'Navigatie' : undefined\" :role=\"drawer && drawerOpen ? 'dialog' : undefined\"\n         :aria-modal=\"drawer && drawerOpen ? 'true' : undefined\" data-testid=\"sidebar\" @keydown.esc=\"drawer && emit('closeDrawer')\">\n    <button v-if=\"drawer\" type=\"button\" class=\"sidebar__close\" aria-label=\"Navigatie sluiten\" @click=\"emit('closeDrawer')\">\n      <Icon name=\"close\" :size=\"20\" />\n    </button>\n    <nav class=\"sidebar__nav\" aria-label=\"Hoofdnavigatie\">\n      <ul class=\"sidebar__list\">\n        <li v-if=\"drawer && searchable\">\n          <button type=\"button\" class=\"sidebar__item\" @click=\"emit('openSearch')\">\n            <Icon name=\"search\" :size=\"20\" class=\"sidebar__icon\" />\n            <span class=\"sidebar__label\">Zoeken</span>\n          </button>\n        </li>\n        <li v-for=\"item in navItems\" :key=\"item.section\">\n          <a class=\"sidebar__item\" :class=\"{ 'sidebar__item--active': item.section === section }\"\n             :href=\"buildHash(org, item.section)\" :aria-current=\"item.section === section ? 'page' : undefined\"\n             :aria-label=\"showLabels ? undefined : item.label\" :data-testid=\"`nav-${item.section}`\" @click=\"emit('navigated')\">\n            <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"sidebar__icon\" aria-hidden=\"true\"><path :d=\"paths[item.section] || paths.overzicht\" /></svg>\n            <span v-if=\"showLabels\" class=\"sidebar__label\">{{ item.label }}</span>\n            <span v-else class=\"sidebar__tooltip\" aria-hidden=\"true\">{{ item.label }}</span>\n          </a>\n          <ul v-if=\"showLabels && item.section === section && item.sub\" class=\"sidebar__sub\">\n            <li v-for=\"sub in item.sub\" :key=\"sub.tab\">\n              <a class=\"sidebar__subitem\" :class=\"{ 'sidebar__subitem--active': sub.tab === activeTab(item) }\"\n                 :href=\"buildHash(org, item.section, subRoute(item, sub).query, subRoute(item, sub).rest)\"\n                 :aria-current=\"sub.tab === activeTab(item) ? 'page' : undefined\" @click=\"emit('navigated')\">\n                {{ sub.label }}\n              </a>\n            </li>\n          </ul>\n        </li>\n      </ul>\n    </nav>\n\n    <button v-if=\"!drawer\" type=\"button\" class=\"sidebar__item sidebar__toggle\" :aria-expanded=\"!collapsed\"\n            aria-controls=\"velkom-sidebar\" :aria-label=\"collapsed ? 'Navigatie uitklappen' : 'Navigatie inklappen'\"\n            data-testid=\"sidebar-toggle\" @click=\"emit('toggleCollapse')\">\n      <Icon name=\"open-panel-left\" :size=\"16\" class=\"sidebar__icon\" />\n      <span v-if=\"showLabels\" class=\"sidebar__label\">Inklappen</span>\n      <span v-else class=\"sidebar__tooltip\" aria-hidden=\"true\">Uitklappen</span>\n    </button>\n  </aside>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport Icon from \"../ui/Icon.vue\";\nimport { activeSubId, subRoute, type NavItem } from \"../../lib/navigation\";\nimport { buildHash, route } from \"../../lib/router\";\n\nconst props = defineProps<{ org: string; section: string; tab: string; collapsed: boolean; drawer: boolean; drawerOpen: boolean; navItems: NavItem[]; searchable?: boolean }>();\nconst emit = defineEmits<{ toggleCollapse: []; closeDrawer: []; navigated: []; openSearch: [] }>();\n\nconst showLabels = computed(() => props.drawer || !props.collapsed);\nconst paths: Record<string, string> = {\n  overzicht: \"M3 3h6v6H3zM11 3h6v6h-6zM3 11h6v6H3zM11 11h6v6h-6z\",\n  bezoeken: \"M11 3h4.5A1.5 1.5 0 0 1 17 4.5v11a1.5 1.5 0 0 1-1.5 1.5H11M3 10h9M8.5 6.5L12 10l-3.5 3.5\",\n  contactpersonen: \"M10 3.3a3.2 3.2 0 1 1 0 6.4a3.2 3.2 0 1 1 0-6.4zM3.8 17c.8-3.2 3.3-5 6.2-5s5.4 1.8 6.2 5\",\n  locaties: \"M10 18s5.5-5.2 5.5-9.5a5.5 5.5 0 0 0-11 0C4.5 12.8 10 18 10 18zM10 6.5a2 2 0 1 1 0 4a2 2 0 1 1 0-4z\",\n  schermen: \"M3 4h14v10H3zM7 17h6M10 14v3\",\n  bezoekersreis: \"M3 15c3 0 3-10 7-10s4 10 7 10\",\n  koppelingen: \"M8.5 11.5l3-3M7 9.5L5.5 11a2.8 2.8 0 0 0 4 4L11 13.5M13 10.5l1.5-1.5a2.8 2.8 0 0 0-4-4L9 6.5\",\n  rapportages: \"M4 16V9M10 16V4M16 16v-5\",\n  instellingen: \"M3 6h8M15 6h2M3 14h2M9 14h8M13 4v4M7 12v4\",\n};\n\nfunction activeTab(item: NavItem): string {\n  return activeSubId(item, route.value);\n}\n</script>\n\n<style scoped>\n.sidebar {\n  width: var(--sidebar-expanded);\n  flex: 1 1 var(--sidebar-expanded);\n  max-width: 248px;\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  padding: 24px 12px 16px;\n  min-height: 0;\n  border-right: 1px solid var(--border);\n  background: var(--shell);\n  transition: width 220ms var(--ease);\n}\n\n.sidebar--collapsed {\n  width: var(--sidebar-collapsed);\n  flex: 0 0 var(--sidebar-collapsed);\n  max-width: var(--sidebar-collapsed);\n  padding-inline: 6px;\n}\n\n.sidebar__nav {\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n\n/* Tooltips must escape the nav box when collapsed; nine items fit without scrolling. */\n.sidebar--collapsed .sidebar__nav {\n  overflow: visible;\n}\n\n.sidebar__list,\n.sidebar__sub {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n}\n\n.sidebar__list {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n.sidebar__item {\n  position: relative;\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  width: 100%;\n  height: 44px;\n  padding: 0 16px;\n  border: none;\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--foreground);\n  font-size: 14px;\n  font-weight: 600;\n  text-align: left;\n  text-decoration: none;\n  white-space: nowrap;\n  cursor: pointer;\n}\n\n.sidebar__item:hover {\n  background: var(--hover);\n  color: var(--foreground);\n}\n\n.sidebar__item--active {\n  background: var(--section-accent);\n  color: var(--foreground);\n}\n\n.sidebar__item--active .sidebar__icon {\n  color: var(--foreground);\n}\n\n.sidebar--collapsed .sidebar__item {\n  justify-content: center;\n  padding-inline: 0;\n}\n\n.sidebar__label {\n  flex: 1;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n.sidebar__sub {\n  display: none;\n  flex-direction: column;\n  gap: 1px;\n  padding: 4px 0 10px 38px;\n}\n\n.sidebar--drawer .sidebar__sub { display: flex; }\n\n.sidebar__subitem {\n  display: flex;\n  align-items: center;\n  height: 32px;\n  padding: 0 10px;\n  border-radius: var(--radius-control);\n  color: var(--muted-foreground);\n  font-size: 14px;\n  text-decoration: none;\n  white-space: nowrap;\n}\n\n.sidebar__subitem:hover {\n  background: var(--hover);\n  color: var(--foreground);\n}\n\n.sidebar__subitem--active {\n  color: var(--foreground);\n  font-weight: 500;\n}\n\n.sidebar__tooltip {\n  position: absolute;\n  left: calc(100% + 10px);\n  top: 50%;\n  z-index: 30;\n  transform: translateY(-50%);\n  padding: 6px 10px;\n  border-radius: var(--radius-control);\n  background: var(--surface-raised);\n  border: 1px solid var(--border);\n  box-shadow: var(--shadow-overlay);\n  color: var(--foreground);\n  font-size: 14px;\n  font-weight: 400;\n  white-space: nowrap;\n  pointer-events: none;\n  opacity: 0;\n  visibility: hidden;\n}\n\n.sidebar__item:hover .sidebar__tooltip,\n.sidebar__item:focus-visible .sidebar__tooltip {\n  opacity: 1;\n  visibility: visible;\n}\n\n.sidebar__toggle {\n  flex-shrink: 0;\n  color: var(--muted-foreground);\n}\n\n.sidebar__close {\n  display: grid;\n  place-items: center;\n  align-self: flex-end;\n  flex-shrink: 0;\n  width: 40px;\n  height: 40px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-control);\n  background: var(--surface-raised);\n  color: var(--foreground);\n  cursor: pointer;\n}\n\n.sidebar--drawer {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 45;\n  width: min(var(--sidebar-expanded), calc(100vw - 48px));\n  padding-top: 16px;\n  background: var(--shell);\n  border-right: 1px solid var(--border);\n  box-shadow: var(--shadow-overlay);\n  transform: translateX(-100%);\n  visibility: hidden;\n  transition: transform 200ms var(--ease), visibility 200ms;\n}\n\n/* Visible at once when opening, so focus can move in; hidden only after the slide-out on close. */\n.sidebar--drawer.sidebar--open {\n  transform: none;\n  visibility: visible;\n  transition: transform 200ms var(--ease), visibility 0s;\n}\n\n@media (hover: hover) {\n  /* The active item keeps its section color on hover, a shade darker. */\n  .sidebar__item--active:hover {\n    background: color-mix(in srgb, var(--section-accent) 88%, var(--foreground));\n  }\n\n  .sidebar__close:hover {\n    background: var(--hover);\n  }\n}\n</style>\n","import type { IconName } from \"./icons\";\n\nexport interface NavSubItem {\n  tab: string;\n  label: string;\n}\n\nexport interface NavItem {\n  section: string;\n  label: string;\n  icon: IconName;\n  description: string;\n  sub?: NavSubItem[];\n  /** Sub-items are sub-pages (`section/<id>`) instead of tabs (`section?tab=<id>`). */\n  subAsPath?: boolean;\n}\n\n/** Main navigation, PRD 10.1. */\nexport const navItems: NavItem[] = [\n  { section: \"overzicht\", label: \"Overzicht\", icon: \"dashboard\", description: \"Vandaag, inrichting en aandachtspunten.\" },\n  {\n    section: \"bezoeken\", label: \"Bezoeken\", icon: \"events\", description: \"Verwacht en geregistreerd bezoek, en wie er binnen is.\",\n    sub: [\n      { tab: \"vandaag\", label: \"Vandaag\" },\n      { tab: \"geschiedenis\", label: \"Geschiedenis\" },\n      { tab: \"ontruimingslijst\", label: \"Ontruimingslijst\" },\n    ],\n  },\n  { section: \"contactpersonen\", label: \"Contactpersonen\", icon: \"user-multiple\", description: \"Wie bezoekers ontvangt en hoe die persoon bereikbaar is.\" },\n  { section: \"locaties\", label: \"Locaties\", icon: \"location\", description: \"Locatieprofiel en lokale ontvangstinstellingen.\" },\n  { section: \"schermen\", label: \"Schermen\", icon: \"screen\", description: \"Ontvangstapparaten, hun status, inrichting en preview.\" },\n  {\n    section: \"bezoekersreis\", label: \"Bezoekersreis\", icon: \"flow\", description: \"De vijf momenten van uitnodiging tot vertrek.\",\n    subAsPath: true,\n    sub: [\n      { tab: \"vooraf\", label: \"Vooraf\" },\n      { tab: \"aankomst\", label: \"Aankomst\" },\n      { tab: \"ontvangst\", label: \"Ontvangst\" },\n      { tab: \"binnen\", label: \"Binnen\" },\n      { tab: \"vertrek\", label: \"Vertrek\" },\n    ],\n  },\n  { section: \"koppelingen\", label: \"Koppelingen\", icon: \"connect\", description: \"Agenda, meldingen, toegang en maatwerk.\" },\n  { section: \"rapportages\", label: \"Rapportages\", icon: \"report\", description: \"Cijfers per moment en bezoekersscore.\" },\n  {\n    section: \"instellingen\", label: \"Instellingen\", icon: \"settings\", description: \"Organisatie, gebruikers en rollen, abonnement en privacy.\",\n    sub: [\n      { tab: \"organisatie\", label: \"Organisatie\" },\n      { tab: \"gebruikers\", label: \"Gebruikers en rollen\" },\n      { tab: \"abonnement\", label: \"Abonnement\" },\n      { tab: \"privacy\", label: \"Privacy\" },\n    ],\n  },\n];\n\n/** Reachable by URL only, not in the sidebar: `#/o/<org>/_ui` shows every shared UI component. */\nexport const hiddenItems: NavItem[] = [\n  { section: \"_ui\", label: \"Componenten\", icon: \"grid\", description: \"Referentie van de gedeelde UI-componenten voor het prototype.\" },\n];\n\nexport const defaultSection = \"overzicht\";\n\n/** Route of a sub-item: `bezoekersreis/<moment>` for path-based sections, `?tab=<id>` otherwise. */\nexport function subRoute(item: NavItem, sub: NavSubItem): { query: Record<string, string>; rest: string[] } {\n  return item.subAsPath ? { query: {}, rest: [sub.tab] } : { query: { tab: sub.tab }, rest: [] };\n}\n\n/** The sub-item a route points at, falling back to the first one. */\nexport function activeSubId(item: NavItem, route: { query: Record<string, string>; rest: readonly string[] }): string {\n  const requested = item.subAsPath ? route.rest[0] : route.query.tab;\n  return item.sub?.some(sub => sub.tab === requested) ? requested ?? \"\" : item.sub?.[0]?.tab ?? \"\";\n}\n\nexport function findNavItem(section: string): NavItem | undefined {\n  return navItems.find(item => item.section === section) ?? hiddenItems.find(item => item.section === section);\n}\n\n/** Presentation-only account data; shared shell components never initialize a data store. */\nexport type ShellIdentity = { name: string; email: string; initials: string };\nexport type ShellOrganization = { slug: string; name: string; initials?: string; planLabel?: string };\n","import { readonly, ref } from \"vue\";\n\nimport { buildHash, parseHash, type AdminRoute } from \"./route-contract\";\nexport { buildHash } from \"./route-contract\";\nexport type { AdminRoute } from \"./route-contract\";\n\n/** Decides whether a route change may proceed, e.g. when a form has unsaved changes. */\nexport type NavigationGuard = (to: AdminRoute, from: AdminRoute) => Promise<boolean>;\n\nconst current = ref<AdminRoute>(parseHash(location.hash));\n/** The hash that `current` reflects, so a refused change can be undone. */\nlet currentHash = location.hash;\nlet guard: NavigationGuard | null = null;\nlet pendingToken = 0;\n\nfunction setUrlHash(hash: string): void {\n  history.replaceState(history.state, \"\", `${location.pathname}${location.search}${hash}`);\n}\n\nwindow.addEventListener(\"hashchange\", () => {\n  const hash = location.hash;\n  const to = parseHash(hash);\n  if (!guard) {\n    current.value = to;\n    currentHash = hash;\n    return;\n  }\n  // The URL already changed (link click, back/forward). Show the current route's URL again while the guard\n  // decides, so the address bar never names an org or page the user has not switched to yet.\n  const token = ++pendingToken;\n  const fromHash = currentHash;\n  setUrlHash(fromHash);\n  void guard(to, current.value).then(allowed => {\n    if (token !== pendingToken || !allowed)\n      return;\n    setUrlHash(hash);\n    current.value = to;\n    currentHash = hash;\n  });\n});\n\nexport const route = readonly(current);\n\nexport function setNavigationGuard(next: NavigationGuard | null): void {\n  guard = next;\n}\n\n/** Push a new history entry (back/forward restores it). Goes through the navigation guard. */\nexport function navigate(org: string, section: string, query: Record<string, string> = {}, rest: readonly string[] = []): void {\n  const hash = buildHash(org, section, query, rest);\n  if (hash !== location.hash)\n    location.hash = hash;\n}\n\n/** Correct the current route without adding a history entry (fallbacks, normalization). Bypasses the guard. */\nexport function replaceRoute(org: string, section: string, query: Record<string, string> = {}, rest: readonly string[] = []): void {\n  const hash = buildHash(org, section, query, rest);\n  if (hash === location.hash)\n    return;\n  setUrlHash(hash);\n  current.value = parseHash(hash);\n  currentHash = hash;\n}\n","/** Parsed hash route: `#/o/:org/:section?query`. Everything after the section is kept in `rest`. */\nexport interface AdminRoute {\n  org: string;\n  section: string;\n  rest: string[];\n  query: Record<string, string>;\n}\n\nexport function parseHash(hash: string): AdminRoute {\n  const raw = hash.replace(/^#/, \"\");\n  const [path, search = \"\"] = raw.split(\"?\", 2);\n  const params = new URLSearchParams(search);\n  const query = Object.fromEntries(params);\n  // Malformed encoding or repeated tabs must fail closed rather than crash or hide a forbidden tab.\n  let segments: string[];\n  try {\n    segments = path.split(\"/\").filter(Boolean).map(decodeURIComponent);\n  } catch {\n    return { org: \"\", section: \"\", rest: [], query };\n  }\n  if (params.getAll(\"tab\").length > 1)\n    query.tab = \"invalid-tab\";\n  if (segments[0] !== \"o\")\n    return { org: \"\", section: \"\", rest: [], query };\n  return { org: segments[1] ?? \"\", section: segments[2] ?? \"\", rest: segments.slice(3), query };\n}\n\nexport function buildHash(org: string, section: string, query: Record<string, string> = {}, rest: readonly string[] = []): string {\n  const path = [\"o\", org, section, ...rest].filter(Boolean).map(encodeURIComponent).join(\"/\");\n  const search = new URLSearchParams(Object.entries(query).filter(([, v]) => v !== \"\")).toString();\n  return `#/${path}${search ? `?${search}` : \"\"}`;\n}\n","import { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, withKeys as _withKeys } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\", \"role\", \"aria-modal\"]\nconst _hoisted_2 = {\n  class: \"sidebar__nav\",\n  \"aria-label\": \"Hoofdnavigatie\"\n}\nconst _hoisted_3 = { class: \"sidebar__list\" }\nconst _hoisted_4 = { key: 0 }\nconst _hoisted_5 = [\"href\", \"aria-current\", \"aria-label\", \"data-testid\"]\nconst _hoisted_6 = {\n  width: \"20\",\n  height: \"20\",\n  viewBox: \"0 0 20 20\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.8\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  class: \"sidebar__icon\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_7 = [\"d\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"sidebar__label\"\n}\nconst _hoisted_9 = {\n  key: 1,\n  class: \"sidebar__tooltip\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_10 = {\n  key: 0,\n  class: \"sidebar__sub\"\n}\nconst _hoisted_11 = [\"href\", \"aria-current\"]\nconst _hoisted_12 = [\"aria-expanded\", \"aria-label\"]\nconst _hoisted_13 = {\n  key: 0,\n  class: \"sidebar__label\"\n}\nconst _hoisted_14 = {\n  key: 1,\n  class: \"sidebar__tooltip\",\n  \"aria-hidden\": \"true\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"aside\", {\n    id: \"velkom-sidebar\",\n    class: _normalizeClass([\"sidebar\", { 'sidebar--collapsed': $props.collapsed && !$props.drawer, 'sidebar--drawer': $props.drawer, 'sidebar--open': $props.drawerOpen }]),\n    \"aria-label\": $props.drawer ? 'Navigatie' : undefined,\n    role: $props.drawer && $props.drawerOpen ? 'dialog' : undefined,\n    \"aria-modal\": $props.drawer && $props.drawerOpen ? 'true' : undefined,\n    \"data-testid\": \"sidebar\",\n    onKeydown: _cache[5] || (_cache[5] = _withKeys($event => ($props.drawer && $setup.emit('closeDrawer')), [\"esc\"]))\n  }, [\n    ($props.drawer)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 0,\n          type: \"button\",\n          class: \"sidebar__close\",\n          \"aria-label\": \"Navigatie sluiten\",\n          onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('closeDrawer')))\n        }, [\n          _createVNode($setup[\"Icon\"], {\n            name: \"close\",\n            size: 20\n          })\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"nav\", _hoisted_2, [\n      _createElementVNode(\"ul\", _hoisted_3, [\n        ($props.drawer && $props.searchable)\n          ? (_openBlock(), _createElementBlock(\"li\", _hoisted_4, [\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"sidebar__item\",\n                onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('openSearch')))\n              }, [\n                _createVNode($setup[\"Icon\"], {\n                  name: \"search\",\n                  size: 20,\n                  class: \"sidebar__icon\"\n                }),\n                _cache[6] || (_cache[6] = _createElementVNode(\"span\", { class: \"sidebar__label\" }, \"Zoeken\", -1 /* CACHED */))\n              ])\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.navItems, (item) => {\n          return (_openBlock(), _createElementBlock(\"li\", {\n            key: item.section\n          }, [\n            _createElementVNode(\"a\", {\n              class: _normalizeClass([\"sidebar__item\", { 'sidebar__item--active': item.section === $props.section }]),\n              href: $setup.buildHash($props.org, item.section),\n              \"aria-current\": item.section === $props.section ? 'page' : undefined,\n              \"aria-label\": $setup.showLabels ? undefined : item.label,\n              \"data-testid\": `nav-${item.section}`,\n              onClick: _cache[2] || (_cache[2] = $event => ($setup.emit('navigated')))\n            }, [\n              (_openBlock(), _createElementBlock(\"svg\", _hoisted_6, [\n                _createElementVNode(\"path\", {\n                  d: $setup.paths[item.section] || $setup.paths.overzicht\n                }, null, 8 /* PROPS */, _hoisted_7)\n              ])),\n              ($setup.showLabels)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString(item.label), 1 /* TEXT */))\n                : (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString(item.label), 1 /* TEXT */))\n            ], 10 /* CLASS, PROPS */, _hoisted_5),\n            ($setup.showLabels && item.section === $props.section && item.sub)\n              ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_10, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(item.sub, (sub) => {\n                    return (_openBlock(), _createElementBlock(\"li\", {\n                      key: sub.tab\n                    }, [\n                      _createElementVNode(\"a\", {\n                        class: _normalizeClass([\"sidebar__subitem\", { 'sidebar__subitem--active': sub.tab === $setup.activeTab(item) }]),\n                        href: $setup.buildHash($props.org, item.section, $setup.subRoute(item, sub).query, $setup.subRoute(item, sub).rest),\n                        \"aria-current\": sub.tab === $setup.activeTab(item) ? 'page' : undefined,\n                        onClick: _cache[3] || (_cache[3] = $event => ($setup.emit('navigated')))\n                      }, _toDisplayString(sub.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_11)\n                    ]))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ]))\n              : _createCommentVNode(\"v-if\", true)\n          ]))\n        }), 128 /* KEYED_FRAGMENT */))\n      ])\n    ]),\n    (!$props.drawer)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 1,\n          type: \"button\",\n          class: \"sidebar__item sidebar__toggle\",\n          \"aria-expanded\": !$props.collapsed,\n          \"aria-controls\": \"velkom-sidebar\",\n          \"aria-label\": $props.collapsed ? 'Navigatie uitklappen' : 'Navigatie inklappen',\n          \"data-testid\": \"sidebar-toggle\",\n          onClick: _cache[4] || (_cache[4] = $event => ($setup.emit('toggleCollapse')))\n        }, [\n          _createVNode($setup[\"Icon\"], {\n            name: \"open-panel-left\",\n            size: 16,\n            class: \"sidebar__icon\"\n          }),\n          ($setup.showLabels)\n            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_13, \"Inklappen\"))\n            : (_openBlock(), _createElementBlock(\"span\", _hoisted_14, \"Uitklappen\"))\n        ], 8 /* PROPS */, _hoisted_12))\n      : _createCommentVNode(\"v-if\", true)\n  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Sidebar.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Sidebar.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Sidebar.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/Sidebar.vue\";script.__scopeId = \"data-v-f39b617d\";export default script;","<template>\n  <Dialog :open=\"Boolean(pending)\" title=\"Wijzigingen niet opgeslagen\" :width=\"460\" @close=\"answerConfirmation(false)\">\n    <p class=\"unsaved__text\" data-testid=\"unsaved-text\">{{ text }}</p>\n    <template #footer>\n      <Button data-testid=\"unsaved-keep\" @click=\"answerConfirmation(false)\">Verder bewerken</Button>\n      <Button variant=\"danger\" data-testid=\"unsaved-discard\" @click=\"answerConfirmation(true)\">{{ discardLabel }}</Button>\n    </template>\n  </Dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport Button from \"../ui/Button.vue\";\nimport Dialog from \"../ui/Dialog.vue\";\nimport { answerConfirmation, pendingConfirmation as pending } from \"../../composables/useFormGuard\";\n\nconst discardLabel = computed(() => ({\n  \"org-switch\": \"Wisselen zonder opslaan\",\n  \"navigate\": \"Verlaten zonder opslaan\",\n  \"close-dialog\": \"Sluiten zonder opslaan\",\n})[pending.value?.reason ?? \"navigate\"]);\n\nconst text = computed(() => {\n  const labels = pending.value?.formLabels ?? [];\n  const what = labels.length === 1 ? `\"${labels[0]}\"` : \"dit formulier\";\n  return `Je hebt wijzigingen in ${what} nog niet opgeslagen. Als je doorgaat, gaan ze verloren.`;\n});\n</script>\n\n<style scoped>\n.unsaved__text {\n  margin: 0;\n}\n</style>\n","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"type\", \"disabled\"]\nconst _hoisted_2 = {\n  key: 1,\n  class: \"btn__label\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"button\", {\n    type: $props.type,\n    class: _normalizeClass([\"btn\", [`btn--${$props.variant}`, `btn--${$props.size}`, { 'btn--icon': $props.iconOnly }]]),\n    disabled: $props.disabled\n  }, [\n    ($props.icon)\n      ? (_openBlock(), _createBlock($setup[\"Icon\"], {\n          key: 0,\n          name: $props.icon,\n          size: 16\n        }, null, 8 /* PROPS */, [\"name\"]))\n      : _createCommentVNode(\"v-if\", true),\n    (!$props.iconOnly)\n      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, [\n          _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n        ]))\n      : _createCommentVNode(\"v-if\", true)\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Button.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Button.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Button.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Button.vue\";script.__scopeId = \"data-v-c6d222b1\";export default script;","<template>\n  <!-- Native modal dialog: inert background, Escape and top-layer stacking come from the browser. -->\n  <dialog ref=\"dialogEl\" class=\"dialog\" :aria-labelledby=\"titleId\" :aria-describedby=\"description ? descriptionId : undefined\"\n          @cancel.prevent=\"requestClose\" @close=\"onNativeClose\" @click=\"onBackdropClick\">\n    <component :is=\"form ? 'form' : 'div'\" class=\"dialog__panel\" :style=\"{ '--dialog-width': `${width}px` }\"\n               :novalidate=\"form || undefined\" @submit.prevent=\"onSubmit\">\n      <header class=\"dialog__header\">\n        <div class=\"dialog__heading\">\n          <h2 :id=\"titleId\" class=\"dialog__title\">{{ title }}</h2>\n          <p v-if=\"description\" :id=\"descriptionId\" class=\"dialog__description\">{{ description }}</p>\n          <slot name=\"header-meta\" />\n        </div>\n        <button type=\"button\" class=\"dialog__close\" aria-label=\"Sluiten\" @click=\"requestClose\">\n          <Icon name=\"close\" :size=\"20\" />\n        </button>\n      </header>\n      <div class=\"dialog__body\">\n        <slot />\n      </div>\n      <footer v-if=\"form || $slots.footer\" class=\"dialog__footer\">\n        <div class=\"dialog__footer-start\">\n          <slot name=\"footer-start\" />\n        </div>\n        <div class=\"dialog__actions\">\n          <slot name=\"footer\">\n            <Button v-if=\"form\" :disabled=\"pending\" @click=\"requestClose\">{{ cancelLabel }}</Button>\n            <Button v-if=\"form\" type=\"submit\" :variant=\"destructive ? 'danger' : 'primary'\" :disabled=\"pending\"\n                    data-testid=\"dialog-submit\">\n              {{ pending ? pendingLabel : submitLabel }}\n            </Button>\n          </slot>\n        </div>\n      </footer>\n    </component>\n  </dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, ref, useId, watch } from \"vue\";\nimport Button from \"./Button.vue\";\nimport Icon from \"./Icon.vue\";\n\n/**\n * Centered modal dialog. In `form` mode the body and footer are one <form>: Enter submits, the footer\n * shows Annuleren then the primary action (right aligned), and the submit button stays enabled for\n * invalid input (validate in the submit handler). Pass `guard` from useFormGuard to ask before\n * discarding unsaved input on Escape, backdrop click, X or Annuleren.\n */\nconst props = withDefaults(defineProps<{\n  open: boolean;\n  title: string;\n  description?: string;\n  width?: number;\n  form?: boolean;\n  submitLabel?: string;\n  pendingLabel?: string;\n  cancelLabel?: string;\n  pending?: boolean;\n  destructive?: boolean;\n  guard?: { confirmClose: () => Promise<boolean> };\n}>(), {\n  description: \"\", width: 520, form: false, submitLabel: \"Opslaan\", pendingLabel: \"Opslaan...\",\n  cancelLabel: \"Annuleren\", pending: false, destructive: false, guard: undefined,\n});\nconst emit = defineEmits<{ close: []; submit: [] }>();\n\nconst titleId = useId();\nconst descriptionId = useId();\nconst dialogEl = ref<HTMLDialogElement | null>(null);\nlet returnFocus: HTMLElement | null = null;\n\nfunction show(): void {\n  const el = dialogEl.value;\n  if (!el || el.open)\n    return;\n  returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n  el.showModal();\n  // The browser focuses the first focusable element, which is the close button; a form starts at its first field.\n  const firstField = el.querySelector<HTMLElement>(\".dialog__body :is(input, select, textarea, [autofocus]):not(:disabled)\");\n  if (props.form && firstField)\n    firstField.focus();\n}\n\nfunction hide(): void {\n  const el = dialogEl.value;\n  if (!el?.open)\n    return;\n  el.close();\n}\n\nfunction restoreFocus(): void {\n  // Restore explicitly: not every browser returns focus to the trigger.\n  if (returnFocus?.isConnected)\n    returnFocus.focus();\n  returnFocus = null;\n}\n\nasync function requestClose(): Promise<void> {\n  if (props.pending)\n    return;\n  if (props.guard && !(await props.guard.confirmClose()))\n    return;\n  emit(\"close\");\n}\n\nfunction onNativeClose(): void {\n  restoreFocus();\n  // The browser can close a dialog on its own (repeated Escape); keep the parent state in sync.\n  if (props.open)\n    emit(\"close\");\n}\n\nfunction onBackdropClick(event: MouseEvent): void {\n  if (event.target === dialogEl.value)\n    void requestClose();\n}\n\nfunction onSubmit(): void {\n  if (props.form && !props.pending)\n    emit(\"submit\");\n}\n\nwatch(() => props.open, open => {\n  void nextTick(() => open ? show() : hide());\n}, { immediate: true });\n\nonBeforeUnmount(hide);\n</script>\n\n<style scoped>\n.dialog {\n  padding: 0;\n  margin: var(--dialog-top, auto) auto auto;\n  border: none;\n  background: transparent;\n  color: var(--foreground);\n  max-width: none;\n  max-height: none;\n}\n\n.dialog::backdrop {\n  background: var(--overlay);\n}\n\n.dialog__panel {\n  display: flex;\n  flex-direction: column;\n  width: min(var(--dialog-width), calc(100vw - 32px));\n  max-height: calc(100dvh - var(--dialog-top, 16px) - 16px);\n  background: var(--paper);\n  border: 1px solid var(--border);\n  border-radius: 0;\n  box-shadow: var(--shadow-overlay);\n}\n\n.dialog__header {\n  display: flex;\n  align-items: flex-start;\n  gap: 16px;\n  padding: 24px 24px 16px;\n}\n\n.dialog__heading {\n  flex: 1;\n  min-width: 0;\n}\n\n.dialog__title {\n  margin: 0;\n  font-size: 28px;\n  line-height: 1.05;\n  font-weight: 600;\n  letter-spacing: -0.05em;\n}\n\n.dialog__description {\n  margin: 6px 0 0;\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n\n.dialog__close {\n  display: grid;\n  place-items: center;\n  flex-shrink: 0;\n  width: 44px;\n  height: 44px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--foreground);\n  cursor: pointer;\n}\n\n.dialog__close:hover {\n  background: var(--hover);\n  color: var(--foreground);\n}\n\n.dialog__body {\n  flex: 1;\n  min-height: 0;\n  overflow-y: auto;\n  padding: 4px 24px 20px;\n}\n\n.dialog__footer {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  flex-wrap: wrap;\n  gap: 8px 16px;\n  padding: 16px 24px;\n  border-top: 1px solid var(--border);\n}\n\n.dialog__footer-start {\n  color: var(--muted-foreground);\n}\n\n.dialog__footer-start:empty {\n  display: none;\n}\n\n.dialog__actions {\n  display: flex;\n  justify-content: flex-end;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-left: auto;\n}\n\n@media (max-width: 767px) {\n  .dialog { margin: auto 0 0; }\n  .dialog__panel { width: 100vw; max-height: calc(100dvh - 20px); border-radius: 28px 28px 0 0; }\n  .dialog__header { padding: 24px 20px 12px; }\n  .dialog__body { padding: 12px 20px 24px; }\n  .dialog__footer { padding: 16px 20px calc(16px + env(safe-area-inset-bottom, 0px)); }\n}\n</style>\n","import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, renderSlot as _renderSlot, createVNode as _createVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, resolveDynamicComponent as _resolveDynamicComponent, withModifiers as _withModifiers, normalizeStyle as _normalizeStyle, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = [\"aria-labelledby\", \"aria-describedby\"]\nconst _hoisted_2 = { class: \"dialog__header\" }\nconst _hoisted_3 = { class: \"dialog__heading\" }\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = [\"id\"]\nconst _hoisted_6 = { class: \"dialog__body\" }\nconst _hoisted_7 = {\n  key: 0,\n  class: \"dialog__footer\"\n}\nconst _hoisted_8 = { class: \"dialog__footer-start\" }\nconst _hoisted_9 = { class: \"dialog__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Native modal dialog: inert background, Escape and top-layer stacking come from the browser. \"),\n    _createElementVNode(\"dialog\", {\n      ref: \"dialogEl\",\n      class: \"dialog\",\n      \"aria-labelledby\": $setup.titleId,\n      \"aria-describedby\": $props.description ? $setup.descriptionId : undefined,\n      onCancel: _withModifiers($setup.requestClose, [\"prevent\"]),\n      onClose: $setup.onNativeClose,\n      onClick: $setup.onBackdropClick\n    }, [\n      (_openBlock(), _createBlock(_resolveDynamicComponent($props.form ? 'form' : 'div'), {\n        class: \"dialog__panel\",\n        style: _normalizeStyle({ '--dialog-width': `${$props.width}px` }),\n        novalidate: $props.form || undefined,\n        onSubmit: _withModifiers($setup.onSubmit, [\"prevent\"])\n      }, {\n        default: _withCtx(() => [\n          _createElementVNode(\"header\", _hoisted_2, [\n            _createElementVNode(\"div\", _hoisted_3, [\n              _createElementVNode(\"h2\", {\n                id: $setup.titleId,\n                class: \"dialog__title\"\n              }, _toDisplayString($props.title), 9 /* TEXT, PROPS */, _hoisted_4),\n              ($props.description)\n                ? (_openBlock(), _createElementBlock(\"p\", {\n                    key: 0,\n                    id: $setup.descriptionId,\n                    class: \"dialog__description\"\n                  }, _toDisplayString($props.description), 9 /* TEXT, PROPS */, _hoisted_5))\n                : _createCommentVNode(\"v-if\", true),\n              _renderSlot(_ctx.$slots, \"header-meta\", {}, undefined, true)\n            ]),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"dialog__close\",\n              \"aria-label\": \"Sluiten\",\n              onClick: $setup.requestClose\n            }, [\n              _createVNode($setup[\"Icon\"], {\n                name: \"close\",\n                size: 20\n              })\n            ])\n          ]),\n          _createElementVNode(\"div\", _hoisted_6, [\n            _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n          ]),\n          ($props.form || _ctx.$slots.footer)\n            ? (_openBlock(), _createElementBlock(\"footer\", _hoisted_7, [\n                _createElementVNode(\"div\", _hoisted_8, [\n                  _renderSlot(_ctx.$slots, \"footer-start\", {}, undefined, true)\n                ]),\n                _createElementVNode(\"div\", _hoisted_9, [\n                  _renderSlot(_ctx.$slots, \"footer\", {}, () => [\n                    ($props.form)\n                      ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                          key: 0,\n                          disabled: $props.pending,\n                          onClick: $setup.requestClose\n                        }, {\n                          default: _withCtx(() => [\n                            _createTextVNode(_toDisplayString($props.cancelLabel), 1 /* TEXT */)\n                          ]),\n                          _: 1 /* STABLE */\n                        }, 8 /* PROPS */, [\"disabled\"]))\n                      : _createCommentVNode(\"v-if\", true),\n                    ($props.form)\n                      ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                          key: 1,\n                          type: \"submit\",\n                          variant: $props.destructive ? 'danger' : 'primary',\n                          disabled: $props.pending,\n                          \"data-testid\": \"dialog-submit\"\n                        }, {\n                          default: _withCtx(() => [\n                            _createTextVNode(_toDisplayString($props.pending ? $props.pendingLabel : $props.submitLabel), 1 /* TEXT */)\n                          ]),\n                          _: 1 /* STABLE */\n                        }, 8 /* PROPS */, [\"variant\", \"disabled\"]))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], true)\n                ])\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ]),\n        _: 3 /* FORWARDED */\n      }, 40 /* PROPS, NEED_HYDRATION */, [\"style\", \"novalidate\"]))\n    ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_1)\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Dialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Dialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Dialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Dialog.vue\";script.__scopeId = \"data-v-39c7a1e3\";export default script;","import { computed, onBeforeUnmount, reactive, readonly, ref } from \"vue\";\n\n/** Why the user is about to lose input; drives the wording of the confirmation (PRD 10.3, 12.1). */\nexport type LeaveReason = \"org-switch\" | \"navigate\" | \"close-dialog\";\n\ninterface PendingConfirmation {\n  reason: LeaveReason;\n  formLabels: string[];\n  resolve: (discard: boolean) => void;\n}\n\nconst dirtyForms = reactive(new Map<number, { label: string; isDirty: () => boolean }>());\nconst pending = ref<PendingConfirmation | null>(null);\nlet nextFormId = 1;\n\nconst dirtyLabels = computed(() => [...dirtyForms.values()].filter(form => form.isDirty()).map(form => form.label));\n\n/** True while any registered form holds unsaved input. */\nexport const hasUnsavedChanges = computed(() => dirtyLabels.value.length > 0);\n\n/** The confirmation currently on screen, rendered once by the shell (UnsavedChangesDialog). */\nexport const pendingConfirmation = readonly(pending);\n\n/**\n * Ask whether unsaved input may be discarded. Resolves true immediately when nothing is dirty.\n * `onlyForm` limits the check to one form (closing its own dialog), otherwise every dirty form counts.\n */\nexport function confirmDiscard(reason: LeaveReason, onlyForm?: number): Promise<boolean> {\n  const labels = onlyForm === undefined\n    ? dirtyLabels.value\n    : [dirtyForms.get(onlyForm)].filter(form => form?.isDirty()).map(form => form!.label);\n  if (!labels.length)\n    return Promise.resolve(true);\n  // A second request while one is open replaces it; the earlier caller keeps its current state.\n  pending.value?.resolve(false);\n  return new Promise(resolve => {\n    pending.value = {\n      reason,\n      formLabels: labels,\n      resolve: discard => {\n        pending.value = null;\n        resolve(discard);\n      },\n    };\n  });\n}\n\n/** Called by the shell's dialog buttons. */\nexport function answerConfirmation(discard: boolean): void {\n  pending.value?.resolve(discard);\n}\n\nfunction onBeforeUnload(event: BeforeUnloadEvent): void {\n  if (hasUnsavedChanges.value)\n    event.preventDefault();\n}\nwindow.addEventListener(\"beforeunload\", onBeforeUnload);\n\n/**\n * Guard a form by comparing its model with a reactive snapshot, so \"dirty\" clears after saving.\n * Prefer this over useFormGuard with a hand-written isDirty: a plain `let saved = ...` is not reactive\n * and leaves the form dirty forever.\n *\n *   const model = reactive({ ...initial });\n *   const form = useGuardedForm(\"Ontvangstinstellingen\", model);\n *   function save() { if (!validation.validate()) return; ...store...; form.commit(); }\n *   form.revert()                       // back to the last committed values\n *   form.load(fresh)                    // reopen a dialog with new values, clean\n *   <Dialog :guard=\"form\" ...>  /  :disabled=\"!form.isDirty.value\"\n *\n * `active` limits the guard, e.g. `() => open.value` for a dialog that keeps its model while closed.\n */\nexport function useGuardedForm<Model extends object>(label: string, model: Model, options: { active?: () => boolean } = {}) {\n  const snapshot = ref(JSON.stringify(model));\n  const guard = useFormGuard(label, () => (options.active?.() ?? true) && JSON.stringify(model) !== snapshot.value);\n\n  return {\n    id: guard.id,\n    isDirty: guard.isDirty,\n    confirmClose: guard.confirmClose,\n    /** Current values become the saved state. */\n    commit() {\n      snapshot.value = JSON.stringify(model);\n    },\n    /** Restore the last committed values. */\n    revert() {\n      Object.assign(model, JSON.parse(snapshot.value));\n    },\n    /** Replace the values and treat them as saved (e.g. when opening a dialog for another item). */\n    load(values: Partial<Model>) {\n      Object.assign(model, values);\n      snapshot.value = JSON.stringify(model);\n    },\n  };\n}\n\n/**\n * Register a form so org switches, route changes and dialog closes warn before its input is lost.\n * `isDirty` must only read reactive state; for the common model-vs-saved case use useGuardedForm.\n * Unregisters automatically when the component unmounts. Call `markSaved()` after a (simulated) save\n * if your `isDirty` cannot see that on its own.\n *\n *   const guard = useFormGuard(\"Contactpersoon\", () => JSON.stringify(model) !== initial);\n *   <Dialog form :dirty=\"guard.isDirty.value\" :guard-id=\"guard.id\" ...>\n */\nexport function useFormGuard(label: string, isDirty: () => boolean) {\n  const id = nextFormId++;\n  const saved = ref(false);\n  dirtyForms.set(id, { label, isDirty: () => !saved.value && isDirty() });\n  onBeforeUnmount(() => dirtyForms.delete(id));\n\n  return {\n    id,\n    isDirty: computed(() => !saved.value && isDirty()),\n    /** Treat the current input as saved until `reset()` is called. */\n    markSaved: () => {\n      saved.value = true;\n    },\n    /** Start tracking changes again, e.g. when a dialog is reopened with fresh input. */\n    reset: () => {\n      saved.value = false;\n    },\n    confirmClose: () => confirmDiscard(\"close-dialog\", id),\n  };\n}\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"unsaved__text\",\n  \"data-testid\": \"unsaved-text\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: Boolean($setup.pending),\n    title: \"Wijzigingen niet opgeslagen\",\n    width: 460,\n    onClose: _cache[2] || (_cache[2] = $event => ($setup.answerConfirmation(false)))\n  }, {\n    footer: _withCtx(() => [\n      _createVNode($setup[\"Button\"], {\n        \"data-testid\": \"unsaved-keep\",\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.answerConfirmation(false)))\n      }, {\n        default: _withCtx(() => _cache[3] || (_cache[3] = [\n          _createTextVNode(\"Verder bewerken\", -1 /* CACHED */)\n        ])),\n        _: 1 /* STABLE */,\n        __: [3]\n      }),\n      _createVNode($setup[\"Button\"], {\n        variant: \"danger\",\n        \"data-testid\": \"unsaved-discard\",\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.answerConfirmation(true)))\n      }, {\n        default: _withCtx(() => [\n          _createTextVNode(_toDisplayString($setup.discardLabel), 1 /* TEXT */)\n        ]),\n        _: 1 /* STABLE */\n      })\n    ]),\n    default: _withCtx(() => [\n      _createElementVNode(\"p\", _hoisted_1, _toDisplayString($setup.text), 1 /* TEXT */)\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/UnsavedChangesDialog.vue\";script.__scopeId = \"data-v-ee6eef07\";export default script;","import { readonly, ref } from \"vue\";\n\nexport type ToastTone = \"success\" | \"info\" | \"error\";\n\nexport interface Toast {\n  id: number;\n  message: string;\n  tone: ToastTone;\n  undo?: () => unknown;\n}\n\nconst toasts = ref<Toast[]>([]);\nlet nextId = 1;\n\nexport const activeToasts = readonly(toasts);\n\n/**\n * Short, non-blocking feedback after a (simulated) action: showToast(\"Contactpersoon opgeslagen\").\n * Never a replacement for a field error or an explanation inside a dialog.\n * With `undo` the toast offers \"Ongedaan maken\", also reachable with Cmd/Ctrl+Z while it is visible.\n */\nexport function showToast(message: string, options: { tone?: ToastTone; durationMs?: number; undo?: () => unknown } = {}): void {\n  const id = nextId++;\n  // One message at a time: a rapid series of actions should not stack up.\n  toasts.value = [{ id, message, tone: options.tone ?? \"success\", undo: options.undo }];\n  window.setTimeout(() => {\n    toasts.value = toasts.value.filter(toast => toast.id !== id);\n  }, options.durationMs ?? (options.undo ? 8000 : 3500));\n}\n\n/** Runs a visible toast's undo once; the toast disappears so the undo cannot repeat. */\nexport function undoToast(id: number): boolean {\n  const toast = toasts.value.find(item => item.id === id);\n  if (!toast?.undo)\n    return false;\n  toasts.value = toasts.value.filter(item => item.id !== id);\n  void toast.undo();\n  return true;\n}\n\nwindow.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n  if (event.key.toLowerCase() !== \"z\" || !(event.metaKey || event.ctrlKey) || event.shiftKey || event.altKey)\n    return;\n  // Text fields keep the browser's own text undo.\n  if ((event.target as Element | null)?.closest?.(\"input, textarea, select, [contenteditable]:not([contenteditable='false'])\"))\n    return;\n  const toast = toasts.value.find(item => item.undo);\n  if (toast && undoToast(toast.id))\n    event.preventDefault();\n});\n","<template>\n  <div class=\"toasts\" role=\"status\" aria-live=\"polite\">\n    <div v-for=\"toast in activeToasts\" :key=\"toast.id\" class=\"toast\" :class=\"`toast--${toast.tone}`\">\n      <Icon :name=\"iconFor[toast.tone]\" :size=\"16\" class=\"toast__icon\" />\n      <span>{{ toast.message }}</span>\n      <button v-if=\"toast.undo\" type=\"button\" class=\"toast__undo\" aria-keyshortcuts=\"Meta+Z Control+Z\" @click=\"undoToast(toast.id)\">\n        Ongedaan maken <kbd class=\"toast__kbd\">{{ shortcut }}</kbd>\n      </button>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Icon from \"./Icon.vue\";\nimport { activeToasts, undoToast, type ToastTone } from \"../../lib/toast\";\nimport type { IconName } from \"../../lib/icons\";\n\nconst iconFor: Record<ToastTone, IconName> = { success: \"checkmark\", info: \"information\", error: \"warning-alt\" };\nconst shortcut = /Mac|iPhone|iPad/.test(navigator.platform) ? \"⌘Z\" : \"Ctrl+Z\";\n</script>\n\n<style scoped>\n.toasts {\n  position: fixed;\n  left: 50%;\n  bottom: 24px;\n  z-index: 60;\n  transform: translateX(-50%);\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  max-width: calc(100vw - 32px);\n  pointer-events: none;\n}\n\n.toast {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  min-height: 44px;\n  padding: 10px 16px;\n  background: var(--surface-raised);\n  border: 1px solid var(--border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-overlay);\n  font-size: 14px;\n}\n\n.toast__undo {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  margin-left: 6px;\n  padding: 6px 12px;\n  border: 0;\n  border-radius: var(--radius-control);\n  background: var(--primary);\n  color: var(--primary-foreground);\n  font: inherit;\n  font-size: 13px;\n  font-weight: 700;\n  white-space: nowrap;\n  pointer-events: auto;\n  cursor: pointer;\n}\n\n.toast__undo:focus-visible {\n  outline: 2px solid var(--ring);\n  outline-offset: 2px;\n}\n\n@media (hover: hover) {\n  .toast__undo:hover { background: var(--primary-hover); }\n}\n\n.toast__kbd {\n  font: inherit;\n  font-size: 12px;\n  opacity: 0.7;\n}\n\n.toast__icon {\n  flex-shrink: 0;\n  color: var(--primary);\n}\n\n.toast--info .toast__icon {\n  color: var(--muted-foreground);\n}\n\n.toast--error .toast__icon {\n  color: var(--danger);\n}\n\n@media (max-width: 767px) {\n  .toasts { bottom: calc(92px + env(safe-area-inset-bottom, 0px)); }\n}\n</style>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"toasts\",\n  role: \"status\",\n  \"aria-live\": \"polite\"\n}\nconst _hoisted_2 = [\"onClick\"]\nconst _hoisted_3 = { class: \"toast__kbd\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.activeToasts, (toast) => {\n      return (_openBlock(), _createElementBlock(\"div\", {\n        key: toast.id,\n        class: _normalizeClass([\"toast\", `toast--${toast.tone}`])\n      }, [\n        _createVNode($setup[\"Icon\"], {\n          name: $setup.iconFor[toast.tone],\n          size: 16,\n          class: \"toast__icon\"\n        }, null, 8 /* PROPS */, [\"name\"]),\n        _createElementVNode(\"span\", null, _toDisplayString(toast.message), 1 /* TEXT */),\n        (toast.undo)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 0,\n              type: \"button\",\n              class: \"toast__undo\",\n              \"aria-keyshortcuts\": \"Meta+Z Control+Z\",\n              onClick: $event => ($setup.undoToast(toast.id))\n            }, [\n              _cache[0] || (_cache[0] = _createTextVNode(\" Ongedaan maken \", -1 /* CACHED */)),\n              _createElementVNode(\"kbd\", _hoisted_3, _toDisplayString($setup.shortcut), 1 /* TEXT */)\n            ], 8 /* PROPS */, _hoisted_2))\n          : _createCommentVNode(\"v-if\", true)\n      ], 2 /* CLASS */))\n    }), 128 /* KEYED_FRAGMENT */))\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ToastHost.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ToastHost.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ToastHost.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ToastHost.vue\";script.__scopeId = \"data-v-330549f5\";export default script;","import { withModifiers as _withModifiers, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createVNode as _createVNode, renderSlot as _renderSlot, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"data-section\"]\nconst _hoisted_2 = [\"inert\"]\nconst _hoisted_3 = {\n  key: 0,\n  class: \"shell__notice\"\n}\nconst _hoisted_4 = {\n  key: 0,\n  class: \"shell__demo\",\n  role: \"note\",\n  title: \"Gesimuleerde gegevens; niets wordt opgeslagen of verzonden.\",\n  \"data-testid\": \"demo-notice\"\n}\nconst _hoisted_5 = { class: \"shell__body\" }\nconst _hoisted_6 = [\"inert\"]\nconst _hoisted_7 = { class: \"shell__content\" }\nconst _hoisted_8 = [\"inert\"]\nconst _hoisted_9 = [\"href\", \"aria-current\", \"data-testid\"]\nconst _hoisted_10 = { class: \"shell__mobile-icon\" }\nconst _hoisted_11 = {\n  key: 0,\n  width: \"20\",\n  height: \"20\",\n  viewBox: \"0 0 20 20\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.8\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_12 = [\"d\"]\nconst _hoisted_13 = [\"aria-expanded\"]\nconst _hoisted_14 = { class: \"shell__mobile-icon\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"shell\", { 'shell--drawer': $setup.drawerMode, 'shell--demo': $props.demo }]),\n    \"data-section\": $props.section\n  }, [\n    _createElementVNode(\"a\", {\n      class: \"shell__skip\",\n      href: \"#velkom-main\",\n      inert: $setup.drawerModal || undefined,\n      onClick: _withModifiers($setup.focusMain, [\"prevent\"])\n    }, \"Naar inhoud\", 8 /* PROPS */, _hoisted_2),\n    _createVNode($setup[\"Topbar\"], {\n      ref: \"topbar\",\n      \"org-name\": $props.orgName,\n      \"home-href\": $setup.buildHash($props.org, 'overzicht'),\n      user: $props.user,\n      \"active-org\": $props.activeOrg,\n      organizations: $props.organizations,\n      demo: $props.demo,\n      authenticated: $props.authenticated,\n      \"drawer-open\": $setup.drawerOpen,\n      inert: $setup.drawerModal || undefined,\n      onOpenSearch: $setup.openSearch,\n      onToggleDrawer: $setup.toggleDrawer,\n      onSelectOrg: _cache[0] || (_cache[0] = slug => $setup.emit('selectOrg', slug)),\n      onResetDemo: _cache[1] || (_cache[1] = $event => ($setup.emit('resetDemo'))),\n      onLogout: _cache[2] || (_cache[2] = $event => ($setup.emit('logout')))\n    }, {\n      notice: _withCtx(() => [\n        ($props.demo)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n              ($props.demo)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, \"Demo\"))\n                : _createCommentVNode(\"v-if\", true)\n            ]))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"org-name\", \"home-href\", \"user\", \"active-org\", \"organizations\", \"demo\", \"authenticated\", \"drawer-open\", \"inert\"]),\n    _createElementVNode(\"div\", _hoisted_5, [\n      _createVNode($setup[\"Sidebar\"], {\n        \"nav-items\": $props.navItems,\n        org: $props.org,\n        section: $props.section,\n        tab: $props.tab,\n        collapsed: $setup.collapsed,\n        drawer: $setup.drawerMode,\n        \"drawer-open\": $setup.drawerOpen,\n        searchable: $props.demo,\n        onToggleCollapse: $setup.toggleCollapse,\n        onCloseDrawer: _cache[3] || (_cache[3] = $event => ($setup.closeDrawer('dismiss'))),\n        onNavigated: _cache[4] || (_cache[4] = $event => ($setup.closeDrawer('navigated'))),\n        onOpenSearch: $setup.openSearch\n      }, null, 8 /* PROPS */, [\"nav-items\", \"org\", \"section\", \"tab\", \"collapsed\", \"drawer\", \"drawer-open\", \"searchable\"]),\n      ($setup.drawerModal)\n        ? (_openBlock(), _createElementBlock(\"div\", {\n            key: 0,\n            class: \"shell__scrim\",\n            \"aria-hidden\": \"true\",\n            onClick: _cache[5] || (_cache[5] = $event => ($setup.closeDrawer('dismiss')))\n          }))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"main\", {\n        id: \"velkom-main\",\n        ref: \"mainEl\",\n        class: \"shell__main\",\n        tabindex: \"-1\",\n        \"data-testid\": \"content\",\n        inert: $setup.drawerModal || undefined\n      }, [\n        _createElementVNode(\"div\", _hoisted_7, [\n          _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n        ])\n      ], 8 /* PROPS */, _hoisted_6)\n    ]),\n    _createElementVNode(\"nav\", {\n      class: \"shell__mobile-nav\",\n      \"aria-label\": \"Snelle navigatie\",\n      inert: $setup.drawerModal || undefined,\n      \"data-testid\": \"mobile-navigation\"\n    }, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.mobileNavItems, (item) => {\n        return (_openBlock(), _createElementBlock(\"a\", {\n          key: item.section,\n          class: _normalizeClass([\"shell__mobile-item\", { 'shell__mobile-item--active': item.section === $props.section }]),\n          href: $setup.buildHash($props.org, item.section),\n          \"aria-current\": item.section === $props.section ? 'page' : undefined,\n          \"data-testid\": `mobile-nav-${item.section}`\n        }, [\n          _createElementVNode(\"span\", _hoisted_10, [\n            ($props.demo && $setup.mobileIcons[item.section])\n              ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_11, [\n                  _createElementVNode(\"path\", {\n                    d: $setup.mobileIcons[item.section]\n                  }, null, 8 /* PROPS */, _hoisted_12)\n                ]))\n              : (_openBlock(), _createBlock($setup[\"Icon\"], {\n                  key: 1,\n                  name: item.icon,\n                  size: 20\n                }, null, 8 /* PROPS */, [\"name\"]))\n          ]),\n          _createElementVNode(\"span\", null, _toDisplayString(item.section === 'overzicht' ? 'Nu binnen' : item.section === 'contactpersonen' ? ($props.demo ? 'Medewerkers' : 'Contacten') : item.label), 1 /* TEXT */)\n        ], 10 /* CLASS, PROPS */, _hoisted_9))\n      }), 128 /* KEYED_FRAGMENT */)),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass([\"shell__mobile-item\", { 'shell__mobile-item--active': $setup.moreActive }]),\n        \"aria-expanded\": $setup.drawerOpen,\n        \"aria-label\": \"Meer navigatie\",\n        \"aria-controls\": \"velkom-sidebar\",\n        \"data-testid\": \"mobile-nav-more\",\n        onClick: $setup.openMore\n      }, [\n        _createElementVNode(\"span\", _hoisted_14, [\n          _createVNode($setup[\"Icon\"], {\n            name: \"menu\",\n            size: 20\n          })\n        ]),\n        _cache[6] || (_cache[6] = _createElementVNode(\"span\", null, \"Meer\", -1 /* CACHED */))\n      ], 10 /* CLASS, PROPS */, _hoisted_13)\n    ], 8 /* PROPS */, _hoisted_8),\n    ($props.demo)\n      ? _renderSlot(_ctx.$slots, \"search\", {\n          key: 0,\n          open: $setup.searchOpen,\n          close: $setup.closeSearch\n        }, undefined, true)\n      : _createCommentVNode(\"v-if\", true),\n    _createVNode($setup[\"UnsavedChangesDialog\"]),\n    _createVNode($setup[\"ToastHost\"])\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/AppShell.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/AppShell.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/AppShell.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/shell/AppShell.vue\";script.__scopeId = \"data-v-d003ede0\";export default script;","<script setup lang=\"ts\">\nimport { computed, type Component } from \"vue\";\nimport type { AdminBootstrap } from \"@mod-velkom/js/admin-rpc\";\nimport OverviewView from \"./customer/OverviewView.vue\";\nimport BezoekenView from \"./customer/BezoekenView.vue\";\nimport ContactpersonenView from \"./customer/ContactpersonenView.vue\";\nimport InstellingenView from \"./customer/InstellingenView.vue\";\nimport SchermenView from \"./customer/SchermenView.vue\";\nimport KoppelingenView from \"./customer/KoppelingenView.vue\";\nimport PageHeader from \"../components/ui/PageHeader.vue\";\nimport EmptyState from \"../components/ui/EmptyState.vue\";\nimport { isCustomerRouteAllowed } from \"../lib/customer\";\nimport { route } from \"../lib/router\";\n\nconst props = defineProps<{ bootstrap: AdminBootstrap }>();\nconst emit = defineEmits<{ logout: []; organizationSaved: [profile: { name: string }] }>();\nconst views: Record<string, Component> = { overzicht: OverviewView, bezoeken: BezoekenView, contactpersonen: ContactpersonenView, schermen: SchermenView, koppelingen: KoppelingenView, instellingen: InstellingenView };\nconst allowed = computed(() => isCustomerRouteAllowed({ route: route.value, features: props.bootstrap.features }));\n</script>\n\n<template>\n  <component :is=\"views[route.section]\" v-if=\"allowed\" :bootstrap=\"bootstrap\" @logout=\"emit('logout')\" @organization-saved=\"emit('organizationSaved', $event)\" />\n  <template v-else>\n    <PageHeader title=\"Pagina niet beschikbaar\" />\n    <EmptyState kind=\"error\" title=\"Deze pagina is niet beschikbaar\" description=\"Kies een pagina in de navigatie.\" data-testid=\"customer-route-denied\" />\n  </template>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"../../../../../js/admin-rpc\";\nimport OverviewHero from \"../../components/dashboard/OverviewHero.vue\";\nimport OverviewMobile from \"../../components/dashboard/OverviewMobile.vue\";\nimport type { MobileVisit } from \"../../components/dashboard/mobile-overview\";\nimport StatCard from \"../../components/dashboard/StatCard.vue\";\nimport OverviewTimeline from \"../../components/dashboard/OverviewTimeline.vue\";\nimport { overviewPresentation, type OverviewStatus } from \"../../components/dashboard/overview-presentation\";\nimport { greetingAt } from \"../../components/dashboard/clock\";\nimport { formatCount, formatTime } from \"../../lib/format\";\nimport { showToast } from \"../../lib/toast\";\nimport EmptyState from \"../../components/ui/EmptyState.vue\";\nimport Button from \"../../components/ui/Button.vue\";\nimport { customerHref } from \"../../lib/customer\";\nimport TodayVisitsList from \"../../components/dashboard/TodayVisitsList.vue\";\n\ndefineProps<{ bootstrap: AdminBootstrap }>();\nconst api = rpc(\"velkom:admin\");\nconst totals = ref<Awaited<ReturnType<typeof api.overview>> | null>(null);\ntype TodayVisit = { id: string; expectedAt: Date; expectedEndAt: Date; status: OverviewStatus; visitorName: string; visitorCompany: string; hostName: string; departedAt?: string | null };\nconst today = ref<TodayVisit[]>([]);\nconst present = ref<MobileVisit[]>([]);\nconst now = ref(new Date());\nconst pending = ref(false);\nconst error = ref(\"\");\nconst actionError = ref(\"\");\nconst checkoutPending = ref(false);\nconst presentation = computed(() => overviewPresentation({ visits: today.value, now: now.value }));\nconst list = ref<InstanceType<typeof TodayVisitsList> | null>(null);\n\n/** The overview needs every page so the timeline and next guest are not truncated at 100 visits. */\nasync function allPages<T>(fetchPage: (offset: number) => Promise<{ items: T[]; total: number }>): Promise<T[]> {\n  const items: T[] = [];\n  let total: number;\n  do {\n    const page = await fetchPage(items.length);\n    total = page.total;\n    if (!page.items.length && items.length < total)\n      throw new Error(\"Incomplete visit page\");\n    items.push(...page.items);\n  } while (items.length < total);\n  return items;\n}\n\nasync function load(): Promise<void> {\n  if (pending.value)\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    now.value = new Date();\n    const date = new Intl.DateTimeFormat(\"sv-SE\", { timeZone: \"Europe/Amsterdam\" }).format(now.value);\n    const [overview, registrations, expected, presence] = await Promise.all([\n      api.overview({ date }),\n      allPages(offset => api.visits({ date, offset, limit: 100 })),\n      allPages(offset => api.expectedVisits({ date, offset, limit: 100 })),\n      api.evacuation(),\n    ]);\n    totals.value = overview;\n    // Today's registrations exclude guests who arrived earlier and have not checked out.\n    present.value = presence.map(visit => ({\n      id: visit.id, status: \"binnen\", visitorName: `${visit.firstname} ${visit.lastname}`.trim(), visitorCompany: visit.company,\n      hostContactId: visit.employeeId, hostName: visit.employeeName, arrivedAt: visit.registeredAt ? new Date(visit.registeredAt) : null,\n    }));\n    // Registration records arrival; only an explicit departure removes a visitor from presence.\n    today.value = [\n      ...registrations.filter(visit => visit.registeredAt).map(visit => ({\n        id: `r${visit.id}`, expectedAt: new Date(visit.registeredAt!), expectedEndAt: new Date(visit.appointmentUntil), status: visit.departedAt ? \"vertrokken\" as const : \"binnen\" as const,\n        visitorName: `${visit.firstname} ${visit.lastname}`.trim(), visitorCompany: visit.company, hostName: visit.employeeName, departedAt: visit.departedAt,\n      })),\n      ...expected.filter(visit => new Date(visit.startsAt) > now.value).map(visit => ({\n        id: `e${visit.id}`, expectedAt: new Date(visit.startsAt), expectedEndAt: new Date(visit.endsAt), status: \"verwacht\" as const,\n        visitorName: visit.name, visitorCompany: visit.email, hostName: visit.employeeName,\n      })),\n    ].toSorted((a, b) => a.expectedAt.getTime() - b.expectedAt.getTime());\n  } catch {\n    totals.value = null;\n    today.value = [];\n    present.value = [];\n    error.value = \"Het overzicht kon niet worden geladen. Probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n// Presence totals include earlier arrivals; appointment times never establish a departure.\nconst summary = computed(() => {\n  if (pending.value && !totals.value)\n    return \"Overzicht laden...\";\n  if (!totals.value)\n    return \"\";\n  const { inside } = totals.value;\n  const next = presentation.value.next;\n  return `${inside} ${inside === 1 ? \"gast is\" : \"gasten zijn\"} binnen.${next ? ` Om ${formatTime(next.expectedAt)} komt ${next.visitorName} voor ${next.hostName}.` : \" Verder niemand meer verwacht vandaag.\"}`;\n});\n\nasync function checkout(id: string): Promise<void> {\n  if (checkoutPending.value)\n    return;\n  const visit = today.value.find(item => item.id === id && item.status === \"binnen\");\n  if (!visit)\n    return;\n  checkoutPending.value = true;\n  actionError.value = \"\";\n  try {\n    const visitId = Number(id.slice(1));\n    const { departedAt } = await api.checkoutVisit({ id: visitId });\n    showToast(`${visit.visitorName} is afgemeld.`, { undo: () => undoCheckout({ id: visitId, name: visit.visitorName, departedAt: departedAt! }) });\n    await load();\n  } catch {\n    actionError.value = \"Afmelden is niet gelukt. Probeer het opnieuw.\";\n  } finally {\n    checkoutPending.value = false;\n  }\n}\n\n/** Puts a departed visitor back inside, also long after the checkout toast is gone. */\nasync function restore(id: string): Promise<void> {\n  const visit = today.value.find(item => item.id === id && item.status === \"vertrokken\");\n  if (visit?.departedAt)\n    await undoCheckout({ id: Number(id.slice(1)), name: visit.visitorName, departedAt: visit.departedAt });\n}\n\nasync function undoCheckout({ id, name, departedAt }: { id: number; name: string; departedAt: string }): Promise<void> {\n  if (checkoutPending.value)\n    return;\n  checkoutPending.value = true;\n  actionError.value = \"\";\n  try {\n    await api.undoCheckoutVisit({ id, departedAt });\n    showToast(`${name} is weer binnen.`, { tone: \"info\" });\n    await load();\n  } catch {\n    actionError.value = `Het afmelden van ${name} kon niet ongedaan worden gemaakt.`;\n  } finally {\n    checkoutPending.value = false;\n  }\n}\nonMounted(() => { void load(); });\n</script>\n\n<template>\n  <div class=\"customer-overview\">\n    <OverviewMobile v-if=\"totals && bootstrap.features.includes('visits')\" :visits=\"present\" :location-label=\"bootstrap.customer.name\" org-slug=\"customer\" />\n    <OverviewHero class=\"customer-overview__hero\" :class=\"{ 'customer-overview__hero--desktop': totals && bootstrap.features.includes('visits') }\" :greeting=\"greetingAt(now)\" :name=\"bootstrap.identity.name.split(' ')[0]\" :summary=\"summary\" :aria-busy=\"pending\">\n      <template #context><span>{{ bootstrap.customer.name }}</span></template>\n      <template #actions>\n        <a v-if=\"bootstrap.features.includes('visits')\" class=\"overview__link\" :href=\"customerHref('bezoeken', { query: { tab: 'ontruimingslijst' } })\">Ontruimingslijst</a>\n      </template>\n      <template #stats>\n        <EmptyState v-if=\"error\" kind=\"error\" title=\"Overzicht niet beschikbaar\" :description=\"error\">\n          <template #actions><Button @click=\"load\">Opnieuw proberen</Button></template>\n        </EmptyState>\n        <template v-else-if=\"totals\">\n          <StatCard label=\"Bezoeken vandaag\" :value=\"formatCount(totals.registered + totals.expected)\" :hint=\"`${formatCount(totals.departed)} vertrokken`\" data-testid=\"registered-count\" />\n          <StatCard label=\"Nu binnen\" :value=\"formatCount(totals.inside)\" hint=\"Nog niet afgemeld\" />\n          <StatCard v-if=\"bootstrap.features.includes('visits')\" label=\"Verwacht\" :value=\"formatCount(totals.expected)\" :hint=\"presentation.next ? `Vanaf ${formatTime(presentation.next.expectedAt)}` : 'Niemand meer verwacht'\" />\n          <!-- Pairing is known; no device heartbeat exists to claim that a screen is online. -->\n          <StatCard label=\"Schermen\" :value=\"bootstrap.customer.screenLimit === null ? String(bootstrap.customer.screenCount) : `${bootstrap.customer.screenCount}/${bootstrap.customer.screenLimit}`\" :hint=\"bootstrap.customer.screenLimit === null ? 'Onbeperkt' : 'In gebruik'\" />\n        </template>\n      </template>\n      <OverviewTimeline v-if=\"totals\" :visits=\"today\" :now=\"now\" @select=\"id => list?.reveal(id)\" />\n    </OverviewHero>\n    <!-- Gratis has no attention items, so the list takes the full width. -->\n    <p v-if=\"actionError\" class=\"customer-overview__error\" role=\"alert\">{{ actionError }}</p>\n    <TodayVisitsList v-if=\"totals && bootstrap.features.includes('visits')\" ref=\"list\" class=\"customer-overview__list\" :visits=\"today\" :show-location=\"false\" :filtered=\"false\" :checkout-pending=\"checkoutPending\"\n                     :all-visits-href=\"customerHref('bezoeken')\" :total=\"totals.registered + totals.expected\" empty-text=\"Er zijn vandaag nog geen bezoeken.\" can-restore @checkout=\"checkout\" @restore=\"restore\" />\n  </div>\n</template>\n\n<style scoped>\n.customer-overview { display: flex; flex-direction: column; gap: 32px; min-width: 0; }\n.overview__link { align-self: flex-start; display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 12px 20px; border: 1px solid var(--foreground); border-radius: var(--radius-control); background: transparent; color: var(--foreground); text-decoration: none; font-size: 14px; line-height: 1.15; font-weight: 700; cursor: pointer; transition: background 0.18s, transform 0.18s; }\n.overview__link:focus-visible { outline: 2px solid var(--foreground); outline-offset: 3px; }\n@media (hover: hover) { .overview__link:hover { background: #ffffff59; transform: translateY(-2px); } }\n.customer-overview__error { margin: 0; color: var(--danger); }\n@media (max-width: 767px) {\n  .customer-overview { gap: 0; }\n  .customer-overview__hero--desktop, .customer-overview__list { display: none; }\n}\n@media (prefers-reduced-motion: reduce) {\n  .overview__link { transition: none; }\n  .overview__link:hover { transform: none; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref } from \"vue\";\n\ndefineProps<{ greeting: string; name: string; summary: string }>();\nconst heroEl = ref<HTMLElement | null>(null);\nconst timelineEl = ref<HTMLElement | null>(null);\nconst stickyTop = ref(\"0px\");\n\n// The whole hero sticks with a negative top, so only the timeline stays in view while the list scrolls.\nfunction measure(): void {\n  if (timelineEl.value)\n    stickyTop.value = `${-(timelineEl.value.offsetTop - 24)}px`;\n}\nconst observer = new ResizeObserver(measure);\nonMounted(() => { if (heroEl.value) observer.observe(heroEl.value); measure(); });\nonBeforeUnmount(() => observer.disconnect());\n</script>\n\n<template>\n  <!-- Shared by every subscription so the supplied Ervaring composition stays identical; plans simply leave slots empty. -->\n  <section ref=\"heroEl\" class=\"overview-hero\" :class=\"{ 'overview-hero--sticky': $slots.default }\" :style=\"{ '--overview-hero-sticky-top': stickyTop }\" aria-labelledby=\"overview-title\">\n    <header class=\"overview-hero__header\">\n      <div class=\"overview-hero__heading\">\n        <div class=\"overview-hero__context\"><slot name=\"context\" /></div>\n        <h1 id=\"overview-title\" class=\"overview-hero__title\"><span>{{ greeting }}, {{ name }}<span class=\"overview-hero__dot\">.</span></span><slot name=\"title\" /></h1>\n        <p class=\"overview-hero__intro\">{{ summary }}</p>\n      </div>\n      <div class=\"overview-hero__actions\"><slot name=\"actions\" /></div>\n    </header>\n    <div class=\"overview-hero__bottom\">\n      <div class=\"overview-hero__stats\" role=\"group\" aria-label=\"Kerncijfers vandaag\"><slot name=\"stats\" /></div>\n      <slot name=\"aside\" />\n    </div>\n    <div v-if=\"$slots.default\" ref=\"timelineEl\"><slot /></div>\n  </section>\n</template>\n\n<style scoped>\n.overview-hero { position: relative; overflow: hidden; background: var(--accent); padding: 36px 40px 28px; display: flex; flex-direction: column; gap: 28px; color: var(--foreground); }\n.overview-hero__header { display: flex; flex-wrap: wrap; gap: 24px; align-items: flex-start; justify-content: space-between; position: relative; z-index: 1; }\n.overview-hero__heading { display: flex; flex-direction: column; gap: 10px; max-width: 640px; min-width: 0; }\n.overview-hero__context { display: flex; align-items: center; flex-wrap: wrap; gap: 4px; font-size: 12px; font-weight: 700; letter-spacing: 0.13em; text-transform: uppercase; }\n.overview-hero__context :deep(.location-context) { color: inherit; font: inherit; letter-spacing: inherit; text-transform: inherit; }\n.overview-hero__title { margin: 0; font-family: var(--font-display); font-size: clamp(48px, 5.4vw, 76px); line-height: 0.95; font-weight: 800; letter-spacing: -0.05em; text-wrap: wrap; }\n.overview-hero__dot { color: var(--coral); }\n.overview-hero__intro { margin: 0; font-size: 17px; }\n.overview-hero__actions { display: flex; flex-wrap: wrap; gap: 12px; }\n.overview-hero__bottom { display: flex; flex-wrap: wrap; gap: 24px 48px; align-items: flex-end; justify-content: space-between; position: relative; z-index: 1; }\n.overview-hero__stats { margin: 0; display: flex; flex-wrap: wrap; gap: 20px 44px; }\n/* Entrance from the supplied Main.html design: the panel wipes in, then title and figures rise. */\n.overview-hero { animation: overview-hero-wipe 0.8s cubic-bezier(0.7, 0, 0.2, 1) both; }\n.overview-hero__title { animation: overview-hero-rise 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) 0.25s both; }\n.overview-hero__bottom { animation: overview-hero-rise 0.7s cubic-bezier(0.2, 0.8, 0.2, 1) 0.4s both; }\n@keyframes overview-hero-wipe { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 0 0 0); } }\n@keyframes overview-hero-rise { from { opacity: 0; transform: translateY(28px); } to { opacity: 1; transform: none; } }\n@media (prefers-reduced-motion: reduce) {\n  .overview-hero, .overview-hero__title, .overview-hero__bottom { animation: none; }\n}\n@media (min-width: 768px) {\n  .overview-hero--sticky { position: sticky; top: var(--overview-hero-sticky-top); z-index: 5; }\n}\n@media (max-width: 767px) {\n  .overview-hero { padding: 24px 20px; }\n}\n</style>\n","import { createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = { class: \"overview-hero__header\" }\nconst _hoisted_2 = { class: \"overview-hero__heading\" }\nconst _hoisted_3 = { class: \"overview-hero__context\" }\nconst _hoisted_4 = {\n  id: \"overview-title\",\n  class: \"overview-hero__title\"\n}\nconst _hoisted_5 = { class: \"overview-hero__intro\" }\nconst _hoisted_6 = { class: \"overview-hero__actions\" }\nconst _hoisted_7 = { class: \"overview-hero__bottom\" }\nconst _hoisted_8 = {\n  class: \"overview-hero__stats\",\n  role: \"group\",\n  \"aria-label\": \"Kerncijfers vandaag\"\n}\nconst _hoisted_9 = {\n  key: 0,\n  ref: \"timelineEl\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Shared by every subscription so the supplied Ervaring composition stays identical; plans simply leave slots empty. \"),\n    _createElementVNode(\"section\", {\n      ref: \"heroEl\",\n      class: _normalizeClass([\"overview-hero\", { 'overview-hero--sticky': _ctx.$slots.default }]),\n      style: _normalizeStyle({ '--overview-hero-sticky-top': $setup.stickyTop }),\n      \"aria-labelledby\": \"overview-title\"\n    }, [\n      _createElementVNode(\"header\", _hoisted_1, [\n        _createElementVNode(\"div\", _hoisted_2, [\n          _createElementVNode(\"div\", _hoisted_3, [\n            _renderSlot(_ctx.$slots, \"context\", {}, undefined, true)\n          ]),\n          _createElementVNode(\"h1\", _hoisted_4, [\n            _createElementVNode(\"span\", null, [\n              _createTextVNode(_toDisplayString($props.greeting) + \", \" + _toDisplayString($props.name), 1 /* TEXT */),\n              _cache[0] || (_cache[0] = _createElementVNode(\"span\", { class: \"overview-hero__dot\" }, \".\", -1 /* CACHED */))\n            ]),\n            _renderSlot(_ctx.$slots, \"title\", {}, undefined, true)\n          ]),\n          _createElementVNode(\"p\", _hoisted_5, _toDisplayString($props.summary), 1 /* TEXT */)\n        ]),\n        _createElementVNode(\"div\", _hoisted_6, [\n          _renderSlot(_ctx.$slots, \"actions\", {}, undefined, true)\n        ])\n      ]),\n      _createElementVNode(\"div\", _hoisted_7, [\n        _createElementVNode(\"div\", _hoisted_8, [\n          _renderSlot(_ctx.$slots, \"stats\", {}, undefined, true)\n        ]),\n        _renderSlot(_ctx.$slots, \"aside\", {}, undefined, true)\n      ]),\n      (_ctx.$slots.default)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n            _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n          ], 512 /* NEED_PATCH */))\n        : _createCommentVNode(\"v-if\", true)\n    ], 6 /* CLASS, STYLE */)\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewHero.vue\";script.__scopeId = \"data-v-a9801059\";export default script;","<script setup lang=\"ts\">\nimport { computed, shallowRef } from \"vue\";\nimport { mobileOverview, type MobileVisit } from \"./mobile-overview\";\nimport { avatar } from \"../../lib/avatar\";\nimport { formatTime } from \"../../lib/format\";\nimport { buildHash } from \"../../lib/router\";\n\nconst props = withDefaults(defineProps<{\n  visits: readonly MobileVisit[];\n  locationLabel?: string;\n  locationFilter?: string;\n  orgSlug: string;\n}>(), { locationLabel: \"\", locationFilter: \"all\" });\nconst search = shallowRef(\"\");\nconst company = shallowRef(\"\");\nconst presence = computed(() => mobileOverview({ visits: props.visits, search: search.value, company: company.value }));\nconst locationQuery = computed<Record<string, string>>(() => props.locationFilter === \"all\" ? {} : { locatie: props.locationFilter });\n</script>\n\n<template>\n  <section class=\"overview-mobile\" aria-label=\"Nu binnen\" data-testid=\"overview-mobile\">\n    <header class=\"overview-mobile__header\">\n      <div class=\"overview-mobile__top\">\n        <div class=\"overview-mobile__location\">\n          <slot name=\"location\">{{ locationLabel }}</slot>\n        </div>\n        <a class=\"overview-mobile__calamity\" :href=\"buildHash(orgSlug, 'bezoeken', { ...locationQuery, tab: 'ontruimingslijst' })\">Calamiteit</a>\n      </div>\n      <div>\n        <h1 class=\"overview-mobile__count\" :aria-label=\"`${presence.total} ${presence.total === 1 ? 'bezoeker' : 'bezoekers'} binnen`\"><span>{{ presence.total }}</span><span>{{ presence.total === 1 ? \"bezoeker\" : \"bezoekers\" }} binnen</span></h1>\n        <p class=\"overview-mobile__summary\">Bij {{ presence.hostCount }} {{ presence.hostCount === 1 ? \"gastheer\" : \"gastheren\" }} · laatste aankomst {{ presence.lastArrival ? formatTime(presence.lastArrival) : \"Onbekend\" }}</p>\n      </div>\n    </header>\n    <div class=\"overview-mobile__filters\">\n      <label class=\"overview-mobile__search\">\n        <span class=\"visually-hidden\">Zoek een bezoeker op naam</span>\n        <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><circle cx=\"9\" cy=\"9\" r=\"5.5\" /><path d=\"M13.2 13.2L17 17\" /></svg>\n        <input v-model=\"search\" type=\"search\" spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"off\" placeholder=\"Zoek op naam\" data-testid=\"overview-mobile-search\">\n      </label>\n      <div class=\"overview-mobile__companies\" role=\"group\" aria-label=\"Filter op bedrijf\">\n        <button type=\"button\" :aria-pressed=\"!presence.company\" @click=\"company = ''\">Alle</button>\n        <button v-for=\"name in presence.companies\" :key=\"name\" type=\"button\" :aria-pressed=\"presence.company === name\" @click=\"company = name\">{{ name }}</button>\n      </div>\n    </div>\n    <ul class=\"overview-mobile__visitors\" :aria-label=\"presence.company ? `Bezoekers van ${presence.company}` : 'Alle bezoekers'\" data-testid=\"overview-mobile-visitors\">\n      <li v-for=\"visit in presence.rows\" :key=\"visit.id\">\n        <a :href=\"buildHash(orgSlug, 'bezoeken', { ...locationQuery, tab: 'vandaag' }, [String(visit.id)])\">\n          <span class=\"overview-mobile__avatar\" :style=\"{ background: avatar(visit.hostName).color }\" aria-hidden=\"true\">{{ avatar(visit.visitorName).initials }}</span>\n          <span class=\"overview-mobile__person\">\n            <span class=\"overview-mobile__person-top\"><span>{{ visit.visitorName }}</span><span>{{ visit.arrivedAt ? formatTime(visit.arrivedAt) : \"Onbekend\" }}</span></span>\n            <span class=\"overview-mobile__person-meta\">{{ visit.visitorCompany || \"Bedrijf niet ingesteld\" }} · bij {{ visit.hostName }}</span>\n          </span>\n        </a>\n      </li>\n      <li v-if=\"!presence.rows.length\" class=\"overview-mobile__empty\">{{ search || presence.company ? \"Niemand gevonden. Check de spelling of kies een ander bedrijf.\" : \"Er is nu niemand binnen.\" }}</li>\n    </ul>\n  </section>\n</template>\n\n<style scoped>\n.overview-mobile { display: none; min-width: 0; margin: -20px -20px 0; background: #f5f3ea; color: #19251f; font-family: var(--font-sans); }\n.overview-mobile__header { display: flex; flex: none; flex-direction: column; gap: 20px; padding: 58px 20px 24px; background: #c7ff63; }\n.overview-mobile__top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.overview-mobile__location { display: flex; align-items: center; gap: 6px; min-width: 0; min-height: 44px; font-size: 17px; font-weight: 600; }\n.overview-mobile__location :deep(.location-context), .overview-mobile__location :deep(.location-select), .overview-mobile__location :deep(.location-select__control) { min-width: 0; color: inherit; font: inherit; }\n.overview-mobile__location :deep(.location-select__label) { display: none; }\n.overview-mobile__location :deep(.location-select__control) { appearance: none; min-height: 44px; max-width: 100%; padding: 0; border: 0; border-radius: 0; background: transparent; }\n.overview-mobile__location > svg { flex: none; }\n.overview-mobile__calamity { display: inline-flex; align-items: center; justify-content: center; flex: none; min-height: 44px; padding: 0 18px; border: 1.5px solid currentColor; border-radius: 999px; background: transparent; color: inherit; font-size: 15px; font-weight: 700; text-decoration: none; cursor: pointer; }\n.overview-mobile__count { display: flex; align-items: baseline; gap: 12px; margin: 0; font-family: var(--font-display); font-weight: 650; }\n.overview-mobile__count > :first-child { font-size: 88px; line-height: 0.8; letter-spacing: -0.07em; }\n.overview-mobile__count > :last-child { font-size: 28px; line-height: 1; letter-spacing: -0.05em; }\n.overview-mobile__summary { margin: 12px 0 0; color: #4f5a53; font-size: 15px; line-height: 1.4; }\n.overview-mobile__filters { display: flex; flex: none; flex-direction: column; gap: 12px; padding: 16px 20px 0; }\n.overview-mobile__search { position: relative; display: block; }\n.overview-mobile__search > svg { position: absolute; left: 18px; top: 15px; color: #4f5a53; pointer-events: none; }\n.overview-mobile__search input { width: 100%; height: 50px; padding: 0 18px 0 48px; border: 0; border-radius: 999px; background: #ffffff; color: inherit; font-family: inherit; font-size: 16px; outline-offset: 2px; }\n.overview-mobile__search input::placeholder { color: #4f5a53; opacity: 1; }\n.overview-mobile__companies { display: flex; gap: 6px; overflow-x: auto; margin: 0 -20px; padding: 0 20px 2px; scrollbar-width: none; }\n.overview-mobile__companies::-webkit-scrollbar { display: none; }\n.overview-mobile__companies button { flex: none; min-height: 44px; padding: 0 16px; border: 0; border-radius: 999px; background: rgba(25, 37, 31, 0.07); color: inherit; font-family: inherit; font-size: 15px; font-weight: 600; white-space: nowrap; cursor: pointer; }\n.overview-mobile__companies button[aria-pressed=\"true\"] { background: #19251f; color: #f5f3ea; }\n.overview-mobile__visitors { flex: 1; min-height: 0; margin: 12px 0 0; padding: 0; list-style: none; line-height: normal; }\n.overview-mobile__visitors > li { border-top: 1px solid rgba(25, 37, 31, 0.16); }\n.overview-mobile__visitors a { display: flex; align-items: center; gap: 14px; padding: 14px 20px; color: inherit; text-decoration: none; cursor: pointer; }\n.overview-mobile__avatar { display: inline-flex; align-items: center; justify-content: center; flex: none; width: 44px; height: 44px; border-radius: 999px; color: #19251f; font-size: 15px; font-weight: 700; }\n.overview-mobile__person { display: flex; flex: 1; flex-direction: column; gap: 3px; min-width: 0; }\n.overview-mobile__person-top { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; }\n.overview-mobile__person-top > :first-child { font-size: 18px; font-weight: 600; letter-spacing: -0.01em; }\n.overview-mobile__person-top > :last-child { color: #4f5a53; font-size: 15px; white-space: nowrap; }\n.overview-mobile__person-meta { overflow: hidden; color: #4f5a53; font-size: 15px; text-overflow: ellipsis; white-space: nowrap; }\n.overview-mobile__empty { padding: 28px 20px; color: #4f5a53; font-size: 16px; }\n@media (max-width: 767px) { .overview-mobile { display: flex; flex-direction: column; } }\n</style>\n","/** Outcome of a demo mutation. Field errors are keyed by input field; \"form\" holds an error for the whole form. */\nexport type FieldErrors = Record<string, string>;\n\nexport type ActionResult<T = undefined> =\n  | { ok: true; value: T; message?: string }\n  | { ok: false; errors: FieldErrors; message?: string };\n\nexport function success<T>(value: T, message?: string): ActionResult<T> {\n  return { ok: true, value, message };\n}\n\nexport function failure<T = never>(errors: FieldErrors, message?: string): ActionResult<T> {\n  return { ok: false, errors, message: message ?? Object.values(errors)[0] };\n}\n\nexport function isValidEmail(value: string): boolean {\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n}\n\nexport function normalizeSearch(text: string): string {\n  return text.normalize(\"NFD\").replace(/[̀-ͯ]/g, \"\").toLowerCase().trim();\n}\n","import { normalizeSearch } from \"../../lib/result.ts\";\n\nexport type MobileVisit = {\n  id: string | number;\n  status: string;\n  visitorName: string;\n  visitorCompany: string;\n  hostContactId: string | number;\n  hostName: string;\n  arrivedAt: Date | null;\n};\n\n/** Keep the mobile presence count independent of its local name and company filters. */\nexport function mobileOverview({ visits, search = \"\", company = \"\" }: { visits: readonly MobileVisit[]; search?: string; company?: string }) {\n  const inside = visits.filter(visit => visit.status === \"binnen\")\n    .toSorted((a, b) => (b.arrivedAt?.getTime() ?? 0) - (a.arrivedAt?.getTime() ?? 0));\n  const companies = [...new Set(inside.map(visit => visit.visitorCompany).filter(Boolean))].sort((a, b) => a.localeCompare(b, \"nl\"));\n  // A checkout can remove the last guest of a company; never leave an invisible company filter active.\n  const selectedCompany = companies.includes(company) ? company : \"\";\n  const needle = normalizeSearch(search);\n  return {\n    total: inside.length,\n    hostCount: new Set(inside.map(visit => visit.hostContactId)).size,\n    lastArrival: inside[0]?.arrivedAt ?? null,\n    companies,\n    company: selectedCompany,\n    rows: inside.filter(visit => (!selectedCompany || visit.visitorCompany === selectedCompany) && (!needle || normalizeSearch(visit.visitorName).includes(needle))),\n  };\n}\n","const COLORS = [\"var(--accent)\", \"var(--sky)\", \"var(--lilac)\", \"var(--peach)\", \"var(--coral)\"];\n\n/** Matches the initials and stable name-based colors in the supplied designs. */\nexport function avatar(name: string): { initials: string; color: string } {\n  const parts = name.trim().split(/\\s+/);\n  let hash = 0;\n  for (let index = 0; index < name.length; index++)\n    hash = (hash * 31 + name.charCodeAt(index)) % 997;\n  return {\n    initials: name.trim() ? `${parts[0][0]}${parts[parts.length - 1][0]}`.toUpperCase() : \"\",\n    color: COLORS[hash % COLORS.length],\n  };\n}\n","/** Dutch display formatting. Everything renders in Europe/Amsterdam, independent of the browser's zone. */\n\nconst TIME_ZONE = \"Europe/Amsterdam\";\n\nconst euroWhole = new Intl.NumberFormat(\"nl-NL\", { style: \"currency\", currency: \"EUR\", minimumFractionDigits: 0, maximumFractionDigits: 0 });\nconst euroCents = new Intl.NumberFormat(\"nl-NL\", { style: \"currency\", currency: \"EUR\", minimumFractionDigits: 2, maximumFractionDigits: 2 });\nconst countFormat = new Intl.NumberFormat(\"nl-NL\");\nconst timeFormat = new Intl.DateTimeFormat(\"nl-NL\", { timeZone: TIME_ZONE, hour: \"2-digit\", minute: \"2-digit\" });\nconst dateFormat = new Intl.DateTimeFormat(\"nl-NL\", { timeZone: TIME_ZONE, day: \"numeric\", month: \"long\", year: \"numeric\" });\nconst dateLongFormat = new Intl.DateTimeFormat(\"nl-NL\", { timeZone: TIME_ZONE, weekday: \"long\", day: \"numeric\", month: \"long\", year: \"numeric\" });\n\n/** \"€ 1.490\" for whole amounts, \"€ 9,50\" otherwise. The space after € is a no-break space. */\nexport function formatEuro(amount: number): string {\n  return (Number.isInteger(amount) ? euroWhole : euroCents).format(amount);\n}\n\n/** \"10:02\" */\nexport function formatTime(date: Date): string {\n  return timeFormat.format(date);\n}\n\n/** \"8 oktober 2026\" */\nexport function formatDate(date: Date): string {\n  return dateFormat.format(date);\n}\n\n/** \"donderdag 8 oktober 2026\" */\nexport function formatDateLong(date: Date): string {\n  return dateLongFormat.format(date);\n}\n\n/** \"1.234\" */\nexport function formatCount(n: number): string {\n  return countFormat.format(n);\n}\n","import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"overview-mobile\",\n  \"aria-label\": \"Nu binnen\",\n  \"data-testid\": \"overview-mobile\"\n}\nconst _hoisted_2 = { class: \"overview-mobile__header\" }\nconst _hoisted_3 = { class: \"overview-mobile__top\" }\nconst _hoisted_4 = { class: \"overview-mobile__location\" }\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = [\"aria-label\"]\nconst _hoisted_7 = { class: \"overview-mobile__summary\" }\nconst _hoisted_8 = { class: \"overview-mobile__filters\" }\nconst _hoisted_9 = { class: \"overview-mobile__search\" }\nconst _hoisted_10 = {\n  class: \"overview-mobile__companies\",\n  role: \"group\",\n  \"aria-label\": \"Filter op bedrijf\"\n}\nconst _hoisted_11 = [\"aria-pressed\"]\nconst _hoisted_12 = [\"aria-pressed\", \"onClick\"]\nconst _hoisted_13 = [\"aria-label\"]\nconst _hoisted_14 = [\"href\"]\nconst _hoisted_15 = { class: \"overview-mobile__person\" }\nconst _hoisted_16 = { class: \"overview-mobile__person-top\" }\nconst _hoisted_17 = { class: \"overview-mobile__person-meta\" }\nconst _hoisted_18 = {\n  key: 0,\n  class: \"overview-mobile__empty\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _createElementVNode(\"div\", _hoisted_4, [\n          _renderSlot(_ctx.$slots, \"location\", {}, () => [\n            _createTextVNode(_toDisplayString($props.locationLabel), 1 /* TEXT */)\n          ], true)\n        ]),\n        _createElementVNode(\"a\", {\n          class: \"overview-mobile__calamity\",\n          href: $setup.buildHash($props.orgSlug, 'bezoeken', { ...$setup.locationQuery, tab: 'ontruimingslijst' })\n        }, \"Calamiteit\", 8 /* PROPS */, _hoisted_5)\n      ]),\n      _createElementVNode(\"div\", null, [\n        _createElementVNode(\"h1\", {\n          class: \"overview-mobile__count\",\n          \"aria-label\": `${$setup.presence.total} ${$setup.presence.total === 1 ? 'bezoeker' : 'bezoekers'} binnen`\n        }, [\n          _createElementVNode(\"span\", null, _toDisplayString($setup.presence.total), 1 /* TEXT */),\n          _createElementVNode(\"span\", null, _toDisplayString($setup.presence.total === 1 ? \"bezoeker\" : \"bezoekers\") + \" binnen\", 1 /* TEXT */)\n        ], 8 /* PROPS */, _hoisted_6),\n        _createElementVNode(\"p\", _hoisted_7, \"Bij \" + _toDisplayString($setup.presence.hostCount) + \" \" + _toDisplayString($setup.presence.hostCount === 1 ? \"gastheer\" : \"gastheren\") + \" · laatste aankomst \" + _toDisplayString($setup.presence.lastArrival ? $setup.formatTime($setup.presence.lastArrival) : \"Onbekend\"), 1 /* TEXT */)\n      ])\n    ]),\n    _createElementVNode(\"div\", _hoisted_8, [\n      _createElementVNode(\"label\", _hoisted_9, [\n        _cache[2] || (_cache[2] = _createElementVNode(\"span\", { class: \"visually-hidden\" }, \"Zoek een bezoeker op naam\", -1 /* CACHED */)),\n        _cache[3] || (_cache[3] = _createElementVNode(\"svg\", {\n          width: \"20\",\n          height: \"20\",\n          viewBox: \"0 0 20 20\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"1.8\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"circle\", {\n            cx: \"9\",\n            cy: \"9\",\n            r: \"5.5\"\n          }),\n          _createElementVNode(\"path\", { d: \"M13.2 13.2L17 17\" })\n        ], -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"input\", {\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.search) = $event)),\n          type: \"search\",\n          spellcheck: \"false\",\n          autocorrect: \"off\",\n          autocapitalize: \"off\",\n          placeholder: \"Zoek op naam\",\n          \"data-testid\": \"overview-mobile-search\"\n        }, null, 512 /* NEED_PATCH */), [\n          [_vModelText, $setup.search]\n        ])\n      ]),\n      _createElementVNode(\"div\", _hoisted_10, [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          \"aria-pressed\": !$setup.presence.company,\n          onClick: _cache[1] || (_cache[1] = $event => ($setup.company = ''))\n        }, \"Alle\", 8 /* PROPS */, _hoisted_11),\n        (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.presence.companies, (name) => {\n          return (_openBlock(), _createElementBlock(\"button\", {\n            key: name,\n            type: \"button\",\n            \"aria-pressed\": $setup.presence.company === name,\n            onClick: $event => ($setup.company = name)\n          }, _toDisplayString(name), 9 /* TEXT, PROPS */, _hoisted_12))\n        }), 128 /* KEYED_FRAGMENT */))\n      ])\n    ]),\n    _createElementVNode(\"ul\", {\n      class: \"overview-mobile__visitors\",\n      \"aria-label\": $setup.presence.company ? `Bezoekers van ${$setup.presence.company}` : 'Alle bezoekers',\n      \"data-testid\": \"overview-mobile-visitors\"\n    }, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.presence.rows, (visit) => {\n        return (_openBlock(), _createElementBlock(\"li\", {\n          key: visit.id\n        }, [\n          _createElementVNode(\"a\", {\n            href: $setup.buildHash($props.orgSlug, 'bezoeken', { ...$setup.locationQuery, tab: 'vandaag' }, [String(visit.id)])\n          }, [\n            _createElementVNode(\"span\", {\n              class: \"overview-mobile__avatar\",\n              style: _normalizeStyle({ background: $setup.avatar(visit.hostName).color }),\n              \"aria-hidden\": \"true\"\n            }, _toDisplayString($setup.avatar(visit.visitorName).initials), 5 /* TEXT, STYLE */),\n            _createElementVNode(\"span\", _hoisted_15, [\n              _createElementVNode(\"span\", _hoisted_16, [\n                _createElementVNode(\"span\", null, _toDisplayString(visit.visitorName), 1 /* TEXT */),\n                _createElementVNode(\"span\", null, _toDisplayString(visit.arrivedAt ? $setup.formatTime(visit.arrivedAt) : \"Onbekend\"), 1 /* TEXT */)\n              ]),\n              _createElementVNode(\"span\", _hoisted_17, _toDisplayString(visit.visitorCompany || \"Bedrijf niet ingesteld\") + \" · bij \" + _toDisplayString(visit.hostName), 1 /* TEXT */)\n            ])\n          ], 8 /* PROPS */, _hoisted_14)\n        ]))\n      }), 128 /* KEYED_FRAGMENT */)),\n      (!$setup.presence.rows.length)\n        ? (_openBlock(), _createElementBlock(\"li\", _hoisted_18, _toDisplayString($setup.search || $setup.presence.company ? \"Niemand gevonden. Check de spelling of kies een ander bedrijf.\" : \"Er is nu niemand binnen.\"), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ], 8 /* PROPS */, _hoisted_13)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewMobile.vue\";script.__scopeId = \"data-v-0022e808\";export default script;","<template>\n  <component :is=\"clickable ? 'button' : 'div'\"\n             class=\"stat-card\"\n             :class=\"{ 'stat-card--clickable': clickable, 'stat-card--active': active }\"\n             :type=\"clickable ? 'button' : undefined\"\n             :aria-pressed=\"clickable ? active : undefined\"\n             @click=\"clickable && emit('select')\">\n    <span class=\"stat-card__label\">{{ label }}</span>\n    <span class=\"stat-card__value\">{{ value }}</span>\n    <span v-if=\"hint\" class=\"stat-card__hint\">{{ hint }}</span>\n  </component>\n</template>\n\n<script setup lang=\"ts\">\nwithDefaults(defineProps<{\n  label: string;\n  value: string;\n  hint?: string;\n  clickable?: boolean;\n  active?: boolean;\n}>(), { hint: \"\", clickable: false, active: false });\n\nconst emit = defineEmits<{ select: [] }>();\n</script>\n\n<style scoped>\n.stat-card {\n  display: flex;\n  flex-direction: column;\n  gap: 4px;\n  min-width: 0;\n  padding: 0;\n  border: 0;\n  border-radius: 0;\n  background: transparent;\n  color: var(--foreground);\n  font: inherit;\n  text-align: left;\n}\n\n.stat-card--clickable {\n  cursor: pointer;\n  transition: box-shadow 120ms ease;\n}\n\n.stat-card--clickable:hover {\n  box-shadow: inset 0 -3px 0 var(--border-strong);\n}\n\n.stat-card--clickable:focus-visible {\n  outline: 2px solid var(--ring);\n  outline-offset: 2px;\n}\n\n/* The reference has no selected underline; pressed state remains available to assistive technology. */\n.stat-card--active {\n  box-shadow: none;\n}\n\n.stat-card__label {\n  font-size: 14px;\n  color: var(--foreground);\n  font-weight: 700;\n}\n\n.stat-card__value {\n  font-family: var(--font-display);\n  font-size: 64px;\n  font-weight: 800;\n  letter-spacing: -0.05em;\n  line-height: 1;\n}\n\n.stat-card__hint {\n  font-size: 14px;\n  color: var(--foreground);\n}\n\n@media (max-width: 767px) {\n  .stat-card__value {\n    font-size: 52px;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  .stat-card--clickable {\n    transition: none;\n  }\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"stat-card__label\" }\nconst _hoisted_2 = { class: \"stat-card__value\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"stat-card__hint\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_resolveDynamicComponent($props.clickable ? 'button' : 'div'), {\n    class: _normalizeClass([\"stat-card\", { 'stat-card--clickable': $props.clickable, 'stat-card--active': $props.active }]),\n    type: $props.clickable ? 'button' : undefined,\n    \"aria-pressed\": $props.clickable ? $props.active : undefined,\n    onClick: _cache[0] || (_cache[0] = $event => ($props.clickable && $setup.emit('select')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.label), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_2, _toDisplayString($props.value), 1 /* TEXT */),\n      ($props.hint)\n        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString($props.hint), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"class\", \"type\", \"aria-pressed\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/StatCard.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/StatCard.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/StatCard.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/StatCard.vue\";script.__scopeId = \"data-v-892ccb16\";export default script;","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { overviewPresentation, type OverviewStatus, type OverviewVisit } from \"./overview-presentation\";\nimport { formatTime } from \"../../lib/format\";\n\nconst props = withDefaults(defineProps<{ visits: readonly OverviewVisit[]; now: Date; statuses?: readonly OverviewStatus[] }>(), { statuses: () => [\"vertrokken\", \"binnen\", \"verwacht\"] });\nconst labels: Record<OverviewStatus, string> = { vertrokken: \"Vertrokken\", binnen: \"Binnen\", verwacht: \"Verwacht\", aangemeld: \"Aangemeld\", geannuleerd: \"Geannuleerd\" };\nconst emit = defineEmits<{ select: [id: string | number] }>();\nconst timeline = computed(() => overviewPresentation(props));\n// The design pops the points in from left to right after the line has started drawing.\nconst points = computed(() => timeline.value.points.toSorted((a, b) => a.position - b.position).map((point, index) => ({ ...point, delay: `${(0.45 + index * 0.045).toFixed(2)}s` })));\nconst description = computed(() => `Tijdlijn van vandaag, ${timeline.value.ticks[0].label} tot ${timeline.value.ticks.at(-1)?.label}. Het is ${formatTime(props.now)}. ${props.statuses.map(status => `${props.visits.filter(visit => visit.status === status).length} ${labels[status].toLowerCase()}`).join(\", \")}.`);\n</script>\n\n<template>\n  <div class=\"overview-timeline\" data-testid=\"overview-timeline\">\n    <p class=\"visually-hidden\">{{ description }}</p>\n    <div class=\"overview-timeline__axis\">\n      <span class=\"overview-timeline__line overview-timeline__line--remaining\" aria-hidden=\"true\" />\n      <span class=\"overview-timeline__line\" aria-hidden=\"true\" :style=\"{ width: `calc(${timeline.currentPosition}% + 44px)` }\" />\n      <span class=\"overview-timeline__now\" aria-hidden=\"true\" :style=\"{ left: `${timeline.currentPosition}%` }\" />\n      <span class=\"overview-timeline__now-label\" aria-hidden=\"true\" :class=\"{ 'overview-timeline__now-label--end': timeline.currentPosition > 85 }\" :style=\"{ left: `${timeline.currentPosition}%` }\">Nu {{ formatTime(now) }}</span>\n      <span v-for=\"(tick, index) in timeline.ticks\" :key=\"tick.label\" class=\"overview-timeline__tick\" aria-hidden=\"true\" :class=\"{ 'overview-timeline__tick--mobile': index === 0 || index === Math.floor(timeline.ticks.length / 2) || index === timeline.ticks.length - 1 }\" :style=\"{ left: `${tick.position}%` }\">{{ tick.label }}</span>\n      <button v-for=\"point in points\" :key=\"point.id\" type=\"button\" class=\"overview-timeline__point\" :class=\"`overview-timeline__point--${point.status}`\"\n              :aria-label=\"`${point.time}, ${point.visitorName} bij ${point.hostName}, ${labels[point.status].toLowerCase()}`\" :style=\"{ left: `${point.position}%`, animationDelay: point.delay }\" @click=\"emit('select', point.id)\">\n        <span class=\"overview-timeline__tip\" :class=\"{ 'overview-timeline__tip--start': point.position < 12, 'overview-timeline__tip--end': point.position > 88 }\" aria-hidden=\"true\">\n          <span class=\"overview-timeline__tip-time\">{{ point.time }} · {{ labels[point.status] }}</span>\n          <span class=\"overview-timeline__tip-visitor\">{{ point.visitorName }}</span>\n          <span class=\"overview-timeline__tip-host\">Gastheer: {{ point.hostName }}</span>\n        </span>\n      </button>\n    </div>\n    <div class=\"overview-timeline__legend\" aria-hidden=\"true\">\n      <span v-for=\"status in statuses\" :key=\"status\"><i class=\"overview-timeline__key\" :class=\"`overview-timeline__key--${status}`\" />{{ labels[status] }}</span>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.overview-timeline { position: relative; z-index: 1; }\n.overview-timeline__axis { position: relative; height: 84px; }\n.overview-timeline__line { position: absolute; left: -44px; top: 28.5px; height: 6px; border-radius: 999px; background: var(--foreground); transform-origin: left center; animation: timeline-grow 1.1s cubic-bezier(0.6, 0, 0.2, 1) 0.3s both; }\n.overview-timeline__line--remaining { width: calc(100% + 44px); opacity: 0.2; }\n/* `translate` composes with the animated `transform: scale` of the pop. */\n.overview-timeline__point { position: absolute; top: 31.5px; padding: 0; translate: -50% -50%; border-radius: 50%; box-sizing: border-box; cursor: pointer; animation: timeline-pop 0.5s cubic-bezier(0.3, 1.6, 0.5, 1) both; }\n/* A larger invisible hit area around the small dots. */\n.overview-timeline__point::before { content: \"\"; position: absolute; inset: -9px; border-radius: 50%; }\n.overview-timeline__point:hover, .overview-timeline__point:focus-visible { z-index: 2; }\n.overview-timeline__point:focus-visible { outline: 2px solid var(--ring); outline-offset: 3px; }\n.overview-timeline__tip { position: absolute; top: calc(100% + 12px); left: 50%; display: flex; flex-direction: column; gap: 2px; padding: 10px 14px; border-radius: 14px; background: var(--foreground); color: var(--surface-raised); box-shadow: var(--shadow-overlay); font-size: 13px; font-weight: 500; line-height: 1.35; text-align: left; white-space: nowrap; pointer-events: none; opacity: 0; transform: translate(-50%, -4px); transition: opacity 0.12s ease-out, transform 0.12s ease-out; }\n.overview-timeline__tip::after { content: \"\"; position: absolute; bottom: 100%; left: 50%; margin-left: -6px; border: 6px solid transparent; border-bottom-color: var(--foreground); }\n.overview-timeline__tip--start { left: -6px; transform: translateY(-4px); }\n.overview-timeline__tip--start::after { left: 14px; }\n.overview-timeline__tip--end { left: auto; right: -6px; transform: translateY(-4px); }\n.overview-timeline__tip--end::after { left: auto; right: 8px; }\n.overview-timeline__point:hover .overview-timeline__tip, .overview-timeline__point:focus-visible .overview-timeline__tip { opacity: 1; transform: translate(-50%, 0); }\n.overview-timeline__point:hover :is(.overview-timeline__tip--start, .overview-timeline__tip--end), .overview-timeline__point:focus-visible :is(.overview-timeline__tip--start, .overview-timeline__tip--end) { transform: none; }\n.overview-timeline__tip-time { font-weight: 700; }\n.overview-timeline__tip-visitor { font-size: 15px; font-weight: 700; }\n.overview-timeline__tip-host { opacity: 0.75; }\n.overview-timeline__point--vertrokken { width: 18px; height: 18px; background: var(--surface-raised); border: 4px solid var(--foreground); }\n.overview-timeline__point--binnen { width: 22px; height: 22px; background: var(--foreground); border: 4px solid var(--accent); }\n.overview-timeline__point--aangemeld { width: 18px; height: 18px; background: var(--foreground); }\n.overview-timeline__point--verwacht { width: 16px; height: 16px; background: var(--accent); border: 3px solid var(--foreground); }\n.overview-timeline__now { position: absolute; top: 20px; width: 24px; height: 24px; margin-left: -12px; border-radius: 50%; background: var(--coral); animation: timeline-pop 0.5s cubic-bezier(0.3, 1.6, 0.5, 1) 1.2s both, timeline-pulse 1.8s ease-out 1.7s infinite; }\n.overview-timeline__now-label { position: absolute; top: -8px; margin-left: 18px; font-size: 13px; font-weight: 700; white-space: nowrap; }\n.overview-timeline__now-label--end { margin-left: -18px; transform: translateX(-100%); }\n.overview-timeline__tick { position: absolute; top: 58px; transform: translateX(-50%); font-size: 13px; font-weight: 600; }\n.overview-timeline__legend { display: flex; flex-wrap: wrap; gap: 20px; font-size: 13px; font-weight: 600; }\n.overview-timeline__legend > span { display: inline-flex; align-items: center; gap: 8px; }\n.overview-timeline__key { display: inline-block; width: 18px; height: 18px; border-radius: 50%; box-sizing: border-box; }\n.overview-timeline__key--vertrokken { background: var(--surface-raised); border: 4px solid var(--foreground); }\n.overview-timeline__key--binnen { background: var(--foreground); border: 3px solid var(--accent); box-shadow: 0 0 0 1.5px var(--foreground); }\n.overview-timeline__key--aangemeld { background: var(--foreground); }\n.overview-timeline__key--verwacht { width: 14px; height: 14px; border: 3px solid var(--foreground); }\n@media (max-width: 640px) {\n  .overview-timeline__tick:not(.overview-timeline__tick--mobile) { display: none; }\n}\n@keyframes timeline-grow { from { transform: scaleX(0); } to { transform: scaleX(1); } }\n@keyframes timeline-pop { from { transform: scale(0); } to { transform: scale(1); } }\n@keyframes timeline-pulse {\n  from { box-shadow: 0 0 0 0 color-mix(in srgb, var(--coral) 55%, transparent); }\n  to { box-shadow: 0 0 0 20px color-mix(in srgb, var(--coral) 0%, transparent); }\n}\n@media (prefers-reduced-motion: reduce) {\n  .overview-timeline__now, .overview-timeline__line, .overview-timeline__point { animation: none; }\n  .overview-timeline__tip { transition: none; }\n}\n</style>\n","import { formatTime } from \"../../lib/format.ts\";\n\n// Kept free of demo types so the live Gratis overview can share it with the simulated plans.\nexport function minuteOfDay(date: Date): number {\n  const [hours, minutes] = formatTime(date).split(\":\").map(Number);\n  return hours * 60 + minutes;\n}\n\nexport function greetingAt(now: Date): string {\n  const current = minuteOfDay(now);\n  return current < 720 ? \"Goedemorgen\" : current < 1080 ? \"Goedemiddag\" : \"Goedenavond\";\n}\n","import { formatTime } from \"../../lib/format.ts\";\nimport { greetingAt, minuteOfDay } from \"./clock.ts\";\n// Live customers only know registrations (\"aangemeld\"), not presence; this type stays free of demo imports.\nexport type OverviewStatus = \"verwacht\" | \"binnen\" | \"vertrokken\" | \"geannuleerd\" | \"aangemeld\";\nexport type OverviewVisit = { id: string | number; expectedAt: Date; status: OverviewStatus; visitorName: string; hostName: string };\n\n/** Present today's scoped visits using the supplied design's Amsterdam clock and expected-time axis. */\nexport function overviewPresentation({ visits, now }: { visits: readonly OverviewVisit[]; now: Date }) {\n  const shown = visits.filter(visit => visit.status !== \"geannuleerd\");\n  const next = shown.filter(visit => visit.status === \"verwacht\").toSorted((a, b) => a.expectedAt.getTime() - b.expectedAt.getTime())[0];\n  const inside = shown.filter(visit => visit.status === \"binnen\").length;\n  const current = minuteOfDay(now);\n  // Keep the default 07:00 to 18:00 axis, extending it when current time or visits need more room.\n  const minutes = shown.map(visit => minuteOfDay(visit.expectedAt));\n  const start = Math.floor(Math.min(420, current, ...minutes) / 60) * 60;\n  const end = Math.ceil(Math.max(1080, current, ...minutes) / 60) * 60;\n  const position = (minute: number) => (minute - start) / (end - start) * 100;\n  return {\n    greeting: greetingAt(now),\n    summary: `${inside} ${inside === 1 ? \"gast is\" : \"gasten zijn\"} binnen.${next ? ` Om ${formatTime(next.expectedAt)} komt ${next.visitorName} voor ${next.hostName}.` : \" Verder niemand meer verwacht.\"}`,\n    next,\n    currentPosition: position(current),\n    points: shown.map(visit => ({ id: visit.id, status: visit.status, position: position(minuteOfDay(visit.expectedAt)), time: formatTime(visit.expectedAt), visitorName: visit.visitorName, hostName: visit.hostName })),\n    ticks: Array.from({ length: (end - start) / 60 + 1 }, (_, index) => ({ position: position(start + index * 60), label: `${String(start / 60 + index).padStart(2, \"0\")}:00` })),\n  };\n}\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"overview-timeline\",\n  \"data-testid\": \"overview-timeline\"\n}\nconst _hoisted_2 = { class: \"visually-hidden\" }\nconst _hoisted_3 = { class: \"overview-timeline__axis\" }\nconst _hoisted_4 = [\"aria-label\", \"onClick\"]\nconst _hoisted_5 = { class: \"overview-timeline__tip-time\" }\nconst _hoisted_6 = { class: \"overview-timeline__tip-visitor\" }\nconst _hoisted_7 = { class: \"overview-timeline__tip-host\" }\nconst _hoisted_8 = {\n  class: \"overview-timeline__legend\",\n  \"aria-hidden\": \"true\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"p\", _hoisted_2, _toDisplayString($setup.description), 1 /* TEXT */),\n    _createElementVNode(\"div\", _hoisted_3, [\n      _cache[0] || (_cache[0] = _createElementVNode(\"span\", {\n        class: \"overview-timeline__line overview-timeline__line--remaining\",\n        \"aria-hidden\": \"true\"\n      }, null, -1 /* CACHED */)),\n      _createElementVNode(\"span\", {\n        class: \"overview-timeline__line\",\n        \"aria-hidden\": \"true\",\n        style: _normalizeStyle({ width: `calc(${$setup.timeline.currentPosition}% + 44px)` })\n      }, null, 4 /* STYLE */),\n      _createElementVNode(\"span\", {\n        class: \"overview-timeline__now\",\n        \"aria-hidden\": \"true\",\n        style: _normalizeStyle({ left: `${$setup.timeline.currentPosition}%` })\n      }, null, 4 /* STYLE */),\n      _createElementVNode(\"span\", {\n        class: _normalizeClass([\"overview-timeline__now-label\", { 'overview-timeline__now-label--end': $setup.timeline.currentPosition > 85 }]),\n        \"aria-hidden\": \"true\",\n        style: _normalizeStyle({ left: `${$setup.timeline.currentPosition}%` })\n      }, \"Nu \" + _toDisplayString($setup.formatTime($props.now)), 7 /* TEXT, CLASS, STYLE */),\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.timeline.ticks, (tick, index) => {\n        return (_openBlock(), _createElementBlock(\"span\", {\n          key: tick.label,\n          class: _normalizeClass([\"overview-timeline__tick\", { 'overview-timeline__tick--mobile': index === 0 || index === Math.floor($setup.timeline.ticks.length / 2) || index === $setup.timeline.ticks.length - 1 }]),\n          \"aria-hidden\": \"true\",\n          style: _normalizeStyle({ left: `${tick.position}%` })\n        }, _toDisplayString(tick.label), 7 /* TEXT, CLASS, STYLE */))\n      }), 128 /* KEYED_FRAGMENT */)),\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.points, (point) => {\n        return (_openBlock(), _createElementBlock(\"button\", {\n          key: point.id,\n          type: \"button\",\n          class: _normalizeClass([\"overview-timeline__point\", `overview-timeline__point--${point.status}`]),\n          \"aria-label\": `${point.time}, ${point.visitorName} bij ${point.hostName}, ${$setup.labels[point.status].toLowerCase()}`,\n          style: _normalizeStyle({ left: `${point.position}%`, animationDelay: point.delay }),\n          onClick: $event => ($setup.emit('select', point.id))\n        }, [\n          _createElementVNode(\"span\", {\n            class: _normalizeClass([\"overview-timeline__tip\", { 'overview-timeline__tip--start': point.position < 12, 'overview-timeline__tip--end': point.position > 88 }]),\n            \"aria-hidden\": \"true\"\n          }, [\n            _createElementVNode(\"span\", _hoisted_5, _toDisplayString(point.time) + \" · \" + _toDisplayString($setup.labels[point.status]), 1 /* TEXT */),\n            _createElementVNode(\"span\", _hoisted_6, _toDisplayString(point.visitorName), 1 /* TEXT */),\n            _createElementVNode(\"span\", _hoisted_7, \"Gastheer: \" + _toDisplayString(point.hostName), 1 /* TEXT */)\n          ], 2 /* CLASS */)\n        ], 14 /* CLASS, STYLE, PROPS */, _hoisted_4))\n      }), 128 /* KEYED_FRAGMENT */))\n    ]),\n    _createElementVNode(\"div\", _hoisted_8, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.statuses, (status) => {\n        return (_openBlock(), _createElementBlock(\"span\", { key: status }, [\n          _createElementVNode(\"i\", {\n            class: _normalizeClass([\"overview-timeline__key\", `overview-timeline__key--${status}`])\n          }, null, 2 /* CLASS */),\n          _createTextVNode(_toDisplayString($setup.labels[status]), 1 /* TEXT */)\n        ]))\n      }), 128 /* KEYED_FRAGMENT */))\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/OverviewTimeline.vue\";script.__scopeId = \"data-v-1017dc66\";export default script;","<template>\n  <div class=\"empty\" :class=\"`empty--${kind}`\" :role=\"kind === 'error' ? 'alert' : undefined\" :data-testid=\"`empty-${kind}`\">\n    <Icon :name=\"icon ?? defaultIcon\" :size=\"24\" class=\"empty__icon\" />\n    <div class=\"empty__text\">\n      <p class=\"empty__title\">{{ title }}</p>\n      <p v-if=\"description\" class=\"empty__description\">{{ description }}</p>\n    </div>\n    <div v-if=\"$slots.actions\" class=\"empty__actions\">\n      <slot name=\"actions\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport type { IconName } from \"../../lib/icons\";\n\n/**\n * - \"empty\": nothing exists yet (\"Nog geen contactpersonen\"), offer the create action.\n * - \"no-results\": a search/filter matched nothing (\"Geen resultaten voor ...\"), offer \"Filters wissen\".\n * - \"error\" / \"offline\": explain what failed and what to do next.\n */\nconst props = withDefaults(defineProps<{\n  kind?: \"empty\" | \"no-results\" | \"error\" | \"offline\";\n  title: string;\n  description?: string;\n  icon?: IconName;\n}>(), { kind: \"empty\", description: \"\", icon: undefined });\n\nconst defaultIcon = computed<IconName>(() => ({ \"empty\": \"add\", \"no-results\": \"search\", \"error\": \"warning-alt\", \"offline\": \"wifi-off\" } as const)[props.kind]);\n</script>\n\n<style scoped>\n.empty {\n  display: flex;\n  flex-direction: column;\n  align-items: flex-start;\n  gap: 12px;\n  padding: 24px;\n  border: 1px dashed var(--border);\n  border-radius: var(--radius-panel);\n}\n\n.empty__icon {\n  color: var(--muted-foreground);\n}\n\n.empty--error .empty__icon {\n  color: var(--danger);\n}\n\n.empty--offline .empty__icon {\n  color: var(--warning);\n}\n\n.empty__title {\n  margin: 0;\n  font-size: 16px;\n  font-weight: 500;\n}\n\n.empty__description {\n  margin: 4px 0 0;\n  color: var(--muted-foreground);\n}\n\n.empty__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n</style>\n","import { createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"role\", \"data-testid\"]\nconst _hoisted_2 = { class: \"empty__text\" }\nconst _hoisted_3 = { class: \"empty__title\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"empty__description\"\n}\nconst _hoisted_5 = {\n  key: 0,\n  class: \"empty__actions\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"empty\", `empty--${$props.kind}`]),\n    role: $props.kind === 'error' ? 'alert' : undefined,\n    \"data-testid\": `empty-${$props.kind}`\n  }, [\n    _createVNode($setup[\"Icon\"], {\n      name: $props.icon ?? $setup.defaultIcon,\n      size: 24,\n      class: \"empty__icon\"\n    }, null, 8 /* PROPS */, [\"name\"]),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"p\", _hoisted_3, _toDisplayString($props.title), 1 /* TEXT */),\n      ($props.description)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($props.description), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    (_ctx.$slots.actions)\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n          _renderSlot(_ctx.$slots, \"actions\", {}, undefined, true)\n        ]))\n      : _createCommentVNode(\"v-if\", true)\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/EmptyState.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/EmptyState.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/EmptyState.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/EmptyState.vue\";script.__scopeId = \"data-v-346e6bc9\";export default script;","import type { NavItem } from \"./navigation\";\nimport type { AdminBootstrap } from \"@mod-velkom/js/admin-rpc\";\nimport { buildHash, type AdminRoute } from \"./route-contract.ts\";\n\n/** Only a successful server bootstrap may opt an authenticated account into simulated business data. */\nexport function paidDemoPlan(bootstrap: AdminBootstrap | null | undefined): \"aankomst\" | \"bezoek\" | \"ervaring\" | null {\n  const subscription = bootstrap?.subscription;\n  return subscription?.demo === true && (subscription.plan === \"aankomst\" || subscription.plan === \"bezoek\" || subscription.plan === \"ervaring\") ? subscription.plan : null;\n}\n\nconst customerSections: Array<NavItem & { feature: string }> = [\n  { section: \"overzicht\", feature: \"overview\", label: \"Overzicht\", icon: \"dashboard\", description: \"Registraties en verwacht bezoek vandaag.\" },\n  { section: \"bezoeken\", feature: \"visits\", label: \"Bezoeken\", icon: \"events\", description: \"Registraties en verwacht bezoek.\", sub: [{ tab: \"vandaag\", label: \"Vandaag\" }, { tab: \"geschiedenis\", label: \"Geschiedenis\" }, { tab: \"ontruimingslijst\", label: \"Ontruimingslijst\" }] },\n  { section: \"contactpersonen\", feature: \"employees\", label: \"Contactpersonen\", icon: \"user-multiple\", description: \"Wie bezoekers ontvangt.\" },\n  { section: \"schermen\", feature: \"screens\", label: \"Schermen\", icon: \"screen\", description: \"Ontvangstschermen en hun instellingen.\" },\n  { section: \"koppelingen\", feature: \"integrations\", label: \"Koppelingen\", icon: \"connect\", description: \"Vrijgegeven koppelingen en hun verbinding.\" },\n  { section: \"instellingen\", feature: \"settings\", label: \"Instellingen\", icon: \"settings\", description: \"Organisatie, gebruikers, abonnement en privacy.\", sub: [{ tab: \"organisatie\", label: \"Organisatie\" }, { tab: \"gebruikers\", label: \"Gebruikers\" }, { tab: \"abonnement\", label: \"Abonnement\" }, { tab: \"privacy\", label: \"Privacy\" }] },\n];\n\nexport function customerNavigation(features: readonly string[]): NavItem[] {\n  return customerSections.filter(item => features.includes(item.feature));\n}\n\n/** The fixed hash namespace is navigation context only; the authenticated page selects the customer. */\nexport function customerHref(section: string, options: { query?: Record<string, string>; rest?: readonly string[] } = {}): string {\n  return buildHash(\"customer\", section, options.query, options.rest);\n}\n\n/** Reject unsupported tabs and detail actions before mounting a view; record ownership stays server-side. */\nexport function isCustomerRouteAllowed(options: { route: Omit<AdminRoute, \"rest\"> & { rest: readonly string[] }; features: readonly string[] }): boolean {\n  const { route, features } = options;\n  const section = customerNavigation(features).find(item => item.section === route.section);\n  if (route.org !== \"customer\" || !section)\n    return false;\n  if (route.query.tab !== undefined && !section.sub?.some(tab => tab.tab === route.query.tab))\n    return false;\n  return route.rest.length === 0 || ([\"bezoeken\", \"schermen\"].includes(route.section) && route.rest.length === 1 && /^[1-9]\\d*$/.test(route.rest[0]) && Number.isSafeInteger(Number(route.rest[0])));\n}\n\nexport type InvitationCredentials = { id: number; token: string };\n\n/** Remove credentials even from malformed links; callers keep the result in memory only. */\nexport function consumeInvitationLink(options: { href: string; replace: (url: string) => void }): InvitationCredentials | null {\n  const url = new URL(options.href);\n  if (!url.searchParams.has(\"invitation\") && !url.searchParams.has(\"token\"))\n    return null;\n  const ids = url.searchParams.getAll(\"invitation\");\n  const tokens = url.searchParams.getAll(\"token\");\n  url.searchParams.delete(\"invitation\");\n  url.searchParams.delete(\"token\");\n  options.replace(url.href);\n  if (ids.length !== 1 || tokens.length !== 1 || !/^[1-9]\\d*$/.test(ids[0]) || !Number.isSafeInteger(Number(ids[0])) || !tokens[0])\n    return { id: 0, token: \"\" };\n  return { id: Number(ids[0]), token: tokens[0] };\n}\n","<template>\n  <section class=\"today\" aria-labelledby=\"today-title\">\n    <header class=\"today__header\">\n      <div>\n        <h2 id=\"today-title\" class=\"today__title\">Vandaag</h2>\n      </div>\n      <button v-if=\"filtered\" type=\"button\" class=\"today__reset\" @click=\"emit('clearFilter')\">Alle bezoeken tonen</button>\n      <a v-if=\"total > 0\" class=\"today__all\" :href=\"allVisitsHref\">Alle {{ total }} bezoeken</a>\n    </header>\n\n    <p v-if=\"visits.length === 0\" class=\"today__empty\">{{ emptyText }}</p>\n\n    <div v-else class=\"today__scroll\">\n    <table ref=\"tableEl\" class=\"today__table\" tabindex=\"-1\">\n      <thead>\n        <tr>\n          <th scope=\"col\">Tijd</th>\n          <th scope=\"col\">Bezoeker</th>\n          <th scope=\"col\">Gastheer</th>\n          <th v-if=\"showLocation\" scope=\"col\">Locatie</th>\n          <th scope=\"col\">Status</th>\n          <th scope=\"col\">Actie</th>\n        </tr>\n      </thead>\n      <tbody>\n        <tr v-for=\"visit in visits\" :key=\"visit.id\" :data-visit-id=\"visit.id\" tabindex=\"-1\" class=\"today__row\" @contextmenu=\"menu?.show($event, rowActions(visit), `Acties voor ${visit.visitorName}`)\">\n          <td class=\"today__time\" data-label=\"Tijd\">{{ formatTime(visit.expectedAt) }} tot {{ formatTime(visit.expectedEndAt) }}</td>\n          <td data-label=\"Bezoeker\">\n            <span class=\"today__person\"><span class=\"today__avatar\" :style=\"{ background: avatar(visit.visitorName).color }\" aria-hidden=\"true\">{{ avatar(visit.visitorName).initials }}</span><span><span class=\"today__visitor\">{{ visit.visitorName }}</span><span class=\"today__company\">{{ visit.visitorCompany }}</span></span></span>\n          </td>\n          <td data-label=\"Gastheer\"><span class=\"today__person today__person--host\"><span class=\"today__avatar today__avatar--host\" :style=\"{ background: avatar(visit.hostName).color }\" aria-hidden=\"true\">{{ avatar(visit.hostName).initials }}</span>{{ visit.hostName }}</span></td>\n          <td v-if=\"showLocation\" data-label=\"Locatie\">{{ visit.locationName }}</td>\n          <td data-label=\"Status\">\n            <span class=\"status\" :class=\"`status--${visit.status}`\">\n              <span class=\"status__mark\" aria-hidden=\"true\" />\n              {{ STATUS_LABELS[visit.status] }}\n            </span>\n          </td>\n          <td class=\"today__action\">\n            <Button v-if=\"visit.status === 'binnen'\"\n                    size=\"sm\"\n                    :disabled=\"checkoutPending\"\n                    :aria-label=\"`${visit.visitorName} afmelden`\"\n                    @click=\"checkOut(visit)\">\n              Afmelden\n            </Button>\n            <Button v-else-if=\"canRestore && visit.status === 'vertrokken'\"\n                    size=\"sm\"\n                    variant=\"ghost\"\n                    :disabled=\"checkoutPending\"\n                    :aria-label=\"`${visit.visitorName} weer binnen zetten`\"\n                    @click=\"emit('restore', visit.id)\">\n              Weer binnen\n            </Button>\n          </td>\n        </tr>\n      </tbody>\n    </table>\n    </div>\n\n    <p class=\"visually-hidden\" role=\"status\" aria-live=\"polite\">{{ announcement }}</p>\n    <ContextMenu ref=\"menu\" />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref } from \"vue\";\nimport Button from \"../ui/Button.vue\";\nimport ContextMenu from \"../ui/ContextMenu.vue\";\nimport type { ContextMenuItem } from \"../../lib/context-menu\";\nimport { formatTime } from \"../../lib/format\";\nimport { avatar } from \"../../lib/avatar\";\nimport type { OverviewStatus } from \"./overview-presentation\";\n\n// Structural row type so live customers can use the list without the demo store types.\ntype TodayVisit = { id: string; expectedAt: Date; expectedEndAt: Date; visitorName: string; visitorCompany: string; hostName: string; locationName?: string; status: OverviewStatus };\n\nconst props = withDefaults(defineProps<{\n  visits: readonly TodayVisit[];\n  showLocation: boolean;\n  filtered: boolean;\n  emptyText: string;\n  allVisitsHref: string;\n  total: number;\n  checkoutPending?: boolean;\n  canRestore?: boolean;\n}>(), { checkoutPending: undefined });\n\nconst emit = defineEmits<{ checkout: [id: string]; restore: [id: string]; clearFilter: [] }>();\n\nconst STATUS_LABELS: Record<OverviewStatus, string> = {\n  aangemeld: \"Aangemeld\",\n  verwacht: \"Verwacht\",\n  binnen: \"Binnen\",\n  vertrokken: \"Vertrokken\",\n  geannuleerd: \"Geannuleerd\",\n};\n\nconst tableEl = ref<HTMLTableElement | null>(null);\nconst announcement = ref(\"\");\nconst menu = ref<InstanceType<typeof ContextMenu> | null>(null);\n\nfunction rowActions(visit: TodayVisit): ContextMenuItem[] {\n  if (visit.status === \"binnen\")\n    return [{ label: \"Afmelden\", disabled: props.checkoutPending, action: () => void checkOut(visit) }];\n  if (props.canRestore && visit.status === \"vertrokken\")\n    return [{ label: \"Weer binnen\", disabled: props.checkoutPending, action: () => emit(\"restore\", visit.id) }];\n  return [];\n}\n\n/** Scrolls a visit's row into view and flashes it; false when the visit is not in this list. */\nfunction reveal(id: string | number): boolean {\n  const row = tableEl.value?.querySelector<HTMLTableRowElement>(`tr[data-visit-id=\"${CSS.escape(String(id))}\"]`);\n  if (!row)\n    return false;\n  row.scrollIntoView({ behavior: matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? \"auto\" : \"smooth\", block: \"center\" });\n  row.focus({ preventScroll: true });\n  row.classList.remove(\"today__row--flash\");\n  void row.offsetWidth; // restart the flash when the same row is revealed again\n  row.classList.add(\"today__row--flash\");\n  return true;\n}\n\ndefineExpose({ reveal });\n\nasync function checkOut(visit: TodayVisit) {\n  emit(\"checkout\", visit.id);\n  // Live callers own pending state and announce success only after their RPC completes.\n  if (props.checkoutPending === undefined)\n    announcement.value = `${visit.visitorName} is afgemeld.`;\n  // The clicked button disappears with the status change; park focus on the table.\n  await nextTick();\n  tableEl.value?.focus({ preventScroll: true });\n}\n</script>\n\n<style scoped>\n.today {\n  min-width: 0;\n  padding: 0;\n  background: var(--surface-raised);\n  color: var(--foreground);\n}\n\n.today__header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: baseline;\n  gap: 12px;\n  justify-content: space-between;\n  padding: 22px 24px 14px;\n}\n\n.today__title {\n  margin: 2px 0 0;\n  font-family: var(--font-display);\n  font-size: 22px;\n  font-weight: 600;\n  letter-spacing: -0.04em;\n}\n\n.today__reset,\n.today__all {\n  margin-left: auto;\n  padding: 0;\n  border: 0;\n  background: none;\n  color: var(--primary);\n  font: inherit;\n  font-size: 14px;\n  text-decoration: underline;\n  text-underline-offset: 3px;\n  cursor: pointer;\n}\n\n.today__all {\n  font-weight: 700;\n}\n\n.today__reset + .today__all {\n  margin-left: 0;\n}\n\n.today__reset:focus-visible {\n  outline: 2px solid var(--ring);\n  outline-offset: 2px;\n}\n\n.today__empty {\n  margin: 0;\n  padding: 24px;\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n\n.today__table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n}\n\n.today__scroll { overflow-x: auto; }\n.today__table { min-width: 620px; }\n\n.today__table:focus {\n  outline: none;\n}\n\n.today__table th {\n  padding: 10px 12px;\n  border-bottom: 1px solid var(--border);\n  color: var(--muted-foreground);\n  font-size: 13px;\n  font-weight: 700;\n  text-align: left;\n}\n\n.today__table td {\n  padding: 12px;\n  border-bottom: 1px solid var(--border);\n  vertical-align: middle;\n}\n\n.today__table th:first-child, .today__table td:first-child { padding-inline: 24px; }\n.today__table th:last-child, .today__table td:last-child { padding-inline: 24px; }\n.today__time { font-weight: 600; }\n.today__person { display: flex; align-items: center; gap: 12px; }\n.today__person--host { gap: 10px; }\n.today__avatar { display: inline-flex; align-items: center; justify-content: center; flex: none; width: 40px; height: 40px; border-radius: 999px; font-size: 14px; font-weight: 700; }\n.today__avatar--host { width: 28px; height: 28px; font-size: 12px; }\n\n.today__row:focus { outline: none; }\n.today__row--flash { animation: today-flash 1.6s ease-out; }\n@keyframes today-flash { from, 30% { background: var(--accent); } to { background: transparent; } }\n\n.today__table tbody tr:last-child td {\n  border-bottom: 0;\n}\n\n.today__time {\n  font-variant-numeric: tabular-nums;\n  white-space: nowrap;\n}\n\n.today__visitor {\n  display: block;\n  font-weight: 700;\n}\n\n.today__company {\n  display: block;\n  color: var(--muted-foreground);\n  font-size: 13px;\n}\n\n.today__action {\n  text-align: right;\n}\n\n\n\n\n.status {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  padding: 4px 10px;\n  border-radius: var(--radius-control);\n  font-weight: 600;\n  white-space: nowrap;\n}\n\n.status--binnen {\n  background: var(--accent);\n}\n\n.status--verwacht {\n  background: var(--sky);\n}\n\n.status--aangemeld {\n  background: var(--accent);\n}\n\n.status__mark {\n  flex: none;\n  width: 10px;\n  height: 10px;\n  border-radius: 50%;\n}\n\n.status--binnen .status__mark {\n  background: var(--success);\n}\n\n.status--aangemeld .status__mark {\n  background: var(--foreground);\n}\n\n.status--verwacht .status__mark {\n  border: 2px solid var(--muted-foreground);\n}\n\n.status--vertrokken {\n  background: var(--selected);\n  color: var(--muted-foreground);\n}\n\n.status--vertrokken .status__mark {\n  border-radius: 2px;\n  background: var(--muted-foreground);\n}\n\n.status--geannuleerd {\n  color: var(--danger);\n}\n\n.status--geannuleerd .status__mark {\n  width: 10px;\n  height: 2px;\n  border-radius: 0;\n  background: var(--danger);\n}\n\n.visually-hidden {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  overflow: hidden;\n  clip-path: inset(50%);\n  white-space: nowrap;\n}\n\n/* Below ~640px each visit becomes a stacked card so the page never scrolls sideways. */\n@media (max-width: 640px) {\n  .today__table { min-width: 0; }\n  .today__scroll { overflow: visible; }\n  .today {\n    padding: 20px 16px;\n  }\n\n  .today__table thead {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    clip-path: inset(50%);\n  }\n\n  .today__table tr {\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: 4px 12px;\n    padding: 12px 0;\n    border-bottom: 1px solid var(--border);\n  }\n\n  .today__table tbody tr:last-child {\n    border-bottom: 0;\n  }\n\n  .today__table td,\n  .today__table tbody tr:last-child td {\n    padding: 0;\n    border: 0;\n  }\n\n  .today__table td[data-label]::before {\n    content: attr(data-label);\n    display: block;\n    color: var(--muted-foreground);\n  }\n\n  .today__table td.today__time::before,\n  .today__table td[data-label=\"Bezoeker\"]::before {\n    content: none;\n  }\n\n  .today__action {\n    grid-column: 1 / -1;\n    text-align: left;\n  }\n\n  .today__action:empty {\n    display: none;\n  }\n}\n\n</style>\n","<template>\n  <Teleport to=\"body\">\n    <div v-if=\"items.length\" class=\"context-menu__backdrop\" data-testid=\"context-menu-backdrop\" @pointerdown=\"close(false)\" @contextmenu.prevent=\"close(false)\" />\n    <div v-if=\"items.length\" ref=\"menuEl\" class=\"context-menu\" role=\"menu\" :aria-label=\"label\" data-testid=\"context-menu\"\n         :style=\"{ left: `${position.left}px`, top: `${position.top}px` }\" @keydown=\"onKeydown\">\n      <template v-for=\"(item, index) in items\" :key=\"index\">\n        <a v-if=\"item.href && !item.disabled\" :href=\"item.href\" role=\"menuitem\" tabindex=\"-1\" class=\"context-menu__item\"\n           :class=\"{ 'context-menu__item--destructive': item.destructive }\" @click=\"close(false)\">{{ item.label }}</a>\n        <button v-else type=\"button\" role=\"menuitem\" tabindex=\"-1\" class=\"context-menu__item\" :disabled=\"item.disabled\"\n                :class=\"{ 'context-menu__item--destructive': item.destructive }\" @click=\"choose(item)\">{{ item.label }}</button>\n      </template>\n    </div>\n  </Teleport>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, onBeforeUnmount, ref, shallowRef } from \"vue\";\nimport { menuAnchor, menuPosition, type ContextMenuItem } from \"../../lib/context-menu\";\n\n/**\n * Right-click (and Shift+F10 / Menu key) actions for a row or card. One instance per list:\n * `<tr @contextmenu=\"menu?.show($event, items, label)\">`. Items mirror the buttons already on the row.\n */\nconst items = shallowRef<ContextMenuItem[]>([]);\nconst label = ref(\"\");\nconst position = ref({ left: 0, top: 0 });\nconst menuEl = ref<HTMLElement | null>(null);\nlet returnFocus: HTMLElement | null = null;\n\nfunction menuItems(): HTMLElement[] {\n  return [...(menuEl.value?.querySelectorAll<HTMLElement>(\"[role=menuitem]:not(:disabled)\") ?? [])];\n}\n\nfunction focusItem(index: number): void {\n  const list = menuItems();\n  list[(index + list.length) % list.length]?.focus({ preventScroll: true });\n}\n\nasync function show(event: MouseEvent, next: ContextMenuItem[], menuLabel: string): Promise<void> {\n  if (!next.length)\n    return; // keep the browser menu where there is nothing of ours to offer\n  event.preventDefault();\n  const anchor = menuAnchor(event);\n  returnFocus = document.activeElement as HTMLElement | null;\n  label.value = menuLabel;\n  items.value = next;\n  position.value = { left: anchor.x, top: anchor.y };\n  window.addEventListener(\"resize\", dismiss);\n  window.addEventListener(\"scroll\", dismiss, { capture: true, passive: true });\n  await nextTick();\n  const rect = menuEl.value?.getBoundingClientRect();\n  if (rect)\n    position.value = menuPosition({ ...anchor, width: rect.width, height: rect.height, viewportWidth: window.innerWidth, viewportHeight: window.innerHeight });\n  focusItem(0);\n}\n\nfunction dismiss(): void {\n  close(false);\n}\n\nfunction close(restoreFocus: boolean): void {\n  if (!items.value.length)\n    return;\n  items.value = [];\n  window.removeEventListener(\"resize\", dismiss);\n  window.removeEventListener(\"scroll\", dismiss, { capture: true });\n  if (restoreFocus)\n    returnFocus?.focus({ preventScroll: true });\n  returnFocus = null;\n}\n\nfunction choose(item: ContextMenuItem): void {\n  close(true);\n  item.action?.();\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n  const index = menuItems().indexOf(document.activeElement as HTMLElement);\n  const keys: Record<string, () => void> = {\n    ArrowDown: () => focusItem(index + 1),\n    ArrowUp: () => focusItem(index - 1),\n    Home: () => focusItem(0),\n    End: () => focusItem(-1),\n    Escape: () => close(true),\n    Tab: () => close(true),\n  };\n  if (!keys[event.key])\n    return;\n  event.preventDefault();\n  event.stopPropagation(); // Escape must not also close a surrounding dialog\n  keys[event.key]();\n}\n\nonBeforeUnmount(() => close(false));\ndefineExpose({ show });\n</script>\n\n<style scoped>\n.context-menu__backdrop {\n  position: fixed;\n  inset: 0;\n  z-index: 90;\n}\n\n.context-menu {\n  position: fixed;\n  z-index: 91;\n  min-width: 200px;\n  max-width: calc(100vw - 16px);\n  padding: 6px;\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  background: var(--surface-raised);\n  border: 1px solid var(--border);\n  border-radius: var(--radius-panel);\n  box-shadow: var(--shadow-overlay);\n}\n\n.context-menu__item {\n  display: flex;\n  align-items: center;\n  width: 100%;\n  min-height: 36px;\n  padding: 8px 12px;\n  box-sizing: border-box;\n  border: none;\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--foreground);\n  font: inherit;\n  font-size: 14px;\n  text-align: left;\n  text-decoration: none;\n  cursor: pointer;\n}\n\n.context-menu__item:hover,\n.context-menu__item:focus-visible {\n  background: var(--hover);\n}\n\n.context-menu__item:focus-visible {\n  outline-offset: -2px;\n}\n\n.context-menu__item--destructive {\n  color: var(--danger);\n}\n\n.context-menu__item--destructive:hover,\n.context-menu__item--destructive:focus-visible {\n  background: var(--danger-soft);\n}\n\n.context-menu__item:disabled {\n  opacity: 0.45;\n  cursor: not-allowed;\n}\n</style>\n","/** One action in a `ContextMenu`. Offer exactly the actions the row or card already shows as buttons. */\nexport type ContextMenuItem = {\n  label: string;\n  action?: () => void;\n  /** Navigation items render as links, so open-in-new-tab keeps working. */\n  href?: string;\n  destructive?: boolean;\n  disabled?: boolean;\n};\n\nconst MARGIN = 8;\n\n/** Opens at the anchor, flips left/up when it would overflow, and never leaves the viewport margin. */\nexport function menuPosition({ x, y, width, height, viewportWidth, viewportHeight }: { x: number; y: number; width: number; height: number; viewportWidth: number; viewportHeight: number }): { left: number; top: number } {\n  const place = (start: number, size: number, room: number) => {\n    const at = start + size + MARGIN > room ? start - size : start;\n    return Math.max(MARGIN, Math.min(at, room - size - MARGIN));\n  };\n  return { left: place(x, width, viewportWidth), top: place(y, height, viewportHeight) };\n}\n\n/** Shift+F10 and the Menu key fire `contextmenu` at (0, 0): anchor those to the focused element instead. */\nexport function menuAnchor(event: Pick<MouseEvent, \"clientX\" | \"clientY\" | \"button\"> & { target: EventTarget | null }): { x: number; y: number } {\n  if (event.clientX || event.clientY)\n    return { x: event.clientX, y: event.clientY };\n  const rect = (event.target as Element).getBoundingClientRect();\n  return { x: rect.left + 16, y: rect.top + rect.height - 8 };\n}\n\n/**\n * Double-click, or Enter on the focused row, opens it. Both ignore controls inside the row, which handle\n * their own clicks and keys.\n */\nexport function opensRow(event: Pick<Event, \"type\" | \"target\" | \"currentTarget\"> & { key?: string }): boolean {\n  if (event.type === \"keydown\" && (event.key !== \"Enter\" || event.target !== event.currentTarget))\n    return false;\n  return !(event.target as Element).closest(\"a, button, input, select, textarea, label\");\n}\n","import { withModifiers as _withModifiers, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = [\"disabled\", \"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock(_Teleport, { to: \"body\" }, [\n    ($setup.items.length)\n      ? (_openBlock(), _createElementBlock(\"div\", {\n          key: 0,\n          class: \"context-menu__backdrop\",\n          \"data-testid\": \"context-menu-backdrop\",\n          onPointerdown: _cache[0] || (_cache[0] = $event => ($setup.close(false))),\n          onContextmenu: _cache[1] || (_cache[1] = _withModifiers($event => ($setup.close(false)), [\"prevent\"]))\n        }, null, 32 /* NEED_HYDRATION */))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.items.length)\n      ? (_openBlock(), _createElementBlock(\"div\", {\n          key: 1,\n          ref: \"menuEl\",\n          class: \"context-menu\",\n          role: \"menu\",\n          \"aria-label\": $setup.label,\n          \"data-testid\": \"context-menu\",\n          style: _normalizeStyle({ left: `${$setup.position.left}px`, top: `${$setup.position.top}px` }),\n          onKeydown: $setup.onKeydown\n        }, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.items, (item, index) => {\n            return (_openBlock(), _createElementBlock(_Fragment, { key: index }, [\n              (item.href && !item.disabled)\n                ? (_openBlock(), _createElementBlock(\"a\", {\n                    key: 0,\n                    href: item.href,\n                    role: \"menuitem\",\n                    tabindex: \"-1\",\n                    class: _normalizeClass([\"context-menu__item\", { 'context-menu__item--destructive': item.destructive }]),\n                    onClick: _cache[2] || (_cache[2] = $event => ($setup.close(false)))\n                  }, _toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_2))\n                : (_openBlock(), _createElementBlock(\"button\", {\n                    key: 1,\n                    type: \"button\",\n                    role: \"menuitem\",\n                    tabindex: \"-1\",\n                    class: _normalizeClass([\"context-menu__item\", { 'context-menu__item--destructive': item.destructive }]),\n                    disabled: item.disabled,\n                    onClick: $event => ($setup.choose(item))\n                  }, _toDisplayString(item.label), 11 /* TEXT, CLASS, PROPS */, _hoisted_3))\n            ], 64 /* STABLE_FRAGMENT */))\n          }), 128 /* KEYED_FRAGMENT */))\n        ], 44 /* STYLE, PROPS, NEED_HYDRATION */, _hoisted_1))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ContextMenu.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ContextMenu.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ContextMenu.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ContextMenu.vue\";script.__scopeId = \"data-v-ed67216f\";export default script;","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeStyle as _normalizeStyle, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"today\",\n  \"aria-labelledby\": \"today-title\"\n}\nconst _hoisted_2 = { class: \"today__header\" }\nconst _hoisted_3 = [\"href\"]\nconst _hoisted_4 = {\n  key: 0,\n  class: \"today__empty\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"today__scroll\"\n}\nconst _hoisted_6 = {\n  ref: \"tableEl\",\n  class: \"today__table\",\n  tabindex: \"-1\"\n}\nconst _hoisted_7 = {\n  key: 0,\n  scope: \"col\"\n}\nconst _hoisted_8 = [\"data-visit-id\", \"onContextmenu\"]\nconst _hoisted_9 = {\n  class: \"today__time\",\n  \"data-label\": \"Tijd\"\n}\nconst _hoisted_10 = { \"data-label\": \"Bezoeker\" }\nconst _hoisted_11 = { class: \"today__person\" }\nconst _hoisted_12 = { class: \"today__visitor\" }\nconst _hoisted_13 = { class: \"today__company\" }\nconst _hoisted_14 = { \"data-label\": \"Gastheer\" }\nconst _hoisted_15 = { class: \"today__person today__person--host\" }\nconst _hoisted_16 = {\n  key: 0,\n  \"data-label\": \"Locatie\"\n}\nconst _hoisted_17 = { \"data-label\": \"Status\" }\nconst _hoisted_18 = { class: \"today__action\" }\nconst _hoisted_19 = {\n  class: \"visually-hidden\",\n  role: \"status\",\n  \"aria-live\": \"polite\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _cache[1] || (_cache[1] = _createElementVNode(\"div\", null, [\n        _createElementVNode(\"h2\", {\n          id: \"today-title\",\n          class: \"today__title\"\n        }, \"Vandaag\")\n      ], -1 /* CACHED */)),\n      ($props.filtered)\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 0,\n            type: \"button\",\n            class: \"today__reset\",\n            onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('clearFilter')))\n          }, \"Alle bezoeken tonen\"))\n        : _createCommentVNode(\"v-if\", true),\n      ($props.total > 0)\n        ? (_openBlock(), _createElementBlock(\"a\", {\n            key: 1,\n            class: \"today__all\",\n            href: $props.allVisitsHref\n          }, \"Alle \" + _toDisplayString($props.total) + \" bezoeken\", 9 /* TEXT, PROPS */, _hoisted_3))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    ($props.visits.length === 0)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($props.emptyText), 1 /* TEXT */))\n      : (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n          _createElementVNode(\"table\", _hoisted_6, [\n            _createElementVNode(\"thead\", null, [\n              _createElementVNode(\"tr\", null, [\n                _cache[2] || (_cache[2] = _createElementVNode(\"th\", { scope: \"col\" }, \"Tijd\", -1 /* CACHED */)),\n                _cache[3] || (_cache[3] = _createElementVNode(\"th\", { scope: \"col\" }, \"Bezoeker\", -1 /* CACHED */)),\n                _cache[4] || (_cache[4] = _createElementVNode(\"th\", { scope: \"col\" }, \"Gastheer\", -1 /* CACHED */)),\n                ($props.showLocation)\n                  ? (_openBlock(), _createElementBlock(\"th\", _hoisted_7, \"Locatie\"))\n                  : _createCommentVNode(\"v-if\", true),\n                _cache[5] || (_cache[5] = _createElementVNode(\"th\", { scope: \"col\" }, \"Status\", -1 /* CACHED */)),\n                _cache[6] || (_cache[6] = _createElementVNode(\"th\", { scope: \"col\" }, \"Actie\", -1 /* CACHED */))\n              ])\n            ]),\n            _createElementVNode(\"tbody\", null, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.visits, (visit) => {\n                return (_openBlock(), _createElementBlock(\"tr\", {\n                  key: visit.id,\n                  \"data-visit-id\": visit.id,\n                  tabindex: \"-1\",\n                  class: \"today__row\",\n                  onContextmenu: $event => ($setup.menu?.show($event, $setup.rowActions(visit), `Acties voor ${visit.visitorName}`))\n                }, [\n                  _createElementVNode(\"td\", _hoisted_9, _toDisplayString($setup.formatTime(visit.expectedAt)) + \" tot \" + _toDisplayString($setup.formatTime(visit.expectedEndAt)), 1 /* TEXT */),\n                  _createElementVNode(\"td\", _hoisted_10, [\n                    _createElementVNode(\"span\", _hoisted_11, [\n                      _createElementVNode(\"span\", {\n                        class: \"today__avatar\",\n                        style: _normalizeStyle({ background: $setup.avatar(visit.visitorName).color }),\n                        \"aria-hidden\": \"true\"\n                      }, _toDisplayString($setup.avatar(visit.visitorName).initials), 5 /* TEXT, STYLE */),\n                      _createElementVNode(\"span\", null, [\n                        _createElementVNode(\"span\", _hoisted_12, _toDisplayString(visit.visitorName), 1 /* TEXT */),\n                        _createElementVNode(\"span\", _hoisted_13, _toDisplayString(visit.visitorCompany), 1 /* TEXT */)\n                      ])\n                    ])\n                  ]),\n                  _createElementVNode(\"td\", _hoisted_14, [\n                    _createElementVNode(\"span\", _hoisted_15, [\n                      _createElementVNode(\"span\", {\n                        class: \"today__avatar today__avatar--host\",\n                        style: _normalizeStyle({ background: $setup.avatar(visit.hostName).color }),\n                        \"aria-hidden\": \"true\"\n                      }, _toDisplayString($setup.avatar(visit.hostName).initials), 5 /* TEXT, STYLE */),\n                      _createTextVNode(_toDisplayString(visit.hostName), 1 /* TEXT */)\n                    ])\n                  ]),\n                  ($props.showLocation)\n                    ? (_openBlock(), _createElementBlock(\"td\", _hoisted_16, _toDisplayString(visit.locationName), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true),\n                  _createElementVNode(\"td\", _hoisted_17, [\n                    _createElementVNode(\"span\", {\n                      class: _normalizeClass([\"status\", `status--${visit.status}`])\n                    }, [\n                      _cache[7] || (_cache[7] = _createElementVNode(\"span\", {\n                        class: \"status__mark\",\n                        \"aria-hidden\": \"true\"\n                      }, null, -1 /* CACHED */)),\n                      _createTextVNode(\" \" + _toDisplayString($setup.STATUS_LABELS[visit.status]), 1 /* TEXT */)\n                    ], 2 /* CLASS */)\n                  ]),\n                  _createElementVNode(\"td\", _hoisted_18, [\n                    (visit.status === 'binnen')\n                      ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                          key: 0,\n                          size: \"sm\",\n                          disabled: $props.checkoutPending,\n                          \"aria-label\": `${visit.visitorName} afmelden`,\n                          onClick: $event => ($setup.checkOut(visit))\n                        }, {\n                          default: _withCtx(() => _cache[8] || (_cache[8] = [\n                            _createTextVNode(\" Afmelden \", -1 /* CACHED */)\n                          ])),\n                          _: 2 /* DYNAMIC */,\n                          __: [8]\n                        }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"disabled\", \"aria-label\", \"onClick\"]))\n                      : ($props.canRestore && visit.status === 'vertrokken')\n                        ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                            key: 1,\n                            size: \"sm\",\n                            variant: \"ghost\",\n                            disabled: $props.checkoutPending,\n                            \"aria-label\": `${visit.visitorName} weer binnen zetten`,\n                            onClick: $event => ($setup.emit('restore', visit.id))\n                          }, {\n                            default: _withCtx(() => _cache[9] || (_cache[9] = [\n                              _createTextVNode(\" Weer binnen \", -1 /* CACHED */)\n                            ])),\n                            _: 2 /* DYNAMIC */,\n                            __: [9]\n                          }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"disabled\", \"aria-label\", \"onClick\"]))\n                        : _createCommentVNode(\"v-if\", true)\n                  ])\n                ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_8))\n              }), 128 /* KEYED_FRAGMENT */))\n            ])\n          ], 512 /* NEED_PATCH */)\n        ])),\n    _createElementVNode(\"p\", _hoisted_19, _toDisplayString($setup.announcement), 1 /* TEXT */),\n    _createVNode($setup[\"ContextMenu\"], { ref: \"menu\" }, null, 512 /* NEED_PATCH */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/dashboard/TodayVisitsList.vue\";script.__scopeId = \"data-v-e7033cfc\";export default script;","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, Fragment as _Fragment, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"customer-overview\" }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = {\n  key: 1,\n  class: \"customer-overview__error\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    ($setup.totals && $props.bootstrap.features.includes('visits'))\n      ? (_openBlock(), _createBlock($setup[\"OverviewMobile\"], {\n          key: 0,\n          visits: $setup.present,\n          \"location-label\": $props.bootstrap.customer.name,\n          \"org-slug\": \"customer\"\n        }, null, 8 /* PROPS */, [\"visits\", \"location-label\"]))\n      : _createCommentVNode(\"v-if\", true),\n    _createVNode($setup[\"OverviewHero\"], {\n      class: _normalizeClass([\"customer-overview__hero\", { 'customer-overview__hero--desktop': $setup.totals && $props.bootstrap.features.includes('visits') }]),\n      greeting: $setup.greetingAt($setup.now),\n      name: $props.bootstrap.identity.name.split(' ')[0],\n      summary: $setup.summary,\n      \"aria-busy\": $setup.pending\n    }, {\n      context: _withCtx(() => [\n        _createElementVNode(\"span\", null, _toDisplayString($props.bootstrap.customer.name), 1 /* TEXT */)\n      ]),\n      actions: _withCtx(() => [\n        ($props.bootstrap.features.includes('visits'))\n          ? (_openBlock(), _createElementBlock(\"a\", {\n              key: 0,\n              class: \"overview__link\",\n              href: $setup.customerHref('bezoeken', { query: { tab: 'ontruimingslijst' } })\n            }, \"Ontruimingslijst\", 8 /* PROPS */, _hoisted_2))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      stats: _withCtx(() => [\n        ($setup.error)\n          ? (_openBlock(), _createBlock($setup[\"EmptyState\"], {\n              key: 0,\n              kind: \"error\",\n              title: \"Overzicht niet beschikbaar\",\n              description: $setup.error\n            }, {\n              actions: _withCtx(() => [\n                _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                  default: _withCtx(() => _cache[1] || (_cache[1] = [\n                    _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                  ])),\n                  _: 1 /* STABLE */,\n                  __: [1]\n                })\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"description\"]))\n          : ($setup.totals)\n            ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                _createVNode($setup[\"StatCard\"], {\n                  label: \"Bezoeken vandaag\",\n                  value: $setup.formatCount($setup.totals.registered + $setup.totals.expected),\n                  hint: `${$setup.formatCount($setup.totals.departed)} vertrokken`,\n                  \"data-testid\": \"registered-count\"\n                }, null, 8 /* PROPS */, [\"value\", \"hint\"]),\n                _createVNode($setup[\"StatCard\"], {\n                  label: \"Nu binnen\",\n                  value: $setup.formatCount($setup.totals.inside),\n                  hint: \"Nog niet afgemeld\"\n                }, null, 8 /* PROPS */, [\"value\"]),\n                ($props.bootstrap.features.includes('visits'))\n                  ? (_openBlock(), _createBlock($setup[\"StatCard\"], {\n                      key: 0,\n                      label: \"Verwacht\",\n                      value: $setup.formatCount($setup.totals.expected),\n                      hint: $setup.presentation.next ? `Vanaf ${$setup.formatTime($setup.presentation.next.expectedAt)}` : 'Niemand meer verwacht'\n                    }, null, 8 /* PROPS */, [\"value\", \"hint\"]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createCommentVNode(\" Pairing is known; no device heartbeat exists to claim that a screen is online. \"),\n                _createVNode($setup[\"StatCard\"], {\n                  label: \"Schermen\",\n                  value: $props.bootstrap.customer.screenLimit === null ? String($props.bootstrap.customer.screenCount) : `${$props.bootstrap.customer.screenCount}/${$props.bootstrap.customer.screenLimit}`,\n                  hint: $props.bootstrap.customer.screenLimit === null ? 'Onbeperkt' : 'In gebruik'\n                }, null, 8 /* PROPS */, [\"value\", \"hint\"])\n              ], 64 /* STABLE_FRAGMENT */))\n            : _createCommentVNode(\"v-if\", true)\n      ]),\n      default: _withCtx(() => [\n        ($setup.totals)\n          ? (_openBlock(), _createBlock($setup[\"OverviewTimeline\"], {\n              key: 0,\n              visits: $setup.today,\n              now: $setup.now,\n              onSelect: _cache[0] || (_cache[0] = id => $setup.list?.reveal(id))\n            }, null, 8 /* PROPS */, [\"visits\", \"now\"]))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"class\", \"greeting\", \"name\", \"summary\", \"aria-busy\"]),\n    _createCommentVNode(\" Gratis has no attention items, so the list takes the full width. \"),\n    ($setup.actionError)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString($setup.actionError), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.totals && $props.bootstrap.features.includes('visits'))\n      ? (_openBlock(), _createBlock($setup[\"TodayVisitsList\"], {\n          key: 2,\n          ref: \"list\",\n          class: \"customer-overview__list\",\n          visits: $setup.today,\n          \"show-location\": false,\n          filtered: false,\n          \"checkout-pending\": $setup.checkoutPending,\n          \"all-visits-href\": $setup.customerHref('bezoeken'),\n          total: $setup.totals.registered + $setup.totals.expected,\n          \"empty-text\": \"Er zijn vandaag nog geen bezoeken.\",\n          \"can-restore\": \"\",\n          onCheckout: $setup.checkout,\n          onRestore: $setup.restore\n        }, null, 8 /* PROPS */, [\"visits\", \"checkout-pending\", \"all-visits-href\", \"total\"]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/OverviewView.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/OverviewView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/OverviewView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/OverviewView.vue\";script.__scopeId = \"data-v-569b6281\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"../../../../../js/admin-rpc\";\nimport { route } from \"../../lib/router\";\nimport { customerHref } from \"../../lib/customer\";\nimport { showToast } from \"../../lib/toast\";\nimport PageHeader from \"../../components/ui/PageHeader.vue\";\nimport SectionCard from \"../../components/ui/SectionCard.vue\";\nimport EmptyState from \"../../components/ui/EmptyState.vue\";\nimport Button from \"../../components/ui/Button.vue\";\nimport StatusBadge from \"../../components/ui/StatusBadge.vue\";\nimport Skeleton from \"../../components/ui/Skeleton.vue\";\nimport { useLoadingIndicator } from \"../../lib/loading\";\nimport CustomerEvacuation from \"../../components/customer/CustomerEvacuation.vue\";\nimport VisitTable from \"../../components/customer/visits/VisitTable.vue\";\nimport HistoryDatePicker from \"../../components/customer/visits/HistoryDatePicker.vue\";\nimport { addDays, amsterdamDay } from \"../../components/customer/visits/days.ts\";\nimport { expectedRow, registrationRow, type VisitRow } from \"../../components/customer/visits/visit-rows.ts\";\nimport type { StatusTone } from \"../../lib/ui\";\n\ndefineProps<{ bootstrap: AdminBootstrap }>();\nconst api = rpc(\"velkom:admin\");\nconst PAGE_SIZE = 50;\nconst page = ref<Awaited<ReturnType<typeof api.visits>> | null>(null);\nconst rows = ref<VisitRow[] | null>(null);\nconst totals = ref<Awaited<ReturnType<typeof api.overview>> | null>(null);\nconst detail = ref<Awaited<ReturnType<typeof api.visit>> | null>(null);\nconst pending = ref(false);\nconst loadingIndicator = useLoadingIndicator(() => pending.value);\nconst error = ref(\"\");\nconst checkoutPending = ref(false);\nconst actionError = ref(\"\");\nlet request = 0;\nconst historyTab = computed(() => route.value.query.tab === \"geschiedenis\");\nconst evacuationTab = computed(() => route.value.query.tab === \"ontruimingslijst\");\nconst detailRoute = computed(() => route.value.rest.length > 0);\nconst period = computed(() => route.value.query.periode ?? (historyTab.value ? \"30\" : \"vandaag\"));\nconst todayPeriods = [{ value: \"vandaag\", label: \"Vandaag\" }, { value: \"week\", label: \"Komende 7 dagen\" }];\nconst historyPeriods = [{ value: \"30\", label: \"Afgelopen 30 dagen\" }, { value: \"7\", label: \"Afgelopen 7 dagen\" }, { value: \"datum\", label: \"Specifieke datum\" }];\nconst tabs = computed(() => [\n  { id: \"vandaag\", label: \"Vandaag\", query: {}, count: totals.value ? totals.value.registered + totals.value.expected : null },\n  { id: \"geschiedenis\", label: \"Geschiedenis\", query: { tab: \"geschiedenis\" }, count: null },\n  { id: \"ontruimingslijst\", label: \"Ontruimingslijst\", query: { tab: \"ontruimingslijst\" }, count: totals.value?.inside ?? null },\n].map(tab => ({ ...tab, current: (route.value.query.tab ?? \"vandaag\") === tab.id })));\n// The pills render before the totals arrive, so the hero keeps its height while loading.\nconst counters = computed(() => [\n  { count: totals.value?.inside ?? null, label: \"binnen\", tone: \"inside\" },\n  { count: totals.value?.expected ?? null, label: \"verwacht\", tone: \"expected\" },\n  { count: totals.value?.departed ?? null, label: \"vertrokken\", tone: \"departed\" },\n]);\nconst pageCount = computed(() => page.value ? Math.max(1, Math.ceil(page.value.total / PAGE_SIZE)) : 1);\nconst currentPage = computed(() => page.value ? Math.floor(page.value.offset / PAGE_SIZE) + 1 : 1);\nconst pageNumbers = computed(() => {\n  const first = Math.max(1, Math.min(currentPage.value - 1, pageCount.value - 2));\n  return Array.from({ length: Math.min(3, pageCount.value) }, (_, index) => first + index);\n});\nconst yesterday = computed(() => addDays(amsterdamDay(new Date()), -1));\nconst timeFormat = new Intl.DateTimeFormat(\"nl-NL\", { timeZone: \"Europe/Amsterdam\", dateStyle: \"medium\", timeStyle: \"short\" });\n\nfunction displayTime(value: string | null): string {\n  return value === null ? \"Onbekend\" : timeFormat.format(new Date(value));\n}\n\nfunction visitStatus(visit: { registeredAt: string | null; departedAt: string | null }): { label: string; tone: StatusTone } {\n  if (visit.departedAt)\n    return { label: \"Vertrokken\", tone: \"neutral\" };\n  return visit.registeredAt ? { label: \"Binnen\", tone: \"success\" } : { label: \"Onbekend\", tone: \"warning\" };\n}\n\nfunction listQuery(): Record<string, string> {\n  const query: Record<string, string> = {};\n  for (const key of [\"tab\", \"periode\", \"date\", \"offset\"])\n    if (route.value.query[key])\n      query[key] = route.value.query[key]!;\n  return query;\n}\n\nfunction navigate(query: Record<string, string>): void {\n  location.hash = customerHref(\"bezoeken\", { query });\n}\n\nfunction setPeriod(value: string): void {\n  navigate({ ...(historyTab.value ? { tab: \"geschiedenis\" } : {}), periode: value, ...(value === \"datum\" && route.value.query.date ? { date: route.value.query.date } : {}) });\n}\n\nfunction goToPage(number: number): void {\n  navigate({ ...listQuery(), offset: String((number - 1) * PAGE_SIZE) });\n}\n\nfunction historyTitle(shown: number): string {\n  if (!page.value)\n    return \"\";\n  return shown === page.value.items.length ? `${page.value.items.length} van ${page.value.total} bezoeken` : `${shown} van ${page.value.items.length} bezoeken op deze pagina`;\n}\n\nfunction todayTitle(shown: number): string {\n  return `${shown} ${shown === 1 ? \"bezoek\" : \"bezoeken\"}`;\n}\n\n/** Today and the upcoming week need every page, otherwise filters would silently search a truncated list. */\nasync function allPages<T>(fetchPage: (offset: number) => Promise<{ items: T[]; total: number }>): Promise<T[]> {\n  const items: T[] = [];\n  let total: number;\n  do {\n    const result = await fetchPage(items.length);\n    total = result.total;\n    if (!result.items.length && items.length < total)\n      throw new Error(\"Incomplete visit page\");\n    items.push(...result.items);\n  } while (items.length < total);\n  return items;\n}\n\nasync function checkout(): Promise<void> {\n  if (checkoutPending.value || !detail.value?.registeredAt || detail.value.departedAt)\n    return;\n  const id = detail.value.id;\n  const token = request;\n  checkoutPending.value = true;\n  actionError.value = \"\";\n  try {\n    await api.checkoutVisit({ id });\n    // A completed checkout must not refresh a different visit opened during the request.\n    if (token === request)\n      await load();\n  } catch {\n    if (token === request)\n      actionError.value = \"Afmelden is niet gelukt. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    checkoutPending.value = false;\n  }\n}\n\nasync function checkoutRow(row: VisitRow): Promise<void> {\n  if (checkoutPending.value || !row.visitId || row.status !== \"binnen\")\n    return;\n  const token = request;\n  checkoutPending.value = true;\n  actionError.value = \"\";\n  try {\n    await api.checkoutVisit({ id: row.visitId });\n    showToast(`${row.name} is vertrokken`);\n    if (token === request)\n      await load();\n  } catch {\n    if (token === request)\n      actionError.value = `${row.name} afmelden is niet gelukt. Controleer je verbinding en probeer het opnieuw.`;\n  } finally {\n    checkoutPending.value = false;\n  }\n}\n\nasync function loadList(): Promise<{ page: typeof page.value; rows: VisitRow[] }> {\n  const now = new Date();\n  const today = amsterdamDay(now);\n  if (historyTab.value) {\n    const offset = Number(route.value.query.offset ?? \"0\");\n    if (!Number.isSafeInteger(offset) || offset < 0)\n      throw new Error(\"Kies een geldige pagina.\");\n    // History ends yesterday: today's visits belong to the Vandaag tab.\n    const range = period.value === \"datum\"\n      ? { date: route.value.query.date ?? addDays(today, -1) }\n      : { from: addDays(today, period.value === \"7\" ? -7 : -30), until: addDays(today, -1) };\n    const result = await api.visits({ offset, limit: PAGE_SIZE, ...range });\n    return { page: result, rows: result.items.map(visit => registrationRow(visit, { withDate: true })) };\n  }\n  const week = period.value === \"week\";\n  const [registrations, expected] = await Promise.all([\n    allPages(offset => api.visits({ date: today, offset, limit: 100 })),\n    allPages(offset => api.expectedVisits({ ...(week ? {} : { date: today }), offset, limit: 100 })),\n  ]);\n  const until = now.getTime() + 7 * 86_400_000;\n  // An expectation whose start passed without a registration is no longer upcoming; the overview counts the same way.\n  const upcoming = expected.filter(visit => new Date(visit.startsAt) > now && new Date(visit.startsAt).getTime() < until);\n  return {\n    page: null,\n    rows: [\n      ...registrations.map(visit => registrationRow(visit, { withDate: false })),\n      ...upcoming.map(visit => expectedRow(visit, { withDate: week && amsterdamDay(new Date(visit.startsAt)) !== today })),\n    ].toSorted((a, b) => a.sortAt - b.sortAt),\n  };\n}\n\nasync function load(): Promise<void> {\n  // A response for a previous page must never populate a new detail or filter.\n  const token = ++request;\n  pending.value = true;\n  error.value = \"\";\n  actionError.value = \"\";\n  detail.value = null;\n  page.value = null;\n  rows.value = null;\n  try {\n    if (detailRoute.value) {\n      const idText = route.value.rest[0];\n      const id = Number(idText);\n      if (route.value.rest.length !== 1 || !/^[1-9]\\d*$/.test(idText) || !Number.isSafeInteger(id))\n        throw new Error(\"Kies een geldig bezoek.\");\n      const result = await api.visit({ id });\n      if (token === request)\n        detail.value = result;\n      return;\n    }\n    const [overview, list] = await Promise.all([\n      api.overview({ date: amsterdamDay(new Date()) }),\n      evacuationTab.value ? Promise.resolve(null) : loadList(),\n    ]);\n    if (token !== request)\n      return;\n    totals.value = overview;\n    page.value = list?.page ?? null;\n    rows.value = list?.rows ?? null;\n  } catch {\n    if (token === request)\n      error.value = detailRoute.value ? \"Dit bezoek is niet beschikbaar of je hebt geen toegang. Ga terug naar de bezoeken.\" : \"De bezoeken konden niet worden geladen. Controleer de periode of probeer het opnieuw.\";\n  } finally {\n    if (token === request)\n      pending.value = false;\n  }\n}\nwatch(() => route.value, () => { void load(); }, { immediate: true });\n</script>\n\n<template>\n  <div v-if=\"detailRoute\">\n    <PageHeader title=\"Bezoekregistratie\" :context=\"bootstrap.customer.name\" :back-href=\"customerHref('bezoeken', { query: listQuery() })\"\n                description=\"Gegevens en oproepen van dit bezoek.\" />\n    <SectionCard class=\"visits__content\" title=\"Registratie\" :aria-busy=\"pending\">\n      <Skeleton v-if=\"loadingIndicator.holding\" label=\"Bezoek laden\" :visible=\"loadingIndicator.visible\" :count=\"8\" :height=\"22\" />\n      <EmptyState v-else-if=\"error\" kind=\"error\" title=\"Bezoek niet beschikbaar\" :description=\"error\">\n        <template #actions><a class=\"visits__link\" :href=\"customerHref('bezoeken', { query: listQuery() })\">Terug naar bezoeken</a></template>\n      </EmptyState>\n      <template v-else-if=\"detail\">\n        <dl class=\"visits__details\">\n          <dt>Bezoeker</dt><dd>{{ detail.firstname }} {{ detail.lastname }}</dd>\n          <dt>Bedrijf</dt><dd>{{ detail.company || 'Niet ingesteld' }}</dd>\n          <dt>Telefoonnummer</dt><dd>{{ detail.phone || 'Niet ingesteld' }}</dd>\n          <dt>Medewerker</dt><dd>{{ detail.employeeName || 'Niet ingesteld' }}</dd>\n          <dt>Geregistreerd op</dt><dd>{{ displayTime(detail.registeredAt) }}</dd>\n          <dt>Afspraak tot</dt><dd>{{ displayTime(detail.appointmentUntil) }}</dd>\n          <dt>Vertrokken op</dt><dd>{{ detail.departedAt ? displayTime(detail.departedAt) : 'Niet afgemeld' }}</dd>\n          <dt>Status</dt><dd><StatusBadge v-bind=\"visitStatus(detail)\" /></dd>\n        </dl>\n        <p v-if=\"actionError\" class=\"visits__error\" role=\"alert\">{{ actionError }}</p>\n        <div v-if=\"detail.registeredAt && !detail.departedAt\"><Button :disabled=\"checkoutPending\" @click=\"checkout\">{{ checkoutPending ? 'Afmelden...' : 'Afmelden' }}</Button></div>\n        <h2 class=\"visits__subtitle\">Oproepen</h2>\n        <ul v-if=\"detail.calls.length\" class=\"visits__calls\">\n          <li v-for=\"call in detail.calls\" :key=\"call.id\">Oproep #{{ call.id }}: {{ displayTime(call.createdAt) }}</li>\n        </ul>\n        <p v-else>Geen oproepen geregistreerd.</p>\n      </template>\n    </SectionCard>\n  </div>\n  <div v-else class=\"visits\">\n    <PageHeader title=\"Bezoeken.\" :context=\"bootstrap.customer.name\" description=\"Wie er komt, wie er is en wie er al weer weg is.\"\n                :class=\"{ 'visits__header--evacuation': evacuationTab }\">\n      <template #meta>\n        <div class=\"visits__counters\" :aria-busy=\"totals === null\">\n          <span v-for=\"counter in counters\" :key=\"counter.label\" class=\"visits__counter\" :class=\"`visits__counter--${counter.tone}`\">\n            <span class=\"visits__counter-number\" :class=\"{ 'visits__counter-number--loading': counter.count === null }\">{{ counter.count }}</span>{{ counter.label }}\n          </span>\n        </div>\n      </template>\n    </PageHeader>\n    <nav class=\"visits__tabs\" aria-label=\"Weergave van bezoeken\">\n      <a v-for=\"tab in tabs\" :key=\"tab.id\" class=\"visits__tab\" :class=\"{ 'visits__tab--current': tab.current }\" :href=\"customerHref('bezoeken', { query: tab.query })\" :aria-current=\"tab.current ? 'page' : undefined\">\n        <span class=\"visits__tab-label\" :data-label=\"tab.label\">{{ tab.label }}</span><span v-if=\"tab.count !== null\" class=\"visits__tab-count\">{{ tab.count }}</span>\n      </a>\n    </nav>\n    <p v-if=\"actionError\" class=\"visits__error\" role=\"alert\">{{ actionError }}</p>\n    <CustomerEvacuation v-if=\"evacuationTab\" :customer-name=\"bootstrap.customer.name\" @finished=\"load\" />\n    <VisitTable v-else :key=\"historyTab ? 'history' : 'today'\" :rows=\"rows ?? []\" :periods=\"historyTab ? historyPeriods : todayPeriods\" :period=\"period\"\n                :statuses=\"historyTab ? ['binnen', 'vertrokken'] : ['verwacht', 'binnen', 'vertrokken']\" :title=\"historyTab ? historyTitle : todayTitle\"\n                :pending=\"pending\" :error=\"error\" :checkout-pending=\"checkoutPending\" :detail-query=\"listQuery()\" @period=\"setPeriod\" @checkout=\"checkoutRow\" @retry=\"load\">\n      <template v-if=\"historyTab && period === 'datum'\" #filters>\n        <HistoryDatePicker :model-value=\"route.query.date ?? yesterday\" :max=\"yesterday\" @update:model-value=\"date => navigate({ tab: 'geschiedenis', periode: 'datum', date })\" />\n      </template>\n      <template v-if=\"historyTab && page\" #footer>\n        <nav class=\"visits__pages\" aria-label=\"Paginering\">\n          <span class=\"visits__page-label\">Pagina {{ currentPage }} van {{ pageCount }}</span>\n          <span class=\"visits__page-buttons\">\n            <button type=\"button\" class=\"visits__page-step\" :disabled=\"currentPage === 1\" aria-label=\"Vorige pagina\" @click=\"goToPage(currentPage - 1)\">Vorige</button>\n            <button v-for=\"number in pageNumbers\" :key=\"number\" type=\"button\" class=\"visits__page-number\" :class=\"{ 'visits__page-number--current': number === currentPage }\"\n                    :aria-current=\"number === currentPage ? 'page' : undefined\" @click=\"goToPage(number)\">{{ number }}</button>\n            <button type=\"button\" class=\"visits__page-step\" :disabled=\"currentPage === pageCount\" aria-label=\"Volgende pagina\" @click=\"goToPage(currentPage + 1)\">Volgende</button>\n          </span>\n        </nav>\n      </template>\n    </VisitTable>\n  </div>\n</template>\n\n<style scoped>\n.visits { display: flex; flex-direction: column; gap: 28px; min-width: 0; }\n.visits .visits__header--evacuation { background: var(--coral); }\n.visits__counters { display: flex; flex-wrap: wrap; gap: 8px; }\n.visits__counter { display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding: 0 16px 0 6px; border-radius: 999px; background: var(--paper); color: var(--foreground); font-size: 14px; font-weight: 700; }\n.visits__counter-number { min-width: 26px; height: 26px; padding: 0 6px; box-sizing: border-box; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-display); font-weight: 800; }\n.visits__counter--inside { background: var(--foreground); color: var(--cream); }\n.visits__counter--inside .visits__counter-number { background: var(--lime); color: var(--foreground); }\n.visits__counter--expected .visits__counter-number { background: var(--foreground); color: var(--cream); }\n.visits__counter--departed .visits__counter-number { background: rgba(25, 37, 31, 0.12); color: var(--foreground); }\n.visits__counter-number--loading { animation: visits-skeleton 1s ease-in-out infinite alternate; }\n@keyframes visits-skeleton { to { opacity: 0.4; } }\n@media (prefers-reduced-motion: reduce) { .visits__counter-number--loading { animation: none; } }\n/* One scrollable row on phones, so the header keeps the height of the other pages. */\n@media (max-width: 599px) {\n  /* Runs into the header's 24px side padding, so a cut-off pill reads as scrollable. */\n  .visits__counters { flex-wrap: nowrap; gap: 6px; max-width: calc(100% + 24px); margin-right: -24px; padding-right: 24px; box-sizing: border-box; overflow-x: auto; scrollbar-width: none; }\n  .visits__counter { flex: none; gap: 6px; padding-right: 12px; padding-left: 5px; font-size: 13px; }\n}\n.visits__tabs { display: flex; flex-wrap: wrap; gap: 4px; border-bottom: 1px solid var(--border); }\n.visits__tab { display: flex; align-items: center; gap: 8px; min-height: 50px; padding: 0 16px; margin-bottom: -1px; border-bottom: 2px solid transparent; color: var(--foreground); text-decoration: none; font-size: 15px; font-weight: 600; cursor: pointer; }\n.visits__tab--current { border-bottom-color: var(--foreground); font-weight: 700; }\n/* Reserve the bold label's width so the current tab keeps its neighbors in place. */\n.visits__tab-label { display: inline-block; }\n.visits__tab-label::after { display: block; height: 0; overflow: hidden; content: attr(data-label); font-weight: 700; visibility: hidden; }\n.visits__tab-count { min-width: 22px; padding: 1px 8px; border-radius: 999px; background: var(--selected); font-size: 12px; font-weight: 700; text-align: center; box-sizing: border-box; }\n.visits__pages { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; justify-content: space-between; padding: 16px 24px; border-top: 1px solid var(--border); }\n.visits__page-label { font-size: 14px; color: var(--muted-foreground); }\n.visits__page-buttons { display: flex; gap: 6px; }\n.visits__page-step, .visits__page-number { min-height: 40px; border-radius: 999px; border: 1.5px solid var(--border); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.visits__page-step { padding: 0 16px; border-color: var(--foreground); }\n.visits__page-step:disabled { border-color: var(--border); color: var(--muted-foreground); cursor: default; }\n.visits__page-number { width: 40px; height: 40px; padding: 0; }\n.visits__page-number--current { border: 0; background: var(--foreground); color: var(--cream); cursor: default; }\n.visits__content { margin-top: 20px; }\n.visits__details { display: grid; grid-template-columns: minmax(100px, 180px) minmax(0, 1fr); gap: 12px; margin: 0; }\n.visits__details dt { color: var(--muted-foreground); }\n.visits__details dd { margin: 0; overflow-wrap: anywhere; }\n.visits__subtitle { margin: 8px 0 0; font-size: 18px; font-weight: 500; }\n.visits__calls { padding-left: 20px; margin: 0; }\n.visits__link { color: var(--primary); cursor: pointer; overflow-wrap: anywhere; }\n.visits__error { color: var(--danger); margin: 0; }\n</style>\n","import { createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"page-header\" }\nconst _hoisted_2 = { class: \"page-header__main\" }\nconst _hoisted_3 = [\"href\"]\nconst _hoisted_4 = {\n  key: 1,\n  class: \"page-header__context\"\n}\nconst _hoisted_5 = { class: \"page-header__title\" }\nconst _hoisted_6 = { class: \"page-header__description\" }\nconst _hoisted_7 = { class: \"page-header__row\" }\nconst _hoisted_8 = {\n  key: 0,\n  class: \"page-header__meta\"\n}\nconst _hoisted_9 = {\n  key: 1,\n  class: \"page-header__actions\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"header\", _hoisted_1, [\n    _createElementVNode(\"div\", _hoisted_2, [\n      ($props.backHref)\n        ? (_openBlock(), _createElementBlock(\"a\", {\n            key: 0,\n            class: \"page-header__back\",\n            href: $props.backHref\n          }, [\n            _createVNode($setup[\"Icon\"], {\n              name: \"arrow-left\",\n              size: 16\n            }),\n            _createElementVNode(\"span\", null, _toDisplayString($props.backLabel), 1 /* TEXT */)\n          ], 8 /* PROPS */, _hoisted_3))\n        : _createCommentVNode(\"v-if\", true),\n      ($props.context)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($props.context), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"h1\", _hoisted_5, _toDisplayString($props.title), 1 /* TEXT */),\n      _createElementVNode(\"p\", _hoisted_6, _toDisplayString($props.description), 1 /* TEXT */)\n    ]),\n    _createCommentVNode(\" Always rendered: the reserved row keeps every page header the same height, with or without meta and actions. \"),\n    _createElementVNode(\"div\", _hoisted_7, [\n      (_ctx.$slots.meta)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n            _renderSlot(_ctx.$slots, \"meta\", {}, undefined, true)\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      (_ctx.$slots.actions)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_9, [\n            _renderSlot(_ctx.$slots, \"actions\", {}, undefined, true)\n          ]))\n        : _createCommentVNode(\"v-if\", true)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/PageHeader.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/PageHeader.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/PageHeader.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/PageHeader.vue\";script.__scopeId = \"data-v-a7d45963\";export default script;","<template>\n  <section class=\"section-card\" :aria-labelledby=\"title ? titleId : undefined\">\n    <header v-if=\"title || $slots.actions\" class=\"section-card__header\">\n      <div class=\"section-card__heading\">\n        <h2 v-if=\"title\" :id=\"titleId\" class=\"section-card__title\">{{ title }}</h2>\n        <p v-if=\"description\" class=\"section-card__description\">{{ description }}</p>\n      </div>\n      <div v-if=\"$slots.actions\" class=\"section-card__actions\">\n        <slot name=\"actions\" />\n      </div>\n    </header>\n    <slot />\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useId } from \"vue\";\n\n/** Panel for a group of content or settings on a page (radius 8, 24px padding, 16px apart). */\nwithDefaults(defineProps<{ title?: string; description?: string }>(), { title: \"\", description: \"\" });\n\nconst titleId = useId();\n</script>\n\n<style scoped>\n.section-card {\n  display: flex;\n  flex-direction: column;\n  gap: 16px;\n  min-width: 0;\n  padding: 24px;\n  border: 0;\n  border-radius: 0;\n  background: var(--surface-raised);\n}\n\n.section-card__header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-start;\n  justify-content: space-between;\n  gap: 12px;\n}\n\n.section-card__heading {\n  flex: 1 1 240px;\n  min-width: 0;\n}\n\n.section-card__title {\n  margin: 0;\n  font-size: 22px;\n  font-weight: 600;\n  letter-spacing: -0.04em;\n}\n\n.section-card__description {\n  margin: 4px 0 0;\n  color: var(--muted-foreground);\n}\n\n.section-card__actions {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n\n@media (max-width: 767px) {\n  .section-card {\n    padding: 16px;\n  }\n\n  .section-card:has(.dt) { padding: 16px 0; border: 0; border-radius: 0; background: transparent; }\n}\n</style>\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = [\"aria-labelledby\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"section-card__header\"\n}\nconst _hoisted_3 = { class: \"section-card__heading\" }\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = {\n  key: 1,\n  class: \"section-card__description\"\n}\nconst _hoisted_6 = {\n  key: 0,\n  class: \"section-card__actions\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", {\n    class: \"section-card\",\n    \"aria-labelledby\": $props.title ? $setup.titleId : undefined\n  }, [\n    ($props.title || _ctx.$slots.actions)\n      ? (_openBlock(), _createElementBlock(\"header\", _hoisted_2, [\n          _createElementVNode(\"div\", _hoisted_3, [\n            ($props.title)\n              ? (_openBlock(), _createElementBlock(\"h2\", {\n                  key: 0,\n                  id: $setup.titleId,\n                  class: \"section-card__title\"\n                }, _toDisplayString($props.title), 9 /* TEXT, PROPS */, _hoisted_4))\n              : _createCommentVNode(\"v-if\", true),\n            ($props.description)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($props.description), 1 /* TEXT */))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          (_ctx.$slots.actions)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n                _renderSlot(_ctx.$slots, \"actions\", {}, undefined, true)\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n  ], 8 /* PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SectionCard.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SectionCard.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SectionCard.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SectionCard.vue\";script.__scopeId = \"data-v-04162243\";export default script;","<template>\n  <span class=\"status\" :class=\"`status--${tone}`\">\n    <Icon :name=\"icon ?? defaultIcon\" :size=\"14\" class=\"status__icon\" />\n    <span>{{ label }}</span>\n  </span>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport type { IconName } from \"../../lib/icons\";\nimport type { StatusTone } from \"../../lib/ui\";\n\n/** Status as text plus symbol, never color alone (PRD 12.3): <StatusBadge tone=\"success\" label=\"Online\" />. */\nconst props = withDefaults(defineProps<{ tone: StatusTone; label: string; icon?: IconName }>(), { icon: undefined });\n\nconst defaultIcon = computed<IconName>(() => ({\n  success: \"checkmark-filled\",\n  danger: \"misuse\",\n  warning: \"warning-alt\",\n  neutral: \"dot-mark\",\n  info: \"information\",\n  pending: \"circle-dash\",\n  locked: \"locked\",\n} as const)[props.tone]);\n</script>\n\n<style scoped>\n.status {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  min-height: 28px;\n  padding: 0 12px 0 9px;\n  border-radius: var(--radius-control);\n  background: var(--selected);\n  font-size: 13px;\n  white-space: nowrap;\n  font-weight: 700;\n}\n\n.status--success { background: var(--accent); }\n.status--pending, .status--info { background: var(--sky); }\n.status--danger { background: var(--danger-soft); }\n.status--warning { background: var(--warning-soft); }\n.status--locked { background: transparent; border: 1px solid var(--border); }\n\n.status__icon {\n  flex-shrink: 0;\n}\n\n.status--success .status__icon {\n  color: var(--success);\n}\n\n.status--danger {\n  color: var(--danger);\n}\n\n.status--warning .status__icon {\n  color: var(--warning);\n}\n\n.status--neutral .status__icon,\n.status--locked .status__icon {\n  color: var(--muted-foreground);\n}\n\n.status--info .status__icon,\n.status--pending .status__icon {\n  color: var(--muted-foreground);\n}\n</style>\n","import { createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"span\", {\n    class: _normalizeClass([\"status\", `status--${$props.tone}`])\n  }, [\n    _createVNode($setup[\"Icon\"], {\n      name: $props.icon ?? $setup.defaultIcon,\n      size: 14,\n      class: \"status__icon\"\n    }, null, 8 /* PROPS */, [\"name\"]),\n    _createElementVNode(\"span\", null, _toDisplayString($props.label), 1 /* TEXT */)\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/StatusBadge.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/StatusBadge.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/StatusBadge.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/StatusBadge.vue\";script.__scopeId = \"data-v-2e778bc6\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = { class: \"visually-hidden\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"skeleton\", [`skeleton--${$props.layout}`, { 'skeleton--visible': $props.visible }]]),\n    role: \"status\",\n    \"data-testid\": \"skeleton\",\n    style: _normalizeStyle({ '--skeleton-height': `${$props.height}px`, '--skeleton-min': `${$props.minWidth}px` })\n  }, [\n    _createElementVNode(\"span\", _hoisted_1, _toDisplayString($props.label), 1 /* TEXT */),\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.count, (index) => {\n      return (_openBlock(), _createElementBlock(\"span\", {\n        key: index,\n        class: \"skeleton__item\",\n        \"aria-hidden\": \"true\"\n      }))\n    }), 128 /* KEYED_FRAGMENT */))\n  ], 6 /* CLASS, STYLE */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Skeleton.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Skeleton.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Skeleton.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Skeleton.vue\";script.__scopeId = \"data-v-9ca31fcf\";export default script;","import { onScopeDispose, reactive, watch, type WatchSource } from \"vue\";\n\n/** `holding`: keep the placeholder in place of the content. `visible`: actually draw it. */\nexport type LoadingState = { holding: boolean; visible: boolean };\n\ntype Clock = { now: () => number; setTimeout: (fn: () => void, ms: number) => unknown; clearTimeout: (timer: unknown) => void };\n\n/* 200ms follows the Queensland Government loading-spinner guidance; 500ms is a project starting value,\n   not a research threshold. Both only shape the indicator, never the request itself. */\nexport const SHOW_DELAY_MS = 200;\nexport const MIN_VISIBLE_MS = 500;\n\nconst browserClock: Clock = {\n  now: () => performance.now(),\n  setTimeout: (fn, ms) => window.setTimeout(fn, ms),\n  clearTimeout: timer => window.clearTimeout(timer as number),\n};\n\n/** Delayed-show, minimum-visible lifecycle for a loading placeholder, separate from the request state. */\nexport function createLoadingIndicator(onChange: (state: LoadingState) => void, { clock = browserClock, showDelay = SHOW_DELAY_MS, minVisible = MIN_VISIBLE_MS }: { clock?: Clock; showDelay?: number; minVisible?: number } = {}) {\n  let busy = false;\n  let visibleSince: number | null = null;\n  let timer: unknown = null;\n\n  function emit(): void {\n    onChange({ holding: busy || visibleSince !== null, visible: visibleSince !== null });\n  }\n  function schedule(fn: (() => void) | null, ms = 0): void {\n    if (timer !== null)\n      clock.clearTimeout(timer);\n    timer = fn ? clock.setTimeout(() => { timer = null; fn(); emit(); }, ms) : null;\n  }\n\n  return {\n    set(next: boolean): void {\n      if (next === busy)\n        return;\n      busy = next;\n      if (busy) {\n        if (visibleSince === null)\n          schedule(() => { visibleSince = clock.now(); }, showDelay);\n        else\n          schedule(null); // busy again while still shown: keep showing\n      } else if (visibleSince === null) {\n        schedule(null);\n      } else {\n        const remaining = minVisible - (clock.now() - visibleSince);\n        if (remaining > 0)\n          schedule(() => { visibleSince = null; }, remaining);\n        else\n          visibleSince = null;\n      }\n      emit();\n    },\n    dispose: () => schedule(null),\n  };\n}\n\n/** Vue wrapper: follows a loading flag and clears its timer when the owning component unmounts. */\nexport function useLoadingIndicator(source: WatchSource<boolean>): LoadingState {\n  const state = reactive<LoadingState>({ holding: false, visible: false });\n  const indicator = createLoadingIndicator(next => Object.assign(state, next));\n  watch(source, busy => indicator.set(busy), { immediate: true });\n  onScopeDispose(indicator.dispose);\n  return state;\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onBeforeUnmount } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport { formatDateLong, formatTime } from \"../../lib/format\";\nimport { showToast } from \"../../lib/toast\";\nimport EvacuationFinishDialog from \"./EvacuationFinishDialog.vue\";\nimport EvacuationReports from \"./EvacuationReports.vue\";\nimport DataTable from \"../ui/DataTable.vue\";\nimport type { TableColumn } from \"../../lib/ui\";\n\ndefineProps<{ customerName: string }>();\nconst emit = defineEmits<{ finished: [] }>();\nconst api = rpc(\"velkom:admin\");\nconst visitors = ref<Awaited<ReturnType<typeof api.evacuation>> | null>(null);\nconst snapshotAt = ref<Date | null>(null);\nconst pending = ref(false);\nconst error = ref(\"\");\nlet request = 0;\nconst refreshing = ref(false);\nconst manualRefreshing = ref(false);\nlet feedbackTimer: ReturnType<typeof setTimeout> | undefined;\nlet finishFeedback: (() => void) | undefined;\nconst session = ref<Awaited<ReturnType<typeof api.evacuationSession>>>(null);\nconst sessionPending = ref(false);\nconst sessionError = ref(\"\");\nconst running = computed(() => Boolean(session.value && !session.value.endedAt));\nconst sessionLabel = computed(() => session.value?.actual ? \"Ontruiming\" : \"Oefening\");\nconst completion = ref<Awaited<ReturnType<typeof api.evacuationCompletion>> | null>(null);\nconst completionError = ref(\"\");\nconst reportsDialog = ref<InstanceType<typeof EvacuationReports> | null>(null);\nlet refreshTimer: ReturnType<typeof setInterval> | undefined;\n// A visitor checked out during the session drops off the list, so only listed visitors count.\nconst listedSafe = computed(() => session.value?.safeVisitIds.filter(id => visitors.value?.some(visitor => visitor.id === id)) ?? []);\nconst progress = computed(() => ({ safe: listedSafe.value.length, total: visitors.value?.length ?? 0 }));\nconst columns = computed<TableColumn[]>(() => [\n  { key: \"name\", label: \"Naam\" },\n  { key: \"company\", label: \"Bedrijf\" },\n  { key: \"employeeName\", label: \"Gastheer\" },\n  { key: \"registeredAt\", label: \"Aankomst\" },\n  ...(running.value ? [{ key: \"safety\", label: sessionLabel.value, align: \"end\" as const }] : []),\n]);\nconst dayFormat = new Intl.DateTimeFormat(\"sv-SE\", { timeZone: \"Europe/Amsterdam\" });\n\n/** Visitors who arrived on an earlier day keep their date, so nobody is mistaken for a fresh arrival. */\nfunction arrival(value: string | null): string {\n  if (!value)\n    return \"Onbekend\";\n  const date = new Date(value);\n  return dayFormat.format(date) === dayFormat.format(new Date()) ? formatTime(date) : `${formatDateLong(date)}, ${formatTime(date)}`;\n}\n\nasync function load(options: { background?: boolean } = {}): Promise<void> {\n  if (options.background && (refreshing.value || sessionPending.value))\n    return;\n  const token = ++request;\n  refreshing.value = true;\n  if (!options.background) {\n    visitors.value = null;\n    pending.value = true;\n  }\n  try {\n    // Arrival dates may precede today; only a recorded checkout removes a visitor.\n    const [result, current] = await Promise.all([api.evacuation(), api.evacuationSession()]);\n    if (token === request) {\n      visitors.value = result;\n      session.value = current;\n      snapshotAt.value = new Date();\n      error.value = \"\";\n    }\n  } catch {\n    if (token === request)\n      error.value = \"De ontruimingslijst kon niet worden geladen. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    if (token === request) {\n      pending.value = false;\n      refreshing.value = false;\n    }\n  }\n}\n\nasync function refresh(): Promise<void> {\n  if (refreshing.value || manualRefreshing.value || sessionPending.value)\n    return;\n  manualRefreshing.value = true;\n  // Keep feedback visible without delaying the request or discarding the last snapshot.\n  const minimum = new Promise<void>(resolve => {\n    finishFeedback = resolve;\n    feedbackTimer = setTimeout(resolve, 400);\n  });\n  try {\n    await Promise.all([load({ background: true }), minimum]);\n  } finally {\n    manualRefreshing.value = false;\n    finishFeedback = undefined;\n  }\n}\n\n/** The session is shared with colleagues: a rejected action usually means someone else changed it, so reload. */\nasync function sessionAction(action: () => Promise<Awaited<ReturnType<typeof api.evacuationSession>>>, message?: string): Promise<boolean> {\n  if (sessionPending.value)\n    return false;\n  // A response from before this mutation must not replace its committed state.\n  ++request;\n  refreshing.value = false;\n  pending.value = false;\n  sessionPending.value = true;\n  sessionError.value = \"\";\n  try {\n    session.value = await action();\n    if (message)\n      showToast(message);\n    return true;\n  } catch {\n    sessionError.value = \"De ontruiming of oefening kon niet worden bijgewerkt. Controleer je verbinding; de lijst wordt opnieuw opgehaald.\";\n    await load();\n    return false;\n  } finally {\n    sessionPending.value = false;\n  }\n}\n\nasync function startActual(): Promise<void> {\n  await sessionAction(() => api.startEvacuation(), \"Ontruiming gestart. Er wordt niemand automatisch gewaarschuwd.\");\n}\n\nasync function markSafe(options: { visitId: number; safe: boolean }): Promise<void> {\n  const id = session.value?.id;\n  if (id)\n    await sessionAction(() => api.markEvacuationSafe({ id, ...options }));\n}\n\nasync function requestFinish(): Promise<void> {\n  if (!session.value || sessionPending.value)\n    return;\n  const id = session.value.id;\n  if (!session.value.actual) {\n    if (await sessionAction(() => api.endEvacuation({ id }), \"Oefening beëindigd. Het verslag is opgeslagen.\"))\n      void reportsDialog.value?.show({ id });\n    return;\n  }\n  sessionPending.value = true;\n  sessionError.value = \"\";\n  completionError.value = \"\";\n  try {\n    completion.value = await api.evacuationCompletion({ id });\n  } catch {\n    sessionError.value = \"Het afronden kon niet worden voorbereid. Vernieuw de lijst en probeer het opnieuw.\";\n  } finally {\n    sessionPending.value = false;\n  }\n}\n\nasync function finish(options: { checkoutSafe: boolean }): Promise<void> {\n  const current = completion.value;\n  if (!current || sessionPending.value)\n    return;\n  completionError.value = \"\";\n  const confirmation = {\n    safeVisitIds: current.report.visitors.filter(visitor => visitor.safeAt).map(visitor => visitor.id),\n    unresolvedVisitIds: current.report.visitors.filter(visitor => !visitor.safeAt).map(visitor => visitor.id),\n  };\n  if (await sessionAction(() => api.endEvacuation({ id: current.id, ...options, confirmation }), \"Ontruiming afgerond. Het verslag is opgeslagen.\")) {\n    completion.value = null;\n    void reportsDialog.value?.show({ id: current.id });\n    await load({ background: true });\n    emit(\"finished\");\n  } else {\n    completionError.value = \"Afronden is niet bevestigd. Sluit dit venster en open het opnieuw voor de actuele lijst. Controleer ook je verbinding.\";\n  }\n}\n\nfunction printList(): void {\n  window.print();\n}\nonMounted(() => {\n  void load();\n  refreshTimer = setInterval(() => {\n    if (!manualRefreshing.value)\n      void load({ background: true });\n  }, 5000);\n});\nonBeforeUnmount(() => {\n  ++request;\n  clearInterval(refreshTimer);\n  clearTimeout(feedbackTimer);\n  finishFeedback?.();\n});\n</script>\n\n<template>\n  <!-- Supplied BezoekenOntruiming.html. Gratis has no locations, so the location column and title suffix are omitted. -->\n  <section class=\"customer-evacuation\" aria-labelledby=\"evacuation-title\" :aria-busy=\"pending || manualRefreshing\" data-testid=\"customer-evacuation\">\n    <div class=\"customer-evacuation__header\">\n      <div class=\"customer-evacuation__heading\">\n        <div class=\"customer-evacuation__title-row\">\n          <h2 id=\"evacuation-title\" class=\"customer-evacuation__title\">Ontruimingslijst</h2>\n          <span v-if=\"visitors\" class=\"customer-evacuation__count\" aria-live=\"polite\">\n            <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M11 3h4.5A1.5 1.5 0 0 1 17 4.5v11a1.5 1.5 0 0 1-1.5 1.5H11M3 10h9M8.5 6.5L12 10l-3.5 3.5\" /></svg>\n            {{ visitors.length }} {{ visitors.length === 1 ? \"bezoeker\" : \"bezoekers\" }} binnen\n          </span>\n        </div>\n      </div>\n      <div class=\"customer-evacuation__actions\">\n        <EvacuationReports ref=\"reportsDialog\" />\n        <button type=\"button\" class=\"customer-evacuation__button\" :disabled=\"!visitors\" @click=\"printList\">Afdrukvoorbeeld</button>\n        <button v-if=\"!running\" type=\"button\" class=\"customer-evacuation__button customer-evacuation__button--outline\" :disabled=\"!visitors || sessionPending\" @click=\"sessionAction(() => api.startEvacuationDrill(), 'Oefening gestart. Er wordt niemand gewaarschuwd.')\">Ontruiming oefenen</button>\n        <button v-if=\"!running || !session?.actual\" type=\"button\" class=\"customer-evacuation__button customer-evacuation__button--primary\" :disabled=\"!visitors || sessionPending\" @click=\"startActual\">Ontruiming starten</button>\n      </div>\n    </div>\n    <div class=\"customer-evacuation__note\" role=\"note\">\n      <span class=\"customer-evacuation__note-label\">Let op</span>\n      <span>Alleen geregistreerde bezoekers zonder vertrek; medewerkers staan hier niet op. Er wordt niemand automatisch gewaarschuwd. Deze lijst vervangt geen alarminstallatie.</span>\n    </div>\n    <div v-if=\"running && session\" class=\"customer-evacuation__drill\" :class=\"{ 'customer-evacuation__drill--actual': session.actual }\" role=\"status\">\n      <span><strong>{{ sessionLabel }} loopt</strong> sinds {{ formatTime(new Date(session.startedAt)) }}: {{ progress.safe }} van {{ progress.total }} veilig gemeld.</span>\n      <span class=\"customer-evacuation__drill-actions\">\n        <button type=\"button\" class=\"customer-evacuation__small\" :disabled=\"!listedSafe.length || sessionPending || Boolean(error)\" @click=\"markSafe({ visitId: listedSafe[listedSafe.length - 1], safe: false })\">Laatste terugdraaien</button>\n        <button type=\"button\" class=\"customer-evacuation__small customer-evacuation__small--primary\" :disabled=\"sessionPending || Boolean(error)\" @click=\"requestFinish\">{{ session.actual ? \"Ontruiming afronden\" : \"Oefening beëindigen\" }}</button>\n      </span>\n    </div>\n    <p v-else-if=\"session?.endedAt\" class=\"customer-evacuation__drill customer-evacuation__drill--ended\" role=\"status\">\n      {{ sessionLabel }} {{ session.actual ? \"afgerond\" : \"beëindigd\" }} om {{ formatTime(new Date(session.endedAt)) }}: {{ session.safeVisitIds.length }} {{ session.safeVisitIds.length === 1 ? \"bezoeker\" : \"bezoekers\" }} veilig gemeld.\n    </p>\n    <p v-if=\"sessionError\" class=\"customer-evacuation__drill-error\" role=\"alert\">{{ sessionError }}</p>\n    <div v-if=\"error\" class=\"customer-evacuation__message\" role=\"alert\">\n      <p>{{ error }}</p>\n      <button type=\"button\" class=\"customer-evacuation__button customer-evacuation__button--small\" :disabled=\"pending\" @click=\"load()\">Opnieuw proberen</button>\n    </div>\n    <div class=\"customer-evacuation__toolbar\">\n      <span class=\"customer-evacuation__snapshot\">{{ pending ? \"Ontruimingslijst laden...\" : snapshotAt && visitors ? `Momentopname van ${formatDateLong(snapshotAt)}, ${formatTime(snapshotAt)}` : customerName }}</span>\n      <button type=\"button\" class=\"customer-evacuation__button customer-evacuation__button--small customer-evacuation__refresh\" :disabled=\"refreshing || manualRefreshing || sessionPending\" :aria-busy=\"manualRefreshing\" :aria-label=\"manualRefreshing ? 'Bezig met vernieuwen' : 'Vernieuwen'\" @click=\"refresh\">\n        <span class=\"customer-evacuation__refresh-label\" :class=\"{ 'customer-evacuation__refresh-label--hidden': manualRefreshing }\" :aria-hidden=\"manualRefreshing\">Vernieuwen</span>\n        <span class=\"customer-evacuation__refresh-spinner\" aria-hidden=\"true\" />\n      </button>\n    </div>\n    <template v-if=\"visitors\">\n      <DataTable class=\"customer-evacuation__table\" :class=\"{ 'customer-evacuation__table--refreshing': manualRefreshing }\" :inert=\"manualRefreshing || undefined\" :aria-hidden=\"manualRefreshing || undefined\" :columns=\"columns\" :rows=\"visitors\" :caption=\"`Ontruimingslijst ${customerName}`\" row-key=\"id\">\n        <template #cell-name=\"{ row }\"><strong>{{ row.firstname }} {{ row.lastname }}</strong></template>\n        <template #cell-company=\"{ row }\">{{ row.company || \"Niet ingesteld\" }}</template>\n        <template #cell-employeeName=\"{ row }\">{{ row.employeeName || \"Niet ingesteld\" }}</template>\n        <template #cell-registeredAt=\"{ row }\">{{ arrival(row.registeredAt) }}</template>\n        <template #cell-safety=\"{ row }\">\n          <span v-if=\"session?.safeVisitIds.includes(row.id)\" class=\"customer-evacuation__safe\">\n            <span class=\"customer-evacuation__safe-label\">Veilig</span>\n            <button type=\"button\" class=\"customer-evacuation__link\" :aria-label=\"`${row.firstname} ${row.lastname} terugdraaien`\" :disabled=\"sessionPending || Boolean(error)\" @click=\"markSafe({ visitId: row.id, safe: false })\">Terugdraaien</button>\n          </span>\n          <button v-else type=\"button\" class=\"customer-evacuation__small\" :aria-label=\"`${row.firstname} ${row.lastname} veilig melden`\" :disabled=\"sessionPending || Boolean(error)\" @click=\"markSafe({ visitId: row.id, safe: true })\">Veilig melden</button>\n        </template>\n        <template #empty><p class=\"customer-evacuation__empty\">Er zijn nu geen bezoekers binnen.</p></template>\n      </DataTable>\n    </template>\n    <EvacuationFinishDialog v-if=\"completion\" :completion=\"completion\" :pending=\"sessionPending\" :error=\"completionError\"\n                            @confirm=\"finish\" @cancel=\"completion = null\" />\n  </section>\n</template>\n\n<style scoped>\n.customer-evacuation { background: var(--paper); display: flex; flex-direction: column; }\n.customer-evacuation__header { display: flex; flex-wrap: wrap; gap: 16px; align-items: flex-end; justify-content: space-between; padding: 22px 24px 16px; }\n.customer-evacuation__heading { display: flex; flex-direction: column; gap: 6px; }\n.customer-evacuation__title-row { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n.customer-evacuation__title { margin: 0; font-family: var(--font-display); font-size: 26px; font-weight: 600; letter-spacing: -0.04em; }\n.customer-evacuation__count { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 12px 0 9px; border-radius: 999px; background: var(--lime); font-size: 13px; font-weight: 700; }\n.customer-evacuation__toolbar { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 24px; background: var(--paper); border-bottom: 1px solid var(--border); }\n.customer-evacuation__snapshot { flex: 1; min-width: 0; font-size: 14px; color: var(--muted-foreground); }\n.customer-evacuation__actions { display: flex; flex-wrap: wrap; gap: 12px; }\n/* Velkom.Button secondary/compact from the supplied export, including its hover lift. */\n.customer-evacuation__button { display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 0 20px; border: 1.5px solid var(--foreground); border-radius: 999px; background: transparent; color: var(--foreground); font-family: var(--font-body); font-size: 14px; font-weight: 700; line-height: 1.5; cursor: pointer; transition: transform 0.18s, background 0.18s, color 0.18s; }\n.customer-evacuation__button:hover:not(:disabled) { background: #ffffff59; }\n.customer-evacuation__button:hover:not(:disabled):not(.customer-evacuation__refresh) { transform: translateY(-2px); }\n.customer-evacuation__button:focus-visible { outline: 2px solid var(--foreground); outline-offset: 3px; }\n.customer-evacuation__button:disabled { opacity: 0.45; cursor: not-allowed; }\n.customer-evacuation__button--primary { background: var(--foreground); color: var(--cream); }\n.customer-evacuation__button--primary:hover:not(:disabled) { background: var(--foreground); }\n/* Velkom.Button outline/compact: ink fill on hover. */\n.customer-evacuation__button--outline { gap: 17px; font-size: 13px; }\n.customer-evacuation__button--outline:hover:not(:disabled) { background: var(--foreground); color: var(--cream); }\n.customer-evacuation__drill { margin: 0 24px 16px; display: flex; flex-wrap: wrap; gap: 12px 16px; align-items: center; justify-content: space-between; padding: 14px 16px; background: var(--lime); font-size: 14px; }\n.customer-evacuation__drill--ended { background: var(--cream); border: 1px solid var(--border); }\n.customer-evacuation__drill--actual { background: var(--coral); }\n.customer-evacuation__drill-actions { display: flex; flex-wrap: wrap; gap: 8px; }\n.customer-evacuation__drill-error { margin: 0 24px 16px; color: var(--danger); font-size: 14px; }\n/* Same pill as the visit table's Afmelden/Aanmelden actions. */\n.customer-evacuation__small { min-height: 36px; padding: 0 14px; border-radius: 999px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.customer-evacuation__small--primary { background: var(--foreground); color: var(--cream); }\n.customer-evacuation__small:disabled { opacity: 0.45; cursor: not-allowed; }\n.customer-evacuation__safe { display: inline-flex; align-items: center; gap: 8px; }\n.customer-evacuation__safe-label { display: inline-flex; align-items: center; min-height: 28px; padding: 0 12px; border-radius: 999px; background: var(--lime); font-size: 13px; font-weight: 700; }\n.customer-evacuation__link:disabled { opacity: 0.45; cursor: not-allowed; }\n.customer-evacuation__link { min-height: 36px; padding: 0 8px; border: 0; background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.customer-evacuation__button--small { min-height: 36px; padding: 0 14px; font-size: 13px; }\n.customer-evacuation__refresh { display: inline-grid; grid-template-areas: \"label\"; }\n.customer-evacuation__refresh-label, .customer-evacuation__refresh-spinner { grid-area: label; place-self: center; transition: opacity 140ms ease-out, transform 140ms cubic-bezier(0.22, 1, 0.36, 1); }\n.customer-evacuation__refresh-label--hidden { opacity: 0; transform: translateY(-2px); }\n.customer-evacuation__refresh-spinner { opacity: 0; transform: scale(0.85); }\n.customer-evacuation__refresh-spinner::before { content: \"\"; display: block; width: 14px; height: 14px; border: 1.5px solid currentColor; border-right-color: transparent; border-radius: 50%; }\n.customer-evacuation__refresh[aria-busy=\"true\"] { opacity: 1; }\n.customer-evacuation__refresh[aria-busy=\"true\"] .customer-evacuation__refresh-spinner { opacity: 1; transform: scale(1); }\n.customer-evacuation__refresh[aria-busy=\"true\"] .customer-evacuation__refresh-spinner::before { animation: evacuation-spin 0.8s linear infinite; }\n/* Mask cells in place so desktop rows and mobile cards retain their exact geometry. */\n.customer-evacuation__table--refreshing :deep(td) { position: relative; color: transparent; }\n.customer-evacuation__table--refreshing :deep(td > *) { visibility: hidden; }\n.customer-evacuation__table--refreshing :deep(td::after) { content: \"\"; position: absolute; inset-inline: 12px 24%; top: 50%; height: 14px; transform: translateY(-50%); background: var(--selected); border-radius: 4px; animation: evacuation-skeleton 1s ease-in-out infinite alternate; }\n@container (max-width: 639px) {\n  .customer-evacuation__table--refreshing :deep(td::after) { inset-inline: calc(35% + 12px) 0; }\n  .customer-evacuation__table--refreshing :deep(td:first-child::after) { inset-inline: 0 30%; }\n}\n@keyframes evacuation-spin { to { transform: rotate(360deg); } }\n@keyframes evacuation-skeleton { to { opacity: 0.4; } }\n@media (prefers-reduced-motion: reduce) {\n  .customer-evacuation__refresh-label, .customer-evacuation__refresh-spinner { transition: none; }\n  .customer-evacuation__refresh-spinner::before, .customer-evacuation__table--refreshing :deep(td::after) { animation: none !important; }\n}\n.customer-evacuation__note { margin: 0 24px 16px; display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; background: var(--cream); border: 1px solid var(--border); font-size: 14px; }\n.customer-evacuation__note-label { flex: none; min-height: 24px; padding: 0 10px; border-radius: 999px; background: var(--lime); font-size: 12px; font-weight: 700; display: inline-flex; align-items: center; }\n.customer-evacuation__empty { margin: 0; padding: 20px 24px; color: var(--muted-foreground); }\n.customer-evacuation__message { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 0 24px 20px; }\n.customer-evacuation__message p { margin: 0; color: var(--danger); }\n@media (max-width: 767px) {\n  .customer-evacuation__table { padding: 0 24px; }\n}\n</style>\n\n<style>\n/* Print only the list: shell, hero and tabs are navigation, not the snapshot. */\n@media print {\n  body * { visibility: hidden; }\n  .customer-evacuation, .customer-evacuation * { visibility: visible; }\n  .customer-evacuation { position: absolute; inset: 0 0 auto; }\n  .customer-evacuation__toolbar { position: static; }\n  .customer-evacuation__actions, .customer-evacuation__toolbar button { display: none; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport type { AdminRepository } from \"@mod-velkom/js/admin-repository\";\nimport Checkbox from \"../ui/Checkbox.vue\";\nimport Dialog from \"../ui/Dialog.vue\";\n\nconst props = defineProps<{\n  completion: Awaited<ReturnType<AdminRepository[\"getEvacuationCompletion\"]>>;\n  pending: boolean;\n  error: string;\n}>();\nconst emit = defineEmits<{ confirm: [options: { checkoutSafe: boolean }]; cancel: [] }>();\nconst checkoutSafe = ref(true);\nconst safe = computed(() => props.completion.report.visitors.filter(visitor => visitor.safeAt));\nconst unresolved = computed(() => props.completion.report.visitors.filter(visitor => !visitor.safeAt));\n</script>\n\n<template>\n  <Dialog open title=\"Ontruiming afronden\" form submit-label=\"Ontruiming afronden\" pending-label=\"Afronden...\" :pending=\"pending\"\n          @submit=\"emit('confirm', { checkoutSafe })\" @close=\"emit('cancel')\">\n    <div class=\"finish\">\n      <p>{{ safe.length }} van {{ completion.report.visitors.length }} bezoekers {{ safe.length === 1 ? \"is\" : \"zijn\" }} veilig gemeld.</p>\n      <div v-if=\"unresolved.length\" class=\"finish__warning\" role=\"alert\">\n        <strong>{{ unresolved.length }} {{ unresolved.length === 1 ? \"bezoeker is\" : \"bezoekers zijn\" }} nog niet veilig gemeld.</strong>\n        <ul tabindex=\"0\" aria-label=\"Nog niet veilig gemelde bezoekers\"><li v-for=\"visitor in unresolved\" :key=\"visitor.id\">{{ visitor.name }}</li></ul>\n        <p>Je rondt de ontruiming af met openstaande personen. Zij blijven herkenbaar in het verslag en worden niet automatisch afgemeld.</p>\n      </div>\n      <Checkbox v-model=\"checkoutSafe\" label=\"Veilig gemelde bezoekers afmelden\" :disabled=\"pending\"\n                description=\"Zij verdwijnen uit de lijst met aanwezigen. Wie terugkomt, meldt zich opnieuw aan.\" />\n      <p>Starttijd, eindtijd en veiligmeldingen worden als verslag bewaard. Je vindt dit terug bij Verslagen.</p>\n      <p v-if=\"error\" class=\"finish__error\" role=\"alert\">{{ error }}</p>\n    </div>\n  </Dialog>\n</template>\n\n<style scoped>\n.finish { display: grid; gap: 20px; font-size: 14px; line-height: 1.5; }\n.finish p { margin: 0; }\n.finish__warning { display: grid; gap: 12px; padding: 16px; border: 1px solid var(--border-strong); background: var(--coral); }\n.finish__warning ul { margin: 0; padding-left: 20px; max-height: 180px; overflow: auto; }\n.finish__warning ul:focus-visible { outline: 2px solid var(--foreground); outline-offset: 3px; }\n.finish__error { color: var(--danger); }\n</style>\n","<template>\n  <label class=\"check\" :class=\"{ 'check--disabled': disabled }\">\n    <input :id=\"control.id.value\" v-model=\"model\" type=\"checkbox\" class=\"check__input\" :disabled=\"disabled\"\n           :aria-describedby=\"describedBy\" :aria-invalid=\"control.invalid.value || undefined\">\n    <span class=\"check__box\" aria-hidden=\"true\"><Icon v-if=\"model\" name=\"checkmark\" :size=\"14\" /></span>\n    <span class=\"check__text\">\n      <span class=\"check__label\"><slot>{{ label }}</slot></span>\n      <span v-if=\"description\" :id=\"descriptionId\" class=\"check__description\">{{ description }}</span>\n    </span>\n  </label>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport { useFieldControl } from \"../../lib/formField\";\n\nconst props = withDefaults(defineProps<{ id?: string; label?: string; description?: string; disabled?: boolean }>(),\n  { id: undefined, label: \"\", description: \"\", disabled: false });\n\nconst model = defineModel<boolean>({ default: false });\nconst control = useFieldControl(props);\nconst descriptionId = computed(() => `${control.id.value}-desc`);\nconst describedBy = computed(() => [props.description ? descriptionId.value : \"\", control.describedBy.value ?? \"\"].filter(Boolean).join(\" \") || undefined);\n</script>\n\n<style scoped>\n.check {\n  position: relative;\n  display: flex;\n  align-items: flex-start;\n  gap: 10px;\n  min-height: 24px;\n  cursor: pointer;\n}\n\n.check--disabled {\n  opacity: 0.55;\n  cursor: not-allowed;\n}\n\n.check__input {\n  position: absolute;\n  opacity: 0;\n  width: 20px;\n  height: 20px;\n  margin: 2px 0 0;\n}\n\n.check__box {\n  display: grid;\n  place-items: center;\n  flex-shrink: 0;\n  width: 20px;\n  height: 20px;\n  margin-top: 1px;\n  border: 1px solid var(--border-strong);\n  border-radius: 5px;\n  background: var(--field);\n  color: var(--primary-foreground);\n}\n\n.check__input:checked + .check__box {\n  background: var(--primary);\n  border-color: var(--primary);\n}\n\n.check__input:focus-visible + .check__box {\n  outline: 2px solid var(--ring);\n  outline-offset: 2px;\n}\n\n.check__input[aria-invalid=\"true\"] + .check__box {\n  border-color: var(--danger);\n}\n\n.check__text {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n}\n\n.check__label {\n  font-size: 14px;\n}\n\n.check__description {\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n</style>\n","import { computed, inject, useId, type ComputedRef, type InjectionKey } from \"vue\";\n\nexport interface FormFieldContext {\n  id: ComputedRef<string>;\n  describedBy: ComputedRef<string | undefined>;\n  invalid: ComputedRef<boolean>;\n  required: ComputedRef<boolean>;\n}\n\nexport const formFieldKey: InjectionKey<FormFieldContext> = Symbol(\"velkom-form-field\");\n\n/** Wiring for a control: inherits id/aria from the surrounding FormField, or stands alone with its own id. */\nexport function useFieldControl(props: { id?: string }) {\n  const field = inject(formFieldKey, null);\n  const ownId = useId();\n  return {\n    id: computed(() => props.id ?? field?.id.value ?? ownId),\n    describedBy: computed(() => field?.describedBy.value),\n    invalid: computed(() => field?.invalid.value ?? false),\n    required: computed(() => field?.required.value ?? false),\n  };\n}\n","import { vModelCheckbox as _vModelCheckbox, createElementVNode as _createElementVNode, withDirectives as _withDirectives, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"disabled\", \"aria-describedby\", \"aria-invalid\"]\nconst _hoisted_2 = {\n  class: \"check__box\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_3 = { class: \"check__text\" }\nconst _hoisted_4 = { class: \"check__label\" }\nconst _hoisted_5 = [\"id\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"label\", {\n    class: _normalizeClass([\"check\", { 'check--disabled': $props.disabled }])\n  }, [\n    _withDirectives(_createElementVNode(\"input\", {\n      id: $setup.control.id.value,\n      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model) = $event)),\n      type: \"checkbox\",\n      class: \"check__input\",\n      disabled: $props.disabled,\n      \"aria-describedby\": $setup.describedBy,\n      \"aria-invalid\": $setup.control.invalid.value || undefined\n    }, null, 8 /* PROPS */, _hoisted_1), [\n      [_vModelCheckbox, $setup.model]\n    ]),\n    _createElementVNode(\"span\", _hoisted_2, [\n      ($setup.model)\n        ? (_openBlock(), _createBlock($setup[\"Icon\"], {\n            key: 0,\n            name: \"checkmark\",\n            size: 14\n          }))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _createElementVNode(\"span\", _hoisted_3, [\n      _createElementVNode(\"span\", _hoisted_4, [\n        _renderSlot(_ctx.$slots, \"default\", {}, () => [\n          _createTextVNode(_toDisplayString($props.label), 1 /* TEXT */)\n        ], true)\n      ]),\n      ($props.description)\n        ? (_openBlock(), _createElementBlock(\"span\", {\n            key: 0,\n            id: $setup.descriptionId,\n            class: \"check__description\"\n          }, _toDisplayString($props.description), 9 /* TEXT, PROPS */, _hoisted_5))\n        : _createCommentVNode(\"v-if\", true)\n    ])\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Checkbox.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Checkbox.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Checkbox.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Checkbox.vue\";script.__scopeId = \"data-v-755c95f2\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"finish\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"finish__warning\",\n  role: \"alert\"\n}\nconst _hoisted_3 = {\n  tabindex: \"0\",\n  \"aria-label\": \"Nog niet veilig gemelde bezoekers\"\n}\nconst _hoisted_4 = {\n  key: 1,\n  class: \"finish__error\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: \"\",\n    title: \"Ontruiming afronden\",\n    form: \"\",\n    \"submit-label\": \"Ontruiming afronden\",\n    \"pending-label\": \"Afronden...\",\n    pending: $props.pending,\n    onSubmit: _cache[1] || (_cache[1] = $event => ($setup.emit('confirm', { checkoutSafe: $setup.checkoutSafe }))),\n    onClose: _cache[2] || (_cache[2] = $event => ($setup.emit('cancel')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", _hoisted_1, [\n        _createElementVNode(\"p\", null, _toDisplayString($setup.safe.length) + \" van \" + _toDisplayString($props.completion.report.visitors.length) + \" bezoekers \" + _toDisplayString($setup.safe.length === 1 ? \"is\" : \"zijn\") + \" veilig gemeld.\", 1 /* TEXT */),\n        ($setup.unresolved.length)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n              _createElementVNode(\"strong\", null, _toDisplayString($setup.unresolved.length) + \" \" + _toDisplayString($setup.unresolved.length === 1 ? \"bezoeker is\" : \"bezoekers zijn\") + \" nog niet veilig gemeld.\", 1 /* TEXT */),\n              _createElementVNode(\"ul\", _hoisted_3, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.unresolved, (visitor) => {\n                  return (_openBlock(), _createElementBlock(\"li\", {\n                    key: visitor.id\n                  }, _toDisplayString(visitor.name), 1 /* TEXT */))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]),\n              _cache[3] || (_cache[3] = _createElementVNode(\"p\", null, \"Je rondt de ontruiming af met openstaande personen. Zij blijven herkenbaar in het verslag en worden niet automatisch afgemeld.\", -1 /* CACHED */))\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        _createVNode($setup[\"Checkbox\"], {\n          modelValue: $setup.checkoutSafe,\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.checkoutSafe) = $event)),\n          label: \"Veilig gemelde bezoekers afmelden\",\n          disabled: $props.pending,\n          description: \"Zij verdwijnen uit de lijst met aanwezigen. Wie terugkomt, meldt zich opnieuw aan.\"\n        }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"]),\n        _cache[4] || (_cache[4] = _createElementVNode(\"p\", null, \"Starttijd, eindtijd en veiligmeldingen worden als verslag bewaard. Je vindt dit terug bij Verslagen.\", -1 /* CACHED */)),\n        ($props.error)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($props.error), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"pending\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationFinishDialog.vue\";script.__scopeId = \"data-v-70580b7c\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport { formatDateLong, formatTime } from \"../../lib/format\";\nimport type { TableColumn } from \"../../lib/ui\";\nimport Button from \"../ui/Button.vue\";\nimport DataTable from \"../ui/DataTable.vue\";\nimport Dialog from \"../ui/Dialog.vue\";\nimport FormField from \"../ui/FormField.vue\";\nimport Select from \"../ui/Select.vue\";\nimport Skeleton from \"../ui/Skeleton.vue\";\nimport { useLoadingIndicator } from \"../../lib/loading\";\n\nconst api = rpc(\"velkom:admin\");\nconst open = ref(false);\nconst pending = ref(false);\nconst loadingIndicator = useLoadingIndicator(() => pending.value);\nconst error = ref(\"\");\nconst downloading = ref(false);\nconst downloadError = ref(\"\");\nconst reports = ref<Awaited<ReturnType<typeof api.evacuationReports>>>([]);\nconst selected = ref(\"\");\nconst current = computed(() => reports.value.find(report => String(report.id) === selected.value));\nconst options = computed(() => reports.value.map(report => ({ value: String(report.id), label: `${report.actual ? \"Ontruiming\" : \"Oefening\"} ${dateTime(report.startedAt)}` })));\nconst columns: TableColumn[] = [{ key: \"name\", label: \"Naam\" }, { key: \"safeAt\", label: \"Veilig gemeld\" }, { key: \"departedAt\", label: \"Afmelding\" }];\n\nfunction dateTime(value: string): string {\n  const date = new Date(value);\n  return `${formatDateLong(date)}, ${formatTime(date)}`;\n}\n\nasync function show(options: { id?: number } = {}): Promise<void> {\n  selected.value = options.id ? String(options.id) : \"\";\n  open.value = true;\n  await load();\n}\n\nasync function load(): Promise<void> {\n  if (pending.value)\n    return;\n  open.value = true;\n  pending.value = true;\n  error.value = \"\";\n  downloadError.value = \"\";\n  reports.value = [];\n  try {\n    reports.value = await api.evacuationReports();\n    selected.value ||= reports.value[0] ? String(reports.value[0].id) : \"\";\n    if (selected.value && !current.value)\n      error.value = \"Het ontruimingsverslag is niet beschikbaar. Probeer het opnieuw.\";\n  } catch {\n    error.value = \"De verslagen konden niet worden geladen. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n\nasync function download(): Promise<void> {\n  if (!current.value || downloading.value)\n    return;\n  downloading.value = true;\n  downloadError.value = \"\";\n  try {\n    const result = await api.evacuationReportPdf({ id: current.value.id });\n    const bytes = Uint8Array.from(atob(result.base64), character => character.charCodeAt(0));\n    const url = URL.createObjectURL(new Blob([bytes], { type: \"application/pdf\" }));\n    try {\n      const link = document.createElement(\"a\");\n      link.href = url;\n      link.download = result.fileName;\n      document.body.append(link);\n      link.click();\n      link.remove();\n    } finally {\n      // Give the browser time to consume the URL before releasing its private file data.\n      setTimeout(() => URL.revokeObjectURL(url), 1000);\n    }\n  } catch {\n    downloadError.value = \"De PDF kon niet worden gedownload. Probeer het opnieuw.\";\n  } finally {\n    downloading.value = false;\n  }\n}\ndefineExpose({ show });\n</script>\n\n<template>\n  <Button @click=\"show()\">Verslagen</Button>\n  <Dialog :open=\"open\" title=\"Ontruimingsverslagen\" description=\"De laatste 25 afgeronde ontruimingen en oefeningen, binnen de ingestelde bewaartermijn.\" :width=\"800\" @close=\"open = false\">\n    <div class=\"reports\" :aria-busy=\"pending\">\n      <Skeleton v-if=\"loadingIndicator.holding\" label=\"Verslagen laden\" :visible=\"loadingIndicator.visible\" :count=\"4\" :height=\"36\" />\n      <template v-else-if=\"error\">\n        <p class=\"reports__error\" role=\"alert\">{{ error }}</p>\n        <Button @click=\"load\">Opnieuw proberen</Button>\n      </template>\n      <template v-else-if=\"current\">\n        <FormField label=\"Verslag\"><Select v-model=\"selected\" :options=\"options\" :disabled=\"downloading\" /></FormField>\n        <dl class=\"reports__summary\">\n          <div><dt>Gestart</dt><dd>{{ dateTime(current.startedAt) }}</dd></div>\n          <div><dt>Afgerond</dt><dd>{{ current.endedAt ? dateTime(current.endedAt) : \"Onbekend\" }}</dd></div>\n          <div><dt>Veilig gemeld</dt><dd>{{ current.safeVisitIds.length }} van {{ current.report?.visitors.length ?? 0 }}</dd></div>\n        </dl>\n        <p v-if=\"!current.actual\" class=\"reports__note\">Dit was een oefening. Er zijn door het afronden geen bezoekers afgemeld.</p>\n        <DataTable :columns=\"columns\" :rows=\"current.report?.visitors ?? []\" caption=\"Bezoekers bij afronding\" row-key=\"id\">\n          <template #cell-safeAt=\"{ row }\"><span :class=\"{ 'reports__unresolved': !row.safeAt }\">{{ row.safeAt ? dateTime(row.safeAt) : \"Niet veilig gemeld\" }}</span></template>\n          <template #cell-departedAt=\"{ row }\">{{ row.checkedOut ? \"Bij afronding afgemeld\" : row.departedAt ? `Eerder afgemeld: ${dateTime(row.departedAt)}` : \"Niet afgemeld\" }}</template>\n          <template #empty>Er waren geen bezoekers tijdens deze ontruiming of oefening.</template>\n        </DataTable>\n        <p v-if=\"downloadError\" class=\"reports__error\" role=\"alert\">{{ downloadError }}</p>\n      </template>\n      <p v-else>Er zijn nog geen opgeslagen verslagen.</p>\n    </div>\n    <template #footer>\n      <Button @click=\"open = false\">Sluiten</Button>\n      <Button v-if=\"current && !pending && !error\" variant=\"primary\" icon=\"download\" :disabled=\"downloading\" :aria-busy=\"downloading\" @click=\"download\">{{ downloading ? \"PDF maken...\" : \"Download PDF\" }}</Button>\n    </template>\n  </Dialog>\n</template>\n\n<style scoped>\n.reports { display: grid; gap: 20px; font-size: 14px; }\n.reports p { margin: 0; }\n.reports__summary { display: flex; flex-wrap: wrap; gap: 16px 32px; margin: 0; }\n.reports__summary dt { color: var(--muted-foreground); }\n.reports__summary dd { margin: 4px 0 0; font-weight: 700; }\n.reports__note { padding: 12px; background: var(--lime); }\n.reports__error, .reports__unresolved { color: var(--danger); }\n</style>\n","<template>\n  <div class=\"dt\">\n    <div v-if=\"rows.length\" class=\"dt__scroll\" tabindex=\"0\" :aria-label=\"`${caption}, schuifbaar`\">\n      <table class=\"dt__table\">\n        <caption class=\"visually-hidden\">{{ caption }}</caption>\n        <thead>\n          <tr>\n            <th v-for=\"column in columns\" :key=\"column.key\" scope=\"col\" :style=\"column.width ? { width: column.width } : undefined\"\n                :class=\"{ 'dt__cell--end': column.align === 'end', 'touch-only': column.touchOnly }\">\n              <span :class=\"{ 'visually-hidden': column.srOnlyLabel }\">{{ column.label }}</span>\n            </th>\n          </tr>\n        </thead>\n        <tbody>\n          <tr v-for=\"(row, index) in rows\" :key=\"keyOf(row, index)\" :class=\"[rowClass?.(row), { 'dt__row--open': rowOpen }]\"\n              :tabindex=\"rowOpen || rowMenu ? 0 : undefined\" @contextmenu=\"openMenu($event, row)\" @dblclick=\"open($event, row)\" @keydown=\"open($event, row)\"\n              @mousedown=\"rowOpen && $event.detail > 1 && $event.preventDefault()\">\n            <td v-for=\"column in columns\" :key=\"column.key\" :data-label=\"column.srOnlyLabel ? '' : column.label\"\n                :class=\"{ 'dt__cell--end': column.align === 'end', 'dt__cell--hide-card': column.hideInCards, 'touch-only': column.touchOnly }\">\n              <slot :name=\"`cell-${column.key}`\" :row=\"row\" :value=\"(row as Record<string, unknown>)[column.key]\">\n                {{ (row as Record<string, unknown>)[column.key] ?? \"Niet ingesteld\" }}\n              </slot>\n            </td>\n          </tr>\n        </tbody>\n      </table>\n    </div>\n    <slot v-else name=\"empty\" />\n    <ContextMenu v-if=\"rowMenu\" ref=\"menu\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\" generic=\"Row extends object\">\nimport { ref } from \"vue\";\nimport type { TableColumn } from \"../../lib/ui\";\nimport { opensRow, type ContextMenuItem } from \"../../lib/context-menu\";\nimport ContextMenu from \"./ContextMenu.vue\";\n\n/**\n * Read-only data table with its own horizontal scroll area. Below 640px of available width each row\n * becomes a card with labelled fields. Cells render `row[column.key]` unless you provide `#cell-<key>`.\n * Editing happens in dialogs, never inline (PRD 12.1).\n */\nconst props = withDefaults(defineProps<{\n  columns: TableColumn[];\n  rows: readonly Row[];\n  /** Accessible name of the table, e.g. \"Bezoeken vandaag\". */\n  caption: string;\n  rowKey?: keyof Row | ((row: Row) => string);\n  rowClass?: (row: Row) => string | Record<string, boolean> | undefined;\n  /** Right-click actions per row; mirror the buttons in the actions cell. */\n  rowMenu?: (row: Row) => { label: string; items: ContextMenuItem[] };\n  /** Double-click or Enter on the row: the row's main action, e.g. Bewerken. */\n  rowOpen?: (row: Row) => void;\n}>(), { rowKey: undefined, rowClass: undefined, rowMenu: undefined, rowOpen: undefined });\n\nconst menu = ref<InstanceType<typeof ContextMenu> | null>(null);\n\nfunction openMenu(event: MouseEvent, row: Row): void {\n  const actions = props.rowMenu?.(row);\n  if (actions)\n    void menu.value?.show(event, actions.items, actions.label);\n}\n\nfunction open(event: Event, row: Row): void {\n  if (props.rowOpen && opensRow(event)) {\n    event.preventDefault();\n    props.rowOpen(row);\n  }\n}\n\nfunction keyOf(row: Row, index: number): string | number {\n  if (typeof props.rowKey === \"function\")\n    return props.rowKey(row);\n  if (props.rowKey)\n    return String(row[props.rowKey]);\n  return index;\n}\n</script>\n\n<style scoped>\n.dt {\n  container-type: inline-size;\n  min-width: 0;\n}\n\n.dt__scroll {\n  overflow-x: auto;\n  border-radius: 0;\n}\n\n.dt__scroll:focus-visible {\n  outline: 2px solid var(--ring);\n}\n\n.dt__table {\n  width: 100%;\n  border-collapse: collapse;\n  font-size: 14px;\n}\n\n.dt__table th {\n  padding: 10px 12px;\n  border-bottom: 1px solid var(--border);\n  color: var(--muted-foreground);\n  font-weight: 700;\n  font-size: 13px;\n  text-align: left;\n  white-space: nowrap;\n}\n\n.dt__table td {\n  padding: 12px;\n  border-bottom: 1px solid var(--border);\n  vertical-align: middle;\n}\n\n@container (min-width: 640px) {\n  .dt__table th:first-child, .dt__table td:first-child { padding-left: 24px; }\n  .dt__table th:last-child, .dt__table td:last-child { padding-right: 24px; }\n}\n\n.dt__table tbody tr:hover {\n  background: var(--hover);\n}\n\n.dt__table tbody tr:focus-visible {\n  outline: 2px solid var(--ring);\n  outline-offset: -2px;\n}\n\n.dt__row--open {\n  cursor: pointer;\n}\n\n.dt__table .dt__cell--end {\n  text-align: right;\n}\n\n@container (max-width: 639px) {\n  .dt__scroll { overflow-x: visible; }\n\n  .dt__table thead {\n    position: absolute;\n    width: 1px;\n    height: 1px;\n    overflow: hidden;\n    clip: rect(0 0 0 0);\n  }\n\n  .dt__table,\n  .dt__table tbody,\n  .dt__table tr,\n  .dt__table td {\n    display: block;\n    width: 100%;\n  }\n\n  .dt__table tr {\n    padding: 20px 0;\n    border-bottom: 1px solid var(--border);\n  }\n\n  .dt__table tbody tr:hover {\n    background: transparent;\n  }\n\n  .dt__table td {\n    display: grid;\n    grid-template-columns: minmax(96px, 35%) 1fr;\n    gap: 12px;\n    padding: 4px 0;\n    border: none;\n    overflow-wrap: anywhere;\n  }\n\n  .dt__table td::before {\n    content: attr(data-label);\n    color: var(--muted-foreground);\n  }\n\n  .dt__table td[data-label=\"\"] {\n    grid-template-columns: 1fr;\n  }\n\n  .dt__table td[data-label=\"\"]::before {\n    display: none;\n  }\n\n  .dt__table td:first-child {\n    display: block;\n    margin-bottom: 8px;\n    font-family: var(--font-display);\n    font-size: 18px;\n    font-weight: 700;\n  }\n\n  .dt__table td:first-child::before { display: none; }\n\n  .dt__table .dt__cell--end {\n    text-align: left;\n  }\n\n  .dt__table td.dt__cell--hide-card {\n    display: none;\n  }\n}\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, normalizeStyle as _normalizeStyle, renderSlot as _renderSlot, createTextVNode as _createTextVNode, createCommentVNode as _createCommentVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"dt\" }\nconst _hoisted_2 = [\"aria-label\"]\nconst _hoisted_3 = { class: \"dt__table\" }\nconst _hoisted_4 = { class: \"visually-hidden\" }\nconst _hoisted_5 = [\"tabindex\", \"onContextmenu\", \"onDblclick\", \"onKeydown\"]\nconst _hoisted_6 = [\"data-label\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    ($props.rows.length)\n      ? (_openBlock(), _createElementBlock(\"div\", {\n          key: 0,\n          class: \"dt__scroll\",\n          tabindex: \"0\",\n          \"aria-label\": `${$props.caption}, schuifbaar`\n        }, [\n          _createElementVNode(\"table\", _hoisted_3, [\n            _createElementVNode(\"caption\", _hoisted_4, _toDisplayString($props.caption), 1 /* TEXT */),\n            _createElementVNode(\"thead\", null, [\n              _createElementVNode(\"tr\", null, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.columns, (column) => {\n                  return (_openBlock(), _createElementBlock(\"th\", {\n                    key: column.key,\n                    scope: \"col\",\n                    style: _normalizeStyle(column.width ? { width: column.width } : undefined),\n                    class: _normalizeClass({ 'dt__cell--end': column.align === 'end', 'touch-only': column.touchOnly })\n                  }, [\n                    _createElementVNode(\"span\", {\n                      class: _normalizeClass({ 'visually-hidden': column.srOnlyLabel })\n                    }, _toDisplayString(column.label), 3 /* TEXT, CLASS */)\n                  ], 6 /* CLASS, STYLE */))\n                }), 128 /* KEYED_FRAGMENT */))\n              ])\n            ]),\n            _createElementVNode(\"tbody\", null, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.rows, (row, index) => {\n                return (_openBlock(), _createElementBlock(\"tr\", {\n                  key: $setup.keyOf(row, index),\n                  class: _normalizeClass([$props.rowClass?.(row), { 'dt__row--open': $props.rowOpen }]),\n                  tabindex: $props.rowOpen || $props.rowMenu ? 0 : undefined,\n                  onContextmenu: $event => ($setup.openMenu($event, row)),\n                  onDblclick: $event => ($setup.open($event, row)),\n                  onKeydown: $event => ($setup.open($event, row)),\n                  onMousedown: _cache[0] || (_cache[0] = $event => ($props.rowOpen && $event.detail > 1 && $event.preventDefault()))\n                }, [\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.columns, (column) => {\n                    return (_openBlock(), _createElementBlock(\"td\", {\n                      key: column.key,\n                      \"data-label\": column.srOnlyLabel ? '' : column.label,\n                      class: _normalizeClass({ 'dt__cell--end': column.align === 'end', 'dt__cell--hide-card': column.hideInCards, 'touch-only': column.touchOnly })\n                    }, [\n                      _renderSlot(_ctx.$slots, `cell-${column.key}`, {\n                        row: row,\n                        value: (row as Record<string, unknown>)[column.key]\n                      }, () => [\n                        _createTextVNode(_toDisplayString((row as Record<string, unknown>)[column.key] ?? \"Niet ingesteld\"), 1 /* TEXT */)\n                      ], true)\n                    ], 10 /* CLASS, PROPS */, _hoisted_6))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_5))\n              }), 128 /* KEYED_FRAGMENT */))\n            ])\n          ])\n        ], 8 /* PROPS */, _hoisted_2))\n      : _renderSlot(_ctx.$slots, \"empty\", { key: 1 }, undefined, true),\n    ($props.rowMenu)\n      ? (_openBlock(), _createBlock($setup[\"ContextMenu\"], {\n          key: 2,\n          ref: \"menu\"\n        }, null, 512 /* NEED_PATCH */))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/DataTable.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/DataTable.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/DataTable.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/DataTable.vue\";script.__scopeId = \"data-v-a786f2c3\";export default script;","<template>\n  <div class=\"field\" :class=\"{ 'field--invalid': Boolean(error) }\">\n    <label class=\"field__label\" :for=\"id\">\n      {{ label }}\n      <span v-if=\"required\" class=\"field__required\" aria-hidden=\"true\">*</span>\n    </label>\n    <p v-if=\"help\" :id=\"helpId\" class=\"field__help\">{{ help }}</p>\n    <slot />\n    <!-- Always rendered for a stable validation target; the supplied layout hides its empty spacing. -->\n    <p :id=\"errorId\" class=\"field__error\" :aria-hidden=\"!error\">\n      <template v-if=\"error\">\n        <Icon name=\"warning-filled\" :size=\"16\" class=\"field__error-icon\" />\n        <span>{{ error }}</span>\n      </template>\n    </p>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, provide, useId } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport { formFieldKey } from \"../../lib/formField\";\n\nconst props = withDefaults(defineProps<{\n  label: string;\n  /** Use `form.fieldId(\"x\")` from useFormValidation so focus-on-error finds the control. */\n  fieldId?: string;\n  help?: string;\n  error?: string | null;\n  required?: boolean;\n}>(), { fieldId: undefined, help: \"\", error: null, required: false });\n\nconst fallbackId = useId();\nconst id = computed(() => props.fieldId ?? fallbackId);\nconst helpId = computed(() => `${id.value}-help`);\nconst errorId = computed(() => `${id.value}-error`);\n\nprovide(formFieldKey, {\n  id,\n  describedBy: computed(() => [props.help ? helpId.value : \"\", props.error ? errorId.value : \"\"].filter(Boolean).join(\" \") || undefined),\n  invalid: computed(() => Boolean(props.error)),\n  required: computed(() => props.required),\n});\n</script>\n\n<style scoped>\n.field {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  min-width: 0;\n}\n\n.field__label {\n  font-size: 14px;\n  font-weight: 700;\n  color: var(--foreground);\n}\n\n.field__required {\n  color: var(--danger);\n}\n\n.field__help {\n  margin: 0;\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n\n.field__error {\n  display: flex;\n  align-items: flex-start;\n  gap: 6px;\n  min-height: 20px;\n  margin: 0;\n  font-size: 14px;\n  line-height: 20px;\n  color: var(--danger);\n}\n\n.field__error-icon {\n  margin-top: 2px;\n}\n\n/* The supplied forms have no blank validation row; errors still render next to their field. */\n.field__error:empty { min-height: 0; }\n</style>\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createElementVNode as _createElementVNode, renderSlot as _renderSlot, createVNode as _createVNode, Fragment as _Fragment, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"for\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"field__required\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = [\"id\", \"aria-hidden\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"field\", { 'field--invalid': Boolean($props.error) }])\n  }, [\n    _createElementVNode(\"label\", {\n      class: \"field__label\",\n      for: $setup.id\n    }, [\n      _createTextVNode(_toDisplayString($props.label) + \" \", 1 /* TEXT */),\n      ($props.required)\n        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \"*\"))\n        : _createCommentVNode(\"v-if\", true)\n    ], 8 /* PROPS */, _hoisted_1),\n    ($props.help)\n      ? (_openBlock(), _createElementBlock(\"p\", {\n          key: 0,\n          id: $setup.helpId,\n          class: \"field__help\"\n        }, _toDisplayString($props.help), 9 /* TEXT, PROPS */, _hoisted_3))\n      : _createCommentVNode(\"v-if\", true),\n    _renderSlot(_ctx.$slots, \"default\", {}, undefined, true),\n    _createCommentVNode(\" Always rendered for a stable validation target; the supplied layout hides its empty spacing. \"),\n    _createElementVNode(\"p\", {\n      id: $setup.errorId,\n      class: \"field__error\",\n      \"aria-hidden\": !$props.error\n    }, [\n      ($props.error)\n        ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n            _createVNode($setup[\"Icon\"], {\n              name: \"warning-filled\",\n              size: 16,\n              class: \"field__error-icon\"\n            }),\n            _createElementVNode(\"span\", null, _toDisplayString($props.error), 1 /* TEXT */)\n          ], 64 /* STABLE_FRAGMENT */))\n        : _createCommentVNode(\"v-if\", true)\n    ], 8 /* PROPS */, _hoisted_4)\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/FormField.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/FormField.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/FormField.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/FormField.vue\";script.__scopeId = \"data-v-6d909417\";export default script;","<template>\n  <div class=\"select\">\n    <select :id=\"control.id.value\" v-model=\"model\" class=\"v-control select__control\" :disabled=\"disabled\"\n            :aria-describedby=\"control.describedBy.value\" :aria-invalid=\"control.invalid.value || undefined\"\n            :aria-required=\"control.required.value || undefined\">\n      <option v-if=\"placeholder\" value=\"\" disabled>{{ placeholder }}</option>\n      <option v-for=\"option in options\" :key=\"option.value\" :value=\"option.value\" :disabled=\"option.disabled\">{{ option.label }}</option>\n    </select>\n    <Icon name=\"chevron-down\" :size=\"16\" class=\"select__chevron\" />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport Icon from \"./Icon.vue\";\nimport { useFieldControl } from \"../../lib/formField\";\nimport type { SelectOption } from \"../../lib/ui\";\n\nconst props = withDefaults(defineProps<{ id?: string; options: SelectOption[]; placeholder?: string; disabled?: boolean }>(),\n  { id: undefined, placeholder: \"\", disabled: false });\n\nconst model = defineModel<string>({ default: \"\" });\nconst control = useFieldControl(props);\n</script>\n\n<style scoped>\n.select {\n  position: relative;\n  min-width: 0;\n}\n\n.select__control {\n  appearance: none;\n  padding-right: 48px;\n  cursor: pointer;\n}\n\n.select__control option {\n  background: var(--surface);\n  color: var(--foreground);\n}\n\n.select__chevron {\n  position: absolute;\n  right: 18px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--muted-foreground);\n  pointer-events: none;\n}\n</style>\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, createElementVNode as _createElementVNode, withDirectives as _withDirectives, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"select\" }\nconst _hoisted_2 = [\"id\", \"disabled\", \"aria-describedby\", \"aria-invalid\", \"aria-required\"]\nconst _hoisted_3 = {\n  key: 0,\n  value: \"\",\n  disabled: \"\"\n}\nconst _hoisted_4 = [\"value\", \"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _withDirectives(_createElementVNode(\"select\", {\n      id: $setup.control.id.value,\n      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model) = $event)),\n      class: \"v-control select__control\",\n      disabled: $props.disabled,\n      \"aria-describedby\": $setup.control.describedBy.value,\n      \"aria-invalid\": $setup.control.invalid.value || undefined,\n      \"aria-required\": $setup.control.required.value || undefined\n    }, [\n      ($props.placeholder)\n        ? (_openBlock(), _createElementBlock(\"option\", _hoisted_3, _toDisplayString($props.placeholder), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.options, (option) => {\n        return (_openBlock(), _createElementBlock(\"option\", {\n          key: option.value,\n          value: option.value,\n          disabled: option.disabled\n        }, _toDisplayString(option.label), 9 /* TEXT, PROPS */, _hoisted_4))\n      }), 128 /* KEYED_FRAGMENT */))\n    ], 8 /* PROPS */, _hoisted_2), [\n      [_vModelSelect, $setup.model]\n    ]),\n    _createVNode($setup[\"Icon\"], {\n      name: \"chevron-down\",\n      size: 16,\n      class: \"select__chevron\"\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Select.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Select.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Select.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Select.vue\";script.__scopeId = \"data-v-1fdbfb5c\";export default script;","import { createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  class: \"reports__error\",\n  role: \"alert\"\n}\nconst _hoisted_3 = { class: \"reports__summary\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"reports__note\"\n}\nconst _hoisted_5 = {\n  key: 1,\n  class: \"reports__error\",\n  role: \"alert\"\n}\nconst _hoisted_6 = { key: 3 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createVNode($setup[\"Button\"], {\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.show()))\n    }, {\n      default: _withCtx(() => _cache[4] || (_cache[4] = [\n        _createTextVNode(\"Verslagen\", -1 /* CACHED */)\n      ])),\n      _: 1 /* STABLE */,\n      __: [4]\n    }),\n    _createVNode($setup[\"Dialog\"], {\n      open: $setup.open,\n      title: \"Ontruimingsverslagen\",\n      description: \"De laatste 25 afgeronde ontruimingen en oefeningen, binnen de ingestelde bewaartermijn.\",\n      width: 800,\n      onClose: _cache[3] || (_cache[3] = $event => ($setup.open = false))\n    }, {\n      footer: _withCtx(() => [\n        _createVNode($setup[\"Button\"], {\n          onClick: _cache[2] || (_cache[2] = $event => ($setup.open = false))\n        }, {\n          default: _withCtx(() => _cache[10] || (_cache[10] = [\n            _createTextVNode(\"Sluiten\", -1 /* CACHED */)\n          ])),\n          _: 1 /* STABLE */,\n          __: [10]\n        }),\n        ($setup.current && !$setup.pending && !$setup.error)\n          ? (_openBlock(), _createBlock($setup[\"Button\"], {\n              key: 0,\n              variant: \"primary\",\n              icon: \"download\",\n              disabled: $setup.downloading,\n              \"aria-busy\": $setup.downloading,\n              onClick: $setup.download\n            }, {\n              default: _withCtx(() => [\n                _createTextVNode(_toDisplayString($setup.downloading ? \"PDF maken...\" : \"Download PDF\"), 1 /* TEXT */)\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"disabled\", \"aria-busy\"]))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      default: _withCtx(() => [\n        _createElementVNode(\"div\", {\n          class: \"reports\",\n          \"aria-busy\": $setup.pending\n        }, [\n          ($setup.loadingIndicator.holding)\n            ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n                key: 0,\n                label: \"Verslagen laden\",\n                visible: $setup.loadingIndicator.visible,\n                count: 4,\n                height: 36\n              }, null, 8 /* PROPS */, [\"visible\"]))\n            : ($setup.error)\n              ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                  _createElementVNode(\"p\", _hoisted_2, _toDisplayString($setup.error), 1 /* TEXT */),\n                  _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                    default: _withCtx(() => _cache[5] || (_cache[5] = [\n                      _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                    ])),\n                    _: 1 /* STABLE */,\n                    __: [5]\n                  })\n                ], 64 /* STABLE_FRAGMENT */))\n              : ($setup.current)\n                ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                    _createVNode($setup[\"FormField\"], { label: \"Verslag\" }, {\n                      default: _withCtx(() => [\n                        _createVNode($setup[\"Select\"], {\n                          modelValue: $setup.selected,\n                          \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.selected) = $event)),\n                          options: $setup.options,\n                          disabled: $setup.downloading\n                        }, null, 8 /* PROPS */, [\"modelValue\", \"options\", \"disabled\"])\n                      ]),\n                      _: 1 /* STABLE */\n                    }),\n                    _createElementVNode(\"dl\", _hoisted_3, [\n                      _createElementVNode(\"div\", null, [\n                        _cache[6] || (_cache[6] = _createElementVNode(\"dt\", null, \"Gestart\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.dateTime($setup.current.startedAt)), 1 /* TEXT */)\n                      ]),\n                      _createElementVNode(\"div\", null, [\n                        _cache[7] || (_cache[7] = _createElementVNode(\"dt\", null, \"Afgerond\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.current.endedAt ? $setup.dateTime($setup.current.endedAt) : \"Onbekend\"), 1 /* TEXT */)\n                      ]),\n                      _createElementVNode(\"div\", null, [\n                        _cache[8] || (_cache[8] = _createElementVNode(\"dt\", null, \"Veilig gemeld\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.current.safeVisitIds.length) + \" van \" + _toDisplayString($setup.current.report?.visitors.length ?? 0), 1 /* TEXT */)\n                      ])\n                    ]),\n                    (!$setup.current.actual)\n                      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, \"Dit was een oefening. Er zijn door het afronden geen bezoekers afgemeld.\"))\n                      : _createCommentVNode(\"v-if\", true),\n                    _createVNode($setup[\"DataTable\"], {\n                      columns: $setup.columns,\n                      rows: $setup.current.report?.visitors ?? [],\n                      caption: \"Bezoekers bij afronding\",\n                      \"row-key\": \"id\"\n                    }, {\n                      \"cell-safeAt\": _withCtx(({ row }) => [\n                        _createElementVNode(\"span\", {\n                          class: _normalizeClass({ 'reports__unresolved': !row.safeAt })\n                        }, _toDisplayString(row.safeAt ? $setup.dateTime(row.safeAt) : \"Niet veilig gemeld\"), 3 /* TEXT, CLASS */)\n                      ]),\n                      \"cell-departedAt\": _withCtx(({ row }) => [\n                        _createTextVNode(_toDisplayString(row.checkedOut ? \"Bij afronding afgemeld\" : row.departedAt ? `Eerder afgemeld: ${$setup.dateTime(row.departedAt)}` : \"Niet afgemeld\"), 1 /* TEXT */)\n                      ]),\n                      empty: _withCtx(() => _cache[9] || (_cache[9] = [\n                        _createTextVNode(\"Er waren geen bezoekers tijdens deze ontruiming of oefening.\", -1 /* CACHED */)\n                      ])),\n                      _: 1 /* STABLE */\n                    }, 8 /* PROPS */, [\"rows\"]),\n                    ($setup.downloadError)\n                      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, _toDisplayString($setup.downloadError), 1 /* TEXT */))\n                      : _createCommentVNode(\"v-if\", true)\n                  ], 64 /* STABLE_FRAGMENT */))\n                : (_openBlock(), _createElementBlock(\"p\", _hoisted_6, \"Er zijn nog geen opgeslagen verslagen.\"))\n        ], 8 /* PROPS */, _hoisted_1)\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationReports.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationReports.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationReports.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/EvacuationReports.vue\";script.__scopeId = \"data-v-1370f78d\";export default script;","import { createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, createVNode as _createVNode, normalizeClass as _normalizeClass, withCtx as _withCtx, createBlock as _createBlock, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = { class: \"customer-evacuation__header\" }\nconst _hoisted_3 = { class: \"customer-evacuation__heading\" }\nconst _hoisted_4 = { class: \"customer-evacuation__title-row\" }\nconst _hoisted_5 = {\n  key: 0,\n  class: \"customer-evacuation__count\",\n  \"aria-live\": \"polite\"\n}\nconst _hoisted_6 = { class: \"customer-evacuation__actions\" }\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = [\"disabled\"]\nconst _hoisted_9 = [\"disabled\"]\nconst _hoisted_10 = { class: \"customer-evacuation__drill-actions\" }\nconst _hoisted_11 = [\"disabled\"]\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = {\n  key: 1,\n  class: \"customer-evacuation__drill customer-evacuation__drill--ended\",\n  role: \"status\"\n}\nconst _hoisted_14 = {\n  key: 2,\n  class: \"customer-evacuation__drill-error\",\n  role: \"alert\"\n}\nconst _hoisted_15 = {\n  key: 3,\n  class: \"customer-evacuation__message\",\n  role: \"alert\"\n}\nconst _hoisted_16 = [\"disabled\"]\nconst _hoisted_17 = { class: \"customer-evacuation__toolbar\" }\nconst _hoisted_18 = { class: \"customer-evacuation__snapshot\" }\nconst _hoisted_19 = [\"disabled\", \"aria-busy\", \"aria-label\"]\nconst _hoisted_20 = [\"aria-hidden\"]\nconst _hoisted_21 = {\n  key: 0,\n  class: \"customer-evacuation__safe\"\n}\nconst _hoisted_22 = [\"aria-label\", \"disabled\", \"onClick\"]\nconst _hoisted_23 = [\"aria-label\", \"disabled\", \"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Supplied BezoekenOntruiming.html. Gratis has no locations, so the location column and title suffix are omitted. \"),\n    _createElementVNode(\"section\", {\n      class: \"customer-evacuation\",\n      \"aria-labelledby\": \"evacuation-title\",\n      \"aria-busy\": $setup.pending || $setup.manualRefreshing,\n      \"data-testid\": \"customer-evacuation\"\n    }, [\n      _createElementVNode(\"div\", _hoisted_2, [\n        _createElementVNode(\"div\", _hoisted_3, [\n          _createElementVNode(\"div\", _hoisted_4, [\n            _cache[5] || (_cache[5] = _createElementVNode(\"h2\", {\n              id: \"evacuation-title\",\n              class: \"customer-evacuation__title\"\n            }, \"Ontruimingslijst\", -1 /* CACHED */)),\n            ($setup.visitors)\n              ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, [\n                  _cache[4] || (_cache[4] = _createElementVNode(\"svg\", {\n                    width: \"16\",\n                    height: \"16\",\n                    viewBox: \"0 0 20 20\",\n                    fill: \"none\",\n                    stroke: \"currentColor\",\n                    \"stroke-width\": \"1.8\",\n                    \"stroke-linecap\": \"round\",\n                    \"stroke-linejoin\": \"round\",\n                    \"aria-hidden\": \"true\"\n                  }, [\n                    _createElementVNode(\"path\", { d: \"M11 3h4.5A1.5 1.5 0 0 1 17 4.5v11a1.5 1.5 0 0 1-1.5 1.5H11M3 10h9M8.5 6.5L12 10l-3.5 3.5\" })\n                  ], -1 /* CACHED */)),\n                  _createTextVNode(\" \" + _toDisplayString($setup.visitors.length) + \" \" + _toDisplayString($setup.visitors.length === 1 ? \"bezoeker\" : \"bezoekers\") + \" binnen \", 1 /* TEXT */)\n                ]))\n              : _createCommentVNode(\"v-if\", true)\n          ])\n        ]),\n        _createElementVNode(\"div\", _hoisted_6, [\n          _createVNode($setup[\"EvacuationReports\"], { ref: \"reportsDialog\" }, null, 512 /* NEED_PATCH */),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"customer-evacuation__button\",\n            disabled: !$setup.visitors,\n            onClick: $setup.printList\n          }, \"Afdrukvoorbeeld\", 8 /* PROPS */, _hoisted_7),\n          (!$setup.running)\n            ? (_openBlock(), _createElementBlock(\"button\", {\n                key: 0,\n                type: \"button\",\n                class: \"customer-evacuation__button customer-evacuation__button--outline\",\n                disabled: !$setup.visitors || $setup.sessionPending,\n                onClick: _cache[0] || (_cache[0] = $event => ($setup.sessionAction(() => $setup.api.startEvacuationDrill(), 'Oefening gestart. Er wordt niemand gewaarschuwd.')))\n              }, \"Ontruiming oefenen\", 8 /* PROPS */, _hoisted_8))\n            : _createCommentVNode(\"v-if\", true),\n          (!$setup.running || !$setup.session?.actual)\n            ? (_openBlock(), _createElementBlock(\"button\", {\n                key: 1,\n                type: \"button\",\n                class: \"customer-evacuation__button customer-evacuation__button--primary\",\n                disabled: !$setup.visitors || $setup.sessionPending,\n                onClick: $setup.startActual\n              }, \"Ontruiming starten\", 8 /* PROPS */, _hoisted_9))\n            : _createCommentVNode(\"v-if\", true)\n        ])\n      ]),\n      _cache[9] || (_cache[9] = _createElementVNode(\"div\", {\n        class: \"customer-evacuation__note\",\n        role: \"note\"\n      }, [\n        _createElementVNode(\"span\", { class: \"customer-evacuation__note-label\" }, \"Let op\"),\n        _createElementVNode(\"span\", null, \"Alleen geregistreerde bezoekers zonder vertrek; medewerkers staan hier niet op. Er wordt niemand automatisch gewaarschuwd. Deze lijst vervangt geen alarminstallatie.\")\n      ], -1 /* CACHED */)),\n      ($setup.running && $setup.session)\n        ? (_openBlock(), _createElementBlock(\"div\", {\n            key: 0,\n            class: _normalizeClass([\"customer-evacuation__drill\", { 'customer-evacuation__drill--actual': $setup.session.actual }]),\n            role: \"status\"\n          }, [\n            _createElementVNode(\"span\", null, [\n              _createElementVNode(\"strong\", null, _toDisplayString($setup.sessionLabel) + \" loopt\", 1 /* TEXT */),\n              _createTextVNode(\" sinds \" + _toDisplayString($setup.formatTime(new Date($setup.session.startedAt))) + \": \" + _toDisplayString($setup.progress.safe) + \" van \" + _toDisplayString($setup.progress.total) + \" veilig gemeld.\", 1 /* TEXT */)\n            ]),\n            _createElementVNode(\"span\", _hoisted_10, [\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"customer-evacuation__small\",\n                disabled: !$setup.listedSafe.length || $setup.sessionPending || Boolean($setup.error),\n                onClick: _cache[1] || (_cache[1] = $event => ($setup.markSafe({ visitId: $setup.listedSafe[$setup.listedSafe.length - 1], safe: false })))\n              }, \"Laatste terugdraaien\", 8 /* PROPS */, _hoisted_11),\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"customer-evacuation__small customer-evacuation__small--primary\",\n                disabled: $setup.sessionPending || Boolean($setup.error),\n                onClick: $setup.requestFinish\n              }, _toDisplayString($setup.session.actual ? \"Ontruiming afronden\" : \"Oefening beëindigen\"), 9 /* TEXT, PROPS */, _hoisted_12)\n            ])\n          ], 2 /* CLASS */))\n        : ($setup.session?.endedAt)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, _toDisplayString($setup.sessionLabel) + \" \" + _toDisplayString($setup.session.actual ? \"afgerond\" : \"beëindigd\") + \" om \" + _toDisplayString($setup.formatTime(new Date($setup.session.endedAt))) + \": \" + _toDisplayString($setup.session.safeVisitIds.length) + \" \" + _toDisplayString($setup.session.safeVisitIds.length === 1 ? \"bezoeker\" : \"bezoekers\") + \" veilig gemeld. \", 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n      ($setup.sessionError)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_14, _toDisplayString($setup.sessionError), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.error)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n            _createElementVNode(\"p\", null, _toDisplayString($setup.error), 1 /* TEXT */),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"customer-evacuation__button customer-evacuation__button--small\",\n              disabled: $setup.pending,\n              onClick: _cache[2] || (_cache[2] = $event => ($setup.load()))\n            }, \"Opnieuw proberen\", 8 /* PROPS */, _hoisted_16)\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"div\", _hoisted_17, [\n        _createElementVNode(\"span\", _hoisted_18, _toDisplayString($setup.pending ? \"Ontruimingslijst laden...\" : $setup.snapshotAt && $setup.visitors ? `Momentopname van ${$setup.formatDateLong($setup.snapshotAt)}, ${$setup.formatTime($setup.snapshotAt)}` : $props.customerName), 1 /* TEXT */),\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"customer-evacuation__button customer-evacuation__button--small customer-evacuation__refresh\",\n          disabled: $setup.refreshing || $setup.manualRefreshing || $setup.sessionPending,\n          \"aria-busy\": $setup.manualRefreshing,\n          \"aria-label\": $setup.manualRefreshing ? 'Bezig met vernieuwen' : 'Vernieuwen',\n          onClick: $setup.refresh\n        }, [\n          _createElementVNode(\"span\", {\n            class: _normalizeClass([\"customer-evacuation__refresh-label\", { 'customer-evacuation__refresh-label--hidden': $setup.manualRefreshing }]),\n            \"aria-hidden\": $setup.manualRefreshing\n          }, \"Vernieuwen\", 10 /* CLASS, PROPS */, _hoisted_20),\n          _cache[6] || (_cache[6] = _createElementVNode(\"span\", {\n            class: \"customer-evacuation__refresh-spinner\",\n            \"aria-hidden\": \"true\"\n          }, null, -1 /* CACHED */))\n        ], 8 /* PROPS */, _hoisted_19)\n      ]),\n      ($setup.visitors)\n        ? (_openBlock(), _createBlock($setup[\"DataTable\"], {\n            key: 4,\n            class: _normalizeClass([\"customer-evacuation__table\", { 'customer-evacuation__table--refreshing': $setup.manualRefreshing }]),\n            inert: $setup.manualRefreshing || undefined,\n            \"aria-hidden\": $setup.manualRefreshing || undefined,\n            columns: $setup.columns,\n            rows: $setup.visitors,\n            caption: `Ontruimingslijst ${$props.customerName}`,\n            \"row-key\": \"id\"\n          }, {\n            \"cell-name\": _withCtx(({ row }) => [\n              _createElementVNode(\"strong\", null, _toDisplayString(row.firstname) + \" \" + _toDisplayString(row.lastname), 1 /* TEXT */)\n            ]),\n            \"cell-company\": _withCtx(({ row }) => [\n              _createTextVNode(_toDisplayString(row.company || \"Niet ingesteld\"), 1 /* TEXT */)\n            ]),\n            \"cell-employeeName\": _withCtx(({ row }) => [\n              _createTextVNode(_toDisplayString(row.employeeName || \"Niet ingesteld\"), 1 /* TEXT */)\n            ]),\n            \"cell-registeredAt\": _withCtx(({ row }) => [\n              _createTextVNode(_toDisplayString($setup.arrival(row.registeredAt)), 1 /* TEXT */)\n            ]),\n            \"cell-safety\": _withCtx(({ row }) => [\n              ($setup.session?.safeVisitIds.includes(row.id))\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_21, [\n                    _cache[7] || (_cache[7] = _createElementVNode(\"span\", { class: \"customer-evacuation__safe-label\" }, \"Veilig\", -1 /* CACHED */)),\n                    _createElementVNode(\"button\", {\n                      type: \"button\",\n                      class: \"customer-evacuation__link\",\n                      \"aria-label\": `${row.firstname} ${row.lastname} terugdraaien`,\n                      disabled: $setup.sessionPending || Boolean($setup.error),\n                      onClick: $event => ($setup.markSafe({ visitId: row.id, safe: false }))\n                    }, \"Terugdraaien\", 8 /* PROPS */, _hoisted_22)\n                  ]))\n                : (_openBlock(), _createElementBlock(\"button\", {\n                    key: 1,\n                    type: \"button\",\n                    class: \"customer-evacuation__small\",\n                    \"aria-label\": `${row.firstname} ${row.lastname} veilig melden`,\n                    disabled: $setup.sessionPending || Boolean($setup.error),\n                    onClick: $event => ($setup.markSafe({ visitId: row.id, safe: true }))\n                  }, \"Veilig melden\", 8 /* PROPS */, _hoisted_23))\n            ]),\n            empty: _withCtx(() => _cache[8] || (_cache[8] = [\n              _createElementVNode(\"p\", { class: \"customer-evacuation__empty\" }, \"Er zijn nu geen bezoekers binnen.\", -1 /* CACHED */)\n            ])),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"class\", \"inert\", \"aria-hidden\", \"columns\", \"rows\", \"caption\"]))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.completion)\n        ? (_openBlock(), _createBlock($setup[\"EvacuationFinishDialog\"], {\n            key: 5,\n            completion: $setup.completion,\n            pending: $setup.sessionPending,\n            error: $setup.completionError,\n            onConfirm: $setup.finish,\n            onCancel: _cache[3] || (_cache[3] = $event => ($setup.completion = null))\n          }, null, 8 /* PROPS */, [\"completion\", \"pending\", \"error\"]))\n        : _createCommentVNode(\"v-if\", true)\n    ], 8 /* PROPS */, _hoisted_1)\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue?type=style&index=0\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue?type=style&index=1\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/CustomerEvacuation.vue\";script.__scopeId = \"data-v-2764630d\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { avatar } from \"../../../lib/avatar\";\nimport { customerHref } from \"../../../lib/customer\";\nimport { filterRows, type VisitRow, type VisitRowStatus } from \"./visit-rows\";\nimport { useLoadingIndicator } from \"../../../lib/loading\";\nimport Skeleton from \"../../ui/Skeleton.vue\";\nimport ContextMenu from \"../../ui/ContextMenu.vue\";\nimport { opensRow, type ContextMenuItem } from \"../../../lib/context-menu\";\n\nconst props = defineProps<{\n  rows: VisitRow[];\n  periods: Array<{ value: string; label: string }>;\n  period: string;\n  statuses: VisitRowStatus[];\n  /** Receives the filtered and total row counts, so a paged list can say which part it shows. */\n  title: (shown: number) => string;\n  pending: boolean;\n  error: string;\n  checkoutPending: boolean;\n  detailQuery: Record<string, string>;\n}>();\nconst loadingIndicator = useLoadingIndicator(() => props.pending);\nconst menu = ref<InstanceType<typeof ContextMenu> | null>(null);\nconst emit = defineEmits<{ period: [value: string]; checkout: [row: VisitRow]; retry: [] }>();\n\nfunction rowActions(row: VisitRow): ContextMenuItem[] {\n  if (!row.visitId)\n    return [];\n  return [\n    { label: \"Details\", href: customerHref(\"bezoeken\", { query: props.detailQuery, rest: [String(row.visitId)] }) },\n    ...(row.status === \"binnen\" ? [{ label: \"Afmelden\", disabled: props.checkoutPending, action: () => emit(\"checkout\", row) }] : []),\n  ];\n}\nfunction openRow(event: Event, row: VisitRow): void {\n  if (!row.visitId || !opensRow(event))\n    return;\n  event.preventDefault();\n  window.location.hash = customerHref(\"bezoeken\", { query: props.detailQuery, rest: [String(row.visitId)] });\n}\nconst query = ref(\"\");\nconst status = ref(\"alle\");\nconst host = ref(\"\");\n\nconst STATUS: Record<VisitRowStatus, { label: string; icon: string; tone: string }> = {\n  verwacht: { label: \"Verwacht\", tone: \"verwacht\", icon: \"M10 3a7 7 0 1 1 0 14a7 7 0 1 1 0-14zM10 6.5V10l2.5 1.5\" },\n  binnen: { label: \"Binnen\", tone: \"binnen\", icon: \"M11 3h4.5A1.5 1.5 0 0 1 17 4.5v11a1.5 1.5 0 0 1-1.5 1.5H11M3 10h9M8.5 6.5L12 10l-3.5 3.5\" },\n  vertrokken: { label: \"Vertrokken\", tone: \"vertrokken\", icon: \"M8 4H4.5v12H8M12 6.5L15.5 10L12 13.5M15.5 10H8\" },\n  onbekend: { label: \"Onbekend\", tone: \"onbekend\", icon: \"M10 3a7 7 0 1 1 0 14a7 7 0 1 1 0-14zM7 10h6\" },\n};\nconst hosts = computed(() => [...new Set(props.rows.map(row => row.host).filter(Boolean))].toSorted((a, b) => a.localeCompare(b, \"nl\")));\nconst shown = computed(() => filterRows(props.rows, { query: query.value, status: status.value, host: host.value }));\n</script>\n\n<template>\n  <div class=\"visit-table__filters\" role=\"search\">\n    <label class=\"visit-table__field visit-table__field--search\">\n      Zoeken\n      <span class=\"visit-table__search\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M9 3.5a5.5 5.5 0 1 1 0 11a5.5 5.5 0 1 1 0-11zM13.2 13.2L17 17\" /></svg>\n        <input v-model=\"query\" class=\"visit-table__control visit-table__control--search\" type=\"search\" spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"off\" placeholder=\"Zoek op bezoeker, bedrijf of gastheer\">\n      </span>\n    </label>\n    <label class=\"visit-table__field\">\n      Periode\n      <select class=\"visit-table__control\" :value=\"period\" @change=\"emit('period', ($event.target as HTMLSelectElement).value)\">\n        <option v-for=\"option in periods\" :key=\"option.value\" :value=\"option.value\">{{ option.label }}</option>\n      </select>\n    </label>\n    <slot name=\"filters\" />\n    <label class=\"visit-table__field\">\n      Status\n      <select v-model=\"status\" class=\"visit-table__control\">\n        <option value=\"alle\">Alle</option>\n        <option v-for=\"option in statuses\" :key=\"option\" :value=\"option\">{{ STATUS[option].label }}</option>\n      </select>\n    </label>\n    <label class=\"visit-table__field\">\n      Gastheer\n      <select v-model=\"host\" class=\"visit-table__control\">\n        <option value=\"\">Alle gastheren</option>\n        <option v-for=\"name in hosts\" :key=\"name\" :value=\"name\">{{ name }}</option>\n      </select>\n    </label>\n  </div>\n  <section class=\"visit-table\" aria-labelledby=\"visit-table-title\" :aria-busy=\"pending\">\n    <h2 id=\"visit-table-title\" class=\"visit-table__title\">{{ loadingIndicator.holding ? \"Bezoeken laden...\" : error ? \"Bezoeken niet beschikbaar\" : title(shown.length) }}</h2>\n    <div v-if=\"error\" class=\"visit-table__message\" role=\"alert\">\n      <p>{{ error }}</p>\n      <button type=\"button\" class=\"visit-table__action\" @click=\"emit('retry')\">Opnieuw proberen</button>\n    </div>\n    <Skeleton v-else-if=\"loadingIndicator.holding\" label=\"Bezoeken laden\" :visible=\"loadingIndicator.visible\" :count=\"5\" :height=\"52\" />\n    <template v-else>\n      <div class=\"visit-table__scroll\">\n        <table>\n          <thead>\n            <tr>\n              <th scope=\"col\">Bezoeker</th><th scope=\"col\">Bedrijf</th><th scope=\"col\">Gastheer</th><th scope=\"col\">Verwacht</th>\n              <th scope=\"col\">Aankomst</th><th scope=\"col\">Vertrek</th><th scope=\"col\">Status</th><th scope=\"col\" class=\"touch-only\">Acties</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr v-for=\"row in shown\" :key=\"row.key\" :class=\"{ 'visit-table__row--open': row.visitId }\" :tabindex=\"row.visitId ? 0 : undefined\"\n                @contextmenu=\"menu?.show($event, rowActions(row), `Acties voor ${row.name}`)\" @dblclick=\"openRow($event, row)\" @keydown=\"openRow($event, row)\"\n                @mousedown=\"row.visitId && $event.detail > 1 && $event.preventDefault()\">\n              <td>\n                <span class=\"visit-table__person\">\n                  <span class=\"visit-table__avatar\" aria-hidden=\"true\" :style=\"{ background: avatar(row.name).color }\">{{ avatar(row.name).initials }}</span>{{ row.name }}\n                </span>\n              </td>\n              <td :class=\"{ 'visit-table__muted': !row.company }\">{{ row.company || \"Niet ingesteld\" }}</td>\n              <td>\n                <span v-if=\"row.host\" class=\"visit-table__person visit-table__person--host\">\n                  <span class=\"visit-table__avatar visit-table__avatar--small\" aria-hidden=\"true\" :style=\"{ background: avatar(row.host).color }\">{{ avatar(row.host).initials }}</span>{{ row.host }}\n                </span>\n                <span v-else class=\"visit-table__muted\">Niet ingesteld</span>\n              </td>\n              <td>{{ row.expected }}</td>\n              <td :class=\"{ 'visit-table__muted': !row.arrival }\">{{ row.arrival ?? (row.status === \"onbekend\" ? \"Onbekend\" : \"Nog niet\") }}</td>\n              <td :class=\"{ 'visit-table__muted': !row.departure }\">{{ row.departure ?? (row.status === \"binnen\" ? \"Nog binnen\" : \"Nog niet\") }}</td>\n              <td>\n                <span class=\"visit-table__status\" :class=\"`visit-table__status--${STATUS[row.status].tone}`\">\n                  <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path :d=\"STATUS[row.status].icon\" /></svg>\n                  {{ STATUS[row.status].label }}\n                </span>\n              </td>\n              <td class=\"touch-only\">\n                <span class=\"visit-table__actions\">\n                  <button v-if=\"row.status === 'binnen' && row.visitId\" type=\"button\" class=\"visit-table__action\" :disabled=\"checkoutPending\" @click=\"emit('checkout', row)\">Afmelden</button>\n                  <a v-if=\"row.visitId\" class=\"visit-table__details\" :href=\"customerHref('bezoeken', { query: detailQuery, rest: [String(row.visitId)] })\" :aria-label=\"`Details van ${row.name}`\">Details</a>\n                </span>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n      <p v-if=\"!shown.length\" class=\"visit-table__empty\">Geen bezoeken die hierbij passen.</p>\n      <slot name=\"footer\" />\n    </template>\n    <ContextMenu ref=\"menu\" />\n  </section>\n</template>\n\n<style scoped>\n/* Geometry, colors and type follow the supplied Bezoeken.html export. */\n.visit-table__filters { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }\n.visit-table__field { flex: 0 1 220px; display: flex; flex-direction: column; gap: 6px; font-size: 13px; font-weight: 700; }\n.visit-table__field--search { flex: 1 1 300px; }\n.visit-table__filters :slotted(.visit-table__field) { flex: 0 1 220px; display: flex; flex-direction: column; gap: 6px; font-size: 13px; font-weight: 700; }\n.visit-table__search { position: relative; display: block; }\n.visit-table__search svg { position: absolute; left: 16px; top: 15px; color: var(--muted-foreground); }\n.visit-table__control, .visit-table__filters :slotted(.visit-table__control) { height: 48px; padding: 0 16px; border-radius: 999px; border: 1.5px solid var(--border-strong); background: var(--field); color: var(--foreground); font-family: inherit; font-size: 15px; font-weight: 400; cursor: pointer; }\n.visit-table__control--search { width: 100%; box-sizing: border-box; padding: 0 18px 0 44px; cursor: text; }\n.visit-table__control::placeholder { color: var(--muted-foreground); }\n\n.visit-table { background: var(--paper); border: 1px solid var(--border); }\n.visit-table__title { margin: 0; padding: 20px 24px 12px; font-family: var(--font-display); font-size: 22px; font-weight: 600; letter-spacing: -0.04em; }\n.visit-table__scroll { overflow-x: auto; }\ntable { width: 100%; min-width: 1000px; border-collapse: collapse; font-size: 14px; }\nth { text-align: left; padding: 10px 12px; font-size: 13px; font-weight: 700; color: var(--muted-foreground); border-bottom: 1px solid var(--border); }\nth:first-child { padding-left: 24px; }\nth:last-child { text-align: right; padding-right: 24px; }\ntd { padding: 12px; border-bottom: 1px solid var(--border); }\ntd:first-child { padding: 10px 12px 10px 24px; font-weight: 700; }\ntd:last-child { padding-right: 24px; }\ntbody tr:hover { background: var(--hover); }\ntbody tr:focus-visible { outline: 2px solid var(--ring); outline-offset: -2px; }\n.visit-table__row--open { cursor: pointer; }\n.visit-table__muted { color: var(--muted-foreground); }\n.visit-table__person { display: flex; align-items: center; gap: 12px; }\n.visit-table__person--host { gap: 10px; }\n.visit-table__avatar { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 999px; color: var(--foreground); font-size: 13px; font-weight: 700; }\n.visit-table__avatar--small { width: 28px; height: 28px; font-size: 12px; }\n.visit-table__status { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 12px 0 9px; border-radius: 999px; border: 0; font-size: 13px; font-weight: 700; white-space: nowrap; box-sizing: border-box; }\n.visit-table__status--verwacht { background: var(--sky); }\n.visit-table__status--binnen { background: var(--lime); }\n.visit-table__status--vertrokken { background: var(--selected); }\n.visit-table__status--onbekend { background: transparent; border: 1.5px dashed var(--foreground); }\n.visit-table__actions { display: flex; justify-content: flex-end; gap: 8px; }\n.visit-table__action { min-height: 36px; padding: 0 14px; border-radius: 999px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.visit-table__action:disabled { opacity: 0.45; cursor: not-allowed; }\n.visit-table__details { min-height: 36px; display: inline-flex; align-items: center; padding: 0 12px; color: var(--foreground); font-size: 13px; font-weight: 700; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.visit-table__empty { margin: 0; padding: 20px 24px; color: var(--muted-foreground); }\n.visit-table__message { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 0 24px 20px; }\n.visit-table__message p { margin: 0; color: var(--danger); }\n</style>\n","import { formatDate, formatTime } from \"../../../lib/format.ts\";\n\nexport type VisitRowStatus = \"verwacht\" | \"binnen\" | \"vertrokken\" | \"onbekend\";\n\nexport type VisitRow = {\n  key: string;\n  /** Registrations have a detail page and may be checked out; calendar expectations have neither. */\n  visitId: number | null;\n  name: string;\n  company: string;\n  host: string;\n  expected: string;\n  arrival: string | null;\n  departure: string | null;\n  status: VisitRowStatus;\n  sortAt: number;\n};\n\ntype Registration = { id: number; firstname: string; lastname: string; company: string; employeeName: string; registeredAt: string | null; appointmentUntil: string; departedAt: string | null };\ntype Expected = { id: number; name: string; employeeName: string; startsAt: string; endsAt: string };\n\nfunction period(options: { start: Date | null; end: Date; withDate: boolean }): string {\n  const range = options.start ? `${formatTime(options.start)} tot ${formatTime(options.end)}` : `tot ${formatTime(options.end)}`;\n  return options.withDate ? `${formatDate(options.start ?? options.end)}, ${range}` : range;\n}\n\n/** Registration records arrival; only a recorded departure ends presence, never the appointment end. */\nexport function registrationRow(visit: Registration, options: { withDate: boolean }): VisitRow {\n  const registered = visit.registeredAt ? new Date(visit.registeredAt) : null;\n  return {\n    key: `r${visit.id}`, visitId: visit.id, name: `${visit.firstname} ${visit.lastname}`.trim(), company: visit.company, host: visit.employeeName,\n    expected: period({ start: registered, end: new Date(visit.appointmentUntil), withDate: options.withDate }),\n    arrival: registered ? formatTime(registered) : null, departure: visit.departedAt ? formatTime(new Date(visit.departedAt)) : null,\n    status: visit.departedAt ? \"vertrokken\" : registered ? \"binnen\" : \"onbekend\", sortAt: registered?.getTime() ?? new Date(visit.appointmentUntil).getTime(),\n  };\n}\n\nexport function expectedRow(visit: Expected, options: { withDate: boolean }): VisitRow {\n  const start = new Date(visit.startsAt);\n  return {\n    key: `e${visit.id}`, visitId: null, name: visit.name, company: \"\", host: visit.employeeName,\n    expected: period({ start, end: new Date(visit.endsAt), withDate: options.withDate }), arrival: null, departure: null, status: \"verwacht\", sortAt: start.getTime(),\n  };\n}\n\nexport function filterRows(rows: readonly VisitRow[], filter: { query: string; status: string; host: string }): VisitRow[] {\n  const query = filter.query.trim().toLowerCase();\n  return rows.filter(row => (filter.status === \"alle\" || row.status === filter.status) && (!filter.host || row.host === filter.host)\n    && (!query || `${row.name} ${row.company} ${row.host}`.toLowerCase().includes(query)));\n}\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelText as _vModelText, withDirectives as _withDirectives, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, renderSlot as _renderSlot, vModelSelect as _vModelSelect, createCommentVNode as _createCommentVNode, createBlock as _createBlock, normalizeStyle as _normalizeStyle, normalizeClass as _normalizeClass, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"visit-table__filters\",\n  role: \"search\"\n}\nconst _hoisted_2 = { class: \"visit-table__field visit-table__field--search\" }\nconst _hoisted_3 = { class: \"visit-table__search\" }\nconst _hoisted_4 = { class: \"visit-table__field\" }\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = [\"value\"]\nconst _hoisted_7 = { class: \"visit-table__field\" }\nconst _hoisted_8 = [\"value\"]\nconst _hoisted_9 = { class: \"visit-table__field\" }\nconst _hoisted_10 = [\"value\"]\nconst _hoisted_11 = [\"aria-busy\"]\nconst _hoisted_12 = {\n  id: \"visit-table-title\",\n  class: \"visit-table__title\"\n}\nconst _hoisted_13 = {\n  key: 0,\n  class: \"visit-table__message\",\n  role: \"alert\"\n}\nconst _hoisted_14 = { class: \"visit-table__scroll\" }\nconst _hoisted_15 = [\"tabindex\", \"onContextmenu\", \"onDblclick\", \"onKeydown\", \"onMousedown\"]\nconst _hoisted_16 = { class: \"visit-table__person\" }\nconst _hoisted_17 = {\n  key: 0,\n  class: \"visit-table__person visit-table__person--host\"\n}\nconst _hoisted_18 = {\n  key: 1,\n  class: \"visit-table__muted\"\n}\nconst _hoisted_19 = {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 20 20\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.8\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_20 = [\"d\"]\nconst _hoisted_21 = { class: \"touch-only\" }\nconst _hoisted_22 = { class: \"visit-table__actions\" }\nconst _hoisted_23 = [\"disabled\", \"onClick\"]\nconst _hoisted_24 = [\"href\", \"aria-label\"]\nconst _hoisted_25 = {\n  key: 0,\n  class: \"visit-table__empty\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"div\", _hoisted_1, [\n      _createElementVNode(\"label\", _hoisted_2, [\n        _cache[6] || (_cache[6] = _createTextVNode(\" Zoeken \", -1 /* CACHED */)),\n        _createElementVNode(\"span\", _hoisted_3, [\n          _cache[5] || (_cache[5] = _createElementVNode(\"svg\", {\n            width: \"18\",\n            height: \"18\",\n            viewBox: \"0 0 20 20\",\n            fill: \"none\",\n            stroke: \"currentColor\",\n            \"stroke-width\": \"1.8\",\n            \"stroke-linecap\": \"round\",\n            \"aria-hidden\": \"true\"\n          }, [\n            _createElementVNode(\"path\", { d: \"M9 3.5a5.5 5.5 0 1 1 0 11a5.5 5.5 0 1 1 0-11zM13.2 13.2L17 17\" })\n          ], -1 /* CACHED */)),\n          _withDirectives(_createElementVNode(\"input\", {\n            \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.query) = $event)),\n            class: \"visit-table__control visit-table__control--search\",\n            type: \"search\",\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            placeholder: \"Zoek op bezoeker, bedrijf of gastheer\"\n          }, null, 512 /* NEED_PATCH */), [\n            [_vModelText, $setup.query]\n          ])\n        ])\n      ]),\n      _createElementVNode(\"label\", _hoisted_4, [\n        _cache[7] || (_cache[7] = _createTextVNode(\" Periode \", -1 /* CACHED */)),\n        _createElementVNode(\"select\", {\n          class: \"visit-table__control\",\n          value: $props.period,\n          onChange: _cache[1] || (_cache[1] = $event => ($setup.emit('period', ($event.target as HTMLSelectElement).value)))\n        }, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.periods, (option) => {\n            return (_openBlock(), _createElementBlock(\"option\", {\n              key: option.value,\n              value: option.value\n            }, _toDisplayString(option.label), 9 /* TEXT, PROPS */, _hoisted_6))\n          }), 128 /* KEYED_FRAGMENT */))\n        ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_5)\n      ]),\n      _renderSlot(_ctx.$slots, \"filters\"),\n      _createElementVNode(\"label\", _hoisted_7, [\n        _cache[9] || (_cache[9] = _createTextVNode(\" Status \", -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"select\", {\n          \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.status) = $event)),\n          class: \"visit-table__control\"\n        }, [\n          _cache[8] || (_cache[8] = _createElementVNode(\"option\", { value: \"alle\" }, \"Alle\", -1 /* CACHED */)),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.statuses, (option) => {\n            return (_openBlock(), _createElementBlock(\"option\", {\n              key: option,\n              value: option\n            }, _toDisplayString($setup.STATUS[option].label), 9 /* TEXT, PROPS */, _hoisted_8))\n          }), 128 /* KEYED_FRAGMENT */))\n        ], 512 /* NEED_PATCH */), [\n          [_vModelSelect, $setup.status]\n        ])\n      ]),\n      _createElementVNode(\"label\", _hoisted_9, [\n        _cache[11] || (_cache[11] = _createTextVNode(\" Gastheer \", -1 /* CACHED */)),\n        _withDirectives(_createElementVNode(\"select\", {\n          \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.host) = $event)),\n          class: \"visit-table__control\"\n        }, [\n          _cache[10] || (_cache[10] = _createElementVNode(\"option\", { value: \"\" }, \"Alle gastheren\", -1 /* CACHED */)),\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.hosts, (name) => {\n            return (_openBlock(), _createElementBlock(\"option\", {\n              key: name,\n              value: name\n            }, _toDisplayString(name), 9 /* TEXT, PROPS */, _hoisted_10))\n          }), 128 /* KEYED_FRAGMENT */))\n        ], 512 /* NEED_PATCH */), [\n          [_vModelSelect, $setup.host]\n        ])\n      ])\n    ]),\n    _createElementVNode(\"section\", {\n      class: \"visit-table\",\n      \"aria-labelledby\": \"visit-table-title\",\n      \"aria-busy\": $props.pending\n    }, [\n      _createElementVNode(\"h2\", _hoisted_12, _toDisplayString($setup.loadingIndicator.holding ? \"Bezoeken laden...\" : $props.error ? \"Bezoeken niet beschikbaar\" : $props.title($setup.shown.length)), 1 /* TEXT */),\n      ($props.error)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n            _createElementVNode(\"p\", null, _toDisplayString($props.error), 1 /* TEXT */),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"visit-table__action\",\n              onClick: _cache[4] || (_cache[4] = $event => ($setup.emit('retry')))\n            }, \"Opnieuw proberen\")\n          ]))\n        : ($setup.loadingIndicator.holding)\n          ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n              key: 1,\n              label: \"Bezoeken laden\",\n              visible: $setup.loadingIndicator.visible,\n              count: 5,\n              height: 52\n            }, null, 8 /* PROPS */, [\"visible\"]))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n              _createElementVNode(\"div\", _hoisted_14, [\n                _createElementVNode(\"table\", null, [\n                  _cache[12] || (_cache[12] = _createElementVNode(\"thead\", null, [\n                    _createElementVNode(\"tr\", null, [\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Bezoeker\"),\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Bedrijf\"),\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Gastheer\"),\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Verwacht\"),\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Aankomst\"),\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Vertrek\"),\n                      _createElementVNode(\"th\", { scope: \"col\" }, \"Status\"),\n                      _createElementVNode(\"th\", {\n                        scope: \"col\",\n                        class: \"touch-only\"\n                      }, \"Acties\")\n                    ])\n                  ], -1 /* CACHED */)),\n                  _createElementVNode(\"tbody\", null, [\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.shown, (row) => {\n                      return (_openBlock(), _createElementBlock(\"tr\", {\n                        key: row.key,\n                        class: _normalizeClass({ 'visit-table__row--open': row.visitId }),\n                        tabindex: row.visitId ? 0 : undefined,\n                        onContextmenu: $event => ($setup.menu?.show($event, $setup.rowActions(row), `Acties voor ${row.name}`)),\n                        onDblclick: $event => ($setup.openRow($event, row)),\n                        onKeydown: $event => ($setup.openRow($event, row)),\n                        onMousedown: $event => (row.visitId && $event.detail > 1 && $event.preventDefault())\n                      }, [\n                        _createElementVNode(\"td\", null, [\n                          _createElementVNode(\"span\", _hoisted_16, [\n                            _createElementVNode(\"span\", {\n                              class: \"visit-table__avatar\",\n                              \"aria-hidden\": \"true\",\n                              style: _normalizeStyle({ background: $setup.avatar(row.name).color })\n                            }, _toDisplayString($setup.avatar(row.name).initials), 5 /* TEXT, STYLE */),\n                            _createTextVNode(_toDisplayString(row.name), 1 /* TEXT */)\n                          ])\n                        ]),\n                        _createElementVNode(\"td\", {\n                          class: _normalizeClass({ 'visit-table__muted': !row.company })\n                        }, _toDisplayString(row.company || \"Niet ingesteld\"), 3 /* TEXT, CLASS */),\n                        _createElementVNode(\"td\", null, [\n                          (row.host)\n                            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_17, [\n                                _createElementVNode(\"span\", {\n                                  class: \"visit-table__avatar visit-table__avatar--small\",\n                                  \"aria-hidden\": \"true\",\n                                  style: _normalizeStyle({ background: $setup.avatar(row.host).color })\n                                }, _toDisplayString($setup.avatar(row.host).initials), 5 /* TEXT, STYLE */),\n                                _createTextVNode(_toDisplayString(row.host), 1 /* TEXT */)\n                              ]))\n                            : (_openBlock(), _createElementBlock(\"span\", _hoisted_18, \"Niet ingesteld\"))\n                        ]),\n                        _createElementVNode(\"td\", null, _toDisplayString(row.expected), 1 /* TEXT */),\n                        _createElementVNode(\"td\", {\n                          class: _normalizeClass({ 'visit-table__muted': !row.arrival })\n                        }, _toDisplayString(row.arrival ?? (row.status === \"onbekend\" ? \"Onbekend\" : \"Nog niet\")), 3 /* TEXT, CLASS */),\n                        _createElementVNode(\"td\", {\n                          class: _normalizeClass({ 'visit-table__muted': !row.departure })\n                        }, _toDisplayString(row.departure ?? (row.status === \"binnen\" ? \"Nog binnen\" : \"Nog niet\")), 3 /* TEXT, CLASS */),\n                        _createElementVNode(\"td\", null, [\n                          _createElementVNode(\"span\", {\n                            class: _normalizeClass([\"visit-table__status\", `visit-table__status--${$setup.STATUS[row.status].tone}`])\n                          }, [\n                            (_openBlock(), _createElementBlock(\"svg\", _hoisted_19, [\n                              _createElementVNode(\"path\", {\n                                d: $setup.STATUS[row.status].icon\n                              }, null, 8 /* PROPS */, _hoisted_20)\n                            ])),\n                            _createTextVNode(\" \" + _toDisplayString($setup.STATUS[row.status].label), 1 /* TEXT */)\n                          ], 2 /* CLASS */)\n                        ]),\n                        _createElementVNode(\"td\", _hoisted_21, [\n                          _createElementVNode(\"span\", _hoisted_22, [\n                            (row.status === 'binnen' && row.visitId)\n                              ? (_openBlock(), _createElementBlock(\"button\", {\n                                  key: 0,\n                                  type: \"button\",\n                                  class: \"visit-table__action\",\n                                  disabled: $props.checkoutPending,\n                                  onClick: $event => ($setup.emit('checkout', row))\n                                }, \"Afmelden\", 8 /* PROPS */, _hoisted_23))\n                              : _createCommentVNode(\"v-if\", true),\n                            (row.visitId)\n                              ? (_openBlock(), _createElementBlock(\"a\", {\n                                  key: 1,\n                                  class: \"visit-table__details\",\n                                  href: $setup.customerHref('bezoeken', { query: $props.detailQuery, rest: [String(row.visitId)] }),\n                                  \"aria-label\": `Details van ${row.name}`\n                                }, \"Details\", 8 /* PROPS */, _hoisted_24))\n                              : _createCommentVNode(\"v-if\", true)\n                          ])\n                        ])\n                      ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_15))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ])\n                ])\n              ]),\n              (!$setup.shown.length)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_25, \"Geen bezoeken die hierbij passen.\"))\n                : _createCommentVNode(\"v-if\", true),\n              _renderSlot(_ctx.$slots, \"footer\")\n            ], 64 /* STABLE_FRAGMENT */)),\n      _createVNode($setup[\"ContextMenu\"], { ref: \"menu\" }, null, 512 /* NEED_PATCH */)\n    ], 8 /* PROPS */, _hoisted_11)\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/VisitTable.vue\";script.__scopeId = \"data-v-9ece9b20\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { addDays } from \"./days.ts\";\n\nconst props = defineProps<{ modelValue: string; max: string }>();\nconst emit = defineEmits<{ \"update:modelValue\": [value: string] }>();\nconst input = ref<HTMLInputElement | null>(null);\nconst label = computed(() => new Intl.DateTimeFormat(\"nl-NL\", { timeZone: \"UTC\", weekday: \"short\", day: \"numeric\", month: \"short\", year: \"numeric\" })\n  .format(new Date(`${props.modelValue}T12:00:00Z`)).replace(/\\.(?=\\s|$)/g, \"\"));\nconst atMax = computed(() => props.modelValue >= props.max);\n\nfunction step(days: number): void {\n  const next = addDays(props.modelValue, days);\n  if (next <= props.max)\n    emit(\"update:modelValue\", next);\n}\n\nfunction openCalendar(): void {\n  // showPicker is missing in older Safari; focusing still lets the user type a date.\n  try {\n    input.value?.showPicker();\n  } catch {\n    input.value?.focus();\n  }\n}\n\nfunction choose(event: Event): void {\n  const value = (event.target as HTMLInputElement).value;\n  if (value && value <= props.max)\n    emit(\"update:modelValue\", value);\n}\n</script>\n\n<template>\n  <div class=\"visit-table__field history-date\">\n    <span id=\"history-date-label\">Datum</span>\n    <div class=\"history-date__control\" role=\"group\" aria-labelledby=\"history-date-label\">\n      <button type=\"button\" class=\"history-date__step\" aria-label=\"Vorige dag\" @click=\"step(-1)\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12.5 5L7.5 10l5 5\" /></svg>\n      </button>\n      <button type=\"button\" class=\"history-date__day\" :aria-label=\"`Kies een datum, nu ${label}`\" @click=\"openCalendar\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 5.5h12v10.5H4zM4 9h12M7.5 3.5v3M12.5 3.5v3\" /></svg>\n        <span>{{ label }}</span>\n      </button>\n      <button type=\"button\" class=\"history-date__step\" aria-label=\"Volgende dag\" :disabled=\"atMax\" @click=\"step(1)\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M7.5 5l5 5-5 5\" /></svg>\n      </button>\n      <input ref=\"input\" class=\"history-date__input\" type=\"date\" :value=\"modelValue\" :max=\"max\" tabindex=\"-1\" aria-hidden=\"true\" @change=\"choose\">\n    </div>\n  </div>\n</template>\n\n<style scoped>\n/* Not in the supplied export: a pill stepper in the filter bar's own control language. */\n.history-date { flex: 0 1 280px; }\n.history-date__control { position: relative; display: flex; align-items: center; gap: 2px; height: 48px; padding: 0 4px; box-sizing: border-box; border-radius: 999px; border: 1.5px solid var(--border-strong); background: var(--field); }\n.history-date__step, .history-date__day { display: inline-flex; align-items: center; justify-content: center; border: 0; background: transparent; color: var(--foreground); font-family: inherit; cursor: pointer; transition: background-color 0.18s; }\n.history-date__step { flex: none; width: 38px; height: 38px; border-radius: 50%; }\n.history-date__step:disabled { color: var(--muted-foreground); opacity: 0.45; cursor: not-allowed; }\n.history-date__day { flex: 1; min-width: 0; gap: 8px; height: 38px; padding: 0 10px; border-radius: 999px; font-size: 15px; font-weight: 400; white-space: nowrap; }\n.history-date__day span { overflow: hidden; text-overflow: ellipsis; }\n@media (hover: hover) {\n  .history-date__step:hover:not(:disabled), .history-date__day:hover { background: var(--selected); }\n}\n.history-date__step:focus-visible, .history-date__day:focus-visible { outline: 2px solid var(--foreground); outline-offset: 0; }\n/* Kept rendered (not display: none) so showPicker can anchor the native calendar under the pill. */\n.history-date__input { position: absolute; left: 50%; bottom: 0; width: 1px; height: 1px; padding: 0; border: 0; opacity: 0; pointer-events: none; }\n</style>\n","/** \"2026-10-17\" for the Amsterdam calendar day of `date`. */\nexport function amsterdamDay(date: Date): string {\n  return new Intl.DateTimeFormat(\"sv-SE\", { timeZone: \"Europe/Amsterdam\" }).format(date);\n}\n\nexport function addDays(day: string, days: number): string {\n  // Noon avoids daylight-saving boundaries when stepping whole Amsterdam days.\n  return amsterdamDay(new Date(new Date(`${day}T12:00:00Z`).getTime() + days * 86_400_000));\n}\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"visit-table__field history-date\" }\nconst _hoisted_2 = {\n  class: \"history-date__control\",\n  role: \"group\",\n  \"aria-labelledby\": \"history-date-label\"\n}\nconst _hoisted_3 = [\"aria-label\"]\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = [\"value\", \"max\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _cache[5] || (_cache[5] = _createElementVNode(\"span\", { id: \"history-date-label\" }, \"Datum\", -1 /* CACHED */)),\n    _createElementVNode(\"div\", _hoisted_2, [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"history-date__step\",\n        \"aria-label\": \"Vorige dag\",\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.step(-1)))\n      }, _cache[2] || (_cache[2] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 20 20\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"1.8\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M12.5 5L7.5 10l5 5\" })\n        ], -1 /* CACHED */)\n      ])),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"history-date__day\",\n        \"aria-label\": `Kies een datum, nu ${$setup.label}`,\n        onClick: $setup.openCalendar\n      }, [\n        _cache[3] || (_cache[3] = _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 20 20\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"1.8\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M4 5.5h12v10.5H4zM4 9h12M7.5 3.5v3M12.5 3.5v3\" })\n        ], -1 /* CACHED */)),\n        _createElementVNode(\"span\", null, _toDisplayString($setup.label), 1 /* TEXT */)\n      ], 8 /* PROPS */, _hoisted_3),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"history-date__step\",\n        \"aria-label\": \"Volgende dag\",\n        disabled: $setup.atMax,\n        onClick: _cache[1] || (_cache[1] = $event => ($setup.step(1)))\n      }, _cache[4] || (_cache[4] = [\n        _createElementVNode(\"svg\", {\n          width: \"18\",\n          height: \"18\",\n          viewBox: \"0 0 20 20\",\n          fill: \"none\",\n          stroke: \"currentColor\",\n          \"stroke-width\": \"1.8\",\n          \"stroke-linecap\": \"round\",\n          \"stroke-linejoin\": \"round\",\n          \"aria-hidden\": \"true\"\n        }, [\n          _createElementVNode(\"path\", { d: \"M7.5 5l5 5-5 5\" })\n        ], -1 /* CACHED */)\n      ]), 8 /* PROPS */, _hoisted_4),\n      _createElementVNode(\"input\", {\n        ref: \"input\",\n        class: \"history-date__input\",\n        type: \"date\",\n        value: $props.modelValue,\n        max: $props.max,\n        tabindex: \"-1\",\n        \"aria-hidden\": \"true\",\n        onChange: $setup.choose\n      }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_5)\n    ])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/visits/HistoryDatePicker.vue\";script.__scopeId = \"data-v-7b142313\";export default script;","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, toDisplayString as _toDisplayString, normalizeProps as _normalizeProps, guardReactiveProps as _guardReactiveProps, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, createSlots as _createSlots } from \"vue\"\n\nconst _hoisted_1 = { key: 0 }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = { class: \"visits__details\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"visits__error\",\n  role: \"alert\"\n}\nconst _hoisted_5 = { key: 1 }\nconst _hoisted_6 = {\n  key: 2,\n  class: \"visits__calls\"\n}\nconst _hoisted_7 = { key: 3 }\nconst _hoisted_8 = {\n  key: 1,\n  class: \"visits\"\n}\nconst _hoisted_9 = [\"aria-busy\"]\nconst _hoisted_10 = {\n  class: \"visits__tabs\",\n  \"aria-label\": \"Weergave van bezoeken\"\n}\nconst _hoisted_11 = [\"href\", \"aria-current\"]\nconst _hoisted_12 = [\"data-label\"]\nconst _hoisted_13 = {\n  key: 0,\n  class: \"visits__tab-count\"\n}\nconst _hoisted_14 = {\n  key: 0,\n  class: \"visits__error\",\n  role: \"alert\"\n}\nconst _hoisted_15 = {\n  class: \"visits__pages\",\n  \"aria-label\": \"Paginering\"\n}\nconst _hoisted_16 = { class: \"visits__page-label\" }\nconst _hoisted_17 = { class: \"visits__page-buttons\" }\nconst _hoisted_18 = [\"disabled\"]\nconst _hoisted_19 = [\"aria-current\", \"onClick\"]\nconst _hoisted_20 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return ($setup.detailRoute)\n    ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n        _createVNode($setup[\"PageHeader\"], {\n          title: \"Bezoekregistratie\",\n          context: $props.bootstrap.customer.name,\n          \"back-href\": $setup.customerHref('bezoeken', { query: $setup.listQuery() }),\n          description: \"Gegevens en oproepen van dit bezoek.\"\n        }, null, 8 /* PROPS */, [\"context\", \"back-href\"]),\n        _createVNode($setup[\"SectionCard\"], {\n          class: \"visits__content\",\n          title: \"Registratie\",\n          \"aria-busy\": $setup.pending\n        }, {\n          default: _withCtx(() => [\n            ($setup.loadingIndicator.holding)\n              ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n                  key: 0,\n                  label: \"Bezoek laden\",\n                  visible: $setup.loadingIndicator.visible,\n                  count: 8,\n                  height: 22\n                }, null, 8 /* PROPS */, [\"visible\"]))\n              : ($setup.error)\n                ? (_openBlock(), _createBlock($setup[\"EmptyState\"], {\n                    key: 1,\n                    kind: \"error\",\n                    title: \"Bezoek niet beschikbaar\",\n                    description: $setup.error\n                  }, {\n                    actions: _withCtx(() => [\n                      _createElementVNode(\"a\", {\n                        class: \"visits__link\",\n                        href: $setup.customerHref('bezoeken', { query: $setup.listQuery() })\n                      }, \"Terug naar bezoeken\", 8 /* PROPS */, _hoisted_2)\n                    ]),\n                    _: 1 /* STABLE */\n                  }, 8 /* PROPS */, [\"description\"]))\n                : ($setup.detail)\n                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                      _createElementVNode(\"dl\", _hoisted_3, [\n                        _cache[3] || (_cache[3] = _createElementVNode(\"dt\", null, \"Bezoeker\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.detail.firstname) + \" \" + _toDisplayString($setup.detail.lastname), 1 /* TEXT */),\n                        _cache[4] || (_cache[4] = _createElementVNode(\"dt\", null, \"Bedrijf\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.detail.company || 'Niet ingesteld'), 1 /* TEXT */),\n                        _cache[5] || (_cache[5] = _createElementVNode(\"dt\", null, \"Telefoonnummer\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.detail.phone || 'Niet ingesteld'), 1 /* TEXT */),\n                        _cache[6] || (_cache[6] = _createElementVNode(\"dt\", null, \"Medewerker\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.detail.employeeName || 'Niet ingesteld'), 1 /* TEXT */),\n                        _cache[7] || (_cache[7] = _createElementVNode(\"dt\", null, \"Geregistreerd op\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.displayTime($setup.detail.registeredAt)), 1 /* TEXT */),\n                        _cache[8] || (_cache[8] = _createElementVNode(\"dt\", null, \"Afspraak tot\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.displayTime($setup.detail.appointmentUntil)), 1 /* TEXT */),\n                        _cache[9] || (_cache[9] = _createElementVNode(\"dt\", null, \"Vertrokken op\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($setup.detail.departedAt ? $setup.displayTime($setup.detail.departedAt) : 'Niet afgemeld'), 1 /* TEXT */),\n                        _cache[10] || (_cache[10] = _createElementVNode(\"dt\", null, \"Status\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, [\n                          _createVNode($setup[\"StatusBadge\"], _normalizeProps(_guardReactiveProps($setup.visitStatus($setup.detail))), null, 16 /* FULL_PROPS */)\n                        ])\n                      ]),\n                      ($setup.actionError)\n                        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($setup.actionError), 1 /* TEXT */))\n                        : _createCommentVNode(\"v-if\", true),\n                      ($setup.detail.registeredAt && !$setup.detail.departedAt)\n                        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n                            _createVNode($setup[\"Button\"], {\n                              disabled: $setup.checkoutPending,\n                              onClick: $setup.checkout\n                            }, {\n                              default: _withCtx(() => [\n                                _createTextVNode(_toDisplayString($setup.checkoutPending ? 'Afmelden...' : 'Afmelden'), 1 /* TEXT */)\n                              ]),\n                              _: 1 /* STABLE */\n                            }, 8 /* PROPS */, [\"disabled\"])\n                          ]))\n                        : _createCommentVNode(\"v-if\", true),\n                      _cache[11] || (_cache[11] = _createElementVNode(\"h2\", { class: \"visits__subtitle\" }, \"Oproepen\", -1 /* CACHED */)),\n                      ($setup.detail.calls.length)\n                        ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_6, [\n                            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.detail.calls, (call) => {\n                              return (_openBlock(), _createElementBlock(\"li\", {\n                                key: call.id\n                              }, \"Oproep #\" + _toDisplayString(call.id) + \": \" + _toDisplayString($setup.displayTime(call.createdAt)), 1 /* TEXT */))\n                            }), 128 /* KEYED_FRAGMENT */))\n                          ]))\n                        : (_openBlock(), _createElementBlock(\"p\", _hoisted_7, \"Geen oproepen geregistreerd.\"))\n                    ], 64 /* STABLE_FRAGMENT */))\n                  : _createCommentVNode(\"v-if\", true)\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"aria-busy\"])\n      ]))\n    : (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n        _createVNode($setup[\"PageHeader\"], {\n          title: \"Bezoeken.\",\n          context: $props.bootstrap.customer.name,\n          description: \"Wie er komt, wie er is en wie er al weer weg is.\",\n          class: _normalizeClass({ 'visits__header--evacuation': $setup.evacuationTab })\n        }, {\n          meta: _withCtx(() => [\n            _createElementVNode(\"div\", {\n              class: \"visits__counters\",\n              \"aria-busy\": $setup.totals === null\n            }, [\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.counters, (counter) => {\n                return (_openBlock(), _createElementBlock(\"span\", {\n                  key: counter.label,\n                  class: _normalizeClass([\"visits__counter\", `visits__counter--${counter.tone}`])\n                }, [\n                  _createElementVNode(\"span\", {\n                    class: _normalizeClass([\"visits__counter-number\", { 'visits__counter-number--loading': counter.count === null }])\n                  }, _toDisplayString(counter.count), 3 /* TEXT, CLASS */),\n                  _createTextVNode(_toDisplayString(counter.label), 1 /* TEXT */)\n                ], 2 /* CLASS */))\n              }), 128 /* KEYED_FRAGMENT */))\n            ], 8 /* PROPS */, _hoisted_9)\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"context\", \"class\"]),\n        _createElementVNode(\"nav\", _hoisted_10, [\n          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.tabs, (tab) => {\n            return (_openBlock(), _createElementBlock(\"a\", {\n              key: tab.id,\n              class: _normalizeClass([\"visits__tab\", { 'visits__tab--current': tab.current }]),\n              href: $setup.customerHref('bezoeken', { query: tab.query }),\n              \"aria-current\": tab.current ? 'page' : undefined\n            }, [\n              _createElementVNode(\"span\", {\n                class: \"visits__tab-label\",\n                \"data-label\": tab.label\n              }, _toDisplayString(tab.label), 9 /* TEXT, PROPS */, _hoisted_12),\n              (tab.count !== null)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_13, _toDisplayString(tab.count), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true)\n            ], 10 /* CLASS, PROPS */, _hoisted_11))\n          }), 128 /* KEYED_FRAGMENT */))\n        ]),\n        ($setup.actionError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_14, _toDisplayString($setup.actionError), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.evacuationTab)\n          ? (_openBlock(), _createBlock($setup[\"CustomerEvacuation\"], {\n              key: 1,\n              \"customer-name\": $props.bootstrap.customer.name,\n              onFinished: $setup.load\n            }, null, 8 /* PROPS */, [\"customer-name\"]))\n          : (_openBlock(), _createBlock($setup[\"VisitTable\"], {\n              key: $setup.historyTab ? 'history' : 'today',\n              rows: $setup.rows ?? [],\n              periods: $setup.historyTab ? $setup.historyPeriods : $setup.todayPeriods,\n              period: $setup.period,\n              statuses: $setup.historyTab ? ['binnen', 'vertrokken'] : ['verwacht', 'binnen', 'vertrokken'],\n              title: $setup.historyTab ? $setup.historyTitle : $setup.todayTitle,\n              pending: $setup.pending,\n              error: $setup.error,\n              \"checkout-pending\": $setup.checkoutPending,\n              \"detail-query\": $setup.listQuery(),\n              onPeriod: $setup.setPeriod,\n              onCheckout: $setup.checkoutRow,\n              onRetry: $setup.load\n            }, _createSlots({ _: 2 /* DYNAMIC */ }, [\n              ($setup.historyTab && $setup.period === 'datum')\n                ? {\n                    name: \"filters\",\n                    fn: _withCtx(() => [\n                      _createVNode($setup[\"HistoryDatePicker\"], {\n                        \"model-value\": $setup.route.query.date ?? $setup.yesterday,\n                        max: $setup.yesterday,\n                        \"onUpdate:modelValue\": _cache[0] || (_cache[0] = date => $setup.navigate({ tab: 'geschiedenis', periode: 'datum', date }))\n                      }, null, 8 /* PROPS */, [\"model-value\", \"max\"])\n                    ]),\n                    key: \"0\"\n                  }\n                : undefined,\n              ($setup.historyTab && $setup.page)\n                ? {\n                    name: \"footer\",\n                    fn: _withCtx(() => [\n                      _createElementVNode(\"nav\", _hoisted_15, [\n                        _createElementVNode(\"span\", _hoisted_16, \"Pagina \" + _toDisplayString($setup.currentPage) + \" van \" + _toDisplayString($setup.pageCount), 1 /* TEXT */),\n                        _createElementVNode(\"span\", _hoisted_17, [\n                          _createElementVNode(\"button\", {\n                            type: \"button\",\n                            class: \"visits__page-step\",\n                            disabled: $setup.currentPage === 1,\n                            \"aria-label\": \"Vorige pagina\",\n                            onClick: _cache[1] || (_cache[1] = $event => ($setup.goToPage($setup.currentPage - 1)))\n                          }, \"Vorige\", 8 /* PROPS */, _hoisted_18),\n                          (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.pageNumbers, (number) => {\n                            return (_openBlock(), _createElementBlock(\"button\", {\n                              key: number,\n                              type: \"button\",\n                              class: _normalizeClass([\"visits__page-number\", { 'visits__page-number--current': number === $setup.currentPage }]),\n                              \"aria-current\": number === $setup.currentPage ? 'page' : undefined,\n                              onClick: $event => ($setup.goToPage(number))\n                            }, _toDisplayString(number), 11 /* TEXT, CLASS, PROPS */, _hoisted_19))\n                          }), 128 /* KEYED_FRAGMENT */)),\n                          _createElementVNode(\"button\", {\n                            type: \"button\",\n                            class: \"visits__page-step\",\n                            disabled: $setup.currentPage === $setup.pageCount,\n                            \"aria-label\": \"Volgende pagina\",\n                            onClick: _cache[2] || (_cache[2] = $event => ($setup.goToPage($setup.currentPage + 1)))\n                          }, \"Volgende\", 8 /* PROPS */, _hoisted_20)\n                        ])\n                      ])\n                    ]),\n                    key: \"1\"\n                  }\n                : undefined\n            ]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"rows\", \"periods\", \"period\", \"statuses\", \"title\", \"pending\", \"error\", \"checkout-pending\", \"detail-query\"]))\n      ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/BezoekenView.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/BezoekenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/BezoekenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/BezoekenView.vue\";script.__scopeId = \"data-v-8705088a\";export default script;","<script setup lang=\"ts\">\nimport { computed, onMounted, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"../../../../../js/admin-rpc\";\nimport type { AdminCompany, AdminEmployee } from \"../../../../../js/admin-repository\";\nimport { route } from \"../../lib/router\";\nimport { customerHref } from \"../../lib/customer\";\nimport { showToast } from \"../../lib/toast\";\nimport ConfirmDialog from \"../../components/ui/ConfirmDialog.vue\";\nimport PageHeader from \"../../components/ui/PageHeader.vue\";\nimport EmployeeDialog from \"../../components/customer/employees/EmployeeDialog.vue\";\nimport EmployeePhoto from \"../../components/customer/employees/EmployeePhoto.vue\";\nimport CompanyPanel from \"../../components/customer/companies/CompanyPanel.vue\";\nimport Skeleton from \"../../components/ui/Skeleton.vue\";\nimport ContextMenu from \"../../components/ui/ContextMenu.vue\";\nimport { opensRow, type ContextMenuItem } from \"../../lib/context-menu\";\nimport { useLoadingIndicator } from \"../../lib/loading\";\nimport { CHANNEL_LABELS, contactRows, formatPhone, type ContactSort, type ContactSortKey } from \"../../components/customer/employees/contact-rows.ts\";\n\nconst props = defineProps<{ bootstrap: AdminBootstrap }>();\nconst api = rpc(\"velkom:admin\");\nconst PAGE_SIZE = 25;\nconst employees = ref<AdminEmployee[]>([]);\nconst companies = ref<AdminCompany[]>([]);\nconst selectCompany = ref(false);\nconst companyFilter = ref(\"\");\nconst companyNames = computed(() => new Map(companies.value.map(company => [company.id, company.name])));\nconst loading = ref(true);\nconst loadingIndicator = useLoadingIndicator(() => loading.value);\nconst error = ref(false);\nconst query = ref(\"\");\nconst channel = ref(\"alle\");\nconst sort = ref<ContactSort>({ key: \"naam\", direction: \"asc\" });\nconst limit = ref(PAGE_SIZE);\nconst editing = ref<AdminEmployee | null>(null);\nconst dialogOpen = ref(false);\nconst archiving = ref<AdminEmployee | null>(null);\nconst archivePending = ref(false);\nconst archiveError = ref(false);\n\nconst CHANNEL_ICONS = {\n  phone: \"M4.5 3h3l1.5 4-2 1.3a9 9 0 0 0 4.7 4.7l1.3-2 4 1.5v3a1.5 1.5 0 0 1-1.6 1.5C8.8 16.6 3.4 11.2 3 4.6A1.5 1.5 0 0 1 4.5 3z\",\n  teams: \"M3 5h14v9H8l-4 3v-3H3z\",\n};\n// With one call channel (e.g. no Teams calling addon) the channel filter and column carry no information.\nconst multipleChannels = computed(() => props.bootstrap.channels.length > 1);\nconst columns = computed(() => ([\n  { key: \"naam\", label: \"Naam\" }, { key: \"afdeling\", label: \"Afdeling\" }, { key: \"telefoon\", label: \"Telefoon\" },\n  ...(multipleChannels.value ? [{ key: \"kanaal\", label: \"Kanaal\" }] : []), { key: \"status\", label: \"Status\" },\n] as Array<{ key: ContactSortKey; label: string }>));\n// Bumped per contact when its photo changes, so the row avatar reloads even though `hasPhoto` stays true.\nconst photoRevisions = ref<Record<number, number>>({});\nconst archivedTab = computed(() => route.value.query.status === \"gearchiveerd\");\nconst tabs = computed(() => [\n  { id: \"actief\", label: \"Actief\", query: {}, count: employees.value.filter(employee => !employee.archived).length, current: !archivedTab.value },\n  { id: \"gearchiveerd\", label: \"Gearchiveerd\", query: { status: \"gearchiveerd\" }, count: employees.value.filter(employee => employee.archived).length, current: archivedTab.value },\n]);\nconst tabTotal = computed(() => tabs.value[archivedTab.value ? 1 : 0].count);\nconst filtered = computed(() => contactRows(employees.value.filter(employee => !selectCompany.value || !companyFilter.value || String(employee.company ?? \"none\") === companyFilter.value), { archived: archivedTab.value, query: query.value, channel: channel.value, sort: sort.value }));\nconst shown = computed(() => filtered.value.slice(0, limit.value));\nconst title = computed(() => {\n  if (loadingIndicator.holding)\n    return \"Contactpersonen laden...\";\n  if (error.value)\n    return \"Contactpersonen niet beschikbaar\";\n  return filtered.value.length === tabTotal.value ? `${tabTotal.value} ${tabTotal.value === 1 ? \"contactpersoon\" : \"contactpersonen\"}` : `${filtered.value.length} gevonden`;\n});\n\nwatch([archivedTab, query, channel, companyFilter, sort], () => { limit.value = PAGE_SIZE; });\n\nfunction sortBy(key: ContactSortKey): void {\n  sort.value = { key, direction: sort.value.key === key && sort.value.direction === \"asc\" ? \"desc\" : \"asc\" };\n}\n\nfunction ariaSort(key: ContactSortKey): \"ascending\" | \"descending\" | \"none\" {\n  return sort.value.key !== key ? \"none\" : sort.value.direction === \"asc\" ? \"ascending\" : \"descending\";\n}\n\nasync function load(): Promise<void> {\n  loading.value = true;\n  error.value = false;\n  try {\n    const [contacts, settings] = await Promise.all([api.employees(), api.settings()]);\n    const companyRows = settings.reception.selectCompany ? await api.companies() : [];\n    employees.value = contacts;\n    companies.value = companyRows;\n    selectCompany.value = settings.reception.selectCompany;\n  } catch {\n    employees.value = [];\n    error.value = true;\n  } finally {\n    loading.value = false;\n  }\n}\n\nfunction companyUpdated(company: AdminCompany): void {\n  companies.value = [...companies.value.filter(row => row.id !== company.id), company];\n}\n\nconst menu = ref<InstanceType<typeof ContextMenu> | null>(null);\n\nfunction openRow(event: Event, contact: AdminEmployee): void {\n  if (contact.archived || !opensRow(event))\n    return;\n  event.preventDefault();\n  edit(contact);\n}\n\nfunction rowActions(contact: AdminEmployee): ContextMenuItem[] {\n  if (contact.archived)\n    return [];\n  return [\n    { label: \"Bewerken\", action: () => edit(contact) },\n    { label: \"Archiveren\", destructive: true, action: () => confirmArchive(contact) },\n  ];\n}\n\nfunction edit(employee: AdminEmployee | null): void {\n  editing.value = employee;\n  dialogOpen.value = true;\n}\n\nfunction saved(employee: AdminEmployee, result: { photoChanged: boolean; photoFailed: boolean }): void {\n  const added = !employees.value.some(row => row.id === employee.id);\n  employees.value = [...employees.value.filter(row => row.id !== employee.id), employee];\n  if (result.photoChanged)\n    photoRevisions.value = { ...photoRevisions.value, [employee.id]: (photoRevisions.value[employee.id] ?? 0) + 1 };\n  dialogOpen.value = false;\n  if (result.photoFailed)\n    showToast(`${added ? \"Contactpersoon toegevoegd\" : \"Contactpersoon opgeslagen\"}, maar de foto is niet opgeslagen. Probeer het opnieuw via Bewerken.`, { tone: \"error\" });\n  else\n    showToast(added ? \"Contactpersoon toegevoegd\" : \"Contactpersoon opgeslagen\");\n}\n\n/** Opens on top of the edit dialog, so cancelling returns to it. */\nfunction confirmArchive(employee: AdminEmployee): void {\n  archiving.value = employee;\n  archiveError.value = false;\n}\n\nasync function archive(): Promise<void> {\n  if (archivePending.value || !archiving.value)\n    return;\n  const id = archiving.value.id;\n  archivePending.value = true;\n  archiveError.value = false;\n  try {\n    await api.archiveEmployee({ id });\n    employees.value = employees.value.map(employee => employee.id === id ? { ...employee, archived: true } : employee);\n    archiving.value = null;\n    dialogOpen.value = false;\n    showToast(\"Contactpersoon gearchiveerd\");\n  } catch {\n    archiveError.value = true;\n  } finally {\n    archivePending.value = false;\n  }\n}\nonMounted(() => { void load(); });\n</script>\n\n<template>\n  <div class=\"contacts\" data-testid=\"customer-employees\">\n    <PageHeader title=\"Contactpersonen\" :context=\"bootstrap.customer.name\" description=\"Wie bezoekers ontvangt en hoe die bereikbaar is.\">\n      <template #actions>\n        <button type=\"button\" class=\"vk-button vk-button--primary vk-button--compact\" :disabled=\"loading || error\" @click=\"edit(null)\">Contactpersoon toevoegen</button>\n      </template>\n    </PageHeader>\n    <CompanyPanel v-if=\"selectCompany && !loading && !error\" :companies=\"companies\" :contacts=\"employees\" @updated=\"companyUpdated\" />\n    <nav class=\"contacts__tabs\" aria-label=\"Contactpersonen filteren op status\">\n      <a v-for=\"tab in tabs\" :key=\"tab.id\" class=\"contacts__tab\" :class=\"{ 'contacts__tab--current': tab.current }\" :href=\"customerHref('contactpersonen', { query: tab.query })\"\n         :aria-current=\"tab.current ? 'page' : undefined\">\n        <span class=\"contacts__tab-label\" :data-label=\"tab.label\">{{ tab.label }}</span><span v-if=\"!loading && !error\" class=\"contacts__tab-count\">{{ tab.count }}</span>\n      </a>\n    </nav>\n    <div class=\"contacts__filters\" role=\"search\">\n      <label class=\"contacts__field contacts__field--search\">\n        Zoeken\n        <span class=\"contacts__search\">\n          <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" aria-hidden=\"true\"><path d=\"M9 3.5a5.5 5.5 0 1 1 0 11a5.5 5.5 0 1 1 0-11zM13.2 13.2L17 17\" /></svg>\n          <input v-model=\"query\" class=\"contacts__control contacts__control--search\" type=\"search\" spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"off\" placeholder=\"Zoek op naam of afdeling\">\n        </span>\n      </label>\n      <label v-if=\"multipleChannels\" class=\"contacts__field\">\n        Kanaal\n        <select v-model=\"channel\" class=\"contacts__control\">\n          <option value=\"alle\">Alle kanalen</option>\n          <option value=\"phone\">Telefoon</option>\n          <option value=\"teams\">Teams</option>\n        </select>\n      </label>\n      <label v-if=\"selectCompany\" class=\"contacts__field\">\n        Bedrijf\n        <select v-model=\"companyFilter\" class=\"contacts__control\">\n          <option value=\"\">Alle bedrijven</option>\n          <option value=\"none\">Geen bedrijf</option>\n          <option v-for=\"company in companies\" :key=\"company.id\" :value=\"String(company.id)\">{{ company.name }}{{ company.archived ? \" (gearchiveerd)\" : \"\" }}</option>\n        </select>\n      </label>\n    </div>\n    <section class=\"contacts__list\" aria-labelledby=\"contacts-list-title\" :aria-busy=\"loading\">\n      <h2 id=\"contacts-list-title\" class=\"contacts__list-title\">{{ title }}</h2>\n      <div v-if=\"error\" class=\"contacts__message\" role=\"alert\">\n        <p>Controleer je verbinding en toegang en probeer het opnieuw.</p>\n        <button type=\"button\" class=\"contacts__action\" @click=\"load\">Opnieuw proberen</button>\n      </div>\n      <Skeleton v-else-if=\"loadingIndicator.holding\" label=\"Contactpersonen laden\" :visible=\"loadingIndicator.visible\" :count=\"5\" :height=\"60\" />\n      <template v-else>\n        <div class=\"contacts__scroll\">\n          <table>\n            <thead>\n              <tr>\n                <th v-for=\"column in columns\" :key=\"column.key\" scope=\"col\" :aria-sort=\"ariaSort(column.key)\">\n                  <button type=\"button\" class=\"contacts__sort\" :class=\"{ 'contacts__sort--active': sort.key === column.key }\" @click=\"sortBy(column.key)\">\n                    {{ column.label }}\n                    <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"\n                         :class=\"{ 'contacts__caret--desc': sort.key === column.key && sort.direction === 'desc' }\"><path d=\"M3 7.5l3-3 3 3\" /></svg>\n                  </button>\n                </th>\n                <th v-if=\"selectCompany\" scope=\"col\">Bedrijf</th>\n                <th scope=\"col\" class=\"touch-only\">Acties</th>\n              </tr>\n            </thead>\n            <tbody>\n              <tr v-for=\"contact in shown\" :key=\"contact.id\" :class=\"{ 'contacts__row--open': !contact.archived }\" :tabindex=\"contact.archived ? undefined : 0\"\n                  @contextmenu=\"menu?.show($event, rowActions(contact), `Acties voor ${contact.firstname} ${contact.lastname}`)\"\n                  @dblclick=\"openRow($event, contact)\" @keydown=\"openRow($event, contact)\" @mousedown=\"!contact.archived && $event.detail > 1 && $event.preventDefault()\">\n                <td>\n                  <span class=\"contacts__person\">\n                    <EmployeePhoto :key=\"`${contact.id}:${photoRevisions[contact.id] ?? 0}`\" :id=\"contact.id\" :has-photo=\"contact.hasPhoto\" :name=\"`${contact.firstname} ${contact.lastname}`\" />\n                    <span class=\"contacts__name\">\n                      <span class=\"contacts__strong\">{{ contact.firstname }} {{ contact.lastname }}</span>\n                      <span class=\"contacts__muted\">{{ contact.email || \"Geen e-mailadres\" }}</span>\n                    </span>\n                  </span>\n                </td>\n                <td :class=\"{ contacts__muted: !contact.department }\">{{ contact.department || \"Niet ingesteld\" }}</td>\n                <td class=\"contacts__nowrap\">{{ formatPhone(contact.phone) }}</td>\n                <td v-if=\"multipleChannels\">\n                  <span class=\"contacts__channel\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path :d=\"CHANNEL_ICONS[contact.channel]\" /></svg>\n                    {{ CHANNEL_LABELS[contact.channel] }}\n                  </span>\n                </td>\n                <td>\n                  <span v-if=\"contact.archived\" class=\"contacts__status contacts__status--archived\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 4h14v4H3zM4.5 8v8h11V8M8 11.5h4\" /></svg>\n                    Gearchiveerd\n                  </span>\n                  <span v-else class=\"contacts__status\">\n                    <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M5 10.5l3.2 3.2L15 7\" /></svg>\n                    Actief\n                  </span>\n                </td>\n                <td v-if=\"selectCompany\">{{ contact.company ? companyNames.get(contact.company) ?? \"Bedrijf niet beschikbaar\" : \"Niet ingesteld\" }}</td>\n                <td class=\"contacts__actions touch-only\">\n                  <button v-if=\"!contact.archived\" type=\"button\" class=\"contacts__action\" :aria-label=\"`Bewerk ${contact.firstname} ${contact.lastname}`\" @click=\"edit(contact)\">Bewerken</button>\n                  <span v-else class=\"contacts__muted\">Geen acties</span>\n                </td>\n              </tr>\n            </tbody>\n          </table>\n        </div>\n        <p v-if=\"!shown.length\" class=\"contacts__empty\">{{ tabTotal ? \"Geen contactpersonen die hierbij passen.\" : archivedTab ? \"Er zijn geen gearchiveerde contactpersonen.\" : \"Nog geen contactpersonen.\" }}</p>\n        <div class=\"contacts__footer\">\n          <span class=\"contacts__muted\">{{ shown.length }} van {{ filtered.length }} getoond</span>\n          <button v-if=\"shown.length < filtered.length\" type=\"button\" class=\"contacts__more\" @click=\"limit += PAGE_SIZE\">Meer laden</button>\n        </div>\n      </template>\n      <ContextMenu ref=\"menu\" />\n    </section>\n    <EmployeeDialog :open=\"dialogOpen\" :employee=\"editing\" :contacts=\"employees\" :channels=\"bootstrap.channels\" :select-company=\"selectCompany\" :companies=\"companies\" @close=\"dialogOpen = false\" @saved=\"saved\" @archive=\"confirmArchive\" />\n    <ConfirmDialog :open=\"Boolean(archiving)\" title=\"Contactpersoon archiveren\"\n                   :item-name=\"archiving ? `${archiving.firstname} ${archiving.lastname}` : ''\"\n                   message=\"Wil je deze contactpersoon archiveren?\"\n                   consequence=\"De contactpersoon verdwijnt van het ontvangstscherm. Bezoek- en oproephistorie blijven behouden.\"\n                   confirm-label=\"Archiveren\" pending-label=\"Archiveren...\" :pending=\"archivePending\" @cancel=\"archiving = null\" @confirm=\"archive\">\n      <p v-if=\"archiveError\" class=\"contacts__error\" role=\"alert\">Archiveren is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.</p>\n      <span v-else>Wil je deze contactpersoon archiveren?</span>\n    </ConfirmDialog>\n  </div>\n</template>\n\n<style scoped>\n/* Geometry, colors and type follow the supplied Contactpersonen.html export. */\n.contacts { display: flex; flex-direction: column; gap: 28px; min-width: 0; }\n.contacts__tabs { display: flex; flex-wrap: wrap; gap: 4px; border-bottom: 1px solid var(--border); }\n/* 50px border-box equals the export's 48px content-box plus its 2px border. */\n.contacts__tab { display: flex; align-items: center; gap: 8px; min-height: 50px; padding: 0 16px; margin-bottom: -1px; border-bottom: 2px solid transparent; color: var(--foreground); text-decoration: none; font-size: 15px; font-weight: 600; cursor: pointer; }\n.contacts__tab--current { border-bottom-color: var(--foreground); font-weight: 700; }\n/* Reserve the bold label's width so the current tab keeps its neighbors in place. */\n.contacts__tab-label { display: inline-block; }\n.contacts__tab-label::after { display: block; height: 0; overflow: hidden; content: attr(data-label); font-weight: 700; visibility: hidden; }\n.contacts__tab-count { padding: 1px 8px; border-radius: 999px; background: var(--selected); font-size: 12px; font-weight: 700; }\n.contacts__filters { display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; }\n.contacts__field { flex: 0 1 200px; display: flex; flex-direction: column; gap: 6px; font-size: 13px; font-weight: 700; }\n.contacts__field--search { flex: 1 1 300px; }\n.contacts__search { position: relative; display: block; }\n.contacts__search svg { position: absolute; left: 16px; top: 15px; color: var(--muted-foreground); }\n.contacts__control { height: 48px; padding: 0 16px; border-radius: 999px; border: 1.5px solid var(--border-strong); background: var(--field); color: var(--foreground); font-family: inherit; font-size: 15px; font-weight: 400; cursor: pointer; }\n.contacts__control--search { width: 100%; box-sizing: border-box; padding: 0 18px 0 44px; cursor: text; }\n.contacts__control::placeholder { color: var(--muted-foreground); }\n.contacts__list { background: var(--paper); border: 1px solid var(--border); }\n.contacts__list-title { margin: 0; padding: 20px 24px 12px; font-family: var(--font-display); font-size: 22px; font-weight: 600; letter-spacing: -0.04em; }\n.contacts__scroll { overflow-x: auto; }\ntable { width: 100%; min-width: 900px; border-collapse: collapse; font-size: 14px; }\nth { text-align: left; padding: 10px 12px; font-size: 13px; font-weight: 700; color: var(--muted-foreground); border-bottom: 1px solid var(--border); }\nth:first-child { padding-left: 24px; }\nth:last-child { text-align: right; padding-right: 24px; }\n.contacts__sort { display: inline-flex; align-items: center; gap: 6px; padding: 0; border: 0; background: transparent; color: inherit; font: inherit; cursor: pointer; }\n.contacts__sort:hover, .contacts__sort--active { color: var(--foreground); }\n.contacts__sort svg { opacity: 0; transition: transform 0.15s var(--ease); }\n.contacts__sort:hover svg, .contacts__sort:focus-visible svg, .contacts__sort--active svg { opacity: 1; }\n.contacts__caret--desc { transform: rotate(180deg); }\ntd { padding: 10px 12px; border-bottom: 1px solid var(--border); }\ntd:first-child { padding-left: 24px; }\ntd:last-child { padding-right: 24px; text-align: right; }\ntbody tr:hover { background: var(--hover); }\ntbody tr:focus-visible { outline: 2px solid var(--ring); outline-offset: -2px; }\n.contacts__row--open { cursor: pointer; }\n.contacts__person { display: flex; align-items: center; gap: 12px; }\n.contacts__name { display: flex; flex-direction: column; line-height: 1.3; }\n.contacts__strong { font-weight: 700; }\n.contacts__muted { font-size: 13px; color: var(--muted-foreground); }\ntd.contacts__muted { font-size: 14px; }\n.contacts__nowrap { white-space: nowrap; }\n.contacts__channel { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }\n.contacts__status { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 12px 0 9px; border-radius: 999px; background: var(--lime); font-size: 13px; font-weight: 700; box-sizing: border-box; }\n.contacts__status--archived { background: var(--selected); }\n.contacts__action { min-height: 36px; padding: 0 14px; border-radius: 999px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.contacts__empty { margin: 0; padding: 20px 24px; color: var(--muted-foreground); }\n.contacts__footer { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: space-between; padding: 16px 24px; border-top: 1px solid var(--border); }\n.contacts__footer .contacts__muted { font-size: 14px; }\n.contacts__more { min-height: 40px; padding: 0 16px; border-radius: 999px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.contacts__message { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 0 24px 20px; }\n.contacts__message p, .contacts__error { margin: 0; color: var(--danger); }\n</style>\n","<template>\n  <Dialog :open=\"open\" :title=\"title\" :width=\"460\" form :submit-label=\"confirmLabel\" :pending-label=\"pendingLabel\"\n          :pending=\"pending\" :destructive=\"destructive\" @close=\"emit('cancel')\" @submit=\"emit('confirm')\">\n    <p class=\"confirm__message\">\n      <slot>{{ message }}</slot>\n    </p>\n    <p v-if=\"itemName\" class=\"confirm__item\" data-testid=\"confirm-item\">{{ itemName }}</p>\n    <p v-if=\"consequence\" class=\"confirm__consequence\">{{ consequence }}</p>\n  </Dialog>\n</template>\n\n<script setup lang=\"ts\">\nimport Dialog from \"./Dialog.vue\";\n\n/**\n * Confirmation for destructive or irreversible actions. Always name the concrete item (PRD 12.1):\n *   <ConfirmDialog :open title=\"Contactpersoon verwijderen\" item-name=\"Sanne de Vries\"\n *     message=\"Weet je zeker dat je deze contactpersoon wilt verwijderen?\" confirm-label=\"Verwijderen\"\n *     pending-label=\"Verwijderen...\" @confirm=\"remove\" @cancel=\"open = false\" />\n */\nwithDefaults(defineProps<{\n  open: boolean;\n  title: string;\n  itemName?: string;\n  message?: string;\n  consequence?: string;\n  confirmLabel: string;\n  pendingLabel?: string;\n  pending?: boolean;\n  destructive?: boolean;\n}>(), { itemName: \"\", message: \"\", consequence: \"\", pendingLabel: undefined, pending: false, destructive: true });\n\nconst emit = defineEmits<{ confirm: []; cancel: [] }>();\n</script>\n\n<style scoped>\n.confirm__message,\n.confirm__consequence {\n  margin: 0;\n}\n\n.confirm__item {\n  margin: 12px 0;\n  padding: 10px 12px;\n  border-radius: var(--radius-control);\n  background: var(--selected);\n  font-weight: 500;\n}\n\n.confirm__consequence {\n  color: var(--muted-foreground);\n}\n</style>\n","import { renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, 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: \"confirm__message\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"confirm__item\",\n  \"data-testid\": \"confirm-item\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"confirm__consequence\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: $props.title,\n    width: 460,\n    form: \"\",\n    \"submit-label\": $props.confirmLabel,\n    \"pending-label\": $props.pendingLabel,\n    pending: $props.pending,\n    destructive: $props.destructive,\n    onClose: _cache[0] || (_cache[0] = $event => ($setup.emit('cancel'))),\n    onSubmit: _cache[1] || (_cache[1] = $event => ($setup.emit('confirm')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"p\", _hoisted_1, [\n        _renderSlot(_ctx.$slots, \"default\", {}, () => [\n          _createTextVNode(_toDisplayString($props.message), 1 /* TEXT */)\n        ], true)\n      ]),\n      ($props.itemName)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString($props.itemName), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      ($props.consequence)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString($props.consequence), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _: 3 /* FORWARDED */\n  }, 8 /* PROPS */, [\"open\", \"title\", \"submit-label\", \"pending-label\", \"pending\", \"destructive\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/ConfirmDialog.vue\";script.__scopeId = \"data-v-7be72c57\";export default script;","<script setup lang=\"ts\">\nimport { computed, nextTick, reactive, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminCompany, AdminEmployee } from \"../../../../../../js/admin-repository\";\nimport Dialog from \"../../ui/Dialog.vue\";\nimport { avatar } from \"../../../lib/avatar\";\nimport { useGuardedForm } from \"../../../composables/useFormGuard\";\nimport { rules, useFormValidation } from \"../../../composables/useFormValidation\";\n\nconst props = defineProps<{ open: boolean; employee: AdminEmployee | null; contacts: AdminEmployee[]; channels: Array<\"phone\" | \"teams\">; selectCompany?: boolean; companies?: AdminCompany[] }>();\nconst emit = defineEmits<{ close: []; saved: [employee: AdminEmployee, result: { photoChanged: boolean; photoFailed: boolean }]; archive: [employee: AdminEmployee] }>();\nconst api = rpc(\"velkom:admin\");\n// `photo`: \"\" keeps the stored photo, \"remove\" deletes it, a data URL replaces it. It lives in the model so the unsaved-changes guard sees it.\nconst model = reactive({ firstname: \"\", lastname: \"\", phone: \"\", email: \"\", department: \"\", company: \"\", channel: \"phone\", teamsTenantId: \"\", teamsUserId: \"\", fallback: \"\", showPhoto: true, photo: \"\" });\nconst PHOTO_TYPES = [\"image/jpeg\", \"image/png\", \"image/webp\"];\nconst currentPhoto = ref<string | null>(null);\nconst photoError = ref(\"\");\nconst photoPreview = computed(() => model.photo === \"remove\" ? null : model.photo || currentPhoto.value);\nconst initials = computed(() => avatar(`${model.firstname} ${model.lastname}`.trim() || \"?\"));\nconst pending = ref(false);\nconst error = ref(\"\");\nconst form = useFormValidation(model, {\n  firstname: [rules.required(\"Vul een voornaam in.\"), rules.maxLength(200)],\n  lastname: [rules.required(\"Vul een achternaam in.\"), rules.maxLength(200)],\n  phone: [(value) => model.channel === \"teams\" ? null : rules.required(\"Vul een telefoonnummer in.\")(value), rules.phone()],\n  teamsTenantId: [(value) => model.channel === \"teams\" ? rules.required(\"Vul de Microsoft-tenant-ID in.\")(value) : null],\n  teamsUserId: [(value) => model.channel === \"teams\" ? rules.required(\"Vul de Microsoft-gebruikers-ID in.\")(value) : null],\n  email: [rules.email(), rules.maxLength(254)],\n  department: [rules.maxLength(200)],\n  company: [],\n  channel: [],\n  fallback: [],\n});\nconst guard = useGuardedForm(\"Contactpersoon\", model, { active: () => props.open });\nconst channels = computed(() => [{ value: \"phone\", label: \"Telefoon\" }, { value: \"teams\", label: \"Teams\" }].filter(option => props.channels.includes(option.value as \"phone\" | \"teams\")));\nconst companyOptions = computed(() => (props.companies ?? []).filter(company => !company.archived || company.id === props.employee?.company));\n// An archived fallback stays selectable for this contact only, so an unrelated edit does not drop it.\nconst fallbackOptions = computed(() => props.contacts.filter(contact => contact.id !== props.employee?.id && (!contact.archived || contact.id === props.employee?.fallback)\n  && (contact.company ?? null) === (model.company ? Number(model.company) : null))\n  .toSorted((a, b) => `${a.firstname} ${a.lastname}`.localeCompare(`${b.firstname} ${b.lastname}`, \"nl\")));\n\nfunction changeCompany(): void {\n  if (!fallbackOptions.value.some(contact => String(contact.id) === model.fallback))\n    model.fallback = \"\";\n}\n\nwatch(() => props.open, open => {\n  if (!open)\n    return;\n  const employee = props.employee;\n  guard.load({\n    firstname: employee?.firstname ?? \"\", lastname: employee?.lastname ?? \"\", phone: employee?.phone ?? \"\", email: employee?.email ?? \"\",\n    teamsTenantId: employee?.teamsTenantId ?? \"\", teamsUserId: employee?.teamsUserId ?? \"\",\n    department: employee?.department ?? \"\", company: employee?.company ? String(employee.company) : \"\", channel: employee?.channel ?? \"phone\", fallback: employee?.fallback ? String(employee.fallback) : \"\", showPhoto: !employee?.hidePhoto, photo: \"\",\n  });\n  form.reset();\n  error.value = \"\";\n  photoError.value = \"\";\n  currentPhoto.value = null;\n  if (employee?.hasPhoto)\n    void api.employeePhoto({ id: employee.id }).then(photo => {\n      // A late response must not show the photo of a contact opened afterwards.\n      if (props.open && props.employee?.id === employee.id)\n        currentPhoto.value = photo;\n    }).catch(() => {});\n}, { immediate: true });\n\nfunction pickPhoto(event: Event): void {\n  const input = event.target as HTMLInputElement;\n  const file = input.files?.[0];\n  input.value = \"\";\n  photoError.value = \"\";\n  if (!file)\n    return;\n  if (!PHOTO_TYPES.includes(file.type) || file.size > 5 * 1024 * 1024) {\n    photoError.value = \"Kies een JPG-, PNG- of WebP-foto van maximaal 5 MB.\";\n    return;\n  }\n  const reader = new FileReader();\n  reader.onload = () => { model.photo = String(reader.result); };\n  reader.onerror = () => { photoError.value = \"De foto kon niet worden gelezen. Kies een ander bestand.\"; };\n  reader.readAsDataURL(file);\n}\n\nfunction removePhoto(): void {\n  model.photo = currentPhoto.value ? \"remove\" : \"\";\n}\n\nasync function onSubmit(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    // Send editable fields only; the server preserves the photo, ordering and history.\n    const input = {\n      teamsTenantId: model.teamsTenantId.trim(), teamsUserId: model.teamsUserId.trim(),\n      firstname: model.firstname.trim(), lastname: model.lastname.trim(), phone: model.phone.trim(), email: model.email.trim(), department: model.department.trim(),\n      ...(props.selectCompany ? { company: model.company ? Number(model.company) : null } : {}),\n      // With one channel the choice is hidden; a contact that still has an unavailable channel moves to the available one.\n      channel: props.channels.includes(model.channel as \"phone\" | \"teams\") ? model.channel as \"phone\" | \"teams\" : props.channels[0], fallback: model.fallback ? Number(model.fallback) : null, hidePhoto: !model.showPhoto,\n    };\n    let stored = props.employee ? await api.updateEmployee({ id: props.employee.id, ...input }) : await api.createEmployee(input);\n    // The contact is saved at this point; a failed photo must not make a retry create a duplicate.\n    let photoFailed = false;\n    if (model.photo) {\n      try {\n        stored = await api.setEmployeePhoto({ id: stored.id, photo: model.photo === \"remove\" ? null : model.photo });\n      } catch {\n        photoFailed = true;\n      }\n    }\n    guard.commit();\n    emit(\"saved\", stored, { photoChanged: Boolean(model.photo) && !photoFailed, photoFailed });\n  } catch (cause) {\n    const message = cause instanceof Error ? cause.message.replace(/^RPC Error: /, \"\") : \"\";\n    const field = /voornaam/i.test(message) ? \"firstname\" : /achternaam/i.test(message) ? \"lastname\"\n      : /tenant-ID/i.test(message) ? \"teamsTenantId\" : /gebruikers-ID/i.test(message) ? \"teamsUserId\" : /telefoonnummer/i.test(message) ? \"phone\" : /e-mail/i.test(message) ? \"email\" : /afdeling/i.test(message) ? \"department\"\n        : /kanaal/i.test(message) ? \"channel\" : /terugvalcontact/i.test(message) ? \"fallback\" : /bedrijf/i.test(message) ? \"company\" : null;\n    if (field) {\n      form.setError(field, message);\n      void nextTick(() => document.getElementById(form.fieldId(field))?.focus());\n    } else {\n      error.value = \"Opslaan is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\";\n    }\n  } finally {\n    pending.value = false;\n  }\n}\n\nasync function cancel(): Promise<void> {\n  if (await guard.confirmClose())\n    emit(\"close\");\n}\n\nfunction describedBy(field: string, hint?: string): string | undefined {\n  return [hint, form.errors[field as keyof typeof form.errors] ? `${form.fieldId(field)}-error` : \"\"].filter(Boolean).join(\" \") || undefined;\n}\n</script>\n\n<template>\n  <!-- Supplied ContactpersoonToevoegen.html: 640px panel 72px from the top; the shared Dialog owns focus and the unsaved-changes guard. -->\n  <Dialog :open=\"open\" :title=\"employee ? 'Contactpersoon bewerken' : 'Contactpersoon toevoegen'\" :width=\"640\" style=\"--dialog-top: 72px\"\n          description=\"Een contactpersoon ontvangt bezoekers. Er wordt geen Velkom-login voor aangemaakt.\" form :guard=\"guard\"\n          :pending=\"pending\" data-testid=\"employee-dialog\" @close=\"emit('close')\" @submit=\"onSubmit\">\n    <div class=\"contact-form\" :aria-busy=\"pending || undefined\">\n      <p v-if=\"error\" class=\"contact-form__error\" role=\"alert\">{{ error }}</p>\n      <div class=\"contact-form__pair\">\n        <label class=\"contact-form__field\">\n          <span>Voornaam <span class=\"contact-form__required\" aria-hidden=\"true\">*</span></span>\n          <input :id=\"form.fieldId('firstname')\" v-model=\"model.firstname\" class=\"v-control\" type=\"text\" autocomplete=\"given-name\" :disabled=\"pending\"\n                 aria-required=\"true\" :aria-invalid=\"Boolean(form.errors.firstname) || undefined\" :aria-describedby=\"describedBy('firstname')\">\n          <span v-if=\"form.errors.firstname\" :id=\"`${form.fieldId('firstname')}-error`\" class=\"contact-form__invalid\">{{ form.errors.firstname }}</span>\n        </label>\n        <label class=\"contact-form__field\">\n          <span>Achternaam <span class=\"contact-form__required\" aria-hidden=\"true\">*</span></span>\n          <input :id=\"form.fieldId('lastname')\" v-model=\"model.lastname\" class=\"v-control\" type=\"text\" autocomplete=\"family-name\" :disabled=\"pending\"\n                 aria-required=\"true\" :aria-invalid=\"Boolean(form.errors.lastname) || undefined\" :aria-describedby=\"describedBy('lastname')\">\n          <span v-if=\"form.errors.lastname\" :id=\"`${form.fieldId('lastname')}-error`\" class=\"contact-form__invalid\">{{ form.errors.lastname }}</span>\n        </label>\n      </div>\n      <fieldset v-if=\"channels.length > 1\" class=\"contact-form__channels\" :aria-describedby=\"describedBy('channel')\">\n        <legend class=\"contact-form__legend\">Ontvangstkanaal</legend>\n        <label v-for=\"(option, index) in channels\" :key=\"option.value\" class=\"contact-form__channel\"\n               :class=\"{ 'contact-form__channel--checked': model.channel === option.value }\">\n          <input :id=\"index === 0 ? form.fieldId('channel') : undefined\" v-model=\"model.channel\" type=\"radio\" name=\"contact-channel\" :value=\"option.value\"\n                 :disabled=\"pending\">\n          {{ option.label }}\n        </label>\n        <span v-if=\"form.errors.channel\" :id=\"`${form.fieldId('channel')}-error`\" class=\"contact-form__invalid\">{{ form.errors.channel }}</span>\n      </fieldset>\n      <template v-if=\"model.channel === 'teams'\">\n        <label class=\"contact-form__field\">\n          Microsoft-tenant-ID\n          <input :id=\"form.fieldId('teamsTenantId')\" v-model=\"model.teamsTenantId\" class=\"v-control\" :disabled=\"pending\" aria-required=\"true\"\n                 :aria-invalid=\"Boolean(form.errors.teamsTenantId) || undefined\" :aria-describedby=\"describedBy('teamsTenantId')\">\n          <span v-if=\"form.errors.teamsTenantId\" :id=\"`${form.fieldId('teamsTenantId')}-error`\" class=\"contact-form__invalid\">{{ form.errors.teamsTenantId }}</span>\n        </label>\n        <label class=\"contact-form__field\">\n          Microsoft-gebruikers-ID\n          <input :id=\"form.fieldId('teamsUserId')\" v-model=\"model.teamsUserId\" class=\"v-control\" :disabled=\"pending\" aria-required=\"true\"\n                 :aria-invalid=\"Boolean(form.errors.teamsUserId) || undefined\" :aria-describedby=\"describedBy('teamsUserId', 'contact-teams-hint')\">\n          <span id=\"contact-teams-hint\" class=\"contact-form__hint\">Vraag deze twee ID's aan uw Microsoft-beheerder. Bij opnemen hoort de medewerker een vaste balieboodschap.</span>\n          <span v-if=\"form.errors.teamsUserId\" :id=\"`${form.fieldId('teamsUserId')}-error`\" class=\"contact-form__invalid\">{{ form.errors.teamsUserId }}</span>\n        </label>\n      </template>\n      <label v-if=\"model.channel !== 'teams'\" class=\"contact-form__field\">\n        <span>Telefoonnummer <span class=\"contact-form__required\" aria-hidden=\"true\">*</span></span>\n        <input :id=\"form.fieldId('phone')\" v-model=\"model.phone\" class=\"v-control\" type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\" :disabled=\"pending\"\n               aria-required=\"true\" :aria-invalid=\"Boolean(form.errors.phone) || undefined\" :aria-describedby=\"describedBy('phone', 'contact-phone-hint')\">\n        <span id=\"contact-phone-hint\" class=\"contact-form__hint\">Wordt gebeld als een bezoeker zich meldt.</span>\n        <span v-if=\"form.errors.phone\" :id=\"`${form.fieldId('phone')}-error`\" class=\"contact-form__invalid\">{{ form.errors.phone }}</span>\n      </label>\n      <label class=\"contact-form__field\">\n        E-mailadres\n        <input :id=\"form.fieldId('email')\" v-model=\"model.email\" class=\"v-control\" type=\"email\" inputmode=\"email\" autocomplete=\"email\" :disabled=\"pending\"\n               :aria-invalid=\"Boolean(form.errors.email) || undefined\" :aria-describedby=\"describedBy('email')\">\n        <span v-if=\"form.errors.email\" :id=\"`${form.fieldId('email')}-error`\" class=\"contact-form__invalid\">{{ form.errors.email }}</span>\n      </label>\n      <label v-if=\"selectCompany\" class=\"contact-form__field\">\n        Bedrijf\n        <select :id=\"form.fieldId('company')\" v-model=\"model.company\" class=\"v-control contact-form__select\" :disabled=\"pending\"\n                :aria-invalid=\"Boolean(form.errors.company) || undefined\" :aria-describedby=\"describedBy('company', 'contact-company-hint')\" @change=\"changeCompany\">\n          <option value=\"\">Geen bedrijf</option>\n          <option v-for=\"company in companyOptions\" :key=\"company.id\" :value=\"String(company.id)\">{{ company.name }}{{ company.archived ? \" (gearchiveerd)\" : \"\" }}</option>\n        </select>\n        <span id=\"contact-company-hint\" class=\"contact-form__hint\">Alleen contactpersonen van een actief bedrijf zijn na de bedrijfskeuze zichtbaar.</span>\n        <span v-if=\"form.errors.company\" :id=\"`${form.fieldId('company')}-error`\" class=\"contact-form__invalid\">{{ form.errors.company }}</span>\n      </label>\n      <label class=\"contact-form__field\">\n        Afdeling\n        <input :id=\"form.fieldId('department')\" v-model=\"model.department\" class=\"v-control\" type=\"text\" :disabled=\"pending\"\n               :aria-invalid=\"Boolean(form.errors.department) || undefined\" :aria-describedby=\"describedBy('department')\">\n        <span v-if=\"form.errors.department\" :id=\"`${form.fieldId('department')}-error`\" class=\"contact-form__invalid\">{{ form.errors.department }}</span>\n      </label>\n      <label class=\"contact-form__field\">\n        Terugvalcontact\n        <select :id=\"form.fieldId('fallback')\" v-model=\"model.fallback\" class=\"v-control contact-form__select\" :disabled=\"pending\"\n                :aria-invalid=\"Boolean(form.errors.fallback) || undefined\" :aria-describedby=\"describedBy('fallback')\">\n          <option value=\"\">{{ selectCompany ? \"Receptie van het bedrijf gebruiken\" : \"Algemene terugvalroute gebruiken\" }}</option>\n          <option v-for=\"contact in fallbackOptions\" :key=\"contact.id\" :value=\"String(contact.id)\">{{ contact.firstname }} {{ contact.lastname }}</option>\n        </select>\n        <span v-if=\"form.errors.fallback\" :id=\"`${form.fieldId('fallback')}-error`\" class=\"contact-form__invalid\">{{ form.errors.fallback }}</span>\n      </label>\n      <div class=\"contact-form__photo\">\n        <button type=\"button\" role=\"switch\" class=\"contact-form__switch\" :aria-checked=\"model.showPhoto\" aria-labelledby=\"contact-photo-label\" :disabled=\"pending\"\n                @click=\"model.showPhoto = !model.showPhoto\">\n          <span class=\"contact-form__knob\" />\n        </button>\n        <span id=\"contact-photo-label\" class=\"contact-form__photo-label\">Tonen met foto op het ontvangstscherm</span>\n      </div>\n      <div v-if=\"model.showPhoto\" class=\"contact-form__picture\">\n        <span class=\"contact-form__preview\" aria-hidden=\"true\" :style=\"{ background: initials.color }\">\n          <img v-if=\"photoPreview\" :src=\"photoPreview\" alt=\"\" width=\"64\" height=\"64\">\n          <template v-else>{{ initials.initials }}</template>\n        </span>\n        <span class=\"contact-form__picture-body\">\n          <span class=\"contact-form__picture-actions\">\n            <label class=\"vk-button vk-button--secondary vk-button--compact contact-form__upload\">\n              {{ photoPreview ? \"Andere foto\" : \"Foto kiezen\" }}\n              <input type=\"file\" accept=\"image/jpeg,image/png,image/webp\" class=\"contact-form__file\" :disabled=\"pending\" aria-describedby=\"contact-photo-hint\" @change=\"pickPhoto\">\n            </label>\n            <button v-if=\"photoPreview\" type=\"button\" class=\"contact-form__remove\" :disabled=\"pending\" @click=\"removePhoto\">Verwijderen</button>\n          </span>\n          <span id=\"contact-photo-hint\" class=\"contact-form__hint\">JPG, PNG of WebP, maximaal 5 MB.</span>\n          <span v-if=\"photoError\" class=\"contact-form__invalid\" role=\"alert\">{{ photoError }}</span>\n        </span>\n      </div>\n    </div>\n    <template v-if=\"employee && !employee.archived\" #footer-start>\n      <button type=\"button\" class=\"contact-form__archive\" :disabled=\"pending\" @click=\"emit('archive', employee)\">Archiveren</button>\n    </template>\n    <template #footer>\n      <button type=\"button\" class=\"vk-button vk-button--secondary vk-button--compact\" :disabled=\"pending\" @click=\"cancel\">Annuleren</button>\n      <button type=\"submit\" class=\"vk-button vk-button--primary vk-button--compact\" :disabled=\"pending\" data-testid=\"dialog-submit\">\n        {{ pending ? \"Opslaan...\" : employee ? \"Opslaan\" : \"Toevoegen\" }}\n      </button>\n    </template>\n  </Dialog>\n</template>\n\n<style scoped>\n/* Geometry, colors and type follow the supplied ContactpersoonToevoegen.html export. */\n.contact-form { display: flex; flex-direction: column; gap: 18px; }\n.contact-form__pair { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }\n.contact-form__field { display: flex; flex-direction: column; gap: 6px; font-size: 14px; font-weight: 700; }\n.contact-form__field .v-control { box-sizing: border-box; height: 48px; font-weight: 400; }\n.contact-form__select { padding: 0 16px; cursor: pointer; }\n.contact-form__required { color: var(--danger); }\n.contact-form__hint { font-size: 13px; font-weight: 400; color: var(--muted-foreground); }\n.contact-form__invalid { font-size: 13px; font-weight: 400; color: var(--danger); }\n.contact-form__error { margin: 0; color: var(--danger); }\n.contact-form__channels { margin: 0; padding: 0; border: 0; display: flex; flex-direction: column; gap: 8px; min-width: 0; }\n.contact-form__legend { padding: 0; margin-bottom: 8px; font-size: 14px; font-weight: 700; }\n.contact-form__channel { display: flex; align-items: center; gap: 12px; min-height: 44px; padding: 0 16px; border-radius: 999px; border: 1.5px solid var(--border); background: transparent; font-size: 15px; font-weight: 600; cursor: pointer; box-sizing: content-box; }\n.contact-form__channel--checked { border-color: var(--foreground); background: var(--field); }\n.contact-form__channel input { width: 18px; height: 18px; margin: 0; accent-color: var(--foreground); cursor: inherit; }\n.contact-form__photo { display: flex; align-items: center; gap: 14px; }\n.contact-form__switch { flex: none; width: 52px; height: 32px; border-radius: 999px; border: 0; padding: 3px; background: #8a8f8c; display: flex; justify-content: flex-start; cursor: pointer; }\n.contact-form__switch[aria-checked=\"true\"] { background: var(--foreground); justify-content: flex-end; }\n.contact-form__switch:disabled { opacity: 0.55; cursor: not-allowed; }\n.contact-form__knob { width: 26px; height: 26px; border-radius: 999px; background: var(--field); }\n.contact-form__switch[aria-checked=\"true\"] .contact-form__knob { background: var(--lime); }\n.contact-form__photo-label { font-size: 15px; font-weight: 600; }\n.contact-form__picture { display: flex; align-items: center; gap: 16px; }\n.contact-form__preview { flex: none; width: 64px; height: 64px; border-radius: 999px; overflow: hidden; display: flex; align-items: center; justify-content: center; font-size: 18px; font-weight: 700; }\n.contact-form__preview img { display: block; width: 100%; height: 100%; object-fit: cover; }\n.contact-form__picture-body { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.contact-form__picture-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }\n.contact-form__upload { position: relative; cursor: pointer; }\n.contact-form__upload:focus-within { outline: 2px solid var(--foreground); outline-offset: 2px; }\n.contact-form__file { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }\n.contact-form__remove { min-height: 36px; padding: 0 14px; border-radius: 999px; border: 1.5px solid transparent; background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.contact-form__remove:hover:not(:disabled) { border-color: var(--foreground); }\n.contact-form__archive { min-height: 36px; padding: 0 14px; border-radius: 999px; border: 1.5px solid transparent; background: transparent; color: var(--danger); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.contact-form__archive:hover:not(:disabled) { border-color: var(--danger); }\n.contact-form__archive:disabled { opacity: 0.45; cursor: not-allowed; }\n</style>\n","import { nextTick, reactive, ref, useId, watch } from \"vue\";\n\n/** Returns an error message, or null when the value is valid. */\nexport type Rule<Model> = (value: unknown, model: Model) => string | null;\n\nfunction isBlank(value: unknown): boolean {\n  return value === null || value === undefined || (typeof value === \"string\" && value.trim() === \"\") || (Array.isArray(value) && value.length === 0);\n}\n\nexport const rules = {\n  required: (message: string) => (value: unknown) => isBlank(value) ? message : null,\n  email: (message = \"Vul een geldig e-mailadres in, bijvoorbeeld naam@bedrijf.nl.\") => (value: unknown) =>\n    isBlank(value) || /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(String(value)) ? null : message,\n  phone: (message = \"Vul een geldig telefoonnummer in, bijvoorbeeld 06 12345678 of +31 30 123 4567.\") => (value: unknown) =>\n    isBlank(value) || /^\\+?[\\d\\s()-]{8,20}$/.test(String(value)) ? null : message,\n  maxLength: (max: number, message?: string) => (value: unknown) =>\n    isBlank(value) || String(value).length <= max ? null : message ?? `Gebruik maximaal ${max} tekens.`,\n  /** Any custom condition: `rules.check(v => Number(v) > 0, \"Kies minimaal 1.\")`. */\n  check: <Model>(isValid: (value: unknown, model: Model) => boolean, message: string): Rule<Model> =>\n    (value, model) => isBlank(value) || isValid(value, model) ? null : message,\n};\n\n/**\n * Validate on submit (PRD 12.1): the submit button stays enabled, all errors appear at once,\n * focus moves to the first invalid field and the input is kept. After the first submit, errors\n * update while the user corrects them.\n *\n *   const model = reactive({ name: \"\", phone: \"\" });\n *   const form = useFormValidation(model, { name: [rules.required(\"Vul een naam in.\")], phone: [rules.phone()] });\n *   <FormField label=\"Naam\" :field-id=\"form.fieldId('name')\" :error=\"form.errors.name\"><TextInput v-model=\"model.name\" /></FormField>\n *   function onSubmit() { if (!form.validate()) return; ... }\n */\nexport function useFormValidation<Model extends object>(model: Model, fieldRules: Partial<Record<keyof Model & string, Array<Rule<Model>>>>) {\n  const prefix = useId();\n  const errors = reactive({}) as Partial<Record<keyof Model & string, string>>;\n  const submitted = ref(false);\n  const fields = Object.keys(fieldRules) as Array<keyof Model & string>;\n\n  function run(): Array<keyof Model & string> {\n    const invalid: Array<keyof Model & string> = [];\n    for (const field of fields) {\n      const message = (fieldRules[field] ?? []).map(rule => rule(model[field], model)).find(Boolean) ?? null;\n      if (message) {\n        errors[field] = message;\n        invalid.push(field);\n      } else {\n        delete errors[field];\n      }\n    }\n    return invalid;\n  }\n\n  watch(() => ({ ...model }), () => {\n    if (submitted.value)\n      run();\n  }, { deep: true });\n\n  return {\n    errors,\n    submitted,\n    /** Stable element id for a field; pass it to FormField so focus and aria wiring line up. */\n    fieldId: (field: keyof Model & string) => `${prefix}-${field}`,\n    /** Run all rules; on failure focus the first invalid field (in rule order) and return false. */\n    validate(): boolean {\n      submitted.value = true;\n      const invalid = run();\n      if (invalid.length) {\n        void nextTick(() => document.getElementById(`${prefix}-${invalid[0]}`)?.focus());\n        return false;\n      }\n      return true;\n    },\n    /** Set an error from outside the rules, e.g. a simulated server rejection. */\n    setError(field: keyof Model & string, message: string) {\n      errors[field] = message;\n    },\n    reset() {\n      submitted.value = false;\n      for (const field of fields)\n        delete errors[field];\n    },\n  };\n}\n","import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, renderList as _renderList, Fragment as _Fragment, vModelRadio as _vModelRadio, normalizeClass as _normalizeClass, vModelSelect as _vModelSelect, normalizeStyle as _normalizeStyle, withCtx as _withCtx, createSlots as _createSlots, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"contact-form__error\",\n  role: \"alert\"\n}\nconst _hoisted_3 = { class: \"contact-form__pair\" }\nconst _hoisted_4 = { class: \"contact-form__field\" }\nconst _hoisted_5 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_6 = [\"id\"]\nconst _hoisted_7 = { class: \"contact-form__field\" }\nconst _hoisted_8 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_9 = [\"id\"]\nconst _hoisted_10 = [\"aria-describedby\"]\nconst _hoisted_11 = [\"id\", \"value\", \"disabled\"]\nconst _hoisted_12 = [\"id\"]\nconst _hoisted_13 = { class: \"contact-form__field\" }\nconst _hoisted_14 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_15 = [\"id\"]\nconst _hoisted_16 = { class: \"contact-form__field\" }\nconst _hoisted_17 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_18 = [\"id\"]\nconst _hoisted_19 = {\n  key: 3,\n  class: \"contact-form__field\"\n}\nconst _hoisted_20 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_21 = [\"id\"]\nconst _hoisted_22 = { class: \"contact-form__field\" }\nconst _hoisted_23 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_24 = [\"id\"]\nconst _hoisted_25 = {\n  key: 4,\n  class: \"contact-form__field\"\n}\nconst _hoisted_26 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_27 = [\"value\"]\nconst _hoisted_28 = [\"id\"]\nconst _hoisted_29 = { class: \"contact-form__field\" }\nconst _hoisted_30 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_31 = [\"id\"]\nconst _hoisted_32 = { class: \"contact-form__field\" }\nconst _hoisted_33 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_34 = { value: \"\" }\nconst _hoisted_35 = [\"value\"]\nconst _hoisted_36 = [\"id\"]\nconst _hoisted_37 = { class: \"contact-form__photo\" }\nconst _hoisted_38 = [\"aria-checked\", \"disabled\"]\nconst _hoisted_39 = {\n  key: 5,\n  class: \"contact-form__picture\"\n}\nconst _hoisted_40 = [\"src\"]\nconst _hoisted_41 = { class: \"contact-form__picture-body\" }\nconst _hoisted_42 = { class: \"contact-form__picture-actions\" }\nconst _hoisted_43 = { class: \"vk-button vk-button--secondary vk-button--compact contact-form__upload\" }\nconst _hoisted_44 = [\"disabled\"]\nconst _hoisted_45 = [\"disabled\"]\nconst _hoisted_46 = {\n  key: 0,\n  class: \"contact-form__invalid\",\n  role: \"alert\"\n}\nconst _hoisted_47 = [\"disabled\"]\nconst _hoisted_48 = [\"disabled\"]\nconst _hoisted_49 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createCommentVNode(\" Supplied ContactpersoonToevoegen.html: 640px panel 72px from the top; the shared Dialog owns focus and the unsaved-changes guard. \"),\n    _createVNode($setup[\"Dialog\"], {\n      open: $props.open,\n      title: $props.employee ? 'Contactpersoon bewerken' : 'Contactpersoon toevoegen',\n      width: 640,\n      style: {\"--dialog-top\":\"72px\"},\n      description: \"Een contactpersoon ontvangt bezoekers. Er wordt geen Velkom-login voor aangemaakt.\",\n      form: \"\",\n      guard: $setup.guard,\n      pending: $setup.pending,\n      \"data-testid\": \"employee-dialog\",\n      onClose: _cache[12] || (_cache[12] = $event => ($setup.emit('close'))),\n      onSubmit: $setup.onSubmit\n    }, _createSlots({\n      footer: _withCtx(() => [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"vk-button vk-button--secondary vk-button--compact\",\n          disabled: $setup.pending,\n          onClick: $setup.cancel\n        }, \"Annuleren\", 8 /* PROPS */, _hoisted_48),\n        _createElementVNode(\"button\", {\n          type: \"submit\",\n          class: \"vk-button vk-button--primary vk-button--compact\",\n          disabled: $setup.pending,\n          \"data-testid\": \"dialog-submit\"\n        }, _toDisplayString($setup.pending ? \"Opslaan...\" : $props.employee ? \"Opslaan\" : \"Toevoegen\"), 9 /* TEXT, PROPS */, _hoisted_49)\n      ]),\n      default: _withCtx(() => [\n        _createElementVNode(\"div\", {\n          class: \"contact-form\",\n          \"aria-busy\": $setup.pending || undefined\n        }, [\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(\"label\", _hoisted_4, [\n              _cache[13] || (_cache[13] = _createElementVNode(\"span\", null, [\n                _createTextVNode(\"Voornaam \"),\n                _createElementVNode(\"span\", {\n                  class: \"contact-form__required\",\n                  \"aria-hidden\": \"true\"\n                }, \"*\")\n              ], -1 /* CACHED */)),\n              _withDirectives(_createElementVNode(\"input\", {\n                id: $setup.form.fieldId('firstname'),\n                \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.firstname) = $event)),\n                class: \"v-control\",\n                type: \"text\",\n                autocomplete: \"given-name\",\n                disabled: $setup.pending,\n                \"aria-required\": \"true\",\n                \"aria-invalid\": Boolean($setup.form.errors.firstname) || undefined,\n                \"aria-describedby\": $setup.describedBy('firstname')\n              }, null, 8 /* PROPS */, _hoisted_5), [\n                [_vModelText, $setup.model.firstname]\n              ]),\n              ($setup.form.errors.firstname)\n                ? (_openBlock(), _createElementBlock(\"span\", {\n                    key: 0,\n                    id: `${$setup.form.fieldId('firstname')}-error`,\n                    class: \"contact-form__invalid\"\n                  }, _toDisplayString($setup.form.errors.firstname), 9 /* TEXT, PROPS */, _hoisted_6))\n                : _createCommentVNode(\"v-if\", true)\n            ]),\n            _createElementVNode(\"label\", _hoisted_7, [\n              _cache[14] || (_cache[14] = _createElementVNode(\"span\", null, [\n                _createTextVNode(\"Achternaam \"),\n                _createElementVNode(\"span\", {\n                  class: \"contact-form__required\",\n                  \"aria-hidden\": \"true\"\n                }, \"*\")\n              ], -1 /* CACHED */)),\n              _withDirectives(_createElementVNode(\"input\", {\n                id: $setup.form.fieldId('lastname'),\n                \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.model.lastname) = $event)),\n                class: \"v-control\",\n                type: \"text\",\n                autocomplete: \"family-name\",\n                disabled: $setup.pending,\n                \"aria-required\": \"true\",\n                \"aria-invalid\": Boolean($setup.form.errors.lastname) || undefined,\n                \"aria-describedby\": $setup.describedBy('lastname')\n              }, null, 8 /* PROPS */, _hoisted_8), [\n                [_vModelText, $setup.model.lastname]\n              ]),\n              ($setup.form.errors.lastname)\n                ? (_openBlock(), _createElementBlock(\"span\", {\n                    key: 0,\n                    id: `${$setup.form.fieldId('lastname')}-error`,\n                    class: \"contact-form__invalid\"\n                  }, _toDisplayString($setup.form.errors.lastname), 9 /* TEXT, PROPS */, _hoisted_9))\n                : _createCommentVNode(\"v-if\", true)\n            ])\n          ]),\n          ($setup.channels.length > 1)\n            ? (_openBlock(), _createElementBlock(\"fieldset\", {\n                key: 1,\n                class: \"contact-form__channels\",\n                \"aria-describedby\": $setup.describedBy('channel')\n              }, [\n                _cache[15] || (_cache[15] = _createElementVNode(\"legend\", { class: \"contact-form__legend\" }, \"Ontvangstkanaal\", -1 /* CACHED */)),\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.channels, (option, index) => {\n                  return (_openBlock(), _createElementBlock(\"label\", {\n                    key: option.value,\n                    class: _normalizeClass([\"contact-form__channel\", { 'contact-form__channel--checked': $setup.model.channel === option.value }])\n                  }, [\n                    _withDirectives(_createElementVNode(\"input\", {\n                      id: index === 0 ? $setup.form.fieldId('channel') : undefined,\n                      \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.model.channel) = $event)),\n                      type: \"radio\",\n                      name: \"contact-channel\",\n                      value: option.value,\n                      disabled: $setup.pending\n                    }, null, 8 /* PROPS */, _hoisted_11), [\n                      [_vModelRadio, $setup.model.channel]\n                    ]),\n                    _createTextVNode(\" \" + _toDisplayString(option.label), 1 /* TEXT */)\n                  ], 2 /* CLASS */))\n                }), 128 /* KEYED_FRAGMENT */)),\n                ($setup.form.errors.channel)\n                  ? (_openBlock(), _createElementBlock(\"span\", {\n                      key: 0,\n                      id: `${$setup.form.fieldId('channel')}-error`,\n                      class: \"contact-form__invalid\"\n                    }, _toDisplayString($setup.form.errors.channel), 9 /* TEXT, PROPS */, _hoisted_12))\n                  : _createCommentVNode(\"v-if\", true)\n              ], 8 /* PROPS */, _hoisted_10))\n            : _createCommentVNode(\"v-if\", true),\n          ($setup.model.channel === 'teams')\n            ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                _createElementVNode(\"label\", _hoisted_13, [\n                  _cache[16] || (_cache[16] = _createTextVNode(\" Microsoft-tenant-ID \", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: $setup.form.fieldId('teamsTenantId'),\n                    \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.model.teamsTenantId) = $event)),\n                    class: \"v-control\",\n                    disabled: $setup.pending,\n                    \"aria-required\": \"true\",\n                    \"aria-invalid\": Boolean($setup.form.errors.teamsTenantId) || undefined,\n                    \"aria-describedby\": $setup.describedBy('teamsTenantId')\n                  }, null, 8 /* PROPS */, _hoisted_14), [\n                    [_vModelText, $setup.model.teamsTenantId]\n                  ]),\n                  ($setup.form.errors.teamsTenantId)\n                    ? (_openBlock(), _createElementBlock(\"span\", {\n                        key: 0,\n                        id: `${$setup.form.fieldId('teamsTenantId')}-error`,\n                        class: \"contact-form__invalid\"\n                      }, _toDisplayString($setup.form.errors.teamsTenantId), 9 /* TEXT, PROPS */, _hoisted_15))\n                    : _createCommentVNode(\"v-if\", true)\n                ]),\n                _createElementVNode(\"label\", _hoisted_16, [\n                  _cache[17] || (_cache[17] = _createTextVNode(\" Microsoft-gebruikers-ID \", -1 /* CACHED */)),\n                  _withDirectives(_createElementVNode(\"input\", {\n                    id: $setup.form.fieldId('teamsUserId'),\n                    \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.model.teamsUserId) = $event)),\n                    class: \"v-control\",\n                    disabled: $setup.pending,\n                    \"aria-required\": \"true\",\n                    \"aria-invalid\": Boolean($setup.form.errors.teamsUserId) || undefined,\n                    \"aria-describedby\": $setup.describedBy('teamsUserId', 'contact-teams-hint')\n                  }, null, 8 /* PROPS */, _hoisted_17), [\n                    [_vModelText, $setup.model.teamsUserId]\n                  ]),\n                  _cache[18] || (_cache[18] = _createElementVNode(\"span\", {\n                    id: \"contact-teams-hint\",\n                    class: \"contact-form__hint\"\n                  }, \"Vraag deze twee ID's aan uw Microsoft-beheerder. Bij opnemen hoort de medewerker een vaste balieboodschap.\", -1 /* CACHED */)),\n                  ($setup.form.errors.teamsUserId)\n                    ? (_openBlock(), _createElementBlock(\"span\", {\n                        key: 0,\n                        id: `${$setup.form.fieldId('teamsUserId')}-error`,\n                        class: \"contact-form__invalid\"\n                      }, _toDisplayString($setup.form.errors.teamsUserId), 9 /* TEXT, PROPS */, _hoisted_18))\n                    : _createCommentVNode(\"v-if\", true)\n                ])\n              ], 64 /* STABLE_FRAGMENT */))\n            : _createCommentVNode(\"v-if\", true),\n          ($setup.model.channel !== 'teams')\n            ? (_openBlock(), _createElementBlock(\"label\", _hoisted_19, [\n                _cache[19] || (_cache[19] = _createElementVNode(\"span\", null, [\n                  _createTextVNode(\"Telefoonnummer \"),\n                  _createElementVNode(\"span\", {\n                    class: \"contact-form__required\",\n                    \"aria-hidden\": \"true\"\n                  }, \"*\")\n                ], -1 /* CACHED */)),\n                _withDirectives(_createElementVNode(\"input\", {\n                  id: $setup.form.fieldId('phone'),\n                  \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => (($setup.model.phone) = $event)),\n                  class: \"v-control\",\n                  type: \"tel\",\n                  inputmode: \"tel\",\n                  autocomplete: \"tel\",\n                  disabled: $setup.pending,\n                  \"aria-required\": \"true\",\n                  \"aria-invalid\": Boolean($setup.form.errors.phone) || undefined,\n                  \"aria-describedby\": $setup.describedBy('phone', 'contact-phone-hint')\n                }, null, 8 /* PROPS */, _hoisted_20), [\n                  [_vModelText, $setup.model.phone]\n                ]),\n                _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n                  id: \"contact-phone-hint\",\n                  class: \"contact-form__hint\"\n                }, \"Wordt gebeld als een bezoeker zich meldt.\", -1 /* CACHED */)),\n                ($setup.form.errors.phone)\n                  ? (_openBlock(), _createElementBlock(\"span\", {\n                      key: 0,\n                      id: `${$setup.form.fieldId('phone')}-error`,\n                      class: \"contact-form__invalid\"\n                    }, _toDisplayString($setup.form.errors.phone), 9 /* TEXT, PROPS */, _hoisted_21))\n                  : _createCommentVNode(\"v-if\", true)\n              ]))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"label\", _hoisted_22, [\n            _cache[21] || (_cache[21] = _createTextVNode(\" E-mailadres \", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: $setup.form.fieldId('email'),\n              \"onUpdate:modelValue\": _cache[6] || (_cache[6] = $event => (($setup.model.email) = $event)),\n              class: \"v-control\",\n              type: \"email\",\n              inputmode: \"email\",\n              autocomplete: \"email\",\n              disabled: $setup.pending,\n              \"aria-invalid\": Boolean($setup.form.errors.email) || undefined,\n              \"aria-describedby\": $setup.describedBy('email')\n            }, null, 8 /* PROPS */, _hoisted_23), [\n              [_vModelText, $setup.model.email]\n            ]),\n            ($setup.form.errors.email)\n              ? (_openBlock(), _createElementBlock(\"span\", {\n                  key: 0,\n                  id: `${$setup.form.fieldId('email')}-error`,\n                  class: \"contact-form__invalid\"\n                }, _toDisplayString($setup.form.errors.email), 9 /* TEXT, PROPS */, _hoisted_24))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          ($props.selectCompany)\n            ? (_openBlock(), _createElementBlock(\"label\", _hoisted_25, [\n                _cache[23] || (_cache[23] = _createTextVNode(\" Bedrijf \", -1 /* CACHED */)),\n                _withDirectives(_createElementVNode(\"select\", {\n                  id: $setup.form.fieldId('company'),\n                  \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => (($setup.model.company) = $event)),\n                  class: \"v-control contact-form__select\",\n                  disabled: $setup.pending,\n                  \"aria-invalid\": Boolean($setup.form.errors.company) || undefined,\n                  \"aria-describedby\": $setup.describedBy('company', 'contact-company-hint'),\n                  onChange: $setup.changeCompany\n                }, [\n                  _cache[22] || (_cache[22] = _createElementVNode(\"option\", { value: \"\" }, \"Geen bedrijf\", -1 /* CACHED */)),\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.companyOptions, (company) => {\n                    return (_openBlock(), _createElementBlock(\"option\", {\n                      key: company.id,\n                      value: String(company.id)\n                    }, _toDisplayString(company.name) + _toDisplayString(company.archived ? \" (gearchiveerd)\" : \"\"), 9 /* TEXT, PROPS */, _hoisted_27))\n                  }), 128 /* KEYED_FRAGMENT */))\n                ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_26), [\n                  [_vModelSelect, $setup.model.company]\n                ]),\n                _cache[24] || (_cache[24] = _createElementVNode(\"span\", {\n                  id: \"contact-company-hint\",\n                  class: \"contact-form__hint\"\n                }, \"Alleen contactpersonen van een actief bedrijf zijn na de bedrijfskeuze zichtbaar.\", -1 /* CACHED */)),\n                ($setup.form.errors.company)\n                  ? (_openBlock(), _createElementBlock(\"span\", {\n                      key: 0,\n                      id: `${$setup.form.fieldId('company')}-error`,\n                      class: \"contact-form__invalid\"\n                    }, _toDisplayString($setup.form.errors.company), 9 /* TEXT, PROPS */, _hoisted_28))\n                  : _createCommentVNode(\"v-if\", true)\n              ]))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"label\", _hoisted_29, [\n            _cache[25] || (_cache[25] = _createTextVNode(\" Afdeling \", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: $setup.form.fieldId('department'),\n              \"onUpdate:modelValue\": _cache[8] || (_cache[8] = $event => (($setup.model.department) = $event)),\n              class: \"v-control\",\n              type: \"text\",\n              disabled: $setup.pending,\n              \"aria-invalid\": Boolean($setup.form.errors.department) || undefined,\n              \"aria-describedby\": $setup.describedBy('department')\n            }, null, 8 /* PROPS */, _hoisted_30), [\n              [_vModelText, $setup.model.department]\n            ]),\n            ($setup.form.errors.department)\n              ? (_openBlock(), _createElementBlock(\"span\", {\n                  key: 0,\n                  id: `${$setup.form.fieldId('department')}-error`,\n                  class: \"contact-form__invalid\"\n                }, _toDisplayString($setup.form.errors.department), 9 /* TEXT, PROPS */, _hoisted_31))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"label\", _hoisted_32, [\n            _cache[26] || (_cache[26] = _createTextVNode(\" Terugvalcontact \", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"select\", {\n              id: $setup.form.fieldId('fallback'),\n              \"onUpdate:modelValue\": _cache[9] || (_cache[9] = $event => (($setup.model.fallback) = $event)),\n              class: \"v-control contact-form__select\",\n              disabled: $setup.pending,\n              \"aria-invalid\": Boolean($setup.form.errors.fallback) || undefined,\n              \"aria-describedby\": $setup.describedBy('fallback')\n            }, [\n              _createElementVNode(\"option\", _hoisted_34, _toDisplayString($props.selectCompany ? \"Receptie van het bedrijf gebruiken\" : \"Algemene terugvalroute gebruiken\"), 1 /* TEXT */),\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.fallbackOptions, (contact) => {\n                return (_openBlock(), _createElementBlock(\"option\", {\n                  key: contact.id,\n                  value: String(contact.id)\n                }, _toDisplayString(contact.firstname) + \" \" + _toDisplayString(contact.lastname), 9 /* TEXT, PROPS */, _hoisted_35))\n              }), 128 /* KEYED_FRAGMENT */))\n            ], 8 /* PROPS */, _hoisted_33), [\n              [_vModelSelect, $setup.model.fallback]\n            ]),\n            ($setup.form.errors.fallback)\n              ? (_openBlock(), _createElementBlock(\"span\", {\n                  key: 0,\n                  id: `${$setup.form.fieldId('fallback')}-error`,\n                  class: \"contact-form__invalid\"\n                }, _toDisplayString($setup.form.errors.fallback), 9 /* TEXT, PROPS */, _hoisted_36))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"div\", _hoisted_37, [\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              role: \"switch\",\n              class: \"contact-form__switch\",\n              \"aria-checked\": $setup.model.showPhoto,\n              \"aria-labelledby\": \"contact-photo-label\",\n              disabled: $setup.pending,\n              onClick: _cache[10] || (_cache[10] = $event => ($setup.model.showPhoto = !$setup.model.showPhoto))\n            }, _cache[27] || (_cache[27] = [\n              _createElementVNode(\"span\", { class: \"contact-form__knob\" }, null, -1 /* CACHED */)\n            ]), 8 /* PROPS */, _hoisted_38),\n            _cache[28] || (_cache[28] = _createElementVNode(\"span\", {\n              id: \"contact-photo-label\",\n              class: \"contact-form__photo-label\"\n            }, \"Tonen met foto op het ontvangstscherm\", -1 /* CACHED */))\n          ]),\n          ($setup.model.showPhoto)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_39, [\n                _createElementVNode(\"span\", {\n                  class: \"contact-form__preview\",\n                  \"aria-hidden\": \"true\",\n                  style: _normalizeStyle({ background: $setup.initials.color })\n                }, [\n                  ($setup.photoPreview)\n                    ? (_openBlock(), _createElementBlock(\"img\", {\n                        key: 0,\n                        src: $setup.photoPreview,\n                        alt: \"\",\n                        width: \"64\",\n                        height: \"64\"\n                      }, null, 8 /* PROPS */, _hoisted_40))\n                    : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                        _createTextVNode(_toDisplayString($setup.initials.initials), 1 /* TEXT */)\n                      ], 64 /* STABLE_FRAGMENT */))\n                ], 4 /* STYLE */),\n                _createElementVNode(\"span\", _hoisted_41, [\n                  _createElementVNode(\"span\", _hoisted_42, [\n                    _createElementVNode(\"label\", _hoisted_43, [\n                      _createTextVNode(_toDisplayString($setup.photoPreview ? \"Andere foto\" : \"Foto kiezen\") + \" \", 1 /* TEXT */),\n                      _createElementVNode(\"input\", {\n                        type: \"file\",\n                        accept: \"image/jpeg,image/png,image/webp\",\n                        class: \"contact-form__file\",\n                        disabled: $setup.pending,\n                        \"aria-describedby\": \"contact-photo-hint\",\n                        onChange: $setup.pickPhoto\n                      }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_44)\n                    ]),\n                    ($setup.photoPreview)\n                      ? (_openBlock(), _createElementBlock(\"button\", {\n                          key: 0,\n                          type: \"button\",\n                          class: \"contact-form__remove\",\n                          disabled: $setup.pending,\n                          onClick: $setup.removePhoto\n                        }, \"Verwijderen\", 8 /* PROPS */, _hoisted_45))\n                      : _createCommentVNode(\"v-if\", true)\n                  ]),\n                  _cache[29] || (_cache[29] = _createElementVNode(\"span\", {\n                    id: \"contact-photo-hint\",\n                    class: \"contact-form__hint\"\n                  }, \"JPG, PNG of WebP, maximaal 5 MB.\", -1 /* CACHED */)),\n                  ($setup.photoError)\n                    ? (_openBlock(), _createElementBlock(\"span\", _hoisted_46, _toDisplayString($setup.photoError), 1 /* TEXT */))\n                    : _createCommentVNode(\"v-if\", true)\n                ])\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 8 /* PROPS */, _hoisted_1)\n      ]),\n      _: 2 /* DYNAMIC */\n    }, [\n      ($props.employee && !$props.employee.archived)\n        ? {\n            name: \"footer-start\",\n            fn: _withCtx(() => [\n              _createElementVNode(\"button\", {\n                type: \"button\",\n                class: \"contact-form__archive\",\n                disabled: $setup.pending,\n                onClick: _cache[11] || (_cache[11] = $event => ($setup.emit('archive', $props.employee)))\n              }, \"Archiveren\", 8 /* PROPS */, _hoisted_47)\n            ]),\n            key: \"0\"\n          }\n        : undefined\n    ]), 1032 /* PROPS, DYNAMIC_SLOTS */, [\"open\", \"title\", \"guard\", \"pending\"])\n  ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeeDialog.vue\";script.__scopeId = \"data-v-0841758d\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport { avatar } from \"../../../lib/avatar\";\n\nconst props = defineProps<{ id: number; hasPhoto: boolean; name: string }>();\nconst photo = ref<string | null>(null);\nconst initials = computed(() => avatar(props.name));\nlet request = 0;\n\nasync function load(): Promise<void> {\n  const current = ++request;\n  photo.value = null;\n  if (!props.hasPhoto)\n    return;\n  try {\n    const result = await rpc(\"velkom:admin\").employeePhoto({ id: props.id });\n    // A late response for a previous row must never replace the current contact's photo.\n    if (current === request)\n      photo.value = result;\n  } catch {\n    // The initials stay visible when the photo cannot be loaded.\n  }\n}\nwatch(() => [props.id, props.hasPhoto], () => { void load(); }, { immediate: true });\n</script>\n\n<template>\n  <span class=\"contact-avatar\" aria-hidden=\"true\" :style=\"{ background: initials.color }\">\n    <img v-if=\"photo\" class=\"contact-avatar__photo\" :src=\"photo\" alt=\"\" width=\"38\" height=\"38\">\n    <template v-else>{{ initials.initials }}</template>\n  </span>\n</template>\n\n<style scoped>\n.contact-avatar { width: 38px; height: 38px; flex: none; border-radius: 999px; display: flex; align-items: center; justify-content: center; overflow: hidden; color: var(--foreground); font-size: 13px; font-weight: 700; }\n.contact-avatar__photo { display: block; width: 100%; height: 100%; object-fit: cover; }\n</style>\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, Fragment as _Fragment, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = [\"src\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"span\", {\n    class: \"contact-avatar\",\n    \"aria-hidden\": \"true\",\n    style: _normalizeStyle({ background: $setup.initials.color })\n  }, [\n    ($setup.photo)\n      ? (_openBlock(), _createElementBlock(\"img\", {\n          key: 0,\n          class: \"contact-avatar__photo\",\n          src: $setup.photo,\n          alt: \"\",\n          width: \"38\",\n          height: \"38\"\n        }, null, 8 /* PROPS */, _hoisted_1))\n      : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n          _createTextVNode(_toDisplayString($setup.initials.initials), 1 /* TEXT */)\n        ], 64 /* STABLE_FRAGMENT */))\n  ], 4 /* STYLE */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/employees/EmployeePhoto.vue\";script.__scopeId = \"data-v-9deb3839\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminCompany, AdminEmployee } from \"../../../../../../js/admin-repository\";\nimport Button from \"../../ui/Button.vue\";\nimport Checkbox from \"../../ui/Checkbox.vue\";\nimport ConfirmDialog from \"../../ui/ConfirmDialog.vue\";\nimport DataTable from \"../../ui/DataTable.vue\";\nimport EmptyState from \"../../ui/EmptyState.vue\";\nimport SearchFilter from \"../../ui/SearchFilter.vue\";\nimport SectionCard from \"../../ui/SectionCard.vue\";\nimport CompanyDialog from \"./CompanyDialog.vue\";\nimport { showToast } from \"../../../lib/toast\";\nimport type { TableColumn } from \"../../../lib/ui\";\nimport type { ContextMenuItem } from \"../../../lib/context-menu\";\n\nconst props = defineProps<{ companies: AdminCompany[]; contacts: AdminEmployee[] }>();\nconst emit = defineEmits<{ updated: [company: AdminCompany] }>();\nconst api = rpc(\"velkom:admin\");\nconst showArchived = ref(false);\nconst query = ref(\"\");\nconst editing = ref<AdminCompany | null>(null);\nconst dialogOpen = ref(false);\nconst archiving = ref<AdminCompany | null>(null);\nconst archivePending = ref(false);\nconst archiveError = ref(false);\nconst columns: TableColumn[] = [{ key: \"name\", label: \"Bedrijf\" }, { key: \"ordering\", label: \"Volgorde\" }, { key: \"reception\", label: \"Receptiecontact\" }, { key: \"actions\", label: \"Acties\", align: \"end\", touchOnly: true }];\nconst shown = computed(() => props.companies.filter(company => company.archived === showArchived.value && company.name.toLocaleLowerCase(\"nl\").includes(query.value.trim().toLocaleLowerCase(\"nl\")))\n  .toSorted((a, b) => a.ordering - b.ordering || a.name.localeCompare(b.name, \"nl\")));\nconst receptionNames = computed(() => new Map(props.contacts.map(contact => [contact.id, `${contact.firstname} ${contact.lastname}${contact.archived ? \" (gearchiveerd)\" : \"\"}`])));\n\nfunction rowMenu(company: AdminCompany): { label: string; items: ContextMenuItem[] } {\n  return {\n    label: `Acties voor ${company.name}`,\n    items: company.archived ? [] : [\n      { label: \"Bewerken\", action: () => edit(company) },\n      { label: \"Archiveren\", destructive: true, action: () => { archiving.value = company; archiveError.value = false; } },\n    ],\n  };\n}\n\nfunction edit(company: AdminCompany | null): void {\n  editing.value = company;\n  dialogOpen.value = true;\n}\n\nfunction saved(company: AdminCompany, result: { logoFailed: boolean }): void {\n  emit(\"updated\", company);\n  dialogOpen.value = false;\n  showToast(result.logoFailed ? \"Bedrijf opgeslagen, maar het logo niet. Probeer het opnieuw via Bewerken.\" : \"Bedrijf opgeslagen\", result.logoFailed ? { tone: \"error\" } : undefined);\n}\n\nasync function archive(): Promise<void> {\n  if (archivePending.value || !archiving.value)\n    return;\n  const company = archiving.value;\n  archivePending.value = true;\n  archiveError.value = false;\n  try {\n    await api.archiveCompany({ id: company.id });\n    emit(\"updated\", { ...company, archived: true });\n    archiving.value = null;\n    showToast(\"Bedrijf gearchiveerd\");\n  } catch {\n    archiveError.value = true;\n  } finally {\n    archivePending.value = false;\n  }\n}\n</script>\n\n<template>\n  <SectionCard title=\"Bedrijven\" description=\"Bedrijven en hun contactpersonen op het ontvangstscherm.\" data-testid=\"company-panel\">\n    <template #actions><Button size=\"sm\" @click=\"edit(null)\">Bedrijf toevoegen</Button></template>\n    <div class=\"companies__filters\">\n      <SearchFilter v-if=\"companies.length >= 10\" v-model=\"query\" label=\"Bedrijven zoeken\" />\n      <Checkbox v-model=\"showArchived\" label=\"Gearchiveerde bedrijven tonen\" />\n    </div>\n    <DataTable :columns=\"columns\" :rows=\"shown\" row-key=\"id\" caption=\"Bedrijven\" :row-menu=\"rowMenu\" :row-open=\"row => !row.archived && edit(row)\">\n      <template #cell-name=\"{ row }\"><strong>{{ row.name }}</strong><span class=\"companies__hint\">{{ row.hasLogo ? \"Met logo\" : \"Zonder logo\" }}</span></template>\n      <template #cell-reception=\"{ row }\">{{ row.reception ? receptionNames.get(row.reception) ?? \"Contactpersoon niet beschikbaar\" : \"Niet ingesteld\" }}</template>\n      <template #cell-actions=\"{ row }\">\n        <div v-if=\"!row.archived\" class=\"companies__actions\">\n          <Button size=\"sm\" :aria-label=\"`Bewerk ${row.name}`\" @click=\"edit(row)\">Bewerken</Button>\n          <Button size=\"sm\" variant=\"ghost\" :aria-label=\"`Archiveer ${row.name}`\" @click=\"archiving = row; archiveError = false\">Archiveren</Button>\n        </div>\n        <span v-else>Gearchiveerd</span>\n      </template>\n      <template #empty>\n        <EmptyState :title=\"query ? 'Geen bedrijven gevonden' : showArchived ? 'Geen gearchiveerde bedrijven' : 'Nog geen bedrijven'\"\n                    :kind=\"query ? 'no-results' : 'empty'\" :description=\"showArchived || query ? '' : 'Voeg eerst een bedrijf toe. Koppel daarna contactpersonen en kies eventueel een receptiecontact via Bewerken.'\" />\n      </template>\n    </DataTable>\n    <CompanyDialog :open=\"dialogOpen\" :company=\"editing\" :contacts=\"contacts\" @close=\"dialogOpen = false\" @saved=\"saved\" />\n    <ConfirmDialog :open=\"Boolean(archiving)\" title=\"Bedrijf archiveren\" :item-name=\"archiving?.name ?? ''\" message=\"Wil je dit bedrijf archiveren?\"\n                   consequence=\"Het bedrijf en zijn contactpersonen verdwijnen uit de bedrijfskeuze. Koppelingen en bezoekhistorie blijven bewaard.\"\n                   confirm-label=\"Archiveren\" pending-label=\"Archiveren...\" :pending=\"archivePending\" @cancel=\"archiving = null\" @confirm=\"archive\">\n      <p v-if=\"archiveError\" class=\"companies__error\" role=\"alert\">Archiveren is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.</p>\n      <span v-else>Wil je dit bedrijf archiveren?</span>\n    </ConfirmDialog>\n  </SectionCard>\n</template>\n\n<style scoped>\n.companies__filters, .companies__actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }\n.companies__actions { justify-content: flex-end; }\n.companies__hint { display: block; color: var(--muted-foreground); font-size: 13px; }\n.companies__error { margin: 0; color: var(--danger); }\n</style>\n","<template>\n  <div class=\"search-filter\">\n    <label :for=\"id\" class=\"visually-hidden\">{{ label }}</label>\n    <Icon name=\"search\" :size=\"16\" class=\"search-filter__icon\" />\n    <input :id=\"id\" v-model=\"model\" type=\"search\" spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"off\" class=\"v-control search-filter__input\" :placeholder=\"placeholder ?? label\"\n           autocomplete=\"off\" enterkeyhint=\"search\" @keydown.esc=\"clearOnEscape\">\n    <button v-if=\"model\" type=\"button\" class=\"search-filter__clear\" aria-label=\"Zoekopdracht wissen\" @click=\"clear\">\n      <Icon name=\"close\" :size=\"16\" />\n    </button>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useId } from \"vue\";\nimport Icon from \"./Icon.vue\";\n\n/** Direct list filter (lists with 10+ items, PRD 10.5). Pair it with EmptyState kind=\"no-results\". */\nwithDefaults(defineProps<{ label: string; placeholder?: string }>(), { placeholder: undefined });\n\nconst model = defineModel<string>({ default: \"\" });\nconst id = useId();\n\nfunction clear(): void {\n  model.value = \"\";\n  document.getElementById(id)?.focus();\n}\n\nfunction clearOnEscape(event: KeyboardEvent): void {\n  if (!model.value)\n    return;\n  // Clear first; a second Escape may still close a surrounding dialog.\n  event.stopPropagation();\n  model.value = \"\";\n}\n</script>\n\n<style scoped>\n.search-filter {\n  position: relative;\n  min-width: 0;\n  width: min(320px, 100%);\n}\n\n.search-filter__icon {\n  position: absolute;\n  left: 12px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: var(--muted-foreground);\n  pointer-events: none;\n}\n\n.search-filter__input {\n  padding-left: 36px;\n  padding-right: 36px;\n}\n\n.search-filter__input::-webkit-search-cancel-button {\n  display: none;\n}\n\n.search-filter__clear {\n  position: absolute;\n  right: 4px;\n  top: 50%;\n  transform: translateY(-50%);\n  display: grid;\n  place-items: center;\n  width: 32px;\n  height: 32px;\n  border: none;\n  border-radius: var(--radius-control);\n  background: transparent;\n  color: var(--muted-foreground);\n  cursor: pointer;\n}\n\n.search-filter__clear:hover {\n  background: var(--hover);\n  color: var(--foreground);\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, vModelText as _vModelText, withKeys as _withKeys, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"search-filter\" }\nconst _hoisted_2 = [\"for\"]\nconst _hoisted_3 = [\"id\", \"placeholder\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"label\", {\n      for: $setup.id,\n      class: \"visually-hidden\"\n    }, _toDisplayString($props.label), 9 /* TEXT, PROPS */, _hoisted_2),\n    _createVNode($setup[\"Icon\"], {\n      name: \"search\",\n      size: 16,\n      class: \"search-filter__icon\"\n    }),\n    _withDirectives(_createElementVNode(\"input\", {\n      id: $setup.id,\n      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model) = $event)),\n      type: \"search\",\n      spellcheck: \"false\",\n      autocorrect: \"off\",\n      autocapitalize: \"off\",\n      class: \"v-control search-filter__input\",\n      placeholder: $props.placeholder ?? $props.label,\n      autocomplete: \"off\",\n      enterkeyhint: \"search\",\n      onKeydown: _withKeys($setup.clearOnEscape, [\"esc\"])\n    }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_3), [\n      [_vModelText, $setup.model]\n    ]),\n    ($setup.model)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 0,\n          type: \"button\",\n          class: \"search-filter__clear\",\n          \"aria-label\": \"Zoekopdracht wissen\",\n          onClick: $setup.clear\n        }, [\n          _createVNode($setup[\"Icon\"], {\n            name: \"close\",\n            size: 16\n          })\n        ]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SearchFilter.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SearchFilter.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SearchFilter.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/SearchFilter.vue\";script.__scopeId = \"data-v-6e265d1d\";export default script;","<script setup lang=\"ts\">\nimport { computed, nextTick, reactive, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminCompany, AdminEmployee } from \"../../../../../../js/admin-repository\";\nimport Button from \"../../ui/Button.vue\";\nimport Dialog from \"../../ui/Dialog.vue\";\nimport FormField from \"../../ui/FormField.vue\";\nimport TextInput from \"../../ui/TextInput.vue\";\nimport { useGuardedForm } from \"../../../composables/useFormGuard\";\nimport { rules, useFormValidation } from \"../../../composables/useFormValidation\";\n\nconst props = defineProps<{ open: boolean; company: AdminCompany | null; contacts: AdminEmployee[] }>();\nconst emit = defineEmits<{ close: []; saved: [company: AdminCompany, result: { logoFailed: boolean }] }>();\nconst api = rpc(\"velkom:admin\");\n// An empty logo preserves it; removal and replacement are included in the dirty snapshot.\nconst model = reactive({ name: \"\", ordering: \"0\", reception: \"\", logo: \"\" });\nconst pending = ref(false);\nconst error = ref(\"\");\nconst logoError = ref(\"\");\nconst currentLogo = ref<string | null>(null);\nconst logoPreview = computed(() => model.logo === \"remove\" ? null : model.logo || currentLogo.value);\nconst receptionOptions = computed(() => props.contacts.filter(contact => contact.company === props.company?.id && !contact.archived)\n  .toSorted((a, b) => `${a.firstname} ${a.lastname}`.localeCompare(`${b.firstname} ${b.lastname}`, \"nl\")));\nconst guard = useGuardedForm(\"Bedrijf\", model, { active: () => props.open });\nconst form = useFormValidation(model, {\n  name: [rules.required(\"Vul een bedrijfsnaam in.\"), rules.maxLength(200)],\n  ordering: [rules.check(value => Number.isSafeInteger(Number(value)) && Number(value) >= 0 && Number(value) <= 2147483647, \"Vul een heel getal tussen 0 en 2147483647 in.\")],\n  reception: [],\n});\n\nwatch(() => props.open, open => {\n  if (!open)\n    return;\n  const company = props.company;\n  guard.load({ name: company?.name ?? \"\", ordering: String(company?.ordering ?? 0), reception: company?.reception ? String(company.reception) : \"\", logo: \"\" });\n  form.reset();\n  error.value = \"\";\n  logoError.value = \"\";\n  currentLogo.value = null;\n  if (company?.hasLogo)\n    void api.companyLogo({ id: company.id }).then(logo => {\n      if (props.open && props.company?.id === company.id)\n        currentLogo.value = logo;\n    }).catch(() => { logoError.value = \"Het bestaande logo kon niet worden geladen. Het blijft bewaard.\"; });\n}, { immediate: true });\n\nfunction pickLogo(event: Event): void {\n  const input = event.target as HTMLInputElement;\n  const file = input.files?.[0];\n  input.value = \"\";\n  logoError.value = \"\";\n  if (!file)\n    return;\n  if (![\"image/jpeg\", \"image/png\", \"image/webp\"].includes(file.type) || file.size > 5 * 1024 * 1024) {\n    logoError.value = \"Kies een JPG-, PNG- of WebP-logo van maximaal 5 MB.\";\n    return;\n  }\n  const reader = new FileReader();\n  reader.onload = () => { model.logo = String(reader.result); };\n  reader.onerror = () => { logoError.value = \"Het logo kon niet worden gelezen. Kies een ander bestand.\"; };\n  reader.readAsDataURL(file);\n}\n\nasync function onSubmit(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    const input = { name: model.name.trim(), ordering: Number(model.ordering), reception: model.reception ? Number(model.reception) : null };\n    let stored = props.company ? await api.updateCompany({ id: props.company.id, ...input }) : await api.createCompany(input);\n    // Metadata is already saved; report a failed logo separately to avoid duplicate companies on retry.\n    let logoFailed = false;\n    if (model.logo) {\n      try {\n        stored = await api.setCompanyLogo({ id: stored.id, logo: model.logo === \"remove\" ? null : model.logo });\n      } catch {\n        logoFailed = true;\n      }\n    }\n    guard.commit();\n    emit(\"saved\", stored, { logoFailed });\n  } catch (cause) {\n    const message = cause instanceof Error ? cause.message.replace(/^RPC Error: /, \"\") : \"\";\n    const field = /receptie/i.test(message) ? \"reception\" : /volgorde|sortering/i.test(message) ? \"ordering\" : /naam|bedrijf/i.test(message) ? \"name\" : null;\n    if (field) {\n      form.setError(field, message);\n      void nextTick(() => document.getElementById(form.fieldId(field))?.focus());\n    } else {\n      error.value = \"Opslaan is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\";\n    }\n  } finally {\n    pending.value = false;\n  }\n}\n</script>\n\n<template>\n  <Dialog :open=\"open\" :title=\"company ? 'Bedrijf bewerken' : 'Bedrijf toevoegen'\" description=\"Een bedrijf groepeert contactpersonen op het ontvangstscherm.\"\n          form :guard=\"guard\" :pending=\"pending\" :submit-label=\"company ? 'Opslaan' : 'Toevoegen'\" @close=\"emit('close')\" @submit=\"onSubmit\">\n    <div class=\"company-form\" :aria-busy=\"pending\">\n      <p v-if=\"error\" class=\"company-form__error\" role=\"alert\">{{ error }}</p>\n      <FormField label=\"Bedrijfsnaam\" :field-id=\"form.fieldId('name')\" :error=\"form.errors.name\" required>\n        <TextInput v-model=\"model.name\" :disabled=\"pending\" autocomplete=\"organization\" />\n      </FormField>\n      <FormField label=\"Volgorde\" :field-id=\"form.fieldId('ordering')\" :error=\"form.errors.ordering\" help=\"Lagere getallen staan bovenaan.\">\n        <TextInput v-model=\"model.ordering\" type=\"number\" min=\"0\" step=\"1\" :disabled=\"pending\" />\n      </FormField>\n      <FormField label=\"Receptiecontact\" :field-id=\"form.fieldId('reception')\" :error=\"form.errors.reception\" help=\"Koppel eerst een contactpersoon aan dit bedrijf. Alleen actieve contactpersonen van dit bedrijf zijn beschikbaar.\">\n        <select :id=\"form.fieldId('reception')\" v-model=\"model.reception\" class=\"v-control company-form__select\" :disabled=\"pending || !company\"\n                :aria-invalid=\"Boolean(form.errors.reception) || undefined\" :aria-describedby=\"`${form.fieldId('reception')}-help ${form.fieldId('reception')}-error`\">\n          <option value=\"\">Geen receptiecontact</option>\n          <option v-if=\"company?.reception && !receptionOptions.some(contact => contact.id === company?.reception)\" :value=\"String(company.reception)\" disabled>Opgeslagen receptiecontact niet meer actief</option>\n          <option v-for=\"contact in receptionOptions\" :key=\"contact.id\" :value=\"String(contact.id)\">{{ contact.firstname }} {{ contact.lastname }}</option>\n        </select>\n      </FormField>\n      <div class=\"company-form__logo\">\n        <strong>Logo</strong>\n        <img v-if=\"logoPreview\" :src=\"logoPreview\" alt=\"Voorbeeld bedrijfslogo\" class=\"company-form__preview\">\n        <span v-else class=\"company-form__hint\">Zonder logo toont het scherm de bedrijfsnaam.</span>\n        <label class=\"company-form__upload vk-button vk-button--secondary vk-button--compact\">\n          {{ logoPreview ? \"Ander logo\" : \"Logo kiezen\" }}\n          <input class=\"company-form__file\" type=\"file\" accept=\"image/jpeg,image/png,image/webp\" :disabled=\"pending\" aria-label=\"Bedrijfslogo kiezen\" @change=\"pickLogo\">\n        </label>\n        <Button v-if=\"logoPreview || company?.hasLogo\" size=\"sm\" :disabled=\"pending\" @click=\"model.logo = 'remove'\">Logo verwijderen</Button>\n        <span class=\"company-form__hint\">JPG, PNG of WebP, maximaal 5 MB.</span>\n        <span v-if=\"logoError\" class=\"company-form__error\" role=\"alert\">{{ logoError }}</span>\n      </div>\n    </div>\n  </Dialog>\n</template>\n\n<style scoped>\n.company-form { display: flex; flex-direction: column; gap: 20px; }\n.company-form__select { cursor: pointer; }\n.company-form__error { margin: 0; color: var(--danger); }\n.company-form__logo { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; font-size: 14px; }\n.company-form__preview { width: 160px; height: 80px; object-fit: contain; background: var(--field); }\n.company-form__hint { color: var(--muted-foreground); font-size: 13px; }\n.company-form__upload { position: relative; cursor: pointer; }\n.company-form__upload:focus-within { outline: 2px solid var(--foreground); outline-offset: 2px; }\n.company-form__file { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }\n</style>\n","<template>\n  <input :id=\"control.id.value\" v-model=\"model\" class=\"v-control\" :type=\"type\" :placeholder=\"placeholder\"\n         :autocomplete=\"autocomplete\" :inputmode=\"inputmode\" :disabled=\"disabled\"\n         :aria-describedby=\"control.describedBy.value\" :aria-invalid=\"control.invalid.value || undefined\"\n         :aria-required=\"control.required.value || undefined\">\n</template>\n\n<script setup lang=\"ts\">\nimport { useFieldControl } from \"../../lib/formField\";\n\nconst props = withDefaults(defineProps<{\n  id?: string;\n  type?: \"text\" | \"email\" | \"tel\" | \"url\" | \"number\" | \"time\" | \"date\" | \"datetime-local\" | \"password\";\n  placeholder?: string;\n  autocomplete?: string;\n  inputmode?: \"text\" | \"email\" | \"tel\" | \"numeric\" | \"decimal\" | \"url\";\n  disabled?: boolean;\n}>(), { id: undefined, type: \"text\", placeholder: \"\", autocomplete: \"off\", inputmode: undefined, disabled: false });\n\nconst model = defineModel<string>({ default: \"\" });\nconst control = useFieldControl(props);\n</script>\n","import { vModelDynamic as _vModelDynamic, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"type\", \"placeholder\", \"autocomplete\", \"inputmode\", \"disabled\", \"aria-describedby\", \"aria-invalid\", \"aria-required\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return _withDirectives((_openBlock(), _createElementBlock(\"input\", {\n    id: $setup.control.id.value,\n    \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model) = $event)),\n    class: \"v-control\",\n    type: $props.type,\n    placeholder: $props.placeholder,\n    autocomplete: $props.autocomplete,\n    inputmode: $props.inputmode,\n    disabled: $props.disabled,\n    \"aria-describedby\": $setup.control.describedBy.value,\n    \"aria-invalid\": $setup.control.invalid.value || undefined,\n    \"aria-required\": $setup.control.required.value || undefined\n  }, null, 8 /* PROPS */, _hoisted_1)), [\n    [_vModelDynamic, $setup.model]\n  ])\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/TextInput.vue?type=script\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/TextInput.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/TextInput.vue\";export default script;","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, vModelSelect as _vModelSelect, withDirectives as _withDirectives, createTextVNode as _createTextVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"company-form__error\",\n  role: \"alert\"\n}\nconst _hoisted_3 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_4 = [\"value\"]\nconst _hoisted_5 = [\"value\"]\nconst _hoisted_6 = { class: \"company-form__logo\" }\nconst _hoisted_7 = [\"src\"]\nconst _hoisted_8 = {\n  key: 1,\n  class: \"company-form__hint\"\n}\nconst _hoisted_9 = { class: \"company-form__upload vk-button vk-button--secondary vk-button--compact\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = {\n  key: 3,\n  class: \"company-form__error\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: $props.company ? 'Bedrijf bewerken' : 'Bedrijf toevoegen',\n    description: \"Een bedrijf groepeert contactpersonen op het ontvangstscherm.\",\n    form: \"\",\n    guard: $setup.guard,\n    pending: $setup.pending,\n    \"submit-label\": $props.company ? 'Opslaan' : 'Toevoegen',\n    onClose: _cache[4] || (_cache[4] = $event => ($setup.emit('close'))),\n    onSubmit: $setup.onSubmit\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", {\n        class: \"company-form\",\n        \"aria-busy\": $setup.pending\n      }, [\n        ($setup.error)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString($setup.error), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createVNode($setup[\"FormField\"], {\n          label: \"Bedrijfsnaam\",\n          \"field-id\": $setup.form.fieldId('name'),\n          error: $setup.form.errors.name,\n          required: \"\"\n        }, {\n          default: _withCtx(() => [\n            _createVNode($setup[\"TextInput\"], {\n              modelValue: $setup.model.name,\n              \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.name) = $event)),\n              disabled: $setup.pending,\n              autocomplete: \"organization\"\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n        _createVNode($setup[\"FormField\"], {\n          label: \"Volgorde\",\n          \"field-id\": $setup.form.fieldId('ordering'),\n          error: $setup.form.errors.ordering,\n          help: \"Lagere getallen staan bovenaan.\"\n        }, {\n          default: _withCtx(() => [\n            _createVNode($setup[\"TextInput\"], {\n              modelValue: $setup.model.ordering,\n              \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.model.ordering) = $event)),\n              type: \"number\",\n              min: \"0\",\n              step: \"1\",\n              disabled: $setup.pending\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n        _createVNode($setup[\"FormField\"], {\n          label: \"Receptiecontact\",\n          \"field-id\": $setup.form.fieldId('reception'),\n          error: $setup.form.errors.reception,\n          help: \"Koppel eerst een contactpersoon aan dit bedrijf. Alleen actieve contactpersonen van dit bedrijf zijn beschikbaar.\"\n        }, {\n          default: _withCtx(() => [\n            _withDirectives(_createElementVNode(\"select\", {\n              id: $setup.form.fieldId('reception'),\n              \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.model.reception) = $event)),\n              class: \"v-control company-form__select\",\n              disabled: $setup.pending || !$props.company,\n              \"aria-invalid\": Boolean($setup.form.errors.reception) || undefined,\n              \"aria-describedby\": `${$setup.form.fieldId('reception')}-help ${$setup.form.fieldId('reception')}-error`\n            }, [\n              _cache[5] || (_cache[5] = _createElementVNode(\"option\", { value: \"\" }, \"Geen receptiecontact\", -1 /* CACHED */)),\n              ($props.company?.reception && !$setup.receptionOptions.some(contact => contact.id === $props.company?.reception))\n                ? (_openBlock(), _createElementBlock(\"option\", {\n                    key: 0,\n                    value: String($props.company.reception),\n                    disabled: \"\"\n                  }, \"Opgeslagen receptiecontact niet meer actief\", 8 /* PROPS */, _hoisted_4))\n                : _createCommentVNode(\"v-if\", true),\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.receptionOptions, (contact) => {\n                return (_openBlock(), _createElementBlock(\"option\", {\n                  key: contact.id,\n                  value: String(contact.id)\n                }, _toDisplayString(contact.firstname) + \" \" + _toDisplayString(contact.lastname), 9 /* TEXT, PROPS */, _hoisted_5))\n              }), 128 /* KEYED_FRAGMENT */))\n            ], 8 /* PROPS */, _hoisted_3), [\n              [_vModelSelect, $setup.model.reception]\n            ])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n        _createElementVNode(\"div\", _hoisted_6, [\n          _cache[7] || (_cache[7] = _createElementVNode(\"strong\", null, \"Logo\", -1 /* CACHED */)),\n          ($setup.logoPreview)\n            ? (_openBlock(), _createElementBlock(\"img\", {\n                key: 0,\n                src: $setup.logoPreview,\n                alt: \"Voorbeeld bedrijfslogo\",\n                class: \"company-form__preview\"\n              }, null, 8 /* PROPS */, _hoisted_7))\n            : (_openBlock(), _createElementBlock(\"span\", _hoisted_8, \"Zonder logo toont het scherm de bedrijfsnaam.\")),\n          _createElementVNode(\"label\", _hoisted_9, [\n            _createTextVNode(_toDisplayString($setup.logoPreview ? \"Ander logo\" : \"Logo kiezen\") + \" \", 1 /* TEXT */),\n            _createElementVNode(\"input\", {\n              class: \"company-form__file\",\n              type: \"file\",\n              accept: \"image/jpeg,image/png,image/webp\",\n              disabled: $setup.pending,\n              \"aria-label\": \"Bedrijfslogo kiezen\",\n              onChange: $setup.pickLogo\n            }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_10)\n          ]),\n          ($setup.logoPreview || $props.company?.hasLogo)\n            ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                key: 2,\n                size: \"sm\",\n                disabled: $setup.pending,\n                onClick: _cache[3] || (_cache[3] = $event => ($setup.model.logo = 'remove'))\n              }, {\n                default: _withCtx(() => _cache[6] || (_cache[6] = [\n                  _createTextVNode(\"Logo verwijderen\", -1 /* CACHED */)\n                ])),\n                _: 1 /* STABLE */,\n                __: [6]\n              }, 8 /* PROPS */, [\"disabled\"]))\n            : _createCommentVNode(\"v-if\", true),\n          _cache[8] || (_cache[8] = _createElementVNode(\"span\", { class: \"company-form__hint\" }, \"JPG, PNG of WebP, maximaal 5 MB.\", -1 /* CACHED */)),\n          ($setup.logoError)\n            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_11, _toDisplayString($setup.logoError), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true)\n        ])\n      ], 8 /* PROPS */, _hoisted_1)\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\", \"title\", \"guard\", \"pending\", \"submit-label\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyDialog.vue\";script.__scopeId = \"data-v-bc486e6d\";export default script;","import { createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"companies__filters\" }\nconst _hoisted_2 = { class: \"companies__hint\" }\nconst _hoisted_3 = {\n  key: 0,\n  class: \"companies__actions\"\n}\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n  key: 0,\n  class: \"companies__error\",\n  role: \"alert\"\n}\nconst _hoisted_6 = { key: 1 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"SectionCard\"], {\n    title: \"Bedrijven\",\n    description: \"Bedrijven en hun contactpersonen op het ontvangstscherm.\",\n    \"data-testid\": \"company-panel\"\n  }, {\n    actions: _withCtx(() => [\n      _createVNode($setup[\"Button\"], {\n        size: \"sm\",\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.edit(null)))\n      }, {\n        default: _withCtx(() => _cache[5] || (_cache[5] = [\n          _createTextVNode(\"Bedrijf toevoegen\", -1 /* CACHED */)\n        ])),\n        _: 1 /* STABLE */,\n        __: [5]\n      })\n    ]),\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", _hoisted_1, [\n        ($props.companies.length >= 10)\n          ? (_openBlock(), _createBlock($setup[\"SearchFilter\"], {\n              key: 0,\n              modelValue: $setup.query,\n              \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.query) = $event)),\n              label: \"Bedrijven zoeken\"\n            }, null, 8 /* PROPS */, [\"modelValue\"]))\n          : _createCommentVNode(\"v-if\", true),\n        _createVNode($setup[\"Checkbox\"], {\n          modelValue: $setup.showArchived,\n          \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.showArchived) = $event)),\n          label: \"Gearchiveerde bedrijven tonen\"\n        }, null, 8 /* PROPS */, [\"modelValue\"])\n      ]),\n      _createVNode($setup[\"DataTable\"], {\n        columns: $setup.columns,\n        rows: $setup.shown,\n        \"row-key\": \"id\",\n        caption: \"Bedrijven\",\n        \"row-menu\": $setup.rowMenu,\n        \"row-open\": row => !row.archived && $setup.edit(row)\n      }, {\n        \"cell-name\": _withCtx(({ row }) => [\n          _createElementVNode(\"strong\", null, _toDisplayString(row.name), 1 /* TEXT */),\n          _createElementVNode(\"span\", _hoisted_2, _toDisplayString(row.hasLogo ? \"Met logo\" : \"Zonder logo\"), 1 /* TEXT */)\n        ]),\n        \"cell-reception\": _withCtx(({ row }) => [\n          _createTextVNode(_toDisplayString(row.reception ? $setup.receptionNames.get(row.reception) ?? \"Contactpersoon niet beschikbaar\" : \"Niet ingesteld\"), 1 /* TEXT */)\n        ]),\n        \"cell-actions\": _withCtx(({ row }) => [\n          (!row.archived)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_3, [\n                _createVNode($setup[\"Button\"], {\n                  size: \"sm\",\n                  \"aria-label\": `Bewerk ${row.name}`,\n                  onClick: $event => ($setup.edit(row))\n                }, {\n                  default: _withCtx(() => _cache[6] || (_cache[6] = [\n                    _createTextVNode(\"Bewerken\", -1 /* CACHED */)\n                  ])),\n                  _: 2 /* DYNAMIC */,\n                  __: [6]\n                }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"aria-label\", \"onClick\"]),\n                _createVNode($setup[\"Button\"], {\n                  size: \"sm\",\n                  variant: \"ghost\",\n                  \"aria-label\": `Archiveer ${row.name}`,\n                  onClick: $event => {$setup.archiving = row; $setup.archiveError = false}\n                }, {\n                  default: _withCtx(() => _cache[7] || (_cache[7] = [\n                    _createTextVNode(\"Archiveren\", -1 /* CACHED */)\n                  ])),\n                  _: 2 /* DYNAMIC */,\n                  __: [7]\n                }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"aria-label\", \"onClick\"])\n              ]))\n            : (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"Gearchiveerd\"))\n        ]),\n        empty: _withCtx(() => [\n          _createVNode($setup[\"EmptyState\"], {\n            title: $setup.query ? 'Geen bedrijven gevonden' : $setup.showArchived ? 'Geen gearchiveerde bedrijven' : 'Nog geen bedrijven',\n            kind: $setup.query ? 'no-results' : 'empty',\n            description: $setup.showArchived || $setup.query ? '' : 'Voeg eerst een bedrijf toe. Koppel daarna contactpersonen en kies eventueel een receptiecontact via Bewerken.'\n          }, null, 8 /* PROPS */, [\"title\", \"kind\", \"description\"])\n        ]),\n        _: 1 /* STABLE */\n      }, 8 /* PROPS */, [\"rows\", \"row-open\"]),\n      _createVNode($setup[\"CompanyDialog\"], {\n        open: $setup.dialogOpen,\n        company: $setup.editing,\n        contacts: $props.contacts,\n        onClose: _cache[3] || (_cache[3] = $event => ($setup.dialogOpen = false)),\n        onSaved: $setup.saved\n      }, null, 8 /* PROPS */, [\"open\", \"company\", \"contacts\"]),\n      _createVNode($setup[\"ConfirmDialog\"], {\n        open: Boolean($setup.archiving),\n        title: \"Bedrijf archiveren\",\n        \"item-name\": $setup.archiving?.name ?? '',\n        message: \"Wil je dit bedrijf archiveren?\",\n        consequence: \"Het bedrijf en zijn contactpersonen verdwijnen uit de bedrijfskeuze. Koppelingen en bezoekhistorie blijven bewaard.\",\n        \"confirm-label\": \"Archiveren\",\n        \"pending-label\": \"Archiveren...\",\n        pending: $setup.archivePending,\n        onCancel: _cache[4] || (_cache[4] = $event => ($setup.archiving = null)),\n        onConfirm: $setup.archive\n      }, {\n        default: _withCtx(() => [\n          ($setup.archiveError)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, \"Archiveren is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\"))\n            : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \"Wil je dit bedrijf archiveren?\"))\n        ]),\n        _: 1 /* STABLE */\n      }, 8 /* PROPS */, [\"open\", \"item-name\", \"pending\"])\n    ]),\n    _: 1 /* STABLE */\n  }))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/companies/CompanyPanel.vue\";script.__scopeId = \"data-v-b3b4a139\";export default script;","import type { AdminEmployee } from \"../../../../../../js/admin-repository\";\n\nexport type ContactSortKey = \"naam\" | \"afdeling\" | \"telefoon\" | \"kanaal\" | \"status\";\nexport type ContactSort = { key: ContactSortKey; direction: \"asc\" | \"desc\" };\n\nexport const CHANNEL_LABELS = { phone: \"Telefoon\", teams: \"Teams\" } as const;\n\n/** Sorts on what the table shows; names on the last word of the last name, so \"de Boer\" files under B. */\nfunction sortKey(contact: AdminEmployee, key: ContactSortKey): string {\n  switch (key) {\n    case \"afdeling\": return contact.department;\n    case \"telefoon\": return contact.phone;\n    case \"kanaal\": return CHANNEL_LABELS[contact.channel];\n    case \"status\": return contact.archived ? \"Gearchiveerd\" : \"Actief\";\n    default: return contact.lastname.trim().split(/\\s+/).pop() ?? \"\";\n  }\n}\n\nfunction compare(a: AdminEmployee, b: AdminEmployee, key: ContactSortKey): number {\n  return sortKey(a, key).localeCompare(sortKey(b, key), \"nl\") || sortKey(a, \"naam\").localeCompare(sortKey(b, \"naam\"), \"nl\") || a.firstname.localeCompare(b.firstname, \"nl\") || a.id - b.id;\n}\n\nexport function contactRows(contacts: readonly AdminEmployee[], options: { archived: boolean; query: string; channel: string; sort: ContactSort }): AdminEmployee[] {\n  const query = options.query.trim().toLocaleLowerCase(\"nl-NL\");\n  return contacts.filter(contact => contact.archived === options.archived && (options.channel === \"alle\" || contact.channel === options.channel)\n    && `${contact.firstname} ${contact.lastname} ${contact.department}`.toLocaleLowerCase(\"nl-NL\").includes(query))\n    .toSorted((a, b) => compare(a, b, options.sort.key) * (options.sort.direction === \"desc\" ? -1 : 1));\n}\n\n// shortcut: only Dutch mobile numbers are grouped; add libphonenumber formatting when other numbers become common.\nexport function formatPhone(phone: string): string {\n  const mobile = /^\\+316(\\d{4})(\\d{4})$/.exec(phone);\n  return mobile ? `+31 6 ${mobile[1]} ${mobile[2]}` : phone;\n}\n","import { createElementVNode as _createElementVNode, withCtx as _withCtx, createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, vModelText as _vModelText, withDirectives as _withDirectives, createTextVNode as _createTextVNode, vModelSelect as _vModelSelect } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"contacts\",\n  \"data-testid\": \"customer-employees\"\n}\nconst _hoisted_2 = [\"disabled\"]\nconst _hoisted_3 = {\n  class: \"contacts__tabs\",\n  \"aria-label\": \"Contactpersonen filteren op status\"\n}\nconst _hoisted_4 = [\"href\", \"aria-current\"]\nconst _hoisted_5 = [\"data-label\"]\nconst _hoisted_6 = {\n  key: 0,\n  class: \"contacts__tab-count\"\n}\nconst _hoisted_7 = {\n  class: \"contacts__filters\",\n  role: \"search\"\n}\nconst _hoisted_8 = { class: \"contacts__field contacts__field--search\" }\nconst _hoisted_9 = { class: \"contacts__search\" }\nconst _hoisted_10 = {\n  key: 0,\n  class: \"contacts__field\"\n}\nconst _hoisted_11 = {\n  key: 1,\n  class: \"contacts__field\"\n}\nconst _hoisted_12 = [\"value\"]\nconst _hoisted_13 = [\"aria-busy\"]\nconst _hoisted_14 = {\n  id: \"contacts-list-title\",\n  class: \"contacts__list-title\"\n}\nconst _hoisted_15 = {\n  key: 0,\n  class: \"contacts__message\",\n  role: \"alert\"\n}\nconst _hoisted_16 = { class: \"contacts__scroll\" }\nconst _hoisted_17 = [\"aria-sort\"]\nconst _hoisted_18 = [\"onClick\"]\nconst _hoisted_19 = {\n  key: 0,\n  scope: \"col\"\n}\nconst _hoisted_20 = [\"tabindex\", \"onContextmenu\", \"onDblclick\", \"onKeydown\", \"onMousedown\"]\nconst _hoisted_21 = { class: \"contacts__person\" }\nconst _hoisted_22 = { class: \"contacts__name\" }\nconst _hoisted_23 = { class: \"contacts__strong\" }\nconst _hoisted_24 = { class: \"contacts__muted\" }\nconst _hoisted_25 = { class: \"contacts__nowrap\" }\nconst _hoisted_26 = { key: 0 }\nconst _hoisted_27 = { class: \"contacts__channel\" }\nconst _hoisted_28 = {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 20 20\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.8\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_29 = [\"d\"]\nconst _hoisted_30 = {\n  key: 0,\n  class: \"contacts__status contacts__status--archived\"\n}\nconst _hoisted_31 = {\n  key: 1,\n  class: \"contacts__status\"\n}\nconst _hoisted_32 = { key: 1 }\nconst _hoisted_33 = { class: \"contacts__actions touch-only\" }\nconst _hoisted_34 = [\"aria-label\", \"onClick\"]\nconst _hoisted_35 = {\n  key: 1,\n  class: \"contacts__muted\"\n}\nconst _hoisted_36 = {\n  key: 0,\n  class: \"contacts__empty\"\n}\nconst _hoisted_37 = { class: \"contacts__footer\" }\nconst _hoisted_38 = { class: \"contacts__muted\" }\nconst _hoisted_39 = {\n  key: 0,\n  class: \"contacts__error\",\n  role: \"alert\"\n}\nconst _hoisted_40 = { key: 1 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Contactpersonen\",\n      context: $props.bootstrap.customer.name,\n      description: \"Wie bezoekers ontvangt en hoe die bereikbaar is.\"\n    }, {\n      actions: _withCtx(() => [\n        _createElementVNode(\"button\", {\n          type: \"button\",\n          class: \"vk-button vk-button--primary vk-button--compact\",\n          disabled: $setup.loading || $setup.error,\n          onClick: _cache[0] || (_cache[0] = $event => ($setup.edit(null)))\n        }, \"Contactpersoon toevoegen\", 8 /* PROPS */, _hoisted_2)\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"context\"]),\n    ($setup.selectCompany && !$setup.loading && !$setup.error)\n      ? (_openBlock(), _createBlock($setup[\"CompanyPanel\"], {\n          key: 0,\n          companies: $setup.companies,\n          contacts: $setup.employees,\n          onUpdated: $setup.companyUpdated\n        }, null, 8 /* PROPS */, [\"companies\", \"contacts\"]))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"nav\", _hoisted_3, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.tabs, (tab) => {\n        return (_openBlock(), _createElementBlock(\"a\", {\n          key: tab.id,\n          class: _normalizeClass([\"contacts__tab\", { 'contacts__tab--current': tab.current }]),\n          href: $setup.customerHref('contactpersonen', { query: tab.query }),\n          \"aria-current\": tab.current ? 'page' : undefined\n        }, [\n          _createElementVNode(\"span\", {\n            class: \"contacts__tab-label\",\n            \"data-label\": tab.label\n          }, _toDisplayString(tab.label), 9 /* TEXT, PROPS */, _hoisted_5),\n          (!$setup.loading && !$setup.error)\n            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString(tab.count), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true)\n        ], 10 /* CLASS, PROPS */, _hoisted_4))\n      }), 128 /* KEYED_FRAGMENT */))\n    ]),\n    _createElementVNode(\"div\", _hoisted_7, [\n      _createElementVNode(\"label\", _hoisted_8, [\n        _cache[8] || (_cache[8] = _createTextVNode(\" Zoeken \", -1 /* CACHED */)),\n        _createElementVNode(\"span\", _hoisted_9, [\n          _cache[7] || (_cache[7] = _createElementVNode(\"svg\", {\n            width: \"18\",\n            height: \"18\",\n            viewBox: \"0 0 20 20\",\n            fill: \"none\",\n            stroke: \"currentColor\",\n            \"stroke-width\": \"1.8\",\n            \"stroke-linecap\": \"round\",\n            \"aria-hidden\": \"true\"\n          }, [\n            _createElementVNode(\"path\", { d: \"M9 3.5a5.5 5.5 0 1 1 0 11a5.5 5.5 0 1 1 0-11zM13.2 13.2L17 17\" })\n          ], -1 /* CACHED */)),\n          _withDirectives(_createElementVNode(\"input\", {\n            \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.query) = $event)),\n            class: \"contacts__control contacts__control--search\",\n            type: \"search\",\n            spellcheck: \"false\",\n            autocorrect: \"off\",\n            autocapitalize: \"off\",\n            placeholder: \"Zoek op naam of afdeling\"\n          }, null, 512 /* NEED_PATCH */), [\n            [_vModelText, $setup.query]\n          ])\n        ])\n      ]),\n      ($setup.multipleChannels)\n        ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, [\n            _cache[10] || (_cache[10] = _createTextVNode(\" Kanaal \", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"select\", {\n              \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.channel) = $event)),\n              class: \"contacts__control\"\n            }, _cache[9] || (_cache[9] = [\n              _createElementVNode(\"option\", { value: \"alle\" }, \"Alle kanalen\", -1 /* CACHED */),\n              _createElementVNode(\"option\", { value: \"phone\" }, \"Telefoon\", -1 /* CACHED */),\n              _createElementVNode(\"option\", { value: \"teams\" }, \"Teams\", -1 /* CACHED */)\n            ]), 512 /* NEED_PATCH */), [\n              [_vModelSelect, $setup.channel]\n            ])\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.selectCompany)\n        ? (_openBlock(), _createElementBlock(\"label\", _hoisted_11, [\n            _cache[13] || (_cache[13] = _createTextVNode(\" Bedrijf \", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"select\", {\n              \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.companyFilter) = $event)),\n              class: \"contacts__control\"\n            }, [\n              _cache[11] || (_cache[11] = _createElementVNode(\"option\", { value: \"\" }, \"Alle bedrijven\", -1 /* CACHED */)),\n              _cache[12] || (_cache[12] = _createElementVNode(\"option\", { value: \"none\" }, \"Geen bedrijf\", -1 /* CACHED */)),\n              (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.companies, (company) => {\n                return (_openBlock(), _createElementBlock(\"option\", {\n                  key: company.id,\n                  value: String(company.id)\n                }, _toDisplayString(company.name) + _toDisplayString(company.archived ? \" (gearchiveerd)\" : \"\"), 9 /* TEXT, PROPS */, _hoisted_12))\n              }), 128 /* KEYED_FRAGMENT */))\n            ], 512 /* NEED_PATCH */), [\n              [_vModelSelect, $setup.companyFilter]\n            ])\n          ]))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _createElementVNode(\"section\", {\n      class: \"contacts__list\",\n      \"aria-labelledby\": \"contacts-list-title\",\n      \"aria-busy\": $setup.loading\n    }, [\n      _createElementVNode(\"h2\", _hoisted_14, _toDisplayString($setup.title), 1 /* TEXT */),\n      ($setup.error)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_15, [\n            _cache[14] || (_cache[14] = _createElementVNode(\"p\", null, \"Controleer je verbinding en toegang en probeer het opnieuw.\", -1 /* CACHED */)),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"contacts__action\",\n              onClick: $setup.load\n            }, \"Opnieuw proberen\")\n          ]))\n        : ($setup.loadingIndicator.holding)\n          ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n              key: 1,\n              label: \"Contactpersonen laden\",\n              visible: $setup.loadingIndicator.visible,\n              count: 5,\n              height: 60\n            }, null, 8 /* PROPS */, [\"visible\"]))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n              _createElementVNode(\"div\", _hoisted_16, [\n                _createElementVNode(\"table\", null, [\n                  _createElementVNode(\"thead\", null, [\n                    _createElementVNode(\"tr\", null, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.columns, (column) => {\n                        return (_openBlock(), _createElementBlock(\"th\", {\n                          key: column.key,\n                          scope: \"col\",\n                          \"aria-sort\": $setup.ariaSort(column.key)\n                        }, [\n                          _createElementVNode(\"button\", {\n                            type: \"button\",\n                            class: _normalizeClass([\"contacts__sort\", { 'contacts__sort--active': $setup.sort.key === column.key }]),\n                            onClick: $event => ($setup.sortBy(column.key))\n                          }, [\n                            _createTextVNode(_toDisplayString(column.label) + \" \", 1 /* TEXT */),\n                            (_openBlock(), _createElementBlock(\"svg\", {\n                              width: \"12\",\n                              height: \"12\",\n                              viewBox: \"0 0 12 12\",\n                              fill: \"none\",\n                              stroke: \"currentColor\",\n                              \"stroke-width\": \"1.8\",\n                              \"stroke-linecap\": \"round\",\n                              \"stroke-linejoin\": \"round\",\n                              \"aria-hidden\": \"true\",\n                              class: _normalizeClass({ 'contacts__caret--desc': $setup.sort.key === column.key && $setup.sort.direction === 'desc' })\n                            }, _cache[15] || (_cache[15] = [\n                              _createElementVNode(\"path\", { d: \"M3 7.5l3-3 3 3\" }, null, -1 /* CACHED */)\n                            ]), 2 /* CLASS */))\n                          ], 10 /* CLASS, PROPS */, _hoisted_18)\n                        ], 8 /* PROPS */, _hoisted_17))\n                      }), 128 /* KEYED_FRAGMENT */)),\n                      ($setup.selectCompany)\n                        ? (_openBlock(), _createElementBlock(\"th\", _hoisted_19, \"Bedrijf\"))\n                        : _createCommentVNode(\"v-if\", true),\n                      _cache[16] || (_cache[16] = _createElementVNode(\"th\", {\n                        scope: \"col\",\n                        class: \"touch-only\"\n                      }, \"Acties\", -1 /* CACHED */))\n                    ])\n                  ]),\n                  _createElementVNode(\"tbody\", null, [\n                    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.shown, (contact) => {\n                      return (_openBlock(), _createElementBlock(\"tr\", {\n                        key: contact.id,\n                        class: _normalizeClass({ 'contacts__row--open': !contact.archived }),\n                        tabindex: contact.archived ? undefined : 0,\n                        onContextmenu: $event => ($setup.menu?.show($event, $setup.rowActions(contact), `Acties voor ${contact.firstname} ${contact.lastname}`)),\n                        onDblclick: $event => ($setup.openRow($event, contact)),\n                        onKeydown: $event => ($setup.openRow($event, contact)),\n                        onMousedown: $event => (!contact.archived && $event.detail > 1 && $event.preventDefault())\n                      }, [\n                        _createElementVNode(\"td\", null, [\n                          _createElementVNode(\"span\", _hoisted_21, [\n                            (_openBlock(), _createBlock($setup[\"EmployeePhoto\"], {\n                              key: `${contact.id}:${$setup.photoRevisions[contact.id] ?? 0}`,\n                              id: contact.id,\n                              \"has-photo\": contact.hasPhoto,\n                              name: `${contact.firstname} ${contact.lastname}`\n                            }, null, 8 /* PROPS */, [\"id\", \"has-photo\", \"name\"])),\n                            _createElementVNode(\"span\", _hoisted_22, [\n                              _createElementVNode(\"span\", _hoisted_23, _toDisplayString(contact.firstname) + \" \" + _toDisplayString(contact.lastname), 1 /* TEXT */),\n                              _createElementVNode(\"span\", _hoisted_24, _toDisplayString(contact.email || \"Geen e-mailadres\"), 1 /* TEXT */)\n                            ])\n                          ])\n                        ]),\n                        _createElementVNode(\"td\", {\n                          class: _normalizeClass({ contacts__muted: !contact.department })\n                        }, _toDisplayString(contact.department || \"Niet ingesteld\"), 3 /* TEXT, CLASS */),\n                        _createElementVNode(\"td\", _hoisted_25, _toDisplayString($setup.formatPhone(contact.phone)), 1 /* TEXT */),\n                        ($setup.multipleChannels)\n                          ? (_openBlock(), _createElementBlock(\"td\", _hoisted_26, [\n                              _createElementVNode(\"span\", _hoisted_27, [\n                                (_openBlock(), _createElementBlock(\"svg\", _hoisted_28, [\n                                  _createElementVNode(\"path\", {\n                                    d: $setup.CHANNEL_ICONS[contact.channel]\n                                  }, null, 8 /* PROPS */, _hoisted_29)\n                                ])),\n                                _createTextVNode(\" \" + _toDisplayString($setup.CHANNEL_LABELS[contact.channel]), 1 /* TEXT */)\n                              ])\n                            ]))\n                          : _createCommentVNode(\"v-if\", true),\n                        _createElementVNode(\"td\", null, [\n                          (contact.archived)\n                            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_30, _cache[17] || (_cache[17] = [\n                                _createElementVNode(\"svg\", {\n                                  width: \"16\",\n                                  height: \"16\",\n                                  viewBox: \"0 0 20 20\",\n                                  fill: \"none\",\n                                  stroke: \"currentColor\",\n                                  \"stroke-width\": \"1.8\",\n                                  \"stroke-linecap\": \"round\",\n                                  \"stroke-linejoin\": \"round\",\n                                  \"aria-hidden\": \"true\"\n                                }, [\n                                  _createElementVNode(\"path\", { d: \"M3 4h14v4H3zM4.5 8v8h11V8M8 11.5h4\" })\n                                ], -1 /* CACHED */),\n                                _createTextVNode(\" Gearchiveerd \", -1 /* CACHED */)\n                              ])))\n                            : (_openBlock(), _createElementBlock(\"span\", _hoisted_31, _cache[18] || (_cache[18] = [\n                                _createElementVNode(\"svg\", {\n                                  width: \"16\",\n                                  height: \"16\",\n                                  viewBox: \"0 0 20 20\",\n                                  fill: \"none\",\n                                  stroke: \"currentColor\",\n                                  \"stroke-width\": \"2\",\n                                  \"stroke-linecap\": \"round\",\n                                  \"stroke-linejoin\": \"round\",\n                                  \"aria-hidden\": \"true\"\n                                }, [\n                                  _createElementVNode(\"path\", { d: \"M5 10.5l3.2 3.2L15 7\" })\n                                ], -1 /* CACHED */),\n                                _createTextVNode(\" Actief \", -1 /* CACHED */)\n                              ])))\n                        ]),\n                        ($setup.selectCompany)\n                          ? (_openBlock(), _createElementBlock(\"td\", _hoisted_32, _toDisplayString(contact.company ? $setup.companyNames.get(contact.company) ?? \"Bedrijf niet beschikbaar\" : \"Niet ingesteld\"), 1 /* TEXT */))\n                          : _createCommentVNode(\"v-if\", true),\n                        _createElementVNode(\"td\", _hoisted_33, [\n                          (!contact.archived)\n                            ? (_openBlock(), _createElementBlock(\"button\", {\n                                key: 0,\n                                type: \"button\",\n                                class: \"contacts__action\",\n                                \"aria-label\": `Bewerk ${contact.firstname} ${contact.lastname}`,\n                                onClick: $event => ($setup.edit(contact))\n                              }, \"Bewerken\", 8 /* PROPS */, _hoisted_34))\n                            : (_openBlock(), _createElementBlock(\"span\", _hoisted_35, \"Geen acties\"))\n                        ])\n                      ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_20))\n                    }), 128 /* KEYED_FRAGMENT */))\n                  ])\n                ])\n              ]),\n              (!$setup.shown.length)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_36, _toDisplayString($setup.tabTotal ? \"Geen contactpersonen die hierbij passen.\" : $setup.archivedTab ? \"Er zijn geen gearchiveerde contactpersonen.\" : \"Nog geen contactpersonen.\"), 1 /* TEXT */))\n                : _createCommentVNode(\"v-if\", true),\n              _createElementVNode(\"div\", _hoisted_37, [\n                _createElementVNode(\"span\", _hoisted_38, _toDisplayString($setup.shown.length) + \" van \" + _toDisplayString($setup.filtered.length) + \" getoond\", 1 /* TEXT */),\n                ($setup.shown.length < $setup.filtered.length)\n                  ? (_openBlock(), _createElementBlock(\"button\", {\n                      key: 0,\n                      type: \"button\",\n                      class: \"contacts__more\",\n                      onClick: _cache[4] || (_cache[4] = $event => ($setup.limit += $setup.PAGE_SIZE))\n                    }, \"Meer laden\"))\n                  : _createCommentVNode(\"v-if\", true)\n              ])\n            ], 64 /* STABLE_FRAGMENT */)),\n      _createVNode($setup[\"ContextMenu\"], { ref: \"menu\" }, null, 512 /* NEED_PATCH */)\n    ], 8 /* PROPS */, _hoisted_13),\n    _createVNode($setup[\"EmployeeDialog\"], {\n      open: $setup.dialogOpen,\n      employee: $setup.editing,\n      contacts: $setup.employees,\n      channels: $props.bootstrap.channels,\n      \"select-company\": $setup.selectCompany,\n      companies: $setup.companies,\n      onClose: _cache[5] || (_cache[5] = $event => ($setup.dialogOpen = false)),\n      onSaved: $setup.saved,\n      onArchive: $setup.confirmArchive\n    }, null, 8 /* PROPS */, [\"open\", \"employee\", \"contacts\", \"channels\", \"select-company\", \"companies\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: Boolean($setup.archiving),\n      title: \"Contactpersoon archiveren\",\n      \"item-name\": $setup.archiving ? `${$setup.archiving.firstname} ${$setup.archiving.lastname}` : '',\n      message: \"Wil je deze contactpersoon archiveren?\",\n      consequence: \"De contactpersoon verdwijnt van het ontvangstscherm. Bezoek- en oproephistorie blijven behouden.\",\n      \"confirm-label\": \"Archiveren\",\n      \"pending-label\": \"Archiveren...\",\n      pending: $setup.archivePending,\n      onCancel: _cache[6] || (_cache[6] = $event => ($setup.archiving = null)),\n      onConfirm: $setup.archive\n    }, {\n      default: _withCtx(() => [\n        ($setup.archiveError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_39, \"Archiveren is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\"))\n          : (_openBlock(), _createElementBlock(\"span\", _hoisted_40, \"Wil je deze contactpersoon archiveren?\"))\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"item-name\", \"pending\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/ContactpersonenView.vue\";script.__scopeId = \"data-v-042319bd\";export default script;","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport { ADMIN_PLANS } from \"@mod-velkom/js/admin-plans\";\nimport type { AdminBootstrap } from \"../../../../../js/admin-rpc\";\nimport SettingsLayout from \"../../components/instellingen/SettingsLayout.vue\";\nimport OrganisatieTab from \"../../components/instellingen/OrganisatieTab.vue\";\nimport ReceptionSettingsPanel from \"../../components/instellingen/ReceptionSettingsPanel.vue\";\nimport PrivacyTab from \"../../components/instellingen/PrivacyTab.vue\";\nimport AbonnementTab from \"../../components/instellingen/AbonnementTab.vue\";\nimport CustomerUsersPanel from \"../../components/customer/users/CustomerUsersPanel.vue\";\nimport EmptyState from \"../../components/ui/EmptyState.vue\";\nimport Button from \"../../components/ui/Button.vue\";\nimport { avatar } from \"../../lib/avatar\";\nimport { customerHref } from \"../../lib/customer\";\nimport type { OrganizationInput, OrganizationProfile, PrivacySettings, ReceptionInput, ReceptionSettings } from \"../../lib/settings\";\n\nconst props = defineProps<{ bootstrap: AdminBootstrap }>();\nconst emit = defineEmits<{ logout: []; organizationSaved: [profile: OrganizationProfile] }>();\nconst api = rpc(\"velkom:admin\");\nconst settings = ref<Awaited<ReturnType<typeof api.settings>> | null>(null);\nconst screens = ref<Awaited<ReturnType<typeof api.screens>> | null>(null);\nconst memberCount = ref(0);\nconst error = ref(\"\");\nconst loading = ref(false);\nconst user = computed(() => ({ ...props.bootstrap.identity, initials: avatar(props.bootstrap.identity.name).initials }));\nconst orgName = computed(() => settings.value?.profile.name ?? props.bootstrap.customer.name);\nconst plan = computed(() => ADMIN_PLANS[props.bootstrap.subscription.plan]);\nconst usage = computed(() => [{ id: \"customer\", name: orgName.value, used: screens.value?.items.length ?? props.bootstrap.customer.screenCount, limit: screens.value ? screens.value.limit : props.bootstrap.customer.screenLimit }]);\n\nasync function load(): Promise<void> {\n  if (loading.value)\n    return;\n  loading.value = true;\n  error.value = \"\";\n  try {\n    const [saved, activeScreens, users] = await Promise.all([api.settings(), api.screens(), api.users()]);\n    settings.value = saved;\n    screens.value = activeScreens;\n    memberCount.value = users.members.length;\n  } catch {\n    error.value = \"De instellingen konden niet worden geladen. Probeer het opnieuw.\";\n  } finally {\n    loading.value = false;\n  }\n}\nasync function saveProfile(input: OrganizationInput) {\n  const result = await api.updateOrganization(input);\n  if (result.ok && settings.value) {\n    settings.value.profile = result.value;\n    emit(\"organizationSaved\", result.value);\n  }\n  return result;\n}\nasync function savePrivacy(input: PrivacySettings) {\n  const result = await api.updatePrivacy(input);\n  if (result.ok && settings.value)\n    settings.value.privacy = result.value;\n  return result;\n}\nasync function saveReception(input: ReceptionInput) {\n  const result = await api.updateReception(input);\n  if (result.ok && settings.value)\n    settings.value.reception = result.value;\n  return result;\n}\nonMounted(() => { void load(); });\n</script>\n\n<template>\n  <SettingsLayout :org-name=\"orgName\" :user=\"user\" :member-count=\"memberCount\" :plan-name=\"plan.name\" :retention-days=\"settings?.privacy.retentionDays\" show-logout @logout=\"emit('logout')\">\n    <template #organisatie>\n      <div v-if=\"settings\" class=\"organization-settings\">\n        <OrganisatieTab :profile=\"settings.profile\" :user=\"user\" :save-profile=\"saveProfile\" />\n        <ReceptionSettingsPanel :reception=\"settings.reception\" :save-reception=\"saveReception\" />\n      </div>\n      <EmptyState v-else-if=\"error\" kind=\"error\" title=\"Instellingen niet beschikbaar\" :description=\"error\"><template #actions><Button @click=\"load\">Opnieuw proberen</Button></template></EmptyState>\n      <p v-else role=\"status\">Instellingen laden...</p>\n    </template>\n    <template #gebruikers><CustomerUsersPanel :bootstrap=\"bootstrap\" @loaded=\"memberCount = $event\" /></template>\n    <template #abonnement>\n      <EmptyState v-if=\"error\" kind=\"error\" title=\"Instellingen niet beschikbaar\" :description=\"error\"><template #actions><Button @click=\"load\">Opnieuw proberen</Button></template></EmptyState>\n      <AbonnementTab v-else-if=\"screens\" :plan=\"bootstrap.subscription.plan\" :screen-usage=\"usage\" :screens-href=\"customerHref('schermen')\" />\n      <p v-else role=\"status\">Abonnement laden...</p>\n    </template>\n    <template #privacy>\n      <PrivacyTab v-if=\"settings\" :privacy=\"settings.privacy\" :save-privacy=\"savePrivacy\" />\n      <EmptyState v-else-if=\"error\" kind=\"error\" title=\"Instellingen niet beschikbaar\" :description=\"error\"><template #actions><Button @click=\"load\">Opnieuw proberen</Button></template></EmptyState>\n      <p v-else role=\"status\">Instellingen laden...</p>\n    </template>\n  </SettingsLayout>\n</template>\n\n<style scoped>\n.organization-settings { display: flex; flex-direction: column; gap: 24px; }\n</style>\n","/** Shared commercial facts for the authenticated application and server limits. */\nexport const ADMIN_PLANS = {\n  gratis: { name: \"Gratis\", monthlyPrice: 0, yearlyPrice: 0, screenLimit: 2 },\n  aankomst: { name: \"Aankomst\", monthlyPrice: 79, yearlyPrice: 790, screenLimit: 2 },\n  bezoek: { name: \"Bezoek\", monthlyPrice: 149, yearlyPrice: 1490, screenLimit: 5 },\n  ervaring: { name: \"Ervaring\", monthlyPrice: 249, yearlyPrice: 2490, screenLimit: null },\n} as const;\n\nexport type AdminPlanId = keyof typeof ADMIN_PLANS;\n\n/** Phone is always available; Teams only with the Teams calling addon. */\nexport function callChannels(addons: readonly string[] = []): Array<\"phone\" | \"teams\"> {\n  return addons.includes(\"teamscalling\") ? [\"phone\", \"teams\"] : [\"phone\"];\n}\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport SettingsMobileOverview from \"./SettingsMobileOverview.vue\";\nimport Icon from \"../ui/Icon.vue\";\nimport PageHeader from \"../ui/PageHeader.vue\";\nimport Tabs from \"../ui/Tabs.vue\";\nimport { useSectionRoute } from \"../../composables/useSectionRoute\";\nimport type { TabItem } from \"../../lib/ui\";\n\nconst props = defineProps<{\n  orgName: string;\n  user: { name: string; initials: string };\n  role?: string;\n  memberCount: number;\n  planName: string;\n  retentionDays?: number;\n  showLogout?: boolean;\n  roles?: boolean;\n}>();\nconst emit = defineEmits<{ logout: [] }>();\nconst tabs = computed<TabItem[]>(() => [\n  { id: \"organisatie\", label: \"Organisatie\" },\n  { id: \"gebruikers\", label: props.roles ? \"Gebruikers en rollen\" : \"Gebruikers\" },\n  { id: \"abonnement\", label: \"Abonnement\" },\n  { id: \"privacy\", label: \"Privacy\" },\n]);\nconst sectionRoute = useSectionRoute(() => tabs.value);\nconst mobileOverview = computed(() => !tabs.value.some(tab => tab.id === sectionRoute.query.value.tab));\nconst mobileHomeHref = computed(() => sectionRoute.href());\nconst mobileSections = computed(() => [\n  { id: \"organisatie\", title: \"Organisatie\", label: \"Organisatiegegevens\", description: props.orgName, href: sectionRoute.href([], { tab: \"organisatie\" }) },\n  { id: \"gebruikers\", title: \"Toegang\", label: props.roles ? \"Gebruikers en rollen\" : \"Gebruikers\", description: `${props.memberCount} ${props.memberCount === 1 ? \"gebruiker\" : \"gebruikers\"} in deze organisatie`, href: sectionRoute.href([], { tab: \"gebruikers\" }) },\n  { id: \"abonnement\", title: \"Abonnement\", label: \"Huidig abonnement\", description: props.planName, href: sectionRoute.href([], { tab: \"abonnement\" }) },\n  { id: \"privacy\", title: \"Privacy\", label: \"Bezoekersgegevens\", description: props.retentionDays === undefined ? \"Bezoekersgegevens en bewaartermijn\" : `Bezoekgegevens en bewaartermijn: ${props.retentionDays} dagen`, href: sectionRoute.href([], { tab: \"privacy\" }) },\n]);\n</script>\n\n<template>\n  <section class=\"settings\" :class=\"{ 'settings--overview': mobileOverview }\" data-testid=\"settings-view\">\n    <a v-if=\"!mobileOverview\" class=\"settings__mobile-back\" :href=\"mobileHomeHref\"><Icon name=\"chevron-left\" :size=\"20\" />Instellingen</a>\n    <PageHeader title=\"Instellingen\" :context=\"orgName\" description=\"Organisatie, gebruikers, abonnement en privacy.\" />\n    <SettingsMobileOverview v-if=\"mobileOverview\" class=\"settings__mobile\" :user=\"user\" :org-name=\"orgName\" :role=\"role ?? ''\" :sections=\"mobileSections\" :show-logout=\"showLogout\" @logout=\"emit('logout')\" />\n    <Tabs :tabs=\"tabs\" label=\"Onderdelen van instellingen\" class=\"settings__panels\">\n      <template #default=\"{ active }\"><slot :name=\"active\" /></template>\n    </Tabs>\n  </section>\n</template>\n\n<style scoped>\n.settings {\n  display: flex;\n  flex-direction: column;\n  gap: 28px;\n\n}\n.settings :deep(.page-header__dot) { display: none; }\n.settings__mobile, .settings__mobile-back { display: none; }\n@media (min-width: 768px) {\n  .settings :deep(.section-card) { box-sizing: content-box; border: 1px solid var(--border); background: var(--paper); }\n  .settings__panels { gap: 28px; }\n  .settings__panels :deep(.tabs__tab) { min-height: 50px; color: var(--foreground); font-size: 15px; font-weight: 600; }\n  .settings__panels :deep(.tabs__tab[aria-selected=\"true\"]) { font-weight: 700; }\n  /* Reserve the bold label's width so active tabs keep their neighbors in place. */\n  .settings__panels :deep(.tabs__label) { display: inline-block; }\n  .settings__panels :deep(.tabs__label::after) { display: block; height: 0; overflow: hidden; content: attr(data-label); font-weight: 700; visibility: hidden; }\n  /* The source keeps the cost table tabular even inside its narrow desktop column. */\n  .settings :deep(.dt__scroll) { overflow-x: auto; }\n  .settings :deep(.dt__table) { display: table; }\n  .settings :deep(.dt__table thead) { position: static; display: table-header-group; width: auto; height: auto; overflow: visible; clip: auto; }\n  .settings :deep(.dt__table tbody) { display: table-row-group; width: auto; }\n  .settings :deep(.dt__table tr) { display: table-row; width: auto; padding: 0; }\n  .settings :deep(.dt__table td) { display: table-cell; width: auto; padding: 12px; border-bottom: 1px solid var(--border); }\n  .settings :deep(.dt__table td:first-child) { margin: 0; font-family: inherit; font-size: 14px; font-weight: inherit; }\n  .settings :deep(.dt__table td::before) { display: none; }\n  .settings :deep(.dt__table .dt__cell--end) { text-align: right; }\n  .settings :deep(.dt__table th:first-child), .settings :deep(.dt__table td:first-child) { padding-left: 24px; }\n  .settings :deep(.dt__table th:last-child), .settings :deep(.dt__table td:last-child) { padding-right: 24px; }\n}\n@media (max-width: 767px) {\n  .settings { gap: 24px; }\n  .settings :deep(.section-card) { border-radius: 20px; }\n  .settings__mobile { display: flex; }\n  .settings--overview .settings__panels { display: none; }\n  .settings :deep(.page-header) { margin: 0; padding: 0; background: transparent; overflow: visible; }\n  .settings :deep(.page-header__row) { display: none; }\n  .settings :deep(.page-header__context), .settings :deep(.page-header__description) { display: none; }\n  .settings :deep(.page-header__title) { font-size: 36px; line-height: 1; font-weight: 650; letter-spacing: -0.06em; }\n  .settings__panels :deep(.tabs__list) { display: none; }\n  .settings__mobile-back { display: inline-flex; align-items: center; align-self: flex-start; gap: 4px; min-height: 44px; color: var(--foreground); text-decoration: none; font-size: 17px; font-weight: 600; }\n  .settings:has(.settings__mobile-back) :deep(.page-header__title) { font-size: 32px; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport Icon from \"../ui/Icon.vue\";\n\ndefineProps<{\n  user: { name: string; initials: string };\n  orgName: string;\n  role: string;\n  sections: Array<{ id: string; title: string; label: string; description: string; href: string }>;\n  showLogout: boolean;\n}>();\nconst emit = defineEmits<{ logout: [] }>();\n</script>\n\n<template>\n  <div class=\"mobile-settings\">\n    <a :href=\"sections[0].href\" class=\"mobile-settings__profile\">\n      <span class=\"mobile-settings__avatar\" aria-hidden=\"true\">{{ user.initials }}</span>\n      <span class=\"mobile-settings__person\"><strong>{{ user.name }}</strong><span>{{ role ? `${role} · ${orgName}` : orgName }}</span></span>\n      <Icon name=\"chevron-right\" :size=\"20\" />\n    </a>\n\n    <section v-for=\"section in sections\" :key=\"section.id\" class=\"mobile-settings__section\">\n      <h2>{{ section.title }}</h2>\n      <a :href=\"section.href\" class=\"mobile-settings__card\">\n        <span class=\"mobile-settings__field\"><strong>{{ section.label }}</strong><span>{{ section.description }}</span></span>\n        <Icon name=\"chevron-right\" :size=\"20\" />\n      </a>\n    </section>\n\n    <button v-if=\"showLogout\" type=\"button\" class=\"mobile-settings__logout\" data-testid=\"settings-mobile-logout\" @click=\"emit('logout')\">Uitloggen</button>\n    <p class=\"mobile-settings__footer\">Velkom · {{ orgName }}</p>\n  </div>\n</template>\n\n<style scoped>\n.mobile-settings { display: flex; flex-direction: column; gap: 24px; }\n.mobile-settings__profile { display: flex; align-items: center; gap: 14px; padding: 16px; border-radius: 20px; background: #ffffff; color: var(--foreground); text-decoration: none; }\n.mobile-settings__avatar { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: 50%; background: var(--sky); color: var(--foreground); font-size: 18px; font-weight: 700; }\n.mobile-settings__person { display: flex; flex: 1; flex-direction: column; gap: 2px; min-width: 0; }\n.mobile-settings__person strong { font-size: 18px; font-weight: 700; }\n.mobile-settings__person > span { font-size: 15px; color: var(--muted-foreground); }\n.mobile-settings__section { display: flex; flex-direction: column; gap: 8px; }\n.mobile-settings__section h2 { margin: 0 4px; font-family: var(--font-body); font-size: 15px; font-weight: 700; color: var(--muted-foreground); }\n.mobile-settings__card { display: flex; align-items: center; gap: 12px; min-height: 76px; padding: 0 16px; border-radius: 20px; background: #ffffff; color: var(--foreground); text-decoration: none; }\n.mobile-settings__field { display: flex; flex: 1; flex-direction: column; gap: 2px; padding: 12px 0; }\n.mobile-settings__field strong { font-size: 17px; font-weight: 600; }\n.mobile-settings__field > span { font-size: 15px; color: var(--muted-foreground); }\n.mobile-settings__logout { display: flex; align-items: center; justify-content: center; min-height: 56px; border: 1.5px solid var(--foreground); border-radius: 999px; background: transparent; color: var(--foreground); font-family: inherit; font-size: 17px; font-weight: 700; cursor: pointer; }\n.mobile-settings__footer { margin: 0; text-align: center; color: var(--muted-foreground); font-size: 15px; }\n.mobile-settings__profile:hover, .mobile-settings__card:hover { background: var(--selected); }\n.mobile-settings__logout:hover { background: var(--foreground); color: var(--background); }\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createVNode as _createVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"mobile-settings\" }\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = {\n  class: \"mobile-settings__avatar\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_4 = { class: \"mobile-settings__person\" }\nconst _hoisted_5 = [\"href\"]\nconst _hoisted_6 = { class: \"mobile-settings__field\" }\nconst _hoisted_7 = { class: \"mobile-settings__footer\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"a\", {\n      href: $props.sections[0].href,\n      class: \"mobile-settings__profile\"\n    }, [\n      _createElementVNode(\"span\", _hoisted_3, _toDisplayString($props.user.initials), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_4, [\n        _createElementVNode(\"strong\", null, _toDisplayString($props.user.name), 1 /* TEXT */),\n        _createElementVNode(\"span\", null, _toDisplayString($props.role ? `${$props.role} · ${$props.orgName}` : $props.orgName), 1 /* TEXT */)\n      ]),\n      _createVNode($setup[\"Icon\"], {\n        name: \"chevron-right\",\n        size: 20\n      })\n    ], 8 /* PROPS */, _hoisted_2),\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.sections, (section) => {\n      return (_openBlock(), _createElementBlock(\"section\", {\n        key: section.id,\n        class: \"mobile-settings__section\"\n      }, [\n        _createElementVNode(\"h2\", null, _toDisplayString(section.title), 1 /* TEXT */),\n        _createElementVNode(\"a\", {\n          href: section.href,\n          class: \"mobile-settings__card\"\n        }, [\n          _createElementVNode(\"span\", _hoisted_6, [\n            _createElementVNode(\"strong\", null, _toDisplayString(section.label), 1 /* TEXT */),\n            _createElementVNode(\"span\", null, _toDisplayString(section.description), 1 /* TEXT */)\n          ]),\n          _createVNode($setup[\"Icon\"], {\n            name: \"chevron-right\",\n            size: 20\n          })\n        ], 8 /* PROPS */, _hoisted_5)\n      ]))\n    }), 128 /* KEYED_FRAGMENT */)),\n    ($props.showLogout)\n      ? (_openBlock(), _createElementBlock(\"button\", {\n          key: 0,\n          type: \"button\",\n          class: \"mobile-settings__logout\",\n          \"data-testid\": \"settings-mobile-logout\",\n          onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('logout')))\n        }, \"Uitloggen\"))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"p\", _hoisted_7, \"Velkom · \" + _toDisplayString($props.orgName), 1 /* TEXT */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsMobileOverview.vue\";script.__scopeId = \"data-v-6632a755\";export default script;","<template>\n  <div class=\"tabs\">\n    <div class=\"tabs__list\" role=\"tablist\" :aria-label=\"label\" @keydown=\"onKeydown\">\n      <button v-for=\"tab in tabs\" :id=\"`${baseId}-tab-${tab.id}`\" :key=\"tab.id\" ref=\"tabEls\" type=\"button\" role=\"tab\"\n              class=\"tabs__tab\" :aria-selected=\"tab.id === active\" :aria-controls=\"`${baseId}-panel`\"\n              :tabindex=\"tab.id === active ? 0 : -1\" :data-testid=\"`tab-${tab.id}`\" @click=\"select(tab.id)\">\n        <Icon v-if=\"tab.locked\" name=\"locked\" :size=\"14\" class=\"tabs__lock\" />\n        <span class=\"tabs__label\" :data-label=\"tab.label\">{{ tab.label }}</span>\n        <span v-if=\"tab.count !== undefined\" class=\"tabs__count tabular\">{{ tab.count }}</span>\n        <span v-if=\"tab.locked\" class=\"visually-hidden\">(vergrendeld)</span>\n      </button>\n    </div>\n    <div :id=\"`${baseId}-panel`\" class=\"tabs__panel\" role=\"tabpanel\" :aria-labelledby=\"`${baseId}-tab-${active}`\" tabindex=\"-1\">\n      <slot :active=\"active\" />\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { nextTick, ref, useId } from \"vue\";\nimport Icon from \"./Icon.vue\";\nimport { useSectionRoute } from \"../../composables/useSectionRoute\";\nimport type { TabItem } from \"../../lib/ui\";\n\n/**\n * URL-driven tabs: the active tab is `?tab=` in the hash route, so refresh, deep links and back/forward work.\n * Other query parameters are kept unless listed in `resetQuery`.\n */\nconst props = withDefaults(defineProps<{ tabs: TabItem[]; label: string; resetQuery?: string[] }>(), { resetQuery: () => [] });\n\nconst baseId = useId();\nconst tabEls = ref<HTMLButtonElement[]>([]);\nconst sectionRoute = useSectionRoute(() => props.tabs);\nconst active = sectionRoute.activeTab;\n\nfunction select(id: string): void {\n  if (id === active.value)\n    return;\n  sectionRoute.setQuery({ tab: id, ...Object.fromEntries(props.resetQuery.map(key => [key, null])) });\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n  const index = props.tabs.findIndex(tab => tab.id === active.value);\n  const keys: Record<string, number> = { ArrowRight: index + 1, ArrowLeft: index - 1, Home: 0, End: props.tabs.length - 1 };\n  if (!(event.key in keys))\n    return;\n  event.preventDefault();\n  const next = props.tabs[(keys[event.key] + props.tabs.length) % props.tabs.length];\n  select(next.id);\n  void nextTick(() => tabEls.value.find(el => el.id === `${baseId}-tab-${next.id}`)?.focus());\n}\n</script>\n\n<style scoped>\n.tabs {\n  display: flex;\n  flex-direction: column;\n  gap: 24px;\n  min-width: 0;\n}\n\n.tabs__list {\n  display: flex;\n  gap: 4px;\n  overflow-x: auto;\n  overflow-y: hidden;\n  /* An inset line instead of a border: a scroll container clips its children at the border, so the active tab's underline could not cover it. */\n  box-shadow: inset 0 -1px 0 var(--border);\n  scrollbar-width: none;\n}\n\n/* Same weight and size in every state, so selecting a tab never shifts the row. */\n.tabs__tab {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n  flex-shrink: 0;\n  min-height: 48px;\n  padding: 0 16px;\n  border: none;\n  border-bottom: 2px solid transparent;\n  background: transparent;\n  color: var(--muted-foreground);\n  font-size: 14px;\n  font-weight: 700;\n  white-space: nowrap;\n  cursor: pointer;\n}\n\n.tabs__tab:hover {\n  color: var(--foreground);\n}\n\n.tabs__tab[aria-selected=\"true\"] {\n  color: var(--foreground);\n  border-bottom-color: var(--primary);\n}\n\n.tabs__tab:focus-visible {\n  outline-offset: -2px;\n}\n\n.tabs__count {\n  min-width: 20px;\n  padding: 0 6px;\n  border-radius: var(--radius-control);\n  background: var(--selected);\n  font-size: 14px;\n  line-height: 20px;\n  text-align: center;\n}\n\n.tabs__lock {\n  color: var(--subtle-foreground);\n}\n\n.tabs__panel {\n  min-width: 0;\n  outline: none;\n}\n</style>\n","import { computed } from \"vue\";\nimport { buildHash, navigate, replaceRoute, route } from \"../lib/router\";\nimport type { TabItem } from \"../lib/ui\";\n\n/**\n * Route access for a section view: `#/o/:org/:section/...rest?query`.\n * Sub-pages live in `rest` (bezoeken/<id>, locaties/<slug>, bezoekersreis/<moment>); tabs and filters in `query`.\n *\n *   const r = useSectionRoute(() => tabs);\n *   r.activeTab.value          // \"vandaag\" (first tab when missing or unknown)\n *   r.setQuery({ status: \"binnen\" }, { replace: true })   // filter change without a history entry\n *   r.href([\"v-123\"])          // link to a detail sub-page\n */\nexport function useSectionRoute(tabs?: () => TabItem[]) {\n  const org = computed(() => route.value.org);\n  const section = computed(() => route.value.section);\n  const rest = computed(() => route.value.rest);\n  const query = computed(() => route.value.query);\n\n  const activeTab = computed(() => {\n    const list = tabs?.() ?? [];\n    const requested = query.value.tab;\n    return list.some(tab => tab.id === requested) ? requested : list[0]?.id ?? \"\";\n  });\n\n  function withQuery(patch: Record<string, string | null>): Record<string, string> {\n    const next: Record<string, string> = { ...query.value };\n    for (const [key, value] of Object.entries(patch)) {\n      if (value === null || value === \"\")\n        delete next[key];\n      else\n        next[key] = value;\n    }\n    return next;\n  }\n\n  return {\n    org,\n    section,\n    rest,\n    query,\n    activeTab,\n    /** Update query parameters; null or \"\" removes one. `replace` avoids a history entry (typing in a filter). */\n    setQuery(patch: Record<string, string | null>, options: { replace?: boolean } = {}) {\n      const next = withQuery(patch);\n      if (options.replace)\n        replaceRoute(org.value, section.value, next, rest.value);\n      else\n        navigate(org.value, section.value, next, rest.value);\n    },\n    /** Open a sub-page of this section (or the section root with `[]`). */\n    goTo(subPath: readonly string[], nextQuery: Record<string, string> = {}) {\n      navigate(org.value, section.value, nextQuery, subPath);\n    },\n    href(subPath: readonly string[] = [], nextQuery: Record<string, string> = {}) {\n      return buildHash(org.value, section.value, nextQuery, subPath);\n    },\n  };\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"tabs\" }\nconst _hoisted_2 = [\"aria-label\"]\nconst _hoisted_3 = [\"id\", \"aria-selected\", \"aria-controls\", \"tabindex\", \"data-testid\", \"onClick\"]\nconst _hoisted_4 = [\"data-label\"]\nconst _hoisted_5 = {\n  key: 1,\n  class: \"tabs__count tabular\"\n}\nconst _hoisted_6 = {\n  key: 2,\n  class: \"visually-hidden\"\n}\nconst _hoisted_7 = [\"id\", \"aria-labelledby\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"div\", {\n      class: \"tabs__list\",\n      role: \"tablist\",\n      \"aria-label\": $props.label,\n      onKeydown: $setup.onKeydown\n    }, [\n      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.tabs, (tab) => {\n        return (_openBlock(), _createElementBlock(\"button\", {\n          id: `${$setup.baseId}-tab-${tab.id}`,\n          key: tab.id,\n          ref_for: true,\n          ref: \"tabEls\",\n          type: \"button\",\n          role: \"tab\",\n          class: \"tabs__tab\",\n          \"aria-selected\": tab.id === $setup.active,\n          \"aria-controls\": `${$setup.baseId}-panel`,\n          tabindex: tab.id === $setup.active ? 0 : -1,\n          \"data-testid\": `tab-${tab.id}`,\n          onClick: $event => ($setup.select(tab.id))\n        }, [\n          (tab.locked)\n            ? (_openBlock(), _createBlock($setup[\"Icon\"], {\n                key: 0,\n                name: \"locked\",\n                size: 14,\n                class: \"tabs__lock\"\n              }))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"span\", {\n            class: \"tabs__label\",\n            \"data-label\": tab.label\n          }, _toDisplayString(tab.label), 9 /* TEXT, PROPS */, _hoisted_4),\n          (tab.count !== undefined)\n            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, _toDisplayString(tab.count), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          (tab.locked)\n            ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, \"(vergrendeld)\"))\n            : _createCommentVNode(\"v-if\", true)\n        ], 8 /* PROPS */, _hoisted_3))\n      }), 128 /* KEYED_FRAGMENT */))\n    ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_2),\n    _createElementVNode(\"div\", {\n      id: `${$setup.baseId}-panel`,\n      class: \"tabs__panel\",\n      role: \"tabpanel\",\n      \"aria-labelledby\": `${$setup.baseId}-tab-${$setup.active}`,\n      tabindex: \"-1\"\n    }, [\n      _renderSlot(_ctx.$slots, \"default\", { active: $setup.active }, undefined, true)\n    ], 8 /* PROPS */, _hoisted_7)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Tabs.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Tabs.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Tabs.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Tabs.vue\";script.__scopeId = \"data-v-ab77dc95\";export default script;","import { createVNode as _createVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, renderSlot as _renderSlot, withCtx as _withCtx, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"href\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", {\n    class: _normalizeClass([\"settings\", { 'settings--overview': $setup.mobileOverview }]),\n    \"data-testid\": \"settings-view\"\n  }, [\n    (!$setup.mobileOverview)\n      ? (_openBlock(), _createElementBlock(\"a\", {\n          key: 0,\n          class: \"settings__mobile-back\",\n          href: $setup.mobileHomeHref\n        }, [\n          _createVNode($setup[\"Icon\"], {\n            name: \"chevron-left\",\n            size: 20\n          }),\n          _cache[1] || (_cache[1] = _createTextVNode(\"Instellingen\", -1 /* CACHED */))\n        ], 8 /* PROPS */, _hoisted_1))\n      : _createCommentVNode(\"v-if\", true),\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Instellingen\",\n      context: $props.orgName,\n      description: \"Organisatie, gebruikers, abonnement en privacy.\"\n    }, null, 8 /* PROPS */, [\"context\"]),\n    ($setup.mobileOverview)\n      ? (_openBlock(), _createBlock($setup[\"SettingsMobileOverview\"], {\n          key: 1,\n          class: \"settings__mobile\",\n          user: $props.user,\n          \"org-name\": $props.orgName,\n          role: $props.role ?? '',\n          sections: $setup.mobileSections,\n          \"show-logout\": $props.showLogout,\n          onLogout: _cache[0] || (_cache[0] = $event => ($setup.emit('logout')))\n        }, null, 8 /* PROPS */, [\"user\", \"org-name\", \"role\", \"sections\", \"show-logout\"]))\n      : _createCommentVNode(\"v-if\", true),\n    _createVNode($setup[\"Tabs\"], {\n      tabs: $setup.tabs,\n      label: \"Onderdelen van instellingen\",\n      class: \"settings__panels\"\n    }, {\n      default: _withCtx(({ active }) => [\n        _renderSlot(_ctx.$slots, active, {}, undefined, true)\n      ]),\n      _: 3 /* FORWARDED */\n    }, 8 /* PROPS */, [\"tabs\"])\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/SettingsLayout.vue\";script.__scopeId = \"data-v-cd1956c7\";export default script;","<template>\n  <div class=\"org-tab\">\n    <SectionCard title=\"Organisatiegegevens\" class=\"org-tab__company\">\n      <form class=\"org-tab__form\" novalidate data-testid=\"org-profile-form\" :aria-busy=\"pending\" @submit.prevent=\"save\">\n        <fieldset class=\"org-tab__fields\" :disabled=\"pending\">\n        <div class=\"org-tab__row\">\n        <FormField label=\"Bedrijfsnaam\" :field-id=\"form.fieldId('name')\" :error=\"form.errors.name\"\n                   required>\n          <TextInput v-model=\"model.name\" autocomplete=\"organization\" />\n        </FormField>\n        <FormField label=\"Statutaire naam\" :field-id=\"form.fieldId('legalName')\" :error=\"form.errors.legalName\">\n          <TextInput v-model=\"model.legalName\" />\n        </FormField>\n        </div>\n\n        <div class=\"org-tab__logo\">\n          <p class=\"org-tab__logo-title\">Logo</p>\n          <div class=\"org-tab__logo-row\">\n            <span class=\"org-tab__logo-mark\" aria-hidden=\"true\">{{ profile.logoText }}</span>\n          </div>\n          <p class=\"org-tab__muted\">Deze initialen worden automatisch afgeleid van de bedrijfsnaam.</p>\n        </div>\n\n        <fieldset class=\"org-tab__group\">\n          <legend>Correspondentie</legend>\n          <FormField label=\"E-mailadres\" :field-id=\"form.fieldId('email')\" :error=\"form.errors.email\">\n            <TextInput v-model=\"model.email\" type=\"email\" inputmode=\"email\" autocomplete=\"email\" />\n          </FormField>\n          <FormField label=\"Telefoonnummer\" :field-id=\"form.fieldId('phone')\" :error=\"form.errors.phone\">\n            <TextInput v-model=\"model.phone\" type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\" />\n          </FormField>\n          <FormField label=\"Adres\" :field-id=\"form.fieldId('address')\" :error=\"form.errors.address\">\n            <TextInput v-model=\"model.address\" autocomplete=\"street-address\" />\n          </FormField>\n        </fieldset>\n\n        <fieldset class=\"org-tab__language\">\n          <legend>Standaardtaal</legend>\n          <div class=\"org-tab__language-options\">\n            <label v-for=\"option in languageOptions\" :key=\"option.value\" :class=\"{ 'is-selected': model.defaultLanguage === option.value }\">\n              <input v-model=\"model.defaultLanguage\" type=\"radio\" :value=\"option.value\" name=\"organization-language\">{{ option.label }}\n            </label>\n          </div>\n        </fieldset>\n        <p v-if=\"form.errors.defaultLanguage\" class=\"org-tab__error\" role=\"alert\">{{ form.errors.defaultLanguage }}</p>\n\n        </fieldset>\n        <p v-if=\"saveError\" class=\"org-tab__error\" role=\"alert\">{{ saveError }}</p>\n        <div class=\"org-tab__actions\">\n          <Button :disabled=\"pending || !guard.isDirty.value\" data-testid=\"org-profile-reset\" @click=\"restore\">Herstellen</Button>\n          <Button type=\"submit\" variant=\"primary\" :disabled=\"pending\" data-testid=\"org-profile-save\">{{ pending ? \"Opslaan...\" : \"Opslaan\" }}</Button>\n        </div>\n      </form>\n    </SectionCard>\n\n    <SectionCard title=\"Jouw profiel\" class=\"org-tab__profile\">\n      <div class=\"org-tab__person\">\n        <span class=\"org-tab__avatar\" aria-hidden=\"true\">{{ user.initials }}</span>\n        <span><strong>{{ user.name }}</strong><span class=\"org-tab__email\">{{ user.email }}</span></span>\n      </div>\n      <dl v-if=\"role\" class=\"org-tab__facts\"><div><dt>Rol</dt><dd>{{ role }}</dd></div></dl>\n    </SectionCard>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from \"vue\";\nimport Button from \"../ui/Button.vue\";\nimport FormField from \"../ui/FormField.vue\";\nimport SectionCard from \"../ui/SectionCard.vue\";\nimport TextInput from \"../ui/TextInput.vue\";\nimport { useGuardedForm } from \"../../composables/useFormGuard\";\nimport { rules, useFormValidation } from \"../../composables/useFormValidation\";\nimport type { OrganizationInput, OrganizationProfile, SettingsSave } from \"../../lib/settings\";\nimport { showToast } from \"../../lib/toast\";\n\nconst props = defineProps<{\n  profile: OrganizationProfile;\n  user: { name: string; email: string; initials: string };\n  role?: string;\n  saveProfile: SettingsSave<OrganizationInput, OrganizationProfile>;\n}>();\nconst emit = defineEmits<{ saved: [profile: OrganizationProfile] }>();\nconst languageOptions = [{ value: \"nl\", label: \"Nederlands\" }, { value: \"en\", label: \"Engels\" }];\n\nfunction snapshot(profile: OrganizationProfile): OrganizationInput {\n  return { name: profile.name, legalName: profile.legalName, email: profile.email, phone: profile.phone, address: profile.address, defaultLanguage: profile.defaultLanguage };\n}\n\nconst model = reactive(snapshot(props.profile));\nconst pending = ref(false);\nconst saveError = ref(\"\");\nconst guard = useGuardedForm(\"Organisatiegegevens\", model);\nconst form = useFormValidation(model, {\n  name: [rules.required(\"Vul een bedrijfsnaam in.\"), rules.maxLength(80)],\n  legalName: [rules.maxLength(120)],\n  email: [rules.email()],\n  phone: [rules.phone()],\n  address: [rules.maxLength(160)],\n});\n\nasync function save(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  saveError.value = \"\";\n  try {\n    const result = await props.saveProfile({ ...model });\n    if (!result.ok) {\n      saveError.value = result.errors.form ?? \"\";\n      for (const [field, message] of Object.entries(result.errors))\n        form.setError(field as keyof typeof model, message);\n      return;\n    }\n    guard.load(snapshot(result.value));\n    form.reset();\n    emit(\"saved\", result.value);\n    showToast(result.message ?? \"Organisatiegegevens opgeslagen\");\n  } catch {\n    saveError.value = \"Opslaan is niet gelukt. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n\nfunction restore(): void {\n  guard.revert();\n  form.reset();\n  saveError.value = \"\";\n}\n</script>\n\n<style scoped>\n.org-tab__fields { display: contents; margin: 0; padding: 0; border: 0; }\n.org-tab__error { margin: 0; color: var(--danger); }\n.org-tab { display: flex; flex-wrap: wrap; gap: 24px; align-items: flex-start; }\n.org-tab__company { flex: 2 1 520px; padding: 0; gap: 0; }\n.org-tab__company :deep(.section-card__header) { padding: 20px 24px 4px; }\n.org-tab__form { display: flex; flex-direction: column; gap: 18px; padding: 12px 24px 0; }\n.org-tab__row, .org-tab__group { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }\n.org-tab__form :deep(.field__label) { font-weight: 700; }\n.org-tab__form :deep(.field__error:empty) { display: none; }\n.org-tab__form :deep(.v-control) { height: 48px; min-height: 48px; background: #ffffff; }\n.org-tab__group { margin: 0; padding: 16px 0 0; border: 0; border-top: 1px solid var(--border); }\n.org-tab__group > :last-child { grid-column: 1 / -1; }\n.org-tab__group legend { padding: 0 0 4px; font-family: var(--font-display); font-size: 18px; font-weight: 600; letter-spacing: -0.03em; }\n.org-tab__logo { display: flex; flex-direction: column; gap: 8px; }\n.org-tab__logo-row { display: flex; flex-wrap: wrap; align-items: center; gap: 16px; }\n.org-tab__logo-mark { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 50%; background: var(--foreground); color: var(--cream); font-family: var(--font-display); font-size: 22px; font-weight: 700; }\n.org-tab__logo-title { margin: 0; font-size: 14px; font-weight: 700; }\n.org-tab__muted { margin: 0; color: var(--muted-foreground); font-size: 13px; }\n.org-tab__language { margin: 0; padding: 0; border: 0; }\n.org-tab__language legend { margin-bottom: 6px; padding: 0; font-size: 14px; font-weight: 700; }\n.org-tab__language-options { display: inline-flex; flex-wrap: wrap; gap: 4px; padding: 4px; border-radius: 999px; background: var(--selected); }\n.org-tab__language-options label { position: relative; display: inline-flex; align-items: center; min-height: 40px; padding: 0 18px; border-radius: 999px; font-size: 14px; font-weight: 700; cursor: pointer; }\n.org-tab__language-options .is-selected { background: var(--foreground); color: var(--cream); }\n.org-tab__language-options input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }\n.org-tab__language-options label:has(:focus-visible) { outline: 2px solid var(--ring); outline-offset: 2px; }\n.org-tab__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12px; margin: 2px -24px 0; padding: 16px 24px; border-top: 1px solid var(--border); }\n.org-tab__profile { flex: 1 1 280px; padding: 20px 24px; gap: 14px; }\n.org-tab__person { display: flex; align-items: center; gap: 12px; line-height: 1.3; }\n.org-tab__avatar { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 48px; height: 48px; border-radius: 50%; background: var(--lime); font-size: 15px; font-weight: 700; }\n.org-tab__email { display: block; margin-top: 2px; font-size: 14px; color: var(--muted-foreground); overflow-wrap: anywhere; }\n.org-tab__facts { margin: 0; font-size: 14px; }\n.org-tab__facts div { display: grid; grid-template-columns: auto 1fr; gap: 16px; padding: 8px 0; border-top: 1px solid var(--border); }\n.org-tab__facts dt { color: var(--muted-foreground); }\n.org-tab__facts dd { margin: 0; font-weight: 700; }\n@media (max-width: 767px) {\n  .org-tab__company, .org-tab__profile { flex-basis: 100%; border: 0; border-radius: 20px; background: #ffffff; }\n  .org-tab__row, .org-tab__group { grid-template-columns: minmax(0, 1fr); }\n  .org-tab__company :deep(.section-card__header) { padding: 20px 16px 4px; }\n  .org-tab__form { padding-right: 16px; padding-left: 16px; }\n  .org-tab__actions { margin-right: -16px; margin-left: -16px; padding-right: 16px; padding-left: 16px; }\n}\n</style>\n","import { createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelRadio as _vModelRadio, withDirectives as _withDirectives, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode, withModifiers as _withModifiers } from \"vue\"\n\nconst _hoisted_1 = { class: \"org-tab\" }\nconst _hoisted_2 = [\"aria-busy\"]\nconst _hoisted_3 = [\"disabled\"]\nconst _hoisted_4 = { class: \"org-tab__row\" }\nconst _hoisted_5 = { class: \"org-tab__logo\" }\nconst _hoisted_6 = { class: \"org-tab__logo-row\" }\nconst _hoisted_7 = {\n  class: \"org-tab__logo-mark\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_8 = { class: \"org-tab__group\" }\nconst _hoisted_9 = { class: \"org-tab__language\" }\nconst _hoisted_10 = { class: \"org-tab__language-options\" }\nconst _hoisted_11 = [\"value\"]\nconst _hoisted_12 = {\n  key: 0,\n  class: \"org-tab__error\",\n  role: \"alert\"\n}\nconst _hoisted_13 = {\n  key: 0,\n  class: \"org-tab__error\",\n  role: \"alert\"\n}\nconst _hoisted_14 = { class: \"org-tab__actions\" }\nconst _hoisted_15 = { class: \"org-tab__person\" }\nconst _hoisted_16 = {\n  class: \"org-tab__avatar\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_17 = { class: \"org-tab__email\" }\nconst _hoisted_18 = {\n  key: 0,\n  class: \"org-tab__facts\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createVNode($setup[\"SectionCard\"], {\n      title: \"Organisatiegegevens\",\n      class: \"org-tab__company\"\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"form\", {\n          class: \"org-tab__form\",\n          novalidate: \"\",\n          \"data-testid\": \"org-profile-form\",\n          \"aria-busy\": $setup.pending,\n          onSubmit: _withModifiers($setup.save, [\"prevent\"])\n        }, [\n          _createElementVNode(\"fieldset\", {\n            class: \"org-tab__fields\",\n            disabled: $setup.pending\n          }, [\n            _createElementVNode(\"div\", _hoisted_4, [\n              _createVNode($setup[\"FormField\"], {\n                label: \"Bedrijfsnaam\",\n                \"field-id\": $setup.form.fieldId('name'),\n                error: $setup.form.errors.name,\n                required: \"\"\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"TextInput\"], {\n                    modelValue: $setup.model.name,\n                    \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.name) = $event)),\n                    autocomplete: \"organization\"\n                  }, null, 8 /* PROPS */, [\"modelValue\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n              _createVNode($setup[\"FormField\"], {\n                label: \"Statutaire naam\",\n                \"field-id\": $setup.form.fieldId('legalName'),\n                error: $setup.form.errors.legalName\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"TextInput\"], {\n                    modelValue: $setup.model.legalName,\n                    \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.model.legalName) = $event))\n                  }, null, 8 /* PROPS */, [\"modelValue\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"field-id\", \"error\"])\n            ]),\n            _createElementVNode(\"div\", _hoisted_5, [\n              _cache[6] || (_cache[6] = _createElementVNode(\"p\", { class: \"org-tab__logo-title\" }, \"Logo\", -1 /* CACHED */)),\n              _createElementVNode(\"div\", _hoisted_6, [\n                _createElementVNode(\"span\", _hoisted_7, _toDisplayString($props.profile.logoText), 1 /* TEXT */)\n              ]),\n              _cache[7] || (_cache[7] = _createElementVNode(\"p\", { class: \"org-tab__muted\" }, \"Deze initialen worden automatisch afgeleid van de bedrijfsnaam.\", -1 /* CACHED */))\n            ]),\n            _createElementVNode(\"fieldset\", _hoisted_8, [\n              _cache[8] || (_cache[8] = _createElementVNode(\"legend\", null, \"Correspondentie\", -1 /* CACHED */)),\n              _createVNode($setup[\"FormField\"], {\n                label: \"E-mailadres\",\n                \"field-id\": $setup.form.fieldId('email'),\n                error: $setup.form.errors.email\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"TextInput\"], {\n                    modelValue: $setup.model.email,\n                    \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.model.email) = $event)),\n                    type: \"email\",\n                    inputmode: \"email\",\n                    autocomplete: \"email\"\n                  }, null, 8 /* PROPS */, [\"modelValue\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n              _createVNode($setup[\"FormField\"], {\n                label: \"Telefoonnummer\",\n                \"field-id\": $setup.form.fieldId('phone'),\n                error: $setup.form.errors.phone\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"TextInput\"], {\n                    modelValue: $setup.model.phone,\n                    \"onUpdate:modelValue\": _cache[3] || (_cache[3] = $event => (($setup.model.phone) = $event)),\n                    type: \"tel\",\n                    inputmode: \"tel\",\n                    autocomplete: \"tel\"\n                  }, null, 8 /* PROPS */, [\"modelValue\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n              _createVNode($setup[\"FormField\"], {\n                label: \"Adres\",\n                \"field-id\": $setup.form.fieldId('address'),\n                error: $setup.form.errors.address\n              }, {\n                default: _withCtx(() => [\n                  _createVNode($setup[\"TextInput\"], {\n                    modelValue: $setup.model.address,\n                    \"onUpdate:modelValue\": _cache[4] || (_cache[4] = $event => (($setup.model.address) = $event)),\n                    autocomplete: \"street-address\"\n                  }, null, 8 /* PROPS */, [\"modelValue\"])\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"field-id\", \"error\"])\n            ]),\n            _createElementVNode(\"fieldset\", _hoisted_9, [\n              _cache[9] || (_cache[9] = _createElementVNode(\"legend\", null, \"Standaardtaal\", -1 /* CACHED */)),\n              _createElementVNode(\"div\", _hoisted_10, [\n                (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.languageOptions, (option) => {\n                  return _createElementVNode(\"label\", {\n                    key: option.value,\n                    class: _normalizeClass({ 'is-selected': $setup.model.defaultLanguage === option.value })\n                  }, [\n                    _withDirectives(_createElementVNode(\"input\", {\n                      \"onUpdate:modelValue\": _cache[5] || (_cache[5] = $event => (($setup.model.defaultLanguage) = $event)),\n                      type: \"radio\",\n                      value: option.value,\n                      name: \"organization-language\"\n                    }, null, 8 /* PROPS */, _hoisted_11), [\n                      [_vModelRadio, $setup.model.defaultLanguage]\n                    ]),\n                    _createTextVNode(_toDisplayString(option.label), 1 /* TEXT */)\n                  ], 2 /* CLASS */)\n                }), 64 /* STABLE_FRAGMENT */))\n              ])\n            ]),\n            ($setup.form.errors.defaultLanguage)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_12, _toDisplayString($setup.form.errors.defaultLanguage), 1 /* TEXT */))\n              : _createCommentVNode(\"v-if\", true)\n          ], 8 /* PROPS */, _hoisted_3),\n          ($setup.saveError)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, _toDisplayString($setup.saveError), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"div\", _hoisted_14, [\n            _createVNode($setup[\"Button\"], {\n              disabled: $setup.pending || !$setup.guard.isDirty.value,\n              \"data-testid\": \"org-profile-reset\",\n              onClick: $setup.restore\n            }, {\n              default: _withCtx(() => _cache[10] || (_cache[10] = [\n                _createTextVNode(\"Herstellen\", -1 /* CACHED */)\n              ])),\n              _: 1 /* STABLE */,\n              __: [10]\n            }, 8 /* PROPS */, [\"disabled\"]),\n            _createVNode($setup[\"Button\"], {\n              type: \"submit\",\n              variant: \"primary\",\n              disabled: $setup.pending,\n              \"data-testid\": \"org-profile-save\"\n            }, {\n              default: _withCtx(() => [\n                _createTextVNode(_toDisplayString($setup.pending ? \"Opslaan...\" : \"Opslaan\"), 1 /* TEXT */)\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"disabled\"])\n          ])\n        ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_2)\n      ]),\n      _: 1 /* STABLE */\n    }),\n    _createVNode($setup[\"SectionCard\"], {\n      title: \"Jouw profiel\",\n      class: \"org-tab__profile\"\n    }, {\n      default: _withCtx(() => [\n        _createElementVNode(\"div\", _hoisted_15, [\n          _createElementVNode(\"span\", _hoisted_16, _toDisplayString($props.user.initials), 1 /* TEXT */),\n          _createElementVNode(\"span\", null, [\n            _createElementVNode(\"strong\", null, _toDisplayString($props.user.name), 1 /* TEXT */),\n            _createElementVNode(\"span\", _hoisted_17, _toDisplayString($props.user.email), 1 /* TEXT */)\n          ])\n        ]),\n        ($props.role)\n          ? (_openBlock(), _createElementBlock(\"dl\", _hoisted_18, [\n              _createElementVNode(\"div\", null, [\n                _cache[11] || (_cache[11] = _createElementVNode(\"dt\", null, \"Rol\", -1 /* CACHED */)),\n                _createElementVNode(\"dd\", null, _toDisplayString($props.role), 1 /* TEXT */)\n              ])\n            ]))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */\n    })\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/OrganisatieTab.vue\";script.__scopeId = \"data-v-f02d983f\";export default script;","<script setup lang=\"ts\">\nimport { reactive, ref } from \"vue\";\nimport Button from \"../ui/Button.vue\";\nimport FormField from \"../ui/FormField.vue\";\nimport SectionCard from \"../ui/SectionCard.vue\";\nimport Select from \"../ui/Select.vue\";\nimport { useGuardedForm } from \"../../composables/useFormGuard\";\nimport { useFormValidation } from \"../../composables/useFormValidation\";\nimport { showToast } from \"../../lib/toast\";\nimport { customerHref } from \"../../lib/customer\";\nimport type { ReceptionInput, ReceptionSettings, SettingsSave } from \"../../lib/settings\";\n\nconst props = defineProps<{ reception: ReceptionSettings; saveReception: SettingsSave<ReceptionInput, ReceptionSettings> }>();\nconst model = reactive<ReceptionInput>({ flow: props.reception.flow });\nconst pending = ref(false);\nconst saveError = ref(\"\");\nconst guard = useGuardedForm(\"Ontvangstscherm\", model);\nconst form = useFormValidation(model, { flow: [] });\nconst flows = [{ value: \"standaard\", label: \"Standaard: eerst naam, dan contactpersoon\" }, { value: \"contactpersoon\", label: \"Eerst contactpersoon, dan naam\" }, { value: \"bedrijf\", label: \"Eerst bedrijf kiezen (meerdere bedrijven)\" }];\n\nasync function save(): Promise<void> {\n  if (pending.value)\n    return;\n  pending.value = true;\n  saveError.value = \"\";\n  form.reset();\n  try {\n    const result = await props.saveReception({ ...model });\n    if (!result.ok) {\n      saveError.value = result.errors.form ?? \"\";\n      for (const [field, message] of Object.entries(result.errors))\n        form.setError(field as keyof typeof model, message);\n      return;\n    }\n    guard.load({ flow: result.value.flow });\n    showToast(\"Ontvangstinstellingen opgeslagen\");\n  } catch {\n    saveError.value = \"Opslaan is niet gelukt. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n</script>\n\n<template>\n  <SectionCard title=\"Ontvangstscherm\" description=\"Kies de stappen voor bezoekers.\">\n    <form class=\"reception-settings\" data-testid=\"reception-settings\" :aria-busy=\"pending\" @submit.prevent=\"save\">\n      <FormField label=\"Stappen voor bezoekers\" :field-id=\"form.fieldId('flow')\" :error=\"form.errors.flow\" help=\"Bij eerst contactpersoon belt de knop onder de gegevens meteen. Een andere keuze bewaart bedrijven en koppelingen.\">\n        <Select v-model=\"model.flow\" :options=\"flows\" :disabled=\"pending\" />\n      </FormField>\n      <p v-if=\"reception.selectCompany\" class=\"reception-settings__hint\">Voeg bedrijven toe en koppel hun contactpersonen via <a :href=\"customerHref('contactpersonen')\">Contactpersonen</a>. Zonder actief bedrijf kunnen bezoekers nog niemand kiezen.</p>\n      <p v-if=\"saveError\" class=\"reception-settings__error\" role=\"alert\">{{ saveError }}</p>\n      <div class=\"reception-settings__actions\">\n        <Button :disabled=\"pending || !guard.isDirty.value\" @click=\"guard.revert(); form.reset(); saveError = ''\">Herstellen</Button>\n        <Button type=\"submit\" variant=\"primary\" :disabled=\"pending\">{{ pending ? \"Opslaan...\" : \"Opslaan\" }}</Button>\n      </div>\n    </form>\n  </SectionCard>\n</template>\n\n<style scoped>\n.reception-settings { display: flex; flex-direction: column; gap: 20px; }\n.reception-settings__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12px; }\n.reception-settings__error { margin: 0; color: var(--danger); }\n.reception-settings__hint { margin: 0; font-size: 14px; color: var(--muted-foreground); }\n.reception-settings__hint a { color: var(--foreground); cursor: pointer; }\n</style>\n","import { createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, withModifiers as _withModifiers, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"reception-settings__hint\"\n}\nconst _hoisted_3 = [\"href\"]\nconst _hoisted_4 = {\n  key: 1,\n  class: \"reception-settings__error\",\n  role: \"alert\"\n}\nconst _hoisted_5 = { class: \"reception-settings__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"SectionCard\"], {\n    title: \"Ontvangstscherm\",\n    description: \"Kies de stappen voor bezoekers.\"\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"form\", {\n        class: \"reception-settings\",\n        \"data-testid\": \"reception-settings\",\n        \"aria-busy\": $setup.pending,\n        onSubmit: _withModifiers($setup.save, [\"prevent\"])\n      }, [\n        _createVNode($setup[\"FormField\"], {\n          label: \"Stappen voor bezoekers\",\n          \"field-id\": $setup.form.fieldId('flow'),\n          error: $setup.form.errors.flow,\n          help: \"Bij eerst contactpersoon belt de knop onder de gegevens meteen. Een andere keuze bewaart bedrijven en koppelingen.\"\n        }, {\n          default: _withCtx(() => [\n            _createVNode($setup[\"Select\"], {\n              modelValue: $setup.model.flow,\n              \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.flow) = $event)),\n              options: $setup.flows,\n              disabled: $setup.pending\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n        ($props.reception.selectCompany)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, [\n              _cache[2] || (_cache[2] = _createTextVNode(\"Voeg bedrijven toe en koppel hun contactpersonen via \", -1 /* CACHED */)),\n              _createElementVNode(\"a\", {\n                href: $setup.customerHref('contactpersonen')\n              }, \"Contactpersonen\", 8 /* PROPS */, _hoisted_3),\n              _cache[3] || (_cache[3] = _createTextVNode(\". Zonder actief bedrijf kunnen bezoekers nog niemand kiezen.\", -1 /* CACHED */))\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.saveError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($setup.saveError), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createElementVNode(\"div\", _hoisted_5, [\n          _createVNode($setup[\"Button\"], {\n            disabled: $setup.pending || !$setup.guard.isDirty.value,\n            onClick: _cache[1] || (_cache[1] = $event => {$setup.guard.revert(); $setup.form.reset(); $setup.saveError = ''})\n          }, {\n            default: _withCtx(() => _cache[4] || (_cache[4] = [\n              _createTextVNode(\"Herstellen\", -1 /* CACHED */)\n            ])),\n            _: 1 /* STABLE */,\n            __: [4]\n          }, 8 /* PROPS */, [\"disabled\"]),\n          _createVNode($setup[\"Button\"], {\n            type: \"submit\",\n            variant: \"primary\",\n            disabled: $setup.pending\n          }, {\n            default: _withCtx(() => [\n              _createTextVNode(_toDisplayString($setup.pending ? \"Opslaan...\" : \"Opslaan\"), 1 /* TEXT */)\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"disabled\"])\n        ])\n      ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_1)\n    ]),\n    _: 1 /* STABLE */\n  }))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/ReceptionSettingsPanel.vue\";script.__scopeId = \"data-v-5e28b561\";export default script;","<template>\n  <SectionCard title=\"Privacy\" class=\"privacy-card\">\n    <form class=\"privacy\" novalidate data-testid=\"privacy-form\" :aria-busy=\"pending\" @submit.prevent=\"save\">\n      <fieldset class=\"privacy__group\" :disabled=\"pending\">\n        <legend>Verplichte velden bij aanmelden</legend>\n        <label v-for=\"field in FIELDS\" :key=\"field\" class=\"privacy__field\">\n          <input v-model=\"model[field]\" type=\"checkbox\" :disabled=\"field === 'name'\" :data-testid=\"`privacy-field-${field}`\">\n          {{ REGISTRATION_FIELD_LABELS[field] }}<span v-if=\"field === 'name'\" class=\"privacy__required\">(altijd verplicht)</span>\n        </label>\n      </fieldset>\n\n      <FormField label=\"Bewaartermijn in dagen\" :field-id=\"form.fieldId('retentionDays')\" :error=\"form.errors.retentionDays\" required\n                 :help=\"simulated ? 'Tussen 1 en 365 dagen. Demo: er worden geen gegevens echt verwijderd.' : 'Na opslaan ruimen we dagelijks verlopen registraties van vertrokken bezoekers op. Lopend bezoek en recente of onafgeronde gesprekken blijven behouden. Technische wijzigingshistorie blijft maximaal 30 dagen bewaard. Kies 1 tot 365 dagen.'\" class=\"privacy__days\">\n        <TextInput v-model=\"model.retentionDays\" :disabled=\"pending\" type=\"number\" inputmode=\"numeric\" min=\"1\" max=\"365\" data-testid=\"privacy-retention\" />\n      </FormField>\n\n      <fieldset class=\"privacy__group privacy__visibility\" :disabled=\"pending\">\n        <legend>Zichtbaarheid op schermen</legend>\n        <Switch v-model=\"model.showVisitorNameOnScreen\" label=\"Naam van de bezoeker tonen op het welkomstscherm\" data-testid=\"privacy-visitor-name\" />\n        <Switch v-model=\"model.showHostNameOnScreen\" label=\"Naam van de gastheer tonen op het wachtscherm\" data-testid=\"privacy-host-name\" />\n      </fieldset>\n\n      <p v-if=\"simulated\" class=\"privacy__notice\" role=\"note\"><span class=\"privacy__demo\">Demo</span><span>Dit is een voorbeeld van bewaarbeleid, geen juridische goedkeuring.</span></p>\n\n      <p v-if=\"saveError\" class=\"privacy__error\" role=\"alert\">{{ saveError }}</p>\n      <div class=\"privacy__actions\">\n        <Button :disabled=\"pending || !guard.isDirty.value\" data-testid=\"privacy-reset\" @click=\"restore\">Herstellen</Button>\n        <Button type=\"submit\" variant=\"primary\" :disabled=\"pending\" data-testid=\"privacy-save\">{{ pending ? \"Opslaan...\" : \"Opslaan\" }}</Button>\n      </div>\n    </form>\n  </SectionCard>\n</template>\n\n<script setup lang=\"ts\">\nimport { reactive, ref } from \"vue\";\nimport Button from \"../ui/Button.vue\";\nimport FormField from \"../ui/FormField.vue\";\nimport SectionCard from \"../ui/SectionCard.vue\";\nimport Switch from \"../ui/Switch.vue\";\nimport TextInput from \"../ui/TextInput.vue\";\nimport { useGuardedForm } from \"../../composables/useFormGuard\";\nimport { rules, useFormValidation } from \"../../composables/useFormValidation\";\nimport type { PrivacySettings, RegistrationField, SettingsSave } from \"../../lib/settings\";\nimport { showToast } from \"../../lib/toast\";\n\nconst props = defineProps<{ privacy: PrivacySettings; savePrivacy: SettingsSave<PrivacySettings>; simulated?: boolean }>();\nconst FIELDS: RegistrationField[] = [\"name\", \"company\", \"email\", \"phone\", \"licensePlate\"];\nconst REGISTRATION_FIELD_LABELS = { name: \"Naam\", company: \"Bedrijf\", email: \"E-mailadres\", phone: \"Telefoonnummer\", licensePlate: \"Kenteken\" };\n\nfunction snapshot(privacy: PrivacySettings) {\n  return {\n    name: true,\n    company: privacy.requiredFields.includes(\"company\"),\n    email: privacy.requiredFields.includes(\"email\"),\n    phone: privacy.requiredFields.includes(\"phone\"),\n    licensePlate: privacy.requiredFields.includes(\"licensePlate\"),\n    retentionDays: String(privacy.retentionDays),\n    showVisitorNameOnScreen: privacy.showVisitorNameOnScreen,\n    showHostNameOnScreen: privacy.showHostNameOnScreen,\n  };\n}\n\nconst model = reactive(snapshot(props.privacy));\nconst pending = ref(false);\nconst saveError = ref(\"\");\nconst guard = useGuardedForm(\"Privacyinstellingen\", model);\nconst form = useFormValidation(model, {\n  retentionDays: [\n    rules.required(\"Vul een bewaartermijn in.\"),\n    rules.check(value => /^\\d+$/.test(String(value)) && Number(value) >= 1 && Number(value) <= 365, \"Kies een bewaartermijn tussen 1 en 365 dagen.\"),\n  ],\n});\n\nasync function save(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  saveError.value = \"\";\n  try {\n    const result = await props.savePrivacy({\n      requiredFields: FIELDS.filter(field => field === \"name\" || model[field]),\n      retentionDays: Number(model.retentionDays),\n      showVisitorNameOnScreen: model.showVisitorNameOnScreen,\n      showHostNameOnScreen: model.showHostNameOnScreen,\n    });\n    if (!result.ok) {\n      saveError.value = result.errors.form ?? result.errors.requiredFields ?? result.errors.showVisitorNameOnScreen ?? result.errors.showHostNameOnScreen ?? \"\";\n      if (result.errors.retentionDays)\n        form.setError(\"retentionDays\", result.errors.retentionDays);\n      return;\n    }\n    guard.load(snapshot(result.value));\n    form.reset();\n    showToast(result.message ?? \"Privacyinstellingen opgeslagen\");\n  } catch {\n    saveError.value = \"Opslaan is niet gelukt. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n\nfunction restore(): void {\n  guard.revert();\n  form.reset();\n  saveError.value = \"\";\n}\n</script>\n\n<style scoped>\n.privacy__error { margin: 0; color: var(--danger); }\n.privacy-card { max-width: 860px; padding: 0; gap: 0; }\n.privacy-card :deep(.section-card__header) { padding: 20px 24px 4px; }\n.privacy { display: flex; flex-direction: column; gap: 22px; padding: 12px 24px 0; }\n.privacy__group { display: flex; flex-direction: column; gap: 6px; margin: 0; padding: 0; border: 0; }\n.privacy__group legend { margin-bottom: 8px; padding: 0; font-size: 15px; font-weight: 700; }\n.privacy__field { display: flex; align-items: center; gap: 12px; min-height: 40px; font-size: 15px; font-weight: 600; cursor: pointer; }\n.privacy__field input { width: 20px; height: 20px; margin: 0; accent-color: var(--foreground); cursor: pointer; }\n.privacy__field:has(:disabled), .privacy__field input:disabled { cursor: default; }\n.privacy__required { color: var(--muted-foreground); font-weight: 400; }\n.privacy__days { max-width: 260px; }\n.privacy__days :deep(.field__label) { font-size: 15px; font-weight: 700; }\n.privacy__days :deep(.v-control) { order: 1; height: 48px; min-height: 48px; background: #ffffff; }\n.privacy__days :deep(.field__help) { order: 2; font-size: 13px; }\n.privacy__days :deep(.field__error) { order: 3; }\n.privacy__days :deep(.field__error:empty) { display: none; }\n.privacy__visibility { gap: 12px; }\n.privacy__visibility :deep(.switch) { align-items: center; gap: 14px; }\n.privacy__visibility :deep(.switch__label) { font-size: 15px; font-weight: 600; }\n.privacy__visibility :deep(.switch__track) { width: 52px; height: 32px; border: 0; border-radius: 999px; background: #8a8f8c; }\n.privacy__visibility :deep(.switch__thumb) { width: 26px; height: 26px; background: #ffffff; }\n.privacy__visibility :deep(.switch__track[aria-checked=\"true\"]) { background: var(--foreground); }\n.privacy__visibility :deep(.switch__track[aria-checked=\"true\"] .switch__thumb) { transform: translateX(20px); background: var(--lime); }\n.privacy__visibility :deep(.switch__state) { display: none; }\n.privacy__notice { display: flex; align-items: flex-start; gap: 12px; margin: 0; padding: 12px 16px; border: 1px solid var(--border); background: var(--cream); font-size: 14px; }\n.privacy__demo { display: inline-flex; flex: none; align-items: center; min-height: 24px; padding: 0 10px; border-radius: 999px; background: var(--lime); font-size: 12px; font-weight: 700; }\n.privacy__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12px; margin: -2px -24px 0; padding: 16px 24px; border-top: 1px solid var(--border); }\n@media (max-width: 767px) {\n  .privacy-card { border: 0; border-radius: 20px; background: #ffffff; }\n  .privacy-card :deep(.section-card__header) { padding: 20px 16px 4px; }\n  .privacy { padding-right: 16px; padding-left: 16px; }\n  .privacy__actions { margin-right: -16px; margin-left: -16px; padding-right: 16px; padding-left: 16px; }\n}\n</style>\n","<template>\n  <div class=\"switch\" :class=\"{ 'switch--disabled': disabled }\">\n    <button :id=\"control.id.value\" type=\"button\" role=\"switch\" class=\"switch__track\" :aria-checked=\"model\"\n            :aria-labelledby=\"labelId\" :aria-describedby=\"describedBy\" :disabled=\"disabled\" @click=\"model = !model\">\n      <span class=\"switch__thumb\" />\n    </button>\n    <span class=\"switch__text\">\n      <span :id=\"labelId\" class=\"switch__label\" @click=\"!disabled && (model = !model)\"><slot>{{ label }}</slot></span>\n      <span v-if=\"description\" :id=\"descriptionId\" class=\"switch__description\">{{ description }}</span>\n    </span>\n    <span class=\"switch__state\" aria-hidden=\"true\">{{ model ? onLabel : offLabel }}</span>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport { useFieldControl } from \"../../lib/formField\";\n\nconst props = withDefaults(defineProps<{\n  id?: string;\n  label?: string;\n  description?: string;\n  disabled?: boolean;\n  onLabel?: string;\n  offLabel?: string;\n}>(), { id: undefined, label: \"\", description: \"\", disabled: false, onLabel: \"Aan\", offLabel: \"Uit\" });\n\nconst model = defineModel<boolean>({ default: false });\nconst control = useFieldControl(props);\nconst labelId = computed(() => `${control.id.value}-label`);\nconst descriptionId = computed(() => `${control.id.value}-desc`);\nconst describedBy = computed(() => [props.description ? descriptionId.value : \"\", control.describedBy.value ?? \"\"].filter(Boolean).join(\" \") || undefined);\n</script>\n\n<style scoped>\n.switch {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n}\n\n.switch--disabled {\n  opacity: 0.55;\n}\n\n.switch__track {\n  position: relative;\n  flex-shrink: 0;\n  width: 40px;\n  height: 24px;\n  padding: 0;\n  border: 1px solid var(--border-strong);\n  border-radius: 12px;\n  background: var(--field);\n  cursor: pointer;\n  transition: background-color 150ms var(--ease);\n}\n\n.switch__track:disabled {\n  cursor: not-allowed;\n}\n\n.switch__thumb {\n  position: absolute;\n  top: 3px;\n  left: 3px;\n  width: 16px;\n  height: 16px;\n  border-radius: 50%;\n  background: var(--muted-foreground);\n  transition: transform 150ms var(--ease);\n}\n\n.switch__track[aria-checked=\"true\"] {\n  background: var(--primary);\n  border-color: var(--primary);\n}\n\n.switch__track[aria-checked=\"true\"] .switch__thumb {\n  transform: translateX(16px);\n  background: var(--primary-foreground);\n}\n\n.switch__text {\n  display: flex;\n  flex: 1;\n  flex-direction: column;\n  gap: 2px;\n  min-width: 0;\n}\n\n.switch__label {\n  font-size: 14px;\n  cursor: pointer;\n}\n\n.switch__description {\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n\n.switch__state {\n  font-size: 14px;\n  color: var(--muted-foreground);\n}\n</style>\n","import { createElementVNode as _createElementVNode, renderSlot as _renderSlot, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"aria-checked\", \"aria-labelledby\", \"aria-describedby\", \"disabled\"]\nconst _hoisted_2 = { class: \"switch__text\" }\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = {\n  class: \"switch__state\",\n  \"aria-hidden\": \"true\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"switch\", { 'switch--disabled': $props.disabled }])\n  }, [\n    _createElementVNode(\"button\", {\n      id: $setup.control.id.value,\n      type: \"button\",\n      role: \"switch\",\n      class: \"switch__track\",\n      \"aria-checked\": $setup.model,\n      \"aria-labelledby\": $setup.labelId,\n      \"aria-describedby\": $setup.describedBy,\n      disabled: $props.disabled,\n      onClick: _cache[0] || (_cache[0] = $event => ($setup.model = !$setup.model))\n    }, _cache[2] || (_cache[2] = [\n      _createElementVNode(\"span\", { class: \"switch__thumb\" }, null, -1 /* CACHED */)\n    ]), 8 /* PROPS */, _hoisted_1),\n    _createElementVNode(\"span\", _hoisted_2, [\n      _createElementVNode(\"span\", {\n        id: $setup.labelId,\n        class: \"switch__label\",\n        onClick: _cache[1] || (_cache[1] = $event => (!$props.disabled && ($setup.model = !$setup.model)))\n      }, [\n        _renderSlot(_ctx.$slots, \"default\", {}, () => [\n          _createTextVNode(_toDisplayString($props.label), 1 /* TEXT */)\n        ], true)\n      ], 8 /* PROPS */, _hoisted_3),\n      ($props.description)\n        ? (_openBlock(), _createElementBlock(\"span\", {\n            key: 0,\n            id: $setup.descriptionId,\n            class: \"switch__description\"\n          }, _toDisplayString($props.description), 9 /* TEXT, PROPS */, _hoisted_4))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _createElementVNode(\"span\", _hoisted_5, _toDisplayString($setup.model ? $props.onLabel : $props.offLabel), 1 /* TEXT */)\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Switch.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Switch.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Switch.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Switch.vue\";script.__scopeId = \"data-v-2ddf404b\";export default script;","import { createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, vModelCheckbox as _vModelCheckbox, withDirectives as _withDirectives, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, createVNode as _createVNode, withCtx as _withCtx, withModifiers as _withModifiers, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = [\"disabled\"]\nconst _hoisted_3 = [\"onUpdate:modelValue\", \"disabled\", \"data-testid\"]\nconst _hoisted_4 = {\n  key: 0,\n  class: \"privacy__required\"\n}\nconst _hoisted_5 = [\"disabled\"]\nconst _hoisted_6 = {\n  key: 0,\n  class: \"privacy__notice\",\n  role: \"note\"\n}\nconst _hoisted_7 = {\n  key: 1,\n  class: \"privacy__error\",\n  role: \"alert\"\n}\nconst _hoisted_8 = { class: \"privacy__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"SectionCard\"], {\n    title: \"Privacy\",\n    class: \"privacy-card\"\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"form\", {\n        class: \"privacy\",\n        novalidate: \"\",\n        \"data-testid\": \"privacy-form\",\n        \"aria-busy\": $setup.pending,\n        onSubmit: _withModifiers($setup.save, [\"prevent\"])\n      }, [\n        _createElementVNode(\"fieldset\", {\n          class: \"privacy__group\",\n          disabled: $setup.pending\n        }, [\n          _cache[3] || (_cache[3] = _createElementVNode(\"legend\", null, \"Verplichte velden bij aanmelden\", -1 /* CACHED */)),\n          (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.FIELDS, (field) => {\n            return _createElementVNode(\"label\", {\n              key: field,\n              class: \"privacy__field\"\n            }, [\n              _withDirectives(_createElementVNode(\"input\", {\n                \"onUpdate:modelValue\": $event => (($setup.model[field]) = $event),\n                type: \"checkbox\",\n                disabled: field === 'name',\n                \"data-testid\": `privacy-field-${field}`\n              }, null, 8 /* PROPS */, _hoisted_3), [\n                [_vModelCheckbox, $setup.model[field]]\n              ]),\n              _createTextVNode(\" \" + _toDisplayString($setup.REGISTRATION_FIELD_LABELS[field]), 1 /* TEXT */),\n              (field === 'name')\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"(altijd verplicht)\"))\n                : _createCommentVNode(\"v-if\", true)\n            ])\n          }), 64 /* STABLE_FRAGMENT */))\n        ], 8 /* PROPS */, _hoisted_2),\n        _createVNode($setup[\"FormField\"], {\n          label: \"Bewaartermijn in dagen\",\n          \"field-id\": $setup.form.fieldId('retentionDays'),\n          error: $setup.form.errors.retentionDays,\n          required: \"\",\n          help: $props.simulated ? 'Tussen 1 en 365 dagen. Demo: er worden geen gegevens echt verwijderd.' : 'Na opslaan ruimen we dagelijks verlopen registraties van vertrokken bezoekers op. Lopend bezoek en recente of onafgeronde gesprekken blijven behouden. Technische wijzigingshistorie blijft maximaal 30 dagen bewaard. Kies 1 tot 365 dagen.',\n          class: \"privacy__days\"\n        }, {\n          default: _withCtx(() => [\n            _createVNode($setup[\"TextInput\"], {\n              modelValue: $setup.model.retentionDays,\n              \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.retentionDays) = $event)),\n              disabled: $setup.pending,\n              type: \"number\",\n              inputmode: \"numeric\",\n              min: \"1\",\n              max: \"365\",\n              \"data-testid\": \"privacy-retention\"\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\", \"help\"]),\n        _createElementVNode(\"fieldset\", {\n          class: \"privacy__group privacy__visibility\",\n          disabled: $setup.pending\n        }, [\n          _cache[4] || (_cache[4] = _createElementVNode(\"legend\", null, \"Zichtbaarheid op schermen\", -1 /* CACHED */)),\n          _createVNode($setup[\"Switch\"], {\n            modelValue: $setup.model.showVisitorNameOnScreen,\n            \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.model.showVisitorNameOnScreen) = $event)),\n            label: \"Naam van de bezoeker tonen op het welkomstscherm\",\n            \"data-testid\": \"privacy-visitor-name\"\n          }, null, 8 /* PROPS */, [\"modelValue\"]),\n          _createVNode($setup[\"Switch\"], {\n            modelValue: $setup.model.showHostNameOnScreen,\n            \"onUpdate:modelValue\": _cache[2] || (_cache[2] = $event => (($setup.model.showHostNameOnScreen) = $event)),\n            label: \"Naam van de gastheer tonen op het wachtscherm\",\n            \"data-testid\": \"privacy-host-name\"\n          }, null, 8 /* PROPS */, [\"modelValue\"])\n        ], 8 /* PROPS */, _hoisted_5),\n        ($props.simulated)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, _cache[5] || (_cache[5] = [\n              _createElementVNode(\"span\", { class: \"privacy__demo\" }, \"Demo\", -1 /* CACHED */),\n              _createElementVNode(\"span\", null, \"Dit is een voorbeeld van bewaarbeleid, geen juridische goedkeuring.\", -1 /* CACHED */)\n            ])))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.saveError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString($setup.saveError), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createElementVNode(\"div\", _hoisted_8, [\n          _createVNode($setup[\"Button\"], {\n            disabled: $setup.pending || !$setup.guard.isDirty.value,\n            \"data-testid\": \"privacy-reset\",\n            onClick: $setup.restore\n          }, {\n            default: _withCtx(() => _cache[6] || (_cache[6] = [\n              _createTextVNode(\"Herstellen\", -1 /* CACHED */)\n            ])),\n            _: 1 /* STABLE */,\n            __: [6]\n          }, 8 /* PROPS */, [\"disabled\"]),\n          _createVNode($setup[\"Button\"], {\n            type: \"submit\",\n            variant: \"primary\",\n            disabled: $setup.pending,\n            \"data-testid\": \"privacy-save\"\n          }, {\n            default: _withCtx(() => [\n              _createTextVNode(_toDisplayString($setup.pending ? \"Opslaan...\" : \"Opslaan\"), 1 /* TEXT */)\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"disabled\"])\n        ])\n      ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_1)\n    ]),\n    _: 1 /* STABLE */\n  }))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/PrivacyTab.vue\";script.__scopeId = \"data-v-1bcca866\";export default script;","<script setup lang=\"ts\">\nimport { computed, ref } from \"vue\";\nimport { ADMIN_PLANS } from \"@mod-velkom/js/admin-plans\";\nimport Button from \"../ui/Button.vue\";\nimport DataTable from \"../ui/DataTable.vue\";\nimport Icon from \"../ui/Icon.vue\";\nimport SectionCard from \"../ui/SectionCard.vue\";\nimport StatusBadge from \"../ui/StatusBadge.vue\";\nimport { formatEuro } from \"../../lib/format\";\nimport type { TableColumn } from \"../../lib/ui\";\n\ntype Plan = keyof typeof ADMIN_PLANS;\nconst props = defineProps<{\n  plan: Plan;\n  screenUsage: Array<{ id: string | number; name: string; used: number; limit: number | null }>;\n  screensHref: string;\n  simulated?: boolean;\n  changeablePlans?: Plan[];\n  subscription?: { status: string; billingPeriod: string; billableLocations: number };\n  costs?: { lines: Array<{ id: string; label: string; quantity: number; amount: number }>; total: number };\n}>();\nconst emit = defineEmits<{ changePlan: [plan: Plan] }>();\nconst comparison = ref<HTMLElement>();\nconst current = computed(() => ADMIN_PLANS[props.plan]);\nconst costColumns: TableColumn[] = [{ key: \"label\", label: \"Onderdeel\" }, { key: \"quantity\", label: \"Aantal\", align: \"end\" }, { key: \"amount\", label: \"Per maand\", align: \"end\" }];\nconst costRows = computed(() => (props.costs?.lines ?? [{ id: \"base\", label: `Pakket ${current.value.name}`, quantity: 1, amount: current.value.monthlyPrice }]).map(line => ({ ...line, quantity: `${line.quantity} ×`, amount: formatEuro(line.amount) })));\nconst total = computed(() => props.costs?.total ?? current.value.monthlyPrice);\nconst plans = computed(() => Object.entries(ADMIN_PLANS).map(([id, plan]) => ({ ...plan, id: id as Plan, current: id === props.plan })));\nconst descriptions = {\n  gratis: \"Voor bezoekersregistratie en ontvangst bij één organisatie.\",\n  aankomst: \"Voor een vlotte aankomst en ontvangst bij één balie.\",\n  bezoek: \"Voor kantoren die het hele bezoek willen regelen, van uitnodiging tot binnen.\",\n  ervaring: \"Voor organisaties met meerdere locaties die willen meten en verbeteren.\",\n};\nconst matrixColumns = computed<TableColumn[]>(() => [{ key: \"label\", label: \"Mogelijkheid\" }, ...plans.value.map(plan => ({ key: plan.id, label: `${plan.name}${plan.current ? \" (huidig)\" : \"\"}` }))]);\nconst matrixRows = computed(() => [\n  { id: \"monthly\", label: \"Per maand, excl. btw\", ...Object.fromEntries(plans.value.map(plan => [plan.id, formatEuro(plan.monthlyPrice)])) },\n  { id: \"yearly\", label: \"Per jaar, excl. btw\", ...Object.fromEntries(plans.value.map(plan => [plan.id, formatEuro(plan.yearlyPrice)])) },\n  { id: \"screens\", label: \"Schermen inbegrepen\", ...Object.fromEntries(plans.value.map(plan => [plan.id, plan.screenLimit === null ? \"Onbeperkt\" : String(plan.screenLimit)])) },\n]);\n</script>\n\n<template>\n  <div class=\"plan-tab\">\n    <div v-if=\"plan !== 'gratis'\" class=\"plan-tab__row\">\n      <SectionCard title=\"Huidig abonnement\" class=\"plan-tab__current\" data-testid=\"subscription-overview\">\n        <dl class=\"plan-tab__facts\">\n          <div><dt>Pakket</dt><dd>{{ current.name }}</dd></div>\n          <template v-if=\"subscription\">\n            <div><dt>Status</dt><dd><StatusBadge tone=\"success\" icon=\"checkmark\" :label=\"subscription.status\" /></dd></div>\n            <div><dt>Betaalperiode</dt><dd>{{ subscription.billingPeriod }}</dd></div>\n            <div><dt>Factureerbare locaties</dt><dd>{{ subscription.billableLocations }}</dd></div>\n          </template>\n          <div v-else><dt>Schermen inbegrepen</dt><dd>{{ current.screenLimit === null ? \"Onbeperkt\" : current.screenLimit }}</dd></div>\n        </dl>\n        <Button class=\"plan-tab__change\" data-testid=\"plan-change-open\" @click=\"comparison?.scrollIntoView({ behavior: 'smooth', block: 'start' })\">Pakketten vergelijken<Icon name=\"arrow-right\" :size=\"18\" /></Button>\n      </SectionCard>\n      <SectionCard title=\"Kosten per maand\" :description=\"simulated ? 'Excl. btw. Er wordt niets gefactureerd in deze demo.' : 'Catalogusprijzen, excl. btw.'\" class=\"plan-tab__costs\" data-testid=\"cost-lines-panel\">\n        <DataTable :columns=\"costColumns\" :rows=\"costRows\" caption=\"Kosten per maand, excl. btw\" row-key=\"id\" data-testid=\"cost-lines\"><template #cell-label=\"{ row }\"><strong>{{ row.label }}</strong></template></DataTable>\n        <p class=\"plan-tab__total\" data-testid=\"monthly-total\"><strong>Totaal</strong><strong>{{ formatEuro(total) }}</strong></p>\n      </SectionCard>\n    </div>\n    <div class=\"plan-tab__row\">\n      <SectionCard title=\"Schermen\" class=\"plan-tab__screens\">\n        <ul class=\"plan-tab__usage\" data-testid=\"screen-usage\">\n          <li v-for=\"usage in screenUsage\" :key=\"usage.id\">\n            <div class=\"plan-tab__usage-heading\"><strong>{{ usage.name }}</strong><strong>{{ usage.limit === null ? `${usage.used}, onbeperkt` : `${usage.used} van ${usage.limit}` }} <span v-if=\"usage.limit !== null && usage.used >= usage.limit\" class=\"plan-tab__full\">Vol</span></strong></div>\n            <meter v-if=\"usage.limit !== null\" :value=\"usage.used\" :min=\"0\" :max=\"usage.limit\" :aria-label=\"`Schermen in gebruik: ${usage.name}`\" />\n          </li>\n        </ul>\n        <a class=\"plan-tab__screens-link\" :href=\"screensHref\">Naar schermen</a>\n      </SectionCard>\n      <slot name=\"extensions\" />\n    </div>\n    <section v-if=\"plan !== 'gratis'\" ref=\"comparison\" class=\"plan-tab__compare\" data-testid=\"plan-compare\">\n      <header><h2>Pakketten vergelijken</h2><p>Prijzen excl. btw. Een jaar kost tien maandbedragen.<template v-if=\"simulated\"> Overstappen is een simulatie.</template></p></header>\n      <div class=\"plan-tab__plans\">\n        <article v-for=\"plan in plans\" :key=\"plan.id\" class=\"plan-card\" :class=\"{ 'plan-card--current': plan.current }\" :data-testid=\"`plan-card-${plan.id}`\">\n          <span v-if=\"plan.current\" class=\"plan-card__label\">Huidig pakket</span>\n          <h3 class=\"plan-card__name\">{{ plan.name }}</h3>\n          <div class=\"plan-card__price\"><span>€</span><strong>{{ plan.monthlyPrice }}</strong></div>\n          <p class=\"plan-card__period\">per maand, excl. btw · {{ formatEuro(plan.yearlyPrice) }} per jaar · {{ plan.screenLimit === null ? 'onbeperkt schermen' : `${plan.screenLimit} schermen` }}</p>\n          <p class=\"plan-card__text\">{{ descriptions[plan.id] }}</p>\n          <Button v-if=\"!plan.current && changeablePlans?.includes(plan.id)\" variant=\"primary\" class=\"plan-card__action\" :data-testid=\"`plan-choose-${plan.id}`\" @click=\"emit('changePlan', plan.id)\">Overstappen naar {{ plan.name }}<Icon name=\"arrow-right\" :size=\"18\" /></Button>\n        </article>\n      </div>\n      <section class=\"plan-tab__matrix\" :class=\"`plan-tab__matrix--${plan}`\"><h3>Per mogelijkheid</h3><DataTable :columns=\"matrixColumns\" :rows=\"matrixRows\" caption=\"Pakketten vergelijken\" row-key=\"id\" data-testid=\"plan-matrix\" /></section>\n    </section>\n    <slot name=\"billing\" />\n  </div>\n</template>\n\n<style scoped>\n.plan-tab { display: flex; flex-direction: column; gap: 28px; }\n.plan-tab__row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 24px; }\n.plan-tab__current, .plan-tab__screens { flex: 1 1 340px; padding: 20px 24px; gap: 14px; }\n.plan-tab__costs, .plan-tab__extensions { flex: 2 1 480px; padding: 0; gap: 0; }\n.plan-tab__costs :deep(.section-card__header), .plan-tab__extensions :deep(.section-card__header) { padding: 20px 24px 8px; }\n.plan-tab__costs :deep(.section-card__description) { margin-top: 2px; font-size: 14px; }\n.plan-tab__change { align-self: flex-start; font-size: 13px; }\n.plan-tab__change :deep(.btn__label) { display: inline-flex; align-items: center; gap: 17px; }\n.plan-tab__costs :deep(td:first-child strong) { font-weight: 600; }\n.plan-tab__change:hover:not(:disabled) { background: var(--foreground); color: var(--cream); }\n.plan-tab__current :deep(.status) { min-height: 26px; padding: 0 10px 0 8px; font-size: 12px; }\n.plan-tab__current :deep(.status__icon) { color: var(--foreground); }\n.plan-tab__facts { margin: 0; font-size: 14px; }\n.plan-tab__facts div { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); border-top: 1px solid var(--border); }\n.plan-tab__facts dt, .plan-tab__facts dd { margin: 0; padding: 10px 0; overflow-wrap: anywhere; }\n.plan-tab__facts dt { color: var(--muted-foreground); }\n.plan-tab__facts dd { font-weight: 700; }\n.plan-tab__total { display: flex; justify-content: space-between; align-items: center; margin: 0; padding: 14px 24px; font-family: var(--font-display); font-size: 18px; }\n.plan-tab__total strong:last-child { font-size: 22px; letter-spacing: -0.04em; }\n.plan-tab__uncounted { margin: 0; padding: 0 24px 14px; font-size: 13px; color: var(--muted-foreground); }\n.plan-tab__usage, .plan-tab__addons { list-style: none; padding: 0; margin: 0; }\n.plan-tab__usage li + li { margin-top: 14px; }\n.plan-tab__usage-heading { display: flex; justify-content: space-between; gap: 12px; }\n.plan-tab__full { margin-left: 4px; padding: 0 10px; border-radius: 999px; background: var(--foreground); color: var(--cream); font-size: 12px; }\n.plan-tab__usage meter { display: block; width: 100%; height: 10px; margin-top: 12px; border: 0; border-radius: 999px; background: var(--selected); }\n.plan-tab__usage meter::-webkit-meter-bar { height: 10px; border: 0; border-radius: 999px; background: var(--selected); }\n.plan-tab__usage meter::-webkit-meter-optimum-value { background: var(--foreground); border-radius: 999px; }\n.plan-tab__usage meter::-moz-meter-bar { background: var(--foreground); }\n.plan-tab__screens-link { align-self: flex-start; font-size: 13px; color: var(--foreground); text-underline-offset: 3px; }\n.plan-tab__addons { padding: 0 24px 12px; }\n.plan-tab__addons li { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; padding: 12px 0; border-top: 1px solid var(--border); }\n.plan-tab__addon-main { display: flex; flex-direction: column; line-height: 1.35; }\n.plan-tab__addon-main > span { color: var(--muted-foreground); font-size: 13px; }\n.plan-tab__addon-status { box-sizing: content-box; }\n.plan-tab__addon-status.status--neutral { border: 1.5px solid var(--foreground); background: transparent; }\n.plan-tab__addon-status :deep(.status__icon) { width: 16px; height: 16px; color: var(--foreground); }\n.plan-tab__compare { display: flex; flex-direction: column; gap: 32px; }\n.plan-tab__compare h2 { margin: 0; font-family: var(--font-display); font-size: 34px; font-weight: 600; line-height: 1; letter-spacing: -0.05em; }\n.plan-tab__compare header > p { margin: 6px 0 0; color: var(--muted-foreground); }\n.plan-tab__plans { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); align-items: start; gap: 18px; padding-top: 20px; }\n.plan-card { position: relative; display: flex; flex-direction: column; min-height: 350px; padding: 30px; border: 1px solid var(--border); background: var(--paper); color: var(--foreground); }\n.plan-card--current { background: var(--foreground); color: var(--cream); transform: translateY(-20px); box-shadow: 0 30px 60px #19251f24; }\n.plan-card__label { position: absolute; top: -14px; right: 25px; padding: 8px 13px; border-radius: 999px; background: var(--lime); color: var(--foreground); font-size: 12px; text-transform: uppercase; font-weight: 700; }\n.plan-card__name { margin: 0; font-family: var(--font-body); font-size: 13px; text-transform: uppercase; font-weight: 700; }\n.plan-card__price { display: grid; grid-template-columns: auto auto 1fr; align-items: end; margin-top: 45px; }\n.plan-card__price > span { align-self: start; margin-top: 9px; font-size: 17px; }\n.plan-card__price strong { font-family: var(--font-display); font-size: 75px; font-weight: 700; line-height: 0.8; letter-spacing: -0.07em; }\n.plan-card__period { margin: 18px 0 0; min-height: 42px; font-size: 12px; opacity: 0.65; }\n.plan-card__text { max-width: 310px; min-height: 50px; margin: 35px 0; font-size: 14px; opacity: 0.7; }\n.plan-card__moments { display: grid; grid-template-columns: repeat(5, 1fr); padding: 25px 0; border-top: 1px solid var(--border); }\n.plan-card--current .plan-card__moments { border-color: #f5f3ea2e; }\n.plan-card__moments > div { display: flex; flex-direction: column; align-items: center; gap: 8px; opacity: 0.17; }\n.plan-card__moments > .is-included { opacity: 1; }\n.plan-card__moments span { box-sizing: content-box; display: grid; place-items: center; width: 42px; height: 42px; border: 1px solid; border-radius: 50%; }\n.plan-card__moments svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7px; }\n.plan-card__moments .is-included span { background: var(--lime); border-color: var(--lime); color: var(--foreground); }\n.plan-card__moments small { font-size: 12px; }\n.plan-card__action { width: 100%; min-height: 58px; padding: 0 24px; margin-top: auto; }\n.plan-card__action :deep(.btn__label) { display: inline-flex; align-items: center; gap: 18px; }\n.plan-tab__matrix { min-width: 0; border: 1px solid var(--border); background: var(--paper); }\n.plan-tab__matrix h3 { margin: 0; padding: 20px 24px 8px; font-family: var(--font-display); font-size: 22px; font-weight: 600; letter-spacing: -0.04em; }\n.plan-tab__check { display: inline-flex; align-items: center; color: var(--foreground); }\n.plan-tab__check--no { color: var(--muted-foreground); }\n.plan-tab__muted { margin: 4px 0 0; font-size: 14px; color: var(--muted-foreground); }\n@media (min-width: 768px) {\n  .plan-tab__costs :deep(.dt__table) { min-width: 460px; }\n  .plan-tab__matrix :deep(.dt__table) { min-width: 680px; }\n  .plan-tab__matrix :deep(.dt__table td:first-child) { font-weight: 600; }\n  .plan-tab__matrix--gratis :deep(th:nth-child(2)), .plan-tab__matrix--gratis :deep(td:nth-child(2)),\n  .plan-tab__matrix--aankomst :deep(th:nth-child(3)), .plan-tab__matrix--aankomst :deep(td:nth-child(3)),\n  .plan-tab__matrix--bezoek :deep(th:nth-child(4)), .plan-tab__matrix--bezoek :deep(td:nth-child(4)),\n  .plan-tab__matrix--ervaring :deep(th:nth-child(5)), .plan-tab__matrix--ervaring :deep(td:nth-child(5)) { background: #c7ff6359; color: var(--foreground); font-weight: 700; }\n}\n@media (max-width: 900px) { .plan-card { min-height: 350px; } .plan-card--current { transform: none; } }\n@media (max-width: 767px) {\n  .plan-tab :deep(.section-card), .plan-tab__matrix { border: 0; border-radius: 20px; background: #ffffff; overflow: hidden; }\n  .plan-tab__current, .plan-tab__screens { flex-basis: 100%; padding: 20px 16px; }\n  .plan-tab__costs, .plan-tab__extensions { flex-basis: 100%; }\n  .plan-tab__plans { gap: 24px; }\n  .plan-card { border-radius: 20px; }\n}\n</style>\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createVNode as _createVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, renderList as _renderList, renderSlot as _renderSlot, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = { class: \"plan-tab\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"plan-tab__row\"\n}\nconst _hoisted_3 = { class: \"plan-tab__facts\" }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n  class: \"plan-tab__total\",\n  \"data-testid\": \"monthly-total\"\n}\nconst _hoisted_6 = { class: \"plan-tab__row\" }\nconst _hoisted_7 = {\n  class: \"plan-tab__usage\",\n  \"data-testid\": \"screen-usage\"\n}\nconst _hoisted_8 = { class: \"plan-tab__usage-heading\" }\nconst _hoisted_9 = {\n  key: 0,\n  class: \"plan-tab__full\"\n}\nconst _hoisted_10 = [\"value\", \"max\", \"aria-label\"]\nconst _hoisted_11 = [\"href\"]\nconst _hoisted_12 = {\n  key: 1,\n  ref: \"comparison\",\n  class: \"plan-tab__compare\",\n  \"data-testid\": \"plan-compare\"\n}\nconst _hoisted_13 = { class: \"plan-tab__plans\" }\nconst _hoisted_14 = [\"data-testid\"]\nconst _hoisted_15 = {\n  key: 0,\n  class: \"plan-card__label\"\n}\nconst _hoisted_16 = { class: \"plan-card__name\" }\nconst _hoisted_17 = { class: \"plan-card__price\" }\nconst _hoisted_18 = { class: \"plan-card__period\" }\nconst _hoisted_19 = { class: \"plan-card__text\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    ($props.plan !== 'gratis')\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n          _createVNode($setup[\"SectionCard\"], {\n            title: \"Huidig abonnement\",\n            class: \"plan-tab__current\",\n            \"data-testid\": \"subscription-overview\"\n          }, {\n            default: _withCtx(() => [\n              _createElementVNode(\"dl\", _hoisted_3, [\n                _createElementVNode(\"div\", null, [\n                  _cache[1] || (_cache[1] = _createElementVNode(\"dt\", null, \"Pakket\", -1 /* CACHED */)),\n                  _createElementVNode(\"dd\", null, _toDisplayString($setup.current.name), 1 /* TEXT */)\n                ]),\n                ($props.subscription)\n                  ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                      _createElementVNode(\"div\", null, [\n                        _cache[2] || (_cache[2] = _createElementVNode(\"dt\", null, \"Status\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, [\n                          _createVNode($setup[\"StatusBadge\"], {\n                            tone: \"success\",\n                            icon: \"checkmark\",\n                            label: $props.subscription.status\n                          }, null, 8 /* PROPS */, [\"label\"])\n                        ])\n                      ]),\n                      _createElementVNode(\"div\", null, [\n                        _cache[3] || (_cache[3] = _createElementVNode(\"dt\", null, \"Betaalperiode\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($props.subscription.billingPeriod), 1 /* TEXT */)\n                      ]),\n                      _createElementVNode(\"div\", null, [\n                        _cache[4] || (_cache[4] = _createElementVNode(\"dt\", null, \"Factureerbare locaties\", -1 /* CACHED */)),\n                        _createElementVNode(\"dd\", null, _toDisplayString($props.subscription.billableLocations), 1 /* TEXT */)\n                      ])\n                    ], 64 /* STABLE_FRAGMENT */))\n                  : (_openBlock(), _createElementBlock(\"div\", _hoisted_4, [\n                      _cache[5] || (_cache[5] = _createElementVNode(\"dt\", null, \"Schermen inbegrepen\", -1 /* CACHED */)),\n                      _createElementVNode(\"dd\", null, _toDisplayString($setup.current.screenLimit === null ? \"Onbeperkt\" : $setup.current.screenLimit), 1 /* TEXT */)\n                    ]))\n              ]),\n              _createVNode($setup[\"Button\"], {\n                class: \"plan-tab__change\",\n                \"data-testid\": \"plan-change-open\",\n                onClick: _cache[0] || (_cache[0] = $event => ($setup.comparison?.scrollIntoView({ behavior: 'smooth', block: 'start' })))\n              }, {\n                default: _withCtx(() => [\n                  _cache[6] || (_cache[6] = _createTextVNode(\"Pakketten vergelijken\", -1 /* CACHED */)),\n                  _createVNode($setup[\"Icon\"], {\n                    name: \"arrow-right\",\n                    size: 18\n                  })\n                ]),\n                _: 1 /* STABLE */,\n                __: [6]\n              })\n            ]),\n            _: 1 /* STABLE */\n          }),\n          _createVNode($setup[\"SectionCard\"], {\n            title: \"Kosten per maand\",\n            description: $props.simulated ? 'Excl. btw. Er wordt niets gefactureerd in deze demo.' : 'Catalogusprijzen, excl. btw.',\n            class: \"plan-tab__costs\",\n            \"data-testid\": \"cost-lines-panel\"\n          }, {\n            default: _withCtx(() => [\n              _createVNode($setup[\"DataTable\"], {\n                columns: $setup.costColumns,\n                rows: $setup.costRows,\n                caption: \"Kosten per maand, excl. btw\",\n                \"row-key\": \"id\",\n                \"data-testid\": \"cost-lines\"\n              }, {\n                \"cell-label\": _withCtx(({ row }) => [\n                  _createElementVNode(\"strong\", null, _toDisplayString(row.label), 1 /* TEXT */)\n                ]),\n                _: 1 /* STABLE */\n              }, 8 /* PROPS */, [\"rows\"]),\n              _createElementVNode(\"p\", _hoisted_5, [\n                _cache[7] || (_cache[7] = _createElementVNode(\"strong\", null, \"Totaal\", -1 /* CACHED */)),\n                _createElementVNode(\"strong\", null, _toDisplayString($setup.formatEuro($setup.total)), 1 /* TEXT */)\n              ])\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"description\"])\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"div\", _hoisted_6, [\n      _createVNode($setup[\"SectionCard\"], {\n        title: \"Schermen\",\n        class: \"plan-tab__screens\"\n      }, {\n        default: _withCtx(() => [\n          _createElementVNode(\"ul\", _hoisted_7, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($props.screenUsage, (usage) => {\n              return (_openBlock(), _createElementBlock(\"li\", {\n                key: usage.id\n              }, [\n                _createElementVNode(\"div\", _hoisted_8, [\n                  _createElementVNode(\"strong\", null, _toDisplayString(usage.name), 1 /* TEXT */),\n                  _createElementVNode(\"strong\", null, [\n                    _createTextVNode(_toDisplayString(usage.limit === null ? `${usage.used}, onbeperkt` : `${usage.used} van ${usage.limit}`) + \" \", 1 /* TEXT */),\n                    (usage.limit !== null && usage.used >= usage.limit)\n                      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9, \"Vol\"))\n                      : _createCommentVNode(\"v-if\", true)\n                  ])\n                ]),\n                (usage.limit !== null)\n                  ? (_openBlock(), _createElementBlock(\"meter\", {\n                      key: 0,\n                      value: usage.used,\n                      min: 0,\n                      max: usage.limit,\n                      \"aria-label\": `Schermen in gebruik: ${usage.name}`\n                    }, null, 8 /* PROPS */, _hoisted_10))\n                  : _createCommentVNode(\"v-if\", true)\n              ]))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]),\n          _createElementVNode(\"a\", {\n            class: \"plan-tab__screens-link\",\n            href: $props.screensHref\n          }, \"Naar schermen\", 8 /* PROPS */, _hoisted_11)\n        ]),\n        _: 1 /* STABLE */\n      }),\n      _renderSlot(_ctx.$slots, \"extensions\", {}, undefined, true)\n    ]),\n    ($props.plan !== 'gratis')\n      ? (_openBlock(), _createElementBlock(\"section\", _hoisted_12, [\n          _createElementVNode(\"header\", null, [\n            _cache[9] || (_cache[9] = _createElementVNode(\"h2\", null, \"Pakketten vergelijken\", -1 /* CACHED */)),\n            _createElementVNode(\"p\", null, [\n              _cache[8] || (_cache[8] = _createTextVNode(\"Prijzen excl. btw. Een jaar kost tien maandbedragen.\", -1 /* CACHED */)),\n              ($props.simulated)\n                ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                    _createTextVNode(\" Overstappen is een simulatie.\")\n                  ], 64 /* STABLE_FRAGMENT */))\n                : _createCommentVNode(\"v-if\", true)\n            ])\n          ]),\n          _createElementVNode(\"div\", _hoisted_13, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.plans, (plan) => {\n              return (_openBlock(), _createElementBlock(\"article\", {\n                key: plan.id,\n                class: _normalizeClass([\"plan-card\", { 'plan-card--current': plan.current }]),\n                \"data-testid\": `plan-card-${plan.id}`\n              }, [\n                (plan.current)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_15, \"Huidig pakket\"))\n                  : _createCommentVNode(\"v-if\", true),\n                _createElementVNode(\"h3\", _hoisted_16, _toDisplayString(plan.name), 1 /* TEXT */),\n                _createElementVNode(\"div\", _hoisted_17, [\n                  _cache[10] || (_cache[10] = _createElementVNode(\"span\", null, \"€\", -1 /* CACHED */)),\n                  _createElementVNode(\"strong\", null, _toDisplayString(plan.monthlyPrice), 1 /* TEXT */)\n                ]),\n                _createElementVNode(\"p\", _hoisted_18, \"per maand, excl. btw · \" + _toDisplayString($setup.formatEuro(plan.yearlyPrice)) + \" per jaar · \" + _toDisplayString(plan.screenLimit === null ? 'onbeperkt schermen' : `${plan.screenLimit} schermen`), 1 /* TEXT */),\n                _createElementVNode(\"p\", _hoisted_19, _toDisplayString($setup.descriptions[plan.id]), 1 /* TEXT */),\n                (!plan.current && $props.changeablePlans?.includes(plan.id))\n                  ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                      key: 1,\n                      variant: \"primary\",\n                      class: \"plan-card__action\",\n                      \"data-testid\": `plan-choose-${plan.id}`,\n                      onClick: $event => ($setup.emit('changePlan', plan.id))\n                    }, {\n                      default: _withCtx(() => [\n                        _createTextVNode(\"Overstappen naar \" + _toDisplayString(plan.name), 1 /* TEXT */),\n                        _createVNode($setup[\"Icon\"], {\n                          name: \"arrow-right\",\n                          size: 18\n                        })\n                      ]),\n                      _: 2 /* DYNAMIC */\n                    }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"data-testid\", \"onClick\"]))\n                  : _createCommentVNode(\"v-if\", true)\n              ], 10 /* CLASS, PROPS */, _hoisted_14))\n            }), 128 /* KEYED_FRAGMENT */))\n          ]),\n          _createElementVNode(\"section\", {\n            class: _normalizeClass([\"plan-tab__matrix\", `plan-tab__matrix--${$props.plan}`])\n          }, [\n            _cache[11] || (_cache[11] = _createElementVNode(\"h3\", null, \"Per mogelijkheid\", -1 /* CACHED */)),\n            _createVNode($setup[\"DataTable\"], {\n              columns: $setup.matrixColumns,\n              rows: $setup.matrixRows,\n              caption: \"Pakketten vergelijken\",\n              \"row-key\": \"id\",\n              \"data-testid\": \"plan-matrix\"\n            }, null, 8 /* PROPS */, [\"columns\", \"rows\"])\n          ], 2 /* CLASS */)\n        ], 512 /* NEED_PATCH */))\n      : _createCommentVNode(\"v-if\", true),\n    _renderSlot(_ctx.$slots, \"billing\", {}, undefined, true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/AbonnementTab.vue\";script.__scopeId = \"data-v-802f762d\";export default script;","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"../../../../../../js/admin-rpc\";\nimport type { ContextMenuItem } from \"../../../lib/context-menu\";\nimport { showToast } from \"../../../lib/toast\";\nimport UsersTable from \"../../instellingen/UsersTable.vue\";\nimport SectionCard from \"../../ui/SectionCard.vue\";\nimport DataTable from \"../../ui/DataTable.vue\";\nimport EmptyState from \"../../ui/EmptyState.vue\";\nimport Button from \"../../ui/Button.vue\";\nimport ConfirmDialog from \"../../ui/ConfirmDialog.vue\";\nimport SearchFilter from \"../../ui/SearchFilter.vue\";\nimport Skeleton from \"../../ui/Skeleton.vue\";\nimport { useLoadingIndicator } from \"../../../lib/loading\";\nimport InviteUserDialog from \"./InviteUserDialog.vue\";\n\nconst props = defineProps<{ bootstrap: AdminBootstrap }>();\nconst emit = defineEmits<{ loaded: [count: number] }>();\nconst api = rpc(\"velkom:admin\");\nconst users = ref<Awaited<ReturnType<typeof api.users>> | null>(null);\nconst loading = ref(false);\n// Only the first load holds the panel; later refreshes keep the loaded tables visible.\nconst loadingIndicator = useLoadingIndicator(() => loading.value && !users.value);\nconst error = ref(\"\");\nconst actionError = ref(\"\");\nconst inviteOpen = ref(false);\nconst pending = ref(false);\nconst search = ref(\"\");\nconst target = ref<{ kind: \"member\" | \"invitation\"; id: number; label: string } | null>(null);\nconst invitationColumns = [{ key: \"email\", label: \"E-mailadres\" }, { key: \"expiresAt\", label: \"Geldig tot\" }, { key: \"actions\", label: \"Acties\", touchOnly: true }];\nconst members = computed(() => users.value?.members.filter(member => `${member.name} ${member.email}`.toLocaleLowerCase(\"nl-NL\").includes(search.value.toLocaleLowerCase(\"nl-NL\"))).map(member => ({ ...member, isCurrentUser: member.userId === props.bootstrap.identity.id, statusLabel: \"Actief\", statusTone: \"success\" as const })) ?? []);\nconst timeFormat = new Intl.DateTimeFormat(\"nl-NL\", { timeZone: \"Europe/Amsterdam\", dateStyle: \"medium\", timeStyle: \"short\" });\n\nasync function load(): Promise<void> {\n  if (loading.value)\n    return;\n  loading.value = true;\n  error.value = \"\";\n  try {\n    users.value = await api.users();\n    emit(\"loaded\", users.value.members.length);\n  } catch {\n    users.value = null;\n    error.value = \"De gebruikers konden niet worden geladen. Probeer het opnieuw.\";\n  } finally {\n    loading.value = false;\n  }\n}\n\ntype MenuActions = { label: string; items: ContextMenuItem[] };\ntype Invitation = NonNullable<typeof users.value>[\"invitations\"][number];\n\nfunction memberMenu(row: (typeof members.value)[number]): MenuActions {\n  const label = row.name || row.email;\n  return { label: `Acties voor ${label}`, items: [{ label: \"Toegang intrekken\", destructive: true, disabled: pending.value || loading.value, action: () => confirmRevoke({ kind: \"member\", id: row.id, label }) }] };\n}\n\nfunction invitationMenu(row: Invitation): MenuActions {\n  return { label: `Acties voor ${row.email}`, items: [{ label: \"Uitnodiging intrekken\", destructive: true, disabled: pending.value || loading.value, action: () => confirmRevoke({ kind: \"invitation\", id: row.id, label: row.email }) }] };\n}\n\nfunction confirmRevoke(value: NonNullable<typeof target.value>): void {\n  actionError.value = \"\";\n  target.value = value;\n}\n\nasync function revoke(): Promise<void> {\n  if (pending.value || !target.value)\n    return;\n  pending.value = true;\n  actionError.value = \"\";\n  const selection = target.value;\n  try {\n    if (selection.kind === \"member\")\n      await api.revokeMembership({ id: selection.id });\n    else\n      await api.revokeInvitation({ id: selection.id });\n    target.value = null;\n    showToast(selection.kind === \"member\" ? \"Toegang ingetrokken\" : \"Uitnodiging ingetrokken\");\n    await load();\n  } catch (cause) {\n    const message = cause instanceof Error ? cause.message.replace(/^RPC Error: /, \"\") : \"\";\n    actionError.value = [\"De laatste actieve gebruiker kan niet worden verwijderd.\", \"Deze gebruiker is niet gevonden.\", \"Deze uitnodiging is niet gevonden.\"].includes(message)\n      ? message : \"Intrekken is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n\nfunction invited(): void {\n  inviteOpen.value = false;\n  showToast(\"Uitnodiging verstuurd\");\n  void load();\n}\nonMounted(() => { void load(); });\n</script>\n\n<template>\n  <section class=\"users-panel\">\n    <div class=\"users__sections\" :aria-busy=\"loading\">\n      <Skeleton v-if=\"loadingIndicator.holding\" label=\"Gebruikers laden\" :visible=\"loadingIndicator.visible\" :count=\"4\" :height=\"52\" />\n      <EmptyState v-if=\"error\" kind=\"error\" title=\"Gebruikers niet beschikbaar\" :description=\"error\">\n        <template #actions><Button @click=\"load\">Opnieuw proberen</Button></template>\n      </EmptyState>\n      <template v-if=\"users && !loadingIndicator.holding\">\n        <SectionCard title=\"Gebruikers\" description=\"Wie in Velkom kan inloggen voor deze organisatie. Een gebruiker is geen contactpersoon.\">\n          <template #actions><Button variant=\"primary\" :disabled=\"loading || pending\" @click=\"inviteOpen = true\">Gebruiker uitnodigen</Button></template>\n          <SearchFilter v-if=\"users.members.length >= 10 || search\" v-model=\"search\" label=\"Gebruikers zoeken\" />\n          <UsersTable :rows=\"members\" :row-menu=\"memberMenu\">\n            <template #actions=\"{ row }\"><Button variant=\"danger\" size=\"sm\" :disabled=\"pending || loading\" @click=\"confirmRevoke({ kind: 'member', id: row.id, label: row.name || row.email })\">Toegang intrekken</Button></template>\n            <template #empty><EmptyState :title=\"search ? 'Geen gebruikers gevonden' : 'Nog geen gebruikers'\" /></template>\n          </UsersTable>\n        </SectionCard>\n        <SectionCard title=\"Openstaande uitnodigingen\">\n          <DataTable :columns=\"invitationColumns\" :rows=\"users.invitations\" caption=\"Openstaande uitnodigingen\" row-key=\"id\" :row-menu=\"invitationMenu\">\n            <template #cell-expiresAt=\"{ row }\">{{ timeFormat.format(new Date(row.expiresAt)) }}</template>\n            <template #cell-actions=\"{ row }\"><Button variant=\"danger\" size=\"sm\" :disabled=\"pending || loading\" @click=\"confirmRevoke({ kind: 'invitation', id: row.id, label: row.email })\">Uitnodiging intrekken</Button></template>\n            <template #empty><p class=\"users__empty\">Geen openstaande uitnodigingen</p></template>\n          </DataTable>\n        </SectionCard>\n      </template>\n    </div>\n    <InviteUserDialog :open=\"inviteOpen\" @close=\"inviteOpen = false\" @saved=\"invited\" />\n    <ConfirmDialog :open=\"target !== null\" :title=\"target?.kind === 'member' ? 'Toegang intrekken' : 'Uitnodiging intrekken'\"\n                   :item-name=\"target?.label\" message=\"Weet je zeker dat je deze toegang wilt intrekken?\"\n                   :consequence=\"target?.kind === 'member' ? 'Deze gebruiker verliest toegang tot deze organisatie. Medewerkers en bezoekhistorie blijven behouden.' : 'Deze uitnodigingslink kan daarna niet meer worden gebruikt.'\"\n                   confirm-label=\"Intrekken\" pending-label=\"Intrekken...\" :pending=\"pending\" @cancel=\"target = null\" @confirm=\"revoke\">\n      <span v-if=\"actionError\" class=\"users__error\" role=\"alert\">{{ actionError }}</span>\n      <span v-else>Weet je zeker dat je {{ target?.kind === 'member' ? 'de toegang' : 'de uitnodiging' }} wilt intrekken?</span>\n    </ConfirmDialog>\n  </section>\n</template>\n\n<style scoped>\n.users__sections { display: grid; gap: 24px; }\n.users-panel :deep(.section-card) { padding: 0; gap: 0; background: var(--paper); border: 1px solid var(--border); }\n.users-panel :deep(.section-card__header) { padding: 20px 24px 12px; align-items: flex-end; gap: 16px; }\n.users-panel :deep(.section-card__description) { margin-top: 2px; font-size: 14px; }\n.users-panel :deep(.section-card__title) { font-weight: 600; }\n.users-panel :deep(.dt__table) { font-size: 14px; }\n.users-panel :deep(.dt__table th) { padding: 10px 12px; font-size: 13px; }\n.users-panel :deep(.dt__table td) { padding: 12px; }\n.users-panel :deep(.dt__table th:first-child), .users-panel :deep(.dt__table td:first-child) { padding-left: 24px; }\n.users-panel :deep(.dt__table th:last-child), .users-panel :deep(.dt__table td:last-child) { padding-right: 24px; }\n.users__name { display: flex; align-items: center; gap: 10px; font-weight: 700; }\n.users__you { border: 1.5px solid var(--foreground); border-radius: 999px; padding: 0 8px; font-size: 12px; font-weight: 700; }\n.users__status { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 12px 0 9px; border-radius: 999px; background: var(--lime); font-size: 13px; font-weight: 700; }\n.users__error { margin: 0; color: var(--danger); }\n.users__empty { margin: 0; padding: 12px 24px 20px; color: var(--muted-foreground); font-size: 14px; }\n@media (max-width: 767px) {\n  .users-panel :deep(.section-card) { border-radius: 20px; overflow: hidden; }\n  .users-panel :deep(.dt__table) { min-width: 0; }\n  .users-panel :deep(.dt__table tr) { padding: 16px 24px; }\n  .users-panel :deep(.dt__table td), .users-panel :deep(.dt__table td:first-child), .users-panel :deep(.dt__table td:last-child) { padding: 4px 0; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport Badge from \"../ui/Badge.vue\";\nimport DataTable from \"../ui/DataTable.vue\";\nimport EmptyState from \"../ui/EmptyState.vue\";\nimport StatusBadge from \"../ui/StatusBadge.vue\";\nimport type { StatusTone, TableColumn } from \"../../lib/ui\";\nimport type { ContextMenuItem } from \"../../lib/context-menu\";\n\ntype UserRow = { id: string | number; name: string; email: string; isCurrentUser?: boolean; roleLabel?: string; statusLabel: string; statusTone: StatusTone };\n\nconst props = defineProps<{\n  rows: UserRow[];\n  roles?: boolean;\n  rowMenu?: (row: UserRow) => { label: string; items: ContextMenuItem[] };\n}>();\nconst columns = computed<TableColumn[]>(() => [\n  { key: \"name\", label: \"Naam\" },\n  { key: \"email\", label: \"E-mailadres\" },\n  ...(props.roles ? [{ key: \"roleLabel\", label: \"Rol\" }] : []),\n  { key: \"status\", label: \"Status\" },\n  { key: \"actions\", label: \"Acties\", align: \"end\", touchOnly: Boolean(props.rowMenu) },\n]);\n</script>\n\n<template>\n  <DataTable class=\"users-table\" :columns=\"columns\" :rows=\"rows\" caption=\"Gebruikers van deze organisatie\" row-key=\"id\" :row-menu=\"rowMenu\" data-testid=\"users-table\">\n    <template #cell-name=\"{ row }\"><span class=\"users-table__name\"><strong>{{ row.name || 'Niet ingesteld' }}</strong><Badge v-if=\"row.isCurrentUser\" class=\"users-table__you\">Jij</Badge></span></template>\n    <template #cell-email=\"{ row }\"><span class=\"users-table__email\">{{ row.email }}</span></template>\n    <template #cell-status=\"{ row }\"><StatusBadge :tone=\"row.statusTone\" :icon=\"row.statusTone === 'success' ? 'checkmark' : undefined\" :label=\"row.statusLabel\" /></template>\n    <template #cell-actions=\"{ row }\"><div class=\"users-table__actions\"><slot name=\"actions\" :row=\"row\" /></div></template>\n    <template #empty><slot name=\"empty\"><EmptyState title=\"Nog geen gebruikers\" /></slot></template>\n  </DataTable>\n</template>\n\n<style scoped>\n.users-table__name { display: inline-flex; align-items: center; gap: 10px; }\n.users-table__you { height: auto; padding: 0 8px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-size: 12px; font-weight: 700; line-height: 1.5; }\n.users-table :deep(td[data-label=\"Rol\"]) { font-weight: 600; }\n.users-table :deep(.status--success .status__icon) { color: var(--foreground); width: 16px; height: 16px; }\n.users-table__email { overflow-wrap: anywhere; }\n.users-table__actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 4px; }\n</style>\n","import { defineComponent as _defineComponent } from 'vue'\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'Badge',\n  props: {\n    tone: { type: String, required: false, default: \"neutral\" }\n  },\n  setup(__props: any, { expose: __expose }) {\n  __expose();\n\n\n\nconst __returned__ = {  }\nObject.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true })\nreturn __returned__\n}\n\n})\n\n//@ sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL29wdC93aGRhdGEvaW5zdGFsbGVkbW9kdWxlcy92ZWxrb20uMjAyNjExMDJUMTA0NzI1LjU3OFovd2ViZGVzaWducy9hZG1pbi9mcm9udGVuZC9jb21wb25lbnRzL3VpL0JhZGdlLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8dGVtcGxhdGU+XG4gIDxzcGFuIGNsYXNzPVwiYmFkZ2VcIiA6Y2xhc3M9XCJgYmFkZ2UtLSR7dG9uZX1gXCI+PHNsb3QgLz48L3NwYW4+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxud2l0aERlZmF1bHRzKGRlZmluZVByb3BzPHsgdG9uZT86IFwibmV1dHJhbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwiZGFuZ2VyXCIgfCBcIndhcm5pbmdcIiB9PigpLCB7IHRvbmU6IFwibmV1dHJhbFwiIH0pO1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uYmFkZ2Uge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgcGFkZGluZzogMCA4cHg7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1jb250cm9sKTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmJhZGdlLS1uZXV0cmFsIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tc2VsZWN0ZWQpO1xuICBjb2xvcjogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCk7XG59XG5cbi5iYWRnZS0tcHJpbWFyeSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7XG4gIGNvbG9yOiB2YXIoLS1wcmltYXJ5KTtcbn1cblxuLmJhZGdlLS1zdWNjZXNzIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tc3VjY2Vzcy1zb2Z0KTtcbiAgY29sb3I6IHZhcigtLXN1Y2Nlc3MpO1xufVxuXG4uYmFkZ2UtLWRhbmdlciB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWRhbmdlci1zb2Z0KTtcbiAgY29sb3I6IHZhcigtLWRhbmdlcik7XG59XG5cbi5iYWRnZS0td2FybmluZyB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXdhcm5pbmctc29mdCk7XG4gIGNvbG9yOiB2YXIoLS13YXJuaW5nKTtcbn1cbjwvc3R5bGU+XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7In0=","import { renderSlot as _renderSlot, normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"span\", {\n    class: _normalizeClass([\"badge\", `badge--${$props.tone}`])\n  }, [\n    _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Badge.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Badge.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Badge.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Badge.vue\";script.__scopeId = \"data-v-aeb4ded7\";export default script;","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = { class: \"users-table__name\" }\nconst _hoisted_2 = { class: \"users-table__email\" }\nconst _hoisted_3 = { class: \"users-table__actions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"DataTable\"], {\n    class: \"users-table\",\n    columns: $setup.columns,\n    rows: $props.rows,\n    caption: \"Gebruikers van deze organisatie\",\n    \"row-key\": \"id\",\n    \"row-menu\": $props.rowMenu,\n    \"data-testid\": \"users-table\"\n  }, {\n    \"cell-name\": _withCtx(({ row }) => [\n      _createElementVNode(\"span\", _hoisted_1, [\n        _createElementVNode(\"strong\", null, _toDisplayString(row.name || 'Niet ingesteld'), 1 /* TEXT */),\n        (row.isCurrentUser)\n          ? (_openBlock(), _createBlock($setup[\"Badge\"], {\n              key: 0,\n              class: \"users-table__you\"\n            }, {\n              default: _withCtx(() => _cache[0] || (_cache[0] = [\n                _createTextVNode(\"Jij\", -1 /* CACHED */)\n              ])),\n              _: 1 /* STABLE */,\n              __: [0]\n            }))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    \"cell-email\": _withCtx(({ row }) => [\n      _createElementVNode(\"span\", _hoisted_2, _toDisplayString(row.email), 1 /* TEXT */)\n    ]),\n    \"cell-status\": _withCtx(({ row }) => [\n      _createVNode($setup[\"StatusBadge\"], {\n        tone: row.statusTone,\n        icon: row.statusTone === 'success' ? 'checkmark' : undefined,\n        label: row.statusLabel\n      }, null, 8 /* PROPS */, [\"tone\", \"icon\", \"label\"])\n    ]),\n    \"cell-actions\": _withCtx(({ row }) => [\n      _createElementVNode(\"div\", _hoisted_3, [\n        _renderSlot(_ctx.$slots, \"actions\", { row: row }, undefined, true)\n      ])\n    ]),\n    empty: _withCtx(() => [\n      _renderSlot(_ctx.$slots, \"empty\", {}, () => [\n        _createVNode($setup[\"EmptyState\"], { title: \"Nog geen gebruikers\" })\n      ], true)\n    ]),\n    _: 3 /* FORWARDED */\n  }, 8 /* PROPS */, [\"columns\", \"rows\", \"row-menu\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/UsersTable.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/UsersTable.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/UsersTable.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/instellingen/UsersTable.vue\";script.__scopeId = \"data-v-fcaa4be0\";export default script;","<script setup lang=\"ts\">\nimport { reactive, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport Dialog from \"../../ui/Dialog.vue\";\nimport FormField from \"../../ui/FormField.vue\";\nimport TextInput from \"../../ui/TextInput.vue\";\nimport { rules, useFormValidation } from \"../../../composables/useFormValidation\";\nimport { useGuardedForm } from \"../../../composables/useFormGuard\";\n\nconst props = defineProps<{ open: boolean }>();\nconst emit = defineEmits<{ close: []; saved: [] }>();\nconst api = rpc(\"velkom:admin\");\nconst model = reactive({ email: \"\", name: \"\" });\nconst form = useFormValidation(model, { email: [rules.required(\"Vul een e-mailadres in.\"), rules.email()], name: [rules.maxLength(200)] });\nconst guard = useGuardedForm(\"Gebruiker uitnodigen\", model, { active: () => props.open });\nconst pending = ref(false);\nconst error = ref(\"\");\nwatch(() => props.open, open => {\n  if (open) {\n    guard.load({ email: \"\", name: \"\" });\n    form.reset();\n    error.value = \"\";\n  }\n});\n\nasync function onSubmit(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    await api.inviteUser({ email: model.email.trim(), ...(model.name.trim() ? { name: model.name.trim() } : {}) });\n    guard.commit();\n    emit(\"saved\");\n  } catch (cause) {\n    const message = cause instanceof Error ? cause.message.replace(/^RPC Error: /, \"\") : \"\";\n    if (message.includes(\"heeft al toegang.\"))\n      form.setError(\"email\", \"Deze gebruiker heeft al toegang.\");\n    else if (message.startsWith(\"Vul een geldig e-mailadres\"))\n      form.setError(\"email\", \"Vul een geldig e-mailadres in.\");\n    else if (message === \"Dit account kan geen toegang krijgen. Neem contact op met de beheerder.\")\n      error.value = message;\n    else\n      error.value = \"Uitnodigen is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n</script>\n\n<template>\n  <Dialog :open=\"open\" title=\"Gebruiker uitnodigen\" form submit-label=\"Uitnodigen\" pending-label=\"Uitnodigen...\"\n          :guard=\"guard\" :pending=\"pending\" @close=\"emit('close')\" @submit=\"onSubmit\">\n    <div class=\"invite-user__fields\">\n      <p v-if=\"error\" class=\"invite-user__error\" role=\"alert\">{{ error }}</p>\n      <FormField label=\"E-mailadres\" :field-id=\"form.fieldId('email')\" :error=\"form.errors.email\" required>\n        <TextInput v-model=\"model.email\" type=\"email\" autocomplete=\"email\" :disabled=\"pending\" />\n      </FormField>\n      <FormField label=\"Naam\" :field-id=\"form.fieldId('name')\" :error=\"form.errors.name\">\n        <TextInput v-model=\"model.name\" autocomplete=\"name\" :disabled=\"pending\" />\n      </FormField>\n      <p class=\"invite-user__help\">De gebruiker ontvangt per e-mail een uitnodiging die 72 uur geldig is.</p>\n    </div>\n  </Dialog>\n</template>\n\n<style scoped>\n.invite-user__fields { display: grid; gap: 16px; }\n.invite-user__help { margin: 0; color: var(--muted-foreground); }\n.invite-user__error { margin: 0; color: var(--danger); }\n</style>\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, createElementVNode as _createElementVNode, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"invite-user__fields\" }\nconst _hoisted_2 = {\n  key: 0,\n  class: \"invite-user__error\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: \"Gebruiker uitnodigen\",\n    form: \"\",\n    \"submit-label\": \"Uitnodigen\",\n    \"pending-label\": \"Uitnodigen...\",\n    guard: $setup.guard,\n    pending: $setup.pending,\n    onClose: _cache[2] || (_cache[2] = $event => ($setup.emit('close'))),\n    onSubmit: $setup.onSubmit\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", _hoisted_1, [\n        ($setup.error)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString($setup.error), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createVNode($setup[\"FormField\"], {\n          label: \"E-mailadres\",\n          \"field-id\": $setup.form.fieldId('email'),\n          error: $setup.form.errors.email,\n          required: \"\"\n        }, {\n          default: _withCtx(() => [\n            _createVNode($setup[\"TextInput\"], {\n              modelValue: $setup.model.email,\n              \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.email) = $event)),\n              type: \"email\",\n              autocomplete: \"email\",\n              disabled: $setup.pending\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n        _createVNode($setup[\"FormField\"], {\n          label: \"Naam\",\n          \"field-id\": $setup.form.fieldId('name'),\n          error: $setup.form.errors.name\n        }, {\n          default: _withCtx(() => [\n            _createVNode($setup[\"TextInput\"], {\n              modelValue: $setup.model.name,\n              \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.model.name) = $event)),\n              autocomplete: \"name\",\n              disabled: $setup.pending\n            }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n        _cache[3] || (_cache[3] = _createElementVNode(\"p\", { class: \"invite-user__help\" }, \"De gebruiker ontvangt per e-mail een uitnodiging die 72 uur geldig is.\", -1 /* CACHED */))\n      ])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\", \"guard\", \"pending\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/InviteUserDialog.vue\";script.__scopeId = \"data-v-2a9b8960\";export default script;","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"users-panel\" }\nconst _hoisted_2 = [\"aria-busy\"]\nconst _hoisted_3 = {\n  key: 0,\n  class: \"users__error\",\n  role: \"alert\"\n}\nconst _hoisted_4 = { key: 1 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"section\", _hoisted_1, [\n    _createElementVNode(\"div\", {\n      class: \"users__sections\",\n      \"aria-busy\": $setup.loading\n    }, [\n      ($setup.loadingIndicator.holding)\n        ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n            key: 0,\n            label: \"Gebruikers laden\",\n            visible: $setup.loadingIndicator.visible,\n            count: 4,\n            height: 52\n          }, null, 8 /* PROPS */, [\"visible\"]))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.error)\n        ? (_openBlock(), _createBlock($setup[\"EmptyState\"], {\n            key: 1,\n            kind: \"error\",\n            title: \"Gebruikers niet beschikbaar\",\n            description: $setup.error\n          }, {\n            actions: _withCtx(() => [\n              _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                default: _withCtx(() => _cache[4] || (_cache[4] = [\n                  _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                ])),\n                _: 1 /* STABLE */,\n                __: [4]\n              })\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"description\"]))\n        : _createCommentVNode(\"v-if\", true),\n      ($setup.users && !$setup.loadingIndicator.holding)\n        ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n            _createVNode($setup[\"SectionCard\"], {\n              title: \"Gebruikers\",\n              description: \"Wie in Velkom kan inloggen voor deze organisatie. Een gebruiker is geen contactpersoon.\"\n            }, {\n              actions: _withCtx(() => [\n                _createVNode($setup[\"Button\"], {\n                  variant: \"primary\",\n                  disabled: $setup.loading || $setup.pending,\n                  onClick: _cache[0] || (_cache[0] = $event => ($setup.inviteOpen = true))\n                }, {\n                  default: _withCtx(() => _cache[5] || (_cache[5] = [\n                    _createTextVNode(\"Gebruiker uitnodigen\", -1 /* CACHED */)\n                  ])),\n                  _: 1 /* STABLE */,\n                  __: [5]\n                }, 8 /* PROPS */, [\"disabled\"])\n              ]),\n              default: _withCtx(() => [\n                ($setup.users.members.length >= 10 || $setup.search)\n                  ? (_openBlock(), _createBlock($setup[\"SearchFilter\"], {\n                      key: 0,\n                      modelValue: $setup.search,\n                      \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.search) = $event)),\n                      label: \"Gebruikers zoeken\"\n                    }, null, 8 /* PROPS */, [\"modelValue\"]))\n                  : _createCommentVNode(\"v-if\", true),\n                _createVNode($setup[\"UsersTable\"], {\n                  rows: $setup.members,\n                  \"row-menu\": $setup.memberMenu\n                }, {\n                  actions: _withCtx(({ row }) => [\n                    _createVNode($setup[\"Button\"], {\n                      variant: \"danger\",\n                      size: \"sm\",\n                      disabled: $setup.pending || $setup.loading,\n                      onClick: $event => ($setup.confirmRevoke({ kind: 'member', id: row.id, label: row.name || row.email }))\n                    }, {\n                      default: _withCtx(() => _cache[6] || (_cache[6] = [\n                        _createTextVNode(\"Toegang intrekken\", -1 /* CACHED */)\n                      ])),\n                      _: 2 /* DYNAMIC */,\n                      __: [6]\n                    }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"disabled\", \"onClick\"])\n                  ]),\n                  empty: _withCtx(() => [\n                    _createVNode($setup[\"EmptyState\"], {\n                      title: $setup.search ? 'Geen gebruikers gevonden' : 'Nog geen gebruikers'\n                    }, null, 8 /* PROPS */, [\"title\"])\n                  ]),\n                  _: 1 /* STABLE */\n                }, 8 /* PROPS */, [\"rows\"])\n              ]),\n              _: 1 /* STABLE */\n            }),\n            _createVNode($setup[\"SectionCard\"], { title: \"Openstaande uitnodigingen\" }, {\n              default: _withCtx(() => [\n                _createVNode($setup[\"DataTable\"], {\n                  columns: $setup.invitationColumns,\n                  rows: $setup.users.invitations,\n                  caption: \"Openstaande uitnodigingen\",\n                  \"row-key\": \"id\",\n                  \"row-menu\": $setup.invitationMenu\n                }, {\n                  \"cell-expiresAt\": _withCtx(({ row }) => [\n                    _createTextVNode(_toDisplayString($setup.timeFormat.format(new Date(row.expiresAt))), 1 /* TEXT */)\n                  ]),\n                  \"cell-actions\": _withCtx(({ row }) => [\n                    _createVNode($setup[\"Button\"], {\n                      variant: \"danger\",\n                      size: \"sm\",\n                      disabled: $setup.pending || $setup.loading,\n                      onClick: $event => ($setup.confirmRevoke({ kind: 'invitation', id: row.id, label: row.email }))\n                    }, {\n                      default: _withCtx(() => _cache[7] || (_cache[7] = [\n                        _createTextVNode(\"Uitnodiging intrekken\", -1 /* CACHED */)\n                      ])),\n                      _: 2 /* DYNAMIC */,\n                      __: [7]\n                    }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"disabled\", \"onClick\"])\n                  ]),\n                  empty: _withCtx(() => _cache[8] || (_cache[8] = [\n                    _createElementVNode(\"p\", { class: \"users__empty\" }, \"Geen openstaande uitnodigingen\", -1 /* CACHED */)\n                  ])),\n                  _: 1 /* STABLE */\n                }, 8 /* PROPS */, [\"rows\"])\n              ]),\n              _: 1 /* STABLE */\n            })\n          ], 64 /* STABLE_FRAGMENT */))\n        : _createCommentVNode(\"v-if\", true)\n    ], 8 /* PROPS */, _hoisted_2),\n    _createVNode($setup[\"InviteUserDialog\"], {\n      open: $setup.inviteOpen,\n      onClose: _cache[2] || (_cache[2] = $event => ($setup.inviteOpen = false)),\n      onSaved: $setup.invited\n    }, null, 8 /* PROPS */, [\"open\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.target !== null,\n      title: $setup.target?.kind === 'member' ? 'Toegang intrekken' : 'Uitnodiging intrekken',\n      \"item-name\": $setup.target?.label,\n      message: \"Weet je zeker dat je deze toegang wilt intrekken?\",\n      consequence: $setup.target?.kind === 'member' ? 'Deze gebruiker verliest toegang tot deze organisatie. Medewerkers en bezoekhistorie blijven behouden.' : 'Deze uitnodigingslink kan daarna niet meer worden gebruikt.',\n      \"confirm-label\": \"Intrekken\",\n      \"pending-label\": \"Intrekken...\",\n      pending: $setup.pending,\n      onCancel: _cache[3] || (_cache[3] = $event => ($setup.target = null)),\n      onConfirm: $setup.revoke\n    }, {\n      default: _withCtx(() => [\n        ($setup.actionError)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, _toDisplayString($setup.actionError), 1 /* TEXT */))\n          : (_openBlock(), _createElementBlock(\"span\", _hoisted_4, \"Weet je zeker dat je \" + _toDisplayString($setup.target?.kind === 'member' ? 'de toegang' : 'de uitnodiging') + \" wilt intrekken?\", 1 /* TEXT */))\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"title\", \"item-name\", \"consequence\", \"pending\"])\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/users/CustomerUsersPanel.vue\";script.__scopeId = \"data-v-853360b7\";export default script;","import { createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"organization-settings\"\n}\nconst _hoisted_2 = {\n  key: 2,\n  role: \"status\"\n}\nconst _hoisted_3 = {\n  key: 2,\n  role: \"status\"\n}\nconst _hoisted_4 = {\n  key: 2,\n  role: \"status\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"SettingsLayout\"], {\n    \"org-name\": $setup.orgName,\n    user: $setup.user,\n    \"member-count\": $setup.memberCount,\n    \"plan-name\": $setup.plan.name,\n    \"retention-days\": $setup.settings?.privacy.retentionDays,\n    \"show-logout\": \"\",\n    onLogout: _cache[1] || (_cache[1] = $event => ($setup.emit('logout')))\n  }, {\n    organisatie: _withCtx(() => [\n      ($setup.settings)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n            _createVNode($setup[\"OrganisatieTab\"], {\n              profile: $setup.settings.profile,\n              user: $setup.user,\n              \"save-profile\": $setup.saveProfile\n            }, null, 8 /* PROPS */, [\"profile\", \"user\"]),\n            _createVNode($setup[\"ReceptionSettingsPanel\"], {\n              reception: $setup.settings.reception,\n              \"save-reception\": $setup.saveReception\n            }, null, 8 /* PROPS */, [\"reception\"])\n          ]))\n        : ($setup.error)\n          ? (_openBlock(), _createBlock($setup[\"EmptyState\"], {\n              key: 1,\n              kind: \"error\",\n              title: \"Instellingen niet beschikbaar\",\n              description: $setup.error\n            }, {\n              actions: _withCtx(() => [\n                _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                  default: _withCtx(() => _cache[2] || (_cache[2] = [\n                    _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                  ])),\n                  _: 1 /* STABLE */,\n                  __: [2]\n                })\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"description\"]))\n          : (_openBlock(), _createElementBlock(\"p\", _hoisted_2, \"Instellingen laden...\"))\n    ]),\n    gebruikers: _withCtx(() => [\n      _createVNode($setup[\"CustomerUsersPanel\"], {\n        bootstrap: $props.bootstrap,\n        onLoaded: _cache[0] || (_cache[0] = $event => ($setup.memberCount = $event))\n      }, null, 8 /* PROPS */, [\"bootstrap\"])\n    ]),\n    abonnement: _withCtx(() => [\n      ($setup.error)\n        ? (_openBlock(), _createBlock($setup[\"EmptyState\"], {\n            key: 0,\n            kind: \"error\",\n            title: \"Instellingen niet beschikbaar\",\n            description: $setup.error\n          }, {\n            actions: _withCtx(() => [\n              _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                default: _withCtx(() => _cache[3] || (_cache[3] = [\n                  _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                ])),\n                _: 1 /* STABLE */,\n                __: [3]\n              })\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"description\"]))\n        : ($setup.screens)\n          ? (_openBlock(), _createBlock($setup[\"AbonnementTab\"], {\n              key: 1,\n              plan: $props.bootstrap.subscription.plan,\n              \"screen-usage\": $setup.usage,\n              \"screens-href\": $setup.customerHref('schermen')\n            }, null, 8 /* PROPS */, [\"plan\", \"screen-usage\", \"screens-href\"]))\n          : (_openBlock(), _createElementBlock(\"p\", _hoisted_3, \"Abonnement laden...\"))\n    ]),\n    privacy: _withCtx(() => [\n      ($setup.settings)\n        ? (_openBlock(), _createBlock($setup[\"PrivacyTab\"], {\n            key: 0,\n            privacy: $setup.settings.privacy,\n            \"save-privacy\": $setup.savePrivacy\n          }, null, 8 /* PROPS */, [\"privacy\"]))\n        : ($setup.error)\n          ? (_openBlock(), _createBlock($setup[\"EmptyState\"], {\n              key: 1,\n              kind: \"error\",\n              title: \"Instellingen niet beschikbaar\",\n              description: $setup.error\n            }, {\n              actions: _withCtx(() => [\n                _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                  default: _withCtx(() => _cache[4] || (_cache[4] = [\n                    _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                  ])),\n                  _: 1 /* STABLE */,\n                  __: [4]\n                })\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"description\"]))\n          : (_openBlock(), _createElementBlock(\"p\", _hoisted_4, \"Instellingen laden...\"))\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"org-name\", \"user\", \"member-count\", \"plan-name\", \"retention-days\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/InstellingenView.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/InstellingenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/InstellingenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/InstellingenView.vue\";script.__scopeId = \"data-v-581956ca\";export default script;","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"../../../../../js/admin-rpc\";\nimport type { AdminScreen } from \"../../../../../js/screens\";\nimport { route } from \"../../lib/router\";\nimport { customerHref } from \"../../lib/customer\";\nimport { showToast } from \"../../lib/toast\";\nimport ConfirmDialog from \"../../components/ui/ConfirmDialog.vue\";\nimport PageHeader from \"../../components/ui/PageHeader.vue\";\nimport ScreenDetail from \"../../components/customer/screens/ScreenDetail.vue\";\nimport ScreenDialog from \"../../components/customer/screens/ScreenDialog.vue\";\nimport { formatDate, formatTime } from \"../../lib/format\";\nimport Skeleton from \"../../components/ui/Skeleton.vue\";\nimport ContextMenu from \"../../components/ui/ContextMenu.vue\";\nimport type { ContextMenuItem } from \"../../lib/context-menu\";\nimport { useLoadingIndicator } from \"../../lib/loading\";\n\nconst props = defineProps<{ bootstrap: AdminBootstrap }>();\nconst api = rpc(\"velkom:admin\");\nconst showPackageHint = computed(() => props.bootstrap.subscription.plan !== \"gratis\");\n// Keep the latest kiosk interaction visible without requiring a page reload.\nconst REFRESH_MS = 30_000;\nconst screens = ref<AdminScreen[]>([]);\nconst limit = ref(props.bootstrap.customer.screenLimit);\nconst kioskUrl = ref<string | null>(null);\nconst org = ref<string | null>(null);\nconst kioskTheme = ref<\"standaard\" | \"nieuweweme\" | \"connectworks\">(\"standaard\");\nconst branding = ref<{ companyName: string; color: string; logo: string | null } | null>(null);\nconst loading = ref(true);\nconst loadingIndicator = useLoadingIndicator(() => loading.value);\nconst error = ref(false);\nconst dialogOpen = ref(false);\nconst resetting = ref<AdminScreen | null>(null);\nconst resetPending = ref(false);\nconst resetError = ref(false);\nconst archiving = ref<AdminScreen | null>(null);\nconst archivePending = ref(false);\nconst archiveError = ref(false);\nlet refreshTimer: ReturnType<typeof setInterval> | undefined;\nlet readVersion = 0;\n\nconst detailId = computed(() => route.value.rest.length === 1 ? Number(route.value.rest[0]) : null);\nconst detail = computed(() => detailId.value === null ? null : screens.value.find(screen => screen.id === detailId.value) ?? null);\nconst full = computed(() => limit.value !== null && screens.value.length >= limit.value);\n\nasync function load(options: { quiet?: boolean } = {}): Promise<void> {\n  const version = ++readVersion;\n  if (!options.quiet) {\n    loading.value = true;\n    error.value = false;\n  }\n  try {\n    const result = await api.screens();\n    if (version !== readVersion)\n      return;\n    screens.value = result.items;\n    limit.value = result.limit;\n    kioskUrl.value = result.kioskUrl;\n    org.value = result.org;\n    kioskTheme.value = result.reception?.kioskTheme ?? \"standaard\";\n    branding.value = result.branding ?? null;\n    error.value = false;\n  } catch {\n    // A failed background refresh keeps the last known list.\n    if (!options.quiet && version === readVersion) {\n      screens.value = [];\n      error.value = true;\n    }\n  } finally {\n    loading.value = false;\n  }\n}\n\nfunction upsert(screen: AdminScreen): void {\n  // An earlier background read must not restore a URL that has just been revoked.\n  readVersion++;\n  screens.value = [...screens.value.filter(row => row.id !== screen.id), screen].toSorted((a, b) => a.name.localeCompare(b.name, \"nl\") || a.id - b.id);\n}\n\nfunction add(): void {\n  dialogOpen.value = true;\n}\n\nfunction created(screen: AdminScreen): void {\n  upsert(screen);\n  dialogOpen.value = false;\n  showToast(\"Scherm toegevoegd\");\n  window.location.hash = customerHref(\"schermen\", { rest: [String(screen.id)] });\n}\n\nasync function resetLink(): Promise<void> {\n  if (resetPending.value || !resetting.value)\n    return;\n  resetPending.value = true;\n  resetError.value = false;\n  try {\n    upsert(await api.resetScreenLink({ id: resetting.value.id }));\n    resetting.value = null;\n    showToast(\"Scherm-URL vernieuwd\");\n  } catch {\n    resetError.value = true;\n    // A lost response can follow a successful rotation; read back the current credential once.\n    await load({ quiet: true });\n  } finally {\n    resetPending.value = false;\n  }\n}\n\nconst menu = ref<InstanceType<typeof ContextMenu> | null>(null);\n\nfunction cardActions(screen: AdminScreen): ContextMenuItem[] {\n  return [\n    { label: \"Instellingen bekijken\", href: customerHref(\"schermen\", { rest: [String(screen.id)] }) },\n    { label: \"Archiveren\", destructive: true, action: () => { archiving.value = screen; archiveError.value = false; } },\n  ];\n}\n\nfunction saved(screen: AdminScreen): void {\n  upsert(screen);\n  showToast(\"Scherm opgeslagen\");\n}\n\nasync function archive(): Promise<void> {\n  if (archivePending.value || !archiving.value)\n    return;\n  const id = archiving.value.id;\n  archivePending.value = true;\n  archiveError.value = false;\n  try {\n    await api.archiveScreen({ id });\n    screens.value = screens.value.filter(screen => screen.id !== id);\n    archiving.value = null;\n    showToast(\"Scherm gearchiveerd\");\n    window.location.hash = customerHref(\"schermen\");\n  } catch {\n    archiveError.value = true;\n  } finally {\n    archivePending.value = false;\n  }\n}\n\nonMounted(() => {\n  void load();\n  refreshTimer = setInterval(() => void load({ quiet: true }), REFRESH_MS);\n});\nonBeforeUnmount(() => {\n  clearInterval(refreshTimer);\n  readVersion++;\n});\n</script>\n\n<template>\n  <div class=\"screens\" data-testid=\"customer-screens\">\n    <ScreenDetail v-if=\"detail\" :screen=\"detail\" :customer-name=\"bootstrap.customer.name\" :show-package-hint=\"showPackageHint\" :kiosk-url=\"kioskUrl\" :org=\"org\" :kiosk-theme=\"kioskTheme\" :branding=\"branding\" @saved=\"saved\" @updated=\"upsert\" @reset-url=\"resetting = detail; resetError = false\" @archive=\"archiving = detail; archiveError = false\" />\n    <template v-else-if=\"detailId !== null\">\n      <a class=\"screens__back\" :href=\"customerHref('schermen')\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M16 10H5M9 5l-5 5 5 5\" /></svg>\n        Alle schermen\n      </a>\n      <Skeleton v-if=\"loadingIndicator.holding\" label=\"Scherm laden\" :visible=\"loadingIndicator.visible\" :count=\"1\" :height=\"320\" />\n      <p v-else class=\"screens__message\" role=\"alert\">{{ error ? \"Het scherm kon niet worden geladen. Controleer je verbinding en toegang en probeer het opnieuw.\" : \"Dit scherm bestaat niet of is gearchiveerd.\" }}</p>\n    </template>\n    <template v-else>\n      <PageHeader title=\"Schermen\" :context=\"bootstrap.customer.name\" description=\"Ontvangstapparaten en hun instellingen.\">\n        <template #actions>\n          <button type=\"button\" class=\"vk-button vk-button--primary vk-button--compact\" :disabled=\"loading || error\" data-testid=\"screen-add\" @click=\"add\">Scherm toevoegen</button>\n        </template>\n      </PageHeader>\n      <section class=\"screens__usage\" aria-labelledby=\"screens-usage\" :aria-busy=\"loading\">\n        <div class=\"screens__usage-head\">\n          <h2 id=\"screens-usage\" class=\"screens__usage-title\">{{ bootstrap.customer.name }}</h2>\n          <span v-if=\"!loading && !error\" class=\"screens__count\">\n            {{ limit === null ? `${screens.length} schermen · Onbeperkt` : `${screens.length} van ${limit} schermen` }}\n            <span v-if=\"full\" class=\"screens__full\">Vol</span>\n          </span>\n        </div>\n        <div v-if=\"limit !== null\" role=\"meter\" aria-label=\"Schermen in gebruik\" aria-valuemin=\"0\" :aria-valuemax=\"limit\" :aria-valuenow=\"screens.length\" class=\"screens__meter\">\n          <div class=\"screens__meter-fill\" :style=\"{ width: `${Math.min(100, (screens.length / limit) * 100)}%` }\" />\n        </div>\n      </section>\n      <div v-if=\"error\" class=\"screens__message\" role=\"alert\">\n        <p>Controleer je verbinding en toegang en probeer het opnieuw.</p>\n        <button type=\"button\" class=\"screens__action\" @click=\"load()\">Opnieuw proberen</button>\n      </div>\n      <Skeleton v-else-if=\"loadingIndicator.holding\" label=\"Schermen laden\" :visible=\"loadingIndicator.visible\" layout=\"grid\" :count=\"2\" :height=\"168\" :min-width=\"280\" />\n      <p v-else-if=\"!screens.length\" class=\"screens__muted\">Nog geen schermen.</p>\n      <div v-else class=\"screens__grid\">\n        <section v-for=\"screen in screens\" :key=\"screen.id\" class=\"screens__card\" :aria-labelledby=\"`screen-${screen.id}`\" @contextmenu=\"menu?.show($event, cardActions(screen), `Acties voor ${screen.name}`)\">\n          <div class=\"screens__card-head\">\n            <div>\n              <h2 :id=\"`screen-${screen.id}`\" class=\"screens__card-title\">{{ screen.name }}</h2>\n            </div>\n          </div>\n          <dl class=\"screens__facts\">\n            <dt>Laatste keer gebruikt</dt>\n            <dd><time v-if=\"screen.lastUsed\" :datetime=\"screen.lastUsed\">{{ formatDate(new Date(screen.lastUsed)) }} om {{ formatTime(new Date(screen.lastUsed)) }}</time><template v-else>Nog niet gebruikt</template></dd>\n          </dl>\n          <div class=\"screens__links\">\n            <a class=\"screens__link\" :href=\"customerHref('schermen', { rest: [String(screen.id)] })\" :aria-label=\"`Instellingen van ${screen.name} bekijken`\">\n              Instellingen bekijken\n              <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M4 10h11M11 5l5 5-5 5\" /></svg>\n            </a>\n          </div>\n        </section>\n      </div>\n    </template>\n    <ScreenDialog :open=\"dialogOpen\" :used=\"screens.length\" :limit=\"limit\" @close=\"dialogOpen = false\" @created=\"created\" />\n    <ConfirmDialog :open=\"Boolean(resetting)\" title=\"Scherm-URL vernieuwen\" :item-name=\"resetting?.name ?? ''\"\n                   message=\"Wil je een nieuwe URL voor dit scherm maken?\"\n                   consequence=\"De oude URL en QR-code werken daarna niet meer. Open ook je eigen ontvangstapparaat opnieuw met de nieuwe URL.\"\n                   confirm-label=\"URL vernieuwen\" pending-label=\"Vernieuwen...\" :pending=\"resetPending\" @cancel=\"resetting = null\" @confirm=\"resetLink\">\n      <p v-if=\"resetError\" class=\"screens__error\" role=\"alert\">Vernieuwen kon niet worden bevestigd. Controleer de huidige URL en probeer zo nodig opnieuw.</p>\n      <span v-else>Wil je een nieuwe URL voor dit scherm maken?</span>\n    </ConfirmDialog>\n    <ConfirmDialog :open=\"Boolean(archiving)\" title=\"Scherm archiveren\" :item-name=\"archiving?.name ?? ''\"\n                   message=\"Wil je dit scherm archiveren?\"\n                   :consequence=\"showPackageHint ? 'De scherm-URL wordt ingetrokken. Een gearchiveerd scherm telt niet mee voor je pakket.' : 'De scherm-URL wordt ingetrokken.'\"\n                   confirm-label=\"Archiveren\" pending-label=\"Archiveren...\" :pending=\"archivePending\" @cancel=\"archiving = null\" @confirm=\"archive\">\n      <p v-if=\"archiveError\" class=\"screens__error\" role=\"alert\">Archiveren is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.</p>\n      <span v-else>Wil je dit scherm archiveren?</span>\n    </ConfirmDialog>\n    <ContextMenu ref=\"menu\" />\n  </div>\n</template>\n\n<style scoped>\n/* Geometry, colors and type follow the supplied Schermen.html export. */\n.screens { display: flex; flex-direction: column; gap: 28px; min-width: 0; }\n.screens__usage { background: var(--paper); border: 1px solid var(--border); padding: 20px 24px; display: flex; flex-direction: column; gap: 12px; }\n.screens__usage-head { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; justify-content: space-between; }\n.screens__usage-title { margin: 0; font-family: var(--font-display); font-size: 22px; font-weight: 600; letter-spacing: -0.04em; }\n.screens__count { display: flex; align-items: center; gap: 10px; font-weight: 700; }\n.screens__full { display: inline-flex; align-items: center; gap: 6px; min-height: 26px; padding: 0 10px; border-radius: 999px; background: var(--foreground); color: var(--cream); font-size: 12px; font-weight: 700; }\n.screens__meter { height: 10px; border-radius: 999px; background: rgba(25, 37, 31, 0.12); overflow: hidden; }\n.screens__meter-fill { height: 100%; background: var(--foreground); border-radius: 999px; }\n.screens__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; }\n.screens__card { background: var(--paper); border: 1px solid var(--border); padding: 20px 24px; display: flex; flex-direction: column; gap: 14px; min-width: 0; }\n.screens__card-head { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; }\n.screens__card-title { margin: 0; font-family: var(--font-display); font-size: 20px; font-weight: 600; letter-spacing: -0.04em; overflow-wrap: anywhere; }\n.screens__facts { margin: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); font-size: 14px; }\n.screens__facts dt { padding: 8px 0; border-top: 1px solid var(--border); color: var(--muted-foreground); }\n.screens__facts dd { margin: 0; padding: 8px 0; border-top: 1px solid var(--border); font-weight: 600; }\n.screens__links { display: flex; flex-wrap: wrap; gap: 8px 20px; align-items: center; }\n.screens__link { display: inline-flex; align-items: center; gap: 8px; padding: 0; border: 0; background: none; font-family: inherit; font-size: 13px; font-weight: 700; color: var(--foreground); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.screens__back { align-self: flex-start; display: inline-flex; align-items: center; gap: 8px; min-height: 36px; font-size: 14px; font-weight: 700; color: var(--foreground); text-decoration: none; cursor: pointer; }\n.screens__muted { margin: 0; color: var(--muted-foreground); }\n.screens__message { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: 0; }\n.screens__message p, .screens__message[role=\"alert\"], .screens__error { margin: 0; color: var(--danger); }\n.screens__action { min-height: 36px; padding: 0 14px; border-radius: 999px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n</style>\n","<script setup lang=\"ts\">\nimport { computed, nextTick, reactive, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminScreen, ScreenLanguage, ScreenOrientation } from \"../../../../../../js/screens\";\nimport PageHeader from \"../../ui/PageHeader.vue\";\nimport ScreenPreview from \"./ScreenPreview.vue\";\nimport ScreenQrDialog from \"./ScreenQrDialog.vue\";\nimport Button from \"../../ui/Button.vue\";\nimport ConfirmDialog from \"../../ui/ConfirmDialog.vue\";\nimport Icon from \"../../ui/Icon.vue\";\nimport { showToast } from \"../../../lib/toast\";\nimport { customerHref } from \"../../../lib/customer\";\nimport { useGuardedForm } from \"../../../composables/useFormGuard\";\nimport { rules, useFormValidation } from \"../../../composables/useFormValidation\";\nimport { LANGUAGE_LABELS, ORIENTATION_LABELS } from \"./screen-rows.ts\";\nimport { screenLinkHref } from \"../../../../../velkom/screen-link\";\n\nconst props = defineProps<{ screen: AdminScreen; customerName: string; showPackageHint: boolean; kioskUrl: string | null; org: string | null; kioskTheme?: \"standaard\" | \"nieuweweme\" | \"connectworks\"; branding?: { companyName: string; color: string; logo: string | null } | null }>();\nconst emit = defineEmits<{ saved: [screen: AdminScreen]; updated: [screen: AdminScreen]; archive: []; resetUrl: [] }>();\nconst api = rpc(\"velkom:admin\");\nconst model = reactive({ name: \"\", welcomeText: \"\", language: \"nl\" as ScreenLanguage });\nconst form = useFormValidation(model, {\n  name: [rules.required(\"Vul een naam in.\"), rules.maxLength(100)],\n  welcomeText: [rules.maxLength(200)],\n});\nconst guard = useGuardedForm(\"Scherm\", model);\nconst pending = ref(false);\nconst error = ref(\"\");\nconst previewOrientation = ref<ScreenOrientation>(\"portrait\");\nconst qrUrl = ref<string | null>(null);\nconst copyError = ref(false);\nconst demoPending = ref(false);\nconst demoError = ref(false);\nconst revokeOpen = ref(false);\nconst linkHref = (token: string) => props.kioskUrl && token ? screenLinkHref({ kioskUrl: props.kioskUrl, org: props.org ?? undefined, id: props.screen.id, token }) : null;\nconst screenUrl = computed(() => linkHref(props.screen.linkToken));\n// Same link shape as the real URL: only the server decides from the credential that this is a demo.\nconst demoUrl = computed(() => linkHref(props.screen.demoToken));\n\nwatch(() => props.screen.id, () => {\n  const { name, welcomeText, language } = props.screen;\n  guard.load({ name, welcomeText, language });\n  form.reset();\n  error.value = \"\";\n}, { immediate: true });\n\nasync function save(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    const saved = await api.updateScreen({ id: props.screen.id, name: model.name.trim(), welcomeText: model.welcomeText.trim(), language: model.language });\n    guard.load({ name: saved.name, welcomeText: saved.welcomeText, language: saved.language });\n    emit(\"saved\", saved);\n  } catch (cause) {\n    const message = cause instanceof Error ? cause.message.replace(/^RPC Error: /, \"\") : \"\";\n    const field = /naam/i.test(message) ? \"name\" : /welkomsttekst/i.test(message) ? \"welcomeText\" : null;\n    if (field) {\n      form.setError(field, message);\n      void nextTick(() => document.getElementById(form.fieldId(field))?.focus());\n    } else {\n      error.value = \"Opslaan is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\";\n    }\n  } finally {\n    pending.value = false;\n  }\n}\n\nasync function copyUrl(url: string | null, notice: string): Promise<void> {\n  if (!url)\n    return;\n  copyError.value = false;\n  try {\n    await navigator.clipboard.writeText(url);\n    showToast(notice);\n  } catch {\n    copyError.value = true;\n  }\n}\n\nasync function changeDemo(request: (options: { id: number }) => Promise<AdminScreen>): Promise<void> {\n  if (demoPending.value)\n    return;\n  demoPending.value = true;\n  demoError.value = false;\n  try {\n    emit(\"updated\", await request({ id: props.screen.id }));\n    revokeOpen.value = false;\n  } catch {\n    demoError.value = true;\n  } finally {\n    demoPending.value = false;\n  }\n}\n\nconst createDemo = () => changeDemo(api.createDemoLink);\nconst revokeDemo = () => changeDemo(api.revokeDemoLink);\n\nfunction describedBy(field: \"name\" | \"welcomeText\", hint?: string): string | undefined {\n  return [hint, form.errors[field] ? `${form.fieldId(field)}-error` : \"\"].filter(Boolean).join(\" \") || undefined;\n}\n</script>\n\n<template>\n  <div class=\"screen\" data-testid=\"customer-screen-detail\">\n    <a class=\"screen__back\" :href=\"customerHref('schermen')\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M16 10H5M9 5l-5 5 5 5\" /></svg>\n      Alle schermen\n    </a>\n    <PageHeader :title=\"screen.name\" :context=\"customerName\" description=\"Instellingen gelden alleen voor dit scherm.\" />\n    <div class=\"screen__layout\">\n      <div class=\"screen__settings\">\n        <section class=\"screen__card\" aria-labelledby=\"screen-general\">\n          <h2 id=\"screen-general\" class=\"screen__card-title\">Algemeen</h2>\n          <div class=\"screen__grid\">\n            <label class=\"screen__field\">\n              <span>Naam <span class=\"screen__required\" aria-hidden=\"true\">*</span></span>\n              <input :id=\"form.fieldId('name')\" v-model=\"model.name\" class=\"screen__control\" type=\"text\" :disabled=\"pending\" aria-required=\"true\"\n                     :aria-invalid=\"Boolean(form.errors.name) || undefined\" :aria-describedby=\"describedBy('name')\">\n              <span v-if=\"form.errors.name\" :id=\"`${form.fieldId('name')}-error`\" class=\"screen__invalid\">{{ form.errors.name }}</span>\n            </label>\n          </div>\n        </section>\n        <section v-if=\"screenUrl\" class=\"screen__card\" aria-labelledby=\"screen-url\">\n          <div class=\"screen__card-head\">\n            <h2 id=\"screen-url\" class=\"screen__card-title\">Scherm-URL</h2>\n            <button type=\"button\" class=\"screen__text-action\" @click=\"emit('resetUrl')\">Vernieuwen</button>\n          </div>\n          <p class=\"screen__muted\">Open deze eigen URL op het ontvangstapparaat. Bewaar de link privé: iedereen met de link kan dit scherm gebruiken.</p>\n          <div class=\"screen__link-field\">\n            <Icon name=\"link\" :size=\"18\" class=\"screen__link-icon\" />\n            <span class=\"screen__link-text\" :title=\"screenUrl\">{{ screenUrl }}</span>\n            <Button size=\"sm\" variant=\"ghost\" icon=\"copy\" icon-only aria-label=\"Scherm-URL kopiëren\" @click=\"copyUrl(screenUrl, 'Scherm-URL gekopieerd')\" />\n            <Button size=\"sm\" variant=\"ghost\" icon=\"qr-code\" icon-only aria-label=\"QR-code van de scherm-URL\" @click=\"qrUrl = screenUrl\" />\n            <a class=\"screen__link-open\" :href=\"screenUrl\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Scherm openen\" data-testid=\"screen-open\"><Icon name=\"launch\" /></a>\n          </div>\n          <p v-if=\"copyError\" class=\"screen__error\" role=\"alert\">Kopiëren is niet gelukt. Open het scherm en kopieer de URL uit de adresbalk.</p>\n        </section>\n        <section v-if=\"screenUrl\" class=\"screen__card\" aria-labelledby=\"screen-demo\" data-testid=\"screen-demo\">\n          <div class=\"screen__card-head\">\n            <h2 id=\"screen-demo\" class=\"screen__card-title\">Demolink</h2>\n            <button v-if=\"demoUrl\" type=\"button\" class=\"screen__text-danger\" :disabled=\"demoPending\" @click=\"revokeOpen = true\">Intrekken</button>\n          </div>\n          <p class=\"screen__muted\">Laat dit scherm zien met echte contactpersonen en verzonnen afspraken. Er wordt niemand gebeld en niets opgeslagen.</p>\n          <div v-if=\"demoUrl\" class=\"screen__link-field\">\n            <Icon name=\"link\" :size=\"18\" class=\"screen__link-icon\" />\n            <span class=\"screen__link-text\" :title=\"demoUrl\">{{ demoUrl }}</span>\n            <Button size=\"sm\" variant=\"ghost\" icon=\"copy\" icon-only aria-label=\"Demolink kopiëren\" @click=\"copyUrl(demoUrl, 'Demolink gekopieerd')\" />\n            <Button size=\"sm\" variant=\"ghost\" icon=\"qr-code\" icon-only aria-label=\"QR-code van de demolink\" @click=\"qrUrl = demoUrl\" />\n            <a class=\"screen__link-open\" :href=\"demoUrl\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Demo openen\"><Icon name=\"launch\" /></a>\n          </div>\n          <div v-else class=\"screen__actions\">\n            <Button size=\"sm\" icon=\"link\" :disabled=\"demoPending\" @click=\"createDemo\">Demolink maken</Button>\n          </div>\n          <p v-if=\"demoError\" class=\"screen__error\" role=\"alert\">Dat is niet gelukt. Controleer je verbinding en probeer het opnieuw.</p>\n        </section>\n        <section class=\"screen__card\" aria-labelledby=\"screen-display\">\n          <h2 id=\"screen-display\" class=\"screen__card-title\">Weergave</h2>\n          <label class=\"screen__field\">\n            Welkomsttekst\n            <input :id=\"form.fieldId('welcomeText')\" v-model=\"model.welcomeText\" class=\"screen__control\" type=\"text\" :disabled=\"pending\"\n                   :aria-invalid=\"Boolean(form.errors.welcomeText) || undefined\" :aria-describedby=\"describedBy('welcomeText')\">\n            <span v-if=\"form.errors.welcomeText\" :id=\"`${form.fieldId('welcomeText')}-error`\" class=\"screen__invalid\">{{ form.errors.welcomeText }}</span>\n          </label>\n          <div class=\"screen__segments\">\n            <div role=\"radiogroup\" aria-labelledby=\"screen-language\" class=\"screen__segment-group\">\n              <span id=\"screen-language\" class=\"screen__label\">Taal</span>\n              <span class=\"screen__segment\">\n                <button v-for=\"(label, value) in LANGUAGE_LABELS\" :key=\"value\" type=\"button\" role=\"radio\" :aria-checked=\"model.language === value\" :disabled=\"pending\"\n                        @click=\"model.language = value\">{{ label }}</button>\n              </span>\n            </div>\n          </div>\n          <p v-if=\"error\" class=\"screen__error\" role=\"alert\">{{ error }}</p>\n          <div class=\"screen__save-row\">\n            <button type=\"button\" class=\"vk-button vk-button--primary vk-button--compact\" :disabled=\"pending || !guard.isDirty.value\" data-testid=\"screen-save\" @click=\"save\">\n              {{ pending ? \"Opslaan...\" : \"Opslaan\" }}\n            </button>\n          </div>\n        </section>\n        <section class=\"screen__card screen__card--row\" aria-labelledby=\"screen-archive\">\n          <div class=\"screen__row-text\">\n            <h2 id=\"screen-archive\" class=\"screen__card-title\">Archiveren</h2>\n            <p v-if=\"showPackageHint\" class=\"screen__muted\">Een gearchiveerd scherm telt niet mee voor je pakket.</p>\n          </div>\n          <button type=\"button\" class=\"screen__archive\" :disabled=\"pending\" @click=\"emit('archive')\">Scherm archiveren</button>\n        </section>\n      </div>\n      <aside class=\"screen__preview\" aria-label=\"Voorbeeld welkomstscherm\">\n        <div role=\"radiogroup\" aria-label=\"Stand van het voorbeeld\" class=\"screen__segment-group screen__preview-options\">\n          <span class=\"screen__segment\">\n            <button v-for=\"(label, value) in ORIENTATION_LABELS\" :key=\"value\" type=\"button\" role=\"radio\" :aria-checked=\"previewOrientation === value\"\n                    @click=\"previewOrientation = value\">{{ label }}</button>\n          </span>\n        </div>\n        <div class=\"screen__device\">\n          <ScreenPreview class=\"screen__display\" :language=\"model.language\" :orientation=\"previewOrientation\" :welcome-text=\"model.welcomeText.trim()\" :kiosk-theme=\"kioskTheme\" :branding=\"branding\" />\n        </div>\n        <span v-if=\"guard.isDirty.value\" class=\"screen__muted screen__note\">Concept. Alleen opslaan wijzigt het scherm.</span>\n      </aside>\n    </div>\n    <ConfirmDialog :open=\"revokeOpen\" title=\"Demolink intrekken\" :item-name=\"screen.name\" message=\"Wil je de demolink van dit scherm intrekken?\"\n                   consequence=\"De demolink en de QR-code ervan werken daarna niet meer. Het echte scherm blijft gewoon werken.\"\n                   confirm-label=\"Intrekken\" pending-label=\"Intrekken...\" :pending=\"demoPending\" @cancel=\"revokeOpen = false\" @confirm=\"revokeDemo\" />\n    <ScreenQrDialog v-if=\"qrUrl\" :open=\"Boolean(qrUrl)\" :url=\"qrUrl\" :screen-name=\"qrUrl === demoUrl ? `${screen.name} (demo)` : screen.name\" @close=\"qrUrl = null\" />\n  </div>\n</template>\n\n<style scoped>\n/* Geometry, colors and type follow the supplied SchermDetail.html export. */\n.screen { display: flex; flex-direction: column; gap: 28px; min-width: 0; }\n.screen__back { align-self: flex-start; display: inline-flex; align-items: center; gap: 8px; min-height: 36px; font-size: 14px; font-weight: 700; color: var(--foreground); text-decoration: none; cursor: pointer; }\n.screen__actions { display: flex; flex-wrap: wrap; gap: 12px; position: relative; z-index: 1; }\n.screen__error { margin: 0; color: var(--danger); }\n.screen__layout { display: flex; flex-wrap: wrap; gap: 28px; align-items: flex-start; }\n.screen__settings { flex: 1 1 480px; min-width: 0; display: flex; flex-direction: column; gap: 20px; }\n.screen__card { background: var(--paper); border: 1px solid var(--border); padding: 20px 24px; display: flex; flex-direction: column; gap: 16px; }\n.screen__card--row { flex-direction: row; align-items: center; flex-wrap: wrap; }\n.screen__row-text { flex: 1 1 280px; }\n.screen__card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.screen__text-danger { padding: 0; border: 0; background: none; font-family: inherit; font-size: 14px; font-weight: 700; color: var(--danger); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.screen__text-danger:disabled { opacity: 0.45; cursor: not-allowed; }\n.screen__text-action { padding: 0; border: 0; background: none; font-family: inherit; font-size: 14px; font-weight: 700; color: var(--foreground); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n/* Icon buttons are 36px with 16px icons: a 4px gap and 14px right padding keep every icon 24px from the next edge. */\n.screen__link-field { display: flex; align-items: center; gap: 4px; min-width: 0; min-height: 48px; padding: 0 14px 0 16px; border-radius: 999px; border: 1.5px solid var(--border-strong); background: var(--field); }\n.screen__link-icon { color: var(--muted-foreground); margin-right: 6px; }\n.screen__link-text { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; color: var(--muted-foreground); }\n.screen__link-open { display: inline-flex; align-items: center; justify-content: center; width: 36px; height: 36px; flex-shrink: 0; border-radius: 999px; color: var(--foreground); cursor: pointer; }\n.screen__link-open:hover { background: rgba(25, 37, 31, 0.07); }\n.screen__link-open:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }\n.screen__card-title { margin: 0; font-family: var(--font-display); font-size: 20px; font-weight: 600; letter-spacing: -0.04em; }\n.screen__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }\n.screen__field { display: flex; flex-direction: column; gap: 6px; font-size: 14px; font-weight: 700; min-width: 0; }\n.screen__control { height: 48px; box-sizing: border-box; padding: 0 18px; border-radius: 999px; border: 1.5px solid var(--border-strong); background: var(--field); color: var(--foreground); font-family: inherit; font-size: 15px; font-weight: 400; }\n.screen__control:hover:not(:disabled) { border-color: var(--foreground); }\n.screen__control:focus-visible { outline: 2px solid var(--ring); outline-offset: 0; border-color: transparent; }\n.screen__control[aria-invalid=\"true\"] { border-color: var(--danger); }\n.screen__required { color: var(--danger); }\n.screen__invalid { font-size: 13px; font-weight: 400; color: var(--danger); }\n.screen__link { align-self: flex-start; padding: 0; border: 0; background: none; font-family: inherit; font-size: 13px; font-weight: 700; color: var(--foreground); text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.screen__segments { display: flex; flex-wrap: wrap; gap: 24px; }\n.screen__save-row { display: flex; justify-content: flex-end; }\n.screen__segment-group { display: flex; flex-direction: column; gap: 6px; }\n.screen__label { font-size: 14px; font-weight: 700; }\n.screen__segment { display: flex; gap: 4px; padding: 4px; border-radius: 999px; background: rgba(25, 37, 31, 0.07); }\n.screen__segment button { min-height: 40px; padding: 0 18px; border-radius: 999px; border: 0; background: transparent; color: var(--foreground); font-family: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }\n.screen__segment button[aria-checked=\"true\"] { background: var(--foreground); color: var(--cream); }\n.screen__segment button:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }\n.screen__segment button:disabled { cursor: not-allowed; }\n.screen__muted { margin: 2px 0 0; font-size: 14px; color: var(--muted-foreground); }\n.screen__archive { min-height: 44px; padding: 0 18px; border-radius: 999px; border: 1.5px solid var(--danger); background: transparent; color: var(--danger); font-family: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }\n.screen__archive:hover:not(:disabled) { background: var(--danger-soft); }\n.screen__archive:disabled { opacity: 0.45; cursor: not-allowed; }\n.screen__preview { flex: 1 1 320px; min-width: 0; position: sticky; top: 24px; display: flex; flex-direction: column; align-items: center; gap: 12px; outline: none; }\n.screen__preview-options { align-items: center; }\n.screen__device { width: min(320px, 100%); box-sizing: border-box; padding: 14px; border-radius: 38px; background: #101713; box-shadow: var(--shadow-overlay); }\n.screen__display { border-radius: 27px; }\n.screen__note { margin: 0; font-size: 13px; text-align: center; }\n</style>\n","<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, onMounted, ref } from \"vue\";\nimport KioskShell from \"../../../../../velkom/components/KioskShell.vue\";\nimport WelcomePresentation from \"../../../../../velkom/components/WelcomePresentation.vue\";\n\nconst props = defineProps<{ language: \"nl\" | \"en\"; orientation: \"portrait\" | \"landscape\"; welcomeText: string; kioskTheme?: \"standaard\" | \"nieuweweme\" | \"connectworks\"; branding?: { companyName: string; color: string; logo: string | null } | null }>();\nconst container = ref<HTMLElement | null>(null);\nconst width = ref(0);\nconst portrait = computed(() => props.orientation === \"portrait\");\nconst size = computed(() => portrait.value ? { width: 1080, height: props.kioskTheme === \"connectworks\" ? 1440 : 1920 } : { width: 1920, height: 1080 });\nlet observer: ResizeObserver | undefined;\n\nonMounted(() => {\n  observer = new ResizeObserver(([entry]) => { width.value = entry.contentRect.width; });\n  if (container.value)\n    observer.observe(container.value);\n});\nonBeforeUnmount(() => observer?.disconnect());\n</script>\n\n<template>\n  <div ref=\"container\" class=\"kiosk-preview\" :style=\"{ aspectRatio: `${size.width} / ${size.height}` }\" role=\"img\" :aria-label=\"`Welkomstscherm, ${language === 'nl' ? 'Nederlands' : 'Engels'}, ${portrait ? 'staand' : 'liggend'}: ${welcomeText}`\">\n    <!-- A full-size presentation keeps the kiosk's minimum font and control sizes when scaled. -->\n    <div class=\"kiosk-preview__viewport\" inert aria-hidden=\"true\" :style=\"{ width: `${size.width}px`, height: `${size.height}px`, transform: `scale(${width / size.width})` }\">\n      <KioskShell :portrait=\"portrait\" :language=\"language\" :theme=\"kioskTheme\" :branding=\"branding\" welcome>\n        <WelcomePresentation :language=\"language\" :welcome-text=\"welcomeText\" :theme=\"kioskTheme\" :company-name=\"branding?.companyName\" />\n      </KioskShell>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n.kiosk-preview { position: relative; width: 100%; overflow: hidden; background: #01003c; }\n.kiosk-preview__viewport { position: absolute; inset: 0 auto auto 0; container: kiosk / inline-size; transform-origin: top left; pointer-events: none; }\n</style>\n","<script setup lang=\"ts\">\ndefineProps<{ language: \"nl\" | \"en\" }>();\nconst emit = defineEmits<{ change: [language: \"nl\" | \"en\"] }>();\nconst languages = [\"nl\", \"en\"] as const;\n</script>\n\n<template>\n  <div class=\"language-switcher\" role=\"group\" :aria-label=\"language === 'nl' ? 'Taal' : 'Language'\">\n    <button v-for=\"option in languages\" :key=\"option\" type=\"button\" :lang=\"option\"\n      :aria-label=\"option === 'nl' ? 'Nederlands' : 'English'\" :aria-pressed=\"language === option\"\n      @click=\"emit('change', option)\">{{ option.toUpperCase() }}</button>\n  </div>\n</template>\n\n<style scoped>\n.language-switcher {\n  display: flex;\n  gap: calc(8 * var(--kiosk-unit));\n}\nbutton {\n  /* width: 85px; */\n  width: max(44px, calc(96 * var(--kiosk-unit)));\n  height: max(44px, calc(72 * var(--kiosk-unit)));\n  border: calc(2 * var(--kiosk-unit)) solid rgb(255 255 255 / 40%);\n  background-color: transparent;\n  font-size: max(16px, calc(28 * var(--kiosk-unit))) !important;\n  font-weight: 600 !important;\n  color: #fff;\n  padding: 0;\n}\nbutton[aria-pressed=\"true\"] { background: white; color: var(--kiosk-navy); border-color: white; }\n@media (hover: hover) { button:hover { background: var(--kiosk-blue); color: white; } }\n</style>\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\nconst _hoisted_2 = [\"lang\", \"aria-label\", \"aria-pressed\", \"onClick\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: \"language-switcher\",\n    role: \"group\",\n    \"aria-label\": $props.language === 'nl' ? 'Taal' : 'Language'\n  }, [\n    (_openBlock(), _createElementBlock(_Fragment, null, _renderList($setup.languages, (option) => {\n      return _createElementVNode(\"button\", {\n        key: option,\n        type: \"button\",\n        lang: option,\n        \"aria-label\": option === 'nl' ? 'Nederlands' : 'English',\n        \"aria-pressed\": $props.language === option,\n        onClick: $event => ($setup.emit('change', option))\n      }, _toDisplayString(option.toUpperCase()), 9 /* TEXT, PROPS */, _hoisted_2)\n    }), 64 /* STABLE_FRAGMENT */))\n  ], 8 /* PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/LanguageSwitcher.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/LanguageSwitcher.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/LanguageSwitcher.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/LanguageSwitcher.vue\";script.__scopeId = \"data-v-0e726201\";export default script;","<script setup lang=\"ts\">\nimport LanguageSwitcher from \"./LanguageSwitcher.vue\";\nimport type { KioskCompany } from \"./registration-flow\";\nimport \"../kiosk.scss\";\n\ndefineProps<{ portrait: boolean; theme?: \"standaard\" | \"nieuweweme\" | \"connectworks\"; welcome?: boolean; calling?: boolean; company?: KioskCompany | null; language: \"nl\" | \"en\"; branding?: { companyName: string; color: string; logo: string | null } | null }>();\nconst emit = defineEmits<{ language: [language: \"nl\" | \"en\"] }>();\n</script>\n\n<template>\n  <div class=\"kiosk-shell\" :class=\"{ 'kiosk-shell--portrait': portrait, 'kiosk-shell--connectworks': theme === 'connectworks', 'kiosk-shell--nieuweweme': theme === 'nieuweweme', 'kiosk-shell--welcome': welcome, 'kiosk-shell--calling': calling }\" :lang=\"language\" :style=\"branding && theme !== 'connectworks' ? { '--kiosk-blue': branding.color } : undefined\">\n    <header class=\"kiosk-header\">\n      <div class=\"kiosk-header__inner\">\n        <template v-if=\"theme === 'connectworks'\">\n          <span v-if=\"calling && company\" class=\"kiosk-header__company\">\n            <img v-if=\"company.logoLink\" :src=\"company.logoLink\" :alt=\"company.name\" />\n            <span v-else>{{ company.name }}</span>\n          </span>\n          <div class=\"kiosk-header__navigation\" />\n        </template>\n        <img v-else-if=\"branding?.logo\" class=\"kiosk-header__logo\" :src=\"branding.logo\" :alt=\"branding.companyName\" />\n        <span v-else-if=\"branding\" class=\"kiosk-header__brand\">{{ branding.companyName }}</span>\n        <img v-else-if=\"theme === 'nieuweweme'\" class=\"kiosk-header__logo\" src=\"/.publisher/sd/velkom/velkom/img/reception-logo.svg\" alt=\"NieuweWeme\" />\n        <!-- <theme-toggle></theme-toggle> -->\n        <div class=\"kiosk-header__actions\">\n          <slot name=\"actions\" />\n          <LanguageSwitcher :language=\"language\" @change=\"emit('language', $event)\" />\n        </div>\n      </div>\n    </header>\n    <main class=\"kiosk-main\"><slot /></main>\n  </div>\n</template>\n\n<style scoped>\n.kiosk-header { height: max(72px, calc(120 * var(--kiosk-unit))); flex: none; background: var(--kiosk-navy); color: white; }\n.kiosk-header__inner { height: 100%; display: flex; align-items: center; justify-content: space-between; padding: 0 var(--kiosk-gutter); gap: 16px; }\n.kiosk-header__logo { display: block; height: max(36px, calc(64 * var(--kiosk-unit))); width: auto; max-width: 55%; }\n.kiosk-header__brand { max-width: 55%; font-size: max(20px, calc(40 * var(--kiosk-unit))); overflow-wrap: anywhere; }\n.kiosk-header__actions { margin-left: auto; display: flex; align-items: center; gap: 24px; }\n.kiosk-main { display: flex; flex: 1; min-height: 0; min-width: 0; position: relative; }\n</style>\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, Fragment as _Fragment, renderSlot as _renderSlot, createVNode as _createVNode, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from \"vue\"\n\nconst _hoisted_1 = [\"lang\"]\nconst _hoisted_2 = { class: \"kiosk-header\" }\nconst _hoisted_3 = { class: \"kiosk-header__inner\" }\nconst _hoisted_4 = {\n  key: 0,\n  class: \"kiosk-header__company\"\n}\nconst _hoisted_5 = [\"src\", \"alt\"]\nconst _hoisted_6 = { key: 1 }\nconst _hoisted_7 = [\"src\", \"alt\"]\nconst _hoisted_8 = {\n  key: 2,\n  class: \"kiosk-header__brand\"\n}\nconst _hoisted_9 = {\n  key: 3,\n  class: \"kiosk-header__logo\",\n  src: \"/.publisher/sd/velkom/velkom/img/reception-logo.svg\",\n  alt: \"NieuweWeme\"\n}\nconst _hoisted_10 = { class: \"kiosk-header__actions\" }\nconst _hoisted_11 = { class: \"kiosk-main\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: _normalizeClass([\"kiosk-shell\", { 'kiosk-shell--portrait': $props.portrait, 'kiosk-shell--connectworks': $props.theme === 'connectworks', 'kiosk-shell--nieuweweme': $props.theme === 'nieuweweme', 'kiosk-shell--welcome': $props.welcome, 'kiosk-shell--calling': $props.calling }]),\n    lang: $props.language,\n    style: _normalizeStyle($props.branding && $props.theme !== 'connectworks' ? { '--kiosk-blue': $props.branding.color } : undefined)\n  }, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"div\", _hoisted_3, [\n        ($props.theme === 'connectworks')\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              ($props.calling && $props.company)\n                ? (_openBlock(), _createElementBlock(\"span\", _hoisted_4, [\n                    ($props.company.logoLink)\n                      ? (_openBlock(), _createElementBlock(\"img\", {\n                          key: 0,\n                          src: $props.company.logoLink,\n                          alt: $props.company.name\n                        }, null, 8 /* PROPS */, _hoisted_5))\n                      : (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString($props.company.name), 1 /* TEXT */))\n                  ]))\n                : _createCommentVNode(\"v-if\", true),\n              _cache[1] || (_cache[1] = _createElementVNode(\"div\", { class: \"kiosk-header__navigation\" }, null, -1 /* CACHED */))\n            ], 64 /* STABLE_FRAGMENT */))\n          : ($props.branding?.logo)\n            ? (_openBlock(), _createElementBlock(\"img\", {\n                key: 1,\n                class: \"kiosk-header__logo\",\n                src: $props.branding.logo,\n                alt: $props.branding.companyName\n              }, null, 8 /* PROPS */, _hoisted_7))\n            : ($props.branding)\n              ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString($props.branding.companyName), 1 /* TEXT */))\n              : ($props.theme === 'nieuweweme')\n                ? (_openBlock(), _createElementBlock(\"img\", _hoisted_9))\n                : _createCommentVNode(\"v-if\", true),\n        _createCommentVNode(\" <theme-toggle></theme-toggle> \"),\n        _createElementVNode(\"div\", _hoisted_10, [\n          _renderSlot(_ctx.$slots, \"actions\", {}, undefined, true),\n          _createVNode($setup[\"LanguageSwitcher\"], {\n            language: $props.language,\n            onChange: _cache[0] || (_cache[0] = $event => ($setup.emit('language', $event)))\n          }, null, 8 /* PROPS */, [\"language\"])\n        ])\n      ])\n    ]),\n    _createElementVNode(\"main\", _hoisted_11, [\n      _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n    ])\n  ], 14 /* CLASS, STYLE, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskShell.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskShell.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskShell.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskShell.vue\";script.__scopeId = \"data-v-636806b6\";export default script;","<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, ref, useId } from \"vue\";\nimport KioskIcon from \"./KioskIcon.vue\";\nimport messages from \"../texts\";\n\nconst props = defineProps<{ language: \"nl\" | \"en\"; welcomeText: string; companyName?: string; theme?: \"standaard\" | \"nieuweweme\" | \"connectworks\" }>();\nconst emit = defineEmits<{ register: [] }>();\nconst lineClip = useId();\nconst texts = computed(() => messages[props.language] ?? messages.en);\nconst now = ref(new Date());\nlet timer: ReturnType<typeof setInterval> | undefined;\nonMounted(() => { timer = setInterval(() => { now.value = new Date(); }, 30_000); });\nonUnmounted(() => clearInterval(timer));\nconst greeting = computed(() => now.value.getHours() < 12 ? texts.value.flow.morning : now.value.getHours() < 18 ? texts.value.flow.afternoon : texts.value.flow.evening);\nconst date = computed(() => now.value.toLocaleDateString(props.language, { weekday: \"long\", day: \"numeric\", month: \"long\" }));\nconst time = computed(() => now.value.toLocaleTimeString(props.language, { hour: \"2-digit\", minute: \"2-digit\" }));\n</script>\n\n<template>\n  <button class=\"welcome\" :class=\"{ 'welcome--branded': companyName }\" type=\"button\" @click=\"emit('register')\">\n    <span v-if=\"theme === 'connectworks'\" class=\"welcome__clock\">{{ time }}</span>\n    <svg v-if=\"theme === 'connectworks'\" class=\"welcome__line\" viewBox=\"0 0 1440 1920\" preserveAspectRatio=\"none\" fill=\"none\" aria-hidden=\"true\"><defs><clipPath :id=\"lineClip\"><rect x=\"0\" y=\"1000\" width=\"1440\" height=\"920\" /></clipPath></defs><path d=\"M-40 700C260 700 380 520 580 480C780 440 880 600 800 690C720 780 610 690 660 590C760 400 1120 470 1240 720C1290 830 1310 960 1310 1080\" stroke=\"currentColor\" stroke-width=\"16\" stroke-linecap=\"round\" /><path :clip-path=\"`url(#${lineClip})`\" d=\"M-40 700C260 700 380 520 580 480C780 440 880 600 800 690C720 780 610 690 660 590C760 400 1120 470 1240 720C1290 830 1310 960 1310 1080\" stroke=\"var(--kiosk-surface)\" stroke-width=\"16\" stroke-linecap=\"round\" /><circle cx=\"1310\" cy=\"1080\" r=\"26\" fill=\"var(--kiosk-orange)\" /></svg>\n    <span class=\"welcome__heading\">\n      <span class=\"welcome__eyebrow\">{{ theme === \"connectworks\" ? `${date} · ${time}` : `/${texts.digitalReception}` }}</span>\n      <span class=\"welcome__title\"><template v-if=\"theme === 'connectworks'\">{{ greeting }}</template><template v-else-if=\"companyName || theme === 'nieuweweme'\">{{ texts.welcomeAt }}<br><span>{{ companyName || \"NieuweWeme\" }}</span></template><template v-else>{{ texts.registration.headingWelcome }}</template></span>\n      <span v-if=\"theme === 'connectworks' && !welcomeText\" class=\"welcome__message\">{{ texts.welcomeAt }} {{ companyName || \"Connectworks\" }}.</span>\n      <span v-if=\"welcomeText\" class=\"welcome__message\">{{ welcomeText }}</span>\n    </span>\n    <span class=\"welcome__action\">\n      <span class=\"welcome__landscape-label\">{{ texts.tapToRegisterShort }}</span>\n      <span class=\"welcome__portrait-label\">{{ texts.tapToNotify }}</span>\n      <svg v-if=\"theme === 'connectworks'\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3.5 10h13M11.5 5l5 5-5 5\" /></svg>\n      <KioskIcon v-else name=\"arrow-right\" />\n    </span>\n  </button>\n</template>\n\n<style scoped>\n.welcome {\n  position: relative;\n  flex: 1;\n  width: 100%;\n  min-width: 0;\n  min-height: 0;\n  padding: 0;\n  border: 0;\n  color: var(--kiosk-navy);\n  text-align: left;\n  background: var(--kiosk-surface);\n}\n.welcome__heading { position: absolute; left: calc(120 * var(--kiosk-unit)); bottom: calc(120 * var(--kiosk-unit)); display: flex; flex-direction: column; gap: calc(24 * var(--kiosk-unit)); }\n.welcome__eyebrow { color: var(--kiosk-blue); font-size: max(16px, calc(32 * var(--kiosk-unit))); font-weight: 500; line-height: 1.4; }\n.welcome__title { font-size: calc(176 * var(--kiosk-unit)); font-weight: 400; line-height: 1; letter-spacing: -.02em; }\n.welcome__title > span { color: var(--kiosk-blue); }\n.welcome__message { max-width: calc(920 * var(--kiosk-unit)); font-size: max(18px, calc(32 * var(--kiosk-unit))); line-height: 1.3; }\n.welcome__action { position: absolute; right: 0; bottom: 0; width: calc(640 * var(--kiosk-unit)); height: calc(340 * var(--kiosk-unit)); padding: calc(56 * var(--kiosk-unit)) calc(64 * var(--kiosk-unit)); display: flex; flex-direction: column; justify-content: space-between; background: var(--kiosk-blue); color: white; font-size: calc(64 * var(--kiosk-unit)); font-weight: 600; line-height: 1.05; transition: background-color .2s; }\n.welcome__portrait-label { display: none; }\n.kiosk-shell--portrait .welcome__heading { left: var(--kiosk-gutter); right: var(--kiosk-gutter); bottom: calc(520 * var(--kiosk-unit)); }\n.kiosk-shell--portrait .welcome__title { font-size: calc(148 * var(--kiosk-unit)); }\n.kiosk-shell--portrait .welcome__action { width: 100%; height: calc(400 * var(--kiosk-unit)); }\n.kiosk-shell--portrait .welcome__landscape-label { display: none; }\n.kiosk-shell--portrait .welcome__portrait-label { display: inline; }\n/* Customer names can span several words; keep them above the registration action. */\n.welcome--branded .welcome__heading { right: var(--kiosk-gutter); bottom: calc(400 * var(--kiosk-unit)); }\n.welcome--branded .welcome__title { max-width: calc(1100 * var(--kiosk-unit)); font-size: max(32px, calc(100 * var(--kiosk-unit))); overflow-wrap: anywhere; }\n.kiosk-shell--portrait .welcome--branded .welcome__heading { bottom: calc(520 * var(--kiosk-unit)); }\n.welcome:focus-visible { outline-offset: -6px; }\n@media (hover: hover) { .welcome:hover .welcome__action { background: var(--kiosk-orange); } }\n@container kiosk (max-width: 600px) {\n  .welcome__heading { max-width: calc(100% - 2 * var(--kiosk-gutter)); }\n  .welcome__message { font-size: 16px; }\n}\n\n.welcome__clock { position: absolute; z-index: 2; left: var(--kiosk-gutter); top: max(16px, calc(25 * var(--kiosk-unit))); padding: 8px 20px; border-radius: 999px; color: var(--kiosk-navy); background: var(--kiosk-surface); font-size: max(18px, calc(27 * var(--kiosk-unit))); font-weight: 700; }\n.welcome__line { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; color: var(--kiosk-blue); }\n.kiosk-shell--nieuweweme .welcome { color: white; background: linear-gradient(rgb(1 0 60 / 62%), rgb(1 0 60 / 62%)), var(--kiosk-background) center / cover; }\n.kiosk-shell--connectworks .welcome { background: var(--kiosk-blue); }\n.kiosk-shell--connectworks .welcome::before { content: \"\"; position: absolute; inset: 0 0 48%; background: var(--kiosk-background) center 60% / cover; }\n.kiosk-shell--connectworks .welcome__heading { top: 57%; bottom: auto; left: var(--kiosk-gutter); right: var(--kiosk-gutter); gap: max(12px, calc(20 * var(--kiosk-unit))); }\n.kiosk-shell--connectworks .welcome__eyebrow { color: var(--kiosk-surface); text-transform: uppercase; letter-spacing: .1em; font-size: max(12px, calc(22 * var(--kiosk-unit))); }\n.kiosk-shell--connectworks .welcome__title { max-width: none; color: var(--kiosk-surface); font-family: \"Kiosk Manrope\", Arial, sans-serif; font-size: calc(120 * var(--kiosk-unit)); font-weight: 650; letter-spacing: -.065em; line-height: .95; }\n.kiosk-shell--connectworks .welcome__message { color: var(--kiosk-surface); opacity: .8; font-size: max(18px, calc(44 * var(--kiosk-unit))); }\n.kiosk-shell--connectworks .welcome__action { left: var(--kiosk-gutter); right: var(--kiosk-gutter); bottom: calc(48 * var(--kiosk-unit)); width: auto; height: max(64px, calc(132 * var(--kiosk-unit))); padding: calc(16 * var(--kiosk-unit)) calc(30 * var(--kiosk-unit)); border-radius: 999px; flex-direction: row; align-items: center; gap: 16px; background: var(--kiosk-surface); color: var(--kiosk-navy); font-size: max(18px, calc(36 * var(--kiosk-unit))); }\n.kiosk-shell--connectworks .welcome__action svg { flex: none; width: max(40px, calc(90 * var(--kiosk-unit))); height: max(40px, calc(90 * var(--kiosk-unit))); padding: 12px; border-radius: 50%; background: var(--kiosk-blue); color: var(--kiosk-surface); }\n\n/* @media (max-width: 576px) {\n  h1 {\n    font-size: 2.5rem;\n  }\n\n  .btn-lg {\n    width: 200px;\n    height: 200px;\n    font-size: 1rem;\n  }\n} */\n</style>\n","import { defineComponent as _defineComponent } from 'vue'\n\nexport default /*@__PURE__*/_defineComponent({\n  __name: 'KioskIcon',\n  props: {\n    name: { type: String, required: true }\n  },\n  setup(__props: any, { expose: __expose }) {\n  __expose();\n\n\n\nconst __returned__ = {  }\nObject.defineProperty(__returned__, '__isScriptSetup', { enumerable: false, value: true })\nreturn __returned__\n}\n\n})\n\n//@ sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL29wdC93aGRhdGEvaW5zdGFsbGVkbW9kdWxlcy92ZWxrb20uMjAyNjExMDJUMTA0NzI1LjU3OFovd2ViZGVzaWducy92ZWxrb20vY29tcG9uZW50cy9LaW9za0ljb24udnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XG5kZWZpbmVQcm9wczx7IG5hbWU6IFwiYXJyb3ctcmlnaHRcIiB8IFwiYXJyb3ctbGVmdFwiIHwgXCJwaG9uZVwiIH0+KCk7XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8c3ZnIDp2aWV3Qm94PVwibmFtZSA9PT0gJ3Bob25lJyA/ICcwIDAgMTggMTgnIDogJzAgMCAzMyAxMidcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgOmNsYXNzPVwieyAna2lvc2staWNvbi0tbGVmdCc6IG5hbWUgPT09ICdhcnJvdy1sZWZ0JyB9XCI+XG4gICAgPHBhdGggdi1pZj1cIm5hbWUgPT09ICdwaG9uZSdcIiBkPVwiTTE4IDEzLjQyVjE2Ljk1NjFDMTggMTcuNDgxMSAxNy41OTQxIDE3LjkxNjcgMTcuMDcwNSAxNy45NTM3QzE2LjYzMzEgMTcuOTg0NiAxNi4yNzYzIDE4IDE2IDE4QzcuMTYzNCAxOCAwIDEwLjgzNjYgMCAyQzAgMS43MjM3MSAwLjAxNTQ1IDEuMzY2ODcgMC4wNDYzNSAwLjkyOTVDMC4wODMzNyAwLjQwNTg4IDAuNTE4OTQgMCAxLjA0Mzg2IDBINC41ODAxQzQuODM2NzggMCA1LjA1MTc2IDAuMTk0NDIgNS4wNzc1MyAwLjQ0OThDNS4xMDA2NyAwLjY3OTA3IDUuMTIyMTggMC44NjMxNCA1LjE0MjA3IDEuMDAyMDJDNS4zNDQzNSAyLjQxNDcyIDUuNzU3NTMgMy43NTkzNiA2LjM0ODcgNS4wMDMwM0M2LjQ0MzU5IDUuMjAyNjUgNi4zODE3MSA1LjQ0MTU5IDYuMjAxODUgNS41NzAwNkw0LjA0MzU1IDcuMTExOEM1LjM1NzUyIDEwLjE4MTEgNy44MTg5IDEyLjY0MjUgMTAuODg4MiAxMy45NTY1TDEyLjQyNzEgMTEuODAxOUMxMi41NTcyIDExLjYxOTkgMTIuNzk5IDExLjU1NzMgMTMuMDAxIDExLjY1MzJDMTQuMjQ0NiAxMi4yNDM5IDE1LjU4OTEgMTIuNjU2NiAxNy4wMDE2IDEyLjg1ODRDMTcuMTM5NiAxMi44NzgyIDE3LjMyMjUgMTIuODk5NSAxNy41NTAyIDEyLjkyMjVDMTcuODA1NiAxMi45NDgzIDE4IDEzLjE2MzMgMTggMTMuNDJaXCIgLz5cbiAgICA8cGF0aCB2LWVsc2UgZD1cIk0zMi43NjU5IDUuNDM0MzdDMzMuMDc4MyA1Ljc0Njc5IDMzLjA3ODMgNi4yNTMzMiAzMi43NjU5IDYuNTY1NzRMMjcuNjc0NyAxMS42NTY5QzI3LjM2MjMgMTEuOTY5MyAyNi44NTU4IDExLjk2OTMgMjYuNTQzMyAxMS42NTY5QzI2LjIzMDkgMTEuMzQ0NSAyNi4yMzA5IDEwLjgzOCAyNi41NDMzIDEwLjUyNTVMMzAuMjY4OCA2LjgwMDA2TDAuMjAwMTk1IDYuODAwMDVMMC4yMDAxOTUgNS4yMDAwNUwzMC4yNjg4IDUuMjAwMDZMMjYuNTQzMyAxLjQ3NDU3QzI2LjIzMDkgMS4xNjIxNSAyNi4yMzA5IDAuNjU1NjIxIDI2LjU0MzMgMC4zNDMyMDFDMjYuODU1OCAwLjAzMDc4MTkgMjcuMzYyMyAwLjAzMDc4MTkgMjcuNjc0NyAwLjM0MzIwMUwzMi43NjU5IDUuNDM0MzdaXCIgLz5cbiAgPC9zdmc+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuc3ZnIHsgZGlzcGxheTogYmxvY2s7IHdpZHRoOiBjYWxjKDEyMCAqIHZhcigtLWtpb3NrLXVuaXQpKTsgaGVpZ2h0OiBjYWxjKDEyMCAqIHZhcigtLWtpb3NrLXVuaXQpKTsgfVxuLmtpb3NrLWljb24tLWxlZnQgeyB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyB9XG48L3N0eWxlPlxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OyJ9","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"viewBox\"]\nconst _hoisted_2 = {\n  key: 0,\n  d: \"M18 13.42V16.9561C18 17.4811 17.5941 17.9167 17.0705 17.9537C16.6331 17.9846 16.2763 18 16 18C7.1634 18 0 10.8366 0 2C0 1.72371 0.01545 1.36687 0.04635 0.9295C0.08337 0.40588 0.51894 0 1.04386 0H4.5801C4.83678 0 5.05176 0.19442 5.07753 0.4498C5.10067 0.67907 5.12218 0.86314 5.14207 1.00202C5.34435 2.41472 5.75753 3.75936 6.3487 5.00303C6.44359 5.20265 6.38171 5.44159 6.20185 5.57006L4.04355 7.1118C5.35752 10.1811 7.8189 12.6425 10.8882 13.9565L12.4271 11.8019C12.5572 11.6199 12.799 11.5573 13.001 11.6532C14.2446 12.2439 15.5891 12.6566 17.0016 12.8584C17.1396 12.8782 17.3225 12.8995 17.5502 12.9225C17.8056 12.9483 18 13.1633 18 13.42Z\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  d: \"M32.7659 5.43437C33.0783 5.74679 33.0783 6.25332 32.7659 6.56574L27.6747 11.6569C27.3623 11.9693 26.8558 11.9693 26.5433 11.6569C26.2309 11.3445 26.2309 10.838 26.5433 10.5255L30.2688 6.80006L0.200195 6.80005L0.200195 5.20005L30.2688 5.20006L26.5433 1.47457C26.2309 1.16215 26.2309 0.655621 26.5433 0.343201C26.8558 0.0307819 27.3623 0.0307819 27.6747 0.343201L32.7659 5.43437Z\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"svg\", {\n    viewBox: $props.name === 'phone' ? '0 0 18 18' : '0 0 33 12',\n    fill: \"currentColor\",\n    \"aria-hidden\": \"true\",\n    class: _normalizeClass({ 'kiosk-icon--left': $props.name === 'arrow-left' })\n  }, [\n    ($props.name === 'phone')\n      ? (_openBlock(), _createElementBlock(\"path\", _hoisted_2))\n      : (_openBlock(), _createElementBlock(\"path\", _hoisted_3))\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskIcon.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskIcon.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskIcon.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/KioskIcon.vue\";script.__scopeId = \"data-v-31733269\";export default script;","export default {\n  en: {\n    flappy: {\n      soundOn: \"Sound: on\", soundOff: \"Sound: off\",\n      musicOn: \"Music: on\", musicOff: \"Music: off\",\n      demoHighscores: \"Demo high scores\",\n      playWhileWaiting: \"Play while you wait\", waiting: \"Your host is on the way\", nextVisitor: \"Next visitor\",\n      controls: \"Tap the game or press space to fly.\", choose: \"Choose your pilot\", result: \"Your score: {score}\", lost: \"Game over!\",\n      initials: \"Enter your three initials\", nextLetter: \"Next letter, position {position}\", previousLetter: \"Previous letter, position {position}\", letter: \"Letter {position}\",\n      save: \"Save score\", saving: \"Saving...\", saved: \"Score saved!\", start: \"Let's fly\", again: \"Play again\",\n      highscores: \"High scores\", organization: \"All screens in this organization\", loading: \"Loading scores...\", empty: \"Set the first high score!\",\n      loadError: \"Scores could not be loaded.\", saveError: \"Could not save. Please try again.\", demo: \"Your score is saved in the separate demo leaderboard.\",\n    },\n    flow: {\n      fullName: \"Your name\", fullNamePlaceholder: \"First and last name\", whoAreYou: \"Who are you?\", notListed: \"I'm not on the list\", noAppointments: \"No appointments with {name} today.\", duration: \"How long is your appointment?\", step: \"Registration · step {step} of {total}\",\n      duration30: \"Half an hour\", duration45: \"45 minutes\", duration60: \"One hour\", duration90: \"An hour and a half\", duration120: \"Two hours\",\n      customDuration: \"Choose duration\", lessTime: \"Half an hour less\", moreTime: \"Half an hour more\", minutes: \"minutes\", until: \"Until approximately {time}\",\n      customUntil: \"Until approximately {time}\", continue: \"Continue\", chooseCompany: \"Which company is your appointment with?\", chooseContact: \"Who are you here to see?\",\n      noCompanies: \"No companies are available. Please ask for help at reception.\", searchContact: \"Search by name\", noResults: \"Nobody found with that name.\", callCompanyReception: \"Call reception at {company}\",\n      companyFallback: \"Calling another contact at {company}\", companyCountdown: \"No answer? We will call another contact at {company} in\", onTheWay: \"{name} is on the way.\", someoneOnTheWay: \"Someone is coming to meet you.\", nobodyReached: \"We could not reach anyone.\", noAnswer: \"No answer\",\n      alphabet: \"Go to first letter\", all: \"All\", callReception: \"Call reception\", confirmCall: \"Confirm your contact\", call: \"Call {name}\",\n      morning: \"Good morning.\", afternoon: \"Good afternoon.\", evening: \"Good evening.\",\n    },\n    language: \"Language\",\n    digitalReception: \"Digital reception\",\n    tapToRegisterShort: \"Tap to register\",\n    tapToNotify: \"Let your host know you have arrived\",\n    callSucceeded: \"Success\",\n    employeeOnTheWay: \"{name} is on the way\",\n    retryCall: \"Tap to call again\",\n    appointmentFrom: 'Appointment from',\n    appointmentUntil: 'Appointment until',\n    appTitle: 'Digital Reception',\n    back: \"Back\",\n    backToStart: 'Back to Start',\n    callEmployee: 'Call Employee',\n    calling: 'Calling',\n    teamsPlaybackFailed: \"Your host answered, but playback of the message could not be confirmed. Please ask for help at reception.\",\n    callUncertain: \"We are checking whether your host has been reached. Please wait.\",\n    callingFallback: 'General number',\n    cancel: 'Cancel',\n    company: 'Company',\n    email: 'Email',\n    licensePlate: \"License plate\",\n    employeeIsOnTheWay: 'Someone will be with you shortly!',\n    fallbackCountdownPreamble: \"No answer? We will call the general number in\",\n    firstName: 'First name',\n    lastName: 'Last name',\n    noAnswer: 'No answer',\n    noAnswerCountdownPreamble: 'No answer in',\n    notifyContact: 'Notify your contact',\n    phone_calamities: 'Phone number (for calamities)',\n    return: 'Return',\n    returningToStart: \"Returning to start in\",\n    selectEmployee: 'Select employee',\n    tapToRegister: 'Tap to register & notify your contact',\n    tryAgain: 'Try again',\n    visitorRegistration: 'Visitor Registration',\n    welcome: 'Welcome',\n    welcomeAt: 'Welcome at',\n    agenda: {\n      example: \"Example calendar\",\n      expected: \"Expected visitors\",\n      forWhom: \"Who are you here to see?\",\n      whichAppointment: \"Which appointment is yours?\",\n      appointmentsWith: \"Appointments with {host}\",\n      appointmentCount: \"{count} appointments\",\n      appointmentAt: \"Appointment at\",\n      withHost: \"with {host}\",\n      missing: \"Is your appointment not listed?\",\n      manual: \"Register manually\",\n      yourAppointment: \"Your appointment\",\n      appointmentWith: \"Appointment at {time} with {host}\",\n      noBack: \"No, go back\",\n      yesNotify: \"Yes, notify {name}\",\n      exampleConfirmed: \"This is an example. Nobody has been notified.\",\n    },\n    registration: {\n      introShort: \"Register here so we know who is in the building in an emergency and your host is notified that you have arrived.\",\n      later: \"Later\",\n      required: \"Please complete this field.\",\n      selectEmployeeError: \"Please select an employee.\",\n      invalidEmail: \"Enter a valid email address.\",\n      invalidDuration: \"Choose a duration between 30 minutes and 12 hours.\",\n      loadingEmployees: \"Loading employees…\",\n      noEmployees: \"No employees are currently available.\",\n      employeesError: \"The employees could not be loaded. Please try again.\",\n      saving: \"Saving registration…\",\n\n      settingsError: \"The registration settings could not be loaded. Please try again later.\",\n      saveError: \"Your registration could not be saved. Please try again.\",\n      headingWelcome: \"Welcome!\",\n      intro: 'To ensure your safety and that of our employees, we kindly ask you to fill in your details. In case of an emergency, this registration helps us know who is present in our building. This allows us to quickly contact and verify that everyone has safely evacuated the building.<br>Additionally, your contact person will receive an immediate notification of your arrival, so they know you are here and can welcome you as soon as possible.',\n      appointmentUntilText: 'Appointment is until:',\n    }\n  },\n  nl: {\n    flappy: {\n      soundOn: \"Geluid: aan\", soundOff: \"Geluid: uit\",\n      musicOn: \"Muziek: aan\", musicOff: \"Muziek: uit\",\n      demoHighscores: \"Demo-highscores\",\n      playWhileWaiting: \"Speel terwijl je wacht\", waiting: \"Er komt iemand naar je toe\", nextVisitor: \"Volgende bezoeker\",\n      controls: \"Tik op het spel of druk op spatie om te vliegen.\", choose: \"Kies je piloot\", result: \"Jouw score: {score}\", lost: \"Helaas, je hebt verloren!\",\n      initials: \"Kies je drie initialen\", nextLetter: \"Volgende letter, positie {position}\", previousLetter: \"Vorige letter, positie {position}\", letter: \"Letter {position}\",\n      save: \"Score opslaan\", saving: \"Opslaan...\", saved: \"Score opgeslagen!\", start: \"Vliegen maar\", again: \"Nog een keer\",\n      highscores: \"Highscores\", organization: \"Alle schermen van deze administratie\", loading: \"Scores laden...\", empty: \"Zet de eerste highscore!\",\n      loadError: \"De scores konden niet worden geladen.\", saveError: \"Opslaan is niet gelukt. Probeer het opnieuw.\", demo: \"Je score wordt opgeslagen in de aparte demo-lijst.\",\n    },\n    flow: {\n      fullName: \"Uw naam\", fullNamePlaceholder: \"Voor- en achternaam\", whoAreYou: \"Wie bent u?\", notListed: \"Ik sta er niet tussen\", noAppointments: \"Vandaag geen afspraken bij {name}.\", duration: \"Hoe lang duurt uw afspraak?\", step: \"Aanmelden · stap {step} van {total}\",\n      duration30: \"Half uur\", duration45: \"Drie kwartier\", duration60: \"Een uur\", duration90: \"Anderhalf uur\", duration120: \"Twee uur\",\n      customDuration: \"Zelf kiezen\", lessTime: \"Een half uur korter\", moreTime: \"Een half uur langer\", minutes: \"minuten\", until: \"Tot ongeveer {time}\",\n      customUntil: \"Tot ongeveer {time}\", continue: \"Verder\", chooseCompany: \"Bij welk bedrijf heeft u een afspraak?\", chooseContact: \"Wie komt u bezoeken?\",\n      noCompanies: \"Er zijn geen bedrijven beschikbaar. Vraag hulp bij de receptie.\", searchContact: \"Zoek op naam\", noResults: \"Niemand gevonden met die naam.\", callCompanyReception: \"Bel de receptie van {company}\",\n      companyFallback: \"Bellen: andere contactpersoon bij {company}\", companyCountdown: \"Geen gehoor? We bellen een andere contactpersoon bij {company} over\", onTheWay: \"{name} komt eraan.\", someoneOnTheWay: \"Er komt iemand naar u toe.\", nobodyReached: \"We konden niemand bereiken.\", noAnswer: \"Geen antwoord\",\n      alphabet: \"Ga naar beginletter\", all: \"Alle\", callReception: \"Bel de receptie\", confirmCall: \"Bevestig uw contactpersoon\", call: \"Bel {name}\",\n      morning: \"Goedemorgen.\", afternoon: \"Goedemiddag.\", evening: \"Goedenavond.\",\n    },\n    language: \"Taal\",\n    digitalReception: \"Digitale receptie\",\n    tapToRegisterShort: \"Tik om u aan te melden\",\n    tapToNotify: \"Laat uw afspraak weten dat u er bent\",\n    callSucceeded: \"Gelukt\",\n    employeeOnTheWay: \"{name} is onderweg\",\n    retryCall: \"Tik om opnieuw te bellen\",\n    appointmentFrom: 'Afspraak van',\n    appointmentUntil: 'Afspraak tot',\n    appTitle: 'Digitale Receptie',\n    back: \"Terug\",\n    backToStart: 'Terug naar Start',\n    callEmployee: 'Medewerker Bellen',\n    calling: 'Bellen',\n    teamsPlaybackFailed: \"Uw contactpersoon nam op, maar het afspelen van de boodschap is niet bevestigd. Vraag hulp bij de balie.\",\n    callUncertain: \"We controleren of uw contactpersoon is bereikt. Een ogenblik geduld.\",\n    callingFallback: 'Algemene nummer',\n    cancel: 'Annuleren',\n    company: 'Bedrijf',\n    email: 'E-mail',\n    licensePlate: \"Kenteken\",\n    employeeIsOnTheWay: 'De medewerker is onderweg!',\n    fallbackCountdownPreamble: \"Geen gehoor? We bellen het algemene nummer over\",\n    firstName: 'Voornaam',\n    lastName: 'Achternaam',\n    noAnswer: 'Geen antwoord',\n    noAnswerCountdownPreamble: 'Geen antwoord',\n    notifyContact: \"Informeer uw contactpersoon\",\n    phone_calamities: 'Telefoonnummer (bij calamiteiten)',\n    return: 'Terug',\n    returningToStart: \"Terug naar start over\",\n    selectEmployee: 'Selecteer medewerker',\n    tapToRegister: 'Tik om uw contact­persoon te informeren',\n    tryAgain: 'Opnieuw proberen',\n    visitorRegistration: 'Bezoekersregistratie',\n    welcome: 'Welkom',\n    welcomeAt: 'Welkom bij',\n    agenda: {\n      example: \"Voorbeeldagenda\",\n      expected: \"Verwachte bezoekers\",\n      forWhom: \"Voor wie komt u?\",\n      whichAppointment: \"Welke afspraak is van u?\",\n      appointmentsWith: \"Afspraken bij {host}\",\n      appointmentCount: \"{count} afspraken\",\n      appointmentAt: \"Afspraak om\",\n      withHost: \"bij {host}\",\n      missing: \"Staat uw afspraak er niet bij?\",\n      manual: \"Meld u handmatig aan\",\n      yourAppointment: \"Uw afspraak\",\n      appointmentWith: \"Afspraak om {time} met {host}\",\n      noBack: \"Nee, terug\",\n      yesNotify: \"Ja, informeer {name}\",\n      exampleConfirmed: \"Dit is een voorbeeld. Er is niemand geïnformeerd.\",\n    },\n    registration: {\n      introShort: \"Meld u hier aan. Zo weten we bij een calamiteit wie er in het pand is, en krijgt uw contactpersoon direct een melding dat u er bent.\",\n      later: \"Later\",\n      required: \"Vul dit veld in.\",\n      selectEmployeeError: \"Selecteer een medewerker.\",\n      invalidEmail: \"Vul een geldig e-mailadres in.\",\n      invalidDuration: \"Kies een duur tussen 30 minuten en 12 uur.\",\n      loadingEmployees: \"Medewerkers worden geladen…\",\n      noEmployees: \"Er zijn momenteel geen medewerkers beschikbaar.\",\n      employeesError: \"De medewerkers konden niet worden geladen. Probeer het opnieuw.\",\n      saving: \"Registratie opslaan…\",\n\n      settingsError: \"De registratie-instellingen konden niet worden geladen. Probeer het later opnieuw.\",\n      saveError: \"Uw registratie kon niet worden opgeslagen. Probeer het opnieuw.\",\n      headingWelcome: \"Welkom!\",\n      intro: 'Om uw veiligheid en die van onze medewerkers te waarborgen, vragen wij u vriendelijk om uw gegevens in te vullen. Deze registratie helpt ons in geval van een calamiteit om te weten wie er in ons pand aanwezig is. Zo kunnen we snel contact opnemen en controleren of iedereen veilig het gebouw heeft verlaten.<br>Daarnaast ontvangt uw contactpersoon direct een melding dat u bent gearriveerd, zodat hij of zij weet dat u er bent en u zo snel mogelijk kan verwelkomen.',\n      appointmentUntilText: 'Mijn afspraak is tot:',\n    }\n  },\n};\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, createBlock as _createBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"welcome__clock\"\n}\nconst _hoisted_2 = {\n  key: 1,\n  class: \"welcome__line\",\n  viewBox: \"0 0 1440 1920\",\n  preserveAspectRatio: \"none\",\n  fill: \"none\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_3 = [\"id\"]\nconst _hoisted_4 = [\"clip-path\"]\nconst _hoisted_5 = { class: \"welcome__heading\" }\nconst _hoisted_6 = { class: \"welcome__eyebrow\" }\nconst _hoisted_7 = { class: \"welcome__title\" }\nconst _hoisted_8 = {\n  key: 0,\n  class: \"welcome__message\"\n}\nconst _hoisted_9 = {\n  key: 1,\n  class: \"welcome__message\"\n}\nconst _hoisted_10 = { class: \"welcome__action\" }\nconst _hoisted_11 = { class: \"welcome__landscape-label\" }\nconst _hoisted_12 = { class: \"welcome__portrait-label\" }\nconst _hoisted_13 = {\n  key: 0,\n  viewBox: \"0 0 20 20\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.8\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"button\", {\n    class: _normalizeClass([\"welcome\", { 'welcome--branded': $props.companyName }]),\n    type: \"button\",\n    onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('register')))\n  }, [\n    ($props.theme === 'connectworks')\n      ? (_openBlock(), _createElementBlock(\"span\", _hoisted_1, _toDisplayString($setup.time), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    ($props.theme === 'connectworks')\n      ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_2, [\n          _createElementVNode(\"defs\", null, [\n            _createElementVNode(\"clipPath\", { id: $setup.lineClip }, _cache[1] || (_cache[1] = [\n              _createElementVNode(\"rect\", {\n                x: \"0\",\n                y: \"1000\",\n                width: \"1440\",\n                height: \"920\"\n              }, null, -1 /* CACHED */)\n            ]), 8 /* PROPS */, _hoisted_3)\n          ]),\n          _cache[2] || (_cache[2] = _createElementVNode(\"path\", {\n            d: \"M-40 700C260 700 380 520 580 480C780 440 880 600 800 690C720 780 610 690 660 590C760 400 1120 470 1240 720C1290 830 1310 960 1310 1080\",\n            stroke: \"currentColor\",\n            \"stroke-width\": \"16\",\n            \"stroke-linecap\": \"round\"\n          }, null, -1 /* CACHED */)),\n          _createElementVNode(\"path\", {\n            \"clip-path\": `url(#${$setup.lineClip})`,\n            d: \"M-40 700C260 700 380 520 580 480C780 440 880 600 800 690C720 780 610 690 660 590C760 400 1120 470 1240 720C1290 830 1310 960 1310 1080\",\n            stroke: \"var(--kiosk-surface)\",\n            \"stroke-width\": \"16\",\n            \"stroke-linecap\": \"round\"\n          }, null, 8 /* PROPS */, _hoisted_4),\n          _cache[3] || (_cache[3] = _createElementVNode(\"circle\", {\n            cx: \"1310\",\n            cy: \"1080\",\n            r: \"26\",\n            fill: \"var(--kiosk-orange)\"\n          }, null, -1 /* CACHED */))\n        ]))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"span\", _hoisted_5, [\n      _createElementVNode(\"span\", _hoisted_6, _toDisplayString($props.theme === \"connectworks\" ? `${$setup.date} · ${$setup.time}` : `/${$setup.texts.digitalReception}`), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_7, [\n        ($props.theme === 'connectworks')\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _createTextVNode(_toDisplayString($setup.greeting), 1 /* TEXT */)\n            ], 64 /* STABLE_FRAGMENT */))\n          : ($props.companyName || $props.theme === 'nieuweweme')\n            ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                _createTextVNode(_toDisplayString($setup.texts.welcomeAt), 1 /* TEXT */),\n                _cache[4] || (_cache[4] = _createElementVNode(\"br\", null, null, -1 /* CACHED */)),\n                _createElementVNode(\"span\", null, _toDisplayString($props.companyName || \"NieuweWeme\"), 1 /* TEXT */)\n              ], 64 /* STABLE_FRAGMENT */))\n            : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                _createTextVNode(_toDisplayString($setup.texts.registration.headingWelcome), 1 /* TEXT */)\n              ], 64 /* STABLE_FRAGMENT */))\n      ]),\n      ($props.theme === 'connectworks' && !$props.welcomeText)\n        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, _toDisplayString($setup.texts.welcomeAt) + \" \" + _toDisplayString($props.companyName || \"Connectworks\") + \".\", 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true),\n      ($props.welcomeText)\n        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9, _toDisplayString($props.welcomeText), 1 /* TEXT */))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    _createElementVNode(\"span\", _hoisted_10, [\n      _createElementVNode(\"span\", _hoisted_11, _toDisplayString($setup.texts.tapToRegisterShort), 1 /* TEXT */),\n      _createElementVNode(\"span\", _hoisted_12, _toDisplayString($setup.texts.tapToNotify), 1 /* TEXT */),\n      ($props.theme === 'connectworks')\n        ? (_openBlock(), _createElementBlock(\"svg\", _hoisted_13, _cache[5] || (_cache[5] = [\n            _createElementVNode(\"path\", { d: \"M3.5 10h13M11.5 5l5 5-5 5\" }, null, -1 /* CACHED */)\n          ])))\n        : (_openBlock(), _createBlock($setup[\"KioskIcon\"], {\n            key: 1,\n            name: \"arrow-right\"\n          }))\n    ])\n  ], 2 /* CLASS */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/WelcomePresentation.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/WelcomePresentation.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/WelcomePresentation.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/velkom/components/WelcomePresentation.vue\";script.__scopeId = \"data-v-207c373b\";export default script;","import { createCommentVNode as _createCommentVNode, createVNode as _createVNode, withCtx as _withCtx, normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    ref: \"container\",\n    class: \"kiosk-preview\",\n    style: _normalizeStyle({ aspectRatio: `${$setup.size.width} / ${$setup.size.height}` }),\n    role: \"img\",\n    \"aria-label\": `Welkomstscherm, ${$props.language === 'nl' ? 'Nederlands' : 'Engels'}, ${$setup.portrait ? 'staand' : 'liggend'}: ${$props.welcomeText}`\n  }, [\n    _createCommentVNode(\" A full-size presentation keeps the kiosk's minimum font and control sizes when scaled. \"),\n    _createElementVNode(\"div\", {\n      class: \"kiosk-preview__viewport\",\n      inert: \"\",\n      \"aria-hidden\": \"true\",\n      style: _normalizeStyle({ width: `${$setup.size.width}px`, height: `${$setup.size.height}px`, transform: `scale(${$setup.width / $setup.size.width})` })\n    }, [\n      _createVNode($setup[\"KioskShell\"], {\n        portrait: $setup.portrait,\n        language: $props.language,\n        theme: $props.kioskTheme,\n        branding: $props.branding,\n        welcome: \"\"\n      }, {\n        default: _withCtx(() => [\n          _createVNode($setup[\"WelcomePresentation\"], {\n            language: $props.language,\n            \"welcome-text\": $props.welcomeText,\n            theme: $props.kioskTheme,\n            \"company-name\": $props.branding?.companyName\n          }, null, 8 /* PROPS */, [\"language\", \"welcome-text\", \"theme\", \"company-name\"])\n        ]),\n        _: 1 /* STABLE */\n      }, 8 /* PROPS */, [\"portrait\", \"language\", \"theme\", \"branding\"])\n    ], 4 /* STYLE */)\n  ], 12 /* STYLE, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenPreview.vue\";script.__scopeId = \"data-v-a9b4d935\";export default script;","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport qrcode from \"qrcode-generator\";\nimport Dialog from \"../../ui/Dialog.vue\";\n\nconst props = defineProps<{ open: boolean; url: string; screenName: string }>();\nconst emit = defineEmits<{ close: [] }>();\nconst image = computed(() => {\n  const code = qrcode(0, \"M\");\n  // Match the browser's Open screen URL, including percent-encoded paths and its secret fragment.\n  code.addData(new URL(props.url, document.baseURI).href);\n  code.make();\n  return `data:image/svg+xml,${encodeURIComponent(code.createSvgTag({ cellSize: 4, margin: 16, scalable: true }))}`;\n});\n</script>\n\n<template>\n  <Dialog :open=\"open\" title=\"Scherm openen\" :description=\"`Scan met het ontvangstapparaat om ‘${screenName}’ te openen.`\" :width=\"480\" @close=\"emit('close')\">\n    <div class=\"screen-qr\">\n      <img v-if=\"open\" :src=\"image\" :alt=\"`QR-code om ${screenName} te openen`\" width=\"320\" height=\"320\" class=\"screen-qr__image\" data-testid=\"screen-qr-image\">\n    </div>\n  </Dialog>\n</template>\n\n<style scoped>\n.screen-qr { display: flex; justify-content: center; }\n.screen-qr__image { display: block; width: 320px; max-width: 100%; height: auto; aspect-ratio: 1; background: white; }\n</style>\n","//---------------------------------------------------------------------\n//\n// QR Code Generator for JavaScript\n//\n// Copyright (c) 2009 Kazuhiko Arase\n//\n// URL: http://www.d-project.com/\n//\n// Licensed under the MIT license:\n//  http://www.opensource.org/licenses/mit-license.php\n//\n// The word 'QR Code' is registered trademark of\n// DENSO WAVE INCORPORATED\n//  http://www.denso-wave.com/qrcode/faqpatent-e.html\n//\n//---------------------------------------------------------------------\n\n//---------------------------------------------------------------------\n// qrcode\n//---------------------------------------------------------------------\n\n/**\n * qrcode\n * @param typeNumber 1 to 40\n * @param errorCorrectionLevel 'L','M','Q','H'\n */\nexport const qrcode = function(typeNumber, errorCorrectionLevel) {\n\n  const PAD0 = 0xEC;\n  const PAD1 = 0x11;\n\n  let _typeNumber = typeNumber;\n  const _errorCorrectionLevel = QRErrorCorrectionLevel[errorCorrectionLevel];\n  let _modules = null;\n  let _moduleCount = 0;\n  let _dataCache = null;\n  const _dataList = [];\n\n  const _this = {};\n\n  const makeImpl = function(test, maskPattern) {\n\n    _moduleCount = _typeNumber * 4 + 17;\n    _modules = function(moduleCount) {\n      const modules = new Array(moduleCount);\n      for (let row = 0; row < moduleCount; row += 1) {\n        modules[row] = new Array(moduleCount);\n        for (let col = 0; col < moduleCount; col += 1) {\n          modules[row][col] = null;\n        }\n      }\n      return modules;\n    }(_moduleCount);\n\n    setupPositionProbePattern(0, 0);\n    setupPositionProbePattern(_moduleCount - 7, 0);\n    setupPositionProbePattern(0, _moduleCount - 7);\n    setupPositionAdjustPattern();\n    setupTimingPattern();\n    setupTypeInfo(test, maskPattern);\n\n    if (_typeNumber >= 7) {\n      setupTypeNumber(test);\n    }\n\n    if (_dataCache == null) {\n      _dataCache = createData(_typeNumber, _errorCorrectionLevel, _dataList);\n    }\n\n    mapData(_dataCache, maskPattern);\n  };\n\n  const setupPositionProbePattern = function(row, col) {\n\n    for (let r = -1; r <= 7; r += 1) {\n\n      if (row + r <= -1 || _moduleCount <= row + r) continue;\n\n      for (let c = -1; c <= 7; c += 1) {\n\n        if (col + c <= -1 || _moduleCount <= col + c) continue;\n\n        if ( (0 <= r && r <= 6 && (c == 0 || c == 6) )\n            || (0 <= c && c <= 6 && (r == 0 || r == 6) )\n            || (2 <= r && r <= 4 && 2 <= c && c <= 4) ) {\n          _modules[row + r][col + c] = true;\n        } else {\n          _modules[row + r][col + c] = false;\n        }\n      }\n    }\n  };\n\n  const getBestMaskPattern = function() {\n\n    let minLostPoint = 0;\n    let pattern = 0;\n\n    for (let i = 0; i < 8; i += 1) {\n\n      makeImpl(true, i);\n\n      const lostPoint = QRUtil.getLostPoint(_this);\n\n      if (i == 0 || minLostPoint > lostPoint) {\n        minLostPoint = lostPoint;\n        pattern = i;\n      }\n    }\n\n    return pattern;\n  };\n\n  const setupTimingPattern = function() {\n\n    for (let r = 8; r < _moduleCount - 8; r += 1) {\n      if (_modules[r][6] != null) {\n        continue;\n      }\n      _modules[r][6] = (r % 2 == 0);\n    }\n\n    for (let c = 8; c < _moduleCount - 8; c += 1) {\n      if (_modules[6][c] != null) {\n        continue;\n      }\n      _modules[6][c] = (c % 2 == 0);\n    }\n  };\n\n  const setupPositionAdjustPattern = function() {\n\n    const pos = QRUtil.getPatternPosition(_typeNumber);\n\n    for (let i = 0; i < pos.length; i += 1) {\n\n      for (let j = 0; j < pos.length; j += 1) {\n\n        const row = pos[i];\n        const col = pos[j];\n\n        if (_modules[row][col] != null) {\n          continue;\n        }\n\n        for (let r = -2; r <= 2; r += 1) {\n\n          for (let c = -2; c <= 2; c += 1) {\n\n            if (r == -2 || r == 2 || c == -2 || c == 2\n                || (r == 0 && c == 0) ) {\n              _modules[row + r][col + c] = true;\n            } else {\n              _modules[row + r][col + c] = false;\n            }\n          }\n        }\n      }\n    }\n  };\n\n  const setupTypeNumber = function(test) {\n\n    const bits = QRUtil.getBCHTypeNumber(_typeNumber);\n\n    for (let i = 0; i < 18; i += 1) {\n      const mod = (!test && ( (bits >> i) & 1) == 1);\n      _modules[Math.floor(i / 3)][i % 3 + _moduleCount - 8 - 3] = mod;\n    }\n\n    for (let i = 0; i < 18; i += 1) {\n      const mod = (!test && ( (bits >> i) & 1) == 1);\n      _modules[i % 3 + _moduleCount - 8 - 3][Math.floor(i / 3)] = mod;\n    }\n  };\n\n  const setupTypeInfo = function(test, maskPattern) {\n\n    const data = (_errorCorrectionLevel << 3) | maskPattern;\n    const bits = QRUtil.getBCHTypeInfo(data);\n\n    // vertical\n    for (let i = 0; i < 15; i += 1) {\n\n      const mod = (!test && ( (bits >> i) & 1) == 1);\n\n      if (i < 6) {\n        _modules[i][8] = mod;\n      } else if (i < 8) {\n        _modules[i + 1][8] = mod;\n      } else {\n        _modules[_moduleCount - 15 + i][8] = mod;\n      }\n    }\n\n    // horizontal\n    for (let i = 0; i < 15; i += 1) {\n\n      const mod = (!test && ( (bits >> i) & 1) == 1);\n\n      if (i < 8) {\n        _modules[8][_moduleCount - i - 1] = mod;\n      } else if (i < 9) {\n        _modules[8][15 - i - 1 + 1] = mod;\n      } else {\n        _modules[8][15 - i - 1] = mod;\n      }\n    }\n\n    // fixed module\n    _modules[_moduleCount - 8][8] = (!test);\n  };\n\n  const mapData = function(data, maskPattern) {\n\n    let inc = -1;\n    let row = _moduleCount - 1;\n    let bitIndex = 7;\n    let byteIndex = 0;\n    const maskFunc = QRUtil.getMaskFunction(maskPattern);\n\n    for (let col = _moduleCount - 1; col > 0; col -= 2) {\n\n      if (col == 6) col -= 1;\n\n      while (true) {\n\n        for (let c = 0; c < 2; c += 1) {\n\n          if (_modules[row][col - c] == null) {\n\n            let dark = false;\n\n            if (byteIndex < data.length) {\n              dark = ( ( (data[byteIndex] >>> bitIndex) & 1) == 1);\n            }\n\n            const mask = maskFunc(row, col - c);\n\n            if (mask) {\n              dark = !dark;\n            }\n\n            _modules[row][col - c] = dark;\n            bitIndex -= 1;\n\n            if (bitIndex == -1) {\n              byteIndex += 1;\n              bitIndex = 7;\n            }\n          }\n        }\n\n        row += inc;\n\n        if (row < 0 || _moduleCount <= row) {\n          row -= inc;\n          inc = -inc;\n          break;\n        }\n      }\n    }\n  };\n\n  const createBytes = function(buffer, rsBlocks) {\n\n    let offset = 0;\n\n    let maxDcCount = 0;\n    let maxEcCount = 0;\n\n    const dcdata = new Array(rsBlocks.length);\n    const ecdata = new Array(rsBlocks.length);\n\n    for (let r = 0; r < rsBlocks.length; r += 1) {\n\n      const dcCount = rsBlocks[r].dataCount;\n      const ecCount = rsBlocks[r].totalCount - dcCount;\n\n      maxDcCount = Math.max(maxDcCount, dcCount);\n      maxEcCount = Math.max(maxEcCount, ecCount);\n\n      dcdata[r] = new Array(dcCount);\n\n      for (let i = 0; i < dcdata[r].length; i += 1) {\n        dcdata[r][i] = 0xff & buffer.getBuffer()[i + offset];\n      }\n      offset += dcCount;\n\n      const rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount);\n      const rawPoly = qrPolynomial(dcdata[r], rsPoly.getLength() - 1);\n\n      const modPoly = rawPoly.mod(rsPoly);\n      ecdata[r] = new Array(rsPoly.getLength() - 1);\n      for (let i = 0; i < ecdata[r].length; i += 1) {\n        const modIndex = i + modPoly.getLength() - ecdata[r].length;\n        ecdata[r][i] = (modIndex >= 0)? modPoly.getAt(modIndex) : 0;\n      }\n    }\n\n    let totalCodeCount = 0;\n    for (let i = 0; i < rsBlocks.length; i += 1) {\n      totalCodeCount += rsBlocks[i].totalCount;\n    }\n\n    const data = new Array(totalCodeCount);\n    let index = 0;\n\n    for (let i = 0; i < maxDcCount; i += 1) {\n      for (let r = 0; r < rsBlocks.length; r += 1) {\n        if (i < dcdata[r].length) {\n          data[index] = dcdata[r][i];\n          index += 1;\n        }\n      }\n    }\n\n    for (let i = 0; i < maxEcCount; i += 1) {\n      for (let r = 0; r < rsBlocks.length; r += 1) {\n        if (i < ecdata[r].length) {\n          data[index] = ecdata[r][i];\n          index += 1;\n        }\n      }\n    }\n\n    return data;\n  };\n\n  const createData = function(typeNumber, errorCorrectionLevel, dataList) {\n\n    const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectionLevel);\n\n    const buffer = qrBitBuffer();\n\n    for (let i = 0; i < dataList.length; i += 1) {\n      const data = dataList[i];\n      buffer.put(data.getMode(), 4);\n      buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n      data.write(buffer);\n    }\n\n    // calc num max data.\n    let totalDataCount = 0;\n    for (let i = 0; i < rsBlocks.length; i += 1) {\n      totalDataCount += rsBlocks[i].dataCount;\n    }\n\n    if (buffer.getLengthInBits() > totalDataCount * 8) {\n      throw 'code length overflow. ('\n        + buffer.getLengthInBits()\n        + '>'\n        + totalDataCount * 8\n        + ')';\n    }\n\n    // end code\n    if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {\n      buffer.put(0, 4);\n    }\n\n    // padding\n    while (buffer.getLengthInBits() % 8 != 0) {\n      buffer.putBit(false);\n    }\n\n    // padding\n    while (true) {\n\n      if (buffer.getLengthInBits() >= totalDataCount * 8) {\n        break;\n      }\n      buffer.put(PAD0, 8);\n\n      if (buffer.getLengthInBits() >= totalDataCount * 8) {\n        break;\n      }\n      buffer.put(PAD1, 8);\n    }\n\n    return createBytes(buffer, rsBlocks);\n  };\n\n  _this.addData = function(data, mode) {\n\n    mode = mode || 'Byte';\n\n    let newData = null;\n\n    switch(mode) {\n    case 'Numeric' :\n      newData = qrNumber(data);\n      break;\n    case 'Alphanumeric' :\n      newData = qrAlphaNum(data);\n      break;\n    case 'Byte' :\n      newData = qr8BitByte(data);\n      break;\n    case 'Kanji' :\n      newData = qrKanji(data);\n      break;\n    default :\n      throw 'mode:' + mode;\n    }\n\n    _dataList.push(newData);\n    _dataCache = null;\n  };\n\n  _this.isDark = function(row, col) {\n    if (row < 0 || _moduleCount <= row || col < 0 || _moduleCount <= col) {\n      throw row + ',' + col;\n    }\n    return _modules[row][col];\n  };\n\n  _this.getModuleCount = function() {\n    return _moduleCount;\n  };\n\n  _this.make = function() {\n    if (_typeNumber < 1) {\n      let typeNumber = 1;\n\n      for (; typeNumber < 40; typeNumber++) {\n        const rsBlocks = QRRSBlock.getRSBlocks(typeNumber, _errorCorrectionLevel);\n        const buffer = qrBitBuffer();\n\n        for (let i = 0; i < _dataList.length; i++) {\n          const data = _dataList[i];\n          buffer.put(data.getMode(), 4);\n          buffer.put(data.getLength(), QRUtil.getLengthInBits(data.getMode(), typeNumber) );\n          data.write(buffer);\n        }\n\n        let totalDataCount = 0;\n        for (let i = 0; i < rsBlocks.length; i++) {\n          totalDataCount += rsBlocks[i].dataCount;\n        }\n\n        if (buffer.getLengthInBits() <= totalDataCount * 8) {\n          break;\n        }\n      }\n\n      _typeNumber = typeNumber;\n    }\n\n    makeImpl(false, getBestMaskPattern() );\n  };\n\n  _this.createTableTag = function(cellSize, margin) {\n\n    cellSize = cellSize || 2;\n    margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n    let qrHtml = '';\n\n    qrHtml += '<table style=\"';\n    qrHtml += ' border-width: 0px; border-style: none;';\n    qrHtml += ' border-collapse: collapse;';\n    qrHtml += ' padding: 0px; margin: ' + margin + 'px;';\n    qrHtml += '\">';\n    qrHtml += '<tbody>';\n\n    for (let r = 0; r < _this.getModuleCount(); r += 1) {\n\n      qrHtml += '<tr>';\n\n      for (let c = 0; c < _this.getModuleCount(); c += 1) {\n        qrHtml += '<td style=\"';\n        qrHtml += ' border-width: 0px; border-style: none;';\n        qrHtml += ' border-collapse: collapse;';\n        qrHtml += ' padding: 0px; margin: 0px;';\n        qrHtml += ' width: ' + cellSize + 'px;';\n        qrHtml += ' height: ' + cellSize + 'px;';\n        qrHtml += ' background-color: ';\n        qrHtml += _this.isDark(r, c)? '#000000' : '#ffffff';\n        qrHtml += ';';\n        qrHtml += '\"/>';\n      }\n\n      qrHtml += '</tr>';\n    }\n\n    qrHtml += '</tbody>';\n    qrHtml += '</table>';\n\n    return qrHtml;\n  };\n\n  _this.createSvgTag = function(cellSize, margin, alt, title) {\n\n    let opts = {};\n    if (typeof arguments[0] == 'object') {\n      // Called by options.\n      opts = arguments[0];\n      // overwrite cellSize and margin.\n      cellSize = opts.cellSize;\n      margin = opts.margin;\n      alt = opts.alt;\n      title = opts.title;\n    }\n\n    cellSize = cellSize || 2;\n    margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n    // Compose alt property surrogate\n    alt = (typeof alt === 'string') ? {text: alt} : alt || {};\n    alt.text = alt.text || null;\n    alt.id = (alt.text) ? alt.id || 'qrcode-description' : null;\n\n    // Compose title property surrogate\n    title = (typeof title === 'string') ? {text: title} : title || {};\n    title.text = title.text || null;\n    title.id = (title.text) ? title.id || 'qrcode-title' : null;\n\n    const size = _this.getModuleCount() * cellSize + margin * 2;\n    let c, mc, r, mr, qrSvg='', rect;\n\n    rect = 'l' + cellSize + ',0 0,' + cellSize +\n      ' -' + cellSize + ',0 0,-' + cellSize + 'z ';\n\n    qrSvg += '<svg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"';\n    qrSvg += !opts.scalable ? ' width=\"' + size + 'px\" height=\"' + size + 'px\"' : '';\n    qrSvg += ' viewBox=\"0 0 ' + size + ' ' + size + '\" ';\n    qrSvg += ' preserveAspectRatio=\"xMinYMin meet\"';\n    qrSvg += (title.text || alt.text) ? ' role=\"img\" aria-labelledby=\"' +\n        escapeXml([title.id, alt.id].join(' ').trim() ) + '\"' : '';\n    qrSvg += '>';\n    qrSvg += (title.text) ? '<title id=\"' + escapeXml(title.id) + '\">' +\n        escapeXml(title.text) + '</title>' : '';\n    qrSvg += (alt.text) ? '<description id=\"' + escapeXml(alt.id) + '\">' +\n        escapeXml(alt.text) + '</description>' : '';\n    qrSvg += '<rect width=\"100%\" height=\"100%\" fill=\"white\" cx=\"0\" cy=\"0\"/>';\n    qrSvg += '<path d=\"';\n\n    for (r = 0; r < _this.getModuleCount(); r += 1) {\n      mr = r * cellSize + margin;\n      for (c = 0; c < _this.getModuleCount(); c += 1) {\n        if (_this.isDark(r, c) ) {\n          mc = c*cellSize+margin;\n          qrSvg += 'M' + mc + ',' + mr + rect;\n        }\n      }\n    }\n\n    qrSvg += '\" stroke=\"transparent\" fill=\"black\"/>';\n    qrSvg += '</svg>';\n\n    return qrSvg;\n  };\n\n  _this.createDataURL = function(cellSize, margin) {\n\n    cellSize = cellSize || 2;\n    margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n    const size = _this.getModuleCount() * cellSize + margin * 2;\n    const min = margin;\n    const max = size - margin;\n\n    return createDataURL(size, size, function(x, y) {\n      if (min <= x && x < max && min <= y && y < max) {\n        const c = Math.floor( (x - min) / cellSize);\n        const r = Math.floor( (y - min) / cellSize);\n        return _this.isDark(r, c)? 0 : 1;\n      } else {\n        return 1;\n      }\n    } );\n  };\n\n  _this.createImgTag = function(cellSize, margin, alt) {\n\n    cellSize = cellSize || 2;\n    margin = (typeof margin == 'undefined')? cellSize * 4 : margin;\n\n    const size = _this.getModuleCount() * cellSize + margin * 2;\n\n    let img = '';\n    img += '<img';\n    img += '\\u0020src=\"';\n    img += _this.createDataURL(cellSize, margin);\n    img += '\"';\n    img += '\\u0020width=\"';\n    img += size;\n    img += '\"';\n    img += '\\u0020height=\"';\n    img += size;\n    img += '\"';\n    if (alt) {\n      img += '\\u0020alt=\"';\n      img += escapeXml(alt);\n      img += '\"';\n    }\n    img += '/>';\n\n    return img;\n  };\n\n  const escapeXml = function(s) {\n    let escaped = '';\n    for (let i = 0; i < s.length; i += 1) {\n      const c = s.charAt(i);\n      switch(c) {\n      case '<': escaped += '&lt;'; break;\n      case '>': escaped += '&gt;'; break;\n      case '&': escaped += '&amp;'; break;\n      case '\"': escaped += '&quot;'; break;\n      default : escaped += c; break;\n      }\n    }\n    return escaped;\n  };\n\n  const _createHalfASCII = function(margin) {\n    const cellSize = 1;\n    margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n    const size = _this.getModuleCount() * cellSize + margin * 2;\n    const min = margin;\n    const max = size - margin;\n\n    let y, x, r1, r2, p;\n\n    const blocks = {\n      '██': '█',\n      '█ ': '▀',\n      ' █': '▄',\n      '  ': ' '\n    };\n\n    const blocksLastLineNoMargin = {\n      '██': '▀',\n      '█ ': '▀',\n      ' █': ' ',\n      '  ': ' '\n    };\n\n    let ascii = '';\n    for (y = 0; y < size; y += 2) {\n      r1 = Math.floor((y - min) / cellSize);\n      r2 = Math.floor((y + 1 - min) / cellSize);\n      for (x = 0; x < size; x += 1) {\n        p = '█';\n\n        if (min <= x && x < max && min <= y && y < max && _this.isDark(r1, Math.floor((x - min) / cellSize))) {\n          p = ' ';\n        }\n\n        if (min <= x && x < max && min <= y+1 && y+1 < max && _this.isDark(r2, Math.floor((x - min) / cellSize))) {\n          p += ' ';\n        }\n        else {\n          p += '█';\n        }\n\n        // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n        ascii += (margin < 1 && y+1 >= max) ? blocksLastLineNoMargin[p] : blocks[p];\n      }\n\n      ascii += '\\n';\n    }\n\n    if (size % 2 && margin > 0) {\n      return ascii.substring(0, ascii.length - size - 1) + Array(size+1).join('▀');\n    }\n\n    return ascii.substring(0, ascii.length-1);\n  };\n\n  _this.createASCII = function(cellSize, margin) {\n    cellSize = cellSize || 1;\n\n    if (cellSize < 2) {\n      return _createHalfASCII(margin);\n    }\n\n    cellSize -= 1;\n    margin = (typeof margin == 'undefined')? cellSize * 2 : margin;\n\n    const size = _this.getModuleCount() * cellSize + margin * 2;\n    const min = margin;\n    const max = size - margin;\n\n    let y, x, r, p;\n\n    const white = Array(cellSize+1).join('██');\n    const black = Array(cellSize+1).join('  ');\n\n    let ascii = '';\n    let line = '';\n    for (y = 0; y < size; y += 1) {\n      r = Math.floor( (y - min) / cellSize);\n      line = '';\n      for (x = 0; x < size; x += 1) {\n        p = 1;\n\n        if (min <= x && x < max && min <= y && y < max && _this.isDark(r, Math.floor((x - min) / cellSize))) {\n          p = 0;\n        }\n\n        // Output 2 characters per pixel, to create full square. 1 character per pixels gives only half width of square.\n        line += p ? white : black;\n      }\n\n      for (r = 0; r < cellSize; r += 1) {\n        ascii += line + '\\n';\n      }\n    }\n\n    return ascii.substring(0, ascii.length-1);\n  };\n\n  _this.renderTo2dContext = function(context, cellSize) {\n    cellSize = cellSize || 2;\n    const length = _this.getModuleCount();\n    for (let row = 0; row < length; row++) {\n      for (let col = 0; col < length; col++) {\n        context.fillStyle = _this.isDark(row, col) ? 'black' : 'white';\n        context.fillRect(col * cellSize, row * cellSize, cellSize, cellSize);\n      }\n    }\n  }\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// qrcode.stringToBytes\n//---------------------------------------------------------------------\n\nqrcode.stringToBytes = function(s) {\n  const bytes = [];\n  for (let i = 0; i < s.length; i += 1) {\n    const c = s.charCodeAt(i);\n    bytes.push(c & 0xff);\n  }\n  return bytes;\n};\n\n//---------------------------------------------------------------------\n// qrcode.createStringToBytes\n//---------------------------------------------------------------------\n\n/**\n * @param unicodeData base64 string of byte array.\n * [16bit Unicode],[16bit Bytes], ...\n * @param numChars\n */\nqrcode.createStringToBytes = function(unicodeData, numChars) {\n\n  // create conversion map.\n\n  const unicodeMap = function() {\n\n    const bin = base64DecodeInputStream(unicodeData);\n    const read = function() {\n      const b = bin.read();\n      if (b == -1) throw 'eof';\n      return b;\n    };\n\n    let count = 0;\n    const unicodeMap = {};\n    while (true) {\n      const b0 = bin.read();\n      if (b0 == -1) break;\n      const b1 = read();\n      const b2 = read();\n      const b3 = read();\n      const k = String.fromCharCode( (b0 << 8) | b1);\n      const v = (b2 << 8) | b3;\n      unicodeMap[k] = v;\n      count += 1;\n    }\n    if (count != numChars) {\n      throw count + ' != ' + numChars;\n    }\n\n    return unicodeMap;\n  }();\n\n  const unknownChar = '?'.charCodeAt(0);\n\n  return function(s) {\n    const bytes = [];\n    for (let i = 0; i < s.length; i += 1) {\n      const c = s.charCodeAt(i);\n      if (c < 128) {\n        bytes.push(c);\n      } else {\n        const b = unicodeMap[s.charAt(i)];\n        if (typeof b == 'number') {\n          if ( (b & 0xff) == b) {\n            // 1byte\n            bytes.push(b);\n          } else {\n            // 2bytes\n            bytes.push(b >>> 8);\n            bytes.push(b & 0xff);\n          }\n        } else {\n          bytes.push(unknownChar);\n        }\n      }\n    }\n    return bytes;\n  };\n};\n\n//---------------------------------------------------------------------\n// QRMode\n//---------------------------------------------------------------------\n\nconst QRMode = {\n  MODE_NUMBER :    1 << 0,\n  MODE_ALPHA_NUM : 1 << 1,\n  MODE_8BIT_BYTE : 1 << 2,\n  MODE_KANJI :     1 << 3\n};\n\n//---------------------------------------------------------------------\n// QRErrorCorrectionLevel\n//---------------------------------------------------------------------\n\nconst QRErrorCorrectionLevel = {\n  L : 1,\n  M : 0,\n  Q : 3,\n  H : 2\n};\n\n//---------------------------------------------------------------------\n// QRMaskPattern\n//---------------------------------------------------------------------\n\nconst QRMaskPattern = {\n  PATTERN000 : 0,\n  PATTERN001 : 1,\n  PATTERN010 : 2,\n  PATTERN011 : 3,\n  PATTERN100 : 4,\n  PATTERN101 : 5,\n  PATTERN110 : 6,\n  PATTERN111 : 7\n};\n\n//---------------------------------------------------------------------\n// QRUtil\n//---------------------------------------------------------------------\n\nconst QRUtil = function() {\n\n  const PATTERN_POSITION_TABLE = [\n    [],\n    [6, 18],\n    [6, 22],\n    [6, 26],\n    [6, 30],\n    [6, 34],\n    [6, 22, 38],\n    [6, 24, 42],\n    [6, 26, 46],\n    [6, 28, 50],\n    [6, 30, 54],\n    [6, 32, 58],\n    [6, 34, 62],\n    [6, 26, 46, 66],\n    [6, 26, 48, 70],\n    [6, 26, 50, 74],\n    [6, 30, 54, 78],\n    [6, 30, 56, 82],\n    [6, 30, 58, 86],\n    [6, 34, 62, 90],\n    [6, 28, 50, 72, 94],\n    [6, 26, 50, 74, 98],\n    [6, 30, 54, 78, 102],\n    [6, 28, 54, 80, 106],\n    [6, 32, 58, 84, 110],\n    [6, 30, 58, 86, 114],\n    [6, 34, 62, 90, 118],\n    [6, 26, 50, 74, 98, 122],\n    [6, 30, 54, 78, 102, 126],\n    [6, 26, 52, 78, 104, 130],\n    [6, 30, 56, 82, 108, 134],\n    [6, 34, 60, 86, 112, 138],\n    [6, 30, 58, 86, 114, 142],\n    [6, 34, 62, 90, 118, 146],\n    [6, 30, 54, 78, 102, 126, 150],\n    [6, 24, 50, 76, 102, 128, 154],\n    [6, 28, 54, 80, 106, 132, 158],\n    [6, 32, 58, 84, 110, 136, 162],\n    [6, 26, 54, 82, 110, 138, 166],\n    [6, 30, 58, 86, 114, 142, 170]\n  ];\n  const G15 = (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0);\n  const G18 = (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0);\n  const G15_MASK = (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1);\n\n  const _this = {};\n\n  const getBCHDigit = function(data) {\n    let digit = 0;\n    while (data != 0) {\n      digit += 1;\n      data >>>= 1;\n    }\n    return digit;\n  };\n\n  _this.getBCHTypeInfo = function(data) {\n    let d = data << 10;\n    while (getBCHDigit(d) - getBCHDigit(G15) >= 0) {\n      d ^= (G15 << (getBCHDigit(d) - getBCHDigit(G15) ) );\n    }\n    return ( (data << 10) | d) ^ G15_MASK;\n  };\n\n  _this.getBCHTypeNumber = function(data) {\n    let d = data << 12;\n    while (getBCHDigit(d) - getBCHDigit(G18) >= 0) {\n      d ^= (G18 << (getBCHDigit(d) - getBCHDigit(G18) ) );\n    }\n    return (data << 12) | d;\n  };\n\n  _this.getPatternPosition = function(typeNumber) {\n    return PATTERN_POSITION_TABLE[typeNumber - 1];\n  };\n\n  _this.getMaskFunction = function(maskPattern) {\n\n    switch (maskPattern) {\n\n    case QRMaskPattern.PATTERN000 :\n      return function(i, j) { return (i + j) % 2 == 0; };\n    case QRMaskPattern.PATTERN001 :\n      return function(i, j) { return i % 2 == 0; };\n    case QRMaskPattern.PATTERN010 :\n      return function(i, j) { return j % 3 == 0; };\n    case QRMaskPattern.PATTERN011 :\n      return function(i, j) { return (i + j) % 3 == 0; };\n    case QRMaskPattern.PATTERN100 :\n      return function(i, j) { return (Math.floor(i / 2) + Math.floor(j / 3) ) % 2 == 0; };\n    case QRMaskPattern.PATTERN101 :\n      return function(i, j) { return (i * j) % 2 + (i * j) % 3 == 0; };\n    case QRMaskPattern.PATTERN110 :\n      return function(i, j) { return ( (i * j) % 2 + (i * j) % 3) % 2 == 0; };\n    case QRMaskPattern.PATTERN111 :\n      return function(i, j) { return ( (i * j) % 3 + (i + j) % 2) % 2 == 0; };\n\n    default :\n      throw 'bad maskPattern:' + maskPattern;\n    }\n  };\n\n  _this.getErrorCorrectPolynomial = function(errorCorrectLength) {\n    let a = qrPolynomial([1], 0);\n    for (let i = 0; i < errorCorrectLength; i += 1) {\n      a = a.multiply(qrPolynomial([1, QRMath.gexp(i)], 0) );\n    }\n    return a;\n  };\n\n  _this.getLengthInBits = function(mode, type) {\n\n    if (1 <= type && type < 10) {\n\n      // 1 - 9\n\n      switch(mode) {\n      case QRMode.MODE_NUMBER    : return 10;\n      case QRMode.MODE_ALPHA_NUM : return 9;\n      case QRMode.MODE_8BIT_BYTE : return 8;\n      case QRMode.MODE_KANJI     : return 8;\n      default :\n        throw 'mode:' + mode;\n      }\n\n    } else if (type < 27) {\n\n      // 10 - 26\n\n      switch(mode) {\n      case QRMode.MODE_NUMBER    : return 12;\n      case QRMode.MODE_ALPHA_NUM : return 11;\n      case QRMode.MODE_8BIT_BYTE : return 16;\n      case QRMode.MODE_KANJI     : return 10;\n      default :\n        throw 'mode:' + mode;\n      }\n\n    } else if (type < 41) {\n\n      // 27 - 40\n\n      switch(mode) {\n      case QRMode.MODE_NUMBER    : return 14;\n      case QRMode.MODE_ALPHA_NUM : return 13;\n      case QRMode.MODE_8BIT_BYTE : return 16;\n      case QRMode.MODE_KANJI     : return 12;\n      default :\n        throw 'mode:' + mode;\n      }\n\n    } else {\n      throw 'type:' + type;\n    }\n  };\n\n  _this.getLostPoint = function(qrcode) {\n\n    const moduleCount = qrcode.getModuleCount();\n\n    let lostPoint = 0;\n\n    // LEVEL1\n\n    for (let row = 0; row < moduleCount; row += 1) {\n      for (let col = 0; col < moduleCount; col += 1) {\n\n        let sameCount = 0;\n        const dark = qrcode.isDark(row, col);\n\n        for (let r = -1; r <= 1; r += 1) {\n\n          if (row + r < 0 || moduleCount <= row + r) {\n            continue;\n          }\n\n          for (let c = -1; c <= 1; c += 1) {\n\n            if (col + c < 0 || moduleCount <= col + c) {\n              continue;\n            }\n\n            if (r == 0 && c == 0) {\n              continue;\n            }\n\n            if (dark == qrcode.isDark(row + r, col + c) ) {\n              sameCount += 1;\n            }\n          }\n        }\n\n        if (sameCount > 5) {\n          lostPoint += (3 + sameCount - 5);\n        }\n      }\n    };\n\n    // LEVEL2\n\n    for (let row = 0; row < moduleCount - 1; row += 1) {\n      for (let col = 0; col < moduleCount - 1; col += 1) {\n        let count = 0;\n        if (qrcode.isDark(row, col) ) count += 1;\n        if (qrcode.isDark(row + 1, col) ) count += 1;\n        if (qrcode.isDark(row, col + 1) ) count += 1;\n        if (qrcode.isDark(row + 1, col + 1) ) count += 1;\n        if (count == 0 || count == 4) {\n          lostPoint += 3;\n        }\n      }\n    }\n\n    // LEVEL3\n\n    for (let row = 0; row < moduleCount; row += 1) {\n      for (let col = 0; col < moduleCount - 6; col += 1) {\n        if (qrcode.isDark(row, col)\n            && !qrcode.isDark(row, col + 1)\n            &&  qrcode.isDark(row, col + 2)\n            &&  qrcode.isDark(row, col + 3)\n            &&  qrcode.isDark(row, col + 4)\n            && !qrcode.isDark(row, col + 5)\n            &&  qrcode.isDark(row, col + 6) ) {\n          lostPoint += 40;\n        }\n      }\n    }\n\n    for (let col = 0; col < moduleCount; col += 1) {\n      for (let row = 0; row < moduleCount - 6; row += 1) {\n        if (qrcode.isDark(row, col)\n            && !qrcode.isDark(row + 1, col)\n            &&  qrcode.isDark(row + 2, col)\n            &&  qrcode.isDark(row + 3, col)\n            &&  qrcode.isDark(row + 4, col)\n            && !qrcode.isDark(row + 5, col)\n            &&  qrcode.isDark(row + 6, col) ) {\n          lostPoint += 40;\n        }\n      }\n    }\n\n    // LEVEL4\n\n    let darkCount = 0;\n\n    for (let col = 0; col < moduleCount; col += 1) {\n      for (let row = 0; row < moduleCount; row += 1) {\n        if (qrcode.isDark(row, col) ) {\n          darkCount += 1;\n        }\n      }\n    }\n\n    const ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;\n    lostPoint += ratio * 10;\n\n    return lostPoint;\n  };\n\n  return _this;\n}();\n\n//---------------------------------------------------------------------\n// QRMath\n//---------------------------------------------------------------------\n\nconst QRMath = function() {\n\n  const EXP_TABLE = new Array(256);\n  const LOG_TABLE = new Array(256);\n\n  // initialize tables\n  for (let i = 0; i < 8; i += 1) {\n    EXP_TABLE[i] = 1 << i;\n  }\n  for (let i = 8; i < 256; i += 1) {\n    EXP_TABLE[i] = EXP_TABLE[i - 4]\n      ^ EXP_TABLE[i - 5]\n      ^ EXP_TABLE[i - 6]\n      ^ EXP_TABLE[i - 8];\n  }\n  for (let i = 0; i < 255; i += 1) {\n    LOG_TABLE[EXP_TABLE[i] ] = i;\n  }\n\n  const _this = {};\n\n  _this.glog = function(n) {\n\n    if (n < 1) {\n      throw 'glog(' + n + ')';\n    }\n\n    return LOG_TABLE[n];\n  };\n\n  _this.gexp = function(n) {\n\n    while (n < 0) {\n      n += 255;\n    }\n\n    while (n >= 256) {\n      n -= 255;\n    }\n\n    return EXP_TABLE[n];\n  };\n\n  return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrPolynomial\n//---------------------------------------------------------------------\n\nconst qrPolynomial = function(num, shift) {\n\n  if (typeof num.length == 'undefined') {\n    throw num.length + '/' + shift;\n  }\n\n  const _num = function() {\n    let offset = 0;\n    while (offset < num.length && num[offset] == 0) {\n      offset += 1;\n    }\n    const _num = new Array(num.length - offset + shift);\n    for (let i = 0; i < num.length - offset; i += 1) {\n      _num[i] = num[i + offset];\n    }\n    return _num;\n  }();\n\n  const _this = {};\n\n  _this.getAt = function(index) {\n    return _num[index];\n  };\n\n  _this.getLength = function() {\n    return _num.length;\n  };\n\n  _this.multiply = function(e) {\n\n    const num = new Array(_this.getLength() + e.getLength() - 1);\n\n    for (let i = 0; i < _this.getLength(); i += 1) {\n      for (let j = 0; j < e.getLength(); j += 1) {\n        num[i + j] ^= QRMath.gexp(QRMath.glog(_this.getAt(i) ) + QRMath.glog(e.getAt(j) ) );\n      }\n    }\n\n    return qrPolynomial(num, 0);\n  };\n\n  _this.mod = function(e) {\n\n    if (_this.getLength() - e.getLength() < 0) {\n      return _this;\n    }\n\n    const ratio = QRMath.glog(_this.getAt(0) ) - QRMath.glog(e.getAt(0) );\n\n    const num = new Array(_this.getLength() );\n    for (let i = 0; i < _this.getLength(); i += 1) {\n      num[i] = _this.getAt(i);\n    }\n\n    for (let i = 0; i < e.getLength(); i += 1) {\n      num[i] ^= QRMath.gexp(QRMath.glog(e.getAt(i) ) + ratio);\n    }\n\n    // recursive call\n    return qrPolynomial(num, 0).mod(e);\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// QRRSBlock\n//---------------------------------------------------------------------\n\nconst QRRSBlock = function() {\n\n  const RS_BLOCK_TABLE = [\n\n    // L\n    // M\n    // Q\n    // H\n\n    // 1\n    [1, 26, 19],\n    [1, 26, 16],\n    [1, 26, 13],\n    [1, 26, 9],\n\n    // 2\n    [1, 44, 34],\n    [1, 44, 28],\n    [1, 44, 22],\n    [1, 44, 16],\n\n    // 3\n    [1, 70, 55],\n    [1, 70, 44],\n    [2, 35, 17],\n    [2, 35, 13],\n\n    // 4\n    [1, 100, 80],\n    [2, 50, 32],\n    [2, 50, 24],\n    [4, 25, 9],\n\n    // 5\n    [1, 134, 108],\n    [2, 67, 43],\n    [2, 33, 15, 2, 34, 16],\n    [2, 33, 11, 2, 34, 12],\n\n    // 6\n    [2, 86, 68],\n    [4, 43, 27],\n    [4, 43, 19],\n    [4, 43, 15],\n\n    // 7\n    [2, 98, 78],\n    [4, 49, 31],\n    [2, 32, 14, 4, 33, 15],\n    [4, 39, 13, 1, 40, 14],\n\n    // 8\n    [2, 121, 97],\n    [2, 60, 38, 2, 61, 39],\n    [4, 40, 18, 2, 41, 19],\n    [4, 40, 14, 2, 41, 15],\n\n    // 9\n    [2, 146, 116],\n    [3, 58, 36, 2, 59, 37],\n    [4, 36, 16, 4, 37, 17],\n    [4, 36, 12, 4, 37, 13],\n\n    // 10\n    [2, 86, 68, 2, 87, 69],\n    [4, 69, 43, 1, 70, 44],\n    [6, 43, 19, 2, 44, 20],\n    [6, 43, 15, 2, 44, 16],\n\n    // 11\n    [4, 101, 81],\n    [1, 80, 50, 4, 81, 51],\n    [4, 50, 22, 4, 51, 23],\n    [3, 36, 12, 8, 37, 13],\n\n    // 12\n    [2, 116, 92, 2, 117, 93],\n    [6, 58, 36, 2, 59, 37],\n    [4, 46, 20, 6, 47, 21],\n    [7, 42, 14, 4, 43, 15],\n\n    // 13\n    [4, 133, 107],\n    [8, 59, 37, 1, 60, 38],\n    [8, 44, 20, 4, 45, 21],\n    [12, 33, 11, 4, 34, 12],\n\n    // 14\n    [3, 145, 115, 1, 146, 116],\n    [4, 64, 40, 5, 65, 41],\n    [11, 36, 16, 5, 37, 17],\n    [11, 36, 12, 5, 37, 13],\n\n    // 15\n    [5, 109, 87, 1, 110, 88],\n    [5, 65, 41, 5, 66, 42],\n    [5, 54, 24, 7, 55, 25],\n    [11, 36, 12, 7, 37, 13],\n\n    // 16\n    [5, 122, 98, 1, 123, 99],\n    [7, 73, 45, 3, 74, 46],\n    [15, 43, 19, 2, 44, 20],\n    [3, 45, 15, 13, 46, 16],\n\n    // 17\n    [1, 135, 107, 5, 136, 108],\n    [10, 74, 46, 1, 75, 47],\n    [1, 50, 22, 15, 51, 23],\n    [2, 42, 14, 17, 43, 15],\n\n    // 18\n    [5, 150, 120, 1, 151, 121],\n    [9, 69, 43, 4, 70, 44],\n    [17, 50, 22, 1, 51, 23],\n    [2, 42, 14, 19, 43, 15],\n\n    // 19\n    [3, 141, 113, 4, 142, 114],\n    [3, 70, 44, 11, 71, 45],\n    [17, 47, 21, 4, 48, 22],\n    [9, 39, 13, 16, 40, 14],\n\n    // 20\n    [3, 135, 107, 5, 136, 108],\n    [3, 67, 41, 13, 68, 42],\n    [15, 54, 24, 5, 55, 25],\n    [15, 43, 15, 10, 44, 16],\n\n    // 21\n    [4, 144, 116, 4, 145, 117],\n    [17, 68, 42],\n    [17, 50, 22, 6, 51, 23],\n    [19, 46, 16, 6, 47, 17],\n\n    // 22\n    [2, 139, 111, 7, 140, 112],\n    [17, 74, 46],\n    [7, 54, 24, 16, 55, 25],\n    [34, 37, 13],\n\n    // 23\n    [4, 151, 121, 5, 152, 122],\n    [4, 75, 47, 14, 76, 48],\n    [11, 54, 24, 14, 55, 25],\n    [16, 45, 15, 14, 46, 16],\n\n    // 24\n    [6, 147, 117, 4, 148, 118],\n    [6, 73, 45, 14, 74, 46],\n    [11, 54, 24, 16, 55, 25],\n    [30, 46, 16, 2, 47, 17],\n\n    // 25\n    [8, 132, 106, 4, 133, 107],\n    [8, 75, 47, 13, 76, 48],\n    [7, 54, 24, 22, 55, 25],\n    [22, 45, 15, 13, 46, 16],\n\n    // 26\n    [10, 142, 114, 2, 143, 115],\n    [19, 74, 46, 4, 75, 47],\n    [28, 50, 22, 6, 51, 23],\n    [33, 46, 16, 4, 47, 17],\n\n    // 27\n    [8, 152, 122, 4, 153, 123],\n    [22, 73, 45, 3, 74, 46],\n    [8, 53, 23, 26, 54, 24],\n    [12, 45, 15, 28, 46, 16],\n\n    // 28\n    [3, 147, 117, 10, 148, 118],\n    [3, 73, 45, 23, 74, 46],\n    [4, 54, 24, 31, 55, 25],\n    [11, 45, 15, 31, 46, 16],\n\n    // 29\n    [7, 146, 116, 7, 147, 117],\n    [21, 73, 45, 7, 74, 46],\n    [1, 53, 23, 37, 54, 24],\n    [19, 45, 15, 26, 46, 16],\n\n    // 30\n    [5, 145, 115, 10, 146, 116],\n    [19, 75, 47, 10, 76, 48],\n    [15, 54, 24, 25, 55, 25],\n    [23, 45, 15, 25, 46, 16],\n\n    // 31\n    [13, 145, 115, 3, 146, 116],\n    [2, 74, 46, 29, 75, 47],\n    [42, 54, 24, 1, 55, 25],\n    [23, 45, 15, 28, 46, 16],\n\n    // 32\n    [17, 145, 115],\n    [10, 74, 46, 23, 75, 47],\n    [10, 54, 24, 35, 55, 25],\n    [19, 45, 15, 35, 46, 16],\n\n    // 33\n    [17, 145, 115, 1, 146, 116],\n    [14, 74, 46, 21, 75, 47],\n    [29, 54, 24, 19, 55, 25],\n    [11, 45, 15, 46, 46, 16],\n\n    // 34\n    [13, 145, 115, 6, 146, 116],\n    [14, 74, 46, 23, 75, 47],\n    [44, 54, 24, 7, 55, 25],\n    [59, 46, 16, 1, 47, 17],\n\n    // 35\n    [12, 151, 121, 7, 152, 122],\n    [12, 75, 47, 26, 76, 48],\n    [39, 54, 24, 14, 55, 25],\n    [22, 45, 15, 41, 46, 16],\n\n    // 36\n    [6, 151, 121, 14, 152, 122],\n    [6, 75, 47, 34, 76, 48],\n    [46, 54, 24, 10, 55, 25],\n    [2, 45, 15, 64, 46, 16],\n\n    // 37\n    [17, 152, 122, 4, 153, 123],\n    [29, 74, 46, 14, 75, 47],\n    [49, 54, 24, 10, 55, 25],\n    [24, 45, 15, 46, 46, 16],\n\n    // 38\n    [4, 152, 122, 18, 153, 123],\n    [13, 74, 46, 32, 75, 47],\n    [48, 54, 24, 14, 55, 25],\n    [42, 45, 15, 32, 46, 16],\n\n    // 39\n    [20, 147, 117, 4, 148, 118],\n    [40, 75, 47, 7, 76, 48],\n    [43, 54, 24, 22, 55, 25],\n    [10, 45, 15, 67, 46, 16],\n\n    // 40\n    [19, 148, 118, 6, 149, 119],\n    [18, 75, 47, 31, 76, 48],\n    [34, 54, 24, 34, 55, 25],\n    [20, 45, 15, 61, 46, 16]\n  ];\n\n  const qrRSBlock = function(totalCount, dataCount) {\n    const _this = {};\n    _this.totalCount = totalCount;\n    _this.dataCount = dataCount;\n    return _this;\n  };\n\n  const _this = {};\n\n  const getRsBlockTable = function(typeNumber, errorCorrectionLevel) {\n\n    switch(errorCorrectionLevel) {\n    case QRErrorCorrectionLevel.L :\n      return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];\n    case QRErrorCorrectionLevel.M :\n      return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];\n    case QRErrorCorrectionLevel.Q :\n      return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];\n    case QRErrorCorrectionLevel.H :\n      return RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];\n    default :\n      return undefined;\n    }\n  };\n\n  _this.getRSBlocks = function(typeNumber, errorCorrectionLevel) {\n\n    const rsBlock = getRsBlockTable(typeNumber, errorCorrectionLevel);\n\n    if (typeof rsBlock == 'undefined') {\n      throw 'bad rs block @ typeNumber:' + typeNumber +\n          '/errorCorrectionLevel:' + errorCorrectionLevel;\n    }\n\n    const length = rsBlock.length / 3;\n\n    const list = [];\n\n    for (let i = 0; i < length; i += 1) {\n\n      const count = rsBlock[i * 3 + 0];\n      const totalCount = rsBlock[i * 3 + 1];\n      const dataCount = rsBlock[i * 3 + 2];\n\n      for (let j = 0; j < count; j += 1) {\n        list.push(qrRSBlock(totalCount, dataCount) );\n      }\n    }\n\n    return list;\n  };\n\n  return _this;\n}();\n\n//---------------------------------------------------------------------\n// qrBitBuffer\n//---------------------------------------------------------------------\n\nconst qrBitBuffer = function() {\n\n  const _buffer = [];\n  let _length = 0;\n\n  const _this = {};\n\n  _this.getBuffer = function() {\n    return _buffer;\n  };\n\n  _this.getAt = function(index) {\n    const bufIndex = Math.floor(index / 8);\n    return ( (_buffer[bufIndex] >>> (7 - index % 8) ) & 1) == 1;\n  };\n\n  _this.put = function(num, length) {\n    for (let i = 0; i < length; i += 1) {\n      _this.putBit( ( (num >>> (length - i - 1) ) & 1) == 1);\n    }\n  };\n\n  _this.getLengthInBits = function() {\n    return _length;\n  };\n\n  _this.putBit = function(bit) {\n\n    const bufIndex = Math.floor(_length / 8);\n    if (_buffer.length <= bufIndex) {\n      _buffer.push(0);\n    }\n\n    if (bit) {\n      _buffer[bufIndex] |= (0x80 >>> (_length % 8) );\n    }\n\n    _length += 1;\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// qrNumber\n//---------------------------------------------------------------------\n\nconst qrNumber = function(data) {\n\n  const _mode = QRMode.MODE_NUMBER;\n  const _data = data;\n\n  const _this = {};\n\n  _this.getMode = function() {\n    return _mode;\n  };\n\n  _this.getLength = function(buffer) {\n    return _data.length;\n  };\n\n  _this.write = function(buffer) {\n\n    const data = _data;\n\n    let i = 0;\n\n    while (i + 2 < data.length) {\n      buffer.put(strToNum(data.substring(i, i + 3) ), 10);\n      i += 3;\n    }\n\n    if (i < data.length) {\n      if (data.length - i == 1) {\n        buffer.put(strToNum(data.substring(i, i + 1) ), 4);\n      } else if (data.length - i == 2) {\n        buffer.put(strToNum(data.substring(i, i + 2) ), 7);\n      }\n    }\n  };\n\n  const strToNum = function(s) {\n    let num = 0;\n    for (let i = 0; i < s.length; i += 1) {\n      num = num * 10 + chatToNum(s.charAt(i) );\n    }\n    return num;\n  };\n\n  const chatToNum = function(c) {\n    if ('0' <= c && c <= '9') {\n      return c.charCodeAt(0) - '0'.charCodeAt(0);\n    }\n    throw 'illegal char :' + c;\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// qrAlphaNum\n//---------------------------------------------------------------------\n\nconst qrAlphaNum = function(data) {\n\n  const _mode = QRMode.MODE_ALPHA_NUM;\n  const _data = data;\n\n  const _this = {};\n\n  _this.getMode = function() {\n    return _mode;\n  };\n\n  _this.getLength = function(buffer) {\n    return _data.length;\n  };\n\n  _this.write = function(buffer) {\n\n    const s = _data;\n\n    let i = 0;\n\n    while (i + 1 < s.length) {\n      buffer.put(\n        getCode(s.charAt(i) ) * 45 +\n        getCode(s.charAt(i + 1) ), 11);\n      i += 2;\n    }\n\n    if (i < s.length) {\n      buffer.put(getCode(s.charAt(i) ), 6);\n    }\n  };\n\n  const getCode = function(c) {\n\n    if ('0' <= c && c <= '9') {\n      return c.charCodeAt(0) - '0'.charCodeAt(0);\n    } else if ('A' <= c && c <= 'Z') {\n      return c.charCodeAt(0) - 'A'.charCodeAt(0) + 10;\n    } else {\n      switch (c) {\n      case '\\u0020' : return 36;\n      case '$' : return 37;\n      case '%' : return 38;\n      case '*' : return 39;\n      case '+' : return 40;\n      case '-' : return 41;\n      case '.' : return 42;\n      case '/' : return 43;\n      case ':' : return 44;\n      default :\n        throw 'illegal char :' + c;\n      }\n    }\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// qr8BitByte\n//---------------------------------------------------------------------\n\nconst qr8BitByte = function(data) {\n\n  const _mode = QRMode.MODE_8BIT_BYTE;\n  const _data = data;\n  const _bytes = qrcode.stringToBytes(data);\n\n  const _this = {};\n\n  _this.getMode = function() {\n    return _mode;\n  };\n\n  _this.getLength = function(buffer) {\n    return _bytes.length;\n  };\n\n  _this.write = function(buffer) {\n    for (let i = 0; i < _bytes.length; i += 1) {\n      buffer.put(_bytes[i], 8);\n    }\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// qrKanji\n//---------------------------------------------------------------------\n\nconst qrKanji = function(data) {\n\n  const _mode = QRMode.MODE_KANJI;\n  const _data = data;\n\n  const stringToBytes = qrcode.stringToBytes;\n  !function(c, code) {\n    // self test for sjis support.\n    const test = stringToBytes(c);\n    if (test.length != 2 || ( (test[0] << 8) | test[1]) != code) {\n      throw 'sjis not supported.';\n    }\n  }('\\u53cb', 0x9746);\n\n  const _bytes = stringToBytes(data);\n\n  const _this = {};\n\n  _this.getMode = function() {\n    return _mode;\n  };\n\n  _this.getLength = function(buffer) {\n    return ~~(_bytes.length / 2);\n  };\n\n  _this.write = function(buffer) {\n\n    const data = _bytes;\n\n    let i = 0;\n\n    while (i + 1 < data.length) {\n\n      let c = ( (0xff & data[i]) << 8) | (0xff & data[i + 1]);\n\n      if (0x8140 <= c && c <= 0x9FFC) {\n        c -= 0x8140;\n      } else if (0xE040 <= c && c <= 0xEBBF) {\n        c -= 0xC140;\n      } else {\n        throw 'illegal char at ' + (i + 1) + '/' + c;\n      }\n\n      c = ( (c >>> 8) & 0xff) * 0xC0 + (c & 0xff);\n\n      buffer.put(c, 13);\n\n      i += 2;\n    }\n\n    if (i < data.length) {\n      throw 'illegal char at ' + (i + 1);\n    }\n  };\n\n  return _this;\n};\n\n//=====================================================================\n// GIF Support etc.\n//\n\n//---------------------------------------------------------------------\n// byteArrayOutputStream\n//---------------------------------------------------------------------\n\nconst byteArrayOutputStream = function() {\n\n  const _bytes = [];\n\n  const _this = {};\n\n  _this.writeByte = function(b) {\n    _bytes.push(b & 0xff);\n  };\n\n  _this.writeShort = function(i) {\n    _this.writeByte(i);\n    _this.writeByte(i >>> 8);\n  };\n\n  _this.writeBytes = function(b, off, len) {\n    off = off || 0;\n    len = len || b.length;\n    for (let i = 0; i < len; i += 1) {\n      _this.writeByte(b[i + off]);\n    }\n  };\n\n  _this.writeString = function(s) {\n    for (let i = 0; i < s.length; i += 1) {\n      _this.writeByte(s.charCodeAt(i) );\n    }\n  };\n\n  _this.toByteArray = function() {\n    return _bytes;\n  };\n\n  _this.toString = function() {\n    let s = '';\n    s += '[';\n    for (let i = 0; i < _bytes.length; i += 1) {\n      if (i > 0) {\n        s += ',';\n      }\n      s += _bytes[i];\n    }\n    s += ']';\n    return s;\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// base64EncodeOutputStream\n//---------------------------------------------------------------------\n\nconst base64EncodeOutputStream = function() {\n\n  let _buffer = 0;\n  let _buflen = 0;\n  let _length = 0;\n  let _base64 = '';\n\n  const _this = {};\n\n  const writeEncoded = function(b) {\n    _base64 += String.fromCharCode(encode(b & 0x3f) );\n  };\n\n  const encode = function(n) {\n    if (n < 0) {\n      throw 'n:' + n;\n    } else if (n < 26) {\n      return 0x41 + n;\n    } else if (n < 52) {\n      return 0x61 + (n - 26);\n    } else if (n < 62) {\n      return 0x30 + (n - 52);\n    } else if (n == 62) {\n      return 0x2b;\n    } else if (n == 63) {\n      return 0x2f;\n    } else {\n      throw 'n:' + n;\n    }\n  };\n\n  _this.writeByte = function(n) {\n\n    _buffer = (_buffer << 8) | (n & 0xff);\n    _buflen += 8;\n    _length += 1;\n\n    while (_buflen >= 6) {\n      writeEncoded(_buffer >>> (_buflen - 6) );\n      _buflen -= 6;\n    }\n  };\n\n  _this.flush = function() {\n\n    if (_buflen > 0) {\n      writeEncoded(_buffer << (6 - _buflen) );\n      _buffer = 0;\n      _buflen = 0;\n    }\n\n    if (_length % 3 != 0) {\n      // padding\n      const padlen = 3 - _length % 3;\n      for (let i = 0; i < padlen; i += 1) {\n        _base64 += '=';\n      }\n    }\n  };\n\n  _this.toString = function() {\n    return _base64;\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// base64DecodeInputStream\n//---------------------------------------------------------------------\n\nconst base64DecodeInputStream = function(str) {\n\n  const _str = str;\n  let _pos = 0;\n  let _buffer = 0;\n  let _buflen = 0;\n\n  const _this = {};\n\n  _this.read = function() {\n\n    while (_buflen < 8) {\n\n      if (_pos >= _str.length) {\n        if (_buflen == 0) {\n          return -1;\n        }\n        throw 'unexpected end of file./' + _buflen;\n      }\n\n      const c = _str.charAt(_pos);\n      _pos += 1;\n\n      if (c == '=') {\n        _buflen = 0;\n        return -1;\n      } else if (c.match(/^\\s$/) ) {\n        // ignore if whitespace.\n        continue;\n      }\n\n      _buffer = (_buffer << 6) | decode(c.charCodeAt(0) );\n      _buflen += 6;\n    }\n\n    const n = (_buffer >>> (_buflen - 8) ) & 0xff;\n    _buflen -= 8;\n    return n;\n  };\n\n  const decode = function(c) {\n    if (0x41 <= c && c <= 0x5a) {\n      return c - 0x41;\n    } else if (0x61 <= c && c <= 0x7a) {\n      return c - 0x61 + 26;\n    } else if (0x30 <= c && c <= 0x39) {\n      return c - 0x30 + 52;\n    } else if (c == 0x2b) {\n      return 62;\n    } else if (c == 0x2f) {\n      return 63;\n    } else {\n      throw 'c:' + c;\n    }\n  };\n\n  return _this;\n};\n\n//---------------------------------------------------------------------\n// gifImage (B/W)\n//---------------------------------------------------------------------\n\nconst gifImage = function(width, height) {\n\n  const _width = width;\n  const _height = height;\n  const _data = new Array(width * height);\n\n  const _this = {};\n\n  _this.setPixel = function(x, y, pixel) {\n    _data[y * _width + x] = pixel;\n  };\n\n  _this.write = function(out) {\n\n    //---------------------------------\n    // GIF Signature\n\n    out.writeString('GIF87a');\n\n    //---------------------------------\n    // Screen Descriptor\n\n    out.writeShort(_width);\n    out.writeShort(_height);\n\n    out.writeByte(0x80); // 2bit\n    out.writeByte(0);\n    out.writeByte(0);\n\n    //---------------------------------\n    // Global Color Map\n\n    // black\n    out.writeByte(0x00);\n    out.writeByte(0x00);\n    out.writeByte(0x00);\n\n    // white\n    out.writeByte(0xff);\n    out.writeByte(0xff);\n    out.writeByte(0xff);\n\n    //---------------------------------\n    // Image Descriptor\n\n    out.writeString(',');\n    out.writeShort(0);\n    out.writeShort(0);\n    out.writeShort(_width);\n    out.writeShort(_height);\n    out.writeByte(0);\n\n    //---------------------------------\n    // Local Color Map\n\n    //---------------------------------\n    // Raster Data\n\n    const lzwMinCodeSize = 2;\n    const raster = getLZWRaster(lzwMinCodeSize);\n\n    out.writeByte(lzwMinCodeSize);\n\n    let offset = 0;\n\n    while (raster.length - offset > 255) {\n      out.writeByte(255);\n      out.writeBytes(raster, offset, 255);\n      offset += 255;\n    }\n\n    out.writeByte(raster.length - offset);\n    out.writeBytes(raster, offset, raster.length - offset);\n    out.writeByte(0x00);\n\n    //---------------------------------\n    // GIF Terminator\n    out.writeString(';');\n  };\n\n  const bitOutputStream = function(out) {\n\n    const _out = out;\n    let _bitLength = 0;\n    let _bitBuffer = 0;\n\n    const _this = {};\n\n    _this.write = function(data, length) {\n\n      if ( (data >>> length) != 0) {\n        throw 'length over';\n      }\n\n      while (_bitLength + length >= 8) {\n        _out.writeByte(0xff & ( (data << _bitLength) | _bitBuffer) );\n        length -= (8 - _bitLength);\n        data >>>= (8 - _bitLength);\n        _bitBuffer = 0;\n        _bitLength = 0;\n      }\n\n      _bitBuffer = (data << _bitLength) | _bitBuffer;\n      _bitLength = _bitLength + length;\n    };\n\n    _this.flush = function() {\n      if (_bitLength > 0) {\n        _out.writeByte(_bitBuffer);\n      }\n    };\n\n    return _this;\n  };\n\n  const getLZWRaster = function(lzwMinCodeSize) {\n\n    const clearCode = 1 << lzwMinCodeSize;\n    const endCode = (1 << lzwMinCodeSize) + 1;\n    let bitLength = lzwMinCodeSize + 1;\n\n    // Setup LZWTable\n    const table = lzwTable();\n\n    for (let i = 0; i < clearCode; i += 1) {\n      table.add(String.fromCharCode(i) );\n    }\n    table.add(String.fromCharCode(clearCode) );\n    table.add(String.fromCharCode(endCode) );\n\n    const byteOut = byteArrayOutputStream();\n    const bitOut = bitOutputStream(byteOut);\n\n    // clear code\n    bitOut.write(clearCode, bitLength);\n\n    let dataIndex = 0;\n\n    let s = String.fromCharCode(_data[dataIndex]);\n    dataIndex += 1;\n\n    while (dataIndex < _data.length) {\n\n      const c = String.fromCharCode(_data[dataIndex]);\n      dataIndex += 1;\n\n      if (table.contains(s + c) ) {\n\n        s = s + c;\n\n      } else {\n\n        bitOut.write(table.indexOf(s), bitLength);\n\n        if (table.size() < 0xfff) {\n\n          if (table.size() == (1 << bitLength) ) {\n            bitLength += 1;\n          }\n\n          table.add(s + c);\n        }\n\n        s = c;\n      }\n    }\n\n    bitOut.write(table.indexOf(s), bitLength);\n\n    // end code\n    bitOut.write(endCode, bitLength);\n\n    bitOut.flush();\n\n    return byteOut.toByteArray();\n  };\n\n  const lzwTable = function() {\n\n    const _map = {};\n    let _size = 0;\n\n    const _this = {};\n\n    _this.add = function(key) {\n      if (_this.contains(key) ) {\n        throw 'dup key:' + key;\n      }\n      _map[key] = _size;\n      _size += 1;\n    };\n\n    _this.size = function() {\n      return _size;\n    };\n\n    _this.indexOf = function(key) {\n      return _map[key];\n    };\n\n    _this.contains = function(key) {\n      return typeof _map[key] != 'undefined';\n    };\n\n    return _this;\n  };\n\n  return _this;\n};\n\nconst createDataURL = function(width, height, getPixel) {\n  const gif = gifImage(width, height);\n  for (let y = 0; y < height; y += 1) {\n    for (let x = 0; x < width; x += 1) {\n      gif.setPixel(x, y, getPixel(x, y) );\n    }\n  }\n\n  const b = byteArrayOutputStream();\n  gif.write(b);\n\n  const base64 = base64EncodeOutputStream();\n  const bytes = b.toByteArray();\n  for (let i = 0; i < bytes.length; i += 1) {\n    base64.writeByte(bytes[i]);\n  }\n  base64.flush();\n\n  return 'data:image/gif;base64,' + base64;\n};\n\nexport default qrcode;\n\nexport const stringToBytes = qrcode.stringToBytes;\n","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"screen-qr\" }\nconst _hoisted_2 = [\"src\", \"alt\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: \"Scherm openen\",\n    description: `Scan met het ontvangstapparaat om ‘${$props.screenName}’ te openen.`,\n    width: 480,\n    onClose: _cache[0] || (_cache[0] = $event => ($setup.emit('close')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", _hoisted_1, [\n        ($props.open)\n          ? (_openBlock(), _createElementBlock(\"img\", {\n              key: 0,\n              src: $setup.image,\n              alt: `QR-code om ${$props.screenName} te openen`,\n              width: \"320\",\n              height: \"320\",\n              class: \"screen-qr__image\",\n              \"data-testid\": \"screen-qr-image\"\n            }, null, 8 /* PROPS */, _hoisted_2))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\", \"description\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenQrDialog.vue\";script.__scopeId = \"data-v-f789bb4d\";export default script;","import type { ScreenLanguage, ScreenOrientation } from \"../../../../../../js/screens\";\n\nexport const ORIENTATION_LABELS: Record<ScreenOrientation, string> = { portrait: \"Staand\", landscape: \"Liggend\" };\nexport const LANGUAGE_LABELS: Record<ScreenLanguage, string> = { nl: \"Nederlands\", en: \"Engels\" };\n","export interface ScreenLink {\n  /** Tenant tag (`velkom:app_<org>`); a shared kiosk site needs it, a customer's own kiosk site implies it. */\n  org?: string;\n  id: number;\n  token: string;\n}\n\nexport function screenLinkHref({ kioskUrl, org, id, token }: ScreenLink & { kioskUrl: string }): string {\n  return `${kioskUrl.split(\"#\")[0]}#/?${org ? `org=${org}&` : \"\"}screen=${id}&token=${encodeURIComponent(token)}`;\n}\n\n/** A malformed explicit link must never fall back to another screen stored in the browser. */\nexport function readScreenLink(hash: string): ScreenLink | null {\n  const query = new URLSearchParams(hash.slice(hash.indexOf(\"?\") + 1));\n  if (!query.has(\"screen\") && !query.has(\"token\") && !query.has(\"org\"))\n    return null;\n  const idText = query.get(\"screen\") ?? \"\";\n  const id = Number(idText);\n  const token = query.get(\"token\") ?? \"\";\n  const org = query.get(\"org\");\n  if (query.getAll(\"screen\").length !== 1 || query.getAll(\"token\").length !== 1 || query.getAll(\"org\").length > 1\n      || !/^[1-9]\\d*$/.test(idText) || !Number.isSafeInteger(id) || !/^[A-Za-z0-9_-]{43}$/.test(token)\n      || (org !== null && !/^[a-z0-9_-]+$/.test(org)))\n    throw new Error(\"Invalid screen link\");\n  return org === null ? { id, token } : { org, id, token };\n}\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, createVNode as _createVNode, vModelText as _vModelText, withDirectives as _withDirectives, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, withCtx as _withCtx, renderList as _renderList, Fragment as _Fragment, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"screen\",\n  \"data-testid\": \"customer-screen-detail\"\n}\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = { class: \"screen__layout\" }\nconst _hoisted_4 = { class: \"screen__settings\" }\nconst _hoisted_5 = {\n  class: \"screen__card\",\n  \"aria-labelledby\": \"screen-general\"\n}\nconst _hoisted_6 = { class: \"screen__grid\" }\nconst _hoisted_7 = { class: \"screen__field\" }\nconst _hoisted_8 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_9 = [\"id\"]\nconst _hoisted_10 = {\n  key: 0,\n  class: \"screen__card\",\n  \"aria-labelledby\": \"screen-url\"\n}\nconst _hoisted_11 = { class: \"screen__card-head\" }\nconst _hoisted_12 = { class: \"screen__link-field\" }\nconst _hoisted_13 = [\"title\"]\nconst _hoisted_14 = [\"href\"]\nconst _hoisted_15 = {\n  key: 0,\n  class: \"screen__error\",\n  role: \"alert\"\n}\nconst _hoisted_16 = {\n  key: 1,\n  class: \"screen__card\",\n  \"aria-labelledby\": \"screen-demo\",\n  \"data-testid\": \"screen-demo\"\n}\nconst _hoisted_17 = { class: \"screen__card-head\" }\nconst _hoisted_18 = [\"disabled\"]\nconst _hoisted_19 = {\n  key: 0,\n  class: \"screen__link-field\"\n}\nconst _hoisted_20 = [\"title\"]\nconst _hoisted_21 = [\"href\"]\nconst _hoisted_22 = {\n  key: 1,\n  class: \"screen__actions\"\n}\nconst _hoisted_23 = {\n  key: 2,\n  class: \"screen__error\",\n  role: \"alert\"\n}\nconst _hoisted_24 = {\n  class: \"screen__card\",\n  \"aria-labelledby\": \"screen-display\"\n}\nconst _hoisted_25 = { class: \"screen__field\" }\nconst _hoisted_26 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_27 = [\"id\"]\nconst _hoisted_28 = { class: \"screen__segments\" }\nconst _hoisted_29 = {\n  role: \"radiogroup\",\n  \"aria-labelledby\": \"screen-language\",\n  class: \"screen__segment-group\"\n}\nconst _hoisted_30 = { class: \"screen__segment\" }\nconst _hoisted_31 = [\"aria-checked\", \"disabled\", \"onClick\"]\nconst _hoisted_32 = {\n  key: 0,\n  class: \"screen__error\",\n  role: \"alert\"\n}\nconst _hoisted_33 = { class: \"screen__save-row\" }\nconst _hoisted_34 = [\"disabled\"]\nconst _hoisted_35 = {\n  class: \"screen__card screen__card--row\",\n  \"aria-labelledby\": \"screen-archive\"\n}\nconst _hoisted_36 = { class: \"screen__row-text\" }\nconst _hoisted_37 = {\n  key: 0,\n  class: \"screen__muted\"\n}\nconst _hoisted_38 = [\"disabled\"]\nconst _hoisted_39 = {\n  class: \"screen__preview\",\n  \"aria-label\": \"Voorbeeld welkomstscherm\"\n}\nconst _hoisted_40 = {\n  role: \"radiogroup\",\n  \"aria-label\": \"Stand van het voorbeeld\",\n  class: \"screen__segment-group screen__preview-options\"\n}\nconst _hoisted_41 = { class: \"screen__segment\" }\nconst _hoisted_42 = [\"aria-checked\", \"onClick\"]\nconst _hoisted_43 = { class: \"screen__device\" }\nconst _hoisted_44 = {\n  key: 0,\n  class: \"screen__muted screen__note\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    _createElementVNode(\"a\", {\n      class: \"screen__back\",\n      href: $setup.customerHref('schermen')\n    }, _cache[11] || (_cache[11] = [\n      _createElementVNode(\"svg\", {\n        width: \"18\",\n        height: \"18\",\n        viewBox: \"0 0 20 20\",\n        fill: \"none\",\n        stroke: \"currentColor\",\n        \"stroke-width\": \"1.8\",\n        \"stroke-linecap\": \"round\",\n        \"stroke-linejoin\": \"round\",\n        \"aria-hidden\": \"true\"\n      }, [\n        _createElementVNode(\"path\", { d: \"M16 10H5M9 5l-5 5 5 5\" })\n      ], -1 /* CACHED */),\n      _createTextVNode(\" Alle schermen \", -1 /* CACHED */)\n    ]), 8 /* PROPS */, _hoisted_2),\n    _createVNode($setup[\"PageHeader\"], {\n      title: $props.screen.name,\n      context: $props.customerName,\n      description: \"Instellingen gelden alleen voor dit scherm.\"\n    }, null, 8 /* PROPS */, [\"title\", \"context\"]),\n    _createElementVNode(\"div\", _hoisted_3, [\n      _createElementVNode(\"div\", _hoisted_4, [\n        _createElementVNode(\"section\", _hoisted_5, [\n          _cache[13] || (_cache[13] = _createElementVNode(\"h2\", {\n            id: \"screen-general\",\n            class: \"screen__card-title\"\n          }, \"Algemeen\", -1 /* CACHED */)),\n          _createElementVNode(\"div\", _hoisted_6, [\n            _createElementVNode(\"label\", _hoisted_7, [\n              _cache[12] || (_cache[12] = _createElementVNode(\"span\", null, [\n                _createTextVNode(\"Naam \"),\n                _createElementVNode(\"span\", {\n                  class: \"screen__required\",\n                  \"aria-hidden\": \"true\"\n                }, \"*\")\n              ], -1 /* CACHED */)),\n              _withDirectives(_createElementVNode(\"input\", {\n                id: $setup.form.fieldId('name'),\n                \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.name) = $event)),\n                class: \"screen__control\",\n                type: \"text\",\n                disabled: $setup.pending,\n                \"aria-required\": \"true\",\n                \"aria-invalid\": Boolean($setup.form.errors.name) || undefined,\n                \"aria-describedby\": $setup.describedBy('name')\n              }, null, 8 /* PROPS */, _hoisted_8), [\n                [_vModelText, $setup.model.name]\n              ]),\n              ($setup.form.errors.name)\n                ? (_openBlock(), _createElementBlock(\"span\", {\n                    key: 0,\n                    id: `${$setup.form.fieldId('name')}-error`,\n                    class: \"screen__invalid\"\n                  }, _toDisplayString($setup.form.errors.name), 9 /* TEXT, PROPS */, _hoisted_9))\n                : _createCommentVNode(\"v-if\", true)\n            ])\n          ])\n        ]),\n        ($setup.screenUrl)\n          ? (_openBlock(), _createElementBlock(\"section\", _hoisted_10, [\n              _createElementVNode(\"div\", _hoisted_11, [\n                _cache[14] || (_cache[14] = _createElementVNode(\"h2\", {\n                  id: \"screen-url\",\n                  class: \"screen__card-title\"\n                }, \"Scherm-URL\", -1 /* CACHED */)),\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"screen__text-action\",\n                  onClick: _cache[1] || (_cache[1] = $event => ($setup.emit('resetUrl')))\n                }, \"Vernieuwen\")\n              ]),\n              _cache[15] || (_cache[15] = _createElementVNode(\"p\", { class: \"screen__muted\" }, \"Open deze eigen URL op het ontvangstapparaat. Bewaar de link privé: iedereen met de link kan dit scherm gebruiken.\", -1 /* CACHED */)),\n              _createElementVNode(\"div\", _hoisted_12, [\n                _createVNode($setup[\"Icon\"], {\n                  name: \"link\",\n                  size: 18,\n                  class: \"screen__link-icon\"\n                }),\n                _createElementVNode(\"span\", {\n                  class: \"screen__link-text\",\n                  title: $setup.screenUrl\n                }, _toDisplayString($setup.screenUrl), 9 /* TEXT, PROPS */, _hoisted_13),\n                _createVNode($setup[\"Button\"], {\n                  size: \"sm\",\n                  variant: \"ghost\",\n                  icon: \"copy\",\n                  \"icon-only\": \"\",\n                  \"aria-label\": \"Scherm-URL kopiëren\",\n                  onClick: _cache[2] || (_cache[2] = $event => ($setup.copyUrl($setup.screenUrl, 'Scherm-URL gekopieerd')))\n                }),\n                _createVNode($setup[\"Button\"], {\n                  size: \"sm\",\n                  variant: \"ghost\",\n                  icon: \"qr-code\",\n                  \"icon-only\": \"\",\n                  \"aria-label\": \"QR-code van de scherm-URL\",\n                  onClick: _cache[3] || (_cache[3] = $event => ($setup.qrUrl = $setup.screenUrl))\n                }),\n                _createElementVNode(\"a\", {\n                  class: \"screen__link-open\",\n                  href: $setup.screenUrl,\n                  target: \"_blank\",\n                  rel: \"noopener noreferrer\",\n                  \"aria-label\": \"Scherm openen\",\n                  \"data-testid\": \"screen-open\"\n                }, [\n                  _createVNode($setup[\"Icon\"], { name: \"launch\" })\n                ], 8 /* PROPS */, _hoisted_14)\n              ]),\n              ($setup.copyError)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_15, \"Kopiëren is niet gelukt. Open het scherm en kopieer de URL uit de adresbalk.\"))\n                : _createCommentVNode(\"v-if\", true)\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        ($setup.screenUrl)\n          ? (_openBlock(), _createElementBlock(\"section\", _hoisted_16, [\n              _createElementVNode(\"div\", _hoisted_17, [\n                _cache[16] || (_cache[16] = _createElementVNode(\"h2\", {\n                  id: \"screen-demo\",\n                  class: \"screen__card-title\"\n                }, \"Demolink\", -1 /* CACHED */)),\n                ($setup.demoUrl)\n                  ? (_openBlock(), _createElementBlock(\"button\", {\n                      key: 0,\n                      type: \"button\",\n                      class: \"screen__text-danger\",\n                      disabled: $setup.demoPending,\n                      onClick: _cache[4] || (_cache[4] = $event => ($setup.revokeOpen = true))\n                    }, \"Intrekken\", 8 /* PROPS */, _hoisted_18))\n                  : _createCommentVNode(\"v-if\", true)\n              ]),\n              _cache[18] || (_cache[18] = _createElementVNode(\"p\", { class: \"screen__muted\" }, \"Laat dit scherm zien met echte contactpersonen en verzonnen afspraken. Er wordt niemand gebeld en niets opgeslagen.\", -1 /* CACHED */)),\n              ($setup.demoUrl)\n                ? (_openBlock(), _createElementBlock(\"div\", _hoisted_19, [\n                    _createVNode($setup[\"Icon\"], {\n                      name: \"link\",\n                      size: 18,\n                      class: \"screen__link-icon\"\n                    }),\n                    _createElementVNode(\"span\", {\n                      class: \"screen__link-text\",\n                      title: $setup.demoUrl\n                    }, _toDisplayString($setup.demoUrl), 9 /* TEXT, PROPS */, _hoisted_20),\n                    _createVNode($setup[\"Button\"], {\n                      size: \"sm\",\n                      variant: \"ghost\",\n                      icon: \"copy\",\n                      \"icon-only\": \"\",\n                      \"aria-label\": \"Demolink kopiëren\",\n                      onClick: _cache[5] || (_cache[5] = $event => ($setup.copyUrl($setup.demoUrl, 'Demolink gekopieerd')))\n                    }),\n                    _createVNode($setup[\"Button\"], {\n                      size: \"sm\",\n                      variant: \"ghost\",\n                      icon: \"qr-code\",\n                      \"icon-only\": \"\",\n                      \"aria-label\": \"QR-code van de demolink\",\n                      onClick: _cache[6] || (_cache[6] = $event => ($setup.qrUrl = $setup.demoUrl))\n                    }),\n                    _createElementVNode(\"a\", {\n                      class: \"screen__link-open\",\n                      href: $setup.demoUrl,\n                      target: \"_blank\",\n                      rel: \"noopener noreferrer\",\n                      \"aria-label\": \"Demo openen\"\n                    }, [\n                      _createVNode($setup[\"Icon\"], { name: \"launch\" })\n                    ], 8 /* PROPS */, _hoisted_21)\n                  ]))\n                : (_openBlock(), _createElementBlock(\"div\", _hoisted_22, [\n                    _createVNode($setup[\"Button\"], {\n                      size: \"sm\",\n                      icon: \"link\",\n                      disabled: $setup.demoPending,\n                      onClick: $setup.createDemo\n                    }, {\n                      default: _withCtx(() => _cache[17] || (_cache[17] = [\n                        _createTextVNode(\"Demolink maken\", -1 /* CACHED */)\n                      ])),\n                      _: 1 /* STABLE */,\n                      __: [17]\n                    }, 8 /* PROPS */, [\"disabled\"])\n                  ])),\n              ($setup.demoError)\n                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_23, \"Dat is niet gelukt. Controleer je verbinding en probeer het opnieuw.\"))\n                : _createCommentVNode(\"v-if\", true)\n            ]))\n          : _createCommentVNode(\"v-if\", true),\n        _createElementVNode(\"section\", _hoisted_24, [\n          _cache[21] || (_cache[21] = _createElementVNode(\"h2\", {\n            id: \"screen-display\",\n            class: \"screen__card-title\"\n          }, \"Weergave\", -1 /* CACHED */)),\n          _createElementVNode(\"label\", _hoisted_25, [\n            _cache[19] || (_cache[19] = _createTextVNode(\" Welkomsttekst \", -1 /* CACHED */)),\n            _withDirectives(_createElementVNode(\"input\", {\n              id: $setup.form.fieldId('welcomeText'),\n              \"onUpdate:modelValue\": _cache[7] || (_cache[7] = $event => (($setup.model.welcomeText) = $event)),\n              class: \"screen__control\",\n              type: \"text\",\n              disabled: $setup.pending,\n              \"aria-invalid\": Boolean($setup.form.errors.welcomeText) || undefined,\n              \"aria-describedby\": $setup.describedBy('welcomeText')\n            }, null, 8 /* PROPS */, _hoisted_26), [\n              [_vModelText, $setup.model.welcomeText]\n            ]),\n            ($setup.form.errors.welcomeText)\n              ? (_openBlock(), _createElementBlock(\"span\", {\n                  key: 0,\n                  id: `${$setup.form.fieldId('welcomeText')}-error`,\n                  class: \"screen__invalid\"\n                }, _toDisplayString($setup.form.errors.welcomeText), 9 /* TEXT, PROPS */, _hoisted_27))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"div\", _hoisted_28, [\n            _createElementVNode(\"div\", _hoisted_29, [\n              _cache[20] || (_cache[20] = _createElementVNode(\"span\", {\n                id: \"screen-language\",\n                class: \"screen__label\"\n              }, \"Taal\", -1 /* CACHED */)),\n              _createElementVNode(\"span\", _hoisted_30, [\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.LANGUAGE_LABELS, (label, value) => {\n                  return (_openBlock(), _createElementBlock(\"button\", {\n                    key: value,\n                    type: \"button\",\n                    role: \"radio\",\n                    \"aria-checked\": $setup.model.language === value,\n                    disabled: $setup.pending,\n                    onClick: $event => ($setup.model.language = value)\n                  }, _toDisplayString(label), 9 /* TEXT, PROPS */, _hoisted_31))\n                }), 128 /* KEYED_FRAGMENT */))\n              ])\n            ])\n          ]),\n          ($setup.error)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_32, _toDisplayString($setup.error), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"div\", _hoisted_33, [\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"vk-button vk-button--primary vk-button--compact\",\n              disabled: $setup.pending || !$setup.guard.isDirty.value,\n              \"data-testid\": \"screen-save\",\n              onClick: $setup.save\n            }, _toDisplayString($setup.pending ? \"Opslaan...\" : \"Opslaan\"), 9 /* TEXT, PROPS */, _hoisted_34)\n          ])\n        ]),\n        _createElementVNode(\"section\", _hoisted_35, [\n          _createElementVNode(\"div\", _hoisted_36, [\n            _cache[22] || (_cache[22] = _createElementVNode(\"h2\", {\n              id: \"screen-archive\",\n              class: \"screen__card-title\"\n            }, \"Archiveren\", -1 /* CACHED */)),\n            ($props.showPackageHint)\n              ? (_openBlock(), _createElementBlock(\"p\", _hoisted_37, \"Een gearchiveerd scherm telt niet mee voor je pakket.\"))\n              : _createCommentVNode(\"v-if\", true)\n          ]),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"screen__archive\",\n            disabled: $setup.pending,\n            onClick: _cache[8] || (_cache[8] = $event => ($setup.emit('archive')))\n          }, \"Scherm archiveren\", 8 /* PROPS */, _hoisted_38)\n        ])\n      ]),\n      _createElementVNode(\"aside\", _hoisted_39, [\n        _createElementVNode(\"div\", _hoisted_40, [\n          _createElementVNode(\"span\", _hoisted_41, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.ORIENTATION_LABELS, (label, value) => {\n              return (_openBlock(), _createElementBlock(\"button\", {\n                key: value,\n                type: \"button\",\n                role: \"radio\",\n                \"aria-checked\": $setup.previewOrientation === value,\n                onClick: $event => ($setup.previewOrientation = value)\n              }, _toDisplayString(label), 9 /* TEXT, PROPS */, _hoisted_42))\n            }), 128 /* KEYED_FRAGMENT */))\n          ])\n        ]),\n        _createElementVNode(\"div\", _hoisted_43, [\n          _createVNode($setup[\"ScreenPreview\"], {\n            class: \"screen__display\",\n            language: $setup.model.language,\n            orientation: $setup.previewOrientation,\n            \"welcome-text\": $setup.model.welcomeText.trim(),\n            \"kiosk-theme\": $props.kioskTheme,\n            branding: $props.branding\n          }, null, 8 /* PROPS */, [\"language\", \"orientation\", \"welcome-text\", \"kiosk-theme\", \"branding\"])\n        ]),\n        ($setup.guard.isDirty.value)\n          ? (_openBlock(), _createElementBlock(\"span\", _hoisted_44, \"Concept. Alleen opslaan wijzigt het scherm.\"))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.revokeOpen,\n      title: \"Demolink intrekken\",\n      \"item-name\": $props.screen.name,\n      message: \"Wil je de demolink van dit scherm intrekken?\",\n      consequence: \"De demolink en de QR-code ervan werken daarna niet meer. Het echte scherm blijft gewoon werken.\",\n      \"confirm-label\": \"Intrekken\",\n      \"pending-label\": \"Intrekken...\",\n      pending: $setup.demoPending,\n      onCancel: _cache[9] || (_cache[9] = $event => ($setup.revokeOpen = false)),\n      onConfirm: $setup.revokeDemo\n    }, null, 8 /* PROPS */, [\"open\", \"item-name\", \"pending\"]),\n    ($setup.qrUrl)\n      ? (_openBlock(), _createBlock($setup[\"ScreenQrDialog\"], {\n          key: 0,\n          open: Boolean($setup.qrUrl),\n          url: $setup.qrUrl,\n          \"screen-name\": $setup.qrUrl === $setup.demoUrl ? `${$props.screen.name} (demo)` : $props.screen.name,\n          onClose: _cache[10] || (_cache[10] = $event => ($setup.qrUrl = null))\n        }, null, 8 /* PROPS */, [\"open\", \"url\", \"screen-name\"]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDetail.vue\";script.__scopeId = \"data-v-e9ee915f\";export default script;","<script setup lang=\"ts\">\nimport { computed, nextTick, reactive, ref, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminScreen } from \"../../../../../../js/screens\";\nimport Dialog from \"../../ui/Dialog.vue\";\nimport { useGuardedForm } from \"../../../composables/useFormGuard\";\nimport { rules, useFormValidation } from \"../../../composables/useFormValidation\";\n\nconst props = defineProps<{ open: boolean; used: number; limit: number | null }>();\nconst emit = defineEmits<{ close: []; created: [screen: AdminScreen] }>();\nconst api = rpc(\"velkom:admin\");\nconst model = reactive({ name: \"\" });\nconst pending = ref(false);\nconst error = ref(\"\");\nconst form = useFormValidation(model, {\n  name: [rules.required(\"Vul een naam in.\"), rules.maxLength(100)],\n});\nconst guard = useGuardedForm(\"Scherm\", model, { active: () => props.open });\nconst full = computed(() => props.limit !== null && props.used >= props.limit);\n\nwatch(() => props.open, open => {\n  if (!open)\n    return;\n  guard.load({ name: \"\" });\n  form.reset();\n  error.value = \"\";\n}, { immediate: true });\n\nfunction showError(cause: unknown, fields: { pattern: RegExp; field: \"name\" }): void {\n  const message = cause instanceof Error ? cause.message.replace(/^RPC Error: /, \"\") : \"\";\n  if (fields.pattern.test(message)) {\n    form.setError(fields.field, message);\n    void nextTick(() => document.getElementById(form.fieldId(fields.field))?.focus());\n  } else {\n    error.value = /schermen/.test(message) ? message : \"Opslaan is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\";\n  }\n}\n\nasync function onSubmit(): Promise<void> {\n  if (pending.value || !form.validate())\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    const created = await api.createScreen({ name: model.name.trim(), form: \"tablet\" });\n    guard.commit();\n    emit(\"created\", created);\n  } catch (cause) {\n    showError(cause, { pattern: /naam/i, field: \"name\" });\n  } finally {\n    pending.value = false;\n  }\n}\n\nasync function cancel(): Promise<void> {\n  if (await guard.confirmClose())\n    emit(\"close\");\n}\n\nfunction describedBy(field: \"name\", hint?: string): string | undefined {\n  return [hint, form.errors[field] ? `${form.fieldId(field)}-error` : \"\"].filter(Boolean).join(\" \") || undefined;\n}\n</script>\n\n<template>\n  <Dialog :open=\"open\" title=\"Scherm toevoegen\" description=\"Geef het scherm een naam. Daarna kun je de eigen URL of QR-code openen op het ontvangstapparaat.\" :width=\"640\" style=\"--dialog-top: 72px\" form\n          :guard=\"guard\" :pending=\"pending\" data-testid=\"screen-dialog\" @close=\"emit('close')\" @submit=\"onSubmit\">\n    <div class=\"screen-form\" :aria-busy=\"pending || undefined\">\n      <p v-if=\"error\" class=\"screen-form__error\" role=\"alert\">{{ error }}</p>\n      <label class=\"screen-form__field\">\n        <span>Naam <span class=\"screen-form__required\" aria-hidden=\"true\">*</span></span>\n        <input :id=\"form.fieldId('name')\" v-model=\"model.name\" class=\"v-control\" type=\"text\" :disabled=\"pending\" aria-required=\"true\"\n               :aria-invalid=\"Boolean(form.errors.name) || undefined\" :aria-describedby=\"describedBy('name', 'screen-name-hint')\">\n        <span id=\"screen-name-hint\" class=\"screen-form__hint\">Bijvoorbeeld Tablet receptie of Zuil hoofdingang.</span>\n        <span v-if=\"form.errors.name\" :id=\"`${form.fieldId('name')}-error`\" class=\"screen-form__invalid\">{{ form.errors.name }}</span>\n      </label>\n      <div v-if=\"full\" role=\"note\" class=\"screen-form__note\">\n        <svg width=\"18\" height=\"18\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M10 3.2L17.6 16.4H2.4zM10 8.2v3.4M10 13.9v.1\" /></svg>\n        <span><strong>Let op.</strong> Je gebruikt {{ used }} van {{ limit }} schermen. Gearchiveerde schermen tellen niet mee. Archiveer eerst een scherm om er een toe te voegen.</span>\n      </div>\n    </div>\n    <template #footer>\n      <button type=\"button\" class=\"vk-button vk-button--secondary vk-button--compact\" :disabled=\"pending\" @click=\"cancel\">Annuleren</button>\n      <button type=\"submit\" class=\"vk-button vk-button--primary vk-button--compact\" :disabled=\"pending || full\" data-testid=\"dialog-submit\">\n        {{ pending ? \"Toevoegen...\" : \"Toevoegen\" }}\n      </button>\n    </template>\n  </Dialog>\n</template>\n\n<style scoped>\n/* Geometry, colors and type follow the supplied SchermToevoegen.html export. */\n.screen-form { display: flex; flex-direction: column; gap: 18px; }\n.screen-form__field { display: flex; flex-direction: column; gap: 6px; font-size: 14px; font-weight: 700; }\n.screen-form__field .v-control { box-sizing: border-box; height: 48px; font-weight: 400; }\n.screen-form__hint { font-size: 13px; font-weight: 400; color: var(--muted-foreground); }\n.screen-form__required { color: var(--danger); }\n.screen-form__invalid { font-size: 13px; font-weight: 400; color: var(--danger); }\n.screen-form__error { margin: 0; color: var(--danger); }\n.screen-form__note { margin: 0; display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; background: var(--cream); border: 1.5px solid var(--foreground); font-size: 14px; }\n.screen-form__note svg { flex: none; margin-top: 2px; }\n</style>\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, vModelText as _vModelText, withDirectives as _withDirectives, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  key: 0,\n  class: \"screen-form__error\",\n  role: \"alert\"\n}\nconst _hoisted_3 = { class: \"screen-form__field\" }\nconst _hoisted_4 = [\"id\", \"disabled\", \"aria-invalid\", \"aria-describedby\"]\nconst _hoisted_5 = [\"id\"]\nconst _hoisted_6 = {\n  key: 1,\n  role: \"note\",\n  class: \"screen-form__note\"\n}\nconst _hoisted_7 = [\"disabled\"]\nconst _hoisted_8 = [\"disabled\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: \"Scherm toevoegen\",\n    description: \"Geef het scherm een naam. Daarna kun je de eigen URL of QR-code openen op het ontvangstapparaat.\",\n    width: 640,\n    style: {\"--dialog-top\":\"72px\"},\n    form: \"\",\n    guard: $setup.guard,\n    pending: $setup.pending,\n    \"data-testid\": \"screen-dialog\",\n    onClose: _cache[1] || (_cache[1] = $event => ($setup.emit('close'))),\n    onSubmit: $setup.onSubmit\n  }, {\n    footer: _withCtx(() => [\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: \"vk-button vk-button--secondary vk-button--compact\",\n        disabled: $setup.pending,\n        onClick: $setup.cancel\n      }, \"Annuleren\", 8 /* PROPS */, _hoisted_7),\n      _createElementVNode(\"button\", {\n        type: \"submit\",\n        class: \"vk-button vk-button--primary vk-button--compact\",\n        disabled: $setup.pending || $setup.full,\n        \"data-testid\": \"dialog-submit\"\n      }, _toDisplayString($setup.pending ? \"Toevoegen...\" : \"Toevoegen\"), 9 /* TEXT, PROPS */, _hoisted_8)\n    ]),\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", {\n        class: \"screen-form\",\n        \"aria-busy\": $setup.pending || undefined\n      }, [\n        ($setup.error)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, _toDisplayString($setup.error), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true),\n        _createElementVNode(\"label\", _hoisted_3, [\n          _cache[2] || (_cache[2] = _createElementVNode(\"span\", null, [\n            _createTextVNode(\"Naam \"),\n            _createElementVNode(\"span\", {\n              class: \"screen-form__required\",\n              \"aria-hidden\": \"true\"\n            }, \"*\")\n          ], -1 /* CACHED */)),\n          _withDirectives(_createElementVNode(\"input\", {\n            id: $setup.form.fieldId('name'),\n            \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.name) = $event)),\n            class: \"v-control\",\n            type: \"text\",\n            disabled: $setup.pending,\n            \"aria-required\": \"true\",\n            \"aria-invalid\": Boolean($setup.form.errors.name) || undefined,\n            \"aria-describedby\": $setup.describedBy('name', 'screen-name-hint')\n          }, null, 8 /* PROPS */, _hoisted_4), [\n            [_vModelText, $setup.model.name]\n          ]),\n          _cache[3] || (_cache[3] = _createElementVNode(\"span\", {\n            id: \"screen-name-hint\",\n            class: \"screen-form__hint\"\n          }, \"Bijvoorbeeld Tablet receptie of Zuil hoofdingang.\", -1 /* CACHED */)),\n          ($setup.form.errors.name)\n            ? (_openBlock(), _createElementBlock(\"span\", {\n                key: 0,\n                id: `${$setup.form.fieldId('name')}-error`,\n                class: \"screen-form__invalid\"\n              }, _toDisplayString($setup.form.errors.name), 9 /* TEXT, PROPS */, _hoisted_5))\n            : _createCommentVNode(\"v-if\", true)\n        ]),\n        ($setup.full)\n          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n              _cache[5] || (_cache[5] = _createElementVNode(\"svg\", {\n                width: \"18\",\n                height: \"18\",\n                viewBox: \"0 0 20 20\",\n                fill: \"none\",\n                stroke: \"currentColor\",\n                \"stroke-width\": \"1.8\",\n                \"stroke-linecap\": \"round\",\n                \"stroke-linejoin\": \"round\",\n                \"aria-hidden\": \"true\"\n              }, [\n                _createElementVNode(\"path\", { d: \"M10 3.2L17.6 16.4H2.4zM10 8.2v3.4M10 13.9v.1\" })\n              ], -1 /* CACHED */)),\n              _createElementVNode(\"span\", null, [\n                _cache[4] || (_cache[4] = _createElementVNode(\"strong\", null, \"Let op.\", -1 /* CACHED */)),\n                _createTextVNode(\" Je gebruikt \" + _toDisplayString($props.used) + \" van \" + _toDisplayString($props.limit) + \" schermen. Gearchiveerde schermen tellen niet mee. Archiveer eerst een scherm om er een toe te voegen.\", 1 /* TEXT */)\n              ])\n            ]))\n          : _createCommentVNode(\"v-if\", true)\n      ], 8 /* PROPS */, _hoisted_1)\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\", \"guard\", \"pending\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/screens/ScreenDialog.vue\";script.__scopeId = \"data-v-f471de49\";export default script;","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, toDisplayString as _toDisplayString, Fragment as _Fragment, withCtx as _withCtx, createVNode as _createVNode, normalizeStyle as _normalizeStyle, renderList as _renderList } from \"vue\"\n\nconst _hoisted_1 = {\n  class: \"screens\",\n  \"data-testid\": \"customer-screens\"\n}\nconst _hoisted_2 = [\"href\"]\nconst _hoisted_3 = {\n  key: 1,\n  class: \"screens__message\",\n  role: \"alert\"\n}\nconst _hoisted_4 = [\"disabled\"]\nconst _hoisted_5 = [\"aria-busy\"]\nconst _hoisted_6 = { class: \"screens__usage-head\" }\nconst _hoisted_7 = {\n  id: \"screens-usage\",\n  class: \"screens__usage-title\"\n}\nconst _hoisted_8 = {\n  key: 0,\n  class: \"screens__count\"\n}\nconst _hoisted_9 = {\n  key: 0,\n  class: \"screens__full\"\n}\nconst _hoisted_10 = [\"aria-valuemax\", \"aria-valuenow\"]\nconst _hoisted_11 = {\n  key: 0,\n  class: \"screens__message\",\n  role: \"alert\"\n}\nconst _hoisted_12 = {\n  key: 2,\n  class: \"screens__muted\"\n}\nconst _hoisted_13 = {\n  key: 3,\n  class: \"screens__grid\"\n}\nconst _hoisted_14 = [\"aria-labelledby\", \"onContextmenu\"]\nconst _hoisted_15 = { class: \"screens__card-head\" }\nconst _hoisted_16 = [\"id\"]\nconst _hoisted_17 = { class: \"screens__facts\" }\nconst _hoisted_18 = [\"datetime\"]\nconst _hoisted_19 = { class: \"screens__links\" }\nconst _hoisted_20 = [\"href\", \"aria-label\"]\nconst _hoisted_21 = {\n  key: 0,\n  class: \"screens__error\",\n  role: \"alert\"\n}\nconst _hoisted_22 = { key: 1 }\nconst _hoisted_23 = {\n  key: 0,\n  class: \"screens__error\",\n  role: \"alert\"\n}\nconst _hoisted_24 = { key: 1 }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    ($setup.detail)\n      ? (_openBlock(), _createBlock($setup[\"ScreenDetail\"], {\n          key: 0,\n          screen: $setup.detail,\n          \"customer-name\": $props.bootstrap.customer.name,\n          \"show-package-hint\": $setup.showPackageHint,\n          \"kiosk-url\": $setup.kioskUrl,\n          org: $setup.org,\n          \"kiosk-theme\": $setup.kioskTheme,\n          branding: $setup.branding,\n          onSaved: $setup.saved,\n          onUpdated: $setup.upsert,\n          onResetUrl: _cache[0] || (_cache[0] = $event => {$setup.resetting = $setup.detail; $setup.resetError = false}),\n          onArchive: _cache[1] || (_cache[1] = $event => {$setup.archiving = $setup.detail; $setup.archiveError = false})\n        }, null, 8 /* PROPS */, [\"screen\", \"customer-name\", \"show-package-hint\", \"kiosk-url\", \"org\", \"kiosk-theme\", \"branding\"]))\n      : ($setup.detailId !== null)\n        ? (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n            _createElementVNode(\"a\", {\n              class: \"screens__back\",\n              href: $setup.customerHref('schermen')\n            }, _cache[6] || (_cache[6] = [\n              _createElementVNode(\"svg\", {\n                width: \"18\",\n                height: \"18\",\n                viewBox: \"0 0 20 20\",\n                fill: \"none\",\n                stroke: \"currentColor\",\n                \"stroke-width\": \"1.8\",\n                \"stroke-linecap\": \"round\",\n                \"stroke-linejoin\": \"round\",\n                \"aria-hidden\": \"true\"\n              }, [\n                _createElementVNode(\"path\", { d: \"M16 10H5M9 5l-5 5 5 5\" })\n              ], -1 /* CACHED */),\n              _createTextVNode(\" Alle schermen \", -1 /* CACHED */)\n            ]), 8 /* PROPS */, _hoisted_2),\n            ($setup.loadingIndicator.holding)\n              ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n                  key: 0,\n                  label: \"Scherm laden\",\n                  visible: $setup.loadingIndicator.visible,\n                  count: 1,\n                  height: 320\n                }, null, 8 /* PROPS */, [\"visible\"]))\n              : (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString($setup.error ? \"Het scherm kon niet worden geladen. Controleer je verbinding en toegang en probeer het opnieuw.\" : \"Dit scherm bestaat niet of is gearchiveerd.\"), 1 /* TEXT */))\n          ], 64 /* STABLE_FRAGMENT */))\n        : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n            _createVNode($setup[\"PageHeader\"], {\n              title: \"Schermen\",\n              context: $props.bootstrap.customer.name,\n              description: \"Ontvangstapparaten en hun instellingen.\"\n            }, {\n              actions: _withCtx(() => [\n                _createElementVNode(\"button\", {\n                  type: \"button\",\n                  class: \"vk-button vk-button--primary vk-button--compact\",\n                  disabled: $setup.loading || $setup.error,\n                  \"data-testid\": \"screen-add\",\n                  onClick: $setup.add\n                }, \"Scherm toevoegen\", 8 /* PROPS */, _hoisted_4)\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"context\"]),\n            _createElementVNode(\"section\", {\n              class: \"screens__usage\",\n              \"aria-labelledby\": \"screens-usage\",\n              \"aria-busy\": $setup.loading\n            }, [\n              _createElementVNode(\"div\", _hoisted_6, [\n                _createElementVNode(\"h2\", _hoisted_7, _toDisplayString($props.bootstrap.customer.name), 1 /* TEXT */),\n                (!$setup.loading && !$setup.error)\n                  ? (_openBlock(), _createElementBlock(\"span\", _hoisted_8, [\n                      _createTextVNode(_toDisplayString($setup.limit === null ? `${$setup.screens.length} schermen · Onbeperkt` : `${$setup.screens.length} van ${$setup.limit} schermen`) + \" \", 1 /* TEXT */),\n                      ($setup.full)\n                        ? (_openBlock(), _createElementBlock(\"span\", _hoisted_9, \"Vol\"))\n                        : _createCommentVNode(\"v-if\", true)\n                    ]))\n                  : _createCommentVNode(\"v-if\", true)\n              ]),\n              ($setup.limit !== null)\n                ? (_openBlock(), _createElementBlock(\"div\", {\n                    key: 0,\n                    role: \"meter\",\n                    \"aria-label\": \"Schermen in gebruik\",\n                    \"aria-valuemin\": \"0\",\n                    \"aria-valuemax\": $setup.limit,\n                    \"aria-valuenow\": $setup.screens.length,\n                    class: \"screens__meter\"\n                  }, [\n                    _createElementVNode(\"div\", {\n                      class: \"screens__meter-fill\",\n                      style: _normalizeStyle({ width: `${Math.min(100, ($setup.screens.length / $setup.limit) * 100)}%` })\n                    }, null, 4 /* STYLE */)\n                  ], 8 /* PROPS */, _hoisted_10))\n                : _createCommentVNode(\"v-if\", true)\n            ], 8 /* PROPS */, _hoisted_5),\n            ($setup.error)\n              ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n                  _cache[7] || (_cache[7] = _createElementVNode(\"p\", null, \"Controleer je verbinding en toegang en probeer het opnieuw.\", -1 /* CACHED */)),\n                  _createElementVNode(\"button\", {\n                    type: \"button\",\n                    class: \"screens__action\",\n                    onClick: _cache[2] || (_cache[2] = $event => ($setup.load()))\n                  }, \"Opnieuw proberen\")\n                ]))\n              : ($setup.loadingIndicator.holding)\n                ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n                    key: 1,\n                    label: \"Schermen laden\",\n                    visible: $setup.loadingIndicator.visible,\n                    layout: \"grid\",\n                    count: 2,\n                    height: 168,\n                    \"min-width\": 280\n                  }, null, 8 /* PROPS */, [\"visible\"]))\n                : (!$setup.screens.length)\n                  ? (_openBlock(), _createElementBlock(\"p\", _hoisted_12, \"Nog geen schermen.\"))\n                  : (_openBlock(), _createElementBlock(\"div\", _hoisted_13, [\n                      (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.screens, (screen) => {\n                        return (_openBlock(), _createElementBlock(\"section\", {\n                          key: screen.id,\n                          class: \"screens__card\",\n                          \"aria-labelledby\": `screen-${screen.id}`,\n                          onContextmenu: $event => ($setup.menu?.show($event, $setup.cardActions(screen), `Acties voor ${screen.name}`))\n                        }, [\n                          _createElementVNode(\"div\", _hoisted_15, [\n                            _createElementVNode(\"div\", null, [\n                              _createElementVNode(\"h2\", {\n                                id: `screen-${screen.id}`,\n                                class: \"screens__card-title\"\n                              }, _toDisplayString(screen.name), 9 /* TEXT, PROPS */, _hoisted_16)\n                            ])\n                          ]),\n                          _createElementVNode(\"dl\", _hoisted_17, [\n                            _cache[8] || (_cache[8] = _createElementVNode(\"dt\", null, \"Laatste keer gebruikt\", -1 /* CACHED */)),\n                            _createElementVNode(\"dd\", null, [\n                              (screen.lastUsed)\n                                ? (_openBlock(), _createElementBlock(\"time\", {\n                                    key: 0,\n                                    datetime: screen.lastUsed\n                                  }, _toDisplayString($setup.formatDate(new Date(screen.lastUsed))) + \" om \" + _toDisplayString($setup.formatTime(new Date(screen.lastUsed))), 9 /* TEXT, PROPS */, _hoisted_18))\n                                : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n                                    _createTextVNode(\"Nog niet gebruikt\")\n                                  ], 64 /* STABLE_FRAGMENT */))\n                            ])\n                          ]),\n                          _createElementVNode(\"div\", _hoisted_19, [\n                            _createElementVNode(\"a\", {\n                              class: \"screens__link\",\n                              href: $setup.customerHref('schermen', { rest: [String(screen.id)] }),\n                              \"aria-label\": `Instellingen van ${screen.name} bekijken`\n                            }, _cache[9] || (_cache[9] = [\n                              _createTextVNode(\" Instellingen bekijken \", -1 /* CACHED */),\n                              _createElementVNode(\"svg\", {\n                                width: \"16\",\n                                height: \"16\",\n                                viewBox: \"0 0 20 20\",\n                                fill: \"none\",\n                                stroke: \"currentColor\",\n                                \"stroke-width\": \"1.8\",\n                                \"stroke-linecap\": \"round\",\n                                \"stroke-linejoin\": \"round\",\n                                \"aria-hidden\": \"true\"\n                              }, [\n                                _createElementVNode(\"path\", { d: \"M4 10h11M11 5l5 5-5 5\" })\n                              ], -1 /* CACHED */)\n                            ]), 8 /* PROPS */, _hoisted_20)\n                          ])\n                        ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_14))\n                      }), 128 /* KEYED_FRAGMENT */))\n                    ]))\n          ], 64 /* STABLE_FRAGMENT */)),\n    _createVNode($setup[\"ScreenDialog\"], {\n      open: $setup.dialogOpen,\n      used: $setup.screens.length,\n      limit: $setup.limit,\n      onClose: _cache[3] || (_cache[3] = $event => ($setup.dialogOpen = false)),\n      onCreated: $setup.created\n    }, null, 8 /* PROPS */, [\"open\", \"used\", \"limit\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: Boolean($setup.resetting),\n      title: \"Scherm-URL vernieuwen\",\n      \"item-name\": $setup.resetting?.name ?? '',\n      message: \"Wil je een nieuwe URL voor dit scherm maken?\",\n      consequence: \"De oude URL en QR-code werken daarna niet meer. Open ook je eigen ontvangstapparaat opnieuw met de nieuwe URL.\",\n      \"confirm-label\": \"URL vernieuwen\",\n      \"pending-label\": \"Vernieuwen...\",\n      pending: $setup.resetPending,\n      onCancel: _cache[4] || (_cache[4] = $event => ($setup.resetting = null)),\n      onConfirm: $setup.resetLink\n    }, {\n      default: _withCtx(() => [\n        ($setup.resetError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_21, \"Vernieuwen kon niet worden bevestigd. Controleer de huidige URL en probeer zo nodig opnieuw.\"))\n          : (_openBlock(), _createElementBlock(\"span\", _hoisted_22, \"Wil je een nieuwe URL voor dit scherm maken?\"))\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"item-name\", \"pending\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: Boolean($setup.archiving),\n      title: \"Scherm archiveren\",\n      \"item-name\": $setup.archiving?.name ?? '',\n      message: \"Wil je dit scherm archiveren?\",\n      consequence: $setup.showPackageHint ? 'De scherm-URL wordt ingetrokken. Een gearchiveerd scherm telt niet mee voor je pakket.' : 'De scherm-URL wordt ingetrokken.',\n      \"confirm-label\": \"Archiveren\",\n      \"pending-label\": \"Archiveren...\",\n      pending: $setup.archivePending,\n      onCancel: _cache[5] || (_cache[5] = $event => ($setup.archiving = null)),\n      onConfirm: $setup.archive\n    }, {\n      default: _withCtx(() => [\n        ($setup.archiveError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_23, \"Archiveren is niet gelukt. Controleer je verbinding en toegang en probeer het opnieuw.\"))\n          : (_openBlock(), _createElementBlock(\"span\", _hoisted_24, \"Wil je dit scherm archiveren?\"))\n      ]),\n      _: 1 /* STABLE */\n    }, 8 /* PROPS */, [\"open\", \"item-name\", \"consequence\", \"pending\"]),\n    _createVNode($setup[\"ContextMenu\"], { ref: \"menu\" }, null, 512 /* NEED_PATCH */)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/SchermenView.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/SchermenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/SchermenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/SchermenView.vue\";script.__scopeId = \"data-v-8268fa61\";export default script;","<script setup lang=\"ts\">\nimport { onMounted, ref } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { AdminBootstrap } from \"../../../../../js/admin-rpc\";\nimport type { AdminIntegration } from \"../../../../../js/admin-integrations\";\nimport PageHeader from \"../../components/ui/PageHeader.vue\";\nimport IntegrationCard from \"../../components/customer/integrations/IntegrationCard.vue\";\nimport MicrosoftInstructions from \"../../components/customer/integrations/MicrosoftInstructions.vue\";\nimport MicrosoftRoomsDialog from \"../../components/customer/integrations/MicrosoftRoomsDialog.vue\";\nimport ConfirmDialog from \"../../components/ui/ConfirmDialog.vue\";\nimport Skeleton from \"../../components/ui/Skeleton.vue\";\nimport { useLoadingIndicator } from \"../../lib/loading\";\nimport { clearMicrosoftBrowserSecret, createMicrosoftBrowserSecret, microsoftLoginUrl, takeMicrosoftCallback } from \"../../lib/outlook-tenant\";\nimport { showToast } from \"../../lib/toast\";\n\ndefineProps<{ bootstrap: AdminBootstrap }>();\nconst api = rpc(\"velkom:admin\");\nconst items = ref<AdminIntegration[]>([]);\nconst loading = ref(true);\nconst loadingIndicator = useLoadingIndicator(() => loading.value);\nconst error = ref(false);\nconst instructionsOpen = ref(false);\nconst roomsOpen = ref(false);\nconst disconnectOpen = ref(false);\nconst pending = ref(false);\nconst seeding = ref(false);\nconst syncing = ref(false);\nconst connectionError = ref(\"\");\n\nasync function load(): Promise<void> {\n  loading.value = true;\n  error.value = false;\n  try {\n    items.value = (await api.integrations()).items;\n  } catch {\n    items.value = [];\n    error.value = true;\n  } finally {\n    loading.value = false;\n  }\n}\n\nasync function connect(): Promise<void> {\n  if (pending.value)\n    return;\n  pending.value = true;\n  connectionError.value = \"\";\n  try {\n    const result = await api.beginMicrosoftConnection({ browserSecret: createMicrosoftBrowserSecret() });\n    window.location.assign(microsoftLoginUrl(result.authorizationUrl));\n  } catch {\n    try { clearMicrosoftBrowserSecret(); } catch { /* Storage may be unavailable. */ }\n    connectionError.value = \"Koppelen kon niet worden gestart. Sta tijdelijke browseropslag toe en probeer het opnieuw.\";\n    pending.value = false;\n  }\n}\n\n/** Continues the two Microsoft round trips: sign-in, then admin consent, then choosing rooms. */\nasync function continueConnection(): Promise<void> {\n  const callback = takeMicrosoftCallback();\n  if (!callback)\n    return;\n  pending.value = true;\n  try {\n    if (callback.kind === \"error\")\n      throw new Error(\"Unbound Microsoft callback\");\n    if (callback.kind === \"signin\") {\n      const { consentUrl } = await api.finishMicrosoftSignIn({ sessionToken: callback.sessionToken, browserSecret: callback.browserSecret });\n      window.location.assign(microsoftLoginUrl(consentUrl));\n      return;\n    }\n    await api.finishMicrosoftConsent({ state: callback.state, tenant: callback.tenant, adminConsent: callback.adminConsent, browserSecret: callback.browserSecret });\n    roomsOpen.value = true;\n  } catch (error) {\n    try { clearMicrosoftBrowserSecret(); } catch { /* Storage may be unavailable. */ }\n    connectionError.value = error instanceof Error && /toestemming/.test(error.message) ? error.message : \"De Microsoft-koppeling is niet afgerond. Klik opnieuw op Koppelen met Microsoft; alleen een Microsoft-beheerder kan toestemming geven.\";\n  }\n  pending.value = false;\n}\n\nasync function roomsSaved(): Promise<void> {\n  roomsOpen.value = false;\n  showToast(\"Ruimtes opgeslagen\");\n  await load();\n}\n\nasync function synchronize(): Promise<void> {\n  if (syncing.value || pending.value || seeding.value)\n    return;\n  syncing.value = true;\n  connectionError.value = \"\";\n  try {\n    const result = await api.synchronizeMicrosoftRooms();\n    items.value = result.items;\n    if (result.synchronized)\n      showToast(\"Agenda gesynchroniseerd\");\n    else\n      connectionError.value = \"De agenda is nog niet gesynchroniseerd. Probeer het over enkele minuten opnieuw.\";\n  } catch {\n    connectionError.value = \"Synchroniseren is niet gelukt. Probeer het opnieuw.\";\n  } finally {\n    syncing.value = false;\n  }\n}\n\nasync function disconnect(): Promise<void> {\n  if (pending.value)\n    return;\n  pending.value = true;\n  try {\n    await api.disconnectMicrosoftConnection();\n    disconnectOpen.value = false;\n    showToast(\"Microsoft-verbinding verbroken\");\n    await load();\n  } catch {\n    disconnectOpen.value = false;\n    connectionError.value = \"De verbinding kon niet worden verbroken. Probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n\nasync function seed(): Promise<void> {\n  if (seeding.value)\n    return;\n  seeding.value = true;\n  connectionError.value = \"\";\n  try {\n    const result = await api.seedMicrosoftTestAppointments();\n    items.value = result.items;\n    // Local Amsterdam wall-clock strings; Date parses them as local time, which is fine for a development toast.\n    const format = (value: string) => new Intl.DateTimeFormat(\"nl-NL\", { weekday: \"short\", hour: \"2-digit\", minute: \"2-digit\" }).format(new Date(value));\n    showToast(`${result.accepted} van ${result.planned} testafspraken toegevoegd, ${format(result.start)} tot ${format(result.end)}`);\n  } catch {\n    connectionError.value = \"Testafspraken toevoegen is niet gelukt. Probeer het opnieuw.\";\n  } finally {\n    seeding.value = false;\n  }\n}\n\nonMounted(() => { void continueConnection().then(load); });\n</script>\n\n<template>\n  <div class=\"integrations\" data-testid=\"customer-integrations\" :aria-busy=\"loading || syncing\">\n    <PageHeader title=\"Koppelingen\" :context=\"bootstrap.customer.name\" description=\"Wat je kunt koppelen en wat al is aangesloten.\" />\n    <Skeleton v-if=\"loadingIndicator.holding\" label=\"Koppelingen laden\" :visible=\"loadingIndicator.visible\" layout=\"grid\" :count=\"1\" :height=\"220\" :min-width=\"320\" />\n    <div v-else-if=\"error\" class=\"integrations__error\" role=\"alert\">\n      <p class=\"integrations__text\">Koppelingen niet beschikbaar. Controleer je verbinding en toegang en probeer het opnieuw.</p>\n      <button type=\"button\" class=\"integrations__retry\" @click=\"load\">Opnieuw proberen</button>\n    </div>\n    <p v-if=\"connectionError\" class=\"integrations__error\" role=\"alert\">{{ connectionError }}</p>\n    <section v-if=\"!loadingIndicator.holding && !error && items.length\" class=\"integrations__group\" aria-labelledby=\"integrations-calendar\">\n      <header class=\"integrations__group-header\"><h2 id=\"integrations-calendar\">Agenda</h2><span>Moment 01 Vooraf</span></header>\n      <div class=\"integrations__grid\">\n        <IntegrationCard v-for=\"item in items\" :key=\"item.id\" :item=\"item\" :pending=\"pending || syncing || seeding\" :syncing=\"syncing\" :seeding=\"seeding\" @instructions=\"instructionsOpen = true\" @connect=\"connect\" @rooms=\"roomsOpen = true\" @disconnect=\"disconnectOpen = true\" @seed=\"seed\" @synchronize=\"synchronize\" />\n      </div>\n    </section>\n    <p v-else-if=\"!loadingIndicator.holding && !error\" class=\"integrations__empty\">Er zijn nog geen koppelingen vrijgegeven voor je organisatie.</p>\n    <MicrosoftInstructions :open=\"instructionsOpen\" :self-service=\"Boolean(items[0]?.canConnect || items[0]?.tenantConnection)\" @close=\"instructionsOpen = false\" />\n    <MicrosoftRoomsDialog :open=\"roomsOpen\" @close=\"roomsOpen = false\" @saved=\"roomsSaved\" />\n    <ConfirmDialog :open=\"disconnectOpen\" title=\"Microsoft-verbinding verbreken\" message=\"Wil je de Microsoft-verbinding verbreken?\" consequence=\"Velkom stopt met het lezen van de ruimtes. Eerder geïmporteerde bezoeken blijven bewaard. De toestemming zelf trek je in bij Microsoft (Entra, Bedrijfsapps).\" confirm-label=\"Verbinding verbreken\" pending-label=\"Verbreken...\" :pending=\"pending\" @cancel=\"disconnectOpen = false\" @confirm=\"disconnect\" />\n  </div>\n</template>\n\n<style scoped>\n.integrations { display: flex; flex-direction: column; gap: 28px; min-width: 0; }\n.integrations__group { display: flex; flex-direction: column; gap: 14px; }\n.integrations__group-header { display: flex; flex-wrap: wrap; gap: 12px; align-items: baseline; }\n.integrations__group-header h2 { margin: 0; font-family: var(--font-display); font-size: 26px; font-weight: 600; letter-spacing: -0.05em; }\n.integrations__group-header span { font-size: 14px; color: var(--muted-foreground); }\n.integrations__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(300px, 100%), 1fr)); gap: 16px; }\n.integrations__error { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; color: var(--danger); }\n.integrations__text, .integrations__empty { margin: 0; }\n.integrations__retry { min-height: 40px; padding: 0 16px; border: 1.5px solid var(--foreground); border-radius: 999px; background: transparent; color: var(--foreground); font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.integrations__retry:hover { background: var(--hover); }\n.integrations__empty { color: var(--muted-foreground); }\n@media (max-width: 767px) {\n  .integrations { margin: 4px -4px 0; }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { AdminIntegration } from \"../../../../../../js/admin-integrations\";\n\nconst props = defineProps<{ item: AdminIntegration; pending?: boolean; syncing?: boolean; seeding?: boolean }>();\ndefineEmits<{ instructions: []; connect: []; rooms: []; disconnect: []; seed: []; synchronize: [] }>();\nconst STATUSES = {\n  \"not-configured\": { label: \"Niet verbonden\", icon: \"M10 3a7 7 0 1 1 0 14a7 7 0 1 1 0-14zM7 10h6\" },\n  pending: { label: \"Wacht op synchronisatie\", icon: \"M10 3a7 7 0 1 1 0 14a7 7 0 1 1 0-14zM10 6v4l3 2\" },\n  connected: { label: \"Verbonden\", icon: \"M5 10.5l3.2 3.2L15 7\" },\n  attention: { label: \"Aandacht nodig\", icon: \"M10 3l8 14H2zM10 7v4M10 14v.2\" },\n};\nconst status = computed(() => STATUSES[props.item.status]);\nconst accounts = computed(() => props.item.rooms.map(room => room.mailbox).join(\", \") || \"Niet ingesteld\");\nconst lastSync = computed(() => props.item.lastSuccessAt ? new Intl.DateTimeFormat(\"nl-NL\", { timeZone: \"Europe/Amsterdam\", day: \"numeric\", month: \"short\", year: \"numeric\", hour: \"2-digit\", minute: \"2-digit\" }).format(new Date(props.item.lastSuccessAt)) : \"Nog niet gesynchroniseerd\");\n</script>\n\n<template>\n  <article class=\"integration-card\">\n    <header class=\"integration-card__header\">\n      <h3 class=\"integration-card__title\">{{ item.name }}</h3>\n      <span class=\"integration-card__status\" :class=\"`integration-card__status--${item.status}`\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path :d=\"status.icon\" /></svg>\n        {{ status.label }}\n      </span>\n    </header>\n    <dl class=\"integration-card__details\">\n      <dt>Bezoekersmoment</dt><dd>01 Vooraf</dd>\n      <dt>Verbinding</dt><dd>{{ status.label }}</dd>\n      <dt>Account</dt><dd>{{ accounts }}</dd>\n      <dt>Laatst gesynchroniseerd</dt>\n      <dd class=\"integration-card__last-sync\">\n        <span>{{ lastSync }}</span>\n        <button v-if=\"item.rooms.length\" type=\"button\" class=\"integration-card__sync\" :disabled=\"pending || syncing || seeding\" :aria-busy=\"syncing || undefined\" @click=\"$emit('synchronize')\">{{ syncing ? \"Synchroniseren...\" : \"Nu synchroniseren\" }}</button>\n      </dd>\n    </dl>\n    <span class=\"integration-card__spacer\" aria-hidden=\"true\" />\n    <div class=\"integration-card__actions\">\n      <button v-if=\"item.tenantConnection\" type=\"button\" class=\"integration-card__action integration-card__action--primary\" :disabled=\"pending\" @click=\"$emit('rooms')\">Ruimtes kiezen</button>\n      <button v-else-if=\"item.canConnect\" type=\"button\" class=\"integration-card__action integration-card__action--primary\" :disabled=\"pending\" @click=\"$emit('connect')\">{{ pending ? \"Even wachten...\" : \"Koppelen met Microsoft\" }}</button>\n      <button type=\"button\" :class=\"item.tenantConnection || item.canConnect ? 'integration-card__sync' : 'integration-card__action'\" @click=\"$emit('instructions')\">{{ item.tenantConnection || item.canConnect ? \"Uitleg\" : \"Instructies bekijken\" }}</button>\n      <button v-if=\"item.tenantConnection\" type=\"button\" class=\"integration-card__disconnect\" :disabled=\"pending\" @click=\"$emit('disconnect')\">Verbinding verbreken</button>\n    </div>\n    <p v-if=\"item.canConnect && !item.tenantConnection\" class=\"integration-card__help\">Een Microsoft-beheerder van je organisatie geeft Velkom toestemming en kiest daarna de ruimtes. Persoonlijke agenda’s leest Velkom niet.</p>\n    <p v-if=\"item.canSeedTestAppointments\" class=\"integration-card__seed\">\n      <span>Ontwikkelserver</span>\n      <button type=\"button\" class=\"integration-card__sync\" :disabled=\"seeding\" :aria-busy=\"seeding || undefined\" @click=\"$emit('seed')\">{{ seeding ? \"Testafspraken toevoegen...\" : \"Testafspraken toevoegen\" }}</button>\n    </p>\n  </article>\n</template>\n\n<style scoped>\n.integration-card { background: var(--paper); border: 1px solid var(--border); padding: 20px 24px; display: flex; flex-direction: column; gap: 12px; min-width: 0; }\n.integration-card__header { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; }\n.integration-card__title { margin: 0; font-family: var(--font-display); font-size: 19px; line-height: 1.15; font-weight: 600; letter-spacing: -0.04em; }\n.integration-card__status { flex: none; display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 12px 0 9px; border-radius: 999px; border: 1.5px solid var(--foreground); font-size: 13px; font-weight: 700; white-space: nowrap; }\n.integration-card__status--connected { background: var(--lime); border: 0; }\n.integration-card__status--pending { background: var(--lilac); border: 0; }\n.integration-card__status--attention { background: var(--peach); border: 0; }\n.integration-card__details { margin: 0; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr); font-size: 14px; }\n.integration-card__details dt { padding: 8px 0; border-top: 1px solid var(--border); color: var(--muted-foreground); }\n.integration-card__details dd { margin: 0; padding: 8px 0; border-top: 1px solid var(--border); font-weight: 600; overflow-wrap: anywhere; }\n.integration-card__last-sync { display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 12px; }\n.integration-card__sync { border: 0; padding: 0; background: transparent; color: var(--foreground); font: inherit; font-size: 14px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }\n.integration-card__sync:hover { color: var(--muted-foreground); }\n.integration-card__spacer { flex: 1; }\n.integration-card__actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }\n.integration-card__seed { margin: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 0 12px; padding-top: 12px; border-top: 1px dashed var(--border); font-size: 14px; color: var(--muted-foreground); }\n.integration-card__action { align-self: flex-start; margin-top: auto; min-height: 40px; padding: 0 16px; border-radius: 999px; border: 1.5px solid var(--foreground); background: transparent; color: var(--foreground); font-family: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }\n.integration-card__action:hover { background: var(--hover); }\n.integration-card__sync:disabled { opacity: 0.55; cursor: wait; }\n.integration-card__help { margin: 0; font-size: 14px; line-height: 1.5; color: var(--muted-foreground); }\n.integration-card__action--primary { background: var(--foreground); color: var(--paper); }\n.integration-card__action--primary:hover { background: var(--primary-hover); }\n.integration-card__action:disabled { opacity: 0.55; cursor: wait; }\n.integration-card__disconnect { border: 0; padding: 8px 0; background: transparent; color: var(--danger); font: inherit; font-size: 14px; text-decoration: underline; cursor: pointer; }\n.integration-card__action:focus-visible, .integration-card__sync:focus-visible, .integration-card__disconnect:focus-visible { outline: 2px solid var(--ring); outline-offset: 3px; }\n@media (max-width: 599px) {\n  .integration-card__header { flex-wrap: wrap; }\n  .integration-card__title { flex: 1; }\n}\n@media (max-width: 359px) {\n  .integration-card__details { grid-template-columns: minmax(0, 1fr); }\n  .integration-card__details dt { padding-bottom: 0; }\n  .integration-card__details dd { padding-top: 0; border-top: 0; }\n}\n</style>\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, normalizeClass as _normalizeClass, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"integration-card\" }\nconst _hoisted_2 = { class: \"integration-card__header\" }\nconst _hoisted_3 = { class: \"integration-card__title\" }\nconst _hoisted_4 = {\n  width: \"16\",\n  height: \"16\",\n  viewBox: \"0 0 20 20\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  \"stroke-width\": \"1.8\",\n  \"stroke-linecap\": \"round\",\n  \"stroke-linejoin\": \"round\",\n  \"aria-hidden\": \"true\"\n}\nconst _hoisted_5 = [\"d\"]\nconst _hoisted_6 = { class: \"integration-card__details\" }\nconst _hoisted_7 = { class: \"integration-card__last-sync\" }\nconst _hoisted_8 = [\"disabled\", \"aria-busy\"]\nconst _hoisted_9 = { class: \"integration-card__actions\" }\nconst _hoisted_10 = [\"disabled\"]\nconst _hoisted_11 = [\"disabled\"]\nconst _hoisted_12 = [\"disabled\"]\nconst _hoisted_13 = {\n  key: 0,\n  class: \"integration-card__help\"\n}\nconst _hoisted_14 = {\n  key: 1,\n  class: \"integration-card__seed\"\n}\nconst _hoisted_15 = [\"disabled\", \"aria-busy\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"article\", _hoisted_1, [\n    _createElementVNode(\"header\", _hoisted_2, [\n      _createElementVNode(\"h3\", _hoisted_3, _toDisplayString($props.item.name), 1 /* TEXT */),\n      _createElementVNode(\"span\", {\n        class: _normalizeClass([\"integration-card__status\", `integration-card__status--${$props.item.status}`])\n      }, [\n        (_openBlock(), _createElementBlock(\"svg\", _hoisted_4, [\n          _createElementVNode(\"path\", {\n            d: $setup.status.icon\n          }, null, 8 /* PROPS */, _hoisted_5)\n        ])),\n        _createTextVNode(\" \" + _toDisplayString($setup.status.label), 1 /* TEXT */)\n      ], 2 /* CLASS */)\n    ]),\n    _createElementVNode(\"dl\", _hoisted_6, [\n      _cache[6] || (_cache[6] = _createElementVNode(\"dt\", null, \"Bezoekersmoment\", -1 /* CACHED */)),\n      _cache[7] || (_cache[7] = _createElementVNode(\"dd\", null, \"01 Vooraf\", -1 /* CACHED */)),\n      _cache[8] || (_cache[8] = _createElementVNode(\"dt\", null, \"Verbinding\", -1 /* CACHED */)),\n      _createElementVNode(\"dd\", null, _toDisplayString($setup.status.label), 1 /* TEXT */),\n      _cache[9] || (_cache[9] = _createElementVNode(\"dt\", null, \"Account\", -1 /* CACHED */)),\n      _createElementVNode(\"dd\", null, _toDisplayString($setup.accounts), 1 /* TEXT */),\n      _cache[10] || (_cache[10] = _createElementVNode(\"dt\", null, \"Laatst gesynchroniseerd\", -1 /* CACHED */)),\n      _createElementVNode(\"dd\", _hoisted_7, [\n        _createElementVNode(\"span\", null, _toDisplayString($setup.lastSync), 1 /* TEXT */),\n        ($props.item.rooms.length)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 0,\n              type: \"button\",\n              class: \"integration-card__sync\",\n              disabled: $props.pending || $props.syncing || $props.seeding,\n              \"aria-busy\": $props.syncing || undefined,\n              onClick: _cache[0] || (_cache[0] = $event => (_ctx.$emit('synchronize')))\n            }, _toDisplayString($props.syncing ? \"Synchroniseren...\" : \"Nu synchroniseren\"), 9 /* TEXT, PROPS */, _hoisted_8))\n          : _createCommentVNode(\"v-if\", true)\n      ])\n    ]),\n    _cache[12] || (_cache[12] = _createElementVNode(\"span\", {\n      class: \"integration-card__spacer\",\n      \"aria-hidden\": \"true\"\n    }, null, -1 /* CACHED */)),\n    _createElementVNode(\"div\", _hoisted_9, [\n      ($props.item.tenantConnection)\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 0,\n            type: \"button\",\n            class: \"integration-card__action integration-card__action--primary\",\n            disabled: $props.pending,\n            onClick: _cache[1] || (_cache[1] = $event => (_ctx.$emit('rooms')))\n          }, \"Ruimtes kiezen\", 8 /* PROPS */, _hoisted_10))\n        : ($props.item.canConnect)\n          ? (_openBlock(), _createElementBlock(\"button\", {\n              key: 1,\n              type: \"button\",\n              class: \"integration-card__action integration-card__action--primary\",\n              disabled: $props.pending,\n              onClick: _cache[2] || (_cache[2] = $event => (_ctx.$emit('connect')))\n            }, _toDisplayString($props.pending ? \"Even wachten...\" : \"Koppelen met Microsoft\"), 9 /* TEXT, PROPS */, _hoisted_11))\n          : _createCommentVNode(\"v-if\", true),\n      _createElementVNode(\"button\", {\n        type: \"button\",\n        class: _normalizeClass($props.item.tenantConnection || $props.item.canConnect ? 'integration-card__sync' : 'integration-card__action'),\n        onClick: _cache[3] || (_cache[3] = $event => (_ctx.$emit('instructions')))\n      }, _toDisplayString($props.item.tenantConnection || $props.item.canConnect ? \"Uitleg\" : \"Instructies bekijken\"), 3 /* TEXT, CLASS */),\n      ($props.item.tenantConnection)\n        ? (_openBlock(), _createElementBlock(\"button\", {\n            key: 2,\n            type: \"button\",\n            class: \"integration-card__disconnect\",\n            disabled: $props.pending,\n            onClick: _cache[4] || (_cache[4] = $event => (_ctx.$emit('disconnect')))\n          }, \"Verbinding verbreken\", 8 /* PROPS */, _hoisted_12))\n        : _createCommentVNode(\"v-if\", true)\n    ]),\n    ($props.item.canConnect && !$props.item.tenantConnection)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_13, \"Een Microsoft-beheerder van je organisatie geeft Velkom toestemming en kiest daarna de ruimtes. Persoonlijke agenda’s leest Velkom niet.\"))\n      : _createCommentVNode(\"v-if\", true),\n    ($props.item.canSeedTestAppointments)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_14, [\n          _cache[11] || (_cache[11] = _createElementVNode(\"span\", null, \"Ontwikkelserver\", -1 /* CACHED */)),\n          _createElementVNode(\"button\", {\n            type: \"button\",\n            class: \"integration-card__sync\",\n            disabled: $props.seeding,\n            \"aria-busy\": $props.seeding || undefined,\n            onClick: _cache[5] || (_cache[5] = $event => (_ctx.$emit('seed')))\n          }, _toDisplayString($props.seeding ? \"Testafspraken toevoegen...\" : \"Testafspraken toevoegen\"), 9 /* TEXT, PROPS */, _hoisted_15)\n        ]))\n      : _createCommentVNode(\"v-if\", true)\n  ]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/IntegrationCard.vue\";script.__scopeId = \"data-v-a6b2cc81\";export default script;","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, withCtx as _withCtx, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"microsoft-instructions\" }\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: \"Microsoft 365 / Outlook: uitleg\",\n    description: \"Zo worden afspraken uit Outlook verwacht bezoek in Velkom.\",\n    width: 680,\n    onClose: _cache[0] || (_cache[0] = $event => (_ctx.$emit('close')))\n  }, {\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", _hoisted_1, [\n        ($props.selfService)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n              _cache[1] || (_cache[1] = _createElementVNode(\"p\", null, \"Velkom leest afspraken uit de ruimteagenda’s die je kiest en maakt externe deelnemers zichtbaar als verwacht bezoek. Velkom schrijft niets terug naar Outlook en leest geen persoonlijke agenda’s.\", -1 /* CACHED */)),\n              _cache[2] || (_cache[2] = _createElementVNode(\"ol\", null, [\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Kies Koppelen met Microsoft\"),\n                  _createTextVNode(\" en meld je aan als Microsoft-beheerder van je organisatie (bijvoorbeeld Globale beheerder of Beheerder van cloudtoepassingen).\")\n                ]),\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Geef toestemming.\"),\n                  _createTextVNode(\" Microsoft vraagt toestemming om agenda’s te lezen (zonder inhoud en bijlagen) en om de lijst met ruimtes te lezen. Microsoft kan die toestemming niet tot ruimtes beperken; Velkom leest uitsluitend de ruimtes die je in de volgende stap kiest.\")\n                ]),\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Kies de ruimtes\"),\n                  _createTextVNode(\" en controleer de eigen e-maildomeinen. Velkom haalt de afspraken daarna direct op.\")\n                ])\n              ], -1 /* CACHED */)),\n              _cache[3] || (_cache[3] = _createElementVNode(\"p\", null, [\n                _createElementVNode(\"strong\", null, \"Privéafspraken.\"),\n                _createTextVNode(\" Een ruimteagenda wist standaard het privékenmerk van afspraken. Velkom kijkt daarom bij elke afspraak in de agenda van de organisator alleen of die afspraak privé is, en slaat privéafspraken over. Verder leest Velkom niets in persoonlijke agenda’s, en van ruimteafspraken nooit onderwerp, inhoud of bijlagen.\")\n              ], -1 /* CACHED */)),\n              _cache[4] || (_cache[4] = _createElementVNode(\"p\", null, \"Verbreken stopt het lezen direct. De toestemming zelf trek je in bij Microsoft Entra onder Bedrijfsapps.\", -1 /* CACHED */))\n            ], 64 /* STABLE_FRAGMENT */))\n          : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n              _cache[5] || (_cache[5] = _createElementVNode(\"p\", null, \"Velkom leest afspraken uit ruimteagenda’s en maakt externe deelnemers zichtbaar als verwacht bezoek. Velkom schrijft niets terug naar Outlook.\", -1 /* CACHED */)),\n              _cache[6] || (_cache[6] = _createElementVNode(\"ol\", null, [\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Registreer Velkom in Microsoft Entra.\"),\n                  _createTextVNode(\" Ga naar App registrations, kies New registration en kies alleen accounts in de eigen organisatie. Bewaar de tenant-ID en client-ID. \"),\n                  _createElementVNode(\"a\", {\n                    href: \"https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app\",\n                    target: \"_blank\",\n                    rel: \"noopener noreferrer\"\n                  }, \"Uitleg appregistratie bij Microsoft\"),\n                  _createTextVNode(\".\")\n                ]),\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Maak een clientsecret aan.\"),\n                  _createTextVNode(\" Open Certificates & secrets en kies New client secret. Bewaar de waarde en de vervaldatum veilig. Deze waarde is alleen direct na het aanmaken zichtbaar. \"),\n                  _createElementVNode(\"a\", {\n                    href: \"https://learn.microsoft.com/en-us/entra/identity-platform/how-to-add-credentials\",\n                    target: \"_blank\",\n                    rel: \"noopener noreferrer\"\n                  }, \"Uitleg toegangssleutel bij Microsoft\"),\n                  _createTextVNode(\".\")\n                ]),\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Beperk toegang tot de gekozen ruimteagenda’s.\"),\n                  _createTextVNode(\" Registreer de applicatie als service principal in Exchange Online PowerShell en geef de rol \"),\n                  _createElementVNode(\"code\", null, \"Application Calendars.Read\"),\n                  _createTextVNode(\" met een scope die alleen de afgesproken ruimte-mailboxen bevat. Voeg geen organisatiebrede agendarechten toe. Controleer dat een mailbox buiten de scope wordt geweigerd. \"),\n                  _createElementVNode(\"a\", {\n                    href: \"https://learn.microsoft.com/en-us/exchange/permissions-exo/application-rbac\",\n                    target: \"_blank\",\n                    rel: \"noopener noreferrer\"\n                  }, \"Uitleg beperkte agendatoegang bij Microsoft\"),\n                  _createTextVNode(\".\")\n                ]),\n                _createElementVNode(\"li\", null, [\n                  _createElementVNode(\"strong\", null, \"Draag de gegevens veilig over aan Tech_42.\"),\n                  _createTextVNode(\" We hebben de tenant-ID, client-ID, clientsecret met vervaldatum en de e-mailadressen van de ruimteagenda’s nodig. Stem met je beheerder een veilige overdracht af. Plaats de sleutel niet in een gewone e-mail.\")\n                ])\n              ], -1 /* CACHED */)),\n              _cache[7] || (_cache[7] = _createElementVNode(\"p\", null, [\n                _createElementVNode(\"strong\", null, \"Controleer de privacy-instellingen vóór het aansluiten.\"),\n                _createTextVNode(\" Laat de Microsoft-beheerder controleren dat privé-, persoonlijke en vertrouwelijke afspraken in de ruimteagenda afgeschermd blijven. Stel voor de ruimte-mailbox \"),\n                _createElementVNode(\"code\", null, \"RemovePrivateProperty=False\"),\n                _createTextVNode(\" in en bewijs met een testafspraak dat het privacykenmerk behouden blijft voordat Tech_42 de koppeling aansluit.\")\n              ], -1 /* CACHED */)),\n              _cache[8] || (_cache[8] = _createElementVNode(\"p\", null, \"Tech_42 richt de verbinding in en controleert de toegang. Daarna haalt Velkom de afspraken automatisch op. Stem vooraf met je Microsoft-beheerder af welke afspraak- en deelnemersgegevens mogen worden gebruikt en welke privacy- en bewaartermijnen gelden.\", -1 /* CACHED */)),\n              _cache[9] || (_cache[9] = _createElementVNode(\"p\", null, \"De huidige koppeling gebruikt een clientsecret. Microsoft adviseert voor productie een certificaat of federatieve authenticatie; die varianten ondersteunt Velkom nog niet.\", -1 /* CACHED */))\n            ], 64 /* STABLE_FRAGMENT */)),\n        _cache[10] || (_cache[10] = _createElementVNode(\"h3\", null, \"Een bezoekafspraak maken\", -1 /* CACHED */)),\n        _cache[11] || (_cache[11] = _createElementVNode(\"ol\", null, [\n          _createElementVNode(\"li\", null, [\n            _createTextVNode(\"Open \"),\n            _createElementVNode(\"a\", {\n              href: \"https://outlook.office.com/calendar/\",\n              target: \"_blank\",\n              rel: \"noopener noreferrer\"\n            }, \"Outlook Agenda\"),\n            _createTextVNode(\" en kies \"),\n            _createElementVNode(\"strong\", null, \"Nieuwe gebeurtenis\"),\n            _createTextVNode(\" in een agenda die aan Velkom is gekoppeld.\")\n          ]),\n          _createElementVNode(\"li\", null, \"Vul een titel, datum, begintijd en eindtijd in.\"),\n          _createElementVNode(\"li\", null, [\n            _createElementVNode(\"strong\", null, \"Voeg de bezoekers toe bij Vereiste deelnemers uitnodigen.\"),\n            _createTextVNode(\" Dit veld heet in sommige Outlook-versies \"),\n            _createElementVNode(\"strong\", null, \"Deelnemers uitnodigen\"),\n            _createTextVNode(\". Vul voor iedere bezoeker het e-mailadres in. Alleen een naam in de titel of beschrijving zetten is niet voldoende.\")\n          ]),\n          _createElementVNode(\"li\", null, \"Reserveer de ruimte waarvan de agenda aan Velkom is gekoppeld.\"),\n          _createElementVNode(\"li\", null, [\n            _createTextVNode(\"Kies \"),\n            _createElementVNode(\"strong\", null, \"Verzenden\"),\n            _createTextVNode(\" om de uitnodiging te versturen.\")\n          ])\n        ], -1 /* CACHED */)),\n        _cache[12] || (_cache[12] = _createElementVNode(\"p\", null, [\n          _createElementVNode(\"strong\", null, \"Zonder uitgenodigde externe deelnemers verschijnt er geen verwacht bezoek.\"),\n          _createTextVNode(\" Interne collega’s worden niet als bezoeker geïmporteerd. Het e-mailadres van de organisator moet overeenkomen met één actieve contactpersoon onder \"),\n          _createElementVNode(\"strong\", null, \"Contactpersonen\"),\n          _createTextVNode(\" in Velkom; die persoon wordt de gastheer.\")\n        ], -1 /* CACHED */)),\n        _cache[13] || (_cache[13] = _createElementVNode(\"p\", null, [\n          _createTextVNode(\"Velkom haalt wijzigingen iedere vijf minuten op en toont ze daarna bij \"),\n          _createElementVNode(\"strong\", null, \"Bezoeken\"),\n          _createTextVNode(\". Gebruik voor toekomstige afspraken de periode \"),\n          _createElementVNode(\"strong\", null, \"Komende 7 dagen\"),\n          _createTextVNode(\".\")\n        ], -1 /* CACHED */)),\n        _cache[14] || (_cache[14] = _createElementVNode(\"p\", null, \"Velkom leest de agenda. Afspraken toevoegen, wijzigen en annuleren doe je in Outlook. Privéafspraken en afspraken met verborgen deelnemers worden niet als verwacht bezoek getoond.\", -1 /* CACHED */))\n      ])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftInstructions.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftInstructions.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftInstructions.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftInstructions.vue\";script.__scopeId = \"data-v-c559dae3\";export default script;","<script setup lang=\"ts\">\nimport { nextTick, reactive, ref, useId, watch } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport Dialog from \"../../ui/Dialog.vue\";\nimport Button from \"../../ui/Button.vue\";\nimport Checkbox from \"../../ui/Checkbox.vue\";\nimport FormField from \"../../ui/FormField.vue\";\nimport Textarea from \"../../ui/Textarea.vue\";\nimport Skeleton from \"../../ui/Skeleton.vue\";\nimport { useLoadingIndicator } from \"../../../lib/loading\";\nimport { useGuardedForm } from \"../../../composables/useFormGuard\";\nimport { parseMicrosoftInternalDomains } from \"../../../lib/outlook-tenant\";\n\nconst props = defineProps<{ open: boolean }>();\nconst emit = defineEmits<{ close: []; saved: [] }>();\nconst api = rpc(\"velkom:admin\");\ntype Room = { name: string; mailbox: string };\nconst rooms = ref<Room[]>([]);\nconst loading = ref(false);\nconst loadingIndicator = useLoadingIndicator(() => loading.value);\nconst saving = ref(false);\nconst error = ref(false);\nconst errors = ref<Record<string, string>>({});\nconst fieldPrefix = useId();\nconst model = reactive({ mailboxes: [] as string[], internalDomains: \"\" });\nconst guard = useGuardedForm(\"Microsoft-ruimtes\", model, { active: () => props.open && !loading.value });\n\nasync function load(): Promise<void> {\n  if (loading.value)\n    return;\n  loading.value = true;\n  error.value = false;\n  errors.value = {};\n  try {\n    const result = await api.microsoftRooms();\n    rooms.value = result.items;\n    // Suggest the rooms' own domain: colleagues there are not visitors.\n    const domains = result.internalDomains.length ? result.internalDomains : [...new Set(result.items.map(room => room.mailbox.split(\"@\")[1]))];\n    guard.load({ mailboxes: result.selected, internalDomains: domains.join(\"\\n\") });\n  } catch {\n    rooms.value = [];\n    error.value = true;\n  } finally {\n    loading.value = false;\n  }\n}\n\nfunction selectRoom(room: Room, selected: boolean): void {\n  model.mailboxes = selected ? [...model.mailboxes, room.mailbox] : model.mailboxes.filter(mailbox => mailbox !== room.mailbox);\n}\n\nasync function save(): Promise<void> {\n  if (saving.value || loading.value || error.value)\n    return;\n  saving.value = true;\n  errors.value = {};\n  try {\n    const result = await api.saveMicrosoftRooms({ mailboxes: model.mailboxes, internalDomains: parseMicrosoftInternalDomains(model.internalDomains) });\n    if (!result.ok) {\n      errors.value = result.errors;\n      await nextTick();\n      document.getElementById(`${fieldPrefix}-${Object.keys(result.errors)[0]}`)?.focus();\n      return;\n    }\n    guard.commit();\n    emit(\"saved\");\n  } catch {\n    errors.value = { form: \"De ruimtes konden niet worden opgeslagen. Probeer het opnieuw.\" };\n  } finally {\n    saving.value = false;\n  }\n}\n\nasync function requestClose(): Promise<void> {\n  if (!saving.value && await guard.confirmClose())\n    emit(\"close\");\n}\n\nwatch(() => props.open, open => { if (open) void load(); }, { immediate: true });\n</script>\n\n<template>\n  <Dialog :open=\"open\" title=\"Ruimtes kiezen\" description=\"Velkom leest alleen de afspraken in de ruimtes die je hier kiest. Persoonlijke agenda’s leest Velkom nooit.\" :width=\"640\" :pending=\"saving\" :guard=\"guard\" @close=\"emit('close')\">\n    <div class=\"microsoft-rooms\" :aria-busy=\"loading || saving\">\n      <Skeleton v-if=\"loadingIndicator.holding\" label=\"Ruimtes laden\" :visible=\"loadingIndicator.visible\" :count=\"4\" :height=\"44\" />\n      <div v-else-if=\"error\" role=\"alert\"><p class=\"microsoft-rooms__text\">De ruimtes konden niet worden geladen.</p><Button @click=\"load\">Opnieuw proberen</Button></div>\n      <template v-else>\n        <fieldset class=\"microsoft-rooms__choices\" :disabled=\"saving\" :aria-describedby=\"errors.mailboxes ? `${fieldPrefix}-mailbox-error` : undefined\">\n          <legend :id=\"`${fieldPrefix}-mailboxes`\" tabindex=\"-1\">Ruimtes</legend>\n          <Checkbox v-for=\"room in rooms\" :key=\"room.mailbox\" :model-value=\"model.mailboxes.includes(room.mailbox)\" :label=\"room.name\" :description=\"room.mailbox\" :disabled=\"saving\" @update:model-value=\"selectRoom(room, $event)\" />\n          <p v-if=\"!rooms.length\" class=\"microsoft-rooms__text\">Microsoft heeft geen vergaderruimtes gevonden in je organisatie. Maak een ruimte aan in het Microsoft 365-beheercentrum onder Ruimtes en apparatuur.</p>\n          <p v-if=\"errors.mailboxes\" :id=\"`${fieldPrefix}-mailbox-error`\" class=\"microsoft-rooms__error\" role=\"alert\">{{ errors.mailboxes }}</p>\n        </fieldset>\n        <FormField label=\"Eigen e-maildomeinen\" :field-id=\"`${fieldPrefix}-internalDomains`\" help=\"Deelnemers met deze domeinen zijn medewerkers en worden niet als bezoeker getoond. Zet ieder domein op een eigen regel.\" :error=\"errors.internalDomains\">\n          <Textarea v-model=\"model.internalDomains\" :rows=\"3\" :disabled=\"saving\" />\n        </FormField>\n        <aside class=\"microsoft-rooms__privacy\" aria-label=\"Zo gaat Velkom met je agenda’s om\">\n          <p class=\"microsoft-rooms__privacy-title\">Zo gaat Velkom met je agenda’s om</p>\n          <ul>\n            <li>Velkom leest alleen de ruimtes die je hier aanvinkt, en daarvan alleen tijd, organisator en deelnemers. Onderwerp, inhoud en bijlagen leest Velkom niet.</li>\n            <li>Een ruimteagenda wist standaard het privékenmerk van een afspraak. Daarom kijkt Velkom bij elke afspraak in de agenda van de organisator alleen of díe afspraak privé is. Privéafspraken worden nooit verwacht bezoek. Verder leest Velkom niets in persoonlijke agenda’s.</li>\n            <li>Velkom schrijft niets naar Microsoft. Verbreken stopt het lezen direct; de toestemming zelf trek je in bij Microsoft Entra onder Bedrijfsapps.</li>\n          </ul>\n        </aside>\n        <p v-if=\"errors.form\" class=\"microsoft-rooms__error\" role=\"alert\">{{ errors.form }}</p>\n      </template>\n    </div>\n    <template #footer>\n      <Button :disabled=\"saving\" @click=\"requestClose\">Annuleren</Button>\n      <Button variant=\"primary\" :disabled=\"loading || saving || error\" @click=\"save\">{{ saving ? \"Opslaan en synchroniseren...\" : \"Opslaan\" }}</Button>\n    </template>\n  </Dialog>\n</template>\n\n<style scoped>\n.microsoft-rooms { display: flex; flex-direction: column; gap: 20px; font-size: 14px; }\n.microsoft-rooms__text { margin: 0 0 12px; line-height: 1.5; }\n.microsoft-rooms__choices { min-width: 0; margin: 0; padding: 0; border: 0; display: flex; flex-direction: column; gap: 14px; }\n.microsoft-rooms__choices legend { margin-bottom: 14px; font-weight: 700; }\n.microsoft-rooms__privacy { padding: 14px 16px; border: 1px solid var(--border); border-radius: 12px; color: var(--muted-foreground); line-height: 1.5; }\n.microsoft-rooms__privacy-title { margin: 0 0 6px; font-weight: 700; color: var(--foreground); }\n.microsoft-rooms__privacy ul { margin: 0; padding-left: 18px; display: flex; flex-direction: column; gap: 6px; }\n.microsoft-rooms__error { margin: 0; color: var(--danger); font-size: 14px; line-height: 1.5; }\n</style>\n","<template>\n  <textarea :id=\"control.id.value\" v-model=\"model\" class=\"v-control textarea\" :rows=\"rows\" :placeholder=\"placeholder\"\n            :disabled=\"disabled\" :aria-describedby=\"control.describedBy.value\"\n            :aria-invalid=\"control.invalid.value || undefined\" :aria-required=\"control.required.value || undefined\" />\n</template>\n\n<script setup lang=\"ts\">\nimport { useFieldControl } from \"../../lib/formField\";\n\nconst props = withDefaults(defineProps<{ id?: string; rows?: number; placeholder?: string; disabled?: boolean }>(),\n  { id: undefined, rows: 4, placeholder: \"\", disabled: false });\n\nconst model = defineModel<string>({ default: \"\" });\nconst control = useFieldControl(props);\n</script>\n\n<style scoped>\n.textarea {\n  resize: vertical;\n  min-height: 88px;\n}\n</style>\n","import { vModelText as _vModelText, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\", \"rows\", \"placeholder\", \"disabled\", \"aria-describedby\", \"aria-invalid\", \"aria-required\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return _withDirectives((_openBlock(), _createElementBlock(\"textarea\", {\n    id: $setup.control.id.value,\n    \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model) = $event)),\n    class: \"v-control textarea\",\n    rows: $props.rows,\n    placeholder: $props.placeholder,\n    disabled: $props.disabled,\n    \"aria-describedby\": $setup.control.describedBy.value,\n    \"aria-invalid\": $setup.control.invalid.value || undefined,\n    \"aria-required\": $setup.control.required.value || undefined\n  }, null, 8 /* PROPS */, _hoisted_1)), [\n    [_vModelText, $setup.model]\n  ])\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Textarea.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Textarea.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Textarea.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/ui/Textarea.vue\";script.__scopeId = \"data-v-96a4d0a4\";export default script;","const storageKey = \"velkom:microsoft-browser\";\n/** The two Microsoft round trips: the admin's sign-in (platform OAuth session) and Microsoft's admin consent answer. */\nexport type MicrosoftCallback =\n  | { kind: \"signin\"; sessionToken: string; browserSecret: string }\n  | { kind: \"consent\"; state: string; tenant: string; adminConsent: string; browserSecret: string }\n  | { kind: \"error\" };\nlet callback: MicrosoftCallback | null = null;\n\n/** Strip one-time callback parameters before bootstrap can render a login or error screen. */\nexport function captureMicrosoftCallback(): void {\n  const url = new URL(window.location.href);\n  const consentKeys = [\"admin_consent\", \"tenant\", \"state\", \"error\", \"error_description\", \"error_uri\", \"scope\"];\n  const tokens = url.searchParams.getAll(\"oauth2session\");\n  const consent = consentKeys.some(key => url.searchParams.has(key));\n  if (!tokens.length && !consent)\n    return;\n  const values = Object.fromEntries(consentKeys.map(key => [key, url.searchParams.get(key) ?? \"\"]));\n  for (const key of [\"oauth2session\", ...consentKeys])\n    url.searchParams.delete(key);\n  url.hash = \"#/o/customer/koppelingen\";\n  window.history.replaceState(window.history.state, \"\", url.toString());\n  // The router read the hash at startup; Microsoft's consent redirect carries none, so announce the new one.\n  window.dispatchEvent(new Event(\"hashchange\"));\n  callback = { kind: \"error\" };\n  try {\n    const browserSecret = window.sessionStorage.getItem(storageKey) ?? \"\";\n    if (!/^[a-f0-9]{64}$/.test(browserSecret))\n      return;\n    if (tokens.length === 1 && !consent && /^[A-Za-z0-9_-]{22}$/.test(tokens[0]))\n      callback = { kind: \"signin\", sessionToken: tokens[0], browserSecret };\n    else if (!tokens.length && !values.error && /^[A-Za-z0-9_-]{43}$/.test(values.state))\n      callback = { kind: \"consent\", state: values.state, tenant: values.tenant, adminConsent: values.admin_consent, browserSecret };\n    // The consent answer ends the flow; the sign-in answer still needs the secret for that next step.\n    if (callback.kind !== \"signin\")\n      window.sessionStorage.removeItem(storageKey);\n  } catch {\n    // Storage-denied callbacks cannot prove that this browser started the connection.\n  }\n}\n\nexport function hasMicrosoftSignIn(): boolean {\n  return callback?.kind === \"signin\";\n}\n\n/** Sends a returning sign-in straight on to Microsoft's consent screen, before the app renders. Returns true while navigating away. */\nexport async function continueMicrosoftSignIn(finish: (input: { sessionToken: string; browserSecret: string }) => Promise<{ consentUrl: string }>, options: { now?: () => number } = {}): Promise<boolean> {\n  if (callback?.kind !== \"signin\")\n    return false;\n  const pending = callback;\n  callback = null;\n  const now = options.now ?? Date.now;\n  const started = now();\n  try {\n    const { consentUrl } = await finish({ sessionToken: pending.sessionToken, browserSecret: pending.browserSecret });\n    // Keep the busy screen up for a second so it reads as a step, not a flicker.\n    await new Promise(resolve => window.setTimeout(resolve, Math.max(0, 1000 - (now() - started))));\n    window.location.assign(microsoftLoginUrl(consentUrl));\n    return true;\n  } catch {\n    callback = { kind: \"error\" };\n    return false;\n  }\n}\n\nexport function takeMicrosoftCallback(): MicrosoftCallback | null {\n  const result = callback;\n  callback = null;\n  return result;\n}\n\nexport function createMicrosoftBrowserSecret(): string {\n  const bytes = window.crypto.getRandomValues(new Uint8Array(32));\n  const secret = Array.from(bytes, value => value.toString(16).padStart(2, \"0\")).join(\"\");\n  window.sessionStorage.setItem(storageKey, secret);\n  return secret;\n}\n\nexport function clearMicrosoftBrowserSecret(): void {\n  window.sessionStorage.removeItem(storageKey);\n}\n\n/** Only ever navigate to Microsoft's own login host. */\nexport function microsoftLoginUrl(value: string): string {\n  const url = new URL(value);\n  if (url.protocol !== \"https:\" || url.hostname !== \"login.microsoftonline.com\" || url.username || url.password || url.port)\n    throw new Error(\"Invalid Microsoft login URL\");\n  return url.toString();\n}\n\nexport function parseMicrosoftInternalDomains(value: string): string[] {\n  return [...new Set(value.split(/[,\\n]/).map(domain => domain.trim().toLowerCase()).filter(Boolean))];\n}\n","import { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createVNode as _createVNode, createElementBlock as _createElementBlock, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  key: 1,\n  role: \"alert\"\n}\nconst _hoisted_3 = [\"disabled\", \"aria-describedby\"]\nconst _hoisted_4 = [\"id\"]\nconst _hoisted_5 = {\n  key: 0,\n  class: \"microsoft-rooms__text\"\n}\nconst _hoisted_6 = [\"id\"]\nconst _hoisted_7 = {\n  key: 0,\n  class: \"microsoft-rooms__error\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"Dialog\"], {\n    open: $props.open,\n    title: \"Ruimtes kiezen\",\n    description: \"Velkom leest alleen de afspraken in de ruimtes die je hier kiest. Persoonlijke agenda’s leest Velkom nooit.\",\n    width: 640,\n    pending: $setup.saving,\n    guard: $setup.guard,\n    onClose: _cache[1] || (_cache[1] = $event => ($setup.emit('close')))\n  }, {\n    footer: _withCtx(() => [\n      _createVNode($setup[\"Button\"], {\n        disabled: $setup.saving,\n        onClick: $setup.requestClose\n      }, {\n        default: _withCtx(() => _cache[5] || (_cache[5] = [\n          _createTextVNode(\"Annuleren\", -1 /* CACHED */)\n        ])),\n        _: 1 /* STABLE */,\n        __: [5]\n      }, 8 /* PROPS */, [\"disabled\"]),\n      _createVNode($setup[\"Button\"], {\n        variant: \"primary\",\n        disabled: $setup.loading || $setup.saving || $setup.error,\n        onClick: $setup.save\n      }, {\n        default: _withCtx(() => [\n          _createTextVNode(_toDisplayString($setup.saving ? \"Opslaan en synchroniseren...\" : \"Opslaan\"), 1 /* TEXT */)\n        ]),\n        _: 1 /* STABLE */\n      }, 8 /* PROPS */, [\"disabled\"])\n    ]),\n    default: _withCtx(() => [\n      _createElementVNode(\"div\", {\n        class: \"microsoft-rooms\",\n        \"aria-busy\": $setup.loading || $setup.saving\n      }, [\n        ($setup.loadingIndicator.holding)\n          ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n              key: 0,\n              label: \"Ruimtes laden\",\n              visible: $setup.loadingIndicator.visible,\n              count: 4,\n              height: 44\n            }, null, 8 /* PROPS */, [\"visible\"]))\n          : ($setup.error)\n            ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n                _cache[3] || (_cache[3] = _createElementVNode(\"p\", { class: \"microsoft-rooms__text\" }, \"De ruimtes konden niet worden geladen.\", -1 /* CACHED */)),\n                _createVNode($setup[\"Button\"], { onClick: $setup.load }, {\n                  default: _withCtx(() => _cache[2] || (_cache[2] = [\n                    _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                  ])),\n                  _: 1 /* STABLE */,\n                  __: [2]\n                })\n              ]))\n            : (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                _createElementVNode(\"fieldset\", {\n                  class: \"microsoft-rooms__choices\",\n                  disabled: $setup.saving,\n                  \"aria-describedby\": $setup.errors.mailboxes ? `${$setup.fieldPrefix}-mailbox-error` : undefined\n                }, [\n                  _createElementVNode(\"legend\", {\n                    id: `${$setup.fieldPrefix}-mailboxes`,\n                    tabindex: \"-1\"\n                  }, \"Ruimtes\", 8 /* PROPS */, _hoisted_4),\n                  (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.rooms, (room) => {\n                    return (_openBlock(), _createBlock($setup[\"Checkbox\"], {\n                      key: room.mailbox,\n                      \"model-value\": $setup.model.mailboxes.includes(room.mailbox),\n                      label: room.name,\n                      description: room.mailbox,\n                      disabled: $setup.saving,\n                      \"onUpdate:modelValue\": $event => ($setup.selectRoom(room, $event))\n                    }, null, 8 /* PROPS */, [\"model-value\", \"label\", \"description\", \"disabled\", \"onUpdate:modelValue\"]))\n                  }), 128 /* KEYED_FRAGMENT */)),\n                  (!$setup.rooms.length)\n                    ? (_openBlock(), _createElementBlock(\"p\", _hoisted_5, \"Microsoft heeft geen vergaderruimtes gevonden in je organisatie. Maak een ruimte aan in het Microsoft 365-beheercentrum onder Ruimtes en apparatuur.\"))\n                    : _createCommentVNode(\"v-if\", true),\n                  ($setup.errors.mailboxes)\n                    ? (_openBlock(), _createElementBlock(\"p\", {\n                        key: 1,\n                        id: `${$setup.fieldPrefix}-mailbox-error`,\n                        class: \"microsoft-rooms__error\",\n                        role: \"alert\"\n                      }, _toDisplayString($setup.errors.mailboxes), 9 /* TEXT, PROPS */, _hoisted_6))\n                    : _createCommentVNode(\"v-if\", true)\n                ], 8 /* PROPS */, _hoisted_3),\n                _createVNode($setup[\"FormField\"], {\n                  label: \"Eigen e-maildomeinen\",\n                  \"field-id\": `${$setup.fieldPrefix}-internalDomains`,\n                  help: \"Deelnemers met deze domeinen zijn medewerkers en worden niet als bezoeker getoond. Zet ieder domein op een eigen regel.\",\n                  error: $setup.errors.internalDomains\n                }, {\n                  default: _withCtx(() => [\n                    _createVNode($setup[\"Textarea\"], {\n                      modelValue: $setup.model.internalDomains,\n                      \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.model.internalDomains) = $event)),\n                      rows: 3,\n                      disabled: $setup.saving\n                    }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n                  ]),\n                  _: 1 /* STABLE */\n                }, 8 /* PROPS */, [\"field-id\", \"error\"]),\n                _cache[4] || (_cache[4] = _createElementVNode(\"aside\", {\n                  class: \"microsoft-rooms__privacy\",\n                  \"aria-label\": \"Zo gaat Velkom met je agenda’s om\"\n                }, [\n                  _createElementVNode(\"p\", { class: \"microsoft-rooms__privacy-title\" }, \"Zo gaat Velkom met je agenda’s om\"),\n                  _createElementVNode(\"ul\", null, [\n                    _createElementVNode(\"li\", null, \"Velkom leest alleen de ruimtes die je hier aanvinkt, en daarvan alleen tijd, organisator en deelnemers. Onderwerp, inhoud en bijlagen leest Velkom niet.\"),\n                    _createElementVNode(\"li\", null, \"Een ruimteagenda wist standaard het privékenmerk van een afspraak. Daarom kijkt Velkom bij elke afspraak in de agenda van de organisator alleen of díe afspraak privé is. Privéafspraken worden nooit verwacht bezoek. Verder leest Velkom niets in persoonlijke agenda’s.\"),\n                    _createElementVNode(\"li\", null, \"Velkom schrijft niets naar Microsoft. Verbreken stopt het lezen direct; de toestemming zelf trek je in bij Microsoft Entra onder Bedrijfsapps.\")\n                  ])\n                ], -1 /* CACHED */)),\n                ($setup.errors.form)\n                  ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString($setup.errors.form), 1 /* TEXT */))\n                  : _createCommentVNode(\"v-if\", true)\n              ], 64 /* STABLE_FRAGMENT */))\n      ], 8 /* PROPS */, _hoisted_1)\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"open\", \"pending\", \"guard\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/customer/integrations/MicrosoftRoomsDialog.vue\";script.__scopeId = \"data-v-2dd533bd\";export default script;","import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = [\"aria-busy\"]\nconst _hoisted_2 = {\n  key: 1,\n  class: \"integrations__error\",\n  role: \"alert\"\n}\nconst _hoisted_3 = {\n  key: 2,\n  class: \"integrations__error\",\n  role: \"alert\"\n}\nconst _hoisted_4 = {\n  key: 3,\n  class: \"integrations__group\",\n  \"aria-labelledby\": \"integrations-calendar\"\n}\nconst _hoisted_5 = { class: \"integrations__grid\" }\nconst _hoisted_6 = {\n  key: 4,\n  class: \"integrations__empty\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    class: \"integrations\",\n    \"data-testid\": \"customer-integrations\",\n    \"aria-busy\": $setup.loading || $setup.syncing\n  }, [\n    _createVNode($setup[\"PageHeader\"], {\n      title: \"Koppelingen\",\n      context: $props.bootstrap.customer.name,\n      description: \"Wat je kunt koppelen en wat al is aangesloten.\"\n    }, null, 8 /* PROPS */, [\"context\"]),\n    ($setup.loadingIndicator.holding)\n      ? (_openBlock(), _createBlock($setup[\"Skeleton\"], {\n          key: 0,\n          label: \"Koppelingen laden\",\n          visible: $setup.loadingIndicator.visible,\n          layout: \"grid\",\n          count: 1,\n          height: 220,\n          \"min-width\": 320\n        }, null, 8 /* PROPS */, [\"visible\"]))\n      : ($setup.error)\n        ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n            _cache[6] || (_cache[6] = _createElementVNode(\"p\", { class: \"integrations__text\" }, \"Koppelingen niet beschikbaar. Controleer je verbinding en toegang en probeer het opnieuw.\", -1 /* CACHED */)),\n            _createElementVNode(\"button\", {\n              type: \"button\",\n              class: \"integrations__retry\",\n              onClick: $setup.load\n            }, \"Opnieuw proberen\")\n          ]))\n        : _createCommentVNode(\"v-if\", true),\n    ($setup.connectionError)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_3, _toDisplayString($setup.connectionError), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    (!$setup.loadingIndicator.holding && !$setup.error && $setup.items.length)\n      ? (_openBlock(), _createElementBlock(\"section\", _hoisted_4, [\n          _cache[7] || (_cache[7] = _createElementVNode(\"header\", { class: \"integrations__group-header\" }, [\n            _createElementVNode(\"h2\", { id: \"integrations-calendar\" }, \"Agenda\"),\n            _createElementVNode(\"span\", null, \"Moment 01 Vooraf\")\n          ], -1 /* CACHED */)),\n          _createElementVNode(\"div\", _hoisted_5, [\n            (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.items, (item) => {\n              return (_openBlock(), _createBlock($setup[\"IntegrationCard\"], {\n                key: item.id,\n                item: item,\n                pending: $setup.pending || $setup.syncing || $setup.seeding,\n                syncing: $setup.syncing,\n                seeding: $setup.seeding,\n                onInstructions: _cache[0] || (_cache[0] = $event => ($setup.instructionsOpen = true)),\n                onConnect: $setup.connect,\n                onRooms: _cache[1] || (_cache[1] = $event => ($setup.roomsOpen = true)),\n                onDisconnect: _cache[2] || (_cache[2] = $event => ($setup.disconnectOpen = true)),\n                onSeed: $setup.seed,\n                onSynchronize: $setup.synchronize\n              }, null, 8 /* PROPS */, [\"item\", \"pending\", \"syncing\", \"seeding\"]))\n            }), 128 /* KEYED_FRAGMENT */))\n          ])\n        ]))\n      : (!$setup.loadingIndicator.holding && !$setup.error)\n        ? (_openBlock(), _createElementBlock(\"p\", _hoisted_6, \"Er zijn nog geen koppelingen vrijgegeven voor je organisatie.\"))\n        : _createCommentVNode(\"v-if\", true),\n    _createVNode($setup[\"MicrosoftInstructions\"], {\n      open: $setup.instructionsOpen,\n      \"self-service\": Boolean($setup.items[0]?.canConnect || $setup.items[0]?.tenantConnection),\n      onClose: _cache[3] || (_cache[3] = $event => ($setup.instructionsOpen = false))\n    }, null, 8 /* PROPS */, [\"open\", \"self-service\"]),\n    _createVNode($setup[\"MicrosoftRoomsDialog\"], {\n      open: $setup.roomsOpen,\n      onClose: _cache[4] || (_cache[4] = $event => ($setup.roomsOpen = false)),\n      onSaved: $setup.roomsSaved\n    }, null, 8 /* PROPS */, [\"open\"]),\n    _createVNode($setup[\"ConfirmDialog\"], {\n      open: $setup.disconnectOpen,\n      title: \"Microsoft-verbinding verbreken\",\n      message: \"Wil je de Microsoft-verbinding verbreken?\",\n      consequence: \"Velkom stopt met het lezen van de ruimtes. Eerder geïmporteerde bezoeken blijven bewaard. De toestemming zelf trek je in bij Microsoft (Entra, Bedrijfsapps).\",\n      \"confirm-label\": \"Verbinding verbreken\",\n      \"pending-label\": \"Verbreken...\",\n      pending: $setup.pending,\n      onCancel: _cache[5] || (_cache[5] = $event => ($setup.disconnectOpen = false)),\n      onConfirm: $setup.disconnect\n    }, null, 8 /* PROPS */, [\"open\", \"pending\"])\n  ], 8 /* PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/KoppelingenView.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/KoppelingenView.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/KoppelingenView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/customer/KoppelingenView.vue\";script.__scopeId = \"data-v-a9a8ae43\";export default script;","import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createVNode as _createVNode, Fragment as _Fragment, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return ($setup.allowed)\n    ? (_openBlock(), _createBlock(_resolveDynamicComponent($setup.views[$setup.route.section]), {\n        key: 0,\n        bootstrap: $props.bootstrap,\n        onLogout: _cache[0] || (_cache[0] = $event => ($setup.emit('logout'))),\n        onOrganizationSaved: _cache[1] || (_cache[1] = $event => ($setup.emit('organizationSaved', $event)))\n      }, null, 40 /* PROPS, NEED_HYDRATION */, [\"bootstrap\"]))\n    : (_openBlock(), _createElementBlock(_Fragment, { key: 1 }, [\n        _createVNode($setup[\"PageHeader\"], { title: \"Pagina niet beschikbaar\" }),\n        _createVNode($setup[\"EmptyState\"], {\n          kind: \"error\",\n          title: \"Deze pagina is niet beschikbaar\",\n          description: \"Kies een pagina in de navigatie.\",\n          \"data-testid\": \"customer-route-denied\"\n        })\n      ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/RouteView.vue?type=script\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/RouteView.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/views/RouteView.vue\";export default script;","import { isCustomerRouteAllowed } from \"./customer.ts\";\nimport { buildHash, type AdminRoute } from \"./route-contract.ts\";\n\ndeclare global {\n  interface Window {\n    wwFeedback?: {\n      setEnabled(enabled: boolean): void;\n      setPageUrl(url: string | null): void;\n      setUser(user: { name?: string; email?: string } | null): void;\n      clearDrafts(): void;\n    };\n  }\n}\n\nexport function feedbackPageUrl(options: { href: string; route: AdminRoute; features: readonly string[] }): string | null {\n  if (!isCustomerRouteAllowed(options))\n    return null;\n  const url = new URL(options.href);\n  url.search = \"\";\n  // Only admitted navigation enters feedback; reset tokens and search input stay out.\n  const { section, query, rest } = options.route;\n  url.hash = buildHash(\"customer\", section, query.tab ? { tab: query.tab } : {}, rest);\n  return url.href;\n}\n\nexport function mountFeedbackWidget(options: { user: { name: string; email: string }; pageUrl: () => string | null }): { update(): void; dispose(): void } {\n  function update(): void {\n    const api = window.wwFeedback;\n    if (!api)\n      return;\n    const url = options.pageUrl();\n    api.setPageUrl(url);\n    api.setUser(url ? options.user : null);\n    api.setEnabled(Boolean(url));\n  }\n  window.addEventListener(\"ww-feedback-ready\", update);\n  update();\n  if (!document.querySelector(\"script[data-ww-feedback]\")) {\n    const script = document.createElement(\"script\");\n    const attributes = {\n      type: \"module\", src: \"/.wh/ea/ap/ww.feedback/ap.mjs\", \"data-ww-feedback\": \"velkom-feedback\",\n      \"data-enabled\": \"off\", \"data-history\": \"off\", \"data-color\": \"var(--velkom-lime)\",\n      \"data-color-text\": \"var(--velkom-ink)\", \"data-radius\": \"24px\", \"data-font\": \"var(--font-body)\",\n    };\n    for (const [name, value] of Object.entries(attributes))\n      script.setAttribute(name, value);\n    document.body.append(script);\n  }\n  return {\n    update,\n    dispose() {\n      window.removeEventListener(\"ww-feedback-ready\", update);\n      window.wwFeedback?.setEnabled(false);\n      window.wwFeedback?.setPageUrl(null);\n      window.wwFeedback?.setUser(null);\n      window.wwFeedback?.clearDrafts();\n    },\n  };\n}\n","import { createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"AppShell\"], {\n    org: \"customer\",\n    \"org-name\": $props.bootstrap.customer.name,\n    section: $setup.route.section,\n    tab: $setup.route.query.tab ?? '',\n    \"nav-items\": $setup.navigation,\n    user: $setup.identity,\n    \"active-org\": $setup.organization,\n    onLogout: _cache[2] || (_cache[2] = $event => ($setup.emit('logout')))\n  }, {\n    default: _withCtx(() => [\n      _createVNode($setup[\"RouteView\"], {\n        bootstrap: $props.bootstrap,\n        onLogout: _cache[0] || (_cache[0] = $event => ($setup.emit('logout'))),\n        onOrganizationSaved: _cache[1] || (_cache[1] = $event => ($setup.emit('organizationSaved', $event)))\n      }, null, 8 /* PROPS */, [\"bootstrap\"])\n    ]),\n    _: 1 /* STABLE */\n  }, 8 /* PROPS */, [\"org-name\", \"section\", \"tab\", \"nav-items\", \"user\", \"active-org\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/CustomerApp.vue?type=script\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/CustomerApp.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/CustomerApp.vue\";export default script;","<script setup lang=\"ts\">\nimport { shallowRef } from \"vue\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { InvitationCredentials } from \"../../lib/customer\";\nimport Button from \"../ui/Button.vue\";\n\nconst props = defineProps<{ invitation: InvitationCredentials }>();\nconst emit = defineEmits<{ accepted: []; cancel: [] }>();\nconst pending = shallowRef(false);\nconst error = shallowRef(props.invitation.id ? \"\" : \"Deze uitnodigingslink is ongeldig. Vraag je beheerder om een nieuwe uitnodiging.\");\n\nasync function submit(): Promise<void> {\n  if (pending.value || !props.invitation.id)\n    return;\n  pending.value = true;\n  error.value = \"\";\n  try {\n    const result = await rpc(\"velkom:adminauth\").redeemInvitation(props.invitation);\n    if (!result.success) {\n      error.value = result.error;\n      return;\n    }\n    emit(\"accepted\");\n  } catch {\n    error.value = \"Dit is niet gelukt. Controleer je verbinding en probeer het opnieuw.\";\n  } finally {\n    pending.value = false;\n  }\n}\n</script>\n\n<template>\n  <h1 id=\"velkom-title\" class=\"invitation__title\">Uitnodiging accepteren</h1>\n  <p class=\"invitation__intro\">Na het accepteren log je in met een code per e-mail.</p>\n  <p v-if=\"error\" class=\"invitation__error\" role=\"alert\" data-testid=\"invitation-error\">{{ error }}</p>\n  <form class=\"invitation__form\" novalidate :aria-busy=\"pending\" @submit.prevent=\"submit\">\n    <Button v-if=\"invitation.id\" type=\"submit\" variant=\"primary\" class=\"invitation__submit\" :disabled=\"pending\" data-testid=\"invitation-submit\">{{ pending ? \"Bezig...\" : \"Uitnodiging accepteren\" }}</Button>\n    <Button variant=\"ghost\" class=\"invitation__return\" :disabled=\"pending\" @click=\"emit('cancel')\">Naar inloggen</Button>\n  </form>\n</template>\n\n<style scoped>\n.invitation__title { margin: 0 0 24px; font-family: var(--font-display); font-size: 48px; line-height: 1; font-weight: 800; letter-spacing: -0.03em; }\n.invitation__intro { margin: 0 0 24px; color: var(--muted-foreground); font-size: 17px; line-height: 1.5; }\n.invitation__form { display: flex; flex-direction: column; gap: 24px; }\n.invitation__submit { width: 100%; min-height: 48px; height: 48px; font-size: 16px; font-weight: 700; white-space: normal; }\n.invitation__return { align-self: center; min-height: 44px; height: auto; color: var(--foreground); font-size: 15px; font-weight: 600; text-decoration: underline; text-underline-offset: 3px; }\n.invitation__error { margin: 0 0 24px; padding: 14px 18px; border: 1px solid var(--danger); border-radius: var(--radius-panel); background: var(--danger-soft); color: var(--danger); }\n@media (max-width: 900px) {\n  .invitation__form { gap: 12px; }\n  .invitation__title { font-size: 46px; line-height: 0.94; font-weight: 650; letter-spacing: -0.07em; }\n  .invitation__intro { color: var(--foreground); }\n  .invitation__submit { margin-top: 6px; min-height: 58px; height: 58px; font-size: 17px; }\n  .invitation__return { font-weight: 700; }\n}\n</style>\n","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, createVNode as _createVNode, withModifiers as _withModifiers, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"invitation__error\",\n  role: \"alert\",\n  \"data-testid\": \"invitation-error\"\n}\nconst _hoisted_2 = [\"aria-busy\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _cache[2] || (_cache[2] = _createElementVNode(\"h1\", {\n      id: \"velkom-title\",\n      class: \"invitation__title\"\n    }, \"Uitnodiging accepteren\", -1 /* CACHED */)),\n    _cache[3] || (_cache[3] = _createElementVNode(\"p\", { class: \"invitation__intro\" }, \"Na het accepteren log je in met een code per e-mail.\", -1 /* CACHED */)),\n    ($setup.error)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_1, _toDisplayString($setup.error), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    _createElementVNode(\"form\", {\n      class: \"invitation__form\",\n      novalidate: \"\",\n      \"aria-busy\": $setup.pending,\n      onSubmit: _withModifiers($setup.submit, [\"prevent\"])\n    }, [\n      ($props.invitation.id)\n        ? (_openBlock(), _createBlock($setup[\"Button\"], {\n            key: 0,\n            type: \"submit\",\n            variant: \"primary\",\n            class: \"invitation__submit\",\n            disabled: $setup.pending,\n            \"data-testid\": \"invitation-submit\"\n          }, {\n            default: _withCtx(() => [\n              _createTextVNode(_toDisplayString($setup.pending ? \"Bezig...\" : \"Uitnodiging accepteren\"), 1 /* TEXT */)\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"disabled\"]))\n        : _createCommentVNode(\"v-if\", true),\n      _createVNode($setup[\"Button\"], {\n        variant: \"ghost\",\n        class: \"invitation__return\",\n        disabled: $setup.pending,\n        onClick: _cache[0] || (_cache[0] = $event => ($setup.emit('cancel')))\n      }, {\n        default: _withCtx(() => _cache[1] || (_cache[1] = [\n          _createTextVNode(\"Naar inloggen\", -1 /* CACHED */)\n        ])),\n        _: 1 /* STABLE */,\n        __: [1]\n      }, 8 /* PROPS */, [\"disabled\"])\n    ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_2)\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/InvitationForm.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/InvitationForm.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/InvitationForm.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/InvitationForm.vue\";script.__scopeId = \"data-v-eef7d98f\";export default script;","const key = \"velkom:login-return\";\ntype Storage = Pick<globalThis.Storage, \"getItem\" | \"setItem\" | \"removeItem\">;\n\nexport function rememberLoginReturn(options: { hash: string; storage?: Storage }): void {\n  try {\n    const storage = options.storage ?? sessionStorage;\n    if (options.hash.startsWith(\"#/o/customer/\"))\n      storage.setItem(key, options.hash);\n    else\n      storage.removeItem(key);\n  } catch {\n    // Storage is optional; authentication must still work when it is unavailable.\n  }\n}\n\n/** Consume the return route only after successful authentication, without replacing an explicit link. */\nexport function restoreLoginReturn(options: { hash: string; storage?: Storage }): string | null {\n  try {\n    const storage = options.storage ?? sessionStorage;\n    const hash = storage.getItem(key);\n    storage.removeItem(key);\n    return !options.hash && hash?.startsWith(\"#/o/customer/\") ? hash : null;\n  } catch {\n    return null;\n  }\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, shallowRef } from \"vue\";\nimport { startSSOLogin } from \"@webhare/frontend\";\nimport { rpc } from \"@webhare/rpc\";\nimport type { DevelopmentLoginAccount } from \"@mod-ww/js/auth/development-login\";\nimport CodeInput from \"@mod-vue/libs/auth/CodeInput.vue\";\nimport { useLoginCode } from \"@mod-vue/libs/auth/useLoginCode\";\nimport Button from \"../ui/Button.vue\";\nimport FormField from \"../ui/FormField.vue\";\nimport TextInput from \"../ui/TextInput.vue\";\nimport { rememberLoginReturn } from \"../../lib/login-return\";\n\nconst codeInput = shallowRef<{ focus: () => void } | null>(null);\nconst developmentLogins = shallowRef<DevelopmentLoginAccount[]>([]);\nconst googleTag = shallowRef<string | null>(null);\nconst googleError = shallowRef(\"\");\nconst googlePending = shallowRef(false);\nconst { email, code, step, error, busy, devCode, cooldown, changeEmail, requestCode: requestLoginCode, verifyCode } = useLoginCode({\n  api: {\n    requestLoginCode: input => rpc(\"velkom:admincode\").requestLoginCode(input),\n    async verifyLoginCode(input) {\n      const result = await rpc(\"velkom:admincode\").verifyLoginCode(input);\n      if (result.success)\n        rememberLoginReturn({ hash: window.location.hash });\n      return result;\n    },\n  },\n  focusEmail: () => document.getElementById(\"velkom-login-email\")?.focus(),\n  focusCode: () => codeInput.value?.focus(),\n});\nconst pending = computed(() => busy.value || googlePending.value);\nconst shownError = computed(() => error.value || googleError.value);\n\nasync function requestCode(): Promise<void> {\n  if (pending.value)\n    return;\n  await requestLoginCode();\n  if (step.value === \"code\" && !developmentLogins.value.some(account => account.email === email.value)) {\n    try { localStorage.setItem(\"velkom:last-email\", email.value); } catch { /* Browser storage is optional. */ }\n  }\n}\n\nasync function selectDevelopmentLogin(account: DevelopmentLoginAccount): Promise<void> {\n  if (pending.value)\n    return;\n  email.value = account.email;\n  await requestCode();\n}\n\nasync function googleLogin(): Promise<void> {\n  if (pending.value || !googleTag.value)\n    return;\n  googlePending.value = true;\n  googleError.value = \"\";\n  try {\n    await startSSOLogin(googleTag.value);\n  } catch {\n    googleError.value = \"Inloggen met Google is niet gelukt. Probeer het opnieuw.\";\n    googlePending.value = false;\n  }\n}\n\nonMounted(async () => {\n  try { email.value = localStorage.getItem(\"velkom:last-email\") ?? \"\"; } catch { /* Browser storage is optional. */ }\n  document.getElementById(\"velkom-login-email\")?.focus();\n  const initialEmail = email.value;\n  const [accounts, methods] = await Promise.allSettled([\n    rpc(\"velkom:adminauth\").getDevelopmentLogins(), rpc(\"velkom:adminauth\").getLoginMethods(),\n  ]);\n  if (accounts.status === \"fulfilled\") {\n    developmentLogins.value = accounts.value;\n    if (accounts.value[0] && email.value === initialEmail && step.value === \"email\" && !pending.value)\n      email.value = accounts.value[0].email;\n  }\n  if (methods.status === \"fulfilled\")\n    googleTag.value = methods.value.googleTag;\n});\n</script>\n\n<template>\n  <h1 id=\"velkom-title\" class=\"login__title\">{{ step === \"email\" ? \"Fijn dat je er bent.\" : \"Vul je inlogcode in\" }}</h1>\n  <p v-if=\"step === 'email'\" class=\"login__intro\">Log in met een eenmalige code per e-mail.</p>\n  <p v-else class=\"login__intro\">Als {{ email }} toegang heeft, ontvang je een code. Deze is 15 minuten geldig.</p>\n  <p v-if=\"shownError\" id=\"velkom-login-error\" class=\"login__error\" role=\"alert\" data-testid=\"auth-error\">{{ shownError }}</p>\n  <template v-if=\"step === 'email'\">\n    <Button v-if=\"googleTag\" class=\"login__google\" :disabled=\"pending\" data-testid=\"auth-google\" @click=\"googleLogin\">Inloggen met Google</Button>\n    <form class=\"login__form\" novalidate :aria-busy=\"pending\" @submit.prevent=\"requestCode\">\n      <FormField label=\"E-mailadres\" field-id=\"velkom-login-email\" :error=\"error || undefined\" required>\n        <TextInput v-model=\"email\" name=\"login\" type=\"email\" autocomplete=\"username\" :disabled=\"pending\" />\n      </FormField>\n      <Button type=\"submit\" variant=\"primary\" class=\"login__submit\" :disabled=\"pending\" data-testid=\"auth-request-code\">{{ pending ? \"Code versturen...\" : \"Stuur inlogcode\" }}</Button>\n    </form>\n    <section v-if=\"developmentLogins.length\" class=\"login__development\" aria-label=\"Ontwikkeltestlogins\">\n      <h2 class=\"login__development-title\">Ontwikkeltestlogins</h2>\n      <Button v-for=\"account in developmentLogins\" :key=\"account.key\" :disabled=\"pending\" :data-testid=\"'auth-development-' + account.key\" @click=\"selectDevelopmentLogin(account)\">{{ account.label }}</Button>\n    </section>\n  </template>\n  <form v-else class=\"login__form\" novalidate :aria-busy=\"pending\" @submit.prevent=\"verifyCode\">\n    <CodeInput ref=\"codeInput\" v-model=\"code\" class=\"login__code\" label=\"Inlogcode\" :disabled=\"pending\" :error=\"Boolean(error)\" :aria-describedby=\"shownError ? 'velkom-login-error' : undefined\" @paste-complete=\"verifyCode\" />\n    <p v-if=\"devCode\" class=\"login__hint\" data-testid=\"auth-development-code\">Testcode: {{ devCode }}</p>\n    <Button type=\"submit\" variant=\"primary\" class=\"login__submit\" :disabled=\"pending\" data-testid=\"auth-submit\">{{ pending ? \"Inloggen...\" : \"Inloggen\" }}</Button>\n    <Button variant=\"ghost\" :disabled=\"pending || cooldown > 0\" data-testid=\"auth-resend-code\" @click=\"requestCode\">{{ cooldown > 0 ? `Nieuwe code over ${cooldown} s` : \"Stuur een nieuwe code\" }}</Button>\n    <Button variant=\"ghost\" :disabled=\"pending\" @click=\"changeEmail\">Ander e-mailadres gebruiken</Button>\n  </form>\n</template>\n\n<style scoped>\n.login__title { margin: 0 0 24px; font-family: var(--font-display); font-size: 48px; line-height: 1; font-weight: 800; letter-spacing: -0.03em; }\n.login__intro { margin: 0 0 24px; font-size: 17px; line-height: 1.5; color: var(--muted-foreground); overflow-wrap: anywhere; }\n.login__form { display: flex; flex-direction: column; gap: 16px; }\n.login__form :deep(.field__label) { font-size: 15px; }\n.login__form :deep(input:not([type=\"checkbox\"])) { height: 56px; border: 1.5px solid var(--border-strong); background: var(--surface-raised); font-size: 16px; }\n.login__form :deep(input[aria-invalid=\"true\"]) { border-color: var(--danger); }\n.login__code { --codeinput-radius: var(--radius-control); --codeinput-border: var(--border-strong); --codeinput-bg: var(--surface-raised); --codeinput-fg: var(--foreground); --codeinput-focus: var(--foreground); --codeinput-focus-ring: var(--accent); --codeinput-error: var(--danger); }\n.login__submit, .login__google { width: 100%; min-height: 58px; height: 58px; font-weight: 700; }\n.login__google { margin-bottom: 24px; }\n.login__error { margin: 0 0 24px; padding: 14px 18px; border: 1px solid var(--danger); border-radius: var(--radius-panel); background: var(--danger-soft); color: var(--danger); }\n.login__hint { margin: 0; font-size: 14px; color: var(--muted-foreground); }\n.login__development { display: flex; flex-direction: column; gap: 10px; margin-top: 32px; padding-top: 24px; border-top: 1px solid var(--border); }\n.login__development-title { margin: 0 0 2px; font-size: 14px; font-weight: 600; }\n</style>\n","<template>\n  <div ref=\"rootEl\" class=\"codeinput\" :class=\"{ 'codeinput--error': error }\" role=\"group\" :aria-label=\"label\">\n    <input\n      v-for=\"(cell, i) in cells\"\n      :key=\"i\"\n      :ref=\"(el) => setRef(el, i)\"\n      class=\"codeinput__cell\"\n      type=\"text\"\n      inputmode=\"numeric\"\n      autocomplete=\"one-time-code\"\n      maxlength=\"1\"\n      :aria-label=\"`Cijfer ${i + 1}`\"\n      :disabled=\"disabled\"\n      :value=\"cell\"\n      @input=\"onInput(i, $event)\"\n      @keydown=\"onKeydown(i, $event)\"\n      @focus=\"onFocus($event)\"\n      @paste=\"onPaste($event)\"\n    />\n  </div>\n</template>\n\n<script setup lang=\"ts\">\n/* Six-cell input for an emailed code (mod::ww js/auth/code-login.ts). Style it with the --codeinput-* custom\n   properties. Deliberately has no \"complete\" event: typing the last digit must not submit. Only a paste of\n   exactly the code emits paste-complete, after update:modelValue. */\nimport { ref, watch } from \"vue\";\nimport { codeLength, parsePastedCode } from \"@mod-ww/js/auth/code-login-frontend\";\n\nconst props = withDefaults(defineProps<{ modelValue: string; disabled?: boolean; error?: boolean; label?: string }>(), {\n  disabled: false,\n  error: false,\n  label: \"Code\",\n});\nconst emit = defineEmits<{\n  (e: \"update:modelValue\", value: string): void;\n  (e: \"paste-complete\", value: string): void;\n}>();\n\nconst cells = ref<string[]>(Array.from({ length: codeLength }, () => \"\"));\nconst inputs = ref<HTMLInputElement[]>([]);\nconst rootEl = ref<HTMLElement | null>(null);\n\nfunction setRef(el: unknown, i: number) {\n  if (el instanceof HTMLInputElement)\n    inputs.value[i] = el;\n}\n\n// Immediate, so a development prefill shows up. Never emits: a prefill must not submit.\nwatch(() => props.modelValue, value => {\n  if (value === cells.value.join(\"\"))\n    return;\n  const digits = parsePastedCode(value ?? \"\").digits.split(\"\");\n  cells.value = Array.from({ length: codeLength }, (_, i) => digits[i] ?? \"\");\n}, { immediate: true });\n\nfunction commit() {\n  emit(\"update:modelValue\", cells.value.join(\"\"));\n}\n\nfunction focusCell(i: number) {\n  const el = inputs.value[i];\n  el?.focus();\n  el?.select();\n}\n\ndefineExpose({ focus: () => focusCell(Math.max(0, cells.value.findIndex(c => !c))) });\n\nfunction onInput(i: number, event: Event) {\n  const target = event.target as HTMLInputElement;\n  const digit = target.value.replace(/\\D/g, \"\").slice(-1);\n  cells.value[i] = digit;\n  target.value = digit;\n  commit();\n  if (digit && i < codeLength - 1)\n    focusCell(i + 1);\n}\n\nfunction onKeydown(i: number, event: KeyboardEvent) {\n  if (event.key === \"Backspace\" && !cells.value[i] && i > 0) {\n    event.preventDefault();\n    cells.value[i - 1] = \"\";\n    commit();\n    focusCell(i - 1);\n  } else if (event.key === \"ArrowLeft\" && i > 0) {\n    event.preventDefault();\n    focusCell(i - 1);\n  } else if (event.key === \"ArrowRight\" && i < codeLength - 1) {\n    event.preventDefault();\n    focusCell(i + 1);\n  }\n}\n\nfunction onFocus(event: FocusEvent) {\n  (event.target as HTMLInputElement).select();\n}\n\n// A paste into ANY cell replaces the whole code from the first cell\nfunction onPaste(event: ClipboardEvent) {\n  event.preventDefault();\n  if (props.disabled)\n    return;\n  const pasted = parsePastedCode(event.clipboardData?.getData(\"text\") ?? \"\");\n  if (!pasted.digits)\n    return;\n  cells.value = Array.from({ length: codeLength }, (_, i) => pasted.digits[i] ?? \"\");\n  commit();\n  const firstEmpty = cells.value.findIndex(c => !c);\n  focusCell(firstEmpty === -1 ? codeLength - 1 : firstEmpty);\n  if (pasted.complete)\n    emit(\"paste-complete\", pasted.digits);\n}\n</script>\n\n<style scoped>\n.codeinput {\n  display: flex;\n  gap: var(--codeinput-gap, 8px);\n}\n.codeinput__cell {\n  flex: 1;\n  min-width: 0;\n  height: var(--codeinput-height, 52px);\n  padding: 0;\n  text-align: center;\n  font: inherit;\n  font-size: var(--codeinput-font-size, 22px);\n  font-weight: 700;\n  font-variant-numeric: tabular-nums;\n  border: 1px solid var(--codeinput-border, #c9cecb);\n  border-radius: var(--codeinput-radius, 8px);\n  background: var(--codeinput-bg, #fff);\n  color: var(--codeinput-fg, inherit);\n  outline: none;\n  transition: border-color 0.12s, box-shadow 0.12s;\n}\n.codeinput__cell:focus {\n  border-color: var(--codeinput-focus, #ff7700);\n  box-shadow: 0 0 0 3px var(--codeinput-focus-ring, rgb(255 119 0 / 25%));\n}\n.codeinput__cell:disabled {\n  opacity: 0.6;\n  cursor: not-allowed;\n}\n.codeinput--error .codeinput__cell {\n  border-color: var(--codeinput-error, #d9534f);\n}\n</style>\n","/* Framework-free frontend helpers for js/auth/code-login.ts. Safe to import in an assetpack: no backend\n   imports. The Vue components that use these live in mod::vue (libs/auth). */\n\nexport interface LoginFormInstruction {\n  action: string;\n  vars: Array<{ name: string; value: string }>;\n}\n\nexport const codeLength = 6;\n\nexport function isLoginEmail(value: string): boolean {\n  const normalized = value.trim();\n  return normalized.length <= 254 && /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(normalized);\n}\n\n/** Split pasted text into cells.\n    @returns digits - the sanitized digits to show, for manual correction\n    @returns complete - only true when the trimmed clipboard is exactly the code: a longer or mixed paste must never submit */\nexport function parsePastedCode(text: string, length = codeLength): { digits: string; complete: boolean } {\n  return {\n    digits: text.replace(/\\D/g, \"\").slice(0, length),\n    complete: new RegExp(`^[0-9]{${length}}$`).test(text.trim()),\n  };\n}\n\n/** Post the login form prepared by the server (prepareFrontendLogin). This sets the WRDAuth cookies and navigates. */\nexport function submitLoginForm(form: LoginFormInstruction): void {\n  const node = document.createElement(\"form\");\n  node.method = \"post\";\n  node.action = form.action;\n  node.hidden = true;\n  for (const variable of form.vars) {\n    const input = document.createElement(\"input\");\n    input.type = \"hidden\";\n    input.name = variable.name;\n    input.value = variable.value;\n    node.append(input);\n  }\n  document.body.append(node);\n  node.submit();\n}\n\n/** A failed Google (OIDC) login lands on the webroot as ?wrd_pwdaction=oidc-failure&reason=... Only the\n    reason code is trustworthy, so map it to your own text instead of showing URL content.\n    @returns null when the URL is not an OIDC failure */\nexport function getGoogleLoginFailure(search: string): \"account-disabled\" | \"unknown-login\" | \"other\" | null {\n  const params = new URLSearchParams(search);\n  if (params.get(\"wrd_pwdaction\") !== \"oidc-failure\")\n    return null;\n  const reason = params.get(\"reason\");\n  return reason === \"account-disabled\" || reason === \"unknown-login\" ? reason : \"other\";\n}\n","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass } from \"vue\"\n\nconst _hoisted_1 = [\"aria-label\"]\nconst _hoisted_2 = [\"aria-label\", \"disabled\", \"value\", \"onInput\", \"onKeydown\"]\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(\"div\", {\n    ref: \"rootEl\",\n    class: _normalizeClass([\"codeinput\", { 'codeinput--error': $props.error }]),\n    role: \"group\",\n    \"aria-label\": $props.label\n  }, [\n    (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.cells, (cell, i) => {\n      return (_openBlock(), _createElementBlock(\"input\", {\n        key: i,\n        ref_for: true,\n        ref: (el) => $setup.setRef(el, i),\n        class: \"codeinput__cell\",\n        type: \"text\",\n        inputmode: \"numeric\",\n        autocomplete: \"one-time-code\",\n        maxlength: \"1\",\n        \"aria-label\": `Cijfer ${i + 1}`,\n        disabled: $props.disabled,\n        value: cell,\n        onInput: $event => ($setup.onInput(i, $event)),\n        onKeydown: $event => ($setup.onKeydown(i, $event)),\n        onFocus: _cache[0] || (_cache[0] = $event => ($setup.onFocus($event))),\n        onPaste: _cache[1] || (_cache[1] = $event => ($setup.onPaste($event)))\n      }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_2))\n    }), 128 /* KEYED_FRAGMENT */))\n  ], 10 /* CLASS, PROPS */, _hoisted_1))\n}","import script from \"/opt/whdata/installedmodules/vue.20260923T121342.395Z/libs/auth/CodeInput.vue?type=script\";import \"/opt/whdata/installedmodules/vue.20260923T121342.395Z/libs/auth/CodeInput.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/vue.20260923T121342.395Z/libs/auth/CodeInput.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/vue.20260923T121342.395Z/libs/auth/CodeInput.vue\";script.__scopeId = \"data-v-b819ee95\";export default script;","/* State and actions for an emailed-code login (mod::ww js/auth/code-login.ts). The form is yours; this\n   holds the two steps, the resend countdown and the busy guard. */\nimport { nextTick, onBeforeUnmount, onMounted, shallowRef } from \"vue\";\nimport { isLoginEmail, submitLoginForm, type LoginFormInstruction } from \"@mod-ww/js/auth/code-login-frontend\";\n\ntype Failure = { success: false; error: string };\n\nexport interface LoginCodeApi {\n  requestLoginCode(params: { email: string }): Promise<{ success: true; code?: string } | Failure>;\n  verifyLoginCode(params: { email: string; code: string }): Promise<{ success: true; form: LoginFormInstruction } | Failure>;\n}\n\nexport interface UseLoginCodeOptions {\n  api: LoginCodeApi;\n  /** localStorage key to remember the last address. Omit to not remember it */\n  storageKey?: string;\n  /** Address to start with when none is remembered, eg a test account */\n  defaultEmail?: string;\n  /** Wins over a remembered address, eg on a test server with a fixed account */\n  forceEmail?: string;\n  focusEmail: () => void;\n  focusCode: () => void;\n}\n\nconst resendSeconds = 60;\n\nexport function useLoginCode(options: UseLoginCodeOptions) {\n  const email = shallowRef(\"\");\n  const code = shallowRef(\"\");\n  const step = shallowRef<\"email\" | \"code\">(\"email\");\n  const error = shallowRef(\"\");\n  const busy = shallowRef(false);\n  /** The code, when the server handed it back (development or a @beta.webhare.net account) */\n  const devCode = shallowRef(\"\");\n  const cooldown = shallowRef(0);\n  let resendAfter = 0;\n  let timer: ReturnType<typeof setInterval> | undefined;\n\n  async function changeEmail() {\n    if (busy.value)\n      return;\n    step.value = \"email\";\n    code.value = \"\";\n    devCode.value = \"\";\n    error.value = \"\";\n    await nextTick();\n    options.focusEmail();\n  }\n\n  async function requestCode() {\n    if (busy.value || (step.value === \"code\" && cooldown.value > 0))\n      return;\n    error.value = \"\";\n    email.value = email.value.trim().toLowerCase();\n    if (!isLoginEmail(email.value)) {\n      error.value = \"Vul een geldig e-mailadres in.\";\n      options.focusEmail();\n      return;\n    }\n    busy.value = true;\n    try {\n      const result = await options.api.requestLoginCode({ email: email.value });\n      if (!result.success) {\n        error.value = result.error;\n        return;\n      }\n      if (options.storageKey && !options.forceEmail)\n        try { localStorage.setItem(options.storageKey, email.value); } catch { /* browser storage is optional */ }\n      code.value = result.code ?? \"\";\n      devCode.value = result.code ?? \"\";\n      step.value = \"code\";\n      resendAfter = Date.now() + resendSeconds * 1000;\n      cooldown.value = resendSeconds;\n    } catch {\n      error.value = \"De code kon niet worden verstuurd. Controleer je verbinding en probeer het opnieuw.\";\n    } finally {\n      busy.value = false;\n      await nextTick();\n      if (step.value === \"code\")\n        options.focusCode();\n    }\n  }\n\n  async function verifyCode() {\n    if (busy.value)\n      return;\n    error.value = \"\";\n    if (!/^[0-9]{6}$/.test(code.value)) {\n      error.value = \"Vul de code van zes cijfers in.\";\n      options.focusCode();\n      return;\n    }\n    busy.value = true;\n    try {\n      const result = await options.api.verifyLoginCode({ email: email.value, code: code.value });\n      if (!result.success) {\n        error.value = result.error;\n        busy.value = false;\n        await nextTick();\n        options.focusCode();\n        return;\n      }\n      submitLoginForm(result.form); //stays busy: the page navigates\n    } catch {\n      busy.value = false;\n      error.value = \"Inloggen is niet gelukt. Controleer je verbinding en probeer het opnieuw.\";\n    }\n  }\n\n  onMounted(() => {\n    let remembered = \"\";\n    if (options.storageKey)\n      try { remembered = localStorage.getItem(options.storageKey) ?? \"\"; } catch { /* browser storage is optional */ }\n    email.value = options.forceEmail || remembered || options.defaultEmail || \"\";\n    timer = setInterval(() => {\n      cooldown.value = Math.max(0, Math.ceil((resendAfter - Date.now()) / 1000));\n    }, 1000);\n  });\n\n  onBeforeUnmount(() => clearInterval(timer));\n\n  return { email, code, step, error, busy, devCode, cooldown, changeEmail, requestCode, verifyCode };\n}\n","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, createBlock as _createBlock, createVNode as _createVNode, withModifiers as _withModifiers, renderList as _renderList, Fragment as _Fragment } from \"vue\"\n\nconst _hoisted_1 = {\n  id: \"velkom-title\",\n  class: \"login__title\"\n}\nconst _hoisted_2 = {\n  key: 0,\n  class: \"login__intro\"\n}\nconst _hoisted_3 = {\n  key: 1,\n  class: \"login__intro\"\n}\nconst _hoisted_4 = {\n  key: 2,\n  id: \"velkom-login-error\",\n  class: \"login__error\",\n  role: \"alert\",\n  \"data-testid\": \"auth-error\"\n}\nconst _hoisted_5 = [\"aria-busy\"]\nconst _hoisted_6 = {\n  key: 1,\n  class: \"login__development\",\n  \"aria-label\": \"Ontwikkeltestlogins\"\n}\nconst _hoisted_7 = [\"aria-busy\"]\nconst _hoisted_8 = {\n  key: 0,\n  class: \"login__hint\",\n  \"data-testid\": \"auth-development-code\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    _createElementVNode(\"h1\", _hoisted_1, _toDisplayString($setup.step === \"email\" ? \"Fijn dat je er bent.\" : \"Vul je inlogcode in\"), 1 /* TEXT */),\n    ($setup.step === 'email')\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_2, \"Log in met een eenmalige code per e-mail.\"))\n      : (_openBlock(), _createElementBlock(\"p\", _hoisted_3, \"Als \" + _toDisplayString($setup.email) + \" toegang heeft, ontvang je een code. Deze is 15 minuten geldig.\", 1 /* TEXT */)),\n    ($setup.shownError)\n      ? (_openBlock(), _createElementBlock(\"p\", _hoisted_4, _toDisplayString($setup.shownError), 1 /* TEXT */))\n      : _createCommentVNode(\"v-if\", true),\n    ($setup.step === 'email')\n      ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n          ($setup.googleTag)\n            ? (_openBlock(), _createBlock($setup[\"Button\"], {\n                key: 0,\n                class: \"login__google\",\n                disabled: $setup.pending,\n                \"data-testid\": \"auth-google\",\n                onClick: $setup.googleLogin\n              }, {\n                default: _withCtx(() => _cache[3] || (_cache[3] = [\n                  _createTextVNode(\"Inloggen met Google\", -1 /* CACHED */)\n                ])),\n                _: 1 /* STABLE */,\n                __: [3]\n              }, 8 /* PROPS */, [\"disabled\"]))\n            : _createCommentVNode(\"v-if\", true),\n          _createElementVNode(\"form\", {\n            class: \"login__form\",\n            novalidate: \"\",\n            \"aria-busy\": $setup.pending,\n            onSubmit: _withModifiers($setup.requestCode, [\"prevent\"])\n          }, [\n            _createVNode($setup[\"FormField\"], {\n              label: \"E-mailadres\",\n              \"field-id\": \"velkom-login-email\",\n              error: $setup.error || undefined,\n              required: \"\"\n            }, {\n              default: _withCtx(() => [\n                _createVNode($setup[\"TextInput\"], {\n                  modelValue: $setup.email,\n                  \"onUpdate:modelValue\": _cache[0] || (_cache[0] = $event => (($setup.email) = $event)),\n                  name: \"login\",\n                  type: \"email\",\n                  autocomplete: \"username\",\n                  disabled: $setup.pending\n                }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\"])\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"error\"]),\n            _createVNode($setup[\"Button\"], {\n              type: \"submit\",\n              variant: \"primary\",\n              class: \"login__submit\",\n              disabled: $setup.pending,\n              \"data-testid\": \"auth-request-code\"\n            }, {\n              default: _withCtx(() => [\n                _createTextVNode(_toDisplayString($setup.pending ? \"Code versturen...\" : \"Stuur inlogcode\"), 1 /* TEXT */)\n              ]),\n              _: 1 /* STABLE */\n            }, 8 /* PROPS */, [\"disabled\"])\n          ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_5),\n          ($setup.developmentLogins.length)\n            ? (_openBlock(), _createElementBlock(\"section\", _hoisted_6, [\n                _cache[4] || (_cache[4] = _createElementVNode(\"h2\", { class: \"login__development-title\" }, \"Ontwikkeltestlogins\", -1 /* CACHED */)),\n                (_openBlock(true), _createElementBlock(_Fragment, null, _renderList($setup.developmentLogins, (account) => {\n                  return (_openBlock(), _createBlock($setup[\"Button\"], {\n                    key: account.key,\n                    disabled: $setup.pending,\n                    \"data-testid\": 'auth-development-' + account.key,\n                    onClick: $event => ($setup.selectDevelopmentLogin(account))\n                  }, {\n                    default: _withCtx(() => [\n                      _createTextVNode(_toDisplayString(account.label), 1 /* TEXT */)\n                    ]),\n                    _: 2 /* DYNAMIC */\n                  }, 1032 /* PROPS, DYNAMIC_SLOTS */, [\"disabled\", \"data-testid\", \"onClick\"]))\n                }), 128 /* KEYED_FRAGMENT */))\n              ]))\n            : _createCommentVNode(\"v-if\", true)\n        ], 64 /* STABLE_FRAGMENT */))\n      : (_openBlock(), _createElementBlock(\"form\", {\n          key: 4,\n          class: \"login__form\",\n          novalidate: \"\",\n          \"aria-busy\": $setup.pending,\n          onSubmit: _cache[2] || (_cache[2] = _withModifiers((...args) => ($setup.verifyCode && $setup.verifyCode(...args)), [\"prevent\"]))\n        }, [\n          _createVNode($setup[\"CodeInput\"], {\n            ref: \"codeInput\",\n            modelValue: $setup.code,\n            \"onUpdate:modelValue\": _cache[1] || (_cache[1] = $event => (($setup.code) = $event)),\n            class: \"login__code\",\n            label: \"Inlogcode\",\n            disabled: $setup.pending,\n            error: Boolean($setup.error),\n            \"aria-describedby\": $setup.shownError ? 'velkom-login-error' : undefined,\n            onPasteComplete: $setup.verifyCode\n          }, null, 8 /* PROPS */, [\"modelValue\", \"disabled\", \"error\", \"aria-describedby\", \"onPasteComplete\"]),\n          ($setup.devCode)\n            ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, \"Testcode: \" + _toDisplayString($setup.devCode), 1 /* TEXT */))\n            : _createCommentVNode(\"v-if\", true),\n          _createVNode($setup[\"Button\"], {\n            type: \"submit\",\n            variant: \"primary\",\n            class: \"login__submit\",\n            disabled: $setup.pending,\n            \"data-testid\": \"auth-submit\"\n          }, {\n            default: _withCtx(() => [\n              _createTextVNode(_toDisplayString($setup.pending ? \"Inloggen...\" : \"Inloggen\"), 1 /* TEXT */)\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"disabled\"]),\n          _createVNode($setup[\"Button\"], {\n            variant: \"ghost\",\n            disabled: $setup.pending || $setup.cooldown > 0,\n            \"data-testid\": \"auth-resend-code\",\n            onClick: $setup.requestCode\n          }, {\n            default: _withCtx(() => [\n              _createTextVNode(_toDisplayString($setup.cooldown > 0 ? `Nieuwe code over ${$setup.cooldown} s` : \"Stuur een nieuwe code\"), 1 /* TEXT */)\n            ]),\n            _: 1 /* STABLE */\n          }, 8 /* PROPS */, [\"disabled\"]),\n          _createVNode($setup[\"Button\"], {\n            variant: \"ghost\",\n            disabled: $setup.pending,\n            onClick: $setup.changeEmail\n          }, {\n            default: _withCtx(() => _cache[5] || (_cache[5] = [\n              _createTextVNode(\"Ander e-mailadres gebruiken\", -1 /* CACHED */)\n            ])),\n            _: 1 /* STABLE */,\n            __: [5]\n          }, 8 /* PROPS */, [\"disabled\", \"onClick\"])\n        ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_7))\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/LoginForm.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/LoginForm.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/LoginForm.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/LoginForm.vue\";script.__scopeId = \"data-v-639b0a3e\";export default script;","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createBlock as _createBlock, Fragment as _Fragment, createTextVNode as _createTextVNode, toDisplayString as _toDisplayString, withCtx as _withCtx, createVNode as _createVNode, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = {\n  key: 0,\n  class: \"access-pending\",\n  \"aria-busy\": \"true\"\n}\nconst _hoisted_2 = {\n  key: 3,\n  class: \"access\",\n  \"data-testid\": \"customer-access\"\n}\nconst _hoisted_3 = [\"aria-busy\"]\nconst _hoisted_4 = { class: \"access__form\" }\nconst _hoisted_5 = {\n  class: \"access__message\",\n  role: \"alert\"\n}\nconst _hoisted_6 = {\n  key: 0,\n  class: \"access__actions\"\n}\nconst _hoisted_7 = {\n  key: 0,\n  class: \"access__message\",\n  role: \"status\",\n  \"data-testid\": \"invitation-notice\"\n}\nconst _hoisted_8 = {\n  key: 0,\n  class: \"access__error\",\n  role: \"alert\"\n}\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createElementBlock(_Fragment, null, [\n    ($setup.connectingMicrosoft)\n      ? (_openBlock(), _createElementBlock(\"main\", _hoisted_1, _cache[6] || (_cache[6] = [\n          _createElementVNode(\"p\", {\n            role: \"status\",\n            class: \"access-pending__status access-pending__status--now\"\n          }, \"Bezig met koppelen met Microsoft...\", -1 /* CACHED */)\n        ])))\n      : ($setup.customer)\n        ? (_openBlock(), _createBlock($setup[\"CustomerApp\"], {\n            key: 1,\n            bootstrap: $setup.customer,\n            onLogout: _cache[0] || (_cache[0] = $event => ($setup.logoutOpen = true)),\n            onOrganizationSaved: $setup.organizationSaved\n          }, null, 8 /* PROPS */, [\"bootstrap\"]))\n        : ($setup.loading)\n          ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n              _createCommentVNode(\" Blank while checking access: showing the login screen would flash it before the app for signed-in users. \"),\n              _cache[7] || (_cache[7] = _createElementVNode(\"main\", {\n                class: \"access-pending\",\n                \"aria-busy\": \"true\"\n              }, [\n                _createElementVNode(\"p\", {\n                  role: \"status\",\n                  class: \"access-pending__status\"\n                }, \"Velkom laden...\")\n              ], -1 /* CACHED */))\n            ], 2112 /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */))\n          : (_openBlock(), _createElementBlock(\"main\", _hoisted_2, [\n              _cache[20] || (_cache[20] = _createElementVNode(\"svg\", {\n                viewBox: \"0 0 1280 350\",\n                class: \"access__logo\",\n                role: \"img\",\n                \"aria-label\": \"Velkom\"\n              }, [\n                _createElementVNode(\"path\", {\n                  fill: \"currentColor\",\n                  d: \"M83.44 290 16.8 106.4H52.67L101.46 245.46L150.25 106.4H186.12L119.48 290Z M270.15 295.1Q242.78 295.1 222.13 283.12Q201.47 271.13 190 249.62Q178.52 228.12 178.52 199.73Q178.52 169.64 189.83 147.54Q201.13 125.44 221.36 113.37Q241.59 101.3 268.45 101.3Q296.5 101.3 316.22 114.3Q335.94 127.31 345.72 151.28Q355.49 175.25 353.45 208.23H317.92V195.31Q317.58 163.35 305.77 148.05Q293.95 132.75 269.81 132.75Q243.12 132.75 229.69 149.58Q216.26 166.41 216.26 198.2Q216.26 228.46 229.69 245.03Q243.12 261.61 268.45 261.61Q285.11 261.61 297.26 254.05Q309.42 246.48 316.22 232.37L351.07 243.42Q340.36 268.07 318.6 281.59Q296.84 295.1 270.15 295.1ZM204.7 208.23V180.52H335.77V208.23Z M366.93 290V40.1H402.46V290Z M425.29 290 425.46 45.2H461.5V194.8L533.58 106.4H578.8L502.64 198.2L586.62 290H538.34L461.5 201.6V290Z M425.46 40.10H461.50V46.20H425.46Z M655.35 295.1Q627.81 295.1 607.58 282.69Q587.35 270.28 576.38 248.44Q565.42 226.59 565.42 198.03Q565.42 169.3 576.64 147.45Q587.86 125.61 608.09 113.45Q628.32 101.3 655.35 101.3Q682.89 101.3 703.12 113.71Q723.35 126.12 734.4 147.88Q745.45 169.64 745.45 198.03Q745.45 226.76 734.32 248.6Q723.18 270.45 702.95 282.77Q682.72 295.1 655.35 295.1ZM655.35 261.61Q681.7 261.61 694.71 243.84Q707.71 226.08 707.71 198.03Q707.71 169.3 694.54 152.05Q681.36 134.79 655.35 134.79Q637.5 134.79 625.94 142.87Q614.38 150.94 608.77 165.13Q603.16 179.33 603.16 198.03Q603.16 226.93 616.42 244.27Q629.68 261.61 655.35 261.61Z M974.83 290 975 175.59Q975 155.7 964.8 144.56Q954.6 133.43 937.94 133.43Q927.74 133.43 919.33 138.1Q910.91 142.78 905.73 152.05Q900.54 161.31 900.54 175.25L883.37 166.58Q883.03 147.2 891.62 132.58Q900.2 117.96 914.99 109.88Q929.78 101.81 948.14 101.81Q977.89 101.81 994.21 119.66Q1010.53 137.51 1010.53 167.09L1010.36 290ZM754.68 290V106.4H786.3V159.44H790.38V290ZM864.84 290 865.01 176.27Q865.01 156.21 854.9 144.82Q844.78 133.43 827.78 133.43Q810.95 133.43 800.67 144.99Q790.38 156.55 790.38 175.25L773.38 164.37Q773.38 146.35 782.05 132.24Q790.72 118.13 805.51 109.97Q820.3 101.81 839 101.81Q858.55 101.81 872.32 110.05Q886.09 118.3 893.32 133.09Q900.54 147.88 900.54 167.43L900.37 290Z\"\n                }),\n                _createElementVNode(\"circle\", {\n                  cx: \"1080\",\n                  cy: \"100\",\n                  r: \"40\",\n                  class: \"access__logo-dot\"\n                })\n              ], -1 /* CACHED */)),\n              _cache[21] || (_cache[21] = _createStaticVNode(\"<aside class=\\\"access__branding\\\" aria-label=\\\"Velkom\\\" data-v-a5426864><div class=\\\"access__brand-row\\\" data-v-a5426864><span class=\\\"access__badge\\\" data-v-a5426864><span aria-hidden=\\\"true\\\" data-v-a5426864></span>Beheeromgeving</span></div><div class=\\\"access__brand-content\\\" data-v-a5426864><p class=\\\"access__eyebrow\\\" data-v-a5426864>Bezoekerservaring</p><p class=\\\"access__headline\\\" data-v-a5426864>Elke gast<br data-v-a5426864>voelt zich<br data-v-a5426864>verwacht<span data-v-a5426864>.</span></p><svg class=\\\"access__flourish\\\" viewBox=\\\"0 0 760 200\\\" aria-hidden=\\\"true\\\" data-v-a5426864><path pathLength=\\\"1\\\" d=\\\"M -80 150 C 30 150, 80 150, 140 140 C 200 130, 220 60, 290 60 C 350 60, 380 140, 440 150 C 520 165, 545 80, 495 72 C 445 64, 445 160, 535 158 C 585 157, 600 105, 640 105 C 680 105, 690 130, 724 130\\\" data-v-a5426864></path><circle cx=\\\"724\\\" cy=\\\"130\\\" r=\\\"17\\\" data-v-a5426864></circle></svg></div></aside>\", 1)),\n              _createElementVNode(\"section\", {\n                class: \"access__panel\",\n                \"aria-labelledby\": \"velkom-title\",\n                \"aria-busy\": $setup.loading || undefined\n              }, [\n                _cache[18] || (_cache[18] = _createElementVNode(\"svg\", {\n                  class: \"access__mobile-flourish\",\n                  viewBox: \"0 0 390 150\",\n                  \"aria-hidden\": \"true\"\n                }, [\n                  _createElementVNode(\"path\", {\n                    pathLength: \"1\",\n                    d: \"M-10 122C40 122 70 42 130 42C190 42 204 108 162 108C120 108 136 48 204 48C262 48 292 74 338 66\"\n                  }),\n                  _createElementVNode(\"circle\", {\n                    cx: \"346\",\n                    cy: \"64\",\n                    r: \"11\"\n                  })\n                ], -1 /* CACHED */)),\n                _createElementVNode(\"p\", { class: \"access__panel-top\" }, [\n                  _cache[8] || (_cache[8] = _createElementVNode(\"span\", null, \"Nog geen Velkom?\", -1 /* CACHED */)),\n                  _createElementVNode(\"a\", { href: $setup.demoHref }, \"Plan een demo\")\n                ]),\n                _createElementVNode(\"div\", _hoisted_4, [\n                  ($setup.denied)\n                    ? (_openBlock(), _createElementBlock(_Fragment, { key: 0 }, [\n                        _cache[11] || (_cache[11] = _createElementVNode(\"h1\", {\n                          id: \"velkom-title\",\n                          class: \"access__title\"\n                        }, \"Geen toegang\", -1 /* CACHED */)),\n                        _createElementVNode(\"p\", _hoisted_5, _toDisplayString($setup.error), 1 /* TEXT */),\n                        ($setup.configured)\n                          ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n                              _createVNode($setup[\"Button\"], { onClick: $setup.loadCustomer }, {\n                                default: _withCtx(() => _cache[9] || (_cache[9] = [\n                                  _createTextVNode(\"Opnieuw proberen\", -1 /* CACHED */)\n                                ])),\n                                _: 1 /* STABLE */,\n                                __: [9]\n                              }),\n                              _createVNode($setup[\"Button\"], {\n                                onClick: _cache[1] || (_cache[1] = $event => ($setup.logoutOpen = true))\n                              }, {\n                                default: _withCtx(() => _cache[10] || (_cache[10] = [\n                                  _createTextVNode(\"Uitloggen\", -1 /* CACHED */)\n                                ])),\n                                _: 1 /* STABLE */,\n                                __: [10]\n                              })\n                            ]))\n                          : _createCommentVNode(\"v-if\", true)\n                      ], 64 /* STABLE_FRAGMENT */))\n                    : ($setup.invitation)\n                      ? (_openBlock(), _createBlock($setup[\"InvitationForm\"], {\n                          key: 1,\n                          invitation: $setup.invitation,\n                          onAccepted: _cache[2] || (_cache[2] = $event => ($setup.finishInvitation(true))),\n                          onCancel: _cache[3] || (_cache[3] = $event => ($setup.finishInvitation(false)))\n                        }, null, 8 /* PROPS */, [\"invitation\"]))\n                      : ($setup.infoPage === 'privacy')\n                        ? (_openBlock(), _createElementBlock(_Fragment, { key: 2 }, [\n                            _cache[12] || (_cache[12] = _createElementVNode(\"h1\", {\n                              id: \"velkom-title\",\n                              class: \"access__title\"\n                            }, \"Privacy\", -1 /* CACHED */)),\n                            _cache[13] || (_cache[13] = _createElementVNode(\"p\", { class: \"access__message\" }, [\n                              _createTextVNode(\"Hier komt de privacyverklaring van Velkom. Heb je tot die tijd een vraag over privacy, mail dan naar \"),\n                              _createElementVNode(\"a\", { href: \"mailto:hello@tech42.nl\" }, \"hello@tech42.nl\"),\n                              _createTextVNode(\".\")\n                            ], -1 /* CACHED */)),\n                            _cache[14] || (_cache[14] = _createElementVNode(\"a\", {\n                              href: \"#/\",\n                              class: \"access__back\"\n                            }, \"Terug naar inloggen\", -1 /* CACHED */))\n                          ], 64 /* STABLE_FRAGMENT */))\n                        : ($setup.infoPage === 'hulp')\n                          ? (_openBlock(), _createElementBlock(_Fragment, { key: 3 }, [\n                              _cache[15] || (_cache[15] = _createElementVNode(\"h1\", {\n                                id: \"velkom-title\",\n                                class: \"access__title\"\n                              }, \"Hulp\", -1 /* CACHED */)),\n                              _cache[16] || (_cache[16] = _createElementVNode(\"p\", { class: \"access__message\" }, [\n                                _createTextVNode(\"Hier komt de hulppagina van Velkom. Lukt inloggen niet of heb je een vraag, mail dan naar \"),\n                                _createElementVNode(\"a\", { href: \"mailto:hello@tech42.nl\" }, \"hello@tech42.nl\"),\n                                _createTextVNode(\".\")\n                              ], -1 /* CACHED */)),\n                              _cache[17] || (_cache[17] = _createElementVNode(\"a\", {\n                                href: \"#/\",\n                                class: \"access__back\"\n                              }, \"Terug naar inloggen\", -1 /* CACHED */))\n                            ], 64 /* STABLE_FRAGMENT */))\n                          : (_openBlock(), _createElementBlock(_Fragment, { key: 4 }, [\n                              ($setup.invitationNotice)\n                                ? (_openBlock(), _createElementBlock(\"p\", _hoisted_7, _toDisplayString($setup.invitationNotice), 1 /* TEXT */))\n                                : _createCommentVNode(\"v-if\", true),\n                              _createVNode($setup[\"LoginForm\"])\n                            ], 64 /* STABLE_FRAGMENT */))\n                ]),\n                _cache[19] || (_cache[19] = _createElementVNode(\"nav\", {\n                  class: \"access__panel-footer\",\n                  \"aria-label\": \"Informatie\"\n                }, [\n                  _createElementVNode(\"a\", { href: \"#/privacy\" }, \"Privacy\"),\n                  _createElementVNode(\"a\", { href: \"#/hulp\" }, \"Hulp\")\n                ], -1 /* CACHED */))\n              ], 8 /* PROPS */, _hoisted_3)\n            ])),\n    _createVNode($setup[\"Dialog\"], {\n      open: $setup.logoutOpen,\n      pending: $setup.loggingOut,\n      title: \"Uitloggen\",\n      onClose: _cache[5] || (_cache[5] = $event => ($setup.logoutOpen = false))\n    }, {\n      footer: _withCtx(() => [\n        _createVNode($setup[\"Button\"], {\n          autofocus: \"\",\n          disabled: $setup.loggingOut,\n          onClick: _cache[4] || (_cache[4] = $event => ($setup.logoutOpen = false))\n        }, {\n          default: _withCtx(() => _cache[22] || (_cache[22] = [\n            _createTextVNode(\"Annuleren\", -1 /* CACHED */)\n          ])),\n          _: 1 /* STABLE */,\n          __: [22]\n        }, 8 /* PROPS */, [\"disabled\"]),\n        _createVNode($setup[\"Button\"], {\n          variant: \"primary\",\n          disabled: $setup.loggingOut,\n          onClick: $setup.signOut\n        }, {\n          default: _withCtx(() => [\n            _createTextVNode(_toDisplayString($setup.loggingOut ? \"Uitloggen...\" : \"Uitloggen\"), 1 /* TEXT */)\n          ]),\n          _: 1 /* STABLE */\n        }, 8 /* PROPS */, [\"disabled\"])\n      ]),\n      default: _withCtx(() => [\n        _cache[23] || (_cache[23] = _createElementVNode(\"p\", null, \"Wil je uitloggen bij Velkom?\", -1 /* CACHED */)),\n        ($setup.logoutError)\n          ? (_openBlock(), _createElementBlock(\"p\", _hoisted_8, _toDisplayString($setup.logoutError), 1 /* TEXT */))\n          : _createCommentVNode(\"v-if\", true)\n      ]),\n      _: 1 /* STABLE */,\n      __: [23]\n    }, 8 /* PROPS */, [\"open\", \"pending\"])\n  ], 64 /* STABLE_FRAGMENT */))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/CustomerAccess.vue?type=script\";import \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/CustomerAccess.vue?type=style&index=0\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/CustomerAccess.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/components/auth/CustomerAccess.vue\";script.__scopeId = \"data-v-a5426864\";export default script;","import { openBlock as _openBlock, createBlock as _createBlock } from \"vue\"\n\nexport function render(_ctx, _cache, $props, $setup, $data, $options) {\n  return (_openBlock(), _createBlock($setup[\"CustomerAccess\"]))\n}","import script from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/App.vue?type=script\";import { render } from \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/App.vue?type=template\"; script.render = render;script.__file = \"../opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/App.vue\";export default script;","// Inline SVG favicon: no asset URL to resolve and no republish needed when it changes.\nconst svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 32 32\"><rect width=\"32\" height=\"32\" rx=\"7\" fill=\"#19251f\"/><path d=\"M8 9h4.2L16 20.4 19.8 9H24l-6 15h-4z\" fill=\"#c7ff63\"/></svg>`;\n\nexport function installFavicon(): void {\n  const link = document.createElement(\"link\");\n  link.rel = \"icon\";\n  link.type = \"image/svg+xml\";\n  link.href = `data:image/svg+xml,${encodeURIComponent(svg)}`;\n  document.head.appendChild(link);\n}\n","import \"@webhare/frontend/src/init\";import \"/opt/wh/whtree/modules/publisher/js/internal/polyfills/all\";\nimport \"/opt/whdata/installedmodules/velkom.20261102T104725.578Z/webdesigns/admin/frontend/frontend\";const aps = globalThis.whAssetPacks ||= {}; aps[\"velkom:admin\"]=\"2026-11-02T10:47:36.291Z\";"],"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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AG,GAAKD,EAAG,GACX,IAAMsuB,EAAYruB,EAAG,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,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","i","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","n","PURE_ANNOTATION","aliasHelper","createCodegenContext","ast","sourceMap","optimizeImports","runtimeGlobalName","runtimeModuleName","ssrRuntimeModuleName","addMapping","withoutNewLine","_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","next","error","err","head","tail","prev","removeDep","refreshComputed","computed","globalVersion","dep","prevSub","value","soft","nextSub","prevDep","nextDep","effect","options","e","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","r","refs","setRef","rawRef","oldRawRef","isUnmount","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","e","n","k","runtimeDom__namespace","compileCache","compileToFunction","template","options","key","cached","el","opts","tag","code","render","require_vue","__commonJSMin","exports","module","settingschangedcallbacks","globalDebugFlags","localDebugFlags","debugFlagsOverridesCB","DebugFlagsProxyHandler","debugFlagsOverridesCB","localDebugFlags","globalDebugFlags","target","p","record","keys","key","newValue","toModify","runSettingsCallbacks","value","debugFlags","formatForConsoleLogs","cb","settingschangedcallbacks","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","t","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","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","e","import_vue","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","e","parse","i","formatTrace","trace","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","import_vue","icons","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","Icon_default","render","import_vue","emit","__emit","menuId","open","rootEl","triggerEl","menuEl","items","focusItem","index","list","onDocumentPointer","event","close","openMenu","focus","el","restoreFocus","toggle","select","slug","reset","onTriggerKeydown","onMenuKeydown","__expose","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","_toDisplayString","_createVNode","_createCommentVNode","_Fragment","_renderList","org","$event","_normalizeClass","_createBlock","OrganizationSwitcher_default","render","emit","__emit","switcher","menuButton","shortcut","__expose","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","$event","_createVNode","_renderSlot","_toDisplayString","_createCommentVNode","slug","Topbar_default","render","import_vue","subRoute","item","sub","activeSubId","route","requested","import_vue","parseHash","hash","raw","path","search","params","query","segments","buildHash","org","section","rest","v","current","parseHash","currentHash","guard","pendingToken","setUrlHash","hash","to","token","allowed","route","setNavigationGuard","next","navigate","org","section","query","rest","buildHash","replaceRoute","props","__props","emit","__emit","showLabels","paths","activeTab","item","activeSubId","route","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_withKeys","$event","_createVNode","_createCommentVNode","_createElementVNode","_Fragment","_renderList","item","_toDisplayString","sub","Sidebar_default","render","import_vue","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createBlock","_createCommentVNode","_renderSlot","Button_default","render","import_vue","props","__props","emit","__emit","titleId","descriptionId","dialogEl","returnFocus","show","el","firstField","hide","restoreFocus","requestClose","onNativeClose","onBackdropClick","event","onSubmit","open","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","_Fragment","_createCommentVNode","_createElementVNode","_withModifiers","_createBlock","_resolveDynamicComponent","_normalizeStyle","_withCtx","_toDisplayString","_renderSlot","_createVNode","_createTextVNode","Dialog_default","render","import_vue","dirtyForms","pending","nextFormId","dirtyLabels","form","hasUnsavedChanges","pendingConfirmation","confirmDiscard","reason","onlyForm","labels","resolve","discard","answerConfirmation","onBeforeUnload","event","useGuardedForm","label","model","options","snapshot","guard","useFormGuard","values","isDirty","id","saved","discardLabel","pendingConfirmation","text","labels","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createVNode","_createTextVNode","_toDisplayString","_createElementVNode","UnsavedChangesDialog_default","render","import_vue","toasts","nextId","activeToasts","showToast","message","options","id","toast","undoToast","item","event","iconFor","shortcut","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_renderList","toast","_normalizeClass","_createVNode","_createElementVNode","_toDisplayString","$event","_createTextVNode","_createCommentVNode","ToastHost_default","render","storageKey","props","__props","emit","__emit","wideQuery","drawerQuery","readPreference","value","topbar","mainEl","drawerMode","drawerOpen","searchOpen","preference","collapsed","mobileNavItems","section","item","moreActive","mobileIcons","drawerTrigger","toggleDrawer","openMore","event","toggleCollapse","onWideChange","onDrawerChange","onKeydown","openSearch","closeDrawer","drawerModal","trapTab","items","index","focusPageHeading","heading","element","focusContentAfterRoute","open","reason","route","closeSearch","focusMain","closeOverlays","__expose","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_withModifiers","_createVNode","slug","$event","_withCtx","_createCommentVNode","_renderSlot","_Fragment","_renderList","item","_createBlock","_toDisplayString","AppShell_default","render","import_vue","import_vue","import_vue","heroEl","timelineEl","stickyTop","measure","observer","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","_Fragment","_createCommentVNode","_createElementVNode","_normalizeClass","_normalizeStyle","_renderSlot","_createTextVNode","_toDisplayString","OverviewHero_default","render","import_vue","normalizeSearch","text","mobileOverview","visits","search","company","inside","visit","a","b","companies","selectedCompany","needle","normalizeSearch","COLORS","avatar","name","parts","hash","index","TIME_ZONE","euroWhole","euroCents","countFormat","timeFormat","dateFormat","dateLongFormat","formatEuro","amount","formatTime","date","formatDate","formatDateLong","formatCount","n","props","__props","search","company","presence","mobileOverview","locationQuery","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","_renderSlot","_createTextVNode","_toDisplayString","_withDirectives","$event","_vModelText","_Fragment","_renderList","name","visit","_normalizeStyle","_createCommentVNode","OverviewMobile_default","render","__emit","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_resolveDynamicComponent","_normalizeClass","$event","_withCtx","_createElementVNode","_toDisplayString","_createElementBlock","_createCommentVNode","StatCard_default","render","import_vue","minuteOfDay","date","hours","minutes","formatTime","greetingAt","now","current","overviewPresentation","visits","now","shown","visit","next","a","b","inside","current","minuteOfDay","minutes","start","end","position","minute","greetingAt","formatTime","_","index","props","__props","labels","emit","__emit","timeline","overviewPresentation","points","a","b","point","index","description","formatTime","status","visit","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","_normalizeStyle","_normalizeClass","_Fragment","_renderList","tick","index","point","$event","status","_createTextVNode","OverviewTimeline_default","render","import_vue","props","__props","defaultIcon","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createVNode","_createElementVNode","_toDisplayString","_createCommentVNode","_renderSlot","EmptyState_default","render","customerSections","customerNavigation","features","item","customerHref","section","options","buildHash","isCustomerRouteAllowed","route","tab","consumeInvitationLink","url","ids","tokens","import_vue","import_vue","menuPosition","x","y","width","height","viewportWidth","viewportHeight","place","start","size","room","at","menuAnchor","event","rect","opensRow","items","label","position","menuEl","returnFocus","menuItems","focusItem","index","list","show","event","next","menuLabel","anchor","menuAnchor","dismiss","rect","menuPosition","close","restoreFocus","choose","item","onKeydown","keys","__expose","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_Teleport","_createElementBlock","$event","_withModifiers","_createCommentVNode","_normalizeStyle","_Fragment","_renderList","item","index","_normalizeClass","_toDisplayString","ContextMenu_default","render","props","__props","emit","__emit","STATUS_LABELS","tableEl","announcement","menu","rowActions","visit","checkOut","reveal","id","row","__expose","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","$event","_createCommentVNode","_toDisplayString","_Fragment","_renderList","visit","_normalizeStyle","_createTextVNode","_normalizeClass","_createBlock","_withCtx","_createVNode","TodayVisitsList_default","render","api","rpc","totals","today","present","now","pending","error","actionError","checkoutPending","presentation","overviewPresentation","list","allPages","fetchPage","items","total","page","load","date","overview","registrations","expected","presence","offset","visit","a","b","summary","inside","next","formatTime","checkout","id","item","visitId","departedAt","showToast","undoCheckout","restore","name","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createBlock","_createCommentVNode","_createVNode","_normalizeClass","_withCtx","_createElementVNode","_toDisplayString","_createTextVNode","_Fragment","id","OverviewView_default","render","import_vue","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","_createElementVNode","_createVNode","_toDisplayString","_createCommentVNode","_renderSlot","PageHeader_default","render","import_vue","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createCommentVNode","_renderSlot","SectionCard_default","render","import_vue","props","__props","defaultIcon","import_vue","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createVNode","_createElementVNode","_toDisplayString","StatusBadge_default","render","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_normalizeStyle","_createElementVNode","_toDisplayString","_Fragment","_renderList","index","Skeleton_default","render","import_vue","SHOW_DELAY_MS","MIN_VISIBLE_MS","browserClock","fn","ms","timer","createLoadingIndicator","onChange","clock","showDelay","minVisible","busy","visibleSince","emit","schedule","next","remaining","useLoadingIndicator","source","state","indicator","import_vue","import_vue","import_vue","import_vue","formFieldKey","useFieldControl","props","field","ownId","props","__props","model","_useModel","control","useFieldControl","descriptionId","describedBy","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_withDirectives","_createElementVNode","$event","_vModelCheckbox","_createBlock","_createCommentVNode","_renderSlot","_createTextVNode","_toDisplayString","Checkbox_default","render","props","__props","emit","__emit","checkoutSafe","safe","visitor","unresolved","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_toDisplayString","_createElementBlock","_Fragment","_renderList","visitor","_createCommentVNode","_createVNode","EvacuationFinishDialog_default","render","import_vue","import_vue","props","__props","menu","openMenu","event","row","actions","open","opensRow","keyOf","index","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","column","_normalizeStyle","_normalizeClass","row","index","$event","_renderSlot","_createTextVNode","_createBlock","_createCommentVNode","DataTable_default","render","import_vue","props","__props","fallbackId","id","helpId","errorId","formFieldKey","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","_createTextVNode","_toDisplayString","_createCommentVNode","_renderSlot","_Fragment","_createVNode","FormField_default","render","props","__props","model","_useModel","control","useFieldControl","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_withDirectives","_createElementVNode","$event","_toDisplayString","_createCommentVNode","_Fragment","_renderList","option","_vModelSelect","_createVNode","Select_default","render","api","rpc","open","pending","loadingIndicator","useLoadingIndicator","error","downloading","downloadError","reports","selected","current","report","options","dateTime","columns","value","date","formatDateLong","formatTime","show","load","download","result","bytes","character","url","link","__expose","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createVNode","$event","_withCtx","_createTextVNode","_createBlock","_toDisplayString","_createCommentVNode","_createElementVNode","row","_normalizeClass","EvacuationReports_default","render","emit","__emit","api","rpc","visitors","snapshotAt","pending","error","request","refreshing","manualRefreshing","feedbackTimer","finishFeedback","session","sessionPending","sessionError","running","sessionLabel","completion","completionError","reportsDialog","refreshTimer","listedSafe","id","visitor","progress","columns","dayFormat","arrival","value","date","formatTime","formatDateLong","load","options","token","result","current","refresh","minimum","resolve","sessionAction","action","message","showToast","startActual","markSafe","requestFinish","finish","confirmation","printList","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","_createCommentVNode","_createElementVNode","_createTextVNode","_toDisplayString","_createVNode","$event","_normalizeClass","_createBlock","_withCtx","row","CustomerEvacuation_default","render","import_vue","period","options","range","formatTime","formatDate","registrationRow","visit","registered","expectedRow","start","filterRows","rows","filter","query","row","props","__props","loadingIndicator","useLoadingIndicator","menu","emit","__emit","rowActions","row","customerHref","openRow","event","opensRow","query","status","host","STATUS","hosts","a","b","shown","filterRows","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_createTextVNode","_withDirectives","$event","_vModelText","_renderList","option","_toDisplayString","_renderSlot","_vModelSelect","name","_createBlock","row","_normalizeClass","_normalizeStyle","_createCommentVNode","_createVNode","VisitTable_default","render","import_vue","amsterdamDay","date","addDays","day","days","props","__props","emit","__emit","input","label","atMax","step","days","next","addDays","openCalendar","choose","event","value","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","$event","_toDisplayString","HistoryDatePicker_default","render","PAGE_SIZE","api","rpc","page","rows","totals","detail","pending","loadingIndicator","useLoadingIndicator","error","checkoutPending","actionError","request","historyTab","route","evacuationTab","detailRoute","period","todayPeriods","historyPeriods","tabs","tab","counters","pageCount","currentPage","pageNumbers","first","_","index","yesterday","addDays","amsterdamDay","timeFormat","displayTime","value","visitStatus","visit","listQuery","query","key","navigate","customerHref","setPeriod","goToPage","number","historyTitle","shown","todayTitle","allPages","fetchPage","items","total","result","checkout","id","token","load","checkoutRow","row","showToast","loadList","now","today","offset","range","registrationRow","week","registrations","expected","until","upcoming","expectedRow","a","b","idText","overview","list","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","_createVNode","_withCtx","_createBlock","_createElementVNode","_Fragment","_toDisplayString","_normalizeProps","_guardReactiveProps","_createCommentVNode","_createTextVNode","_renderList","call","_normalizeClass","counter","tab","_createSlots","date","$event","number","BezoekenView_default","render","import_vue","__emit","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_renderSlot","_createTextVNode","_toDisplayString","_createElementBlock","_createCommentVNode","ConfirmDialog_default","render","import_vue","import_vue","isBlank","value","rules","message","max","isValid","model","useFormValidation","fieldRules","prefix","errors","submitted","fields","run","invalid","field","rule","props","__props","emit","__emit","api","rpc","model","PHOTO_TYPES","currentPhoto","photoError","photoPreview","initials","avatar","pending","error","form","useFormValidation","rules","value","guard","useGuardedForm","channels","option","companyOptions","company","fallbackOptions","contact","a","b","changeCompany","open","employee","photo","pickPhoto","event","input","file","reader","removePhoto","onSubmit","stored","photoFailed","cause","message","field","cancel","describedBy","hint","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","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createCommentVNode","_createVNode","$event","_createSlots","_withCtx","_createElementVNode","_toDisplayString","_createTextVNode","_withDirectives","_vModelText","_renderList","option","index","_normalizeClass","_vModelRadio","company","_vModelSelect","contact","_normalizeStyle","EmployeeDialog_default","render","import_vue","props","__props","photo","initials","avatar","request","load","current","result","rpc","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeStyle","_Fragment","_createTextVNode","_toDisplayString","EmployeePhoto_default","render","import_vue","import_vue","model","_useModel","__props","id","clear","clearOnEscape","event","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_createVNode","_withDirectives","$event","_withKeys","_vModelText","_createCommentVNode","SearchFilter_default","render","import_vue","props","__props","model","_useModel","control","useFieldControl","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_withDirectives","_openBlock","_createElementBlock","$event","_vModelDynamic","TextInput_default","render","props","__props","emit","__emit","api","rpc","model","pending","error","logoError","currentLogo","logoPreview","receptionOptions","contact","a","b","guard","useGuardedForm","form","useFormValidation","rules","value","open","company","logo","pickLogo","event","input","file","reader","onSubmit","stored","logoFailed","cause","message","field","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","_createBlock","$event","_withCtx","_createElementVNode","_createElementBlock","_toDisplayString","_createCommentVNode","_createVNode","_withDirectives","contact","_Fragment","_renderList","_vModelSelect","_createTextVNode","CompanyDialog_default","render","props","__props","emit","__emit","api","rpc","showArchived","query","editing","dialogOpen","archiving","archivePending","archiveError","columns","shown","company","a","b","receptionNames","contact","rowMenu","edit","saved","result","showToast","archive","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_withCtx","_createVNode","$event","_createTextVNode","_createElementVNode","_createCommentVNode","row","_toDisplayString","_createElementBlock","CompanyPanel_default","render","CHANNEL_LABELS","sortKey","contact","key","compare","a","b","contactRows","contacts","options","query","formatPhone","phone","mobile","PAGE_SIZE","props","__props","api","rpc","employees","companies","selectCompany","companyFilter","companyNames","company","loading","loadingIndicator","useLoadingIndicator","error","query","channel","sort","limit","editing","dialogOpen","archiving","archivePending","archiveError","CHANNEL_ICONS","multipleChannels","columns","photoRevisions","archivedTab","route","tabs","employee","tabTotal","filtered","contactRows","shown","title","sortBy","key","ariaSort","load","contacts","settings","companyRows","companyUpdated","row","menu","openRow","event","contact","opensRow","edit","rowActions","confirmArchive","saved","result","added","showToast","archive","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","_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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_withCtx","_createElementVNode","$event","_createBlock","_createCommentVNode","_Fragment","_renderList","tab","_normalizeClass","_toDisplayString","_createTextVNode","_withDirectives","_vModelText","_vModelSelect","company","column","contact","ContactpersonenView_default","render","import_vue","ADMIN_PLANS","import_vue","__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","_createElementVNode","_toDisplayString","_createVNode","_Fragment","_renderList","section","$event","_createCommentVNode","SettingsMobileOverview_default","render","import_vue","import_vue","useSectionRoute","tabs","org","route","section","rest","query","activeTab","list","requested","tab","withQuery","patch","next","key","value","options","replaceRoute","navigate","subPath","nextQuery","buildHash","props","__props","baseId","tabEls","sectionRoute","useSectionRoute","active","select","id","key","onKeydown","event","index","tab","keys","next","el","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","_createElementVNode","_Fragment","_renderList","tab","$event","_createBlock","_createCommentVNode","_toDisplayString","_renderSlot","Tabs_default","render","props","__props","emit","__emit","tabs","sectionRoute","useSectionRoute","mobileOverview","tab","mobileHomeHref","mobileSections","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createCommentVNode","_createVNode","_createTextVNode","_createBlock","$event","_withCtx","active","_renderSlot","SettingsLayout_default","render","import_vue","props","__props","emit","__emit","languageOptions","snapshot","profile","model","pending","saveError","guard","useGuardedForm","form","useFormValidation","rules","save","result","field","message","showToast","restore","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","_createVNode","_withCtx","_createElementVNode","_withModifiers","$event","_toDisplayString","_Fragment","_renderList","option","_normalizeClass","_withDirectives","_vModelRadio","_createTextVNode","_createCommentVNode","OrganisatieTab_default","render","import_vue","props","__props","model","pending","saveError","guard","useGuardedForm","form","useFormValidation","flows","save","result","field","message","showToast","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_withCtx","_createElementVNode","_withModifiers","_createVNode","$event","_createElementBlock","_createTextVNode","_createCommentVNode","_toDisplayString","ReceptionSettingsPanel_default","render","import_vue","import_vue","props","__props","model","_useModel","control","useFieldControl","labelId","descriptionId","describedBy","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_createElementVNode","$event","_renderSlot","_createTextVNode","_toDisplayString","_createCommentVNode","Switch_default","render","props","__props","FIELDS","REGISTRATION_FIELD_LABELS","snapshot","privacy","model","pending","saveError","guard","useGuardedForm","form","useFormValidation","rules","value","save","result","field","showToast","restore","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","_createBlock","_withCtx","_createElementVNode","_withModifiers","_createElementBlock","_Fragment","_renderList","field","_withDirectives","$event","_vModelCheckbox","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","PrivacyTab_default","render","import_vue","props","__props","emit","__emit","comparison","current","ADMIN_PLANS","costColumns","costRows","line","formatEuro","total","plans","id","plan","descriptions","matrixColumns","matrixRows","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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_withCtx","_createElementVNode","_toDisplayString","_Fragment","$event","_createTextVNode","row","_createCommentVNode","_renderList","usage","_renderSlot","plan","_normalizeClass","_createBlock","AbonnementTab_default","render","import_vue","import_vue","import_vue","Badge_default","_defineComponent","__props","__expose","__returned__","import_vue","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_renderSlot","Badge_default","render","props","__props","columns","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_withCtx","row","_createElementVNode","_toDisplayString","_createTextVNode","_createCommentVNode","_createVNode","_renderSlot","UsersTable_default","render","import_vue","props","__props","emit","__emit","api","rpc","model","form","useFormValidation","rules","guard","useGuardedForm","pending","error","open","onSubmit","cause","message","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_createElementBlock","_toDisplayString","_createCommentVNode","_createVNode","InviteUserDialog_default","render","props","__props","emit","__emit","api","rpc","users","loading","loadingIndicator","useLoadingIndicator","error","actionError","inviteOpen","pending","search","target","invitationColumns","members","member","timeFormat","load","memberMenu","row","label","confirmRevoke","invitationMenu","value","revoke","selection","showToast","cause","message","invited","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createBlock","_createCommentVNode","_withCtx","_createVNode","_createTextVNode","_Fragment","$event","row","_toDisplayString","CustomerUsersPanel_default","render","props","__props","emit","__emit","api","rpc","settings","screens","memberCount","error","loading","user","avatar","orgName","plan","ADMIN_PLANS","usage","load","saved","activeScreens","users","saveProfile","input","result","savePrivacy","saveReception","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementBlock","_createVNode","_createTextVNode","InstellingenView_default","render","import_vue","import_vue","import_vue","__emit","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_renderList","option","_createElementVNode","$event","_toDisplayString","LanguageSwitcher_default","render","__emit","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","_normalizeClass","_normalizeStyle","_createElementVNode","_Fragment","_toDisplayString","_createCommentVNode","_renderSlot","_createVNode","$event","KioskShell_default","render","import_vue","import_vue","KioskIcon_default","_defineComponent","__props","__expose","__returned__","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","KioskIcon_default","render","texts_default","props","__props","emit","__emit","lineClip","texts","texts_default","now","timer","greeting","date","time","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","_normalizeClass","$event","_toDisplayString","_createCommentVNode","_createElementVNode","_Fragment","_createTextVNode","_createBlock","WelcomePresentation_default","render","props","__props","container","width","portrait","size","observer","entry","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeStyle","_createCommentVNode","_createElementVNode","_createVNode","_withCtx","ScreenPreview_default","render","import_vue","qrcode","typeNumber","errorCorrectionLevel","_typeNumber","_errorCorrectionLevel","QRErrorCorrectionLevel","_modules","_moduleCount","_dataCache","_dataList","_this","makeImpl","test","maskPattern","moduleCount","modules","row","col","setupPositionProbePattern","setupPositionAdjustPattern","setupTimingPattern","setupTypeInfo","setupTypeNumber","createData","mapData","r","c","getBestMaskPattern","minLostPoint","pattern","i","lostPoint","QRUtil","pos","j","bits","mod","data","inc","bitIndex","byteIndex","maskFunc","dark","createBytes","buffer","rsBlocks","offset","maxDcCount","maxEcCount","dcdata","ecdata","dcCount","ecCount","rsPoly","modPoly","qrPolynomial","modIndex","totalCodeCount","index","dataList","QRRSBlock","qrBitBuffer","totalDataCount","mode","newData","qrNumber","qrAlphaNum","qr8BitByte","qrKanji","cellSize","margin","qrHtml","alt","title","opts","size","mc","mr","qrSvg","rect","escapeXml","min","max","createDataURL","x","y","img","s","escaped","_createHalfASCII","r1","r2","p","blocks","blocksLastLineNoMargin","ascii","white","black","line","context","length","bytes","unicodeData","numChars","unicodeMap","bin","base64DecodeInputStream","read","b","count","b0","b1","b2","b3","k","v","unknownChar","QRMode","QRMaskPattern","PATTERN_POSITION_TABLE","G15","G18","G15_MASK","getBCHDigit","digit","d","errorCorrectLength","a","QRMath","type","sameCount","darkCount","ratio","EXP_TABLE","LOG_TABLE","n","num","shift","_num","e","RS_BLOCK_TABLE","qrRSBlock","totalCount","dataCount","getRsBlockTable","rsBlock","list","_buffer","_length","bufIndex","bit","_mode","_data","strToNum","chatToNum","getCode","_bytes","stringToBytes","code","byteArrayOutputStream","off","len","base64EncodeOutputStream","_buflen","_base64","writeEncoded","encode","padlen","str","_str","_pos","decode","gifImage","width","height","_width","_height","pixel","out","lzwMinCodeSize","raster","getLZWRaster","bitOutputStream","_out","_bitLength","_bitBuffer","clearCode","endCode","bitLength","table","lzwTable","byteOut","bitOut","dataIndex","_map","_size","key","getPixel","gif","base64","qrcode_default","props","__props","emit","__emit","image","code","qrcode_default","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_createElementBlock","_createCommentVNode","ScreenQrDialog_default","render","ORIENTATION_LABELS","LANGUAGE_LABELS","screenLinkHref","kioskUrl","org","id","token","props","__props","emit","__emit","api","rpc","model","form","useFormValidation","rules","guard","useGuardedForm","pending","error","previewOrientation","qrUrl","copyError","demoPending","demoError","revokeOpen","linkHref","token","screenLinkHref","screenUrl","demoUrl","name","welcomeText","language","save","saved","cause","message","field","copyUrl","url","notice","showToast","changeDemo","request","createDemo","revokeDemo","describedBy","hint","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","_hoisted_42","_hoisted_43","_hoisted_44","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createElementVNode","_createTextVNode","_createVNode","_withDirectives","$event","_vModelText","_toDisplayString","_createCommentVNode","_withCtx","_Fragment","_renderList","label","value","_createBlock","ScreenDetail_default","render","import_vue","props","__props","emit","__emit","api","rpc","model","pending","error","form","useFormValidation","rules","guard","useGuardedForm","full","open","showError","cause","fields","message","onSubmit","created","cancel","describedBy","field","hint","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","_createBlock","$event","_withCtx","_createElementVNode","_toDisplayString","_createElementBlock","_createCommentVNode","_createTextVNode","_withDirectives","_vModelText","ScreenDialog_default","render","REFRESH_MS","props","__props","api","rpc","showPackageHint","screens","limit","kioskUrl","org","kioskTheme","branding","loading","loadingIndicator","useLoadingIndicator","error","dialogOpen","resetting","resetPending","resetError","archiving","archivePending","archiveError","refreshTimer","readVersion","detailId","route","detail","screen","full","load","options","version","result","upsert","row","a","b","add","created","showToast","customerHref","resetLink","menu","cardActions","saved","archive","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","_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","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createBlock","$event","_Fragment","_createElementVNode","_createTextVNode","_toDisplayString","_createVNode","_withCtx","_createCommentVNode","_normalizeStyle","_renderList","screen","SchermenView_default","render","import_vue","import_vue","props","__props","STATUSES","status","accounts","room","lastSync","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","_createElementVNode","_toDisplayString","_normalizeClass","_createTextVNode","$event","_createCommentVNode","IntegrationCard_default","render","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createElementVNode","_createElementBlock","_Fragment","_createTextVNode","MicrosoftInstructions_default","render","import_vue","props","__props","model","_useModel","control","useFieldControl","import_vue","_hoisted_1","render","_ctx","_cache","$props","$setup","$data","$options","_withDirectives","_openBlock","_createElementBlock","$event","_vModelText","Textarea_default","render","storageKey","callback","captureMicrosoftCallback","url","consentKeys","tokens","consent","key","values","browserSecret","hasMicrosoftSignIn","continueMicrosoftSignIn","finish","options","pending","now","started","consentUrl","resolve","microsoftLoginUrl","takeMicrosoftCallback","result","createMicrosoftBrowserSecret","bytes","secret","value","clearMicrosoftBrowserSecret","parseMicrosoftInternalDomains","domain","props","__props","emit","__emit","api","rpc","rooms","loading","loadingIndicator","useLoadingIndicator","saving","error","errors","fieldPrefix","model","guard","useGuardedForm","load","result","domains","room","selectRoom","selected","mailbox","save","parseMicrosoftInternalDomains","requestClose","open","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createVNode","_createTextVNode","_toDisplayString","_createElementVNode","_createElementBlock","_Fragment","_renderList","room","_createCommentVNode","MicrosoftRoomsDialog_default","render","api","rpc","items","loading","loadingIndicator","useLoadingIndicator","error","instructionsOpen","roomsOpen","disconnectOpen","pending","seeding","syncing","connectionError","load","connect","result","createMicrosoftBrowserSecret","microsoftLoginUrl","clearMicrosoftBrowserSecret","continueConnection","callback","takeMicrosoftCallback","consentUrl","roomsSaved","showToast","synchronize","disconnect","seed","format","value","import_vue","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_createVNode","_createBlock","_createElementVNode","_createCommentVNode","_toDisplayString","_Fragment","_renderList","item","$event","KoppelingenView_default","render","props","__props","emit","__emit","views","OverviewView_default","BezoekenView_default","ContactpersonenView_default","SchermenView_default","KoppelingenView_default","InstellingenView_default","allowed","isCustomerRouteAllowed","route","import_vue","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","_resolveDynamicComponent","$event","_createElementBlock","_Fragment","_createVNode","RouteView_default","render","feedbackPageUrl","options","isCustomerRouteAllowed","url","section","query","rest","buildHash","mountFeedbackWidget","update","api","script","attributes","name","value","props","__props","emit","__emit","navigation","customerNavigation","identity","part","organization","feedback","route","replaceRoute","setNavigationGuard","confirmDiscard","mountFeedbackWidget","feedbackPageUrl","import_vue","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","$event","_withCtx","_createVNode","CustomerApp_default","render","import_vue","props","__props","emit","__emit","pending","error","submit","result","rpc","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_toDisplayString","_createCommentVNode","_withModifiers","_createBlock","_withCtx","_createTextVNode","_createVNode","$event","InvitationForm_default","render","key","rememberLoginReturn","options","storage","restoreLoginReturn","hash","import_vue","import_vue","isLoginEmail","value","normalized","parsePastedCode","text","length","submitLoginForm","form","node","variable","input","props","__props","emit","__emit","cells","inputs","rootEl","setRef","el","i","value","digits","parsePastedCode","_","commit","focusCell","__expose","c","onInput","event","target","digit","onKeydown","onFocus","onPaste","pasted","firstEmpty","import_vue","_hoisted_1","_hoisted_2","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","_normalizeClass","_Fragment","_renderList","cell","i","el","$event","CodeInput_default","render","import_vue","resendSeconds","useLoginCode","options","email","code","step","error","busy","devCode","cooldown","resendAfter","timer","changeEmail","requestCode","isLoginEmail","result","verifyCode","submitLoginForm","remembered","codeInput","developmentLogins","googleTag","googleError","googlePending","email","code","step","error","busy","devCode","cooldown","changeEmail","requestLoginCode","verifyCode","useLoginCode","input","rpc","result","rememberLoginReturn","pending","shownError","requestCode","account","selectDevelopmentLogin","googleLogin","startSSOLogin","initialEmail","accounts","methods","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","_toDisplayString","_createCommentVNode","_createBlock","_withCtx","_createTextVNode","_withModifiers","_createVNode","$event","_renderList","account","args","LoginForm_default","render","captureMicrosoftCallback","legacyLink","configured","getFrontendData","customer","loading","connectingMicrosoft","hasMicrosoftSignIn","error","denied","logoutOpen","loggingOut","logoutError","invitation","consumeInvitationLink","url","invitationNotice","demoHref","finishInvitation","accepted","loadCustomer","rpc","hash","restoreLoginReturn","isLoggedIn","signOut","previousUrl","logout","organizationSaved","profile","readInfoPage","page","infoPage","updateInfoPage","setupWRDAuth","continueMicrosoftSignIn","input","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","_createBlock","$event","_createCommentVNode","_createStaticVNode","_toDisplayString","_createVNode","_withCtx","_createTextVNode","CustomerAccess_default","render","import_vue","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createBlock","App_default","render","svg","installFavicon","link","onDomReady","installFavicon","mount","App_default","aps"]}